diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..cec96ae --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,35 @@ +cmake_minimum_required(VERSION 3.1) + +project(appname CXX) + +# C++14 +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +# cxx options +if (MSVC) + set(CMAKE_CXX_FLAGS "/DUNICODE /D_UNICODE") + set(CMAKE_CXX_FLAGS_DEBUG "/DEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "/O2 /DQT_NO_DEBUG /DTF_NO_DEBUG") +else() + set(CMAKE_CXX_FLAGS "-Wall -W -D_REENTRANT") + set(CMAKE_CXX_FLAGS_DEBUG "-g") + set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DQT_NO_DEBUG -DTF_NO_DEBUG") +endif() + +# Auto generate moc files +if (POLICY CMP0071) + cmake_policy(SET CMP0071 NEW) +endif() +set(CMAKE_AUTOMOC ON) + +find_package(TreeFrog REQUIRED) +add_subdirectory(helpers) +add_subdirectory(models) +add_subdirectory(views) +add_subdirectory(controllers) + +message(STATUS "Set CMAKE_GENERATOR: ${CMAKE_GENERATOR}") +message(STATUS "Set CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") + +# Cutom target - cmake +include(${PROJECT_SOURCE_DIR}/cmake/TargetCmake.cmake) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..39ec5d9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright 2019 ZHENG Robert + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..018a1b4 --- /dev/null +++ b/Makefile @@ -0,0 +1,432 @@ +############################################################################# +# Makefile for building: itis_app +# Generated by qmake (3.1) (Qt 5.12.8) +# Project: itis_app.pro +# Template: subdirs +# Command: /usr/lib/qt5/bin/qmake -o Makefile itis_app.pro CONFIG+=debug +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +first: make_first +QMAKE = /usr/lib/qt5/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +QINSTALL = /usr/lib/qt5/bin/qmake -install qinstall +QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = itis_app1.0.0 +DISTDIR = /webapp_dez/itis_app/.tmp/itis_app1.0.0 +SUBTARGETS = \ + sub-helpers \ + sub-models \ + sub-views \ + sub-controllers + + +sub-helpers-qmake_all: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug + cd helpers/ && $(MAKE) -f Makefile qmake_all +sub-helpers: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-helpers-make_first-ordered: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-helpers-make_first: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-helpers-all-ordered: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile all +sub-helpers-all: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile all +sub-helpers-clean-ordered: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile clean +sub-helpers-clean: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile clean +sub-helpers-distclean-ordered: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile distclean +sub-helpers-distclean: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile distclean +sub-helpers-install_subtargets-ordered: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile install +sub-helpers-install_subtargets: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile install +sub-helpers-uninstall_subtargets-ordered: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile uninstall +sub-helpers-uninstall_subtargets: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile uninstall +sub-models-qmake_all: sub-helpers-qmake_all FORCE + @test -d models/ || mkdir -p models/ + cd models/ && $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug + cd models/ && $(MAKE) -f Makefile qmake_all +sub-models: FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-models-make_first-ordered: sub-helpers-make_first-ordered FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-models-make_first: FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-models-all-ordered: sub-helpers-all-ordered FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile all +sub-models-all: FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile all +sub-models-clean-ordered: sub-helpers-clean-ordered FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile clean +sub-models-clean: FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile clean +sub-models-distclean-ordered: sub-helpers-distclean-ordered FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile distclean +sub-models-distclean: FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile distclean +sub-models-install_subtargets-ordered: sub-helpers-install_subtargets-ordered FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile install +sub-models-install_subtargets: FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile install +sub-models-uninstall_subtargets-ordered: sub-helpers-uninstall_subtargets-ordered FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile uninstall +sub-models-uninstall_subtargets: FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile uninstall +sub-views-qmake_all: sub-models-qmake_all FORCE + @test -d views/ || mkdir -p views/ + cd views/ && $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug + cd views/ && $(MAKE) -f Makefile qmake_all +sub-views: FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-views-make_first-ordered: sub-models-make_first-ordered FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-views-make_first: FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-views-all-ordered: sub-models-all-ordered FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile all +sub-views-all: FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile all +sub-views-clean-ordered: sub-models-clean-ordered FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile clean +sub-views-clean: FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile clean +sub-views-distclean-ordered: sub-models-distclean-ordered FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile distclean +sub-views-distclean: FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile distclean +sub-views-install_subtargets-ordered: sub-models-install_subtargets-ordered FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile install +sub-views-install_subtargets: FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile install +sub-views-uninstall_subtargets-ordered: sub-models-uninstall_subtargets-ordered FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile uninstall +sub-views-uninstall_subtargets: FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile uninstall +sub-controllers-qmake_all: sub-views-qmake_all FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug + cd controllers/ && $(MAKE) -f Makefile qmake_all +sub-controllers: FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-controllers-make_first-ordered: sub-views-make_first-ordered FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-controllers-make_first: FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile +sub-controllers-all-ordered: sub-views-all-ordered FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile all +sub-controllers-all: FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile all +sub-controllers-clean-ordered: sub-views-clean-ordered FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile clean +sub-controllers-clean: FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile clean +sub-controllers-distclean-ordered: sub-views-distclean-ordered FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile distclean +sub-controllers-distclean: FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile distclean +sub-controllers-install_subtargets-ordered: sub-views-install_subtargets-ordered FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile install +sub-controllers-install_subtargets: FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile install +sub-controllers-uninstall_subtargets-ordered: sub-views-uninstall_subtargets-ordered FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile uninstall +sub-controllers-uninstall_subtargets: FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile uninstall + +Makefile: itis_app.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + itis_app.pro + $(QMAKE) -o Makefile itis_app.pro CONFIG+=debug +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf: +.qmake.stash: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf: +itis_app.pro: +qmake: FORCE + @$(QMAKE) -o Makefile itis_app.pro CONFIG+=debug + +qmake_all: sub-helpers-qmake_all sub-models-qmake_all sub-views-qmake_all sub-controllers-qmake_all FORCE + +make_first: sub-helpers-make_first-ordered sub-models-make_first-ordered sub-views-make_first-ordered sub-controllers-make_first-ordered FORCE +all: sub-helpers-all-ordered sub-models-all-ordered sub-views-all-ordered sub-controllers-all-ordered FORCE +clean: sub-helpers-clean-ordered sub-models-clean-ordered sub-views-clean-ordered sub-controllers-clean-ordered FORCE +distclean: sub-helpers-distclean-ordered sub-models-distclean-ordered sub-views-distclean-ordered sub-controllers-distclean-ordered FORCE + -$(DEL_FILE) Makefile + -$(DEL_FILE) .qmake.stash +install_subtargets: sub-helpers-install_subtargets-ordered sub-models-install_subtargets-ordered sub-views-install_subtargets-ordered sub-controllers-install_subtargets-ordered FORCE +uninstall_subtargets: sub-helpers-uninstall_subtargets-ordered sub-models-uninstall_subtargets-ordered sub-views-uninstall_subtargets-ordered sub-controllers-uninstall_subtargets-ordered FORCE + +sub-helpers-check_ordered: + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile check +sub-models-check_ordered: sub-helpers-check_ordered + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile check +sub-views-check_ordered: sub-models-check_ordered + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile check +sub-controllers-check_ordered: sub-views-check_ordered + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile check +check: sub-helpers-check_ordered sub-models-check_ordered sub-views-check_ordered sub-controllers-check_ordered + +sub-helpers-benchmark_ordered: + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -f Makefile benchmark +sub-models-benchmark_ordered: sub-helpers-benchmark_ordered + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -f Makefile benchmark +sub-views-benchmark_ordered: sub-models-benchmark_ordered + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -f Makefile benchmark +sub-controllers-benchmark_ordered: sub-views-benchmark_ordered + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -f Makefile benchmark +benchmark: sub-helpers-benchmark_ordered sub-models-benchmark_ordered sub-views-benchmark_ordered sub-controllers-benchmark_ordered +install:install_subtargets FORCE + +uninstall: uninstall_subtargets FORCE + +FORCE: + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: sub-helpers-distdir sub-models-distdir sub-views-distdir sub-controllers-distdir FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf .qmake.stash /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf itis_app.pro $(DISTDIR)/ + +sub-helpers-distdir: FORCE + @test -d helpers/ || mkdir -p helpers/ + cd helpers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/helpers/helpers.pro CONFIG+=debug ) && $(MAKE) -e -f Makefile distdir DISTDIR=$(DISTDIR)/helpers + +sub-models-distdir: FORCE + @test -d models/ || mkdir -p models/ + cd models/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/models/models.pro CONFIG+=debug ) && $(MAKE) -e -f Makefile distdir DISTDIR=$(DISTDIR)/models + +sub-views-distdir: FORCE + @test -d views/ || mkdir -p views/ + cd views/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/views/views.pro CONFIG+=debug ) && $(MAKE) -e -f Makefile distdir DISTDIR=$(DISTDIR)/views + +sub-controllers-distdir: FORCE + @test -d controllers/ || mkdir -p controllers/ + cd controllers/ && ( test -e Makefile || $(QMAKE) -o Makefile /webapp_dez/itis_app/controllers/controllers.pro CONFIG+=debug ) && $(MAKE) -e -f Makefile distdir DISTDIR=$(DISTDIR)/controllers + diff --git a/README.md b/README.md new file mode 100644 index 0000000..7c9ca5f --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# itis_digidocu_dev +A RWA for documenting standards of (passive) IT-Infrastructure and Products. Based on digidocu.dev diff --git a/appbase.pri b/appbase.pri new file mode 100644 index 0000000..8d4acf3 --- /dev/null +++ b/appbase.pri @@ -0,0 +1,13 @@ +win32 { + INCLUDEPATH += $$quote($$(TFDIR)\\include) + LIBS += -L$$quote($$(TFDIR)\\bin) + CONFIG(debug, debug|release) { + LIBS += -ltreefrogd1 + } else { + LIBS += -ltreefrog1 + } +} else { + unix:LIBS += -Wl,-rpath,. -Wl,-rpath,/usr/lib -L/usr/lib -ltreefrog + unix:INCLUDEPATH += /usr/include/treefrog + linux-*:LIBS += -lrt +} diff --git a/cmake/CacheClean.cmake b/cmake/CacheClean.cmake new file mode 100644 index 0000000..46abb98 --- /dev/null +++ b/cmake/CacheClean.cmake @@ -0,0 +1,14 @@ +# Clean cache +file(GLOB cmake_generated + ${CMAKE_BINARY_DIR}/CMakeCache.txt + ${CMAKE_BINARY_DIR}/cmake_install.cmake + ${CMAKE_BINARY_DIR}/*/Makefile + ${CMAKE_BINARY_DIR}/*/cmake_install.cmake + ${CMAKE_BINARY_DIR}/views/*.cpp +) + +foreach(file ${cmake_generated}) + if (EXISTS ${file}) + file(REMOVE_RECURSE ${file}) + endif() +endforeach(file) diff --git a/cmake/TargetCmake.cmake b/cmake/TargetCmake.cmake new file mode 100644 index 0000000..9ff392e --- /dev/null +++ b/cmake/TargetCmake.cmake @@ -0,0 +1,8 @@ +# Cutom target - cmake +add_custom_target(cmake + COMMAND ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/cmake/CacheClean.cmake + COMMAND echo "Command: ${CMAKE_COMMAND} -G \"${CMAKE_GENERATOR}\" -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ${PROJECT_SOURCE_DIR}" + COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ${PROJECT_SOURCE_DIR} +) + +message(STATUS "Added a custom target for build: 'cmake'") diff --git a/config/application.ini b/config/application.ini new file mode 100644 index 0000000..f78a101 --- /dev/null +++ b/config/application.ini @@ -0,0 +1,287 @@ +## +## Application settings file +## +[General] + +# Listens for incoming connections on the specified port. +ListenPort=8787 + +# Listens for incoming connections on the specified IP address. If this value +# is empty, equivalent to "0.0.0.0". +ListenAddress= + +# Sets the codec used by 'QObject::tr()' and 'toLocal8Bit()' to the +# QTextCodec for the specified encoding. See QTextCodec class reference. +InternalEncoding=UTF-8 + +# Sets the codec for http output stream to the QTextCodec for the +# specified encoding. See QTextCodec class reference. +HttpOutputEncoding=UTF-8 + +# Sets a language/country pair, such as en_US, ja_JP, etc. +# If this value is empty, the system's locale is used. +Locale= + +# Specify the multiprocessing module, such as thread or epoll. +# thread: multithreading assigned to each socket, available for all platforms +# epoll: scalable I/O event notification (epoll) in single thread, Linux only +MultiProcessingModule=thread + +# Specify the absolute or relative path of the temporary directory +# for HTTP uploaded files. Uses system default if not specified. +UploadTemporaryDirectory=tmp + +# Specify setting files for SQL databases. +SqlDatabaseSettingsFiles=database.ini + +# Specify the setting file for MongoDB. +# To access MongoDB server, uncomment the following line. +#MongoDbSettingsFile=mongodb.ini + +# Specify the setting file for Redis. +# To access Redis server, uncomment the following line. +#RedisSettingsFile=redis.ini + +# Specify the directory path to store SQL query files. +SqlQueriesStoredDirectory=sql/ + +# Determines whether it renders views without controllers directly +# like PHP or not, which views are stored in the directory of +# app/views/direct. By default, this parameter is false. +DirectViewRenderMode=false + +# Specify a file path for system log. +SystemLogFile=log/treefrog.log + +# Specify a file path for SQL query log. +# If it's empty or the line is commented out, output to SQL query log +# is disabled. +SqlQueryLogFile=log/query.log + +# Determines whether the application aborts (to create a core dump +# on Unix systems) or not when it output a fatal message by tFatal() +# method. +ApplicationAbortOnFatal=false + +# This directive specifies the number of bytes that are allowed in +# a request body. 0 means unlimited. +LimitRequestBody=0 + +# If false is specified, the protective function against cross-site request +# forgery never work; otherwise it's enabled. +EnableCsrfProtectionModule=false + +# Enables HTTP method override if true. The following are priorities of +# override. +# - Value of query parameter named '_method' +# - Value of X-HTTP-Method-Override header +# - Value of X-HTTP-Method header +# - Value of X-METHOD-OVERRIDE header +EnableHttpMethodOverride=false + +# Enables the value of X-Forwarded-For header as originating IP address of +# the client, if true. +EnableForwardedForHeader=false + +# Specify IP addresses of the proxy servers to work the feature of +# X-Forwarded-For header. +TrustedProxyServers= + +# Sets the timeout in seconds during which a keep-alive HTTP connection +# will stay open on the server side. The zero value disables keep-alive +# client connections. +HttpKeepAliveTimeout=10 + +# Forces some libraries to be loaded before all others. It means to set +# the LD_PRELOAD environment variable for the application server, Linux +# only. The paths to shared objects, jemalloc or TCMalloc, can be +# specified. +LDPreload= + +# Searches those paths for JavaScript modules if they are not found elsewhere, +# sets to a quoted semicolon-delimited list of relative or absolute paths. +JavaScriptPath="script;node_modules" + +## +## Session section +## +Session.Name=TFSESSION + +# Specify the session store type, such as 'sqlobject', 'file', 'cookie', +# 'mongodb', 'redis', 'cachedb' or plugin module name. +# For 'sqlobject', the settings specified in SqlDatabaseSettingsFiles are used. +# For 'mongodb', the settings specified in MongoDbSettingsFile are used. +# For 'redis', the settings specified in RedisSettingsFile are used. +Session.StoreType=cookie + +# Replaces the session ID with a new one each time one connects, and +# keeps the current session information. +Session.AutoIdRegeneration=false + +# Specifies a Max-Age attribute of the session cookie in seconds. The value 0 +# means "until the browser is closed." +Session.CookieMaxAge=0 + +# Specifies a domain attribute to set in the session cookie. +Session.CookieDomain= + +# Specifies a path attribute to set in the session cookie. Defaults to /. +Session.CookiePath=/ + +# Specifies a value to assert that a cookie must not be sent with cross-origin +# requests; Strict, Lax or None. +Session.CookieSameSite=Lax + +# Probability that the garbage collection starts. +# If 100 specified, the GC of sessions starts at the rate of once per 100 +# accesses. If 0 specified, the GC never starts. +Session.GcProbability=100 + +# Specifies the number of seconds after which session data will be seen as +# 'garbage' and potentially cleaned up. +Session.GcMaxLifeTime=1800 + +# Secret key for verifying cookie session data integrity. +# Enter at least 30 characters and all random. +Session.Secret=5MaymPYg602vepsn0ryIjz9yETuMMH + +# Specify CSRF protection key. +# Uses it in case of cookie session. +Session.CsrfProtectionKey=_csrfId + +## +## MPM thread section +## + +# Number of application server processes to be started. +MPM.thread.MaxAppServers=1 + +# Maximum number of action threads allowed to start simultaneously +# per server process. Set max_connections parameter of the DBMS +# to (MaxAppServers * MaxThreadsPerAppServer) or more. +MPM.thread.MaxThreadsPerAppServer=128 + +## +## MPM epoll section +## + +# Number of application server processes to be started. +MPM.epoll.MaxAppServers=1 + +## +## SystemLog settings +## + +# Specify the system log file name. +SystemLog.FilePath=log/treefrog.log + +# Specify the layout of the system log +# %d : Date-time +# %p : Priority (lowercase) +# %P : Priority (uppercase) +# %t : Thread ID (dec) +# %T : Thread ID (hex) +# %i : PID (dec) +# %I : PID (hex) +# %m : Log message +# %n : Newline code +SystemLog.Layout="%d %5P [%t] %m%n" + +# Specify the date-time format of the system log +SystemLog.DateTimeFormat="yyyy-MM-dd hh:mm:ss" + +## +## AccessLog settings +## + +# Specify the access log file name. +AccessLog.FilePath=log/access.log + +# Specify the layout of the access log. +# %h : Remote host +# %d : Date-time the request was received +# %r : First line of request +# %s : Status code +# %O : Bytes sent, including headers, cannot be zero +# %n : Newline code +AccessLog.Layout="%h %d \"%r\" %s %O%n" + +# Specify the date-time format of the access log +AccessLog.DateTimeFormat="yyyy-MM-dd hh:mm:ss" + +## +## ActionMailer section +## + +# Specify the delivery method such as "smtp" or "sendmail". +# If empty, the mail is not sent. +ActionMailer.DeliveryMethod=smtp + +# Specify the character set of email. The system encodes with this codec, +# and sends the encoded mail. +ActionMailer.CharacterSet=UTF-8 + +# Enables the delayed delivery of email if true. If enabled, deliver() method +# only adds the email to the queue and therefore the method doesn't block. +ActionMailer.DelayedDelivery=true + +## +## ActionMailer SMTP section +## + +# Specify the connection's host name or IP address. +ActionMailer.smtp.HostName=smtp.googlemail.com + +# Specify the connection's port number. +ActionMailer.smtp.Port=587 + +# Enables SMTP authentication if true; disables SMTP +# authentication if false. +ActionMailer.smtp.Authentication=true + +# Requires TLS encrypted communication to SMTP server if true. +ActionMailer.smtp.RequireTLS=true + +# Specify the user name for SMTP authentication. +ActionMailer.smtp.UserName=zheng.bote@googlemail.com + +# Specify the password for SMTP authentication. +ActionMailer.smtp.Password=ZB_Bamboo65 + +# Enables POP before SMTP authentication if true. +ActionMailer.smtp.EnablePopBeforeSmtp=false + +# Specify the POP host name for POP before SMTP. +ActionMailer.smtp.PopServer.HostName= + +# Specify the port number for POP. +ActionMailer.smtp.PopServer.Port=110 + +# Enables APOP authentication for the POP server if true. +ActionMailer.smtp.PopServer.EnableApop=false + +## +## ActionMailer Sendmail section +## + +ActionMailer.sendmail.CommandLocation=/usr/sbin/sendmail + +## +## Cache section +## + +# Specify the settings file to enable the cache module. +# To enable cache, uncomment the following line. +#Cache.SettingsFile=cache.ini + +# Specify the cache backend, such as 'sqlite', 'mongodb' +# or 'redis'. +Cache.Backend=sqlite + +# Probability of starting garbage collection (GC) for cache. +# If 100 is specified, GC will be started at a rate of once per 100 +# sets. If 0 is specified, the GC never starts. +Cache.GcProbability=100 + +# If true, enable LZ4 compression when storing data. +Cache.EnableCompression=true diff --git a/config/cache.ini b/config/cache.ini new file mode 100644 index 0000000..e444213 --- /dev/null +++ b/config/cache.ini @@ -0,0 +1,31 @@ +# +# Cache settings +# + +[sqlite] +DatabaseName=tmp/cachedb +HostName= +Port= +UserName= +Password= +ConnectOptions= +PostOpenStatements=PRAGMA journal_mode=WAL; PRAGMA busy_timeout=5000; PRAGMA synchronous=NORMAL; VACUUM; + +[redis] +DatabaseName= +HostName=localhost +Port= +UserName= +Password= +ConnectOptions= +PostOpenStatements=SELECT 1; + +[mongodb] +DatabaseName=mdb +HostName=localhost +Port= +UserName= +Password= +ConnectOptions= +PostOpenStatements= + diff --git a/config/database.ini b/config/database.ini new file mode 100644 index 0000000..7ed3db0 --- /dev/null +++ b/config/database.ini @@ -0,0 +1,50 @@ +# +# Database settings file +# + +# The currently available driver types are: +# [Driver Type] [Description] +# QDB2 IBM DB2 +# QIBASE Borland InterBase Driver +# QMYSQL MySQL Driver +# QOCI Oracle Call Interface Driver +# QODBC ODBC Driver (includes Microsoft SQL Server) +# QPSQL PostgreSQL Driver +# QSQLITE SQLite version 3 or above +# QSQLITE2 SQLite version 2 +# +# In case of SQLite, specify the DB file path to DatabaseName as follows; +# DatabaseName=db/dbfile + +[dev] +DriverType=QPSQL +DatabaseName=itis_dev +HostName=itis_dbserver +Port=5432 +UserName= +Password= +ConnectOptions= +PostOpenStatements= +EnableUpsert=false + +[test] +DriverType=QPSQL +DatabaseName=itis_test +HostName=itis_dbserver +Port=5432 +UserName= +Password= +ConnectOptions= +PostOpenStatements= +EnableUpsert=false + +[product] +DriverType=QPSQL +DatabaseName=itis_prod +HostName=itis_dbserver +Port= +UserName= +Password= +ConnectOptions= +PostOpenStatements= +EnableUpsert=false diff --git a/config/development.ini b/config/development.ini new file mode 100644 index 0000000..e4e7957 --- /dev/null +++ b/config/development.ini @@ -0,0 +1,29 @@ +## +## Development settings file +## +[General] + +## +## Template system section +## + +# Specify the template system of view, ERB or Otama. +TemplateSystem=ERB + + +## +## ERB section +## + +# Specify the trim mode of ERB. +# 0 : off +# 1 : normal trim mode +# 2 : strong trim mode +Erb.DefaultTrimMode=1 + + +## +## Otama section +## +Otama.ReplaceMarker=%% + diff --git a/config/internet_media_types.ini b/config/internet_media_types.ini new file mode 100644 index 0000000..f46567b --- /dev/null +++ b/config/internet_media_types.ini @@ -0,0 +1,58 @@ +# +# Internet media type settings file +# +[General] + +# application +pdf=application/pdf +js=application/javascript +json=application/json +zip=application/zip +ogg=application/ogg +ogx=application/ogg +doc=application/msword +docx=application/vnd.openxmlformats-officedocument.wordprocessingml.document +xls=application/vnd.ms-excel +xlsx=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet +ppt=application/vnd.ms-powerpoint +pptx=application/vnd.openxmlformats-officedocument.presentationml.presentation +odt=application/vnd.oasis.opendocument.text +xml=application/xml +rss=application/rss+xml + +# audio +oga=audio/ogg +mp3=audio/mpeg +m4a=audio/mp4 + +# image +jpeg=image/jpeg +jpg=image/jpeg +gif=image/gif +png=image/png +tif=image/tiff +tiff=image/tiff +ico=image/vnd.microsoft.icon +svg=image/svg+xml + +# text +txt=text/plain +html=text/html +htm=text/html +shtml=text/html +rtf=text/rtf +css=text/css +csv=text/csv + +# video +ogv=video/ogg +3gp=video/3gpp +3gpp=video/3gpp +mpg=video/mpeg +mpeg=video/mpeg +mp4=video/mp4 +mov=video/quicktime +webm=video/webm +flv=video/x-flv +wmv=video/x-ms-wmv +avi=video/x-msvideo \ No newline at end of file diff --git a/config/logger.ini b/config/logger.ini new file mode 100644 index 0000000..728f44a --- /dev/null +++ b/config/logger.ini @@ -0,0 +1,38 @@ +## +## Logger settings file +## +[General] + +# Specify loggers +Loggers=FileLogger + +# Specify the default log text encoding. If not specified, +# the codec will be based on a system locale. +DefaultTextEncoding= + +## +## FileLogger section +## + +# Specify the application log file name. +FileLogger.Target=log/app.log + +# Specify the layout of FileLogger. +# %d : date-time +# %p : priority (lowercase) +# %P : priority (uppercase) +# %t : thread ID (dec) +# %T : thread ID (hex) +# %i : PID (dec) +# %I : PID (hex) +# %m : log message +# %n : newline code +FileLogger.Layout="%d %5P [%t] %m%n" + +# Specify the date-time format of FileLogger, see also QDateTime +# class reference. +FileLogger.DateTimeFormat="yyyy-MM-dd hh:mm:ss" + +# Outputs the logs of equal or higher priority than this. +FileLogger.Threshold=debug + diff --git a/config/mongodb.ini b/config/mongodb.ini new file mode 100644 index 0000000..c67b3b8 --- /dev/null +++ b/config/mongodb.ini @@ -0,0 +1,27 @@ +# +# MongoDB settings file +# + +[dev] +DatabaseName=mdb +HostName=localhost +Port= +UserName= +Password= +ConnectOptions= + +[test] +DatabaseName= +HostName=localhost +Port= +UserName= +Password= +ConnectOptions= + +[product] +DatabaseName= +HostName=localhost +Port= +UserName= +Password= +ConnectOptions= diff --git a/config/redis.ini b/config/redis.ini new file mode 100644 index 0000000..6bdf095 --- /dev/null +++ b/config/redis.ini @@ -0,0 +1,27 @@ +# +# Redis settings file +# + +[dev] +HostName=localhost +Port= +UserName= +Password= +ConnectOptions= +PostOpenStatements= + +[test] +HostName= +Port= +UserName= +Password= +ConnectOptions= +PostOpenStatements= + +[product] +HostName= +Port= +UserName= +Password= +ConnectOptions= +PostOpenStatements= diff --git a/config/routes.cfg b/config/routes.cfg new file mode 100644 index 0000000..97a6e37 --- /dev/null +++ b/config/routes.cfg @@ -0,0 +1,15 @@ +# routes.cfg + +# The priority is based upon order of creation: +# first entry -> highest priority. +# +# ':param' signifies one parameter. +# ':params' signifies two or more parameters. + +# Samples of regular routes: +# match / Book.index +# get /Book/:param Book.show +# post /Book/new Book.create +# put /Book/:param Book.save +# delete /Book/:param Book.remove +# get / /index.html diff --git a/config/validation.ini b/config/validation.ini new file mode 100644 index 0000000..0566bf6 --- /dev/null +++ b/config/validation.ini @@ -0,0 +1,63 @@ +# +# Validation settings file. +# +[General] + +# Sets the date format for validation of date string. +# If you use the expression of short or long month name, note that the +# application's locale settings. See QDate class reference. +DateFormat="yyyy-MM-dd" + +# Sets the time format for validation of time string. +# See QTime class reference. +TimeFormat="hh:mm:ss" + +# Sets the date-time format for validation of date-time string. +# If you use the expression of short or long month name, note that the +# application's locale settings. See QDateTime class reference. +DateTimeFormat="yyyy-MM-ddThh:mm:ss" + +# +# Sets the default error messages below. +# +[ErrorMessage] + +# Required error +0=This value is required. + +# MaxLength error +1=This value is too long. + +# MinLength error +2=This value is too short. + +# IntMax error +3=This value is too big. + +# IntMin error +4=This value is too small. + +# DoubleMax error +5=This value is too big. + +# DoubleMin error +6=This value is too small. + +# EMailAddress error +7=This value is not email address. + +# Url error +8=This value is invalid URL. + +# Date error +9=This value is invalid date. + +# Time error +10=This value is invalid time. + +# DateTime Error +11=This value is invalid date or time. + +# UserDefined error +12=This value is bad format. + diff --git a/controllers/CMakeLists.txt b/controllers/CMakeLists.txt new file mode 100644 index 0000000..f7f8510 --- /dev/null +++ b/controllers/CMakeLists.txt @@ -0,0 +1,45 @@ +add_definitions(-DTF_DLL) + +find_package(Qt5 COMPONENTS Core Network Xml Sql REQUIRED) + +if (NOT Qt5_FOUND) + message(FATAL_ERROR "Qt5 was not found. Consider setting QT5_CMAKE_PATH to the Qt5Config.cmake directory.") +endif() + +file(GLOB controller_headers ${PROJECT_SOURCE_DIR}/controllers/*.h) +file(GLOB controller_srcs ${PROJECT_SOURCE_DIR}/controllers/*.cpp) + +add_library(controller SHARED + ${controller_headers} + ${controller_srcs} +) +target_include_directories(controller PUBLIC + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5Xml_INCLUDE_DIRS} + ${Qt5Sql_INCLUDE_DIRS} + ${TreeFrog_INCLUDE_DIR} + ${PROJECT_SOURCE_DIR}/helpers + ${PROJECT_SOURCE_DIR}/models +) +target_link_libraries(controller + Qt5::Core + Qt5::Network + Qt5::Xml + Qt5::Sql + ${TreeFrog_LIB} + helper + model +) +set_target_properties(controller PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib + ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/lib + ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/lib + SOVERSION 1.0 +) +add_dependencies(controller + helper + model +) diff --git a/controllers/Makefile b/controllers/Makefile new file mode 100644 index 0000000..df4ab20 --- /dev/null +++ b/controllers/Makefile @@ -0,0 +1,1012 @@ +############################################################################# +# Makefile for building: libcontroller.so.1.0.0 +# Generated by qmake (3.1) (Qt 5.12.8) +# Project: controllers.pro +# Template: lib +# Command: /usr/lib/qt5/bin/qmake -o Makefile controllers.pro CONFIG+=debug +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DTF_DLL -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_SQL_LIB -DQT_XML_LIB -DQT_CORE_LIB +CFLAGS = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES) +CXXFLAGS = -pipe -g -std=gnu++1y -Wall -W -D_REENTRANT -fPIC $(DEFINES) +INCPATH = -I. -I../helpers -I../models -isystem /usr/include/treefrog -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtQml -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtSql -isystem /usr/include/x86_64-linux-gnu/qt5/QtXml -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I.obj -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ +QMAKE = /usr/lib/qt5/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +QINSTALL = /usr/lib/qt5/bin/qmake -install qinstall +QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = controller1.0.0 +DISTDIR = /webapp_dez/itis_app/controllers/.obj/controller1.0.0 +LINK = g++ +LFLAGS = -shared -Wl,-soname,libcontroller.so.1 +LIBS = $(SUBLIBS) -L../lib -lhelper -lmodel -Wl,-rpath,. -Wl,-rpath,/usr/lib -L/usr/lib -ltreefrog -lrt /usr/lib/x86_64-linux-gnu/libQt5Qml.so /usr/lib/x86_64-linux-gnu/libQt5Network.so /usr/lib/x86_64-linux-gnu/libQt5Sql.so /usr/lib/x86_64-linux-gnu/libQt5Xml.so /usr/lib/x86_64-linux-gnu/libQt5Core.so -lpthread +AR = ar cqs +RANLIB = +SED = sed +STRIP = strip + +####### Output directory + +OBJECTS_DIR = .obj/ + +####### Files + +SOURCES = applicationcontroller.cpp \ + standardsdatacontroller.cpp \ + standardsmetacontroller.cpp \ + stdsystemcontroller.cpp \ + webmenucontroller.cpp \ + accountcontroller.cpp \ + admincontroller.cpp \ + portaladmincontroller.cpp \ + objectscontroller.cpp \ + catclassescontroller.cpp \ + acclassescontroller.cpp \ + pcclassescontroller.cpp \ + annexdatacontroller.cpp \ + annexmetacontroller.cpp \ + glossarcontroller.cpp \ + informationmailer.cpp \ + standardsdatacommentscontroller.cpp \ + appvarscontroller.cpp \ + itisnewscontroller.cpp \ + actionrightscontroller.cpp \ + itisgroupscontroller.cpp \ + annexdatacommentscontroller.cpp \ + releasemgmtcontroller.cpp \ + lenkinfocontroller.cpp .obj/moc_applicationcontroller.cpp \ + .obj/moc_standardsdatacontroller.cpp \ + .obj/moc_standardsmetacontroller.cpp \ + .obj/moc_stdsystemcontroller.cpp \ + .obj/moc_webmenucontroller.cpp \ + .obj/moc_accountcontroller.cpp \ + .obj/moc_admincontroller.cpp \ + .obj/moc_portaladmincontroller.cpp \ + .obj/moc_objectscontroller.cpp \ + .obj/moc_catclassescontroller.cpp \ + .obj/moc_acclassescontroller.cpp \ + .obj/moc_pcclassescontroller.cpp \ + .obj/moc_annexdatacontroller.cpp \ + .obj/moc_annexmetacontroller.cpp \ + .obj/moc_glossarcontroller.cpp \ + .obj/moc_standardsdatacommentscontroller.cpp \ + .obj/moc_appvarscontroller.cpp \ + .obj/moc_itisnewscontroller.cpp \ + .obj/moc_actionrightscontroller.cpp \ + .obj/moc_itisgroupscontroller.cpp \ + .obj/moc_annexdatacommentscontroller.cpp \ + .obj/moc_releasemgmtcontroller.cpp \ + .obj/moc_lenkinfocontroller.cpp +OBJECTS = .obj/applicationcontroller.o \ + .obj/standardsdatacontroller.o \ + .obj/standardsmetacontroller.o \ + .obj/stdsystemcontroller.o \ + .obj/webmenucontroller.o \ + .obj/accountcontroller.o \ + .obj/admincontroller.o \ + .obj/portaladmincontroller.o \ + .obj/objectscontroller.o \ + .obj/catclassescontroller.o \ + .obj/acclassescontroller.o \ + .obj/pcclassescontroller.o \ + .obj/annexdatacontroller.o \ + .obj/annexmetacontroller.o \ + .obj/glossarcontroller.o \ + .obj/informationmailer.o \ + .obj/standardsdatacommentscontroller.o \ + .obj/appvarscontroller.o \ + .obj/itisnewscontroller.o \ + .obj/actionrightscontroller.o \ + .obj/itisgroupscontroller.o \ + .obj/annexdatacommentscontroller.o \ + .obj/releasemgmtcontroller.o \ + .obj/lenkinfocontroller.o \ + .obj/moc_applicationcontroller.o \ + .obj/moc_standardsdatacontroller.o \ + .obj/moc_standardsmetacontroller.o \ + .obj/moc_stdsystemcontroller.o \ + .obj/moc_webmenucontroller.o \ + .obj/moc_accountcontroller.o \ + .obj/moc_admincontroller.o \ + .obj/moc_portaladmincontroller.o \ + .obj/moc_objectscontroller.o \ + .obj/moc_catclassescontroller.o \ + .obj/moc_acclassescontroller.o \ + .obj/moc_pcclassescontroller.o \ + .obj/moc_annexdatacontroller.o \ + .obj/moc_annexmetacontroller.o \ + .obj/moc_glossarcontroller.o \ + .obj/moc_standardsdatacommentscontroller.o \ + .obj/moc_appvarscontroller.o \ + .obj/moc_itisnewscontroller.o \ + .obj/moc_actionrightscontroller.o \ + .obj/moc_itisgroupscontroller.o \ + .obj/moc_annexdatacommentscontroller.o \ + .obj/moc_releasemgmtcontroller.o \ + .obj/moc_lenkinfocontroller.o +DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + ../.qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + ../appbase.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + controllers.pro applicationcontroller.h \ + standardsdatacontroller.h \ + standardsmetacontroller.h \ + stdsystemcontroller.h \ + webmenucontroller.h \ + accountcontroller.h \ + admincontroller.h \ + portaladmincontroller.h \ + objectscontroller.h \ + catclassescontroller.h \ + acclassescontroller.h \ + pcclassescontroller.h \ + annexdatacontroller.h \ + annexmetacontroller.h \ + glossarcontroller.h \ + informationmailer.h \ + standardsdatacommentscontroller.h \ + appvarscontroller.h \ + itisnewscontroller.h \ + actionrightscontroller.h \ + itisgroupscontroller.h \ + annexdatacommentscontroller.h \ + releasemgmtcontroller.h \ + lenkinfocontroller.h applicationcontroller.cpp \ + standardsdatacontroller.cpp \ + standardsmetacontroller.cpp \ + stdsystemcontroller.cpp \ + webmenucontroller.cpp \ + accountcontroller.cpp \ + admincontroller.cpp \ + portaladmincontroller.cpp \ + objectscontroller.cpp \ + catclassescontroller.cpp \ + acclassescontroller.cpp \ + pcclassescontroller.cpp \ + annexdatacontroller.cpp \ + annexmetacontroller.cpp \ + glossarcontroller.cpp \ + informationmailer.cpp \ + standardsdatacommentscontroller.cpp \ + appvarscontroller.cpp \ + itisnewscontroller.cpp \ + actionrightscontroller.cpp \ + itisgroupscontroller.cpp \ + annexdatacommentscontroller.cpp \ + releasemgmtcontroller.cpp \ + lenkinfocontroller.cpp +QMAKE_TARGET = controller +DESTDIR = ../lib/ +TARGET = libcontroller.so.1.0.0 +TARGETA = ../lib/libcontroller.a +TARGET0 = libcontroller.so +TARGETD = libcontroller.so.1.0.0 +TARGET1 = libcontroller.so.1 +TARGET2 = libcontroller.so.1.0 + + +first: all +####### Build rules + +../lib/libcontroller.so.1.0.0: $(OBJECTS) $(SUBLIBS) $(OBJCOMP) + @test -d ../lib/ || mkdir -p ../lib/ + -$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) $(OBJCOMP) + -ln -s $(TARGET) $(TARGET0) + -ln -s $(TARGET) $(TARGET1) + -ln -s $(TARGET) $(TARGET2) + -$(DEL_FILE) ../lib/$(TARGET) + -$(MOVE) $(TARGET) ../lib/$(TARGET) + -$(DEL_FILE) ../lib/$(TARGET0) + -$(DEL_FILE) ../lib/$(TARGET1) + -$(DEL_FILE) ../lib/$(TARGET2) + -$(MOVE) $(TARGET0) ../lib/$(TARGET0) + -$(MOVE) $(TARGET1) ../lib/$(TARGET1) + -$(MOVE) $(TARGET2) ../lib/$(TARGET2) + + + +staticlib: ../lib/libcontroller.a + +../lib/libcontroller.a: $(OBJECTS) $(OBJCOMP) + -$(DEL_FILE) $(TARGETA) + $(AR) $(TARGETA) $(OBJECTS) + +Makefile: controllers.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + ../.qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + ../appbase.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + controllers.pro + $(QMAKE) -o Makefile controllers.pro CONFIG+=debug +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf: +../.qmake.stash: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf: +../appbase.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf: +controllers.pro: +qmake: FORCE + @$(QMAKE) -o Makefile controllers.pro CONFIG+=debug + +qmake_all: FORCE + + +all: Makefile ../lib/libcontroller.so.1.0.0 + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ + $(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/ + $(COPY_FILE) --parents applicationcontroller.h standardsdatacontroller.h standardsmetacontroller.h stdsystemcontroller.h webmenucontroller.h accountcontroller.h admincontroller.h portaladmincontroller.h objectscontroller.h catclassescontroller.h acclassescontroller.h pcclassescontroller.h annexdatacontroller.h annexmetacontroller.h glossarcontroller.h informationmailer.h standardsdatacommentscontroller.h appvarscontroller.h itisnewscontroller.h actionrightscontroller.h itisgroupscontroller.h annexdatacommentscontroller.h releasemgmtcontroller.h lenkinfocontroller.h $(DISTDIR)/ + $(COPY_FILE) --parents applicationcontroller.cpp standardsdatacontroller.cpp standardsmetacontroller.cpp stdsystemcontroller.cpp webmenucontroller.cpp accountcontroller.cpp admincontroller.cpp portaladmincontroller.cpp objectscontroller.cpp catclassescontroller.cpp acclassescontroller.cpp pcclassescontroller.cpp annexdatacontroller.cpp annexmetacontroller.cpp glossarcontroller.cpp informationmailer.cpp standardsdatacommentscontroller.cpp appvarscontroller.cpp itisnewscontroller.cpp actionrightscontroller.cpp itisgroupscontroller.cpp annexdatacommentscontroller.cpp releasemgmtcontroller.cpp lenkinfocontroller.cpp $(DISTDIR)/ + + +clean: compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +distclean: clean + -$(DEL_FILE) ../lib/$(TARGET) + -$(DEL_FILE) ../lib/$(TARGET0) ../lib/$(TARGET1) ../lib/$(TARGET2) $(TARGETA) + -$(DEL_FILE) Makefile + + +####### Sub-libraries + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_moc_predefs_make_all: .obj/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) .obj/moc_predefs.h +.obj/moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + g++ -pipe -g -std=gnu++1y -Wall -W -dM -E -o .obj/moc_predefs.h /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + +compiler_moc_header_make_all: .obj/moc_applicationcontroller.cpp .obj/moc_standardsdatacontroller.cpp .obj/moc_standardsmetacontroller.cpp .obj/moc_stdsystemcontroller.cpp .obj/moc_webmenucontroller.cpp .obj/moc_accountcontroller.cpp .obj/moc_admincontroller.cpp .obj/moc_portaladmincontroller.cpp .obj/moc_objectscontroller.cpp .obj/moc_catclassescontroller.cpp .obj/moc_acclassescontroller.cpp .obj/moc_pcclassescontroller.cpp .obj/moc_annexdatacontroller.cpp .obj/moc_annexmetacontroller.cpp .obj/moc_glossarcontroller.cpp .obj/moc_standardsdatacommentscontroller.cpp .obj/moc_appvarscontroller.cpp .obj/moc_itisnewscontroller.cpp .obj/moc_actionrightscontroller.cpp .obj/moc_itisgroupscontroller.cpp .obj/moc_annexdatacommentscontroller.cpp .obj/moc_releasemgmtcontroller.cpp .obj/moc_lenkinfocontroller.cpp +compiler_moc_header_clean: + -$(DEL_FILE) .obj/moc_applicationcontroller.cpp .obj/moc_standardsdatacontroller.cpp .obj/moc_standardsmetacontroller.cpp .obj/moc_stdsystemcontroller.cpp .obj/moc_webmenucontroller.cpp .obj/moc_accountcontroller.cpp .obj/moc_admincontroller.cpp .obj/moc_portaladmincontroller.cpp .obj/moc_objectscontroller.cpp .obj/moc_catclassescontroller.cpp .obj/moc_acclassescontroller.cpp .obj/moc_pcclassescontroller.cpp .obj/moc_annexdatacontroller.cpp .obj/moc_annexmetacontroller.cpp .obj/moc_glossarcontroller.cpp .obj/moc_standardsdatacommentscontroller.cpp .obj/moc_appvarscontroller.cpp .obj/moc_itisnewscontroller.cpp .obj/moc_actionrightscontroller.cpp .obj/moc_itisgroupscontroller.cpp .obj/moc_annexdatacommentscontroller.cpp .obj/moc_releasemgmtcontroller.cpp .obj/moc_lenkinfocontroller.cpp +.obj/moc_applicationcontroller.cpp: applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include applicationcontroller.h -o .obj/moc_applicationcontroller.cpp + +.obj/moc_standardsdatacontroller.cpp: standardsdatacontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include standardsdatacontroller.h -o .obj/moc_standardsdatacontroller.cpp + +.obj/moc_standardsmetacontroller.cpp: standardsmetacontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include standardsmetacontroller.h -o .obj/moc_standardsmetacontroller.cpp + +.obj/moc_stdsystemcontroller.cpp: stdsystemcontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include stdsystemcontroller.h -o .obj/moc_stdsystemcontroller.cpp + +.obj/moc_webmenucontroller.cpp: webmenucontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include webmenucontroller.h -o .obj/moc_webmenucontroller.cpp + +.obj/moc_accountcontroller.cpp: accountcontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include accountcontroller.h -o .obj/moc_accountcontroller.cpp + +.obj/moc_admincontroller.cpp: admincontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include admincontroller.h -o .obj/moc_admincontroller.cpp + +.obj/moc_portaladmincontroller.cpp: portaladmincontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include portaladmincontroller.h -o .obj/moc_portaladmincontroller.cpp + +.obj/moc_objectscontroller.cpp: objectscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include objectscontroller.h -o .obj/moc_objectscontroller.cpp + +.obj/moc_catclassescontroller.cpp: catclassescontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include catclassescontroller.h -o .obj/moc_catclassescontroller.cpp + +.obj/moc_acclassescontroller.cpp: acclassescontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include acclassescontroller.h -o .obj/moc_acclassescontroller.cpp + +.obj/moc_pcclassescontroller.cpp: pcclassescontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include pcclassescontroller.h -o .obj/moc_pcclassescontroller.cpp + +.obj/moc_annexdatacontroller.cpp: annexdatacontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include annexdatacontroller.h -o .obj/moc_annexdatacontroller.cpp + +.obj/moc_annexmetacontroller.cpp: annexmetacontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include annexmetacontroller.h -o .obj/moc_annexmetacontroller.cpp + +.obj/moc_glossarcontroller.cpp: glossarcontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include glossarcontroller.h -o .obj/moc_glossarcontroller.cpp + +.obj/moc_standardsdatacommentscontroller.cpp: standardsdatacommentscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include standardsdatacommentscontroller.h -o .obj/moc_standardsdatacommentscontroller.cpp + +.obj/moc_appvarscontroller.cpp: appvarscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include appvarscontroller.h -o .obj/moc_appvarscontroller.cpp + +.obj/moc_itisnewscontroller.cpp: itisnewscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include itisnewscontroller.h -o .obj/moc_itisnewscontroller.cpp + +.obj/moc_actionrightscontroller.cpp: actionrightscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include actionrightscontroller.h -o .obj/moc_actionrightscontroller.cpp + +.obj/moc_itisgroupscontroller.cpp: itisgroupscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include itisgroupscontroller.h -o .obj/moc_itisgroupscontroller.cpp + +.obj/moc_annexdatacommentscontroller.cpp: annexdatacommentscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include annexdatacommentscontroller.h -o .obj/moc_annexdatacommentscontroller.cpp + +.obj/moc_releasemgmtcontroller.cpp: releasemgmtcontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include releasemgmtcontroller.h -o .obj/moc_releasemgmtcontroller.cpp + +.obj/moc_lenkinfocontroller.cpp: lenkinfocontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/controllers/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/controllers -I/webapp_dez/itis_app/helpers -I/webapp_dez/itis_app/models -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include lenkinfocontroller.h -o .obj/moc_lenkinfocontroller.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_predefs_clean compiler_moc_header_clean + +####### Compile + +.obj/applicationcontroller.o: applicationcontroller.cpp applicationcontroller.h \ + ../helpers/applicationhelper.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/applicationcontroller.o applicationcontroller.cpp + +.obj/standardsdatacontroller.o: standardsdatacontroller.cpp standardsdatacontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/standardsdata.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h \ + ../models/objects.h \ + ../models/catclasses.h \ + ../models/stdsystem.h \ + ../models/acclasses.h \ + ../models/pcclasses.h \ + ../models/standardsmeta.h \ + ../models/standardsdatawaste.h \ + ../models/standardsdatacomments.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/standardsdatacontroller.o standardsdatacontroller.cpp + +.obj/standardsmetacontroller.o: standardsmetacontroller.cpp standardsmetacontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/standardsmeta.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/standardsmetacontroller.o standardsmetacontroller.cpp + +.obj/stdsystemcontroller.o: stdsystemcontroller.cpp stdsystemcontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/stdsystem.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/stdsystemcontroller.o stdsystemcontroller.cpp + +.obj/webmenucontroller.o: webmenucontroller.cpp webmenucontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/webmenu.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/webmenucontroller.o webmenucontroller.cpp + +.obj/accountcontroller.o: accountcontroller.cpp accountcontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/sqlobjects/itisuserobject.h \ + informationmailer.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/accountcontroller.o accountcontroller.cpp + +.obj/admincontroller.o: admincontroller.cpp admincontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/admincontroller.o admincontroller.cpp + +.obj/portaladmincontroller.o: portaladmincontroller.cpp portaladmincontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/portaladmincontroller.o portaladmincontroller.cpp + +.obj/objectscontroller.o: objectscontroller.cpp objectscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/objects.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/objectscontroller.o objectscontroller.cpp + +.obj/catclassescontroller.o: catclassescontroller.cpp catclassescontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/catclasses.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/catclassescontroller.o catclassescontroller.cpp + +.obj/acclassescontroller.o: acclassescontroller.cpp acclassescontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/acclasses.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/acclassescontroller.o acclassescontroller.cpp + +.obj/pcclassescontroller.o: pcclassescontroller.cpp pcclassescontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/pcclasses.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/pcclassescontroller.o pcclassescontroller.cpp + +.obj/annexdatacontroller.o: annexdatacontroller.cpp annexdatacontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/annexdata.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h \ + ../models/objects.h \ + ../models/catclasses.h \ + ../models/stdsystem.h \ + ../models/acclasses.h \ + ../models/pcclasses.h \ + ../models/annexmeta.h \ + ../models/annexdatawaste.h \ + ../models/annexdatacomments.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/annexdatacontroller.o annexdatacontroller.cpp + +.obj/annexmetacontroller.o: annexmetacontroller.cpp annexmetacontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/annexmeta.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/annexmetacontroller.o annexmetacontroller.cpp + +.obj/glossarcontroller.o: glossarcontroller.cpp glossarcontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/glossar.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/glossarcontroller.o glossarcontroller.cpp + +.obj/informationmailer.o: informationmailer.cpp informationmailer.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/informationmailer.o informationmailer.cpp + +.obj/standardsdatacommentscontroller.o: standardsdatacommentscontroller.cpp standardsdatacommentscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/standardsdatacomments.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/standardsdatacommentscontroller.o standardsdatacommentscontroller.cpp + +.obj/appvarscontroller.o: appvarscontroller.cpp appvarscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/appvars.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/appvarscontroller.o appvarscontroller.cpp + +.obj/itisnewscontroller.o: itisnewscontroller.cpp itisnewscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/itisnews.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/itisnewscontroller.o itisnewscontroller.cpp + +.obj/actionrightscontroller.o: actionrightscontroller.cpp actionrightscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/actionrights.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/actionrightscontroller.o actionrightscontroller.cpp + +.obj/itisgroupscontroller.o: itisgroupscontroller.cpp itisgroupscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/itisgroupscontroller.o itisgroupscontroller.cpp + +.obj/annexdatacommentscontroller.o: annexdatacommentscontroller.cpp annexdatacommentscontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/annexdatacomments.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/annexdatacommentscontroller.o annexdatacommentscontroller.cpp + +.obj/releasemgmtcontroller.o: releasemgmtcontroller.cpp releasemgmtcontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/releasemgmt.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h \ + ../models/catclasses.h \ + ../models/releaseannex.h \ + ../models/lenkinfo.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/releasemgmtcontroller.o releasemgmtcontroller.cpp + +.obj/lenkinfocontroller.o: lenkinfocontroller.cpp lenkinfocontroller.h \ + applicationcontroller.h \ + ../helpers/applicationhelper.h \ + ../models/lenkinfo.h \ + ../models/itisuser.h \ + ../models/itisgroups.h \ + accountcontroller.h \ + ../models/actionrights.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/lenkinfocontroller.o lenkinfocontroller.cpp + +.obj/moc_applicationcontroller.o: .obj/moc_applicationcontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_applicationcontroller.o .obj/moc_applicationcontroller.cpp + +.obj/moc_standardsdatacontroller.o: .obj/moc_standardsdatacontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_standardsdatacontroller.o .obj/moc_standardsdatacontroller.cpp + +.obj/moc_standardsmetacontroller.o: .obj/moc_standardsmetacontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_standardsmetacontroller.o .obj/moc_standardsmetacontroller.cpp + +.obj/moc_stdsystemcontroller.o: .obj/moc_stdsystemcontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_stdsystemcontroller.o .obj/moc_stdsystemcontroller.cpp + +.obj/moc_webmenucontroller.o: .obj/moc_webmenucontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_webmenucontroller.o .obj/moc_webmenucontroller.cpp + +.obj/moc_accountcontroller.o: .obj/moc_accountcontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_accountcontroller.o .obj/moc_accountcontroller.cpp + +.obj/moc_admincontroller.o: .obj/moc_admincontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_admincontroller.o .obj/moc_admincontroller.cpp + +.obj/moc_portaladmincontroller.o: .obj/moc_portaladmincontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_portaladmincontroller.o .obj/moc_portaladmincontroller.cpp + +.obj/moc_objectscontroller.o: .obj/moc_objectscontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_objectscontroller.o .obj/moc_objectscontroller.cpp + +.obj/moc_catclassescontroller.o: .obj/moc_catclassescontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_catclassescontroller.o .obj/moc_catclassescontroller.cpp + +.obj/moc_acclassescontroller.o: .obj/moc_acclassescontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_acclassescontroller.o .obj/moc_acclassescontroller.cpp + +.obj/moc_pcclassescontroller.o: .obj/moc_pcclassescontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_pcclassescontroller.o .obj/moc_pcclassescontroller.cpp + +.obj/moc_annexdatacontroller.o: .obj/moc_annexdatacontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_annexdatacontroller.o .obj/moc_annexdatacontroller.cpp + +.obj/moc_annexmetacontroller.o: .obj/moc_annexmetacontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_annexmetacontroller.o .obj/moc_annexmetacontroller.cpp + +.obj/moc_glossarcontroller.o: .obj/moc_glossarcontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_glossarcontroller.o .obj/moc_glossarcontroller.cpp + +.obj/moc_standardsdatacommentscontroller.o: .obj/moc_standardsdatacommentscontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_standardsdatacommentscontroller.o .obj/moc_standardsdatacommentscontroller.cpp + +.obj/moc_appvarscontroller.o: .obj/moc_appvarscontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_appvarscontroller.o .obj/moc_appvarscontroller.cpp + +.obj/moc_itisnewscontroller.o: .obj/moc_itisnewscontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_itisnewscontroller.o .obj/moc_itisnewscontroller.cpp + +.obj/moc_actionrightscontroller.o: .obj/moc_actionrightscontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_actionrightscontroller.o .obj/moc_actionrightscontroller.cpp + +.obj/moc_itisgroupscontroller.o: .obj/moc_itisgroupscontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_itisgroupscontroller.o .obj/moc_itisgroupscontroller.cpp + +.obj/moc_annexdatacommentscontroller.o: .obj/moc_annexdatacommentscontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_annexdatacommentscontroller.o .obj/moc_annexdatacommentscontroller.cpp + +.obj/moc_releasemgmtcontroller.o: .obj/moc_releasemgmtcontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_releasemgmtcontroller.o .obj/moc_releasemgmtcontroller.cpp + +.obj/moc_lenkinfocontroller.o: .obj/moc_lenkinfocontroller.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_lenkinfocontroller.o .obj/moc_lenkinfocontroller.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/controllers/acclassescontroller.cpp b/controllers/acclassescontroller.cpp new file mode 100644 index 0000000..942d9c1 --- /dev/null +++ b/controllers/acclassescontroller.cpp @@ -0,0 +1,251 @@ +#include "acclassescontroller.h" +#include "acclasses.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void AcClassesController::getObjAcJson() +{ + QString obj = httpRequest().queryItemValue("obj"); + QString strActive = httpRequest().queryItemValue("active"); + int active = 1; + + if(strActive.compare("0") == 0) + { + active = 0; + } + renderJson( AcClasses::getObjAcJson(obj, active) ); +} + +void AcClassesController::getAcClassesJson() +{ + renderJson( AcClasses::getAcClassesJson() ); +} + +void AcClassesController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto acClassesList = AcClasses::getAll(); + texport(acClassesList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AcClassesController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AcClassesController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto acClasses = AcClasses::get(id.toInt()); + texport(acClasses); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AcClassesController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto acClasses = httpRequest().formItems("acClasses"); + auto model = AcClasses::create(acClasses); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(acClasses); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AcClassesController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = AcClasses::get(id.toInt()); + if (!model.isNull()) { + auto acClasses = model.toVariantMap(); + texport(acClasses); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = AcClasses::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto acClasses = httpRequest().formItems("acClasses"); + model.setProperties(acClasses); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(acClasses); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AcClassesController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto acClasses = AcClasses::get(id.toInt()); + acClasses.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(AcClassesController) diff --git a/controllers/acclassescontroller.h b/controllers/acclassescontroller.h new file mode 100644 index 0000000..cd6b349 --- /dev/null +++ b/controllers/acclassescontroller.h @@ -0,0 +1,26 @@ +#ifndef ACCLASSESCONTROLLER_H +#define ACCLASSESCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT AcClassesController : public ApplicationController +{ + Q_OBJECT +public: + AcClassesController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); + + void getAcClassesJson(); + void getObjAcJson(); +}; + +#endif // ACCLASSESCONTROLLER_H diff --git a/controllers/accountcontroller.cpp b/controllers/accountcontroller.cpp new file mode 100644 index 0000000..462b5f8 --- /dev/null +++ b/controllers/accountcontroller.cpp @@ -0,0 +1,641 @@ +#include "accountcontroller.h" + +#include +#include "sqlobjects/itisuserobject.h" + +#include "informationmailer.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void AccountController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto itisUserList = ItisUser::getAll(); + texport(itisUserList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AccountController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AccountController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto user = ItisUser::get(id.toInt()); + texport(user); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AccountController::userRegisterElectron() +{ + QJsonObject jsonObject; + QJsonArray jsonArray; + + switch (httpRequest().method()) + { + case Tf::Get: + render(); + break; + + case Tf::Post: + { + QString username = httpRequest().formItemValue("username"); + QString firstname = httpRequest().formItemValue("firstname"); + QString surname = httpRequest().formItemValue("surname"); + QString email = httpRequest().formItemValue("email"); + QString company = httpRequest().formItemValue("company"); + QString userTimezone = httpRequest().formItemValue("userTimezone"); + QString groupname = httpRequest().formItemValue("groupname"); + QString groups = httpRequest().formItemValue("groups"); + QString pwd = httpRequest().formItemValue("password"); + QString newsletter = httpRequest().formItemValue("newsletter"); + QDateTime lastLogin(QDate(1970, 1, 1), QTime(1, 0, 0)); + QDateTime loginTime(QDate(1970, 1, 1), QTime(1, 0, 0)); + QDateTime loggedOut(QDate(1970, 1, 1), QTime(1, 0, 0)); + QDateTime pwdChangedTime = QDateTime::currentDateTime(); + + QString pwdforce = httpRequest().formItemValue("pwdChangeForce"); + int pwdChangeForce = pwdforce.toInt(); + QString actv = httpRequest().formItemValue("active"); + int active = actv.toInt(); + + auto model = ItisUser::create(username, firstname, surname, email, company, userTimezone, groupname, groups, pwd, lastLogin, loginTime, loggedOut, pwdChangedTime, pwdChangeForce, active); + + if (!model.isNull()) + { + InformationMailer().regUserAdmInfo(model.username()); + //InformationMailer().crUserPwd(user.value("username").toString(), user.value("password").toString()); + ItisUser::setUserNewsCfg(username, newsletter); + + jsonObject["errMsg"] = "Created successfully"; + jsonObject["ERROR"] = "0"; + jsonArray.append(jsonObject); + renderJson(jsonArray); + } else + { + jsonObject["errMsg"] = "Failed to create."; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + renderJson(jsonArray); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } +} + +void AccountController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + { + auto itisGroupsList = ItisGroups::getAll(); + texport(itisGroupsList); + render(); + break; + } + + case Tf::Post: { + auto user = httpRequest().formItems("user"); + auto model = ItisUser::create(user); + + if (!model.isNull()) + { + InformationMailer().crUser(model.username()); + InformationMailer().crUserPwd(user.value("username").toString(), user.value("password").toString()); + + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(user); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AccountController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = ItisUser::get(id.toInt()); + if (!model.isNull()) + { + auto itisGroupsList = ItisGroups::getAll(); + texport(itisGroupsList); + auto user = model.toVariantMap(); + texport(user); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = ItisUser::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto user = httpRequest().formItems("user"); + model.setProperties(user); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(user); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AccountController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto user = ItisUser::get(id.toInt()); + user.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AccountController::setUserPwd() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString pwd = httpRequest().formItemValue("pwd"); + InformationMailer().infoUserPwd(user.username()); + renderJson( ItisUser::setUserPwd(user.username(), pwd) ); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AccountController::userPwd() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString uFname = user.firstname(); + texport(uFname); + + QString uSname = user.surname().toUpper(); + texport(uSname); + + render("userpwd"); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AccountController::userPwdElectron() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString uFname = user.firstname(); + texport(uFname); + + QString uSname = user.surname().toUpper(); + texport(uSname); + + render("userpwdElectron"); + } + else + { + redirect(QUrl("/account/formElectron")); + } +} + +void AccountController::setUserNewsCfg() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString username = httpRequest().formItemValue("username"); + QString newsletter = httpRequest().formItemValue("newsletter"); + + //ItisUser::setUserNewsCfg(username, newsletter); + renderJson( ItisUser::setUserNewsCfg(username, newsletter) ); + } + else + { + redirect(QUrl("/account/formElectron")); + } +} + +void AccountController::userHome() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + + QString username = user.username(); + texport(username); + + QString firstname = user.firstname(); + texport(firstname); + + QString surname = user.surname(); + texport(surname); + + QString email = user.email(); + texport(email); + + QString company = user.company(); + texport(company); + + QString lastLogin = user.lastLogin().toString(); + texport(lastLogin); + + QString lastLogout = user.loggedOut().toString(); + texport(lastLogout); + + QString lastPwdChangeTime = user.pwdChangedTime().toString(); + texport(lastPwdChangeTime); + + QString usertimezone = user.userTimezone(); + texport(usertimezone); + + QString groupname = user.groupname(); + texport(groupname); + + QString groups = user.groups(); + texport(groups); + + QString newsletter = ItisUser::getUserNewsCfg( user.username() ); + texport(newsletter); + + quint64 difference = qAbs(user.pwdChangedTime().date().daysTo(QDateTime::currentDateTime().date())); + + QString pwdToChangeIn; + int timediff = static_cast(difference); + + if(timediff >= 30) + { + QString red_msg = "Ihr Passwort ist abgelaufen. Bitte ändern Sie aus Sicherheitsgründen Ihr Passwort!"; + texport(red_msg); + render("userpwd"); + } + else if(timediff > 20 && timediff < 30) + { + pwdToChangeIn = "Passwort-Änderung erforderlich in " + QString::number(30 - timediff) + " Tagen"; + } + else + { + pwdToChangeIn = "Passwort-Änderung erforderlich in " + QString::number(30 - timediff) + " Tagen"; + } + texport(pwdToChangeIn); + + render("userhome"); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AccountController::userHomeElectron() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + + QString username = user.username(); + texport(username); + + QString firstname = user.firstname(); + texport(firstname); + + QString surname = user.surname(); + texport(surname); + + QString email = user.email(); + texport(email); + + QString company = user.company(); + texport(company); + + QString lastLogin = user.lastLogin().toString(); + texport(lastLogin); + + QString lastLogout = user.loggedOut().toString(); + texport(lastLogout); + + QString lastPwdChangeTime = user.pwdChangedTime().toString(); + texport(lastPwdChangeTime); + + QString usertimezone = user.userTimezone(); + texport(usertimezone); + + QString groupname = user.groupname(); + texport(groupname); + + QString groups = user.groups(); + texport(groups); + + QString newsletter = ItisUser::getUserNewsCfg( user.username() ); + texport(newsletter); + + quint64 difference = qAbs(user.pwdChangedTime().date().daysTo(QDateTime::currentDateTime().date())); + + QString pwdToChangeIn; + int timediff = static_cast(difference); + + if(timediff >= 30) + { + QString error = "Passwort-Änderung erforderlich! " + QString::number(timediff - 30); + texport(error); + render("userpwdElectron"); + } + else if(timediff > 20 && timediff < 30) + { + pwdToChangeIn = "Passwort-Änderung erforderlich in " + QString::number(30 - timediff) + " Tagen"; + } + else + { + pwdToChangeIn = "Passwort-Änderung erforderlich in " + QString::number(30 - timediff) + " Tagen"; + } + texport(pwdToChangeIn); + + render("userhomeElectron"); + } + else + { + redirect(QUrl("/account/formElectron")); + } +} + +/*! + * \brief AccountController::form + * Login Mask +*/ +void AccountController::form() +{ + userLogout(); // forcibly logged out + render(); // shows form view +} + +void AccountController::formElectron() +{ + userLogout(); // forcibly logged out + render(); // shows form view +} + +void AccountController::login() +{ + QString username = httpRequest().formItemValue("username"); + QString s = httpRequest().formItemValue("password"); + + QString error; + QByteArray password = QCryptographicHash::hash(s.toLocal8Bit(), QCryptographicHash::Sha256); + ItisUser user = ItisUser::authenticate(username, password); + + if (!user.isNull()) + { + if(user.active() == 0) + { + error = "Your account is disabled, please contact your Admin."; + texport(error); + render("form"); + } + userLogin(&user); + session().insert("identityKey", username); + user.setLoginTime(QDateTime::currentDateTime()); + + if(user.pwdChangeForce() == 1) + { + error = "Bitte ändern Sie aus Sicherheitsgründen Ihr Passwort."; + texport(error); + render("userpwd"); + } + + redirect(QUrl("/account/userHome")); + } + else + { + error = "Login failed"; + texport(error); + render("form"); + } +} + +void AccountController::loginElectron() +{ + QString username = httpRequest().formItemValue("username"); + QString s = httpRequest().formItemValue("password"); + + QByteArray password = QCryptographicHash::hash(s.toLocal8Bit(), QCryptographicHash::Sha256); + + ItisUser user = ItisUser::authenticate(username, password); + if (!user.isNull()) + { + if(user.active() == 0) + { + QString red_msg = "Your account is disabled, please contact your Admin."; + texport(red_msg); + render("formElectron"); + } + userLogin(&user); + session().insert("identityKey", username); + user.setLoginTime(QDateTime::currentDateTime()); + + if(user.pwdChangeForce() == 1) + { + QString red_msg = "Bitte ändern Sie aus Sicherheitsgründen Ihr Passwort."; + texport(red_msg); + render("userpwdElectron"); + } + + redirect(QUrl("/account/userHomeElectron")); + } + else + { + QString red_msg = "Login failed"; + texport(red_msg); + render("formElectron"); + } +} + +void AccountController::logout() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + user.setLoggedOut(QDateTime::currentDateTime()); + userLogout(); + + QString green_msg = "live long and prosper 🖖"; + texport(green_msg); + + render("form"); +} + +void AccountController::logoutElectron() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + user.setLoggedOut(QDateTime::currentDateTime()); + userLogout(); + + QString green_msg = "Sie wurden vom System abgemeldet"; + texport(green_msg); + render("formElectron"); +} + +// Don't remove below this line +T_DEFINE_CONTROLLER(AccountController) diff --git a/controllers/accountcontroller.h b/controllers/accountcontroller.h new file mode 100644 index 0000000..832b523 --- /dev/null +++ b/controllers/accountcontroller.h @@ -0,0 +1,39 @@ +#ifndef ACCOUNTCONTROLLER_H +#define ACCOUNTCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT AccountController : public ApplicationController +{ + Q_OBJECT +public: + AccountController() : ApplicationController() { } + +public slots: + void index(); + void list_all(); + + void form(); + void login(); + void logout(); + void logoutElectron(); + + void formElectron(); + void loginElectron(); + void userHomeElectron(); + void userPwdElectron(); + + void userHome(); + void userPwd(); + void setUserPwd(); + void setUserNewsCfg(); + + void show(const QString &id); + void create(); + void userRegisterElectron(); + void save(const QString &id); + void remove(const QString &id); +}; + +#endif // ACCOUNTCONTROLLER_H diff --git a/controllers/actionrightscontroller.cpp b/controllers/actionrightscontroller.cpp new file mode 100644 index 0000000..8c10427 --- /dev/null +++ b/controllers/actionrightscontroller.cpp @@ -0,0 +1,314 @@ +#include "actionrightscontroller.h" +#include "actionrights.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void ActionRightsController::getRoutes() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "crud", uri)) + { + //auto conti = TActionController::name(); auto con = TActionController::activeAction(); + + QJsonObject jsonObject; + QJsonArray jsonArray; + + QProcess p; + QString program = "treefrog"; + QStringList arguments; + arguments << "--show-routes"; + + p.start(program,arguments); + p.waitForStarted(); + p.waitForReadyRead(); + p.waitForFinished(); + QString line= p.readAllStandardOutput(); + + QStringList list; + list = line.split(QRegExp("match")); + + QRegularExpression re(".*Available controllers:.*"); + QRegularExpression re1("(\\s+)([\\/|a-z|A-Z|_]+)(/:param|)(\\s+->)"); + for (int i = 0; i < list.size(); ++i) + { + QRegularExpressionMatch match = re.match(list[i]); + if (! match.hasMatch()) + { + //jsonObject["output"] = list[i]; + //jsonArray.append(jsonObject); + + match = re1.match(list[i]); + if (match.hasMatch()) + { + //jsonObject["output"] = list[i]; + jsonObject["output"] = match.captured(2); + jsonArray.append(jsonObject); + } + } + } + + QStringList contis = TActionController::availableControllers(); + for (int i = 0; i < contis.size(); ++i) + { + jsonObject["controller"] = contis[i]; + jsonArray.append(jsonObject); + } + + renderJson(jsonArray); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ActionRightsController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto actionRightsList = ActionRights::getAll(); + texport(actionRightsList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ActionRightsController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ActionRightsController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto actionRights = ActionRights::get(id.toInt()); + texport(actionRights); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ActionRightsController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + { + auto itisGroupsList = ItisGroups::getAll(); + texport(itisGroupsList); + render(); + break; + } + + case Tf::Post: { + auto actionRights = httpRequest().formItems("actionRights"); + auto model = ActionRights::create(actionRights); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(actionRights); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ActionRightsController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = ActionRights::get(id.toInt()); + if (!model.isNull()) { + auto actionRights = model.toVariantMap(); + texport(actionRights); + + auto itisGroupsList = ItisGroups::getAll(); + texport(itisGroupsList); + + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = ActionRights::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto actionRights = httpRequest().formItems("actionRights"); + model.setProperties(actionRights); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(actionRights); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ActionRightsController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto actionRights = ActionRights::get(id.toInt()); + actionRights.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(ActionRightsController) diff --git a/controllers/actionrightscontroller.h b/controllers/actionrightscontroller.h new file mode 100644 index 0000000..b44ff0f --- /dev/null +++ b/controllers/actionrightscontroller.h @@ -0,0 +1,25 @@ +#ifndef ACTIONRIGHTSCONTROLLER_H +#define ACTIONRIGHTSCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT ActionRightsController : public ApplicationController +{ + Q_OBJECT +public: + ActionRightsController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void getRoutes(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); +}; + +#endif // ACTIONRIGHTSCONTROLLER_H diff --git a/controllers/admincontroller.cpp b/controllers/admincontroller.cpp new file mode 100644 index 0000000..f663d6c --- /dev/null +++ b/controllers/admincontroller.cpp @@ -0,0 +1,76 @@ +#include "admincontroller.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void AdminController::showGallery() +{ + + QJsonObject jsonObject; + QJsonArray jsonArray; + // PRO + QString pathToImg = "/webapp/html/itis/Img/Annexspecs"; + // DEV QString pathToImg = "/webapp_dez/itis_app/public/images"; + QDir directory(pathToImg); + QStringList images = directory.entryList(QStringList() << "*.jpg" << "*.jpeg" << "*.png" << "*.bmp" << "*.gif",QDir::Files); + + foreach(QString filename, images) + { + QFileInfo info(pathToImg + "/" + filename); + jsonObject["size"] = info.size() / 1024; + // PROD + jsonObject["img"] = "/Annexspecs/" + filename; + // DEV jsonObject["img"] = "/images/" + filename; + jsonObject["name"] = filename; + jsonArray.append(jsonObject); + } + + pathToImg = "/webapp/html/itis/Img/Objspecs"; + QDir direct(pathToImg); + QStringList imag = direct.entryList(QStringList() << "*.jpg" << "*.jpeg" << "*.png" << "*.bmp" << "*.gif",QDir::Files); + + foreach(QString filename, imag) + { + QFileInfo info(pathToImg + "/" + filename); + jsonObject["size"] = info.size() / 1024; + jsonObject["img"] = "/Objspecs/" + filename; + jsonObject["name"] = filename; + jsonArray.append(jsonObject); + } + + //renderJson(jsonArray); + texport(jsonArray); + + render(); +} + +void AdminController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString uFname = user.firstname(); + texport(uFname); + + QString lastLogin = user.lastLogin().toString(); + texport(lastLogin); + + QString lastLogout = user.loggedOut().toString(); + texport(lastLogout); + + QString lastPwdChangeTime = user.pwdChangedTime().toString(); + texport(lastPwdChangeTime); + + render("index"); + } + else + { + redirect(QUrl("/account/form")); + } +} + +// Don't remove below this line +T_DEFINE_CONTROLLER(AdminController) diff --git a/controllers/admincontroller.h b/controllers/admincontroller.h new file mode 100644 index 0000000..7f7ea28 --- /dev/null +++ b/controllers/admincontroller.h @@ -0,0 +1,19 @@ +#ifndef ADMINCONTROLLER_H +#define ADMINCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT AdminController : public ApplicationController +{ + Q_OBJECT +public: + AdminController() : ApplicationController() { } + +public slots: + void index(); + + void showGallery(); +}; + +#endif // ADMINCONTROLLER_H diff --git a/controllers/annexdatacommentscontroller.cpp b/controllers/annexdatacommentscontroller.cpp new file mode 100644 index 0000000..6ca1c6e --- /dev/null +++ b/controllers/annexdatacommentscontroller.cpp @@ -0,0 +1,293 @@ +#include "annexdatacommentscontroller.h" +#include "annexdatacomments.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void AnnexDataCommentsController::getSpecComments(const QString &spec_id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + renderJson( AnnexDataComments::getSpecComments( spec_id.toInt() ) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataCommentsController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto annexDataCommentsList = AnnexDataComments::getAll(); + texport(annexDataCommentsList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataCommentsController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto statistik = AnnexDataComments::getStatistics(); + + QString count_id = statistik["count_id"]; + texport(count_id); + QString count_users = statistik["count_users"]; + texport(count_users); + + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataCommentsController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto annexDataComments = AnnexDataComments::get(id.toInt()); + texport(annexDataComments); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataCommentsController::createComment() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString spec_id = httpRequest().formItemValue("spec_id"); + QString spec_title = httpRequest().formItemValue("spec_title"); + QString spec_version = httpRequest().formItemValue("spec_version"); + QString user_comment = httpRequest().formItemValue("user_comment"); + + renderJson( AnnexDataComments::createComment(spec_id.toInt(), spec_title, spec_version, user_comment, user.username()) ); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataCommentsController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + { + QString usermail = user.email(); + texport(usermail); + render(); + break; + } + + case Tf::Post: { + auto annexDataComments = httpRequest().formItems("annexDataComments"); + auto model = AnnexDataComments::create(annexDataComments); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(annexDataComments); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataCommentsController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = AnnexDataComments::get(id.toInt()); + if (!model.isNull()) { + auto annexDataComments = model.toVariantMap(); + texport(annexDataComments); + + QString usermail = user.email(); + texport(usermail); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = AnnexDataComments::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto annexDataComments = httpRequest().formItems("annexDataComments"); + model.setProperties(annexDataComments); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(annexDataComments); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataCommentsController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto annexDataComments = AnnexDataComments::get(id.toInt()); + annexDataComments.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(AnnexDataCommentsController) diff --git a/controllers/annexdatacommentscontroller.h b/controllers/annexdatacommentscontroller.h new file mode 100644 index 0000000..9f58016 --- /dev/null +++ b/controllers/annexdatacommentscontroller.h @@ -0,0 +1,27 @@ +#ifndef ANNEXDATACOMMENTSCONTROLLER_H +#define ANNEXDATACOMMENTSCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT AnnexDataCommentsController : public ApplicationController +{ + Q_OBJECT +public: + AnnexDataCommentsController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void show(const QString &id); + void create(); + void createComment(); + void save(const QString &id); + void remove(const QString &id); + + void getSpecComments(const QString &spec_id); + +}; + +#endif // ANNEXDATACOMMENTSCONTROLLER_H diff --git a/controllers/annexdatacontroller.cpp b/controllers/annexdatacontroller.cpp new file mode 100644 index 0000000..55e246d --- /dev/null +++ b/controllers/annexdatacontroller.cpp @@ -0,0 +1,1171 @@ +#include "annexdatacontroller.h" +#include "annexdata.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +#include "objects.h" +#include "catclasses.h" +#include "stdsystem.h" +#include "acclasses.h" +#include "pcclasses.h" +#include "annexmeta.h" +#include "annexdatawaste.h" +#include "annexdatacomments.h" + +void AnnexDataController::writeAnnex() +{ + + QMap stdDataMap; + QString msg; + + stdDataMap["obj_sname"] = "Annex A"; + stdDataMap["country"] = "WW"; + stdDataMap["lang"] = "de_DE"; + stdDataMap["spec_active"] = "1"; + stdDataMap["ac_class"] = "1"; + stdDataMap["pc_class"] = "1"; + stdDataMap["spec_release"] = "pre-release"; + stdDataMap["release_version"] = "01.00.00"; + stdDataMap["getStdType"] = "show"; + + AnnexData::writeAnnex(stdDataMap); +} + +void AnnexDataController::doReleased() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QMap stdDataMap; + + stdDataMap["release_id"] = httpRequest().formItemValue("release_id"); + stdDataMap["rel_creator"] = user.email(); + + renderJson( AnnexData::doReleased(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach. " + uri; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::upReleased() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QString id = httpRequest().formItemValue("id"); + int lid = id.toInt(); + renderJson( AnnexData::upReleased(lid) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::doPreRelease() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QMap stdDataMap; + + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["ac_classes"] = httpRequest().formItemValue("ac_classes"); + stdDataMap["pc_classes"] = httpRequest().formItemValue("pc_classes"); + stdDataMap["cat_class"] = httpRequest().formItemValue("cat_class"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["doc_type"] = "annex"; + stdDataMap["rel_requester"] = user.email(); + stdDataMap["relrequest_date"] = httpRequest().formItemValue("relrequest_date"); + + renderJson( AnnexData::doPreRelease(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach. " + uri; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::upPrelease() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QString id = httpRequest().formItemValue("id"); + int lid = id.toInt(); + renderJson( AnnexData::upPrelease(lid) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::updAnnexData() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QMap stdDataMap; + + stdDataMap["id"] = httpRequest().formItemValue("id"); + stdDataMap["spec_title"] = httpRequest().formItemValue("spec_title"); + stdDataMap["spec_desc"] = httpRequest().formItemValue("spec_desc"); + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_class"] = httpRequest().formItemValue("cat_class"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["ac_classes"] = httpRequest().formItemValue("ac_classes"); + stdDataMap["pc_classes"] = httpRequest().formItemValue("pc_classes"); + stdDataMap["spec_version"] = httpRequest().formItemValue("spec_version"); + stdDataMap["spec_version_new"] = httpRequest().formItemValue("spec_version_new"); + stdDataMap["lfdnr"] = httpRequest().formItemValue("lfdnr"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["last_editor"] = httpRequest().formItemValue("last_editor"); + stdDataMap["spec_valid_start"] = httpRequest().formItemValue("spec_valid_start"); + stdDataMap["spec_valid_end"] = httpRequest().formItemValue("spec_valid_end"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["spec_content"] = httpRequest().formItemValue("spec_content"); + stdDataMap["g_legacy"] = httpRequest().formItemValue("g_legacy"); + stdDataMap["resp"] = httpRequest().formItemValue("resp"); + stdDataMap["comment"] = httpRequest().formItemValue("comment"); + stdDataMap["marker"] = httpRequest().formItemValue("marker"); + + renderJson( AnnexData::updAnnexData(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::setAnnexData() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + QMap stdDataMap; + + stdDataMap["spec_title"] = httpRequest().formItemValue("spec_title"); + stdDataMap["spec_desc"] = httpRequest().formItemValue("spec_desc"); + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_class"] = httpRequest().formItemValue("cat_class"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["ac_classes"] = httpRequest().formItemValue("ac_classes"); + stdDataMap["pc_classes"] = httpRequest().formItemValue("pc_classes"); + stdDataMap["spec_version"] = httpRequest().formItemValue("spec_version"); + stdDataMap["spec_version_new"] = httpRequest().formItemValue("spec_version_new"); + stdDataMap["lfdnr"] = httpRequest().formItemValue("lfdnr"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["last_editor"] = httpRequest().formItemValue("last_editor"); + stdDataMap["spec_valid_start"] = httpRequest().formItemValue("spec_valid_start"); + stdDataMap["spec_valid_end"] = httpRequest().formItemValue("spec_valid_end"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["spec_content"] = httpRequest().formItemValue("spec_content"); + stdDataMap["g_legacy"] = httpRequest().formItemValue("g_legacy"); + stdDataMap["resp"] = httpRequest().formItemValue("resp"); + stdDataMap["comment"] = httpRequest().formItemValue("comment"); + stdDataMap["marker"] = httpRequest().formItemValue("marker"); + + renderJson( AnnexData::setAnnexData(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getAnnexSpec() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString id = httpRequest().queryItemValue("id"); + int lid = id.toInt(); + renderJson( AnnexData::getAnnexSpec(lid) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getAnnexToc() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QMap stdDataMap; + + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_sname_en"] = httpRequest().formItemValue("cat_sname_en"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["ac_class"] = httpRequest().formItemValue("ac_class"); + stdDataMap["pc_class"] = httpRequest().formItemValue("pc_class"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["getStdType"] = httpRequest().formItemValue("getStdType"); + + /* #### + stdDataMap["obj_sname"] = "Annex D"; + stdDataMap["cat_sname_en"] = "Cabling"; + stdDataMap["country"] = "WW"; + stdDataMap["lang"] = "de_DE"; + stdDataMap["spec_active"] = "1"; + stdDataMap["ac_class"] = "3"; + stdDataMap["pc_class"] = "3"; + stdDataMap["spec_release"] = "draft"; + stdDataMap["getStdType"] = "show"; + */ + + renderJson( AnnexData::getAnnexToc(stdDataMap) ); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getAnnexList() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QMap stdDataMap; + + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_sname_en"] = httpRequest().formItemValue("cat_sname_en"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["ac_class"] = httpRequest().formItemValue("ac_class"); + stdDataMap["pc_class"] = httpRequest().formItemValue("pc_class"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["getStdType"] = httpRequest().formItemValue("getStdType"); + + /*/ #### + stdDataMap["obj_sname"] = "Annex A"; + stdDataMap["cat_sname_en"] = "Cabling"; + stdDataMap["country"] = "WW"; + stdDataMap["lang"] = "de_DE"; + stdDataMap["spec_active"] = "1"; + stdDataMap["ac_class"] = "3"; + stdDataMap["pc_class"] = "3"; + stdDataMap["spec_release"] = "draft"; + stdDataMap["getStdType"] = "show"; + */ + + if(stdDataMap["getStdType"].compare("list") == 0) + { + renderJson( AnnexData::getAnnexList(stdDataMap) ); + } + else + { + renderJson( AnnexData::getAnnexShow(stdDataMap) ); + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getExistCountries() +{ + renderJson( AnnexData::getExistCountries() ); +} + +void AnnexDataController::printCiAnnex() +{ + + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", "{Portal-Admin}"); + texport(jsonCategories); +/* + QString obj_sname = httpRequest().formItemValue("obj_sname"); + texport(obj_sname); + QString country = httpRequest().formItemValue("country"); + texport(country); + QString lang = httpRequest().formItemValue("lang"); + texport(lang); + QString ac_class = httpRequest().formItemValue("ac_class"); + texport(ac_class); + QString pc_class = httpRequest().formItemValue("pc_class"); + texport(pc_class); + QString spec_release = httpRequest().formItemValue("spec_release"); + texport(spec_release); + QString getStdTyp = httpRequest().formItemValue("getStdType"); + texport(getStdTyp); + QString release_id = httpRequest().formItemValue("release_id"); + texport(release_id); +*/ + //* / #### + QString obj_sname = "Annex G4"; + texport(obj_sname); + QString country = "DE"; + texport(country); + QString lang = "de_DE"; + texport(lang); + QString ac_class = "3"; + texport(ac_class); + QString pc_class = "3"; + texport(pc_class); + QString spec_release = "draft"; + texport(spec_release); + QString getStdType = "show"; + texport(getStdType); + //*/ + + render(); + +} + +void AnnexDataController::showCiAnnex() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + // QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", "{Portal-Admin}"); + texport(jsonCategories); + + QString obj_sname = httpRequest().formItemValue("obj_sname"); + texport(obj_sname); + QString country = httpRequest().formItemValue("country"); + texport(country); + QString lang = httpRequest().formItemValue("lang"); + texport(lang); + QString ac_class = httpRequest().formItemValue("ac_class"); + texport(ac_class); + QString pc_class = httpRequest().formItemValue("pc_class"); + texport(pc_class); + QString spec_release = httpRequest().formItemValue("spec_release"); + texport(spec_release); + QString getStdTyp = httpRequest().formItemValue("getStdType"); + texport(getStdTyp); + QString release_id = httpRequest().formItemValue("release_id"); + texport(release_id); + + /* / #### + QString obj_sname = "Annex G4"; + texport(obj_sname); + QString country = "DE"; + texport(country); + QString lang = "de_DE"; + texport(lang); + QString ac_class = "3"; + texport(ac_class); + QString pc_class = "3"; + texport(pc_class); + QString spec_release = "pre-release"; + texport(spec_release); + QString getStdType = "show"; + texport(getStdType); + */ + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::showAnnex() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + + //QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex"); + QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex", strGroups); + texport(jsonObjects); + + // QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + + QJsonArray jsonExistCountries= AnnexData::getExistCountries(); + texport(jsonExistCountries); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::showAnnexElectron() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + + QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex", strGroups); + texport(jsonObjects); + + //QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + + QJsonArray jsonExistCountries= AnnexData::getExistCountries(); + texport(jsonExistCountries); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::listAnnex() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + + //QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex"); + QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex", strGroups); + texport(jsonObjects); + + //QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + + QJsonArray jsonExistCountries= AnnexData::getExistCountries(); + texport(jsonExistCountries); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::doRecover(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + renderJson( AnnexDataWaste::doRecover(id.toInt()) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::listWaste() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + int count = AnnexDataWaste::count(); + QString counter = QString::number(count); + texport(counter); + + // bug in PROD + auto annexDataWasteList = AnnexDataWaste::getAll(); + texport(annexDataWasteList); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::chkLfdnrEditor() +{ + QMap editMap; + + editMap["cat_class"] = httpRequest().queryItemValue("cat"); + editMap["lfdnr"] = httpRequest().queryItemValue("lfdnr"); + + renderJson( AnnexData::chkLfdnrEditor(editMap) ); +} + +void AnnexDataController::getHighestLfdnr(const QString &category) +{ + renderJson( AnnexData::getHighestLfdnr(category) ); +} + +void AnnexDataController::editor_upd(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + auto annexData = AnnexData::get(id.toInt()); + texport(annexData); + + auto annexMeta = AnnexMeta::getBySpecDataId(id.toInt()); + texport(annexMeta); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + QJsonArray jsonPcClasses = PcClasses::getPcClassesJson(); + texport(jsonPcClasses); + QJsonArray jsonAcClasses = AcClasses::getAcClassesJson(); + texport(jsonAcClasses); + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex"); + texport(jsonObjects); + QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + texport(jsonCategories); + QString userMail = user.email(); + texport(userMail); + QString textcomment = QString::number( AnnexDataComments::getSpecsCommentsCount(id.toInt() )); + texport(textcomment); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::editor_add() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + QJsonArray jsonPcClasses = PcClasses::getPcClassesJson(); + texport(jsonPcClasses); + QJsonArray jsonAcClasses = AcClasses::getAcClassesJson(); + texport(jsonAcClasses); + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex"); + texport(jsonObjects); + QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + texport(jsonCategories); + QString userMail = user.email(); + texport(userMail); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::uploadImg() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QJsonObject textObject; + + TMultipartFormData &formdata = httpRequest().multipartFormData(); + //QString origname = formdata.originalFileName("picture"); + + QString origname = formdata.originalFileName("upload"); + origname = origname.toLower(); + + QString fpath = "/webapp/html/itis/Img/Annexspecs/" + origname; + formdata.renameUploadedFile("upload", fpath); + + textObject["url"] = "/Annexspecs/" + origname; + renderJson(textObject); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getImages() +{ + QJsonObject jsonObject; + QJsonArray jsonArray; + QString pathToImg = "/webapp/html/itis/Img/Annexspecs"; + //QString pathToImg = "/webapp_dez/itis_app/public/images"; + QDir directory(pathToImg); + QStringList images = directory.entryList(QStringList() << "*.jpg" << "*.jpeg" << "*.png" << "*.bmp" << "*.gif",QDir::Files); + + foreach(QString filename, images) + { + QFileInfo info(pathToImg + "/" + filename); + jsonObject["size"] = info.size() / 1024; + jsonObject["img"] = "/Annexspecs/" + filename; + //jsonObject["img"] = "/images/" + filename; + jsonObject["name"] = filename; + jsonArray.append(jsonObject); + } + renderJson(jsonArray); +} + +void AnnexDataController::checkLfdnrCat() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString countCheckLfdnrCat = QString::number( AnnexData::countCheckLfdnrCat() ); + texport(countCheckLfdnrCat); + + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getStatistics() +{ + renderJson( AnnexData::getStatistics() ); +} + +void AnnexDataController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto annexDataList = AnnexData::getAll(); + texport(annexDataList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto annexData = AnnexData::get(id.toInt()); + texport(annexData); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::showWaste(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "cr_d", uri)) + { + auto annexDataWaste = AnnexDataWaste::get(id.toInt()); + texport(annexDataWaste); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto annexData = httpRequest().formItems("annexData"); + auto model = AnnexData::create(annexData); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(annexData); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = AnnexData::get(id.toInt()); + if (!model.isNull()) { + auto annexData = model.toVariantMap(); + texport(annexData); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = AnnexData::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto annexData = httpRequest().formItems("annexData"); + model.setProperties(annexData); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(annexData); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto annexData = AnnexData::get(id.toInt()); + annexData.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::removeWaste(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto annexDataWaste = AnnexDataWaste::get(id.toInt()); + annexDataWaste.remove(); + redirect(urla("listWaste")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +// Don't remove below this line +T_DEFINE_CONTROLLER(AnnexDataController) diff --git a/controllers/annexdatacontroller.cpp_2021-02-13_1334 b/controllers/annexdatacontroller.cpp_2021-02-13_1334 new file mode 100644 index 0000000..9e6849b --- /dev/null +++ b/controllers/annexdatacontroller.cpp_2021-02-13_1334 @@ -0,0 +1,869 @@ +#include "annexdatacontroller.h" +#include "annexdata.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +#include "objects.h" +#include "catclasses.h" +#include "stdsystem.h" +#include "acclasses.h" +#include "pcclasses.h" +#include "annexmeta.h" +#include "annexdatawaste.h" + +void AnnexDataController::updAnnexData() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QMap stdDataMap; + + stdDataMap["id"] = httpRequest().formItemValue("id"); + stdDataMap["spec_title"] = httpRequest().formItemValue("spec_title"); + stdDataMap["spec_desc"] = httpRequest().formItemValue("spec_desc"); + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_class"] = httpRequest().formItemValue("cat_class"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["ac_classes"] = httpRequest().formItemValue("ac_classes"); + stdDataMap["pc_classes"] = httpRequest().formItemValue("pc_classes"); + stdDataMap["spec_version"] = httpRequest().formItemValue("spec_version"); + stdDataMap["spec_version_new"] = httpRequest().formItemValue("spec_version_new"); + stdDataMap["lfdnr"] = httpRequest().formItemValue("lfdnr"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["last_editor"] = httpRequest().formItemValue("last_editor"); + stdDataMap["spec_valid_start"] = httpRequest().formItemValue("spec_valid_start"); + stdDataMap["spec_valid_end"] = httpRequest().formItemValue("spec_valid_end"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["spec_content"] = httpRequest().formItemValue("spec_content"); + stdDataMap["g_legacy"] = httpRequest().formItemValue("g_legacy"); + stdDataMap["resp"] = httpRequest().formItemValue("resp"); + stdDataMap["comment"] = httpRequest().formItemValue("comment"); + stdDataMap["marker"] = httpRequest().formItemValue("marker"); + + renderJson( AnnexData::updAnnexData(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::setAnnexData() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + QMap stdDataMap; + + stdDataMap["spec_title"] = httpRequest().formItemValue("spec_title"); + stdDataMap["spec_desc"] = httpRequest().formItemValue("spec_desc"); + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_class"] = httpRequest().formItemValue("cat_class"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["ac_classes"] = httpRequest().formItemValue("ac_classes"); + stdDataMap["pc_classes"] = httpRequest().formItemValue("pc_classes"); + stdDataMap["spec_version"] = httpRequest().formItemValue("spec_version"); + stdDataMap["spec_version_new"] = httpRequest().formItemValue("spec_version_new"); + stdDataMap["lfdnr"] = httpRequest().formItemValue("lfdnr"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["last_editor"] = httpRequest().formItemValue("last_editor"); + stdDataMap["spec_valid_start"] = httpRequest().formItemValue("spec_valid_start"); + stdDataMap["spec_valid_end"] = httpRequest().formItemValue("spec_valid_end"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["spec_content"] = httpRequest().formItemValue("spec_content"); + stdDataMap["g_legacy"] = httpRequest().formItemValue("g_legacy"); + stdDataMap["resp"] = httpRequest().formItemValue("resp"); + stdDataMap["comment"] = httpRequest().formItemValue("comment"); + stdDataMap["marker"] = httpRequest().formItemValue("marker"); + + renderJson( AnnexData::setAnnexData(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getAnnexSpec() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString id = httpRequest().queryItemValue("id"); + int lid = id.toInt(); + renderJson( AnnexData::getAnnexSpec(lid) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getAnnexList() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QMap stdDataMap; + + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_sname_en"] = httpRequest().formItemValue("cat_sname_en"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["ac_class"] = httpRequest().formItemValue("ac_class"); + stdDataMap["pc_class"] = httpRequest().formItemValue("pc_class"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["getStdType"] = httpRequest().formItemValue("getStdType"); + + /* #### + stdDataMap["obj_sname"] = "Annex A"; + stdDataMap["cat_sname_en"] = "Cabling"; + stdDataMap["country"] = "WW"; + stdDataMap["lang"] = "de_DE"; + stdDataMap["spec_active"] = "1"; + stdDataMap["ac_class"] = "3"; + stdDataMap["pc_class"] = "3"; + stdDataMap["spec_release"] = "draft"; + stdDataMap["getStdType"] = "show"; + */ + + if(stdDataMap["getStdType"].compare("list") == 0) + { + renderJson( AnnexData::getAnnexList(stdDataMap) ); + } + else + { + renderJson( AnnexData::getAnnexShow(stdDataMap) ); + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getExistCountries() +{ + renderJson( AnnexData::getExistCountries() ); +} + +void AnnexDataController::showAnnex() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + + //QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex"); + QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex", strGroups); + texport(jsonObjects); + + // QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + + QJsonArray jsonExistCountries= AnnexData::getExistCountries(); + texport(jsonExistCountries); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::showAnnexElectron() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + + QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex", strGroups); + texport(jsonObjects); + + //QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + + QJsonArray jsonExistCountries= AnnexData::getExistCountries(); + texport(jsonExistCountries); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::listAnnex() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + + //QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex"); + QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex", strGroups); + texport(jsonObjects); + + //QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + + QJsonArray jsonExistCountries= AnnexData::getExistCountries(); + texport(jsonExistCountries); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::doRecover(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + renderJson( AnnexDataWaste::doRecover(id.toInt()) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::listWaste() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + int count = AnnexDataWaste::count(); + QString counter = QString::number(count); + texport(counter); + + // bug in PROD + auto annexDataWasteList = AnnexDataWaste::getAll(); + texport(annexDataWasteList); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::chkLfdnrEditor() +{ + QMap editMap; + + editMap["cat_class"] = httpRequest().queryItemValue("cat"); + editMap["lfdnr"] = httpRequest().queryItemValue("lfdnr"); + + renderJson( AnnexData::chkLfdnrEditor(editMap) ); +} + +void AnnexDataController::getHighestLfdnr(const QString &category) +{ + renderJson( AnnexData::getHighestLfdnr(category) ); +} + +void AnnexDataController::editor_upd(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + auto annexData = AnnexData::get(id.toInt()); + texport(annexData); + + auto annexMeta = AnnexMeta::getBySpecDataId(id.toInt()); + texport(annexMeta); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + QJsonArray jsonPcClasses = PcClasses::getPcClassesJson(); + texport(jsonPcClasses); + QJsonArray jsonAcClasses = AcClasses::getAcClassesJson(); + texport(jsonAcClasses); + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex"); + texport(jsonObjects); + QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + texport(jsonCategories); + QString userMail = user.email(); + texport(userMail); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::editor_add() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + QJsonArray jsonPcClasses = PcClasses::getPcClassesJson(); + texport(jsonPcClasses); + QJsonArray jsonAcClasses = AcClasses::getAcClassesJson(); + texport(jsonAcClasses); + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + QJsonArray jsonObjects = CatClasses::getAllJson("1", "annex"); + texport(jsonObjects); + QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + texport(jsonCategories); + QString userMail = user.email(); + texport(userMail); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::uploadImg() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QJsonObject textObject; + + TMultipartFormData &formdata = httpRequest().multipartFormData(); + //QString origname = formdata.originalFileName("picture"); + + QString origname = formdata.originalFileName("upload"); + origname = origname.toLower(); + + QString fpath = "/webapp/html/itis/Img/Annexspecs/" + origname; + formdata.renameUploadedFile("upload", fpath); + + textObject["url"] = "/Annexspecs/" + origname; + renderJson(textObject); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getImages() +{ + QJsonObject jsonObject; + QJsonArray jsonArray; + QString pathToImg = "/webapp/html/itis/Img/Annexspecs"; + QDir directory(pathToImg); + QStringList images = directory.entryList(QStringList() << "*.jpg" << "*.jpeg" << "*.png" << "*.bmp" << "*.gif",QDir::Files); + + foreach(QString filename, images) + { + QFileInfo info(pathToImg + "/" + filename); + jsonObject["size"] = info.size() / 1024; + jsonObject["img"] = "/Annexspecs/" + filename; + jsonObject["name"] = filename; + jsonArray.append(jsonObject); + } + renderJson(jsonArray); +} + +void AnnexDataController::checkLfdnrCat() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString countCheckLfdnrCat = QString::number( AnnexData::countCheckLfdnrCat() ); + texport(countCheckLfdnrCat); + + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::getStatistics() +{ + renderJson( AnnexData::getStatistics() ); +} + +void AnnexDataController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto annexDataList = AnnexData::getAll(); + texport(annexDataList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto annexData = AnnexData::get(id.toInt()); + texport(annexData); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::showWaste(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "cr_d", uri)) + { + auto annexDataWaste = AnnexDataWaste::get(id.toInt()); + texport(annexDataWaste); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto annexData = httpRequest().formItems("annexData"); + auto model = AnnexData::create(annexData); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(annexData); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = AnnexData::get(id.toInt()); + if (!model.isNull()) { + auto annexData = model.toVariantMap(); + texport(annexData); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = AnnexData::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto annexData = httpRequest().formItems("annexData"); + model.setProperties(annexData); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(annexData); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto annexData = AnnexData::get(id.toInt()); + annexData.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexDataController::removeWaste(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto annexDataWaste = AnnexDataWaste::get(id.toInt()); + annexDataWaste.remove(); + redirect(urla("listWaste")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +// Don't remove below this line +T_DEFINE_CONTROLLER(AnnexDataController) diff --git a/controllers/annexdatacontroller.h b/controllers/annexdatacontroller.h new file mode 100644 index 0000000..c772a3b --- /dev/null +++ b/controllers/annexdatacontroller.h @@ -0,0 +1,59 @@ +#ifndef ANNEXDATACONTROLLER_H +#define ANNEXDATACONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT AnnexDataController : public ApplicationController +{ + Q_OBJECT +public: + AnnexDataController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); + + void getStatistics(); + void getHighestLfdnr(const QString &category); + void getImages(); + void checkLfdnrCat(); + void getCheckLfdnrCat(); + + void listAnnex(); + void showAnnex(); + void showCiAnnex(); + void printCiAnnex(); + void showAnnexElectron(); + void listWaste(); + void getExistCountries(); + + void editor_add(); + void editor_upd(const QString &id); + void chkLfdnrEditor(); + void setAnnexData(); + void updAnnexData(); + void upPrelease(); + void doPreRelease(); + void upReleased(); + void doReleased(); + + void doRecover(const QString &id); + void showWaste(const QString &id); + void removeWaste(const QString &id); + + void uploadImg(); + + void getAnnexList(); + void getAnnexSpec(); + void getAnnexToc(); + + void writeAnnex(); +}; + +#endif // ANNEXDATACONTROLLER_H diff --git a/controllers/annexmetacontroller.cpp b/controllers/annexmetacontroller.cpp new file mode 100644 index 0000000..f8eab0c --- /dev/null +++ b/controllers/annexmetacontroller.cpp @@ -0,0 +1,213 @@ +#include "annexmetacontroller.h" +#include "annexmeta.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void AnnexMetaController::getBySpecDataId(const QString &spec_data_id) +{ + auto annexMeta = AnnexMeta::getBySpecDataId(spec_data_id.toInt()); + texport(annexMeta); + render(); +} + +void AnnexMetaController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto annexMetaList = AnnexMeta::getAll(); + texport(annexMetaList); + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexMetaController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto annexMeta = AnnexMeta::get(id.toInt()); + texport(annexMeta); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexMetaController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto annexMeta = httpRequest().formItems("annexMeta"); + auto model = AnnexMeta::create(annexMeta); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(annexMeta); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexMetaController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = AnnexMeta::get(id.toInt()); + if (!model.isNull()) { + auto annexMeta = model.toVariantMap(); + texport(annexMeta); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = AnnexMeta::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto annexMeta = httpRequest().formItems("annexMeta"); + model.setProperties(annexMeta); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(annexMeta); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AnnexMetaController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto annexMeta = AnnexMeta::get(id.toInt()); + annexMeta.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(AnnexMetaController) diff --git a/controllers/annexmetacontroller.h b/controllers/annexmetacontroller.h new file mode 100644 index 0000000..ca4df1a --- /dev/null +++ b/controllers/annexmetacontroller.h @@ -0,0 +1,23 @@ +#ifndef ANNEXMETACONTROLLER_H +#define ANNEXMETACONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT AnnexMetaController : public ApplicationController +{ + Q_OBJECT +public: + AnnexMetaController() : ApplicationController() {} + +public slots: + void index(); + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); + + void getBySpecDataId(const QString &spec_data_id); +}; + +#endif // ANNEXMETACONTROLLER_H diff --git a/controllers/applicationcontroller.cpp b/controllers/applicationcontroller.cpp new file mode 100644 index 0000000..43657ed --- /dev/null +++ b/controllers/applicationcontroller.cpp @@ -0,0 +1,22 @@ +#include "applicationcontroller.h" + +ApplicationController::ApplicationController() + : TActionController() +{ } + +ApplicationController::~ApplicationController() +{ } + +void ApplicationController::staticInitialize() +{ } + +void ApplicationController::staticRelease() +{ } + +bool ApplicationController::preFilter() +{ + return true; +} + +// Don't remove below this line +T_DEFINE_CONTROLLER(ApplicationController) diff --git a/controllers/applicationcontroller.h b/controllers/applicationcontroller.h new file mode 100644 index 0000000..54634dd --- /dev/null +++ b/controllers/applicationcontroller.h @@ -0,0 +1,20 @@ +#pragma once +#include +#include "applicationhelper.h" + + +class T_CONTROLLER_EXPORT ApplicationController : public TActionController +{ + Q_OBJECT +public: + ApplicationController(); + virtual ~ApplicationController(); + +public slots: + void staticInitialize(); + void staticRelease(); + +protected: + virtual bool preFilter(); +}; + diff --git a/controllers/appvarscontroller.cpp b/controllers/appvarscontroller.cpp new file mode 100644 index 0000000..8473af8 --- /dev/null +++ b/controllers/appvarscontroller.cpp @@ -0,0 +1,235 @@ +#include "appvarscontroller.h" +#include "appvars.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void AppVarsController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto appVarsList = AppVars::getAll(); + texport(appVarsList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AppVarsController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AppVarsController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto appVars = AppVars::get(id.toInt()); + texport(appVars); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AppVarsController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) + { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto appVars = httpRequest().formItems("appVars"); + auto model = AppVars::create(appVars); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(appVars); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AppVarsController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = AppVars::get(id.toInt()); + if (!model.isNull()) { + auto appVars = model.toVariantMap(); + texport(appVars); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = AppVars::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto appVars = httpRequest().formItems("appVars"); + model.setProperties(appVars); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(appVars); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void AppVarsController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) + { + renderErrorResponse(Tf::NotFound); + return; + } + + auto appVars = AppVars::get(id.toInt()); + appVars.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(AppVarsController) diff --git a/controllers/appvarscontroller.h b/controllers/appvarscontroller.h new file mode 100644 index 0000000..016e54f --- /dev/null +++ b/controllers/appvarscontroller.h @@ -0,0 +1,23 @@ +#ifndef APPVARSCONTROLLER_H +#define APPVARSCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT AppVarsController : public ApplicationController +{ + Q_OBJECT +public: + AppVarsController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); +}; + +#endif // APPVARSCONTROLLER_H diff --git a/controllers/catclassescontroller.cpp b/controllers/catclassescontroller.cpp new file mode 100644 index 0000000..fabda31 --- /dev/null +++ b/controllers/catclassescontroller.cpp @@ -0,0 +1,248 @@ +#include "catclassescontroller.h" +#include "catclasses.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void CatClassesController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto catClassesList = CatClasses::getAll(); + texport(catClassesList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void CatClassesController::getAllJson() +{ + renderJson( CatClasses::getAllJson() ); +} + +void CatClassesController::getAllJson(const QString &active, const QString &class_type) +{ + renderJson( CatClasses::getAllJson(active, class_type) ); +} + +void CatClassesController::getAllJson(const QString &active, const QString &class_type, const QString strGroups) +{ + renderJson( CatClasses::getAllJson( active, class_type, strGroups ) ); +} + +void CatClassesController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void CatClassesController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto catClasses = CatClasses::get(id.toInt()); + texport(catClasses); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void CatClassesController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto catClasses = httpRequest().formItems("catClasses"); + auto model = CatClasses::create(catClasses); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(catClasses); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void CatClassesController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = CatClasses::get(id.toInt()); + if (!model.isNull()) { + auto catClasses = model.toVariantMap(); + texport(catClasses); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = CatClasses::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto catClasses = httpRequest().formItems("catClasses"); + model.setProperties(catClasses); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(catClasses); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void CatClassesController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto catClasses = CatClasses::get(id.toInt()); + catClasses.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(CatClassesController) diff --git a/controllers/catclassescontroller.h b/controllers/catclassescontroller.h new file mode 100644 index 0000000..388ea16 --- /dev/null +++ b/controllers/catclassescontroller.h @@ -0,0 +1,27 @@ +#ifndef CATCLASSESCONTROLLER_H +#define CATCLASSESCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT CatClassesController : public ApplicationController +{ + Q_OBJECT +public: + CatClassesController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); + + void getAllJson(); + void getAllJson(const QString &active, const QString &class_type); + void getAllJson(const QString &active, const QString &class_type, const QString strGroups); +}; + +#endif // CATCLASSESCONTROLLER_H diff --git a/controllers/controllers.pro b/controllers/controllers.pro new file mode 100644 index 0000000..7bb6406 --- /dev/null +++ b/controllers/controllers.pro @@ -0,0 +1,63 @@ +TARGET = controller +TEMPLATE = lib +CONFIG += shared c++14 x86_64 +QT += network sql xml qml +QT -= gui +DEFINES += TF_DLL +DESTDIR = ../lib +INCLUDEPATH += ../helpers ../models +DEPENDPATH += ../helpers ../models +LIBS += -L../lib -lhelper -lmodel +MOC_DIR = .obj/ +OBJECTS_DIR = .obj/ + +include(../appbase.pri) + +HEADERS += applicationcontroller.h +SOURCES += applicationcontroller.cpp +HEADERS += standardsdatacontroller.h +SOURCES += standardsdatacontroller.cpp +HEADERS += standardsmetacontroller.h +SOURCES += standardsmetacontroller.cpp +HEADERS += stdsystemcontroller.h +SOURCES += stdsystemcontroller.cpp +HEADERS += webmenucontroller.h +SOURCES += webmenucontroller.cpp +HEADERS += accountcontroller.h +SOURCES += accountcontroller.cpp +HEADERS += admincontroller.h +SOURCES += admincontroller.cpp +HEADERS += portaladmincontroller.h +SOURCES += portaladmincontroller.cpp +HEADERS += objectscontroller.h +SOURCES += objectscontroller.cpp +HEADERS += catclassescontroller.h +SOURCES += catclassescontroller.cpp +HEADERS += acclassescontroller.h +SOURCES += acclassescontroller.cpp +HEADERS += pcclassescontroller.h +SOURCES += pcclassescontroller.cpp +HEADERS += annexdatacontroller.h +SOURCES += annexdatacontroller.cpp +HEADERS += annexmetacontroller.h +SOURCES += annexmetacontroller.cpp +HEADERS += glossarcontroller.h +SOURCES += glossarcontroller.cpp +HEADERS += informationmailer.h +SOURCES += informationmailer.cpp +HEADERS += standardsdatacommentscontroller.h +SOURCES += standardsdatacommentscontroller.cpp +HEADERS += appvarscontroller.h +SOURCES += appvarscontroller.cpp +HEADERS += itisnewscontroller.h +SOURCES += itisnewscontroller.cpp +HEADERS += actionrightscontroller.h +SOURCES += actionrightscontroller.cpp +HEADERS += itisgroupscontroller.h +SOURCES += itisgroupscontroller.cpp +HEADERS += annexdatacommentscontroller.h +SOURCES += annexdatacommentscontroller.cpp +HEADERS += releasemgmtcontroller.h +SOURCES += releasemgmtcontroller.cpp +HEADERS += lenkinfocontroller.h +SOURCES += lenkinfocontroller.cpp diff --git a/controllers/glossarcontroller.cpp b/controllers/glossarcontroller.cpp new file mode 100644 index 0000000..35b5aac --- /dev/null +++ b/controllers/glossarcontroller.cpp @@ -0,0 +1,285 @@ +#include "glossarcontroller.h" +#include "glossar.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void GlossarController::getAllJson() +{ + renderJson( Glossar::getAllJson() ); +} + +void GlossarController::getAllJsonSorted() +{ + renderJson( Glossar::getAllJsonSorted() ); +} + +void GlossarController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto glossarList = Glossar::getAll(); + texport(glossarList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void GlossarController::list_allElectron() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto glossarList = Glossar::getAll(); + texport(glossarList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void GlossarController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QMap qmapStat = Glossar::getStatistics(); + + QString glossar_count = qmapStat["glossar_count"]; + QString de_terms = qmapStat["de_terms"]; + QString en_terms = qmapStat["en_terms"]; + + texport(glossar_count); + texport(de_terms); + texport(en_terms); + + auto glossarList = Glossar::getAll(); + texport(glossarList); + + render(); + } + else + { + redirect(QUrl("/account/formElectron")); + } +} + +void GlossarController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto glossar = Glossar::get(id.toInt()); + texport(glossar); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void GlossarController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto glossar = httpRequest().formItems("glossar"); + auto model = Glossar::create(glossar); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(glossar); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void GlossarController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = Glossar::get(id.toInt()); + if (!model.isNull()) { + auto glossar = model.toVariantMap(); + texport(glossar); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = Glossar::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto glossar = httpRequest().formItems("glossar"); + model.setProperties(glossar); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(glossar); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void GlossarController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto glossar = Glossar::get(id.toInt()); + glossar.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(GlossarController) diff --git a/controllers/glossarcontroller.h b/controllers/glossarcontroller.h new file mode 100644 index 0000000..e5e09e5 --- /dev/null +++ b/controllers/glossarcontroller.h @@ -0,0 +1,27 @@ +#ifndef GLOSSARCONTROLLER_H +#define GLOSSARCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT GlossarController : public ApplicationController +{ + Q_OBJECT +public: + GlossarController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + void list_allElectron(); + + void getAllJson(); + void getAllJsonSorted(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); +}; + +#endif // GLOSSARCONTROLLER_H diff --git a/controllers/informationmailer.cpp b/controllers/informationmailer.cpp new file mode 100644 index 0000000..8afc02c --- /dev/null +++ b/controllers/informationmailer.cpp @@ -0,0 +1,42 @@ +#include "informationmailer.h" + + +void InformationMailer::preleaseInfo(const QString &username, const QString &id) +{ + texport(username); + texport(id); + deliver("preleaseInfo"); +} + + +void InformationMailer::send() +{ + QString to = "zb_bamboo@live.de"; + texport(to); + deliver("mail"); // ← mail.erb Mail sent by template +} + +void InformationMailer::crUser(const QString &username) +{ + texport(username); + deliver("crUser"); +} + +void InformationMailer::crUserPwd(const QString &username, const QString &userpwd) +{ + texport(username); + texport(userpwd); + deliver("crUserPwd"); +} + +void InformationMailer::infoUserPwd(const QString &username) +{ + texport(username); + deliver("infoUserPwd"); +} + +void InformationMailer::regUserAdmInfo(const QString &username) +{ + texport(username); + deliver("regUserAdmInfo"); +} diff --git a/controllers/informationmailer.h b/controllers/informationmailer.h new file mode 100644 index 0000000..53066d8 --- /dev/null +++ b/controllers/informationmailer.h @@ -0,0 +1,20 @@ +#ifndef INFORMATIONMAILER_H +#define INFORMATIONMAILER_H + +#include + + +class InformationMailer : public TActionMailer +{ +public: + InformationMailer() { } + void send(); + void crUser(const QString &username); + void crUserPwd(const QString &username, const QString &userpwd); + void infoUserPwd(const QString &username); + void regUserAdmInfo(const QString &username); + + void preleaseInfo(const QString &username, const QString &id); +}; + +#endif // INFORMATIONMAILER_H diff --git a/controllers/itisgroupscontroller.cpp b/controllers/itisgroupscontroller.cpp new file mode 100644 index 0000000..f2061bb --- /dev/null +++ b/controllers/itisgroupscontroller.cpp @@ -0,0 +1,232 @@ +#include "itisgroupscontroller.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void ItisGroupsController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto itisGroupsList = ItisGroups::getAll(); + texport(itisGroupsList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ItisGroupsController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ItisGroupsController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto itisGroups = ItisGroups::get(id.toInt()); + texport(itisGroups); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ItisGroupsController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto itisGroups = httpRequest().formItems("itisGroups"); + auto model = ItisGroups::create(itisGroups); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(itisGroups); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ItisGroupsController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = ItisGroups::get(id.toInt()); + if (!model.isNull()) { + auto itisGroups = model.toVariantMap(); + texport(itisGroups); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = ItisGroups::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto itisGroups = httpRequest().formItems("itisGroups"); + model.setProperties(itisGroups); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(itisGroups); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ItisGroupsController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto itisGroups = ItisGroups::get(id.toInt()); + itisGroups.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(ItisGroupsController) diff --git a/controllers/itisgroupscontroller.h b/controllers/itisgroupscontroller.h new file mode 100644 index 0000000..c91d596 --- /dev/null +++ b/controllers/itisgroupscontroller.h @@ -0,0 +1,23 @@ +#ifndef ITISGROUPSCONTROLLER_H +#define ITISGROUPSCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT ItisGroupsController : public ApplicationController +{ + Q_OBJECT +public: + ItisGroupsController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); +}; + +#endif // ITISGROUPSCONTROLLER_H diff --git a/controllers/itisnewscontroller.cpp b/controllers/itisnewscontroller.cpp new file mode 100644 index 0000000..c3dfa7c --- /dev/null +++ b/controllers/itisnewscontroller.cpp @@ -0,0 +1,242 @@ +#include "itisnewscontroller.h" +#include "itisnews.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void ItisNewsController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto itisNewsList = ItisNews::getAll(); + texport(itisNewsList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ItisNewsController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ItisNewsController::indexElectron() +{ + render(); +} + +void ItisNewsController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto itisNews = ItisNews::get(id.toInt()); + texport(itisNews); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ItisNewsController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + { + QString usermail = user.email(); + texport(usermail); + render(); + break; + } + + case Tf::Post: { + auto itisNews = httpRequest().formItems("itisNews"); + auto model = ItisNews::create(itisNews); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(itisNews); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ItisNewsController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = ItisNews::get(id.toInt()); + if (!model.isNull()) { + auto itisNews = model.toVariantMap(); + texport(itisNews); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = ItisNews::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto itisNews = httpRequest().formItems("itisNews"); + model.setProperties(itisNews); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(itisNews); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ItisNewsController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto itisNews = ItisNews::get(id.toInt()); + itisNews.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(ItisNewsController) diff --git a/controllers/itisnewscontroller.h b/controllers/itisnewscontroller.h new file mode 100644 index 0000000..3c2c6c3 --- /dev/null +++ b/controllers/itisnewscontroller.h @@ -0,0 +1,24 @@ +#ifndef ITISNEWSCONTROLLER_H +#define ITISNEWSCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT ItisNewsController : public ApplicationController +{ + Q_OBJECT +public: + ItisNewsController() : ApplicationController() {} + +public slots: + void index(); + void indexElectron(); + void list_all(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); +}; + +#endif // ITISNEWSCONTROLLER_H diff --git a/controllers/lenkinfocontroller.cpp b/controllers/lenkinfocontroller.cpp new file mode 100644 index 0000000..0c76e97 --- /dev/null +++ b/controllers/lenkinfocontroller.cpp @@ -0,0 +1,318 @@ +#include "lenkinfocontroller.h" +#include "lenkinfo.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void LenkinfoController::getJson() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QMap stdDataMap; + stdDataMap["spec_obj"] = httpRequest().formItemValue("spec_obj"); + stdDataMap["ac_class"] = httpRequest().formItemValue("ac_class"); + stdDataMap["pc_class"] = httpRequest().formItemValue("pc_class"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + + /* + stdDataMap["spec_obj"] = "Annex B-2"; + stdDataMap["ac_class"] = "1"; + stdDataMap["pc_class"] = "1"; + stdDataMap["country"] = "WW"; + stdDataMap["lang"] = "de_DE"; + */ + renderJson( Lenkinfo::getJson(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach. " + uri; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void LenkinfoController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto lenkinfoList = Lenkinfo::getAll(); + texport(lenkinfoList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void LenkinfoController::index() +{ + render(); +} + +void LenkinfoController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto lenkinfo = Lenkinfo::get(id.toInt()); + texport(lenkinfo); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void LenkinfoController::create_silent() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render("save"); + break; + + case Tf::Post: { + auto lenkinfo = httpRequest().formItems("lenkinfo"); + auto model = Lenkinfo::create(lenkinfo); + + if (!model.isNull()) { + QString id = httpRequest().formItemValue("release_id"); + QString notice = "Lenkungsinformation angelegt."; + tflash(notice); + redirect(QUrl("/releasemgmt/save/" + id + "?show")); + //redirect(urla("/releasemgmt/save/", id)); + } else { + QString error = "Failed to create."; + texport(error); + texport(lenkinfo); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void LenkinfoController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto lenkinfo = httpRequest().formItems("lenkinfo"); + auto model = Lenkinfo::create(lenkinfo); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(lenkinfo); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void LenkinfoController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = Lenkinfo::get(id.toInt()); + if (!model.isNull()) { + auto lenkinfo = model.toVariantMap(); + texport(lenkinfo); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = Lenkinfo::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto lenkinfo = httpRequest().formItems("lenkinfo"); + model.setProperties(lenkinfo); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(lenkinfo); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void LenkinfoController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto lenkinfo = Lenkinfo::get(id.toInt()); + lenkinfo.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(LenkinfoController) diff --git a/controllers/lenkinfocontroller.h b/controllers/lenkinfocontroller.h new file mode 100644 index 0000000..611b641 --- /dev/null +++ b/controllers/lenkinfocontroller.h @@ -0,0 +1,26 @@ +#ifndef LENKINFOCONTROLLER_H +#define LENKINFOCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT LenkinfoController : public ApplicationController +{ + Q_OBJECT +public: + LenkinfoController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void show(const QString &id); + void create(); + void create_silent(); + void save(const QString &id); + void remove(const QString &id); + + void getJson(); +}; + +#endif // LENKINFOCONTROLLER_H diff --git a/controllers/objectscontroller.cpp b/controllers/objectscontroller.cpp new file mode 100644 index 0000000..efd06c7 --- /dev/null +++ b/controllers/objectscontroller.cpp @@ -0,0 +1,248 @@ +#include "objectscontroller.h" +#include "objects.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void ObjectsController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto objectsList = Objects::getAll(); + texport(objectsList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ObjectsController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ObjectsController::getAllJson(const QString &active, QString strGroups) +{ + renderJson( Objects::getAllJson( active, strGroups ) ); +} + +void ObjectsController::getAllJson(const QString &active) +{ + renderJson( Objects::getAllJson(active) ); +} + +void ObjectsController::getAllJson() +{ + renderJson( Objects::getAllJson() ); +} + +void ObjectsController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto objects = Objects::get(id.toInt()); + texport(objects); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ObjectsController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto objects = httpRequest().formItems("objects"); + auto model = Objects::create(objects); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(objects); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ObjectsController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = Objects::get(id.toInt()); + if (!model.isNull()) { + auto objects = model.toVariantMap(); + texport(objects); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = Objects::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto objects = httpRequest().formItems("objects"); + model.setProperties(objects); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(objects); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ObjectsController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto objects = Objects::get(id.toInt()); + objects.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(ObjectsController) diff --git a/controllers/objectscontroller.h b/controllers/objectscontroller.h new file mode 100644 index 0000000..352d8af --- /dev/null +++ b/controllers/objectscontroller.h @@ -0,0 +1,27 @@ +#ifndef OBJECTSCONTROLLER_H +#define OBJECTSCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT ObjectsController : public ApplicationController +{ + Q_OBJECT +public: + ObjectsController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void getAllJson(); + void getAllJson(const QString &active); + void getAllJson(const QString &active, QString strGroups); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); +}; + +#endif // OBJECTSCONTROLLER_H diff --git a/controllers/pcclassescontroller.cpp b/controllers/pcclassescontroller.cpp new file mode 100644 index 0000000..82afe96 --- /dev/null +++ b/controllers/pcclassescontroller.cpp @@ -0,0 +1,251 @@ +#include "pcclassescontroller.h" +#include "pcclasses.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void PcClassesController::getObjPcJson() +{ + QString obj = httpRequest().queryItemValue("obj"); + QString strActive = httpRequest().queryItemValue("active"); + int active = 1; + + if(strActive.compare("0") == 0) + { + active = 0; + } + renderJson( PcClasses::getObjPcJson(obj, active) ); +} + +void PcClassesController::getPcClassesJson() +{ + renderJson( PcClasses::getPcClassesJson() ); +} + +void PcClassesController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto pcClassesList = PcClasses::getAll(); + texport(pcClassesList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void PcClassesController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void PcClassesController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto pcClasses = PcClasses::get(id.toInt()); + texport(pcClasses); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void PcClassesController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto pcClasses = httpRequest().formItems("pcClasses"); + auto model = PcClasses::create(pcClasses); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(pcClasses); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void PcClassesController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = PcClasses::get(id.toInt()); + if (!model.isNull()) { + auto pcClasses = model.toVariantMap(); + texport(pcClasses); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = PcClasses::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto pcClasses = httpRequest().formItems("pcClasses"); + model.setProperties(pcClasses); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(pcClasses); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void PcClassesController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto pcClasses = PcClasses::get(id.toInt()); + pcClasses.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(PcClassesController) diff --git a/controllers/pcclassescontroller.h b/controllers/pcclassescontroller.h new file mode 100644 index 0000000..5be985a --- /dev/null +++ b/controllers/pcclassescontroller.h @@ -0,0 +1,26 @@ +#ifndef PCCLASSESCONTROLLER_H +#define PCCLASSESCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT PcClassesController : public ApplicationController +{ + Q_OBJECT +public: + PcClassesController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); + + void getPcClassesJson(); + void getObjPcJson(); +}; + +#endif // PCCLASSESCONTROLLER_H diff --git a/controllers/portaladmincontroller.cpp b/controllers/portaladmincontroller.cpp new file mode 100644 index 0000000..f64a793 --- /dev/null +++ b/controllers/portaladmincontroller.cpp @@ -0,0 +1,23 @@ +#include "portaladmincontroller.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void PortalAdminController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +// Don't remove below this line +T_DEFINE_CONTROLLER(PortalAdminController) diff --git a/controllers/portaladmincontroller.h b/controllers/portaladmincontroller.h new file mode 100644 index 0000000..320b2db --- /dev/null +++ b/controllers/portaladmincontroller.h @@ -0,0 +1,17 @@ +#ifndef PORTALADMINCONTROLLER_H +#define PORTALADMINCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT PortalAdminController : public ApplicationController +{ + Q_OBJECT +public: + PortalAdminController() : ApplicationController() { } + +public slots: + void index(); +}; + +#endif // PORTALADMINCONTROLLER_H diff --git a/controllers/releasemgmtcontroller.cpp b/controllers/releasemgmtcontroller.cpp new file mode 100644 index 0000000..083f7fb --- /dev/null +++ b/controllers/releasemgmtcontroller.cpp @@ -0,0 +1,975 @@ +#include "releasemgmtcontroller.h" +#include "releasemgmt.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +#include "catclasses.h" +#include "releaseannex.h" +#include "lenkinfo.h" + + +void ReleaseMgmtController::fileRemove() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QMap stdDataMap; + + stdDataMap["doctype"] = httpRequest().formItemValue("doctype"); + stdDataMap["docrelease"] = httpRequest().formItemValue("docrelease"); + stdDataMap["docname"] = httpRequest().formItemValue("docname"); + + renderJson( ReleaseMgmt::fileRemove(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::writeFile() +{ + QString header= R"( + + + + + + + + PDF + + + + + + + + + + + + +)"; + QString footer= R"( + + + +)"; + + QJsonObject jsonObj; + QMap stdDataMap; + stdDataMap["content"] = httpRequest().formItemValue("doccontent"); + usleep(2000); + QString msg = QString::number(stdDataMap["content"].length()); + tWarn("Länge: " + msg.toUtf8()); + QString docsize = httpRequest().formItemValue("docsize"); + QString doctype = httpRequest().formItemValue("doctype"); + QString doctitle = httpRequest().formItemValue("doctitle"); + QString docrelease = httpRequest().formItemValue("docrelease"); + QString lenkinfo = httpRequest().formItemValue("lenkinfo"); + + if(docsize.compare(msg)) + { + tError("Länge ungleich"); + + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = "Fehler bei der Übertragung"; + jsonObj["Msg"] = "Länge: " + docsize + " " + QString::number(stdDataMap["content"].length()); +stdDataMap["content"] = httpRequest().formItemValue("doccontent"); +msg = QString::number(stdDataMap["content"].length()); +tWarn("Länge: " + msg.toUtf8()); + renderJson( jsonObj ); + } + else + { + doctitle.replace(" ", "_"); + QString fileContent = header + stdDataMap["content"] + footer; + + QString curentDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd_HHmmss"); + QString dev_dir = "/webapp_dez/html/itis/pdf/" + doctype + "/" + docrelease + "/"; + QString prod_dir = "/webapp/html/itis/pdf/" + doctype + "/" + docrelease + "/"; + + QString writeHtmlFile = curentDateTime + "_" + doctitle + "_v" + lenkinfo + "-" + docrelease + ".html"; + QString htmlFile = "/pdf/" + doctype + "/" + docrelease + "/" + writeHtmlFile; + QString pdfFile = curentDateTime + "_" + doctitle + "_v" + lenkinfo + "-" + docrelease + ".pdf"; + + QDir devDir(dev_dir); + QDir prodDir(prod_dir); + + if(devDir.exists()) + { + writeHtmlFile = dev_dir + writeHtmlFile; + pdfFile = dev_dir + pdfFile; + htmlFile = "http://localhost:8080" + htmlFile; + } + else if(prodDir.exists()) + { + writeHtmlFile = prod_dir + writeHtmlFile; + pdfFile = prod_dir + pdfFile; + htmlFile = "https://itis.hitchhiker.tech/" + htmlFile; + } + + QFile file(writeHtmlFile); + file.open(QIODevice::WriteOnly); + + QTextStream stream(&file); + stream.setAutoDetectUnicode(true); + //stream.setCodec("UTF-8"); + + stream << fileContent << '\n'; + + file.flush(); + file.close(); + + int ret = ReleaseMgmt::crPDF(htmlFile, pdfFile); + jsonObj["ERROR"] = QString::number(ret); + jsonObj["errMsg"] = doctitle; + jsonObj["Msg"] = "Länge: " + docsize + " " + QString::number(stdDataMap["content"].length()); + + renderJson( jsonObj ); + } +} + +void ReleaseMgmtController::ci_update() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QMap stdDataMap; + + stdDataMap["id"] = httpRequest().formItemValue("id"); + stdDataMap["specVersion"] = httpRequest().formItemValue("specVersion"); + stdDataMap["relCreator"] = httpRequest().formItemValue("relCreator"); + stdDataMap["relcreatorDecisdate"] = httpRequest().formItemValue("relcreatorDecisdate"); + + renderJson( ReleaseMgmt::ci_update(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::listAllAnnexCi() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::list_allAnnexCi() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + renderJson( ReleaseMgmt::list_allAnnexCi() ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::listAllAnnexCd() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::list_allAnnexCd() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + renderJson( ReleaseMgmt::list_allAnnexCd() ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::listAllStdCi() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::list_allStdCi() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + renderJson( ReleaseMgmt::list_allStdCi() ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::listAllStdCd() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::list_allStdCd() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + renderJson( ReleaseMgmt::list_allStdCd() ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::list_pdf() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::getStdCiPDFs() +{ + QJsonObject jsonObject; + QJsonArray jsonArray; + + // PROD: + QString pathToImg = "/webapp/html/itis/pdf/standard/pre-release"; + // DEV: QString pathToImg = "/webapp_dez/html/itis/pdf/annex/pre-release"; + + QDir directory(pathToImg); + QStringList images = directory.entryList(QStringList() << "*.pdf" << "*.docx" << "*.odt",QDir::Files); + + foreach(QString filename, images) + { + QFileInfo info(pathToImg + "/" + filename); + jsonObject["size"] = info.size() / 1024; + jsonObject["uri"] = "/standard/pre-release/" + filename; + jsonObject["last_modified"] = info.lastModified().toString("yyyy-MM-dd HH:mm:ss"); + jsonObject["name"] = filename; + jsonArray.append(jsonObject); + } + renderJson(jsonArray); +} + +void ReleaseMgmtController::getStdCdPDFs() +{ + QJsonObject jsonObject; + QJsonArray jsonArray; + + // PROD: + QString pathToImg = "/webapp/html/itis/pdf/standard/released"; + // DEV: QString pathToImg = "/webapp_dez/html/itis/pdf/annex/released"; + + QDir directory(pathToImg); + QStringList images = directory.entryList(QStringList() << "*.pdf" << "*.docx" << "*.odt",QDir::Files); + + foreach(QString filename, images) + { + QFileInfo info(pathToImg + "/" + filename); + jsonObject["size"] = info.size() / 1024; + jsonObject["uri"] = "/standard/released/" + filename; + jsonObject["last_modified"] = info.lastModified().toString("yyyy-MM-dd HH:mm:ss"); + jsonObject["name"] = filename; + jsonArray.append(jsonObject); + } + renderJson(jsonArray); +} + +void ReleaseMgmtController::getAnnexCiPDFs() +{ + QJsonObject jsonObject; + QJsonArray jsonArray; + + // PROD: + QString pathToImg = "/webapp/html/itis/pdf/annex/pre-release"; + // DEV: QString pathToImg = "/webapp_dez/html/itis/pdf/annex/pre-release"; + + QDir directory(pathToImg); + QStringList images = directory.entryList(QStringList() << "*.pdf" << "*.docx" << "*.odt",QDir::Files); + + foreach(QString filename, images) + { + QFileInfo info(pathToImg + "/" + filename); + jsonObject["size"] = info.size() / 1024; + jsonObject["uri"] = "/annex/pre-release/" + filename; + jsonObject["last_modified"] = info.lastModified().toString("yyyy-MM-dd HH:mm:ss"); + jsonObject["name"] = filename; + jsonArray.append(jsonObject); + } + renderJson(jsonArray); +} + +void ReleaseMgmtController::getAnnexCdPDFs() +{ + QJsonObject jsonObject; + QJsonArray jsonArray; + + // PROD: + QString pathToImg = "/webapp/html/itis/pdf/annex/released"; + // DEV: QString pathToImg = "/webapp_dez/html/itis/pdf/annex/released"; + + QDir directory(pathToImg); + QStringList images = directory.entryList(QStringList() << "*.pdf" << "*.docx" << "*.odt",QDir::Files); + + foreach(QString filename, images) + { + QFileInfo info(pathToImg + "/" + filename); + jsonObject["size"] = info.size() / 1024; + jsonObject["uri"] = "/annex/released/" + filename; + jsonObject["last_modified"] = info.lastModified().toString("yyyy-MM-dd HH:mm:ss"); + jsonObject["name"] = filename; + jsonArray.append(jsonObject); + } + renderJson(jsonArray); +} + +void ReleaseMgmtController::getAnnexToc() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QMap stdDataMap; + + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_sname_en"] = httpRequest().formItemValue("cat_sname_en"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["ac_class"] = httpRequest().formItemValue("ac_class"); + stdDataMap["pc_class"] = httpRequest().formItemValue("pc_class"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["getStdType"] = httpRequest().formItemValue("getStdType"); + + /* #### + stdDataMap["obj_sname"] = "Annex D"; + stdDataMap["cat_sname_en"] = "Cabling"; + stdDataMap["country"] = "WW"; + stdDataMap["lang"] = "de_DE"; + stdDataMap["spec_active"] = "1"; + stdDataMap["ac_class"] = "3"; + stdDataMap["pc_class"] = "3"; + stdDataMap["spec_release"] = "draft"; + stdDataMap["getStdType"] = "show"; + */ + + renderJson( ReleaseAnnex::getAnnexToc(stdDataMap) ); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::getAnnexRelease() +{ + renderJson( ReleaseAnnex::getAllJson() ); +} + +void ReleaseMgmtController::getAnnexSpec() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString id = httpRequest().queryItemValue("id"); + int lid = id.toInt(); + renderJson( ReleaseAnnex::getAnnexSpec(lid) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::getAnnexList() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QMap stdDataMap; + + + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_sname_en"] = httpRequest().formItemValue("cat_sname_en"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["ac_class"] = httpRequest().formItemValue("ac_class"); + stdDataMap["pc_class"] = httpRequest().formItemValue("pc_class"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["getStdType"] = httpRequest().formItemValue("getStdType"); + + /*/ #### + stdDataMap["obj_sname"] = "Annex B-3"; + stdDataMap["cat_sname_en"] = "Planning"; + stdDataMap["country"] = "WW"; + stdDataMap["lang"] = "de_DE"; + stdDataMap["spec_active"] = "1"; + stdDataMap["ac_class"] = "1"; + stdDataMap["pc_class"] = "1"; + stdDataMap["spec_release"] = "released"; + stdDataMap["getStdType"] = "show"; + */ + + renderJson( ReleaseAnnex::getAnnexList(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::printCdAnnex() +{ + + //QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + // QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category"); + texport(jsonCategories); + + QString obj_sname = httpRequest().formItemValue("obj_sname"); + texport(obj_sname); + QString country = httpRequest().formItemValue("country"); + texport(country); + QString lang = httpRequest().formItemValue("lang"); + texport(lang); + QString ac_class = httpRequest().formItemValue("ac_class"); + texport(ac_class); + QString pc_class = httpRequest().formItemValue("pc_class"); + texport(pc_class); + QString spec_release = "released"; //httpRequest().formItemValue("spec_release"); + texport(spec_release); + QString getStdTyp = "show"; // httpRequest().formItemValue("getStdType"); + texport(getStdTyp); + QString release_id = httpRequest().formItemValue("release_id"); + texport(release_id); + + /* / #### + QString obj_sname = "Annex B-3"; + texport(obj_sname); + QString country = "WW"; + texport(country); + QString lang = "de_DE"; + texport(lang); + QString ac_class = "1"; + texport(ac_class); + QString pc_class = "1"; + texport(pc_class); + QString spec_release = "released"; + texport(spec_release); + QString getStdType = "show"; + texport(getStdType); + QString release_id = "7"; + texport(release_id); + /*/ + + render(); + +} + +void ReleaseMgmtController::showCdAnnex() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + + QString obj_sname = httpRequest().formItemValue("obj_sname"); + texport(obj_sname); + QString country = httpRequest().formItemValue("country"); + texport(country); + QString lang = httpRequest().formItemValue("lang"); + texport(lang); + QString ac_class = httpRequest().formItemValue("ac_class"); + texport(ac_class); + QString pc_class = httpRequest().formItemValue("pc_class"); + texport(pc_class); + QString spec_release = "released"; //httpRequest().formItemValue("spec_release"); + texport(spec_release); + QString getStdTyp = "show"; // httpRequest().formItemValue("getStdType"); + texport(getStdTyp); + QString release_id = httpRequest().formItemValue("release_id"); + texport(release_id); + + /* / #### + QString obj_sname = "Annex B-3"; + texport(obj_sname); + QString country = "WW"; + texport(country); + QString lang = "de_DE"; + texport(lang); + QString ac_class = "1"; + texport(ac_class); + QString pc_class = "1"; + texport(pc_class); + QString spec_release = "released"; + texport(spec_release); + QString getStdType = "show"; + texport(getStdType); + QString release_id = "7"; + texport(release_id); + /*/ + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::index_ciannex() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto releaseMgmtList = ReleaseMgmt::getAll(); + texport(releaseMgmtList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void ReleaseMgmtController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + + +void ReleaseMgmtController::show(const QString &id) +{ + auto releaseMgmt = ReleaseMgmt::get(id.toInt()); + texport(releaseMgmt); + render(); +} + +void ReleaseMgmtController::create() +{ + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto releaseMgmt = httpRequest().formItems("releaseMgmt"); + auto model = ReleaseMgmt::create(releaseMgmt); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(releaseMgmt); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } +} + +void ReleaseMgmtController::saveAnnex(const QString &id) +{ + switch (httpRequest().method()) { + case Tf::Get: { + auto model = ReleaseAnnex::get(id.toInt()); + if (!model.isNull()) { + auto releaseAnnex = model.toVariantMap(); + texport(releaseAnnex); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = ReleaseAnnex::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("saveAnnex", id)); + break; + } + + auto releaseAnnex = httpRequest().formItems("releaseAnnex"); + model.setProperties(releaseAnnex); + + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("saveAnnex", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(releaseAnnex); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } +} + +void ReleaseMgmtController::save(const QString &id) +{ + switch (httpRequest().method()) { + case Tf::Get: { + auto model = ReleaseMgmt::get(id.toInt()); + if (!model.isNull()) { + auto releaseMgmt = model.toVariantMap(); + texport(releaseMgmt); + + // auto lenkinfo = Lenkinfo::model.toVariantMap(); + // texport(lenkinfo); + + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = ReleaseMgmt::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto releaseMgmt = httpRequest().formItems("releaseMgmt"); + model.setProperties(releaseMgmt); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(releaseMgmt); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } +} + +void ReleaseMgmtController::remove(const QString &id) +{ + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto releaseMgmt = ReleaseMgmt::get(id.toInt()); + releaseMgmt.remove(); + redirect(urla("index")); +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(ReleaseMgmtController) diff --git a/controllers/releasemgmtcontroller.h b/controllers/releasemgmtcontroller.h new file mode 100644 index 0000000..b649df4 --- /dev/null +++ b/controllers/releasemgmtcontroller.h @@ -0,0 +1,61 @@ +#ifndef RELEASEMGMTCONTROLLER_H +#define RELEASEMGMTCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT ReleaseMgmtController : public ApplicationController +{ + Q_OBJECT +public: + ReleaseMgmtController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void list_allAnnexCi(); + void listAllAnnexCi(); + void list_allAnnexCd(); + void listAllAnnexCd(); + + void list_allStdCi(); + void listAllStdCi(); + void list_allStdCd(); + void listAllStdCd(); + + void index_ciannex(); + void getAnnexRelease(); + + void showCdAnnex(); + void printCdAnnex(); + + void getAnnexList(); + void getAnnexSpec(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void ci_update(); + + void saveAnnex(const QString &id); + + void remove(const QString &id); + + void getAnnexToc(); + + void getAnnexCiPDFs(); + void getAnnexCdPDFs(); + + void getStdCiPDFs(); + void getStdCdPDFs(); + + void list_pdf(); + void fileRemove(); + + // Test + void writeFile(); + +}; + +#endif // RELEASEMGMTCONTROLLER_H diff --git a/controllers/standardsdatacommentscontroller.cpp b/controllers/standardsdatacommentscontroller.cpp new file mode 100644 index 0000000..5502c4b --- /dev/null +++ b/controllers/standardsdatacommentscontroller.cpp @@ -0,0 +1,286 @@ +#include "standardsdatacommentscontroller.h" +#include "standardsdatacomments.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void StandardsDataCommentsController::getSpecComments(const QString &spec_id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + renderJson( StandardsDataComments::getSpecComments( spec_id.toInt() ) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataCommentsController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto standardsDataCommentsList = StandardsDataComments::getAll(); + texport(standardsDataCommentsList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataCommentsController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto statistik = StandardsDataComments::getStatistics(); + + QString count_id = statistik["count_id"]; + texport(count_id); + QString count_users = statistik["count_users"]; + texport(count_users); + + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataCommentsController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto standardsDataComments = StandardsDataComments::get(id.toInt()); + texport(standardsDataComments); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataCommentsController::createComment() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString spec_id = httpRequest().formItemValue("spec_id"); + QString spec_title = httpRequest().formItemValue("spec_title"); + QString spec_version = httpRequest().formItemValue("spec_version"); + QString user_comment = httpRequest().formItemValue("user_comment"); + + renderJson( StandardsDataComments::createComment(spec_id.toInt(), spec_title, spec_version, user_comment, user.username()) ); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataCommentsController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto standardsDataComments = httpRequest().formItems("standardsDataComments"); + auto model = StandardsDataComments::create(standardsDataComments); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(standardsDataComments); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataCommentsController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = StandardsDataComments::get(id.toInt()); + if (!model.isNull()) { + auto standardsDataComments = model.toVariantMap(); + texport(standardsDataComments); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = StandardsDataComments::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto standardsDataComments = httpRequest().formItems("standardsDataComments"); + model.setProperties(standardsDataComments); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(standardsDataComments); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataCommentsController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto standardsDataComments = StandardsDataComments::get(id.toInt()); + standardsDataComments.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(StandardsDataCommentsController) diff --git a/controllers/standardsdatacommentscontroller.h b/controllers/standardsdatacommentscontroller.h new file mode 100644 index 0000000..77fa904 --- /dev/null +++ b/controllers/standardsdatacommentscontroller.h @@ -0,0 +1,27 @@ +#ifndef STANDARDSDATACOMMENTSCONTROLLER_H +#define STANDARDSDATACOMMENTSCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT StandardsDataCommentsController : public ApplicationController +{ + Q_OBJECT +public: + StandardsDataCommentsController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void show(const QString &id); + void create(); + void createComment(); + void save(const QString &id); + void remove(const QString &id); + + void getSpecComments(const QString &spec_id); + +}; + +#endif // STANDARDSDATACOMMENTSCONTROLLER_H diff --git a/controllers/standardsdatacontroller.cpp b/controllers/standardsdatacontroller.cpp new file mode 100644 index 0000000..1b4f3dc --- /dev/null +++ b/controllers/standardsdatacontroller.cpp @@ -0,0 +1,1107 @@ +#include "standardsdatacontroller.h" +#include "standardsdata.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +#include "objects.h" +#include "catclasses.h" +#include "stdsystem.h" +#include "acclasses.h" +#include "pcclasses.h" +#include "standardsmeta.h" +#include "standardsdatawaste.h" +#include "standardsdatacomments.h" + +void StandardsDataController::doRecover(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + renderJson( StandardsDataWaste::doRecover(id.toInt()) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::listWaste() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + int count = StandardsDataWaste::count(); + QString counter = QString::number(count); + texport(counter); + + // bug in PROD + auto standardsDataWasteList = StandardsDataWaste::getAll(); + //auto standardsDataWasteList = StandardsDataWaste::getAllJson(); + texport(standardsDataWasteList); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::getStdToc() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QMap stdDataMap; + + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_sname_en"] = httpRequest().formItemValue("cat_sname_en"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["ac_class"] = httpRequest().formItemValue("ac_class"); + stdDataMap["pc_class"] = httpRequest().formItemValue("pc_class"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["getStdType"] = httpRequest().formItemValue("getStdType"); + + /* #### + stdDataMap["obj_sname"] = "BD"; + stdDataMap["cat_sname_en"] = "Construction"; + stdDataMap["country"] = "WW"; + stdDataMap["lang"] = "de_DE"; + stdDataMap["spec_active"] = "1"; + stdDataMap["ac_class"] = "3"; + stdDataMap["pc_class"] = "3"; + stdDataMap["spec_release"] = "draft"; + stdDataMap["getStdType"] = "show"; + */ + renderJson( StandardsData::getStdToc(stdDataMap) ); + } + else + { + redirect(QUrl("/account/form")); + } +} + +/*! + * \brief StandardsDataController::getStdList + * + * param = list | show + * +*/ +void StandardsDataController::getStdList() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QMap stdDataMap; + + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_sname_en"] = httpRequest().formItemValue("cat_sname_en"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["ac_class"] = httpRequest().formItemValue("ac_class"); + stdDataMap["pc_class"] = httpRequest().formItemValue("pc_class"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["getStdType"] = httpRequest().formItemValue("getStdType"); + + /* #### + stdDataMap["obj_sname"] = "BD"; + stdDataMap["cat_sname_en"] = "Construction"; + stdDataMap["country"] = "WW"; + stdDataMap["lang"] = "de_DE"; + stdDataMap["spec_active"] = "1"; + stdDataMap["ac_class"] = "3"; + stdDataMap["pc_class"] = "3"; + stdDataMap["spec_release"] = "draft"; + stdDataMap["getStdType"] = "show"; + */ + + if(stdDataMap["getStdType"].compare("list") == 0) + { + renderJson( StandardsData::getStdList(stdDataMap) ); + } + else + { + renderJson( StandardsData::getStdShow(stdDataMap) ); + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::getExistCountries() +{ + renderJson( StandardsData::getExistCountries() ); +} + +void StandardsDataController::showCiStd() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + + QString obj_sname = httpRequest().formItemValue("obj_sname"); + texport(obj_sname); + QString country = httpRequest().formItemValue("country"); + texport(country); + QString lang = httpRequest().formItemValue("lang"); + texport(lang); + QString ac_class = httpRequest().formItemValue("ac_class"); + texport(ac_class); + QString pc_class = httpRequest().formItemValue("pc_class"); + texport(pc_class); + QString spec_release = httpRequest().formItemValue("spec_release"); + texport(spec_release); + QString getStdTyp = httpRequest().formItemValue("getStdType"); + texport(getStdTyp); + QString release_id = httpRequest().formItemValue("release_id"); + texport(release_id); + + + /*/ #### + QString obj_sname = "DBA"; + texport(obj_sname); + QString country = "WW"; + texport(country); + QString lang = "de_DE"; + texport(lang); + QString ac_class = "2"; + texport(ac_class); + QString pc_class = "3"; + texport(pc_class); + QString spec_release = "pre-release"; + texport(spec_release); + QString getStdType = "show"; + texport(getStdType); + QString release_id = "19"; + texport(release_id); + */ + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::showStd() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + + //QJsonArray jsonObjects = Objects::getAllJson("1"); + QJsonArray jsonObjects = Objects::getAllJson( "1", strGroups ); + texport(jsonObjects); + + //QJsonArray jsonCategories = CatClasses::getAllJson("1", "category"); + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + + QJsonArray jsonExistCountries = StandardsData::getExistCountries(); + texport(jsonExistCountries); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::showStdElectron() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + + QJsonArray jsonObjects = Objects::getAllJson("1"); + texport(jsonObjects); + + QJsonArray jsonCategories = CatClasses::getAllJson("1", "category"); + texport(jsonCategories); + + QJsonArray jsonExistCountries = StandardsData::getExistCountries(); + texport(jsonExistCountries); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::getStdSpec() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString id = httpRequest().queryItemValue("id"); + int lid = id.toInt(); + renderJson( StandardsData::getStdSpec(lid) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::listStd() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "r" ); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + + //QJsonArray jsonObjects = Objects::getAllJson("1"); + QJsonArray jsonObjects = Objects::getAllJson( "1", strGroups ); + texport(jsonObjects); + + //QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + QJsonArray jsonCategories= CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + + QJsonArray jsonExistCountries= StandardsData::getExistCountries(); + texport(jsonExistCountries); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::checkLfdnrCat() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString countCheckLfdnrCat = QString::number( StandardsData::countCheckLfdnrCat() ); + texport(countCheckLfdnrCat); + + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::getCheckLfdnrCat() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + renderJson( StandardsData::getCheckLfdnrCat() ); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::uploadImg() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QJsonObject textObject; + + TMultipartFormData &formdata = httpRequest().multipartFormData(); + //QString origname = formdata.originalFileName("picture"); + + QString origname = formdata.originalFileName("upload"); + origname = origname.toLower(); + + QString fpath = "/webapp/html/itis/Img/Objspecs/" + origname; + formdata.renameUploadedFile("upload", fpath); + + textObject["url"] = "/Objspecs/" + origname; + renderJson(textObject); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::getImages() +{ + QJsonObject jsonObject; + QJsonArray jsonArray; + QString pathToImg = "/webapp/html/itis/Img/Objspecs"; + QDir directory(pathToImg); + QStringList images = directory.entryList(QStringList() << "*.jpg" << "*.jpeg" << "*.png" << "*.bmp" << "*.gif",QDir::Files); + + foreach(QString filename, images) + { + QFileInfo info(pathToImg + "/" + filename); + jsonObject["size"] = info.size() / 1024; + jsonObject["img"] = "/Objspecs/" + filename; + jsonObject["name"] = filename; + jsonArray.append(jsonObject); + } + renderJson(jsonArray); +} + +void StandardsDataController::upReleased() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QString id = httpRequest().formItemValue("id"); + int lid = id.toInt(); + renderJson( StandardsData::upReleased(lid) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::doPreRelease() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QMap stdDataMap; + + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["ac_classes"] = httpRequest().formItemValue("ac_classes"); + stdDataMap["pc_classes"] = httpRequest().formItemValue("pc_classes"); + stdDataMap["cat_class"] = httpRequest().formItemValue("cat_class"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["doc_type"] = "standard"; + stdDataMap["rel_requester"] = user.email(); + stdDataMap["relrequest_date"] = httpRequest().formItemValue("relrequest_date"); + + renderJson( StandardsData::doPreRelease(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::upPrelease() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QString id = httpRequest().formItemValue("id"); + int lid = id.toInt(); + renderJson( StandardsData::upPrelease(lid) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::updStdData() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QMap stdDataMap; + + stdDataMap["id"] = httpRequest().formItemValue("id"); + stdDataMap["spec_title"] = httpRequest().formItemValue("spec_title"); + stdDataMap["spec_desc"] = httpRequest().formItemValue("spec_desc"); + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_class"] = httpRequest().formItemValue("cat_class"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["ac_classes"] = httpRequest().formItemValue("ac_classes"); + stdDataMap["pc_classes"] = httpRequest().formItemValue("pc_classes"); + stdDataMap["spec_version"] = httpRequest().formItemValue("spec_version"); + stdDataMap["spec_version_new"] = httpRequest().formItemValue("spec_version_new"); + stdDataMap["lfdnr"] = httpRequest().formItemValue("lfdnr"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["last_editor"] = httpRequest().formItemValue("last_editor"); + stdDataMap["spec_valid_start"] = httpRequest().formItemValue("spec_valid_start"); + stdDataMap["spec_valid_end"] = httpRequest().formItemValue("spec_valid_end"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["spec_content"] = httpRequest().formItemValue("spec_content"); + stdDataMap["g_legacy"] = httpRequest().formItemValue("g_legacy"); + stdDataMap["resp"] = httpRequest().formItemValue("resp"); + stdDataMap["comment"] = httpRequest().formItemValue("comment"); + stdDataMap["marker"] = httpRequest().formItemValue("marker"); + + renderJson( StandardsData::updStdData(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::setStdData() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + QMap stdDataMap; + + stdDataMap["spec_title"] = httpRequest().formItemValue("spec_title"); + stdDataMap["spec_desc"] = httpRequest().formItemValue("spec_desc"); + stdDataMap["obj_sname"] = httpRequest().formItemValue("obj_sname"); + stdDataMap["cat_class"] = httpRequest().formItemValue("cat_class"); + stdDataMap["country"] = httpRequest().formItemValue("country"); + stdDataMap["lang"] = httpRequest().formItemValue("lang"); + stdDataMap["ac_classes"] = httpRequest().formItemValue("ac_classes"); + stdDataMap["pc_classes"] = httpRequest().formItemValue("pc_classes"); + stdDataMap["spec_version"] = httpRequest().formItemValue("spec_version"); + stdDataMap["spec_version_new"] = httpRequest().formItemValue("spec_version_new"); + stdDataMap["lfdnr"] = httpRequest().formItemValue("lfdnr"); + stdDataMap["spec_release"] = httpRequest().formItemValue("spec_release"); + stdDataMap["last_editor"] = httpRequest().formItemValue("last_editor"); + stdDataMap["spec_valid_start"] = httpRequest().formItemValue("spec_valid_start"); + stdDataMap["spec_valid_end"] = httpRequest().formItemValue("spec_valid_end"); + stdDataMap["spec_active"] = httpRequest().formItemValue("spec_active"); + stdDataMap["spec_content"] = httpRequest().formItemValue("spec_content"); + stdDataMap["g_legacy"] = httpRequest().formItemValue("g_legacy"); + stdDataMap["resp"] = httpRequest().formItemValue("resp"); + stdDataMap["comment"] = httpRequest().formItemValue("comment"); + stdDataMap["marker"] = httpRequest().formItemValue("marker"); + + renderJson( StandardsData::setStdData(stdDataMap) ); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::getHighestLfdnr(const QString &category) +{ + renderJson( StandardsData::getHighestLfdnr(category) ); +} + +void StandardsDataController::chkLfdnrEditor() +{ + QMap editMap; + + editMap["cat_class"] = httpRequest().queryItemValue("cat"); + editMap["lfdnr"] = httpRequest().queryItemValue("lfdnr"); + + renderJson( StandardsData::chkLfdnrEditor(editMap) ); +} + +void StandardsDataController::editor_upd(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "u" ); + + auto standardsData = StandardsData::get(id.toInt()); + texport(standardsData); + + auto standardsMeta = StandardsMeta::getBySpecDataId(id.toInt()); + texport(standardsMeta); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + QJsonArray jsonPcClasses = PcClasses::getPcClassesJson(); + texport(jsonPcClasses); + QJsonArray jsonAcClasses = AcClasses::getAcClassesJson(); + texport(jsonAcClasses); + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + QJsonArray jsonObjects = Objects::getAllJson( "1", strGroups ); + //QJsonArray jsonObjects = Objects::getAllJson( "1" ); + texport(jsonObjects); + //QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + QJsonArray jsonCategories= CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + QString userMail = user.email(); + texport(userMail); + QString textcomment = QString::number( StandardsDataComments::getSpecsCommentsCount(id.toInt() )); + texport(textcomment); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::editor_add() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + QString strGroups = ItisUser::sqlGroups( user.groups(), "c" ); + + QJsonArray jsonReleaseTypes = StdSystem::getAllJson("1", "release_types"); + texport(jsonReleaseTypes); + QJsonArray jsonPcClasses = PcClasses::getPcClassesJson(); + texport(jsonPcClasses); + QJsonArray jsonAcClasses = AcClasses::getAcClassesJson(); + texport(jsonAcClasses); + QJsonArray jsonLanguages = StdSystem::getAllJson("1", "languages"); + texport(jsonLanguages); + //QJsonArray jsonObjects = Objects::getAllJson("1"); + QJsonArray jsonObjects = Objects::getAllJson( "1", strGroups ); + texport(jsonObjects); + //QJsonArray jsonCategories= CatClasses::getAllJson("1", "category"); + QJsonArray jsonCategories= CatClasses::getAllJson("1", "category", strGroups); + texport(jsonCategories); + QString userMail = user.email(); + texport(userMail); + + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::getStatistics() +{ + renderJson( StandardsData::getStatistics() ); +} + +void StandardsDataController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto standardsDataList = StandardsData::getAll(); + texport(standardsDataList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto standardsData = StandardsData::get(id.toInt()); + texport(standardsData); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::showWaste(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "cr_d", uri)) + { + auto standardsDataWaste = StandardsDataWaste::get(id.toInt()); + texport(standardsDataWaste); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +void StandardsDataController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto standardsData = httpRequest().formItems("standardsData"); + auto model = StandardsData::create(standardsData); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(standardsData); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = StandardsData::get(id.toInt()); + if (!model.isNull()) { + auto standardsData = model.toVariantMap(); + texport(standardsData); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = StandardsData::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + // StandardsMeta::saveMeta( id.toInt(), user.username() ); + + auto standardsData = httpRequest().formItems("standardsData"); + model.setProperties(standardsData); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(standardsData); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto standardsData = StandardsData::get(id.toInt()); + standardsData.remove(); + + auto standardsMeta = StandardsMeta::getBySpecDataId(id.toInt()); + standardsMeta.remove(); + + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsDataController::removeWaste(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto standardsDataWaste = StandardsDataWaste::get(id.toInt()); + standardsDataWaste.remove(); + redirect(urla("listWaste")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +// Don't remove below this line +T_DEFINE_CONTROLLER(StandardsDataController) diff --git a/controllers/standardsdatacontroller.h b/controllers/standardsdatacontroller.h new file mode 100644 index 0000000..90befea --- /dev/null +++ b/controllers/standardsdatacontroller.h @@ -0,0 +1,54 @@ +#ifndef STANDARDSDATACONTROLLER_H +#define STANDARDSDATACONTROLLER_H + +#include "applicationcontroller.h" + +class T_CONTROLLER_EXPORT StandardsDataController : public ApplicationController +{ + Q_OBJECT +public: + StandardsDataController() : ApplicationController() {} + +public slots: + void index(); + void list_all(); + + void getStatistics(); + void getHighestLfdnr(const QString &category); + void getImages(); + void checkLfdnrCat(); + void getCheckLfdnrCat(); + + void listStd(); + void showStd(); + void showCiStd(); + void showStdElectron(); + void listWaste(); + void getExistCountries(); + + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); + + void editor_add(); + void editor_upd(const QString &id); + void chkLfdnrEditor(); + void setStdData(); + void updStdData(); + void upPrelease(); + void doPreRelease(); + void upReleased(); + + void doRecover(const QString &id); + void showWaste(const QString &id); + void removeWaste(const QString &id); + + void uploadImg(); + + void getStdList(); + void getStdSpec(); + void getStdToc(); +}; + +#endif // STANDARDSDATACONTROLLER_H diff --git a/controllers/standardsmetacontroller.cpp b/controllers/standardsmetacontroller.cpp new file mode 100644 index 0000000..7ba19c8 --- /dev/null +++ b/controllers/standardsmetacontroller.cpp @@ -0,0 +1,235 @@ +#include "standardsmetacontroller.h" +#include "standardsmeta.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void StandardsMetaController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto standardsMetaList = StandardsMeta::getAll(); + texport(standardsMetaList); + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsMetaController::getBySpecDataId(const QString &spec_data_id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto standardsMeta = StandardsMeta::getBySpecDataId(spec_data_id.toInt()); + texport(standardsMeta); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsMetaController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto standardsMeta = StandardsMeta::get(id.toInt()); + texport(standardsMeta); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsMetaController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto standardsMeta = httpRequest().formItems("standardsMeta"); + auto model = StandardsMeta::create(standardsMeta); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(standardsMeta); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsMetaController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = StandardsMeta::get(id.toInt()); + if (!model.isNull()) { + auto standardsMeta = model.toVariantMap(); + texport(standardsMeta); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = StandardsMeta::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto standardsMeta = httpRequest().formItems("standardsMeta"); + model.setProperties(standardsMeta); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(standardsMeta); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StandardsMetaController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto standardsMeta = StandardsMeta::get(id.toInt()); + standardsMeta.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(StandardsMetaController) diff --git a/controllers/standardsmetacontroller.h b/controllers/standardsmetacontroller.h new file mode 100644 index 0000000..9484293 --- /dev/null +++ b/controllers/standardsmetacontroller.h @@ -0,0 +1,22 @@ +#ifndef STANDARDSMETACONTROLLER_H +#define STANDARDSMETACONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT StandardsMetaController : public ApplicationController +{ + Q_OBJECT +public: + StandardsMetaController() : ApplicationController() {} + +public slots: + void index(); + void show(const QString &id); + void getBySpecDataId(const QString &spec_data_id); + void create(); + void save(const QString &id); + void remove(const QString &id); +}; + +#endif // STANDARDSMETACONTROLLER_H diff --git a/controllers/stdsystemcontroller.cpp b/controllers/stdsystemcontroller.cpp new file mode 100644 index 0000000..6fa1af8 --- /dev/null +++ b/controllers/stdsystemcontroller.cpp @@ -0,0 +1,271 @@ +#include "stdsystemcontroller.h" +#include "stdsystem.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void StdSystemController::getAllJson(const QString &active, const QString &std_type) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + renderJson( StdSystem::getAllJson(active, std_type) ); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StdSystemController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto stdSystemList = StdSystem::getAll(); + texport(stdSystemList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StdSystemController::imprint() +{ + int currYear = QDate::currentDate().year(); + QString year = QString::number(currYear); + texport(year); + + QString appversion = StdSystem::getAppVersion(); + texport(appversion); + + render(); +} + +void StdSystemController::license() +{ + int currYear = QDate::currentDate().year(); + QString year = QString::number(currYear); + texport(year); + + QString appversion = StdSystem::getAppVersion(); + texport(appversion); + + render(); +} + +void StdSystemController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StdSystemController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto stdSystem = StdSystem::get(id.toInt()); + texport(stdSystem); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StdSystemController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto stdSystem = httpRequest().formItems("stdSystem"); + auto model = StdSystem::create(stdSystem); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(stdSystem); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StdSystemController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = StdSystem::get(id.toInt()); + if (!model.isNull()) { + auto stdSystem = model.toVariantMap(); + texport(stdSystem); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = StdSystem::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto stdSystem = httpRequest().formItems("stdSystem"); + model.setProperties(stdSystem); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(stdSystem); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void StdSystemController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto stdSystem = StdSystem::get(id.toInt()); + stdSystem.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(StdSystemController) diff --git a/controllers/stdsystemcontroller.h b/controllers/stdsystemcontroller.h new file mode 100644 index 0000000..298fc50 --- /dev/null +++ b/controllers/stdsystemcontroller.h @@ -0,0 +1,27 @@ +#ifndef STDSYSTEMCONTROLLER_H +#define STDSYSTEMCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT StdSystemController : public ApplicationController +{ + Q_OBJECT +public: + StdSystemController() : ApplicationController() {} + +public slots: + void index(); + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); + + void list_all(); + void imprint(); + void license(); + + void getAllJson(const QString &active, const QString &std_type); +}; + +#endif // STDSYSTEMCONTROLLER_H diff --git a/controllers/webmenucontroller.cpp b/controllers/webmenucontroller.cpp new file mode 100644 index 0000000..9d2a2bb --- /dev/null +++ b/controllers/webmenucontroller.cpp @@ -0,0 +1,264 @@ +#include "webmenucontroller.h" +#include "webmenu.h" + +#include "itisuser.h" +#include "itisgroups.h" +#include "accountcontroller.h" +#include "actionrights.h" + +void WebmenuController::list_all() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r", uri)) + { + auto webmenuList = Webmenu::getAll(); + texport(webmenuList); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void WebmenuController::getMnu() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + //renderJson( Webmenu::getMnu(user.groups()) ); + renderJson( Webmenu::getMnu( ItisUser::sqlGroups( user.groups() ) )); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void WebmenuController::getMnuSub() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + QString mnu = httpRequest().queryItemValue("mnu"); + //renderJson( Webmenu::getMnuSub(mnu, user.groups()) ); + renderJson( Webmenu::getMnuSub( mnu, ItisUser::sqlGroups( user.groups() ) )); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void WebmenuController::index() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + render(); + } + else + { + redirect(QUrl("/account/form")); + } +} + +void WebmenuController::show(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "r_d", uri)) + { + auto webmenu = Webmenu::get(id.toInt()); + texport(webmenu); + render(); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void WebmenuController::create() +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "c", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: + render(); + break; + + case Tf::Post: { + auto webmenu = httpRequest().formItems("webmenu"); + auto model = Webmenu::create(webmenu); + + if (!model.isNull()) { + QString notice = "Created successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + QString error = "Failed to create."; + texport(error); + texport(webmenu); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void WebmenuController::save(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "u", uri)) + { + switch (httpRequest().method()) { + case Tf::Get: { + auto model = Webmenu::get(id.toInt()); + if (!model.isNull()) { + auto webmenu = model.toVariantMap(); + texport(webmenu); + render(); + } + break; } + + case Tf::Post: { + QString error; + auto model = Webmenu::get(id.toInt()); + + if (model.isNull()) { + error = "Original data not found. It may have been updated/removed by another transaction."; + tflash(error); + redirect(urla("save", id)); + break; + } + + auto webmenu = httpRequest().formItems("webmenu"); + model.setProperties(webmenu); + if (model.save()) { + QString notice = "Updated successfully."; + tflash(notice); + redirect(urla("show", model.id())); + } else { + error = "Failed to update."; + texport(error); + texport(webmenu); + render(); + } + break; } + + default: + renderErrorResponse(Tf::NotFound); + break; + } + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + +void WebmenuController::remove(const QString &id) +{ + QString username = identityKeyOfLoginUser(); + ItisUser user = ItisUser::getByIdentityKey(username); + if (!user.isNull()) + { + auto conti = TActionController::name(); + auto con = TActionController::activeAction(); + QString uri = "/" + conti + "/" + con; + + if(ActionRights::isInGroups(user.groups(), "d", uri)) + { + if (httpRequest().method() != Tf::Post) { + renderErrorResponse(Tf::NotFound); + return; + } + + auto webmenu = Webmenu::get(id.toInt()); + webmenu.remove(); + redirect(urla("index")); + } + else + { + QString red_msg = "  Not authorized to access the page or resource you were trying to reach."; + texport(red_msg); + render("index"); + } + } + else + { + redirect(QUrl("/account/form")); + } +} + + +// Don't remove below this line +T_DEFINE_CONTROLLER(WebmenuController) diff --git a/controllers/webmenucontroller.h b/controllers/webmenucontroller.h new file mode 100644 index 0000000..b77e100 --- /dev/null +++ b/controllers/webmenucontroller.h @@ -0,0 +1,25 @@ +#ifndef WEBMENUCONTROLLER_H +#define WEBMENUCONTROLLER_H + +#include "applicationcontroller.h" + + +class T_CONTROLLER_EXPORT WebmenuController : public ApplicationController +{ + Q_OBJECT +public: + WebmenuController() : ApplicationController() {} + +public slots: + void index(); + void show(const QString &id); + void create(); + void save(const QString &id); + void remove(const QString &id); + + void list_all(); + void getMnu(); + void getMnuSub(); +}; + +#endif // WEBMENUCONTROLLER_H diff --git a/core b/core new file mode 100644 index 0000000..b995765 Binary files /dev/null and b/core differ diff --git a/helpers/CMakeLists.txt b/helpers/CMakeLists.txt new file mode 100644 index 0000000..d1413d1 --- /dev/null +++ b/helpers/CMakeLists.txt @@ -0,0 +1,30 @@ +add_definitions(-DTF_DLL) + +find_package(Qt5 COMPONENTS Core REQUIRED) + +if (NOT Qt5_FOUND) + message(FATAL_ERROR "Qt5 was not found. Consider setting QT5_CMAKE_PATH to the Qt5Config.cmake directory.") +endif() + +file(GLOB helper_srcs ${PROJECT_SOURCE_DIR}/helpers/*.cpp) +file(GLOB helper_headers ${PROJECT_SOURCE_DIR}/helpers/*.h) + +add_library(helper SHARED + ${helper_srcs} +) +target_include_directories(helper PUBLIC + ${Qt5Core_INCLUDE_DIRS} + ${TreeFrog_INCLUDE_DIR} +) +target_link_libraries(helper + Qt5::Core + ${TreeFrog_LIB} +) +set_target_properties(helper PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib + ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/lib + ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/lib + SOVERSION 1.0 +) diff --git a/helpers/Makefile b/helpers/Makefile new file mode 100644 index 0000000..95e2c51 --- /dev/null +++ b/helpers/Makefile @@ -0,0 +1,406 @@ +############################################################################# +# Makefile for building: libhelper.so.1.0.0 +# Generated by qmake (3.1) (Qt 5.12.8) +# Project: helpers.pro +# Template: lib +# Command: /usr/lib/qt5/bin/qmake -o Makefile helpers.pro CONFIG+=debug +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DTF_DLL -DQT_XML_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB +CFLAGS = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES) +CXXFLAGS = -pipe -g -std=gnu++1y -Wall -W -D_REENTRANT -fPIC $(DEFINES) +INCPATH = -I. -isystem /usr/include/treefrog -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtXml -isystem /usr/include/x86_64-linux-gnu/qt5/QtQml -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I.obj -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ +QMAKE = /usr/lib/qt5/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +QINSTALL = /usr/lib/qt5/bin/qmake -install qinstall +QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = helper1.0.0 +DISTDIR = /webapp_dez/itis_app/helpers/.obj/helper1.0.0 +LINK = g++ +LFLAGS = -shared -Wl,-soname,libhelper.so.1 +LIBS = $(SUBLIBS) -Wl,-rpath,. -Wl,-rpath,/usr/lib -L/usr/lib -ltreefrog -lrt /usr/lib/x86_64-linux-gnu/libQt5Xml.so /usr/lib/x86_64-linux-gnu/libQt5Qml.so /usr/lib/x86_64-linux-gnu/libQt5Network.so /usr/lib/x86_64-linux-gnu/libQt5Core.so -lpthread +AR = ar cqs +RANLIB = +SED = sed +STRIP = strip + +####### Output directory + +OBJECTS_DIR = .obj/ + +####### Files + +SOURCES = applicationhelper.cpp +OBJECTS = .obj/applicationhelper.o +DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + ../.qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + ../appbase.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + helpers.pro applicationhelper.h applicationhelper.cpp +QMAKE_TARGET = helper +DESTDIR = ../lib/ +TARGET = libhelper.so.1.0.0 +TARGETA = ../lib/libhelper.a +TARGET0 = libhelper.so +TARGETD = libhelper.so.1.0.0 +TARGET1 = libhelper.so.1 +TARGET2 = libhelper.so.1.0 + + +first: all +####### Build rules + +../lib/libhelper.so.1.0.0: $(OBJECTS) $(SUBLIBS) $(OBJCOMP) + @test -d ../lib/ || mkdir -p ../lib/ + -$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) $(OBJCOMP) + -ln -s $(TARGET) $(TARGET0) + -ln -s $(TARGET) $(TARGET1) + -ln -s $(TARGET) $(TARGET2) + -$(DEL_FILE) ../lib/$(TARGET) + -$(MOVE) $(TARGET) ../lib/$(TARGET) + -$(DEL_FILE) ../lib/$(TARGET0) + -$(DEL_FILE) ../lib/$(TARGET1) + -$(DEL_FILE) ../lib/$(TARGET2) + -$(MOVE) $(TARGET0) ../lib/$(TARGET0) + -$(MOVE) $(TARGET1) ../lib/$(TARGET1) + -$(MOVE) $(TARGET2) ../lib/$(TARGET2) + + + +staticlib: ../lib/libhelper.a + +../lib/libhelper.a: $(OBJECTS) $(OBJCOMP) + -$(DEL_FILE) $(TARGETA) + $(AR) $(TARGETA) $(OBJECTS) + +Makefile: helpers.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + ../.qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + ../appbase.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + helpers.pro + $(QMAKE) -o Makefile helpers.pro CONFIG+=debug +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf: +../.qmake.stash: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf: +../appbase.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf: +helpers.pro: +qmake: FORCE + @$(QMAKE) -o Makefile helpers.pro CONFIG+=debug + +qmake_all: FORCE + + +all: Makefile ../lib/libhelper.so.1.0.0 + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ + $(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/ + $(COPY_FILE) --parents applicationhelper.h $(DISTDIR)/ + $(COPY_FILE) --parents applicationhelper.cpp $(DISTDIR)/ + + +clean: compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +distclean: clean + -$(DEL_FILE) ../lib/$(TARGET) + -$(DEL_FILE) ../lib/$(TARGET0) ../lib/$(TARGET1) ../lib/$(TARGET2) $(TARGETA) + -$(DEL_FILE) Makefile + + +####### Sub-libraries + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_moc_predefs_make_all: .obj/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) .obj/moc_predefs.h +.obj/moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + g++ -pipe -g -std=gnu++1y -Wall -W -dM -E -o .obj/moc_predefs.h /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + +compiler_moc_header_make_all: +compiler_moc_header_clean: +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_predefs_clean + +####### Compile + +.obj/applicationhelper.o: applicationhelper.cpp applicationhelper.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/applicationhelper.o applicationhelper.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/helpers/applicationhelper.cpp b/helpers/applicationhelper.cpp new file mode 100644 index 0000000..0778329 --- /dev/null +++ b/helpers/applicationhelper.cpp @@ -0,0 +1 @@ +#include "applicationhelper.h" diff --git a/helpers/applicationhelper.h b/helpers/applicationhelper.h new file mode 100644 index 0000000..6ed0b1b --- /dev/null +++ b/helpers/applicationhelper.h @@ -0,0 +1,8 @@ +#pragma once +#include + + +class T_HELPER_EXPORT ApplicationHelper +{ +}; + diff --git a/helpers/helpers.pro b/helpers/helpers.pro new file mode 100644 index 0000000..d62274c --- /dev/null +++ b/helpers/helpers.pro @@ -0,0 +1,17 @@ +TARGET = helper +TEMPLATE = lib +CONFIG += shared c++14 x86_64 +QT += xml qml +QT -= gui +DEFINES += TF_DLL +DESTDIR = ../lib +INCLUDEPATH += +DEPENDPATH += +LIBS += +MOC_DIR = .obj/ +OBJECTS_DIR = .obj/ + +include(../appbase.pri) + +HEADERS += applicationhelper.h +SOURCES += applicationhelper.cpp diff --git a/itis_app.pro b/itis_app.pro new file mode 100644 index 0000000..3737a73 --- /dev/null +++ b/itis_app.pro @@ -0,0 +1,3 @@ +TEMPLATE = subdirs +CONFIG += ordered +SUBDIRS = helpers models views controllers diff --git a/itis_app.pro.user b/itis_app.pro.user new file mode 100644 index 0000000..a52d398 --- /dev/null +++ b/itis_app.pro.user @@ -0,0 +1,314 @@ + + + + + + EnvironmentId + {eaef946f-42ca-4d7e-b054-605ed65ae3c0} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + *.md, *.MD, Makefile + false + true + + + + ProjectExplorer.Project.PluginSettings + + + true + true + true + true + true + + + 0 + true + + true + Builtin.Questionable + + false + true + Builtin.DefaultTidyAndClazy + 3 + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 5.15.1 GCC 64bit + Desktop Qt 5.15.1 GCC 64bit + qt.qt5.5151.gcc_64_kit + 0 + 0 + 0 + + 0 + /home/root/webapp_dez/build-itis_app-Desktop_Qt_5_15_1_GCC_64bit-Debug + /home/root/webapp_dez/build-itis_app-Desktop_Qt_5_15_1_GCC_64bit-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Erstellen + Erstellen + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Bereinigen + Bereinigen + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + /home/root/webapp_dez/build-itis_app-Desktop_Qt_5_15_1_GCC_64bit-Release + /home/root/webapp_dez/build-itis_app-Desktop_Qt_5_15_1_GCC_64bit-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Erstellen + Erstellen + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Bereinigen + Bereinigen + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + /home/root/webapp_dez/build-itis_app-Desktop_Qt_5_15_1_GCC_64bit-Profile + /home/root/webapp_dez/build-itis_app-Desktop_Qt_5_15_1_GCC_64bit-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Erstellen + Erstellen + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Bereinigen + Bereinigen + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deployment + Deployment + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + + 2 + + ProjectExplorer.CustomExecutableRunConfiguration + + false + true + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/itis_routes b/itis_routes new file mode 100644 index 0000000..8fc2078 Binary files /dev/null and b/itis_routes differ diff --git a/itis_routes_ b/itis_routes_ new file mode 100644 index 0000000..7940ea4 Binary files /dev/null and b/itis_routes_ differ diff --git a/itis_routes_prod b/itis_routes_prod new file mode 100644 index 0000000..5915849 Binary files /dev/null and b/itis_routes_prod differ diff --git a/lib/libcontroller.so.1.0.0 b/lib/libcontroller.so.1.0.0 new file mode 100644 index 0000000..1dd20f0 Binary files /dev/null and b/lib/libcontroller.so.1.0.0 differ diff --git a/lib/libhelper.so.1.0.0 b/lib/libhelper.so.1.0.0 new file mode 100644 index 0000000..1e055df Binary files /dev/null and b/lib/libhelper.so.1.0.0 differ diff --git a/lib/libmodel.so.1.0.0 b/lib/libmodel.so.1.0.0 new file mode 100644 index 0000000..4972973 Binary files /dev/null and b/lib/libmodel.so.1.0.0 differ diff --git a/lib/libview.so.1.0.0 b/lib/libview.so.1.0.0 new file mode 100644 index 0000000..57689b6 Binary files /dev/null and b/lib/libview.so.1.0.0 differ diff --git a/models/CMakeLists.txt b/models/CMakeLists.txt new file mode 100644 index 0000000..e42df69 --- /dev/null +++ b/models/CMakeLists.txt @@ -0,0 +1,49 @@ +add_definitions(-DTF_DLL) + +find_package(Qt5 COMPONENTS Core Network Xml Sql Concurrent REQUIRED) +if (NOT Qt5_FOUND) + message(FATAL_ERROR "Qt5 was not found. Consider setting QT5_CMAKE_PATH to the Qt5Config.cmake directory.") +endif() + +file(GLOB model_headers ${PROJECT_SOURCE_DIR}/models/*.h) +file(GLOB model_srcs ${PROJECT_SOURCE_DIR}/models/*.cpp) +file(GLOB model_sqlobjects_headers ${PROJECT_SOURCE_DIR}/models/sqlobjects/*.h) +file(GLOB model_mongoobjects_headers ${PROJECT_SOURCE_DIR}/models/mongoobjects/*.h) + +add_library(model SHARED + ${model_headers} + ${model_srcs} + ${model_sqlobjects_headers} + ${model_mongoobjects_headers} +) +target_include_directories(model PUBLIC + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5Xml_INCLUDE_DIRS} + ${Qt5Sql_INCLUDE_DIRS} + ${Qt5Concurrent_INCLUDE_DIRS} + ${TreeFrog_INCLUDE_DIR} + ${PROJECT_SOURCE_DIR}/models + ${PROJECT_SOURCE_DIR}/models/sqlobjects + ${PROJECT_SOURCE_DIR}/models/mongoobjects +) +target_link_libraries(model + Qt5::Core + Qt5::Network + Qt5::Xml + Qt5::Sql + Qt5::Concurrent + ${TreeFrog_LIB} + helper +) +set_target_properties(model PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib + ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/lib + ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/lib + SOVERSION 1.0 +) +add_dependencies(model + helper +) diff --git a/models/Makefile b/models/Makefile new file mode 100644 index 0000000..fa884cf --- /dev/null +++ b/models/Makefile @@ -0,0 +1,881 @@ +############################################################################# +# Makefile for building: libmodel.so.1.0.0 +# Generated by qmake (3.1) (Qt 5.12.8) +# Project: models.pro +# Template: lib +# Command: /usr/lib/qt5/bin/qmake -o Makefile models.pro CONFIG+=debug +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DTF_DLL -DQT_SQL_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB +CFLAGS = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES) +CXXFLAGS = -pipe -g -std=gnu++1y -Wall -W -D_REENTRANT -fPIC $(DEFINES) +INCPATH = -I. -I../helpers -isystem /usr/include/treefrog -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtSql -isystem /usr/include/x86_64-linux-gnu/qt5/QtQml -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I.obj -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ +QMAKE = /usr/lib/qt5/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +QINSTALL = /usr/lib/qt5/bin/qmake -install qinstall +QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = model1.0.0 +DISTDIR = /webapp_dez/itis_app/models/.obj/model1.0.0 +LINK = g++ +LFLAGS = -shared -Wl,-soname,libmodel.so.1 +LIBS = $(SUBLIBS) -L../lib -lhelper -Wl,-rpath,. -Wl,-rpath,/usr/lib -L/usr/lib -ltreefrog -lrt /usr/lib/x86_64-linux-gnu/libQt5Sql.so /usr/lib/x86_64-linux-gnu/libQt5Qml.so /usr/lib/x86_64-linux-gnu/libQt5Network.so /usr/lib/x86_64-linux-gnu/libQt5Core.so -lpthread +AR = ar cqs +RANLIB = +SED = sed +STRIP = strip + +####### Output directory + +OBJECTS_DIR = .obj/ + +####### Files + +SOURCES = standardsdata.cpp \ + standardsmeta.cpp \ + stdsystem.cpp \ + webmenu.cpp \ + itisuser.cpp \ + objects.cpp \ + catclasses.cpp \ + acclasses.cpp \ + pcclasses.cpp \ + standardsdatawaste.cpp \ + standardsmetawaste.cpp \ + annexdata.cpp \ + annexmeta.cpp \ + annexdatawaste.cpp \ + annexmetawaste.cpp \ + glossar.cpp \ + standardsdatacomments.cpp \ + appvars.cpp \ + itisnews.cpp \ + actionrights.cpp \ + itisgroups.cpp \ + annexdatacomments.cpp \ + releasemgmt.cpp \ + releaseannex.cpp \ + lenkinfo.cpp .obj/moc_standardsdataobject.cpp \ + .obj/moc_standardsmetaobject.cpp \ + .obj/moc_stdsystemobject.cpp \ + .obj/moc_webmenuobject.cpp \ + .obj/moc_itisuserobject.cpp \ + .obj/moc_objectsobject.cpp \ + .obj/moc_catclassesobject.cpp \ + .obj/moc_acclassesobject.cpp \ + .obj/moc_pcclassesobject.cpp \ + .obj/moc_standardsdatawasteobject.cpp \ + .obj/moc_standardsmetawasteobject.cpp \ + .obj/moc_annexdataobject.cpp \ + .obj/moc_annexmetaobject.cpp \ + .obj/moc_annexdatawasteobject.cpp \ + .obj/moc_annexmetawasteobject.cpp \ + .obj/moc_glossarobject.cpp \ + .obj/moc_standardsdatacommentsobject.cpp \ + .obj/moc_appvarsobject.cpp \ + .obj/moc_itisnewsobject.cpp \ + .obj/moc_actionrightsobject.cpp \ + .obj/moc_itisgroupsobject.cpp \ + .obj/moc_annexdatacommentsobject.cpp \ + .obj/moc_releasemgmtobject.cpp \ + .obj/moc_releaseannexobject.cpp \ + .obj/moc_lenkinfoobject.cpp +OBJECTS = .obj/standardsdata.o \ + .obj/standardsmeta.o \ + .obj/stdsystem.o \ + .obj/webmenu.o \ + .obj/itisuser.o \ + .obj/objects.o \ + .obj/catclasses.o \ + .obj/acclasses.o \ + .obj/pcclasses.o \ + .obj/standardsdatawaste.o \ + .obj/standardsmetawaste.o \ + .obj/annexdata.o \ + .obj/annexmeta.o \ + .obj/annexdatawaste.o \ + .obj/annexmetawaste.o \ + .obj/glossar.o \ + .obj/standardsdatacomments.o \ + .obj/appvars.o \ + .obj/itisnews.o \ + .obj/actionrights.o \ + .obj/itisgroups.o \ + .obj/annexdatacomments.o \ + .obj/releasemgmt.o \ + .obj/releaseannex.o \ + .obj/lenkinfo.o \ + .obj/moc_standardsdataobject.o \ + .obj/moc_standardsmetaobject.o \ + .obj/moc_stdsystemobject.o \ + .obj/moc_webmenuobject.o \ + .obj/moc_itisuserobject.o \ + .obj/moc_objectsobject.o \ + .obj/moc_catclassesobject.o \ + .obj/moc_acclassesobject.o \ + .obj/moc_pcclassesobject.o \ + .obj/moc_standardsdatawasteobject.o \ + .obj/moc_standardsmetawasteobject.o \ + .obj/moc_annexdataobject.o \ + .obj/moc_annexmetaobject.o \ + .obj/moc_annexdatawasteobject.o \ + .obj/moc_annexmetawasteobject.o \ + .obj/moc_glossarobject.o \ + .obj/moc_standardsdatacommentsobject.o \ + .obj/moc_appvarsobject.o \ + .obj/moc_itisnewsobject.o \ + .obj/moc_actionrightsobject.o \ + .obj/moc_itisgroupsobject.o \ + .obj/moc_annexdatacommentsobject.o \ + .obj/moc_releasemgmtobject.o \ + .obj/moc_releaseannexobject.o \ + .obj/moc_lenkinfoobject.o +DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + ../.qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + ../appbase.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + models.pro sqlobjects/standardsdataobject.h \ + standardsdata.h \ + sqlobjects/standardsmetaobject.h \ + standardsmeta.h \ + sqlobjects/stdsystemobject.h \ + stdsystem.h \ + sqlobjects/webmenuobject.h \ + webmenu.h \ + sqlobjects/itisuserobject.h \ + itisuser.h \ + sqlobjects/objectsobject.h \ + objects.h \ + sqlobjects/catclassesobject.h \ + catclasses.h \ + sqlobjects/acclassesobject.h \ + acclasses.h \ + sqlobjects/pcclassesobject.h \ + pcclasses.h \ + sqlobjects/standardsdatawasteobject.h \ + standardsdatawaste.h \ + sqlobjects/standardsmetawasteobject.h \ + standardsmetawaste.h \ + sqlobjects/annexdataobject.h \ + annexdata.h \ + sqlobjects/annexmetaobject.h \ + annexmeta.h \ + sqlobjects/annexdatawasteobject.h \ + annexdatawaste.h \ + sqlobjects/annexmetawasteobject.h \ + annexmetawaste.h \ + sqlobjects/glossarobject.h \ + glossar.h \ + sqlobjects/standardsdatacommentsobject.h \ + standardsdatacomments.h \ + sqlobjects/appvarsobject.h \ + appvars.h \ + sqlobjects/itisnewsobject.h \ + itisnews.h \ + sqlobjects/actionrightsobject.h \ + actionrights.h \ + sqlobjects/itisgroupsobject.h \ + itisgroups.h \ + sqlobjects/annexdatacommentsobject.h \ + annexdatacomments.h \ + sqlobjects/releasemgmtobject.h \ + releasemgmt.h \ + sqlobjects/releaseannexobject.h \ + releaseannex.h \ + sqlobjects/lenkinfoobject.h \ + lenkinfo.h standardsdata.cpp \ + standardsmeta.cpp \ + stdsystem.cpp \ + webmenu.cpp \ + itisuser.cpp \ + objects.cpp \ + catclasses.cpp \ + acclasses.cpp \ + pcclasses.cpp \ + standardsdatawaste.cpp \ + standardsmetawaste.cpp \ + annexdata.cpp \ + annexmeta.cpp \ + annexdatawaste.cpp \ + annexmetawaste.cpp \ + glossar.cpp \ + standardsdatacomments.cpp \ + appvars.cpp \ + itisnews.cpp \ + actionrights.cpp \ + itisgroups.cpp \ + annexdatacomments.cpp \ + releasemgmt.cpp \ + releaseannex.cpp \ + lenkinfo.cpp +QMAKE_TARGET = model +DESTDIR = ../lib/ +TARGET = libmodel.so.1.0.0 +TARGETA = ../lib/libmodel.a +TARGET0 = libmodel.so +TARGETD = libmodel.so.1.0.0 +TARGET1 = libmodel.so.1 +TARGET2 = libmodel.so.1.0 + + +first: all +####### Build rules + +../lib/libmodel.so.1.0.0: $(OBJECTS) $(SUBLIBS) $(OBJCOMP) + @test -d ../lib/ || mkdir -p ../lib/ + -$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) $(OBJCOMP) + -ln -s $(TARGET) $(TARGET0) + -ln -s $(TARGET) $(TARGET1) + -ln -s $(TARGET) $(TARGET2) + -$(DEL_FILE) ../lib/$(TARGET) + -$(MOVE) $(TARGET) ../lib/$(TARGET) + -$(DEL_FILE) ../lib/$(TARGET0) + -$(DEL_FILE) ../lib/$(TARGET1) + -$(DEL_FILE) ../lib/$(TARGET2) + -$(MOVE) $(TARGET0) ../lib/$(TARGET0) + -$(MOVE) $(TARGET1) ../lib/$(TARGET1) + -$(MOVE) $(TARGET2) ../lib/$(TARGET2) + + + +staticlib: ../lib/libmodel.a + +../lib/libmodel.a: $(OBJECTS) $(OBJCOMP) + -$(DEL_FILE) $(TARGETA) + $(AR) $(TARGETA) $(OBJECTS) + +Makefile: models.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + ../.qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + ../appbase.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + models.pro + $(QMAKE) -o Makefile models.pro CONFIG+=debug +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf: +../.qmake.stash: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf: +../appbase.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf: +models.pro: +qmake: FORCE + @$(QMAKE) -o Makefile models.pro CONFIG+=debug + +qmake_all: FORCE + + +all: Makefile ../lib/libmodel.so.1.0.0 + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ + $(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/ + $(COPY_FILE) --parents sqlobjects/standardsdataobject.h standardsdata.h sqlobjects/standardsmetaobject.h standardsmeta.h sqlobjects/stdsystemobject.h stdsystem.h sqlobjects/webmenuobject.h webmenu.h sqlobjects/itisuserobject.h itisuser.h sqlobjects/objectsobject.h objects.h sqlobjects/catclassesobject.h catclasses.h sqlobjects/acclassesobject.h acclasses.h sqlobjects/pcclassesobject.h pcclasses.h sqlobjects/standardsdatawasteobject.h standardsdatawaste.h sqlobjects/standardsmetawasteobject.h standardsmetawaste.h sqlobjects/annexdataobject.h annexdata.h sqlobjects/annexmetaobject.h annexmeta.h sqlobjects/annexdatawasteobject.h annexdatawaste.h sqlobjects/annexmetawasteobject.h annexmetawaste.h sqlobjects/glossarobject.h glossar.h sqlobjects/standardsdatacommentsobject.h standardsdatacomments.h sqlobjects/appvarsobject.h appvars.h sqlobjects/itisnewsobject.h itisnews.h sqlobjects/actionrightsobject.h actionrights.h sqlobjects/itisgroupsobject.h itisgroups.h sqlobjects/annexdatacommentsobject.h annexdatacomments.h sqlobjects/releasemgmtobject.h releasemgmt.h sqlobjects/releaseannexobject.h releaseannex.h sqlobjects/lenkinfoobject.h lenkinfo.h $(DISTDIR)/ + $(COPY_FILE) --parents standardsdata.cpp standardsmeta.cpp stdsystem.cpp webmenu.cpp itisuser.cpp objects.cpp catclasses.cpp acclasses.cpp pcclasses.cpp standardsdatawaste.cpp standardsmetawaste.cpp annexdata.cpp annexmeta.cpp annexdatawaste.cpp annexmetawaste.cpp glossar.cpp standardsdatacomments.cpp appvars.cpp itisnews.cpp actionrights.cpp itisgroups.cpp annexdatacomments.cpp releasemgmt.cpp releaseannex.cpp lenkinfo.cpp $(DISTDIR)/ + + +clean: compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +distclean: clean + -$(DEL_FILE) ../lib/$(TARGET) + -$(DEL_FILE) ../lib/$(TARGET0) ../lib/$(TARGET1) ../lib/$(TARGET2) $(TARGETA) + -$(DEL_FILE) Makefile + + +####### Sub-libraries + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_moc_predefs_make_all: .obj/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) .obj/moc_predefs.h +.obj/moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + g++ -pipe -g -std=gnu++1y -Wall -W -dM -E -o .obj/moc_predefs.h /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + +compiler_moc_header_make_all: .obj/moc_standardsdataobject.cpp .obj/moc_standardsmetaobject.cpp .obj/moc_stdsystemobject.cpp .obj/moc_webmenuobject.cpp .obj/moc_itisuserobject.cpp .obj/moc_objectsobject.cpp .obj/moc_catclassesobject.cpp .obj/moc_acclassesobject.cpp .obj/moc_pcclassesobject.cpp .obj/moc_standardsdatawasteobject.cpp .obj/moc_standardsmetawasteobject.cpp .obj/moc_annexdataobject.cpp .obj/moc_annexmetaobject.cpp .obj/moc_annexdatawasteobject.cpp .obj/moc_annexmetawasteobject.cpp .obj/moc_glossarobject.cpp .obj/moc_standardsdatacommentsobject.cpp .obj/moc_appvarsobject.cpp .obj/moc_itisnewsobject.cpp .obj/moc_actionrightsobject.cpp .obj/moc_itisgroupsobject.cpp .obj/moc_annexdatacommentsobject.cpp .obj/moc_releasemgmtobject.cpp .obj/moc_releaseannexobject.cpp .obj/moc_lenkinfoobject.cpp +compiler_moc_header_clean: + -$(DEL_FILE) .obj/moc_standardsdataobject.cpp .obj/moc_standardsmetaobject.cpp .obj/moc_stdsystemobject.cpp .obj/moc_webmenuobject.cpp .obj/moc_itisuserobject.cpp .obj/moc_objectsobject.cpp .obj/moc_catclassesobject.cpp .obj/moc_acclassesobject.cpp .obj/moc_pcclassesobject.cpp .obj/moc_standardsdatawasteobject.cpp .obj/moc_standardsmetawasteobject.cpp .obj/moc_annexdataobject.cpp .obj/moc_annexmetaobject.cpp .obj/moc_annexdatawasteobject.cpp .obj/moc_annexmetawasteobject.cpp .obj/moc_glossarobject.cpp .obj/moc_standardsdatacommentsobject.cpp .obj/moc_appvarsobject.cpp .obj/moc_itisnewsobject.cpp .obj/moc_actionrightsobject.cpp .obj/moc_itisgroupsobject.cpp .obj/moc_annexdatacommentsobject.cpp .obj/moc_releasemgmtobject.cpp .obj/moc_releaseannexobject.cpp .obj/moc_lenkinfoobject.cpp +.obj/moc_standardsdataobject.cpp: sqlobjects/standardsdataobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/standardsdataobject.h -o .obj/moc_standardsdataobject.cpp + +.obj/moc_standardsmetaobject.cpp: sqlobjects/standardsmetaobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/standardsmetaobject.h -o .obj/moc_standardsmetaobject.cpp + +.obj/moc_stdsystemobject.cpp: sqlobjects/stdsystemobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/stdsystemobject.h -o .obj/moc_stdsystemobject.cpp + +.obj/moc_webmenuobject.cpp: sqlobjects/webmenuobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/webmenuobject.h -o .obj/moc_webmenuobject.cpp + +.obj/moc_itisuserobject.cpp: sqlobjects/itisuserobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/itisuserobject.h -o .obj/moc_itisuserobject.cpp + +.obj/moc_objectsobject.cpp: sqlobjects/objectsobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/objectsobject.h -o .obj/moc_objectsobject.cpp + +.obj/moc_catclassesobject.cpp: sqlobjects/catclassesobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/catclassesobject.h -o .obj/moc_catclassesobject.cpp + +.obj/moc_acclassesobject.cpp: sqlobjects/acclassesobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/acclassesobject.h -o .obj/moc_acclassesobject.cpp + +.obj/moc_pcclassesobject.cpp: sqlobjects/pcclassesobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/pcclassesobject.h -o .obj/moc_pcclassesobject.cpp + +.obj/moc_standardsdatawasteobject.cpp: sqlobjects/standardsdatawasteobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/standardsdatawasteobject.h -o .obj/moc_standardsdatawasteobject.cpp + +.obj/moc_standardsmetawasteobject.cpp: sqlobjects/standardsmetawasteobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/standardsmetawasteobject.h -o .obj/moc_standardsmetawasteobject.cpp + +.obj/moc_annexdataobject.cpp: sqlobjects/annexdataobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/annexdataobject.h -o .obj/moc_annexdataobject.cpp + +.obj/moc_annexmetaobject.cpp: sqlobjects/annexmetaobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/annexmetaobject.h -o .obj/moc_annexmetaobject.cpp + +.obj/moc_annexdatawasteobject.cpp: sqlobjects/annexdatawasteobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/annexdatawasteobject.h -o .obj/moc_annexdatawasteobject.cpp + +.obj/moc_annexmetawasteobject.cpp: sqlobjects/annexmetawasteobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/annexmetawasteobject.h -o .obj/moc_annexmetawasteobject.cpp + +.obj/moc_glossarobject.cpp: sqlobjects/glossarobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/glossarobject.h -o .obj/moc_glossarobject.cpp + +.obj/moc_standardsdatacommentsobject.cpp: sqlobjects/standardsdatacommentsobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/standardsdatacommentsobject.h -o .obj/moc_standardsdatacommentsobject.cpp + +.obj/moc_appvarsobject.cpp: sqlobjects/appvarsobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/appvarsobject.h -o .obj/moc_appvarsobject.cpp + +.obj/moc_itisnewsobject.cpp: sqlobjects/itisnewsobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/itisnewsobject.h -o .obj/moc_itisnewsobject.cpp + +.obj/moc_actionrightsobject.cpp: sqlobjects/actionrightsobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/actionrightsobject.h -o .obj/moc_actionrightsobject.cpp + +.obj/moc_itisgroupsobject.cpp: sqlobjects/itisgroupsobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/itisgroupsobject.h -o .obj/moc_itisgroupsobject.cpp + +.obj/moc_annexdatacommentsobject.cpp: sqlobjects/annexdatacommentsobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/annexdatacommentsobject.h -o .obj/moc_annexdatacommentsobject.cpp + +.obj/moc_releasemgmtobject.cpp: sqlobjects/releasemgmtobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/releasemgmtobject.h -o .obj/moc_releasemgmtobject.cpp + +.obj/moc_releaseannexobject.cpp: sqlobjects/releaseannexobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/releaseannexobject.h -o .obj/moc_releaseannexobject.cpp + +.obj/moc_lenkinfoobject.cpp: sqlobjects/lenkinfoobject.h \ + .obj/moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /webapp_dez/itis_app/models/.obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/webapp_dez/itis_app/models -I/webapp_dez/itis_app/helpers -I/usr/include/treefrog -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include sqlobjects/lenkinfoobject.h -o .obj/moc_lenkinfoobject.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_predefs_clean compiler_moc_header_clean + +####### Compile + +.obj/standardsdata.o: standardsdata.cpp standardsdata.h \ + sqlobjects/standardsdataobject.h \ + catclasses.h \ + standardsdatacomments.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/standardsdata.o standardsdata.cpp + +.obj/standardsmeta.o: standardsmeta.cpp standardsmeta.h \ + sqlobjects/standardsmetaobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/standardsmeta.o standardsmeta.cpp + +.obj/stdsystem.o: stdsystem.cpp stdsystem.h \ + sqlobjects/stdsystemobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/stdsystem.o stdsystem.cpp + +.obj/webmenu.o: webmenu.cpp webmenu.h \ + sqlobjects/webmenuobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/webmenu.o webmenu.cpp + +.obj/itisuser.o: itisuser.cpp itisuser.h \ + sqlobjects/itisuserobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/itisuser.o itisuser.cpp + +.obj/objects.o: objects.cpp objects.h \ + sqlobjects/objectsobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/objects.o objects.cpp + +.obj/catclasses.o: catclasses.cpp catclasses.h \ + sqlobjects/catclassesobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/catclasses.o catclasses.cpp + +.obj/acclasses.o: acclasses.cpp acclasses.h \ + sqlobjects/acclassesobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/acclasses.o acclasses.cpp + +.obj/pcclasses.o: pcclasses.cpp pcclasses.h \ + sqlobjects/pcclassesobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/pcclasses.o pcclasses.cpp + +.obj/standardsdatawaste.o: standardsdatawaste.cpp standardsdatawaste.h \ + sqlobjects/standardsdatawasteobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/standardsdatawaste.o standardsdatawaste.cpp + +.obj/standardsmetawaste.o: standardsmetawaste.cpp standardsmetawaste.h \ + sqlobjects/standardsmetawasteobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/standardsmetawaste.o standardsmetawaste.cpp + +.obj/annexdata.o: annexdata.cpp annexdata.h \ + sqlobjects/annexdataobject.h \ + catclasses.h \ + annexdatacomments.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/annexdata.o annexdata.cpp + +.obj/annexmeta.o: annexmeta.cpp annexmeta.h \ + sqlobjects/annexmetaobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/annexmeta.o annexmeta.cpp + +.obj/annexdatawaste.o: annexdatawaste.cpp annexdatawaste.h \ + sqlobjects/annexdatawasteobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/annexdatawaste.o annexdatawaste.cpp + +.obj/annexmetawaste.o: annexmetawaste.cpp annexmetawaste.h \ + sqlobjects/annexmetawasteobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/annexmetawaste.o annexmetawaste.cpp + +.obj/glossar.o: glossar.cpp glossar.h \ + sqlobjects/glossarobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/glossar.o glossar.cpp + +.obj/standardsdatacomments.o: standardsdatacomments.cpp standardsdatacomments.h \ + sqlobjects/standardsdatacommentsobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/standardsdatacomments.o standardsdatacomments.cpp + +.obj/appvars.o: appvars.cpp appvars.h \ + sqlobjects/appvarsobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/appvars.o appvars.cpp + +.obj/itisnews.o: itisnews.cpp itisnews.h \ + sqlobjects/itisnewsobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/itisnews.o itisnews.cpp + +.obj/actionrights.o: actionrights.cpp actionrights.h \ + sqlobjects/actionrightsobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/actionrights.o actionrights.cpp + +.obj/itisgroups.o: itisgroups.cpp itisgroups.h \ + sqlobjects/itisgroupsobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/itisgroups.o itisgroups.cpp + +.obj/annexdatacomments.o: annexdatacomments.cpp annexdatacomments.h \ + sqlobjects/annexdatacommentsobject.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/annexdatacomments.o annexdatacomments.cpp + +.obj/releasemgmt.o: releasemgmt.cpp releasemgmt.h \ + sqlobjects/releasemgmtobject.h \ + stdsystem.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/releasemgmt.o releasemgmt.cpp + +.obj/releaseannex.o: releaseannex.cpp releaseannex.h \ + sqlobjects/releaseannexobject.h \ + catclasses.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/releaseannex.o releaseannex.cpp + +.obj/lenkinfo.o: lenkinfo.cpp lenkinfo.h \ + sqlobjects/lenkinfoobject.h \ + stdsystem.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/lenkinfo.o lenkinfo.cpp + +.obj/moc_standardsdataobject.o: .obj/moc_standardsdataobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_standardsdataobject.o .obj/moc_standardsdataobject.cpp + +.obj/moc_standardsmetaobject.o: .obj/moc_standardsmetaobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_standardsmetaobject.o .obj/moc_standardsmetaobject.cpp + +.obj/moc_stdsystemobject.o: .obj/moc_stdsystemobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_stdsystemobject.o .obj/moc_stdsystemobject.cpp + +.obj/moc_webmenuobject.o: .obj/moc_webmenuobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_webmenuobject.o .obj/moc_webmenuobject.cpp + +.obj/moc_itisuserobject.o: .obj/moc_itisuserobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_itisuserobject.o .obj/moc_itisuserobject.cpp + +.obj/moc_objectsobject.o: .obj/moc_objectsobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_objectsobject.o .obj/moc_objectsobject.cpp + +.obj/moc_catclassesobject.o: .obj/moc_catclassesobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_catclassesobject.o .obj/moc_catclassesobject.cpp + +.obj/moc_acclassesobject.o: .obj/moc_acclassesobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_acclassesobject.o .obj/moc_acclassesobject.cpp + +.obj/moc_pcclassesobject.o: .obj/moc_pcclassesobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_pcclassesobject.o .obj/moc_pcclassesobject.cpp + +.obj/moc_standardsdatawasteobject.o: .obj/moc_standardsdatawasteobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_standardsdatawasteobject.o .obj/moc_standardsdatawasteobject.cpp + +.obj/moc_standardsmetawasteobject.o: .obj/moc_standardsmetawasteobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_standardsmetawasteobject.o .obj/moc_standardsmetawasteobject.cpp + +.obj/moc_annexdataobject.o: .obj/moc_annexdataobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_annexdataobject.o .obj/moc_annexdataobject.cpp + +.obj/moc_annexmetaobject.o: .obj/moc_annexmetaobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_annexmetaobject.o .obj/moc_annexmetaobject.cpp + +.obj/moc_annexdatawasteobject.o: .obj/moc_annexdatawasteobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_annexdatawasteobject.o .obj/moc_annexdatawasteobject.cpp + +.obj/moc_annexmetawasteobject.o: .obj/moc_annexmetawasteobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_annexmetawasteobject.o .obj/moc_annexmetawasteobject.cpp + +.obj/moc_glossarobject.o: .obj/moc_glossarobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_glossarobject.o .obj/moc_glossarobject.cpp + +.obj/moc_standardsdatacommentsobject.o: .obj/moc_standardsdatacommentsobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_standardsdatacommentsobject.o .obj/moc_standardsdatacommentsobject.cpp + +.obj/moc_appvarsobject.o: .obj/moc_appvarsobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_appvarsobject.o .obj/moc_appvarsobject.cpp + +.obj/moc_itisnewsobject.o: .obj/moc_itisnewsobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_itisnewsobject.o .obj/moc_itisnewsobject.cpp + +.obj/moc_actionrightsobject.o: .obj/moc_actionrightsobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_actionrightsobject.o .obj/moc_actionrightsobject.cpp + +.obj/moc_itisgroupsobject.o: .obj/moc_itisgroupsobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_itisgroupsobject.o .obj/moc_itisgroupsobject.cpp + +.obj/moc_annexdatacommentsobject.o: .obj/moc_annexdatacommentsobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_annexdatacommentsobject.o .obj/moc_annexdatacommentsobject.cpp + +.obj/moc_releasemgmtobject.o: .obj/moc_releasemgmtobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_releasemgmtobject.o .obj/moc_releasemgmtobject.cpp + +.obj/moc_releaseannexobject.o: .obj/moc_releaseannexobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_releaseannexobject.o .obj/moc_releaseannexobject.cpp + +.obj/moc_lenkinfoobject.o: .obj/moc_lenkinfoobject.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_lenkinfoobject.o .obj/moc_lenkinfoobject.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/models/acclasses.cpp b/models/acclasses.cpp new file mode 100644 index 0000000..f95c85e --- /dev/null +++ b/models/acclasses.cpp @@ -0,0 +1,221 @@ +#include +#include "acclasses.h" +#include "sqlobjects/acclassesobject.h" + +AcClasses::AcClasses() : + TAbstractModel(), + d(new AcClassesObject()) +{ + // set the initial parameters +} + +AcClasses::AcClasses(const AcClasses &other) : + TAbstractModel(), + d(other.d) +{ } + +AcClasses::AcClasses(const AcClassesObject &object) : + TAbstractModel(), + d(new AcClassesObject(object)) +{ } + +AcClasses::~AcClasses() +{ + // If the reference count becomes 0, + // the shared data object 'AcClassesObject' is deleted. +} + +// ##### + +QJsonArray AcClasses::getObjAcJson(QString &obj, int &active) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, obj_sname, ac_class, active FROM public.ac_classes WHERE obj_sname = ? AND active = ? order by ac_class"); + query.addBindValue(obj); + query.addBindValue(active); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["ac_class"] = query.value(2).toString(); + jsonObject["active"] = query.value(3).toString(); + jsonArray.append(jsonObject); + } + jsonObject = QJsonObject(); + jsonObject["ERROR"] = "0"; + jsonArray.append(jsonObject); + return jsonArray; +} + +QJsonArray AcClasses::getAcClassesJson() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT distinct(ac_class) FROM public.ac_classes order by ac_class;"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["sys_msg"] = msg; + jsonObject["sys_err"] = "1"; + jsonArray.append(jsonObject); + return jsonArray; + } + + while (query.next()) + { + jsonObject["ac_class"] = query.value(0).toString(); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +int AcClasses::id() const +{ + return d->id; +} + +QString AcClasses::objSname() const +{ + return d->obj_sname; +} + +void AcClasses::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +int AcClasses::acClass() const +{ + return d->ac_class; +} + +void AcClasses::setAcClass(int acClass) +{ + d->ac_class = acClass; +} + +QString AcClasses::classType() const +{ + return d->class_type; +} + +void AcClasses::setClassType(const QString &classType) +{ + d->class_type = classType; +} + +int AcClasses::active() const +{ + return d->active; +} + +void AcClasses::setActive(int active) +{ + d->active = active; +} + +AcClasses &AcClasses::operator=(const AcClasses &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +AcClasses AcClasses::create(const QString &objSname, int acClass, const QString &classType, int active) +{ + AcClassesObject obj; + obj.obj_sname = objSname; + obj.ac_class = acClass; + obj.class_type = classType; + obj.active = active; + if (!obj.create()) { + return AcClasses(); + } + return AcClasses(obj); +} + +AcClasses AcClasses::create(const QVariantMap &values) +{ + AcClasses model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +AcClasses AcClasses::get(int id) +{ + TSqlORMapper mapper; + return AcClasses(mapper.findByPrimaryKey(id)); +} + +int AcClasses::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList AcClasses::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray AcClasses::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(AcClasses(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *AcClasses::modelData() +{ + return d.data(); +} + +const TModelObject *AcClasses::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const AcClasses &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, AcClasses &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(AcClasses) diff --git a/models/acclasses.h b/models/acclasses.h new file mode 100644 index 0000000..4e32079 --- /dev/null +++ b/models/acclasses.h @@ -0,0 +1,62 @@ +#ifndef ACCLASSES_H +#define ACCLASSES_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class AcClassesObject; +class QJsonArray; + + +class T_MODEL_EXPORT AcClasses : public TAbstractModel +{ +public: + AcClasses(); + AcClasses(const AcClasses &other); + AcClasses(const AcClassesObject &object); + ~AcClasses(); + + int id() const; + QString objSname() const; + void setObjSname(const QString &objSname); + int acClass() const; + void setAcClass(int acClass); + QString classType() const; + void setClassType(const QString &classType); + int active() const; + void setActive(int active); + AcClasses &operator=(const AcClasses &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static AcClasses create(const QString &objSname, int acClass, const QString &classType, int active); + static AcClasses create(const QVariantMap &values); + static AcClasses get(int id); + static int count(); + + static QList getAll(); + static QJsonArray getAllJson(); + static QJsonArray getAcClassesJson(); + static QJsonArray getObjAcJson(QString &obj, int &active); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const AcClasses &model); + friend QDataStream &operator>>(QDataStream &ds, AcClasses &model); +}; + +Q_DECLARE_METATYPE(AcClasses) +Q_DECLARE_METATYPE(QList) + +#endif // ACCLASSES_H diff --git a/models/actionrights.cpp b/models/actionrights.cpp new file mode 100644 index 0000000..a83219d --- /dev/null +++ b/models/actionrights.cpp @@ -0,0 +1,221 @@ +#include +#include "actionrights.h" +#include "sqlobjects/actionrightsobject.h" + +ActionRights::ActionRights() : + TAbstractModel(), + d(new ActionRightsObject()) +{ + // set the initial parameters +} + +ActionRights::ActionRights(const ActionRights &other) : + TAbstractModel(), + d(other.d) +{ } + +ActionRights::ActionRights(const ActionRightsObject &object) : + TAbstractModel(), + d(new ActionRightsObject(object)) +{ } + +ActionRights::~ActionRights() +{ + // If the reference count becomes 0, + // the shared data object 'ActionRightsObject' is deleted. +} + +// ##### + +bool ActionRights::isInGroups(const QString &userGroups, const QString &crud, const QString &uri) +{ + TSqlQuery query; + QString msg; + + QString user_groups = userGroups; + user_groups.replace("{", "").replace("}", ""); + QStringList usergroups = user_groups.split(","); + + QString andStr; + + int i = 0; + do + { + if(i == 0) + { + andStr.append("(array_to_string(groups, ',') like '%" + usergroups[i] + ":%" + crud + "%'"); + } + else + { + //andStr.append(" OR array_to_string(groups, ',') like '" + usergroups[i] + ":%" + crud + "%'"); + andStr.append(" OR array_to_string(groups, ',') like '%" + usergroups[i] + ":%" + crud + "%'"); + } + i++; + }while(i < usergroups.size()); + andStr.append(")"); + + query.prepare("SELECT * FROM public.action_rights WHERE uri = ? AND " + andStr + " AND active = '1'"); + query.addBindValue(uri.toLower()); + + if(!query.exec()) + { + msg = query.lastError().text(); + //qWarning("ERROR: " + msg.toUtf8()); + tError("ERROR: " + msg.toUtf8()); + return false; + } + + while (query.next()) + { + //msg = query.value(0).toString(); + //tInfo("OK: " + msg.toUtf8()); + return true; + } + + return false; +} + +int ActionRights::id() const +{ + return d->id; +} + +QString ActionRights::uri() const +{ + return d->uri; +} + +void ActionRights::setUri(const QString &uri) +{ + d->uri = uri; +} + +QString ActionRights::groups() const +{ + return d->groups; +} + +void ActionRights::setGroups(const QString &groups) +{ + d->groups = groups; +} + +QString ActionRights::rights() const +{ + return d->rights; +} + +void ActionRights::setRights(const QString &rights) +{ + d->rights = rights; +} + +int ActionRights::active() const +{ + return d->active; +} + +void ActionRights::setActive(int active) +{ + d->active = active; +} + +ActionRights &ActionRights::operator=(const ActionRights &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +ActionRights ActionRights::create(const QString &uri, const QString &groups, const QString &rights, int active) +{ + ActionRightsObject obj; + obj.uri = uri; + obj.groups = groups; + obj.rights = rights; + obj.active = active; + if (!obj.create()) { + return ActionRights(); + } + return ActionRights(obj); +} + +ActionRights ActionRights::create(const QVariantMap &values) +{ + ActionRights model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +ActionRights ActionRights::get(int id) +{ + TSqlORMapper mapper; + return ActionRights(mapper.findByPrimaryKey(id)); +} + +int ActionRights::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList ActionRights::getAll() +{ + TSqlQuery query; + + QProcess p; + QString program = "itis_routes"; + QStringList arguments; + arguments << ""; + + p.start(program,arguments); + p.waitForStarted(); + p.waitForReadyRead(); + p.waitForFinished(); + QString line= p.readAllStandardOutput(); + + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray ActionRights::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(ActionRights(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *ActionRights::modelData() +{ + return d.data(); +} + +const TModelObject *ActionRights::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const ActionRights &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, ActionRights &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(ActionRights) diff --git a/models/actionrights.h b/models/actionrights.h new file mode 100644 index 0000000..131e49f --- /dev/null +++ b/models/actionrights.h @@ -0,0 +1,60 @@ +#ifndef ACTIONRIGHTS_H +#define ACTIONRIGHTS_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class ActionRightsObject; +class QJsonArray; + + +class T_MODEL_EXPORT ActionRights : public TAbstractModel +{ +public: + ActionRights(); + ActionRights(const ActionRights &other); + ActionRights(const ActionRightsObject &object); + ~ActionRights(); + + int id() const; + QString uri() const; + void setUri(const QString &uri); + QString groups() const; + void setGroups(const QString &groups); + QString rights() const; + void setRights(const QString &rights); + int active() const; + void setActive(int active); + ActionRights &operator=(const ActionRights &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static ActionRights create(const QString &uri, const QString &groups, const QString &rights, int active); + static ActionRights create(const QVariantMap &values); + static ActionRights get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + static bool isInGroups(const QString &usergroups, const QString &crud, const QString &uri); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const ActionRights &model); + friend QDataStream &operator>>(QDataStream &ds, ActionRights &model); +}; + +Q_DECLARE_METATYPE(ActionRights) +Q_DECLARE_METATYPE(QList) + +#endif // ACTIONRIGHTS_H diff --git a/models/annexdata.cpp b/models/annexdata.cpp new file mode 100644 index 0000000..319ad35 --- /dev/null +++ b/models/annexdata.cpp @@ -0,0 +1,1683 @@ +#include +#include "annexdata.h" +#include "sqlobjects/annexdataobject.h" + +#include +#include +#include + +#include "catclasses.h" +#include "annexdatacomments.h" + +AnnexData::AnnexData() : + TAbstractModel(), + d(new AnnexDataObject()) +{ + // set the initial parameters +} + +AnnexData::AnnexData(const AnnexData &other) : + TAbstractModel(), + d(other.d) +{ } + +AnnexData::AnnexData(const AnnexDataObject &object) : + TAbstractModel(), + d(new AnnexDataObject(object)) +{ } + +AnnexData::~AnnexData() +{ + // If the reference count becomes 0, + // the shared data object 'AnnexDataObject' is deleted. +} + +// ##### + +void AnnexData::writeAnnexHtml(QMap &stdDataMap) +{ + QJsonValue id, spec_title, lfdnr, spec_version, spec_last_modified, specContent; + + + QFile file(stdDataMap["htmlFileDir"]); + file.open(QIODevice::WriteOnly | QIODevice::Append); + QTextStream stream(&file); + stream.setAutoDetectUnicode(true); + + + // ["General","Planning", "Environment", "Construction", "Power", "Cabling", "Safety", "Security","Management","Operations","Appendix"]; + + // data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + + + foreach (const QJsonValue & value, AnnexData::getAnnexList(stdDataMap)) + { + QJsonObject objclass = value.toObject(); + id = objclass.value(QString("id")); + lfdnr = objclass.value(QString("lfdnr")); + spec_title = objclass.value(QString("spec_title")); + spec_version = objclass.value(QString("spec_version")); + spec_last_modified = objclass.value(QString("spec_last_modified")); + stream << spec_title.toString() << '\n'; + stream << id.toString() << " " << lfdnr.toString() << " " << spec_last_modified.toString() << " " << spec_version.toString() << '\n'; + stream << "AC: " << objclass.value(QString("ac_classes")).toString() << " PC: " << objclass.value(QString("pc_classes")).toString() << " Country: " << objclass.value(QString("country")).toString() << '\n'; + + QString msg = id.toString(); + int specId = msg.toInt(); + + QJsonArray val = AnnexData::getAnnexSpec(specId); + + foreach (const QJsonValue & val, val) + { + QJsonObject obj = val.toObject(); + stream << '\n' << obj["spec_content"].toString() << '\n'; + } + } + file.flush(); + file.close(); +} +void AnnexData::writeAnnex(QMap &stdDataMap) +{ + QString header= R"( + + + + + + + + PDF + + + + + + + + + + + + + + +)"; + QString footer= R"( + + + +)"; + + stdDataMap["curentDateTime"] = QDateTime::currentDateTime().toString("yyyy-MM-dd_HHmmss"); + + QString msg, doctitle, htmlFileDir, htmlFileUri; + doctitle = stdDataMap["obj_sname"]; + doctitle.replace(" ", "_"); + + QString dev_dir = "/webapp_dez/html/itis/pdf/annex/" + stdDataMap["spec_release"] + "/"; + QString prod_dir = "/webapp/html/itis/pdf/annex/" + stdDataMap["spec_release"] + "/"; + + QString htmlFile = stdDataMap["curentDateTime"] + "_" + doctitle + "_v" + stdDataMap["release_version"] + "-" + stdDataMap["spec_release"] + ".html"; + + QDir devDir(dev_dir); + QDir prodDir(prod_dir); + + if(devDir.exists()) + { + htmlFileDir = dev_dir + htmlFile; + htmlFileUri = "http://localhost:8080" + htmlFile; + } + else if(prodDir.exists()) + { + htmlFileDir = prod_dir + htmlFile; + htmlFileUri = "https://itis.hitchhiker.tech/" + htmlFile; + } + + stdDataMap["htmlFileDir"] = htmlFileDir; + QMap stdGeneralMap = stdDataMap; + + QFile file(htmlFileDir); + file.open(QIODevice::WriteOnly | QIODevice::Append); + QTextStream stream(&file); + stream.setAutoDetectUnicode(true); + stream << header << '\n'; + + stream << "" << stdDataMap["obj_sname"] << "" << '\n'; + stream << "" << stdDataMap["lang"] << "" << '\n'; + + file.flush(); + file.close(); + + stdGeneralMap["obj_sname"] = "General"; + stdGeneralMap["country"] = "WW"; + stdGeneralMap["lang"] = "de_DE"; + stdGeneralMap["spec_active"] = "1"; + stdGeneralMap["ac_class"] = "0"; + stdGeneralMap["pc_class"] = "0"; + stdGeneralMap["spec_release"] = "pre-release"; + stdGeneralMap["getStdType"] = "show"; + stdGeneralMap["cat_sname_en"] = "General"; + + AnnexData::writeAnnexHtml(stdGeneralMap); + + QStringList categories = {"General","Planning", "Environment", "Construction", "Power", "Cabling", "Safety", "Security","Management","Operations","Appendix"}; + + for(int i = 0; i < categories.size(); ++i) + { + stdDataMap["cat_sname_en"] = categories.at(i).toLocal8Bit().constData(); + msg = stdDataMap["cat_sname_en"]; + qWarning("TEST: " + msg.toUtf8()); + AnnexData::writeAnnexHtml(stdDataMap); + } + + file.open(QIODevice::WriteOnly | QIODevice::Append); + stream.setAutoDetectUnicode(true); + stream << footer << '\n'; + file.flush(); + file.close(); +} + +QJsonArray AnnexData::getAnnexSpec(int &id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, lang; + + query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_content FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE annex_data.id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + std::string erg = query.value(23).toString().toStdString(); + findAndReplaceAll(erg, lang, "standard"); + jsonObject["spec_content"] = erg.c_str(); + + std::string line = erg.c_str(); + + std::regex reg1("(

)(.{0,100})(

)", std::regex_constants::icase); + std::smatch match1; + + std::regex reg2("(

)(.{0,100})(

)", std::regex_constants::icase); + std::smatch match2; + + std::regex reg3("(

)(.{0,100})(

)", std::regex_constants::icase); + std::smatch match3; + + std::regex reg4("(

)(.{0,100})(

)", std::regex_constants::icase); + std::smatch match4; + + QString toc; + std::string ahref1 = "
  • .{0,100})|(

    .{0,100}

    )|(

    .{0,100}

    )|(

    .{0,100}

    ))", std::regex_constants::icase); + std::regex re("((.{0,100})|(.{0,100})|(.{0,100})|(.{0,100}))", std::regex_constants::icase); + std::sregex_iterator next(line.begin(), line.end(), re); + std::sregex_iterator end; + while (next != end) + { + std::smatch match = *next; + //std::cout << "MATCH: " << match.str() << "\n"; + std::string item = match.str(); + if(std::regex_search(item, match1, reg1)) + { + std::string to = match1.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class1 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match2, reg2)) + { + std::string to = match2.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class2 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match3, reg3)) + { + std::string to = match3.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class3 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match4, reg4)) + { + std::string to = match4.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class4 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + + next++; + } + jsonObject["toc"] = toc; + toc = ""; + } + catch (std::regex_error& e) + { + //std::cout << "Syntax error in the regular expression" << std::endl; + } + + jsonArray.append(jsonObject); + + } + + return jsonArray; +} + +void AnnexData::findAndReplaceAll(std::string &data, QString &lang, QString std_type) +{ + TSqlQuery query; + std::string toSearch, replaceStr; + + std::string year = QDateTime::currentDateTime().toString("yyyy").toStdString(); + std::string y = "{{YYYY}}"; + std::string month = QDateTime::currentDateTime().toString("MM").toStdString(); + std::string m = "{{MM}}"; + + size_t pos2 = data.find(y); + // Repeat till end is reached + while( pos2 != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos2, y.size(), year); + // Get the next occurrence from the current position + pos2 =data.find(y, pos2 + y.size()); + } + pos2 = data.find(m); + // Repeat till end is reached + while( pos2 != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos2, m.size(), month); + // Get the next occurrence from the current position + pos2 =data.find(m, pos2 + m.size()); + } + + if( lang.compare("de_DE") == 0 ) + { + query.prepare("SELECT std_attr, std_val_de FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + else + { + query.prepare("SELECT std_attr, std_val_en FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + // SELECT id, std_type, std_attr, std_val_de, std_val_en, active FROM public.app_vars; + query.addBindValue(std_type); + + query.exec(); + + while (query.next()) + { + toSearch = "{{" + query.value(0).toString().toStdString() + "}}"; + replaceStr = query.value(1).toString().toStdString(); + + // Get the first occurrence + size_t pos = data.find(toSearch); + // Repeat till end is reached + while( pos != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos, toSearch.size(), replaceStr); + // Get the next occurrence from the current position + pos =data.find(toSearch, pos + replaceStr.size()); + } + } +} + +QJsonArray AnnexData::sqlGet_crObjCatalog(bool doToc, QMap outList) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, id, lang; + + QMapIterator i(outList); + while(i.hasNext()) + { + i.next(); + id = i.value(); + + if(doToc == false) + { + query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE annex_data.id = ?"); + query.addBindValue(id); + } + else + { + query.prepare("SELECT annex_data.id, spec_title, spec_content, cat_class FROM annex_data WHERE annex_data.id = ?"); + query.addBindValue(id); + } + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + if(doToc == false) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonObject["comments_count"] = QString::number( AnnexDataComments::getSpecsCommentsCount(id.toInt() )); + + jsonArray.append(jsonObject); + } + else + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["spec_title"] = query.value(1).toString(); + jsonObject["cat_class"] = query.value(3).toString(); + + //jsonObject["spec_content"] = query.value(2).toString(); + std::string erg = query.value(2).toString().toStdString(); + findAndReplaceAll(erg, lang, "standard"); + std::string line = erg.c_str(); + + std::regex reg1("()(.{0,100})()", std::regex_constants::icase); + std::smatch match1; + + std::regex reg2("()(.{0,100})()", std::regex_constants::icase); + std::smatch match2; + + std::regex reg3("()(.{0,100})()", std::regex_constants::icase); + std::smatch match3; + + std::regex reg4("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match4; + + QString toc; + std::string ahref1 = "
    .{0,100})|(.{0,100})|(.{0,100}))", std::regex_constants::icase); + std::sregex_iterator next(line.begin(), line.end(), re); + std::sregex_iterator end; + while (next != end) + { + std::smatch match = *next; + //std::cout << "MATCH: " << match.str() << "\n"; + std::string item = match.str(); + + if(std::regex_search(item, match1, reg1)) + { + std::string to = match1.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class1 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match2, reg2)) + { + std::string to = match2.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class2 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match3, reg3)) + { + std::string to = match3.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class3 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match4, reg4)) + { + std::string to = match4.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class4 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + + next++; + } + jsonObject["toc"] = toc; + toc = ""; + } + catch (std::regex_error& e) + { + //std::cout << "Syntax error in the regular expression" << std::endl; + } + + jsonArray.append(jsonObject); + + } + } + } + return jsonArray; +} + +QMap AnnexData::checkObjCatalog(QMap wwList, QMap localList) +{ + QMapIterator i(localList); + while (i.hasNext()) + { + i.next(); + if(localList.contains(i.key())) + { + wwList[i.key()] = localList[i.key()]; + } + } + + return wwList; +} + +QMap AnnexData::sqlObjCatalog(QString name, QString ac, QString pc, QString country, QString lang, QString cat, QString spec_active, QString release) +{ + TSqlQuery query; + + QString msg, obj_name, ac_classes, pc_classes; + QMap inList; + + obj_name = "%" + name + "%"; + ac_classes = "%" + ac + "%"; + pc_classes = "%" + pc + "%"; + + query.prepare("select lfdnr, id from annex_data where obj_sname LIKE ? and ac_classes LIKE ? and pc_classes LIKE ? and lang = ? and country = ? and cat_class = ? AND spec_active = ? AND (spec_release = ? or spec_release = 'pre-release') order by lfdnr"); + query.addBindValue(obj_name); + query.addBindValue(ac_classes); + query.addBindValue(pc_classes); + query.addBindValue(lang); + query.addBindValue(country); + query.addBindValue(cat); + query.addBindValue(spec_active); + query.addBindValue(release); + + if(!query.exec()) + { + msg = query.lastError().text(); + qWarning("ERROR: " + msg.toUtf8()); + //tDebug(msg.toUtf8()); + } + + while (query.next()) + { + /*msg = "sqlObjCatalog: " + query.value(0).toString() + " " + query.value(1).toString(); + tDebug(msg.toUtf8()); */ + inList.insert(query.value(0).toString(),query.value(1).toString()); + } + + return inList; +} + +QJsonArray AnnexData::listObjCatalog(bool doToc, QMap editMap) +{ + QMap localList, wwList, outList; + QJsonArray array, tomerge; + + // General + if(editMap["obj_sname"].compare("General") == 0) + { + + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog("General", "0", "0", editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog("General", "0", "0", "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + + outList = AnnexData::checkObjCatalog(wwList, localList); + return AnnexData::sqlGet_crObjCatalog(doToc, outList); + } + + if(editMap["cat_sname_en"].compare("General") == 0) + { + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog(editMap["obj_sname"], "0", "0", editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog(editMap["obj_sname"], "0", "0", "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + outList = AnnexData::checkObjCatalog(wwList, localList); + array = AnnexData::sqlGet_crObjCatalog(doToc, outList); + + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + outList = AnnexData::checkObjCatalog(wwList, localList); + tomerge = AnnexData::sqlGet_crObjCatalog(doToc, outList); + + for(int i = 0; i < tomerge.size(); i++) + { + array.append(tomerge[i]); + } + return array; + } + else + { + // Cat + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + outList = AnnexData::checkObjCatalog(wwList, localList); + return AnnexData::sqlGet_crObjCatalog(doToc, outList); + } +} + +QJsonArray AnnexData::doReleased(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + query.prepare("UPDATE public.release_mgmt SET rel_creator = ?, relcreator_decisdate = now(), cd_date = now() WHERE id = ?"); + query.addBindValue(editMap["rel_creator"]); + query.addBindValue(editMap["release_id"].toInt()); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = "doReleased : " + msg; + jsonObj["query"] = query.lastQuery(); + msg = "doRelease : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + + array.append(jsonObj); + } + + return array; +} + +QJsonArray AnnexData::upReleased(int id) +{ + + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray jsonArr; + QString msg; + + query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_active FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE annex_data.id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "upReleased : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + + query.next(); + + QString lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_class, pc_class, cat_class, country, lang, spec_content, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_active; + lfdnr = query.value(1).toString(); + spec_title = query.value(2).toString(); + spec_desc = query.value(3).toString(); + spec_version = query.value(4).toString(); + obj_sname = query.value(5).toString(); + ac_class = query.value(6).toString(); + pc_class = query.value(7).toString(); + cat_class = query.value(8).toString(); + country = query.value(9).toString(); + lang = query.value(10).toString(); + spec_content = query.value(11).toByteArray(); + spec_created = query.value(12).toString(); + spec_last_modified = query.value(13).toString(); + spec_valid_start = query.value(14).toString(); + spec_valid_end = query.value(15).toString(); + last_editor = query.value(16).toString(); + g_legacy = query.value(17).toString(); + responsibility = query.value(18).toString(); + spec_comment = query.value(19).toString(); + spec_marker = query.value(20).toString(); + groups = query.value(21).toString(); + spec_active = "0"; //query.value(22).toString(); + + query.prepare("INSERT INTO public.release_annex(lfdnr, spec_title, spec_desc, spec_version, obj_sname, ac_class, pc_class, cat_class, country, lang, spec_content, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_active, spec_release) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + query.addBindValue(lfdnr); + query.addBindValue(spec_title); + query.addBindValue(spec_desc); + query.addBindValue(spec_version); + query.addBindValue(obj_sname); + query.addBindValue(ac_class); + query.addBindValue(pc_class); + query.addBindValue(cat_class); + query.addBindValue(country); + query.addBindValue(lang); + query.addBindValue(spec_content); + query.addBindValue(spec_created); + query.addBindValue(spec_last_modified); + query.addBindValue(spec_valid_start); + query.addBindValue(spec_valid_end); + query.addBindValue(last_editor); + query.addBindValue(g_legacy); + query.addBindValue(responsibility); + query.addBindValue(spec_comment); + query.addBindValue(spec_marker); + query.addBindValue(groups); + query.addBindValue(spec_active); + query.addBindValue("released"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "upReleased : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz eingefügt"; + jsonObj["last_data_id"] = query.lastInsertId().toInt(); + msg = "Released: " + QDateTime::currentDateTime().toString("yyyy-MM-dd");; + AnnexData::setDraft(id, msg); + } + + jsonArr.append(jsonObj); + return jsonArr; + +} + +void AnnexData::setDraft(int id, QString comment) +{ + TSqlQuery query; + + query.prepare("UPDATE public.annex_data SET spec_release='draft' WHERE id=?"); + query.addBindValue(id); + query.exec(); + + query.prepare("UPDATE public.annex_meta SET spec_comment=? WHERE spec_data_id=?"); + query.addBindValue(comment); + query.addBindValue(id); + query.exec(); +} + +QJsonArray AnnexData::doPreRelease(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + //obj_sname, spec_version, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date, rel_creator, relcreator_decisdate, rel_inspector, relinspect_decisdate, rel_approver, relapprov_decisdate, ci_date, cd_date, cdd_date) + + query.prepare("INSERT INTO public.release_mgmt(obj_sname, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date, ci_date) VALUES (?, ?, ?, ?, ?, ?, ?, ?, now(), now())"); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["doc_type"]); + query.addBindValue(editMap["rel_requester"]); + //query.addBindValue(editMap["relrequest_date"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Pre-Release eingestellt"; + jsonObj["last_id"] = query.lastInsertId().toInt(); + } + + array.append(jsonObj); + return array; +} + +QJsonArray AnnexData::upPrelease(int id) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + query.prepare("UPDATE public.annex_data SET spec_release='pre-release' WHERE id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = "upPrelease : " + msg; + jsonObj["query"] = query.lastQuery(); + msg = "upPrelease : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + + array.append(jsonObj); + } + + return array; +} + +QJsonArray AnnexData::updAnnexData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + //QString searchtxt = "

    {{page-break}}

    "; + QRegularExpression re("

    {{page-break}}

    "); + QRegularExpressionMatchIterator i = re.globalMatch(editMap["spec_content"]); + while (i.hasNext()) + { + QRegularExpressionMatch match = i.next(); + editMap["spec_content"].replace(re, "{{page-break}}"); + } + + query.prepare("UPDATE public.annex_data SET id=?, lfdnr=?, spec_title=?, spec_desc=?, spec_version=?, spec_release=?, obj_sname=?, ac_classes=?, pc_classes=?, cat_class=?, country=?, lang=?, spec_content=?, spec_active=? WHERE id = ?"); + + query.addBindValue(editMap["id"]); + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version_new"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + + query.prepare("UPDATE public.annex_meta SET spec_last_modified=?, spec_valid_start=?, spec_valid_end=?, last_editor=?, g_legacy=?, responsibility=?, spec_comment=?, spec_marker=? WHERE spec_data_id = ?"); + + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_end"]); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "updStdData : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + jsonObj["data_id"] = editMap["id"]; + } + + array.append(jsonObj); + return array; +} + +QJsonArray AnnexData::setAnnexData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray jsonArr; + QString msg; + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + query.prepare("INSERT INTO annex_data(lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + + int last_id = query.lastInsertId().toInt(); + + query.prepare("INSERT INTO annex_meta(spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(last_id); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + + query.addBindValue("{ALL}"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz eingefügt"; + jsonObj["last_data_id"] = last_id; + jsonObj["last_meta_id"] = query.lastInsertId().toInt(); + } + + jsonArr.append(jsonObj); + return jsonArr; +} + +QJsonArray AnnexData::getAnnexToc(QMap &stdDataMap) +{ + QJsonObject jsonObject, jsonObjContent; + QJsonValue jsonObjVal; + QJsonArray jsonArr; + + QString obj_sname = stdDataMap["obj_sname"]; + + stdDataMap["obj_sname"] = "General"; + foreach (const QJsonValue & value, AnnexData::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + jsonObject["obj_sname"] = stdDataMap["obj_sname"]; + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + + stdDataMap["obj_sname"] = obj_sname; + foreach (const QJsonValue & value, CatClasses::getAllJson("1", "category")) + { + QJsonObject objclass = value.toObject(); + QJsonValue obj_class_name = objclass.value(QString("cat_sname_en")); + if(obj_class_name.toString().compare("") == 1 ) + { + stdDataMap["cat_sname_en"] = obj_class_name.toString(); + foreach (const QJsonValue & value, AnnexData::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + jsonObject["obj_sname"] = stdDataMap["obj_sname"]; + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + } + } + + //return StandardsData::listObjCatalog(true, stdDataMap); + return jsonArr; +} + +QJsonArray AnnexData::getAnnexShow(QMap &stdDataMap) +{ + return AnnexData::listObjCatalog(false, stdDataMap); +} + +QJsonArray AnnexData::getAnnexList(QMap &stdDataMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, obj_sname, ac_class, pc_class, id; + + obj_sname = "%" + stdDataMap["obj_sname"] + "%"; + ac_class = "%" + stdDataMap["ac_class"] + "%"; + pc_class = "%" + stdDataMap["pc_class"] + "%"; + + query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE obj_sname like ? AND cat_class = ? AND country = ? AND lang = ? AND spec_active = ? AND ac_classes like ? AND pc_classes like ? AND spec_release = ? order by lfdnr"); + //query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE obj_sname like '%Annex D%' AND cat_class = 'Cabling' AND country = 'WW' AND lang = 'de_DE' AND spec_active = 1 AND ac_classes like '%2%' AND pc_classes like '%2%' AND spec_release = 'draft'"); + + query.addBindValue(obj_sname); + query.addBindValue(stdDataMap["cat_sname_en"]); + query.addBindValue(stdDataMap["country"]); + query.addBindValue(stdDataMap["lang"]); + query.addBindValue(stdDataMap["spec_active"]); + query.addBindValue(ac_class); + query.addBindValue(pc_class); + query.addBindValue(stdDataMap["spec_release"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + id = query.value(0).toString(); + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray AnnexData::getExistCountries() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT DISTINCT(country) FROM public.annex_data ORDER BY country"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["country"] = query.value(0).toString(); + jsonArray.append(jsonObject); + } + return jsonArray; +} + +QJsonArray AnnexData::getHighestLfdnr(const QString &category) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT MAX(lfdnr) FROM public.annex_data WHERE cat_class = ?"); + query.addBindValue(category); + + query.exec(); + query.next(); + + jsonObject["lfdnr"] = query.value(0).toString(); + jsonObject["cat"] = category; + jsonArray.append(jsonObject); + + return jsonArray; +} + +int AnnexData::countCheckLfdnrCat() +{ + TSqlQuery query; + int counter = 0; + + query.prepare("SELECT id, obj_sname, cat_class, lfdnr, country, lang, spec_title FROM public.annex_data a WHERE not Exists ( SELECT lfdnr FROM public.annex_data c WHERE a.lang != c.lang AND a.cat_class = c.cat_class and a.lfdnr = c.lfdnr) order by (cat_class,lfdnr)"); + + query.exec(); + + while (query.next()) + { + counter++; + } + + return counter; +} + +QJsonArray AnnexData::chkLfdnrEditor(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, lfdnr, spec_title, obj_sname, country, lang FROM public.annex_data WHERE cat_class = ? AND lfdnr = ?"); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["lfdnr"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["MSG"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["obj_sname"] = query.value(3).toString(); + jsonObject["country"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray AnnexData::getStatistics() +{ + TSqlQuery query; + QJsonObject jsonObject, jsonObjReleaseTypes; + QJsonArray jsonArray, jsonArrReleaseTypes; + QString msg; + QList releaseTypes; + + // count + query.prepare("SELECT count(id) FROM annex_data"); + query.exec(); + query.next(); + jsonObject["count_id"] = query.value(0).toString(); + + // active + query.prepare("select count(id) from annex_data where spec_active = 1"); + query.exec(); + query.next(); + jsonObject["count_active"] = query.value(0).toString(); + + // countries + query.prepare("select count(distinct country) from annex_data"); + query.exec(); + query.next(); + jsonObject["count_countries"] = query.value(0).toString(); + + // languages + query.prepare("select count(lang) from annex_data where lang = 'de_DE'"); + query.exec(); + query.next(); + jsonObject["count_language_de"] = query.value(0).toString(); + query.prepare("select count(lang) from annex_data where lang = 'en_GB'"); + query.exec(); + query.next(); + jsonObject["count_language_en"] = query.value(0).toString(); + + // waste + query.prepare("select count(id) from annex_data_waste"); + query.exec(); + query.next(); + jsonObject["count_Annexwaste"] = query.value(0).toString(); + + // releases + query.prepare("SELECT std_attr FROM std_system WHERE std_type = 'release_types' ORDER BY sort"); + query.exec(); + while (query.next()) + { + releaseTypes.append(query.value(0).toString()); + } + + QList::iterator i; + for (i = releaseTypes.begin(); i != releaseTypes.end(); ++i) + { + query.prepare("select count(spec_release) from annex_data where spec_release = ?"); + query.addBindValue(*i); + query.exec(); + query.next(); + jsonObjReleaseTypes["release_type"] = *i; + jsonObjReleaseTypes["count_release_type"] = query.value(0).toString(); + jsonArrReleaseTypes.append(jsonObjReleaseTypes); + } + + jsonObject["countCheckLfdnrCat"] = QString::number( AnnexData::countCheckLfdnrCat() ); + + jsonArray.append(jsonObject); + jsonArray.append(jsonArrReleaseTypes); + + return jsonArray; +} + +int AnnexData::id() const +{ + return d->id; +} + +QString AnnexData::lfdnr() const +{ + return d->lfdnr; +} + +void AnnexData::setLfdnr(const QString &lfdnr) +{ + d->lfdnr = lfdnr; +} + +QString AnnexData::specTitle() const +{ + return d->spec_title; +} + +void AnnexData::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString AnnexData::specDesc() const +{ + return d->spec_desc; +} + +void AnnexData::setSpecDesc(const QString &specDesc) +{ + d->spec_desc = specDesc; +} + +QString AnnexData::specVersion() const +{ + return d->spec_version; +} + +void AnnexData::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString AnnexData::specRelease() const +{ + return d->spec_release; +} + +void AnnexData::setSpecRelease(const QString &specRelease) +{ + d->spec_release = specRelease; +} + +QString AnnexData::objSname() const +{ + return d->obj_sname; +} + +void AnnexData::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString AnnexData::acClasses() const +{ + return d->ac_classes; +} + +void AnnexData::setAcClasses(const QString &acClasses) +{ + d->ac_classes = acClasses; +} + +QString AnnexData::pcClasses() const +{ + return d->pc_classes; +} + +void AnnexData::setPcClasses(const QString &pcClasses) +{ + d->pc_classes = pcClasses; +} + +QString AnnexData::catClass() const +{ + return d->cat_class; +} + +void AnnexData::setCatClass(const QString &catClass) +{ + d->cat_class = catClass; +} + +QString AnnexData::country() const +{ + return d->country; +} + +void AnnexData::setCountry(const QString &country) +{ + d->country = country; +} + +QString AnnexData::lang() const +{ + return d->lang; +} + +void AnnexData::setLang(const QString &lang) +{ + d->lang = lang; +} + +QByteArray AnnexData::specContent() const +{ + return d->spec_content; +} + +void AnnexData::setSpecContent(const QByteArray &specContent) +{ + d->spec_content = specContent; +} + +int AnnexData::specActive() const +{ + return d->spec_active; +} + +void AnnexData::setSpecActive(int specActive) +{ + d->spec_active = specActive; +} + +AnnexData &AnnexData::operator=(const AnnexData &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +AnnexData AnnexData::create(const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive) +{ + AnnexDataObject obj; + obj.lfdnr = lfdnr; + obj.spec_title = specTitle; + obj.spec_desc = specDesc; + obj.spec_version = specVersion; + obj.spec_release = specRelease; + obj.obj_sname = objSname; + obj.ac_classes = acClasses; + obj.pc_classes = pcClasses; + obj.cat_class = catClass; + obj.country = country; + obj.lang = lang; + obj.spec_content = specContent; + obj.spec_active = specActive; + if (!obj.create()) { + return AnnexData(); + } + return AnnexData(obj); +} + +AnnexData AnnexData::create(const QVariantMap &values) +{ + AnnexData model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +AnnexData AnnexData::get(int id) +{ + TSqlORMapper mapper; + return AnnexData(mapper.findByPrimaryKey(id)); +} + +int AnnexData::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList AnnexData::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray AnnexData::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(AnnexData(i.next()).toVariantMap()))); + } + } + return array; +} + +QJsonArray AnnexData::getAllJsonCi() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("select id, obj_sname, spec_title, cat_class,lfdnr, lang, country FROM public.annex_data WHERE spec_release = 'released' group by (id, obj_sname, spec_title, cat_class, lfdnr, lang, country) order by (obj_sname,lfdnr)"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["MSG"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["cat_class"] = query.value(3).toString(); + jsonObject["lfdnr"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + jsonObject["country"] = query.value(6).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +TModelObject *AnnexData::modelData() +{ + return d.data(); +} + +const TModelObject *AnnexData::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const AnnexData &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, AnnexData &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(AnnexData) diff --git a/models/annexdata.cpp_2021-02-13_39 b/models/annexdata.cpp_2021-02-13_39 new file mode 100644 index 0000000..88da519 --- /dev/null +++ b/models/annexdata.cpp_2021-02-13_39 @@ -0,0 +1,1093 @@ +#include +#include "annexdata.h" +#include "sqlobjects/annexdataobject.h" + +#include +#include +#include + +#include "catclasses.h" +#include "releasemgmt.h" + +AnnexData::AnnexData() : + TAbstractModel(), + d(new AnnexDataObject()) +{ + // set the initial parameters +} + +AnnexData::AnnexData(const AnnexData &other) : + TAbstractModel(), + d(other.d) +{ } + +AnnexData::AnnexData(const AnnexDataObject &object) : + TAbstractModel(), + d(new AnnexDataObject(object)) +{ } + +AnnexData::~AnnexData() +{ + // If the reference count becomes 0, + // the shared data object 'AnnexDataObject' is deleted. +} + +// ##### + +QJsonArray AnnexData::getAnnexSpec(int &id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, lang; + + query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_content FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE annex_data.id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + std::string erg = query.value(23).toString().toStdString(); + findAndReplaceAll(erg, lang, "standard"); + jsonObject["spec_content"] = erg.c_str(); + + std::string line = erg.c_str(); + + std::regex reg1("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match1; + + std::regex reg2("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match2; + + std::regex reg3("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match3; + + std::regex reg4("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match4; + + QString toc; + std::string ahref1 = "
  • .{0,100})|(

    .{0,100}

    )|(

    .{0,100}

    )|(

    .{0,100}

    ))", std::regex_constants::icase); + std::sregex_iterator next(line.begin(), line.end(), re); + std::sregex_iterator end; + while (next != end) + { + std::smatch match = *next; + //std::cout << "MATCH: " << match.str() << "\n"; + std::string item = match.str(); + if(std::regex_search(item, match1, reg1)) + { + std::string to = match1.str(); + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class1 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match2, reg2)) + { + std::string to = match2.str(); + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class2 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match3, reg3)) + { + std::string to = match3.str(); + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class3 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match4, reg4)) + { + std::string to = match4.str(); + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class4 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + + next++; + } + jsonObject["toc"] = toc; + toc = ""; + } + catch (std::regex_error& e) + { + //std::cout << "Syntax error in the regular expression" << std::endl; + } + + jsonArray.append(jsonObject); + + } + + return jsonArray; +} + +void AnnexData::findAndReplaceAll(std::string &data, QString &lang, QString std_type) +{ + TSqlQuery query; + std::string toSearch, replaceStr; + + std::string year = QDateTime::currentDateTime().toString("yyyy").toStdString(); + std::string y = "{{YYYY}}"; + std::string month = QDateTime::currentDateTime().toString("MM").toStdString(); + std::string m = "{{MM}}"; + + size_t pos2 = data.find(y); + // Repeat till end is reached + while( pos2 != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos2, y.size(), year); + // Get the next occurrence from the current position + pos2 =data.find(y, pos2 + y.size()); + } + pos2 = data.find(m); + // Repeat till end is reached + while( pos2 != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos2, m.size(), month); + // Get the next occurrence from the current position + pos2 =data.find(m, pos2 + m.size()); + } + + if( lang.compare("de_DE") == 0 ) + { + query.prepare("SELECT std_attr, std_val_de FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + else + { + query.prepare("SELECT std_attr, std_val_en FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + // SELECT id, std_type, std_attr, std_val_de, std_val_en, active FROM public.app_vars; + query.addBindValue(std_type); + + query.exec(); + + while (query.next()) + { + toSearch = "{{" + query.value(0).toString().toStdString() + "}}"; + replaceStr = query.value(1).toString().toStdString(); + + // Get the first occurrence + size_t pos = data.find(toSearch); + // Repeat till end is reached + while( pos != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos, toSearch.size(), replaceStr); + // Get the next occurrence from the current position + pos =data.find(toSearch, pos + replaceStr.size()); + } + } +} + +QJsonArray AnnexData::sqlGet_crObjCatalog(QMap outList) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, id; + + QMapIterator i(outList); + while(i.hasNext()) + { + i.next(); + id = i.value(); + + + query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE annex_data.id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonArray.append(jsonObject); + } + } + return jsonArray; +} + +QMap AnnexData::checkObjCatalog(QMap wwList, QMap localList) +{ + QMapIterator i(localList); + while (i.hasNext()) + { + i.next(); + if(localList.contains(i.key())) + { + wwList[i.key()] = localList[i.key()]; + } + } + + return wwList; +} + +QMap AnnexData::sqlObjCatalog(QString name, QString ac, QString pc, QString country, QString lang, QString cat, QString spec_active, QString release) +{ + TSqlQuery query; + + QString msg, obj_name, ac_classes, pc_classes; + QMap inList; + + obj_name = "%" + name + "%"; + ac_classes = "%" + ac + "%"; + pc_classes = "%" + pc + "%"; + + query.prepare("select lfdnr, id from annex_data where obj_sname LIKE ? and ac_classes LIKE ? and pc_classes LIKE ? and lang = ? and country = ? and cat_class = ? AND spec_active = ? and spec_release = ? order by lfdnr"); + query.addBindValue(obj_name); + query.addBindValue(ac_classes); + query.addBindValue(pc_classes); + query.addBindValue(lang); + query.addBindValue(country); + query.addBindValue(cat); + query.addBindValue(spec_active); + query.addBindValue(release); + + if(!query.exec()) + { + msg = query.lastError().text(); + qWarning("ERROR: " + msg.toUtf8()); + //tDebug(msg.toUtf8()); + } + + while (query.next()) + { + /*msg = "sqlObjCatalog: " + query.value(0).toString() + " " + query.value(1).toString(); + tDebug(msg.toUtf8()); */ + inList.insert(query.value(0).toString(),query.value(1).toString()); + } + + return inList; +} + +QJsonArray AnnexData::listObjCatalog(QMap editMap) +{ + QMap localList, wwList, outList; + QJsonArray array, tomerge; + + // General + if(editMap["obj_sname"].compare("General") == 0) + { + + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog("General", "0", "0", editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog("General", "0", "0", "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + + outList = AnnexData::checkObjCatalog(wwList, localList); + return AnnexData::sqlGet_crObjCatalog(outList); + } + + if(editMap["cat_sname_en"].compare("General") == 0) + { + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog(editMap["obj_sname"], "0", "0", editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog(editMap["obj_sname"], "0", "0", "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + outList = AnnexData::checkObjCatalog(wwList, localList); + array = AnnexData::sqlGet_crObjCatalog(outList); + + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + outList = AnnexData::checkObjCatalog(wwList, localList); + tomerge = AnnexData::sqlGet_crObjCatalog(outList); + + for(int i = 0; i < tomerge.size(); i++) + { + array.append(tomerge[i]); + } + return array; + } + else + { + // Cat + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + outList = AnnexData::checkObjCatalog(wwList, localList); + return AnnexData::sqlGet_crObjCatalog(outList); + } +} + +QJsonArray AnnexData::updAnnexData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + query.prepare("UPDATE public.annex_data SET id=?, lfdnr=?, spec_title=?, spec_desc=?, spec_version=?, spec_release=?, obj_sname=?, ac_classes=?, pc_classes=?, cat_class=?, country=?, lang=?, spec_content=?, spec_active=? WHERE id = ?"); + + query.addBindValue(editMap["id"]); + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version_new"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + + query.prepare("UPDATE public.annex_meta SET spec_last_modified=?, spec_valid_start=?, spec_valid_end=?, last_editor=?, g_legacy=?, responsibility=?, spec_comment=?, spec_marker=? WHERE spec_data_id = ?"); + + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_end"]); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "updStdData : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + jsonObj["data_id"] = editMap["id"]; + + if(editMap["spec_release"].compare("pre-release") == 0) + { + auto model = ReleaseMgmt::create(editMap["spec_title"], editMap["spec_version_new"], editMap["obj_sname"], editMap["ac_classes"], editMap["pc_classes"], editMap["cat_class"], editMap["country"], editMap["lang"], editMap["comment"], "annex", QDateTime::currentDateTime(), " ", QDateTime::currentDateTime(), editMap["id"].toInt()); + if (!model.isNull()) + { + msg = "release: " + editMap["spec_release"] + " null"; + tError(msg.toUtf8()); + } + } + } + + array.append(jsonObj); + return array; +} + +QJsonArray AnnexData::setAnnexData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray jsonArr; + QString msg; + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + query.prepare("INSERT INTO annex_data(lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + + int last_id = query.lastInsertId().toInt(); + + query.prepare("INSERT INTO annex_meta(spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(last_id); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + + query.addBindValue("{ALL}"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz eingefügt"; + jsonObj["last_data_id"] = last_id; + jsonObj["last_meta_id"] = query.lastInsertId().toInt(); + } + + jsonArr.append(jsonObj); + return jsonArr; +} + +QJsonArray AnnexData::getAnnexShow(QMap &stdDataMap) +{ + return AnnexData::listObjCatalog(stdDataMap); +} + +QJsonArray AnnexData::getAnnexList(QMap &stdDataMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, obj_sname, ac_class, pc_class, id; + + obj_sname = "%" + stdDataMap["obj_sname"] + "%"; + ac_class = "%" + stdDataMap["ac_class"] + "%"; + pc_class = "%" + stdDataMap["pc_class"] + "%"; + + query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE obj_sname like ? AND cat_class = ? AND country = ? AND lang = ? AND spec_active = ? AND ac_classes like ? AND pc_classes like ? AND spec_release = ? order by lfdnr"); + //query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE obj_sname like '%Annex D%' AND cat_class = 'Cabling' AND country = 'WW' AND lang = 'de_DE' AND spec_active = 1 AND ac_classes like '%2%' AND pc_classes like '%2%' AND spec_release = 'draft'"); + + query.addBindValue(obj_sname); + query.addBindValue(stdDataMap["cat_sname_en"]); + query.addBindValue(stdDataMap["country"]); + query.addBindValue(stdDataMap["lang"]); + query.addBindValue(stdDataMap["spec_active"]); + query.addBindValue(ac_class); + query.addBindValue(pc_class); + query.addBindValue(stdDataMap["spec_release"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + id = query.value(0).toString(); + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray AnnexData::getExistCountries() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT DISTINCT(country) FROM public.annex_data ORDER BY country"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["country"] = query.value(0).toString(); + jsonArray.append(jsonObject); + } + return jsonArray; +} + +QJsonArray AnnexData::getHighestLfdnr(const QString &category) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT MAX(lfdnr) FROM public.annex_data WHERE cat_class = ?"); + query.addBindValue(category); + + query.exec(); + query.next(); + + jsonObject["lfdnr"] = query.value(0).toString(); + jsonObject["cat"] = category; + jsonArray.append(jsonObject); + + return jsonArray; +} + +int AnnexData::countCheckLfdnrCat() +{ + TSqlQuery query; + int counter = 0; + + query.prepare("SELECT id, obj_sname, cat_class, lfdnr, country, lang, spec_title FROM public.annex_data a WHERE not Exists ( SELECT lfdnr FROM public.annex_data c WHERE a.lang != c.lang AND a.cat_class = c.cat_class and a.lfdnr = c.lfdnr) order by (cat_class,lfdnr)"); + + query.exec(); + + while (query.next()) + { + counter++; + } + + return counter; +} + +QJsonArray AnnexData::chkLfdnrEditor(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, lfdnr, spec_title, obj_sname, country, lang FROM public.annex_data WHERE cat_class = ? AND lfdnr = ?"); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["lfdnr"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["MSG"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["obj_sname"] = query.value(3).toString(); + jsonObject["country"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray AnnexData::getStatistics() +{ + TSqlQuery query; + QJsonObject jsonObject, jsonObjReleaseTypes; + QJsonArray jsonArray, jsonArrReleaseTypes; + QString msg; + QList releaseTypes; + + // count + query.prepare("SELECT count(id) FROM annex_data"); + query.exec(); + query.next(); + jsonObject["count_id"] = query.value(0).toString(); + + // active + query.prepare("select count(id) from annex_data where spec_active = 1"); + query.exec(); + query.next(); + jsonObject["count_active"] = query.value(0).toString(); + + // countries + query.prepare("select count(distinct country) from annex_data"); + query.exec(); + query.next(); + jsonObject["count_countries"] = query.value(0).toString(); + + // languages + query.prepare("select count(lang) from annex_data where lang = 'de_DE'"); + query.exec(); + query.next(); + jsonObject["count_language_de"] = query.value(0).toString(); + query.prepare("select count(lang) from annex_data where lang = 'en_GB'"); + query.exec(); + query.next(); + jsonObject["count_language_en"] = query.value(0).toString(); + + // waste + query.prepare("select count(id) from annex_data_waste"); + query.exec(); + query.next(); + jsonObject["count_Annexwaste"] = query.value(0).toString(); + + // releases + query.prepare("SELECT std_attr FROM std_system WHERE std_type = 'release_types' ORDER BY sort"); + query.exec(); + while (query.next()) + { + releaseTypes.append(query.value(0).toString()); + } + + QList::iterator i; + for (i = releaseTypes.begin(); i != releaseTypes.end(); ++i) + { + query.prepare("select count(spec_release) from annex_data where spec_release = ?"); + query.addBindValue(*i); + query.exec(); + query.next(); + jsonObjReleaseTypes["release_type"] = *i; + jsonObjReleaseTypes["count_release_type"] = query.value(0).toString(); + jsonArrReleaseTypes.append(jsonObjReleaseTypes); + } + + jsonObject["countCheckLfdnrCat"] = QString::number( AnnexData::countCheckLfdnrCat() ); + + jsonArray.append(jsonObject); + jsonArray.append(jsonArrReleaseTypes); + + return jsonArray; +} + +int AnnexData::id() const +{ + return d->id; +} + +QString AnnexData::lfdnr() const +{ + return d->lfdnr; +} + +void AnnexData::setLfdnr(const QString &lfdnr) +{ + d->lfdnr = lfdnr; +} + +QString AnnexData::specTitle() const +{ + return d->spec_title; +} + +void AnnexData::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString AnnexData::specDesc() const +{ + return d->spec_desc; +} + +void AnnexData::setSpecDesc(const QString &specDesc) +{ + d->spec_desc = specDesc; +} + +QString AnnexData::specVersion() const +{ + return d->spec_version; +} + +void AnnexData::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString AnnexData::specRelease() const +{ + return d->spec_release; +} + +void AnnexData::setSpecRelease(const QString &specRelease) +{ + d->spec_release = specRelease; +} + +QString AnnexData::objSname() const +{ + return d->obj_sname; +} + +void AnnexData::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString AnnexData::acClasses() const +{ + return d->ac_classes; +} + +void AnnexData::setAcClasses(const QString &acClasses) +{ + d->ac_classes = acClasses; +} + +QString AnnexData::pcClasses() const +{ + return d->pc_classes; +} + +void AnnexData::setPcClasses(const QString &pcClasses) +{ + d->pc_classes = pcClasses; +} + +QString AnnexData::catClass() const +{ + return d->cat_class; +} + +void AnnexData::setCatClass(const QString &catClass) +{ + d->cat_class = catClass; +} + +QString AnnexData::country() const +{ + return d->country; +} + +void AnnexData::setCountry(const QString &country) +{ + d->country = country; +} + +QString AnnexData::lang() const +{ + return d->lang; +} + +void AnnexData::setLang(const QString &lang) +{ + d->lang = lang; +} + +QByteArray AnnexData::specContent() const +{ + return d->spec_content; +} + +void AnnexData::setSpecContent(const QByteArray &specContent) +{ + d->spec_content = specContent; +} + +int AnnexData::specActive() const +{ + return d->spec_active; +} + +void AnnexData::setSpecActive(int specActive) +{ + d->spec_active = specActive; +} + +AnnexData &AnnexData::operator=(const AnnexData &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +AnnexData AnnexData::create(const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive) +{ + AnnexDataObject obj; + obj.lfdnr = lfdnr; + obj.spec_title = specTitle; + obj.spec_desc = specDesc; + obj.spec_version = specVersion; + obj.spec_release = specRelease; + obj.obj_sname = objSname; + obj.ac_classes = acClasses; + obj.pc_classes = pcClasses; + obj.cat_class = catClass; + obj.country = country; + obj.lang = lang; + obj.spec_content = specContent; + obj.spec_active = specActive; + if (!obj.create()) { + return AnnexData(); + } + return AnnexData(obj); +} + +AnnexData AnnexData::create(const QVariantMap &values) +{ + AnnexData model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +AnnexData AnnexData::get(int id) +{ + TSqlORMapper mapper; + return AnnexData(mapper.findByPrimaryKey(id)); +} + +int AnnexData::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList AnnexData::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray AnnexData::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(AnnexData(i.next()).toVariantMap()))); + } + } + return array; +} + +QJsonArray AnnexData::getAllJsonCi() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("select id, obj_sname, spec_title, cat_class,lfdnr, lang, country FROM public.annex_data WHERE spec_release = 'released' group by (id, obj_sname, spec_title, cat_class, lfdnr, lang, country) order by (obj_sname,lfdnr)"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["MSG"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["cat_class"] = query.value(3).toString(); + jsonObject["lfdnr"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + jsonObject["country"] = query.value(6).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +TModelObject *AnnexData::modelData() +{ + return d.data(); +} + +const TModelObject *AnnexData::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const AnnexData &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, AnnexData &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(AnnexData) diff --git a/models/annexdata.cpp_2021-04-11_1012 b/models/annexdata.cpp_2021-04-11_1012 new file mode 100644 index 0000000..8daab80 --- /dev/null +++ b/models/annexdata.cpp_2021-04-11_1012 @@ -0,0 +1,1450 @@ +#include +#include "annexdata.h" +#include "sqlobjects/annexdataobject.h" + +#include +#include +#include + +#include "catclasses.h" +#include "annexdatacomments.h" + +AnnexData::AnnexData() : + TAbstractModel(), + d(new AnnexDataObject()) +{ + // set the initial parameters +} + +AnnexData::AnnexData(const AnnexData &other) : + TAbstractModel(), + d(other.d) +{ } + +AnnexData::AnnexData(const AnnexDataObject &object) : + TAbstractModel(), + d(new AnnexDataObject(object)) +{ } + +AnnexData::~AnnexData() +{ + // If the reference count becomes 0, + // the shared data object 'AnnexDataObject' is deleted. +} + +// ##### + +QJsonArray AnnexData::getAnnexSpec(int &id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, lang; + + query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_content FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE annex_data.id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + std::string erg = query.value(23).toString().toStdString(); + findAndReplaceAll(erg, lang, "standard"); + jsonObject["spec_content"] = erg.c_str(); + + std::string line = erg.c_str(); + + std::regex reg1("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match1; + + std::regex reg2("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match2; + + std::regex reg3("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match3; + + std::regex reg4("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match4; + + QString toc; + std::string ahref1 = "
  • .{0,100})|(

    .{0,100}

    )|(

    .{0,100}

    )|(

    .{0,100}

    ))", std::regex_constants::icase); + std::regex re("((.{0,100})|(.{0,100})|(.{0,100})|(.{0,100}))", std::regex_constants::icase); + std::sregex_iterator next(line.begin(), line.end(), re); + std::sregex_iterator end; + while (next != end) + { + std::smatch match = *next; + //std::cout << "MATCH: " << match.str() << "\n"; + std::string item = match.str(); + if(std::regex_search(item, match1, reg1)) + { + std::string to = match1.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class1 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match2, reg2)) + { + std::string to = match2.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class2 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match3, reg3)) + { + std::string to = match3.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class3 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match4, reg4)) + { + std::string to = match4.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class4 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + + next++; + } + jsonObject["toc"] = toc; + toc = ""; + } + catch (std::regex_error& e) + { + //std::cout << "Syntax error in the regular expression" << std::endl; + } + + jsonArray.append(jsonObject); + + } + + return jsonArray; +} + +void AnnexData::findAndReplaceAll(std::string &data, QString &lang, QString std_type) +{ + TSqlQuery query; + std::string toSearch, replaceStr; + + std::string year = QDateTime::currentDateTime().toString("yyyy").toStdString(); + std::string y = "{{YYYY}}"; + std::string month = QDateTime::currentDateTime().toString("MM").toStdString(); + std::string m = "{{MM}}"; + + size_t pos2 = data.find(y); + // Repeat till end is reached + while( pos2 != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos2, y.size(), year); + // Get the next occurrence from the current position + pos2 =data.find(y, pos2 + y.size()); + } + pos2 = data.find(m); + // Repeat till end is reached + while( pos2 != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos2, m.size(), month); + // Get the next occurrence from the current position + pos2 =data.find(m, pos2 + m.size()); + } + + if( lang.compare("de_DE") == 0 ) + { + query.prepare("SELECT std_attr, std_val_de FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + else + { + query.prepare("SELECT std_attr, std_val_en FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + // SELECT id, std_type, std_attr, std_val_de, std_val_en, active FROM public.app_vars; + query.addBindValue(std_type); + + query.exec(); + + while (query.next()) + { + toSearch = "{{" + query.value(0).toString().toStdString() + "}}"; + replaceStr = query.value(1).toString().toStdString(); + + // Get the first occurrence + size_t pos = data.find(toSearch); + // Repeat till end is reached + while( pos != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos, toSearch.size(), replaceStr); + // Get the next occurrence from the current position + pos =data.find(toSearch, pos + replaceStr.size()); + } + } +} + +QJsonArray AnnexData::sqlGet_crObjCatalog(bool doToc, QMap outList) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, id, lang; + + QMapIterator i(outList); + while(i.hasNext()) + { + i.next(); + id = i.value(); + + if(doToc == false) + { + query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE annex_data.id = ?"); + query.addBindValue(id); + } + else + { + query.prepare("SELECT annex_data.id, spec_title, spec_content, cat_class FROM annex_data WHERE annex_data.id = ?"); + query.addBindValue(id); + } + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + if(doToc == false) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonObject["comments_count"] = QString::number( AnnexDataComments::getSpecsCommentsCount(id.toInt() )); + + jsonArray.append(jsonObject); + } + else + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["spec_title"] = query.value(1).toString(); + jsonObject["cat_class"] = query.value(3).toString(); + + //jsonObject["spec_content"] = query.value(2).toString(); + std::string erg = query.value(2).toString().toStdString(); + findAndReplaceAll(erg, lang, "standard"); + std::string line = erg.c_str(); + + std::regex reg1("()(.{0,100})()", std::regex_constants::icase); + std::smatch match1; + + std::regex reg2("()(.{0,100})()", std::regex_constants::icase); + std::smatch match2; + + std::regex reg3("()(.{0,100})()", std::regex_constants::icase); + std::smatch match3; + + std::regex reg4("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match4; + + QString toc; + std::string ahref1 = "
    .{0,100})|(.{0,100})|(.{0,100}))", std::regex_constants::icase); + std::sregex_iterator next(line.begin(), line.end(), re); + std::sregex_iterator end; + while (next != end) + { + std::smatch match = *next; + //std::cout << "MATCH: " << match.str() << "\n"; + std::string item = match.str(); + + if(std::regex_search(item, match1, reg1)) + { + std::string to = match1.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class1 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match2, reg2)) + { + std::string to = match2.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class2 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match3, reg3)) + { + std::string to = match3.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class3 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match4, reg4)) + { + std::string to = match4.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class4 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + + next++; + } + jsonObject["toc"] = toc; + toc = ""; + } + catch (std::regex_error& e) + { + //std::cout << "Syntax error in the regular expression" << std::endl; + } + + jsonArray.append(jsonObject); + + } + } + } + return jsonArray; +} + +QMap AnnexData::checkObjCatalog(QMap wwList, QMap localList) +{ + QMapIterator i(localList); + while (i.hasNext()) + { + i.next(); + if(localList.contains(i.key())) + { + wwList[i.key()] = localList[i.key()]; + } + } + + return wwList; +} + +QMap AnnexData::sqlObjCatalog(QString name, QString ac, QString pc, QString country, QString lang, QString cat, QString spec_active, QString release) +{ + TSqlQuery query; + + QString msg, obj_name, ac_classes, pc_classes; + QMap inList; + + obj_name = "%" + name + "%"; + ac_classes = "%" + ac + "%"; + pc_classes = "%" + pc + "%"; + + query.prepare("select lfdnr, id from annex_data where obj_sname LIKE ? and ac_classes LIKE ? and pc_classes LIKE ? and lang = ? and country = ? and cat_class = ? AND spec_active = ? AND (spec_release = ? or spec_release = 'pre-release') order by lfdnr"); + query.addBindValue(obj_name); + query.addBindValue(ac_classes); + query.addBindValue(pc_classes); + query.addBindValue(lang); + query.addBindValue(country); + query.addBindValue(cat); + query.addBindValue(spec_active); + query.addBindValue(release); + + if(!query.exec()) + { + msg = query.lastError().text(); + qWarning("ERROR: " + msg.toUtf8()); + //tDebug(msg.toUtf8()); + } + + while (query.next()) + { + /*msg = "sqlObjCatalog: " + query.value(0).toString() + " " + query.value(1).toString(); + tDebug(msg.toUtf8()); */ + inList.insert(query.value(0).toString(),query.value(1).toString()); + } + + return inList; +} + +QJsonArray AnnexData::listObjCatalog(bool doToc, QMap editMap) +{ + QMap localList, wwList, outList; + QJsonArray array, tomerge; + + // General + if(editMap["obj_sname"].compare("General") == 0) + { + + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog("General", "0", "0", editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog("General", "0", "0", "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + + outList = AnnexData::checkObjCatalog(wwList, localList); + return AnnexData::sqlGet_crObjCatalog(doToc, outList); + } + + if(editMap["cat_sname_en"].compare("General") == 0) + { + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog(editMap["obj_sname"], "0", "0", editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog(editMap["obj_sname"], "0", "0", "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + outList = AnnexData::checkObjCatalog(wwList, localList); + array = AnnexData::sqlGet_crObjCatalog(doToc, outList); + + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + outList = AnnexData::checkObjCatalog(wwList, localList); + tomerge = AnnexData::sqlGet_crObjCatalog(doToc, outList); + + for(int i = 0; i < tomerge.size(); i++) + { + array.append(tomerge[i]); + } + return array; + } + else + { + // Cat + wwList.clear(); localList.clear(); outList.clear(); + localList= AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + wwList = AnnexData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + outList = AnnexData::checkObjCatalog(wwList, localList); + return AnnexData::sqlGet_crObjCatalog(doToc, outList); + } +} + +QJsonArray AnnexData::doReleased(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + int id = editMap["release_id"].toInt(); + + //obj_sname, spec_version, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date, rel_creator, relcreator_decisdate, rel_inspector, relinspect_decisdate, rel_approver, relapprov_decisdate, ci_date, cd_date, cdd_date) + + //query.prepare("INSERT INTO public.release_mgmt(obj_sname, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date) VALUES (?, ?, ?, ?, ?, ?, ?, ?, now())"); + query.prepare("UPDATE public.release_mgmt SET rel_creator=?, relcreator_decisdate=now() WHERE id=?"); + query.addBindValue(editMap["rel_creator"]); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Release eingestellt"; + jsonObj["last_id"] = query.lastInsertId().toInt(); + } + + array.append(jsonObj); + return array; +} + +QJsonArray AnnexData::upReleased(int id) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + query.prepare("UPDATE public.annex_data SET spec_release='released' WHERE id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = "upReleased : " + msg; + jsonObj["query"] = query.lastQuery(); + msg = "upReleased : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + + array.append(jsonObj); + } + + return array; +} + +QJsonArray AnnexData::doPreRelease(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + //obj_sname, spec_version, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date, rel_creator, relcreator_decisdate, rel_inspector, relinspect_decisdate, rel_approver, relapprov_decisdate, ci_date, cd_date, cdd_date) + + query.prepare("INSERT INTO public.release_mgmt(obj_sname, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date) VALUES (?, ?, ?, ?, ?, ?, ?, ?, now())"); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["doc_type"]); + query.addBindValue(editMap["rel_requester"]); + //query.addBindValue(editMap["relrequest_date"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Pre-Release eingestellt"; + jsonObj["last_id"] = query.lastInsertId().toInt(); + } + + array.append(jsonObj); + return array; +} + +QJsonArray AnnexData::upPrelease(int id) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + query.prepare("UPDATE public.annex_data SET spec_release='pre-release' WHERE id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = "upPrelease : " + msg; + jsonObj["query"] = query.lastQuery(); + msg = "upPrelease : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + + array.append(jsonObj); + } + + return array; +} + +QJsonArray AnnexData::updAnnexData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + //QString searchtxt = "

    {{page-break}}

    "; + QRegularExpression re("

    {{page-break}}

    "); + QRegularExpressionMatchIterator i = re.globalMatch(editMap["spec_content"]); + while (i.hasNext()) + { + QRegularExpressionMatch match = i.next(); + editMap["spec_content"].replace(re, "{{page-break}}"); + } + + query.prepare("UPDATE public.annex_data SET id=?, lfdnr=?, spec_title=?, spec_desc=?, spec_version=?, spec_release=?, obj_sname=?, ac_classes=?, pc_classes=?, cat_class=?, country=?, lang=?, spec_content=?, spec_active=? WHERE id = ?"); + + query.addBindValue(editMap["id"]); + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version_new"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + + query.prepare("UPDATE public.annex_meta SET spec_last_modified=?, spec_valid_start=?, spec_valid_end=?, last_editor=?, g_legacy=?, responsibility=?, spec_comment=?, spec_marker=? WHERE spec_data_id = ?"); + + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_end"]); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "updStdData : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + jsonObj["data_id"] = editMap["id"]; + } + + array.append(jsonObj); + return array; +} + +QJsonArray AnnexData::setAnnexData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray jsonArr; + QString msg; + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + query.prepare("INSERT INTO annex_data(lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + + int last_id = query.lastInsertId().toInt(); + + query.prepare("INSERT INTO annex_meta(spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(last_id); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + + query.addBindValue("{ALL}"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz eingefügt"; + jsonObj["last_data_id"] = last_id; + jsonObj["last_meta_id"] = query.lastInsertId().toInt(); + } + + jsonArr.append(jsonObj); + return jsonArr; +} + +QJsonArray AnnexData::getAnnexToc(QMap &stdDataMap) +{ + QJsonObject jsonObject, jsonObjContent; + QJsonValue jsonObjVal; + QJsonArray jsonArr; + + QString obj_sname = stdDataMap["obj_sname"]; + + stdDataMap["obj_sname"] = "General"; + foreach (const QJsonValue & value, AnnexData::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + jsonObject["obj_sname"] = stdDataMap["obj_sname"]; + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + + stdDataMap["obj_sname"] = obj_sname; + foreach (const QJsonValue & value, CatClasses::getAllJson("1", "category")) + { + QJsonObject objclass = value.toObject(); + QJsonValue obj_class_name = objclass.value(QString("cat_sname_en")); + if(obj_class_name.toString().compare("") == 1 ) + { + stdDataMap["cat_sname_en"] = obj_class_name.toString(); + foreach (const QJsonValue & value, AnnexData::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + jsonObject["obj_sname"] = stdDataMap["obj_sname"]; + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + } + } + + //return StandardsData::listObjCatalog(true, stdDataMap); + return jsonArr; +} + +QJsonArray AnnexData::getAnnexShow(QMap &stdDataMap) +{ + return AnnexData::listObjCatalog(false, stdDataMap); +} + +QJsonArray AnnexData::getAnnexList(QMap &stdDataMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, obj_sname, ac_class, pc_class, id; + + obj_sname = "%" + stdDataMap["obj_sname"] + "%"; + ac_class = "%" + stdDataMap["ac_class"] + "%"; + pc_class = "%" + stdDataMap["pc_class"] + "%"; + + query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE obj_sname like ? AND cat_class = ? AND country = ? AND lang = ? AND spec_active = ? AND ac_classes like ? AND pc_classes like ? AND spec_release = ? order by lfdnr"); + //query.prepare("SELECT annex_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM annex_data INNER JOIN annex_meta ON annex_meta.spec_data_id = annex_data.id WHERE obj_sname like '%Annex D%' AND cat_class = 'Cabling' AND country = 'WW' AND lang = 'de_DE' AND spec_active = 1 AND ac_classes like '%2%' AND pc_classes like '%2%' AND spec_release = 'draft'"); + + query.addBindValue(obj_sname); + query.addBindValue(stdDataMap["cat_sname_en"]); + query.addBindValue(stdDataMap["country"]); + query.addBindValue(stdDataMap["lang"]); + query.addBindValue(stdDataMap["spec_active"]); + query.addBindValue(ac_class); + query.addBindValue(pc_class); + query.addBindValue(stdDataMap["spec_release"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + id = query.value(0).toString(); + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray AnnexData::getExistCountries() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT DISTINCT(country) FROM public.annex_data ORDER BY country"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["country"] = query.value(0).toString(); + jsonArray.append(jsonObject); + } + return jsonArray; +} + +QJsonArray AnnexData::getHighestLfdnr(const QString &category) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT MAX(lfdnr) FROM public.annex_data WHERE cat_class = ?"); + query.addBindValue(category); + + query.exec(); + query.next(); + + jsonObject["lfdnr"] = query.value(0).toString(); + jsonObject["cat"] = category; + jsonArray.append(jsonObject); + + return jsonArray; +} + +int AnnexData::countCheckLfdnrCat() +{ + TSqlQuery query; + int counter = 0; + + query.prepare("SELECT id, obj_sname, cat_class, lfdnr, country, lang, spec_title FROM public.annex_data a WHERE not Exists ( SELECT lfdnr FROM public.annex_data c WHERE a.lang != c.lang AND a.cat_class = c.cat_class and a.lfdnr = c.lfdnr) order by (cat_class,lfdnr)"); + + query.exec(); + + while (query.next()) + { + counter++; + } + + return counter; +} + +QJsonArray AnnexData::chkLfdnrEditor(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, lfdnr, spec_title, obj_sname, country, lang FROM public.annex_data WHERE cat_class = ? AND lfdnr = ?"); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["lfdnr"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["MSG"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["obj_sname"] = query.value(3).toString(); + jsonObject["country"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray AnnexData::getStatistics() +{ + TSqlQuery query; + QJsonObject jsonObject, jsonObjReleaseTypes; + QJsonArray jsonArray, jsonArrReleaseTypes; + QString msg; + QList releaseTypes; + + // count + query.prepare("SELECT count(id) FROM annex_data"); + query.exec(); + query.next(); + jsonObject["count_id"] = query.value(0).toString(); + + // active + query.prepare("select count(id) from annex_data where spec_active = 1"); + query.exec(); + query.next(); + jsonObject["count_active"] = query.value(0).toString(); + + // countries + query.prepare("select count(distinct country) from annex_data"); + query.exec(); + query.next(); + jsonObject["count_countries"] = query.value(0).toString(); + + // languages + query.prepare("select count(lang) from annex_data where lang = 'de_DE'"); + query.exec(); + query.next(); + jsonObject["count_language_de"] = query.value(0).toString(); + query.prepare("select count(lang) from annex_data where lang = 'en_GB'"); + query.exec(); + query.next(); + jsonObject["count_language_en"] = query.value(0).toString(); + + // waste + query.prepare("select count(id) from annex_data_waste"); + query.exec(); + query.next(); + jsonObject["count_Annexwaste"] = query.value(0).toString(); + + // releases + query.prepare("SELECT std_attr FROM std_system WHERE std_type = 'release_types' ORDER BY sort"); + query.exec(); + while (query.next()) + { + releaseTypes.append(query.value(0).toString()); + } + + QList::iterator i; + for (i = releaseTypes.begin(); i != releaseTypes.end(); ++i) + { + query.prepare("select count(spec_release) from annex_data where spec_release = ?"); + query.addBindValue(*i); + query.exec(); + query.next(); + jsonObjReleaseTypes["release_type"] = *i; + jsonObjReleaseTypes["count_release_type"] = query.value(0).toString(); + jsonArrReleaseTypes.append(jsonObjReleaseTypes); + } + + jsonObject["countCheckLfdnrCat"] = QString::number( AnnexData::countCheckLfdnrCat() ); + + jsonArray.append(jsonObject); + jsonArray.append(jsonArrReleaseTypes); + + return jsonArray; +} + +int AnnexData::id() const +{ + return d->id; +} + +QString AnnexData::lfdnr() const +{ + return d->lfdnr; +} + +void AnnexData::setLfdnr(const QString &lfdnr) +{ + d->lfdnr = lfdnr; +} + +QString AnnexData::specTitle() const +{ + return d->spec_title; +} + +void AnnexData::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString AnnexData::specDesc() const +{ + return d->spec_desc; +} + +void AnnexData::setSpecDesc(const QString &specDesc) +{ + d->spec_desc = specDesc; +} + +QString AnnexData::specVersion() const +{ + return d->spec_version; +} + +void AnnexData::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString AnnexData::specRelease() const +{ + return d->spec_release; +} + +void AnnexData::setSpecRelease(const QString &specRelease) +{ + d->spec_release = specRelease; +} + +QString AnnexData::objSname() const +{ + return d->obj_sname; +} + +void AnnexData::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString AnnexData::acClasses() const +{ + return d->ac_classes; +} + +void AnnexData::setAcClasses(const QString &acClasses) +{ + d->ac_classes = acClasses; +} + +QString AnnexData::pcClasses() const +{ + return d->pc_classes; +} + +void AnnexData::setPcClasses(const QString &pcClasses) +{ + d->pc_classes = pcClasses; +} + +QString AnnexData::catClass() const +{ + return d->cat_class; +} + +void AnnexData::setCatClass(const QString &catClass) +{ + d->cat_class = catClass; +} + +QString AnnexData::country() const +{ + return d->country; +} + +void AnnexData::setCountry(const QString &country) +{ + d->country = country; +} + +QString AnnexData::lang() const +{ + return d->lang; +} + +void AnnexData::setLang(const QString &lang) +{ + d->lang = lang; +} + +QByteArray AnnexData::specContent() const +{ + return d->spec_content; +} + +void AnnexData::setSpecContent(const QByteArray &specContent) +{ + d->spec_content = specContent; +} + +int AnnexData::specActive() const +{ + return d->spec_active; +} + +void AnnexData::setSpecActive(int specActive) +{ + d->spec_active = specActive; +} + +AnnexData &AnnexData::operator=(const AnnexData &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +AnnexData AnnexData::create(const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive) +{ + AnnexDataObject obj; + obj.lfdnr = lfdnr; + obj.spec_title = specTitle; + obj.spec_desc = specDesc; + obj.spec_version = specVersion; + obj.spec_release = specRelease; + obj.obj_sname = objSname; + obj.ac_classes = acClasses; + obj.pc_classes = pcClasses; + obj.cat_class = catClass; + obj.country = country; + obj.lang = lang; + obj.spec_content = specContent; + obj.spec_active = specActive; + if (!obj.create()) { + return AnnexData(); + } + return AnnexData(obj); +} + +AnnexData AnnexData::create(const QVariantMap &values) +{ + AnnexData model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +AnnexData AnnexData::get(int id) +{ + TSqlORMapper mapper; + return AnnexData(mapper.findByPrimaryKey(id)); +} + +int AnnexData::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList AnnexData::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray AnnexData::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(AnnexData(i.next()).toVariantMap()))); + } + } + return array; +} + +QJsonArray AnnexData::getAllJsonCi() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("select id, obj_sname, spec_title, cat_class,lfdnr, lang, country FROM public.annex_data WHERE spec_release = 'released' group by (id, obj_sname, spec_title, cat_class, lfdnr, lang, country) order by (obj_sname,lfdnr)"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["MSG"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["cat_class"] = query.value(3).toString(); + jsonObject["lfdnr"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + jsonObject["country"] = query.value(6).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +TModelObject *AnnexData::modelData() +{ + return d.data(); +} + +const TModelObject *AnnexData::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const AnnexData &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, AnnexData &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(AnnexData) diff --git a/models/annexdata.h b/models/annexdata.h new file mode 100644 index 0000000..80ef3d6 --- /dev/null +++ b/models/annexdata.h @@ -0,0 +1,107 @@ +#ifndef ANNEXDATA_H +#define ANNEXDATA_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class AnnexDataObject; +class QJsonArray; + + +class T_MODEL_EXPORT AnnexData : public TAbstractModel +{ +public: + AnnexData(); + AnnexData(const AnnexData &other); + AnnexData(const AnnexDataObject &object); + ~AnnexData(); + + int id() const; + QString lfdnr() const; + void setLfdnr(const QString &lfdnr); + QString specTitle() const; + void setSpecTitle(const QString &specTitle); + QString specDesc() const; + void setSpecDesc(const QString &specDesc); + QString specVersion() const; + void setSpecVersion(const QString &specVersion); + QString specRelease() const; + void setSpecRelease(const QString &specRelease); + QString objSname() const; + void setObjSname(const QString &objSname); + QString acClasses() const; + void setAcClasses(const QString &acClasses); + QString pcClasses() const; + void setPcClasses(const QString &pcClasses); + QString catClass() const; + void setCatClass(const QString &catClass); + QString country() const; + void setCountry(const QString &country); + QString lang() const; + void setLang(const QString &lang); + QByteArray specContent() const; + void setSpecContent(const QByteArray &specContent); + int specActive() const; + void setSpecActive(int specActive); + AnnexData &operator=(const AnnexData &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + static QJsonArray setAnnexData(QMap editMap); + static QJsonArray updAnnexData(QMap editMap); + static QJsonArray upPrelease(int id); + static QJsonArray doPreRelease(QMap editMap); + static QJsonArray upReleased(int id); + static QJsonArray doReleased(QMap editMap); + static void setDraft(int id, QString comment); + + static AnnexData create(const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive); + static AnnexData create(const QVariantMap &values); + static AnnexData get(int id); + static int count(); + + static QList getAll(); + static QJsonArray getAllJson(); + static QJsonArray getAllJsonCi(); + static QJsonArray getStatistics(); + static QJsonArray getExistCountries(); + static QJsonArray getAnnexList(QMap &stdDataMap); + static QJsonArray getAnnexShow(QMap &stdDataMap); + static QJsonArray getAnnexSpec(int &id); + static QJsonArray getAnnexToc(QMap &stdDataMap); + static void findAndReplaceAll(std::string &data, QString &lang, QString std_type); + + //static QJsonArray listObjCatalog(QMap editMap); + static QJsonArray listObjCatalog(bool doToc, QMap editMap); + static QMap sqlObjCatalog(QString name, QString ac, QString pc, QString country, QString lang, QString cat, QString spec_active, QString release); + static QMap checkObjCatalog(QMap wwList, QMap localList); + // static QJsonArray sqlGet_crObjCatalog(QMap outList); + static QJsonArray sqlGet_crObjCatalog(bool doToc, QMap outList); + + static int countCheckLfdnrCat(); + static QJsonArray getHighestLfdnr(const QString &category); + static QJsonArray chkLfdnrEditor(QMap editMap); + + static void writeAnnex(QMap &stdDataMap); + static void writeAnnexHtml(QMap &stdDataMap); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const AnnexData &model); + friend QDataStream &operator>>(QDataStream &ds, AnnexData &model); +}; + +Q_DECLARE_METATYPE(AnnexData) +Q_DECLARE_METATYPE(QList) + +#endif // ANNEXDATA_H diff --git a/models/annexdatacomments.cpp b/models/annexdatacomments.cpp new file mode 100644 index 0000000..687485d --- /dev/null +++ b/models/annexdatacomments.cpp @@ -0,0 +1,279 @@ +#include +#include "annexdatacomments.h" +#include "sqlobjects/annexdatacommentsobject.h" + +AnnexDataComments::AnnexDataComments() : + TAbstractModel(), + d(new AnnexDataCommentsObject()) +{ + // set the initial parameters +} + +AnnexDataComments::AnnexDataComments(const AnnexDataComments &other) : + TAbstractModel(), + d(other.d) +{ } + +AnnexDataComments::AnnexDataComments(const AnnexDataCommentsObject &object) : + TAbstractModel(), + d(new AnnexDataCommentsObject(object)) +{ } + +AnnexDataComments::~AnnexDataComments() +{ + // If the reference count becomes 0, + // the shared data object 'AnnexDataCommentsObject' is deleted. +} + +// ##### + +int AnnexDataComments::getSpecsCommentsCount(const int &spec_id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT count(id) FROM public.annex_data_comments WHERE spec_id = ?"); + query.addBindValue(spec_id); + + query.exec(); + query.next(); + return query.value(0).toInt(); +} + +QJsonArray AnnexDataComments::getSpecComments(const int &spec_id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, spec_id, user_comment FROM public.annex_data_comments WHERE spec_id = ?"); + query.addBindValue(spec_id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["spec_id"] = query.value(1).toString(); + jsonObject["user_comment"] = query.value(2).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QMap AnnexDataComments::getStatistics() +{ + TSqlQuery query; + QMap qmapStatistik; + + // count + query.prepare("SELECT count(id) FROM annex_data_comments"); + query.exec(); + query.next(); + qmapStatistik["count_id"] = query.value(0).toString(); + + // users + query.prepare("SELECT count (distinct username) FROM annex_data_comments"); + query.exec(); + query.next(); + qmapStatistik["count_users"] = query.value(0).toString(); + + return qmapStatistik; +} + +int AnnexDataComments::id() const +{ + return d->id; +} + +QDateTime AnnexDataComments::commentCreated() const +{ + return d->comment_created; +} + +void AnnexDataComments::setCommentCreated(const QDateTime &commentCreated) +{ + d->comment_created = commentCreated; +} + +int AnnexDataComments::specId() const +{ + return d->spec_id; +} + +void AnnexDataComments::setSpecId(int specId) +{ + d->spec_id = specId; +} + +QString AnnexDataComments::specTitle() const +{ + return d->spec_title; +} + +void AnnexDataComments::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString AnnexDataComments::specVersion() const +{ + return d->spec_version; +} + +void AnnexDataComments::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString AnnexDataComments::userComment() const +{ + return d->user_comment; +} + +void AnnexDataComments::setUserComment(const QString &userComment) +{ + d->user_comment = userComment; +} + +QString AnnexDataComments::username() const +{ + return d->username; +} + +void AnnexDataComments::setUsername(const QString &username) +{ + d->username = username; +} + +AnnexDataComments &AnnexDataComments::operator=(const AnnexDataComments &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +QJsonArray AnnexDataComments::createComment(int spec_id, const QString &spec_title, const QString &spec_version, const QString &user_comment, const QString &username) +{ + TSqlQuery query; + QString msg; + QJsonObject jsonObj; + QJsonArray jsonArray; + + query.prepare("INSERT INTO public.annex_data_comments(comment_created, spec_id, spec_title, spec_version, user_comment, username) VALUES((:comment_created),(:spec_id),(:spec_title),(:spec_version),(:user_comment),(:username))"); + query.bindValue(":comment_created", QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")); + query.bindValue(":spec_id", spec_id); + query.bindValue(":spec_title", spec_title); + query.bindValue(":spec_version", spec_version); + query.bindValue(":user_comment", user_comment); + query.bindValue(":username",username); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + tError("createComment " + msg.toUtf8()); + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Comment added"; + } + + jsonArray.append(jsonObj); + return jsonArray; +} + +AnnexDataComments AnnexDataComments::create(const QDateTime &commentCreated, int specId, const QString &specTitle, const QString &specVersion, const QString &userComment, const QString &username) +{ + AnnexDataCommentsObject obj; + obj.comment_created = commentCreated; + obj.spec_id = specId; + obj.spec_title = specTitle; + obj.spec_version = specVersion; + obj.user_comment = userComment; + obj.username = username; + if (!obj.create()) { + return AnnexDataComments(); + } + return AnnexDataComments(obj); +} + +AnnexDataComments AnnexDataComments::create(const QVariantMap &values) +{ + AnnexDataComments model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +AnnexDataComments AnnexDataComments::get(int id) +{ + TSqlORMapper mapper; + return AnnexDataComments(mapper.findByPrimaryKey(id)); +} + +int AnnexDataComments::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList AnnexDataComments::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray AnnexDataComments::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(AnnexDataComments(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *AnnexDataComments::modelData() +{ + return d.data(); +} + +const TModelObject *AnnexDataComments::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const AnnexDataComments &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, AnnexDataComments &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(AnnexDataComments) diff --git a/models/annexdatacomments.h b/models/annexdatacomments.h new file mode 100644 index 0000000..a0bd251 --- /dev/null +++ b/models/annexdatacomments.h @@ -0,0 +1,67 @@ +#ifndef ANNEXDATACOMMENTS_H +#define ANNEXDATACOMMENTS_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class AnnexDataCommentsObject; +class QJsonArray; + + +class T_MODEL_EXPORT AnnexDataComments : public TAbstractModel +{ +public: + AnnexDataComments(); + AnnexDataComments(const AnnexDataComments &other); + AnnexDataComments(const AnnexDataCommentsObject &object); + ~AnnexDataComments(); + + int id() const; + QDateTime commentCreated() const; + void setCommentCreated(const QDateTime &commentCreated); + int specId() const; + void setSpecId(int specId); + QString specTitle() const; + void setSpecTitle(const QString &specTitle); + QString specVersion() const; + void setSpecVersion(const QString &specVersion); + QString userComment() const; + void setUserComment(const QString &userComment); + QString username() const; + void setUsername(const QString &username); + AnnexDataComments &operator=(const AnnexDataComments &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static QJsonArray createComment(int spec_id, const QString &spec_title, const QString &spec_version, const QString &user_comment, const QString &username); + static AnnexDataComments create(const QDateTime &commentCreated, int specId, const QString &specTitle, const QString &specVersion, const QString &userComment, const QString &username); + static AnnexDataComments create(const QVariantMap &values); + static AnnexDataComments get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + static QMap getStatistics(); + static int getSpecsCommentsCount(const int &spec_id); + static QJsonArray getSpecComments(const int &spec_id); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const AnnexDataComments &model); + friend QDataStream &operator>>(QDataStream &ds, AnnexDataComments &model); +}; + +Q_DECLARE_METATYPE(AnnexDataComments) +Q_DECLARE_METATYPE(QList) + +#endif // ANNEXDATACOMMENTS_H diff --git a/models/annexdatawaste.cpp b/models/annexdatawaste.cpp new file mode 100644 index 0000000..7ff8781 --- /dev/null +++ b/models/annexdatawaste.cpp @@ -0,0 +1,403 @@ +#include +#include "annexdatawaste.h" +#include "sqlobjects/annexdatawasteobject.h" + +AnnexDataWaste::AnnexDataWaste() : + TAbstractModel(), + d(new AnnexDataWasteObject()) +{ + // set the initial parameters +} + +AnnexDataWaste::AnnexDataWaste(const AnnexDataWaste &other) : + TAbstractModel(), + d(other.d) +{ } + +AnnexDataWaste::AnnexDataWaste(const AnnexDataWasteObject &object) : + TAbstractModel(), + d(new AnnexDataWasteObject(object)) +{ } + +AnnexDataWaste::~AnnexDataWaste() +{ + // If the reference count becomes 0, + // the shared data object 'AnnexDataWasteObject' is deleted. +} + +// ##### + +QJsonArray AnnexDataWaste::doRecover(int id) +{ + TSqlQuery query; + QString msg; + QString changed_on, id_old, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active; + + QJsonObject jsonObj; + QJsonArray jsonArr; + + query.prepare("SELECT changed_on, id_old, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active FROM public.standards_data_waste where id = ?"); + query.addBindValue(id); + query.exec(); + + while (query.next()) + { + changed_on = query.value(0).toString(); + id_old = query.value(1).toString(); + lfdnr= query.value(2).toString(); + spec_title = query.value(3).toString(); + spec_desc = query.value(4).toString(); + spec_version = query.value(5).toString(); + spec_release = query.value(6).toString(); + obj_sname = query.value(7).toString(); + ac_classes = query.value(8).toString(); + pc_classes = query.value(9).toString(); + cat_class = query.value(10).toString(); + country = query.value(11).toString(); + lang = query.value(12).toString(); + spec_content = query.value(13).toString(); + spec_active = query.value(14).toString(); + } + + query.prepare("INSERT INTO public.standards_data (lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + query.addBindValue(lfdnr); + query.addBindValue(spec_title); + query.addBindValue(spec_desc); + query.addBindValue(spec_version); + query.addBindValue(spec_release); + query.addBindValue(obj_sname); + query.addBindValue(ac_classes); + query.addBindValue(pc_classes); + query.addBindValue(cat_class); + query.addBindValue(country); + query.addBindValue(lang); + query.addBindValue(spec_content); + query.addBindValue(spec_active); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonArr.append(jsonObj); + return jsonArr; + } + + int last_id = query.lastInsertId().toInt(); + jsonObj["last_data_id"] = QString::number(last_id); + + QString spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups; + query.prepare("SELECT changed_on, spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM public.standards_meta_waste WHERE spec_data_id = ?"); + query.addBindValue(id_old); + query.exec(); + + while (query.next()) + { + changed_on = query.value(0).toString(); + spec_data_id = query.value(1).toString(); + spec_created = query.value(2).toString(); + spec_last_modified = query.value(3).toString(); + spec_valid_start = query.value(4).toString(); + spec_valid_end = query.value(5).toString(); + last_editor = query.value(6).toString(); + g_legacy = query.value(7).toString(); + responsibility = query.value(8).toString(); + spec_comment = query.value(9).toString(); + spec_marker = query.value(10).toString(); + groups = query.value(11).toString(); + } + + query.prepare("INSERT INTO public.standards_meta (spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + query.addBindValue(last_id); + query.addBindValue(spec_created); + query.addBindValue(spec_last_modified); + query.addBindValue(spec_valid_start); + query.addBindValue(spec_valid_end); + query.addBindValue(last_editor); + query.addBindValue( g_legacy); + query.addBindValue(responsibility); + query.addBindValue(spec_comment); + query.addBindValue(spec_marker); + query.addBindValue(groups); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonArr.append(jsonObj); + return jsonArr; + } + + int last_metaid = query.lastInsertId().toInt(); + jsonObj["last_meta_id"] = QString::number(last_metaid); + + query.prepare("DELETE FROM public.standards_data_waste WHERE id = ?"); + query.addBindValue(id); + query.exec(); + query.prepare("DELETE FROM public.standards_meta_waste WHERE spec_data_id = ?"); + query.addBindValue(spec_data_id); + query.exec(); + + msg = "Recovery successfully."; + msg.append("ID: " + QString::number(last_id)); + msg.append(" Meta-ID: " + QString::number(last_metaid)); + + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = msg; + jsonArr.append(jsonObj); + return jsonArr; +} + +int AnnexDataWaste::id() const +{ + return d->id; +} + +QDateTime AnnexDataWaste::changedOn() const +{ + return d->changed_on; +} + +void AnnexDataWaste::setChangedOn(const QDateTime &changedOn) +{ + d->changed_on = changedOn; +} + +int AnnexDataWaste::idOld() const +{ + return d->id_old; +} + +void AnnexDataWaste::setIdOld(int idOld) +{ + d->id_old = idOld; +} + +QString AnnexDataWaste::lfdnr() const +{ + return d->lfdnr; +} + +void AnnexDataWaste::setLfdnr(const QString &lfdnr) +{ + d->lfdnr = lfdnr; +} + +QString AnnexDataWaste::specTitle() const +{ + return d->spec_title; +} + +void AnnexDataWaste::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString AnnexDataWaste::specDesc() const +{ + return d->spec_desc; +} + +void AnnexDataWaste::setSpecDesc(const QString &specDesc) +{ + d->spec_desc = specDesc; +} + +QString AnnexDataWaste::specVersion() const +{ + return d->spec_version; +} + +void AnnexDataWaste::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString AnnexDataWaste::specRelease() const +{ + return d->spec_release; +} + +void AnnexDataWaste::setSpecRelease(const QString &specRelease) +{ + d->spec_release = specRelease; +} + +QString AnnexDataWaste::objSname() const +{ + return d->obj_sname; +} + +void AnnexDataWaste::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString AnnexDataWaste::acClasses() const +{ + return d->ac_classes; +} + +void AnnexDataWaste::setAcClasses(const QString &acClasses) +{ + d->ac_classes = acClasses; +} + +QString AnnexDataWaste::pcClasses() const +{ + return d->pc_classes; +} + +void AnnexDataWaste::setPcClasses(const QString &pcClasses) +{ + d->pc_classes = pcClasses; +} + +QString AnnexDataWaste::catClass() const +{ + return d->cat_class; +} + +void AnnexDataWaste::setCatClass(const QString &catClass) +{ + d->cat_class = catClass; +} + +QString AnnexDataWaste::country() const +{ + return d->country; +} + +void AnnexDataWaste::setCountry(const QString &country) +{ + d->country = country; +} + +QString AnnexDataWaste::lang() const +{ + return d->lang; +} + +void AnnexDataWaste::setLang(const QString &lang) +{ + d->lang = lang; +} + +QByteArray AnnexDataWaste::specContent() const +{ + return d->spec_content; +} + +void AnnexDataWaste::setSpecContent(const QByteArray &specContent) +{ + d->spec_content = specContent; +} + +int AnnexDataWaste::specActive() const +{ + return d->spec_active; +} + +void AnnexDataWaste::setSpecActive(int specActive) +{ + d->spec_active = specActive; +} + +AnnexDataWaste &AnnexDataWaste::operator=(const AnnexDataWaste &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +AnnexDataWaste AnnexDataWaste::create(const QDateTime &changedOn, int idOld, const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive) +{ + AnnexDataWasteObject obj; + obj.changed_on = changedOn; + obj.id_old = idOld; + obj.lfdnr = lfdnr; + obj.spec_title = specTitle; + obj.spec_desc = specDesc; + obj.spec_version = specVersion; + obj.spec_release = specRelease; + obj.obj_sname = objSname; + obj.ac_classes = acClasses; + obj.pc_classes = pcClasses; + obj.cat_class = catClass; + obj.country = country; + obj.lang = lang; + obj.spec_content = specContent; + obj.spec_active = specActive; + if (!obj.create()) { + return AnnexDataWaste(); + } + return AnnexDataWaste(obj); +} + +AnnexDataWaste AnnexDataWaste::create(const QVariantMap &values) +{ + AnnexDataWaste model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +AnnexDataWaste AnnexDataWaste::get(int id) +{ + TSqlORMapper mapper; + return AnnexDataWaste(mapper.findByPrimaryKey(id)); +} + +int AnnexDataWaste::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList AnnexDataWaste::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray AnnexDataWaste::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(AnnexDataWaste(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *AnnexDataWaste::modelData() +{ + return d.data(); +} + +const TModelObject *AnnexDataWaste::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const AnnexDataWaste &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, AnnexDataWaste &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(AnnexDataWaste) diff --git a/models/annexdatawaste.h b/models/annexdatawaste.h new file mode 100644 index 0000000..3007679 --- /dev/null +++ b/models/annexdatawaste.h @@ -0,0 +1,83 @@ +#ifndef ANNEXDATAWASTE_H +#define ANNEXDATAWASTE_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class AnnexDataWasteObject; +class QJsonArray; + + +class T_MODEL_EXPORT AnnexDataWaste : public TAbstractModel +{ +public: + AnnexDataWaste(); + AnnexDataWaste(const AnnexDataWaste &other); + AnnexDataWaste(const AnnexDataWasteObject &object); + ~AnnexDataWaste(); + + int id() const; + QDateTime changedOn() const; + void setChangedOn(const QDateTime &changedOn); + int idOld() const; + void setIdOld(int idOld); + QString lfdnr() const; + void setLfdnr(const QString &lfdnr); + QString specTitle() const; + void setSpecTitle(const QString &specTitle); + QString specDesc() const; + void setSpecDesc(const QString &specDesc); + QString specVersion() const; + void setSpecVersion(const QString &specVersion); + QString specRelease() const; + void setSpecRelease(const QString &specRelease); + QString objSname() const; + void setObjSname(const QString &objSname); + QString acClasses() const; + void setAcClasses(const QString &acClasses); + QString pcClasses() const; + void setPcClasses(const QString &pcClasses); + QString catClass() const; + void setCatClass(const QString &catClass); + QString country() const; + void setCountry(const QString &country); + QString lang() const; + void setLang(const QString &lang); + QByteArray specContent() const; + void setSpecContent(const QByteArray &specContent); + int specActive() const; + void setSpecActive(int specActive); + AnnexDataWaste &operator=(const AnnexDataWaste &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static AnnexDataWaste create(const QDateTime &changedOn, int idOld, const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive); + static AnnexDataWaste create(const QVariantMap &values); + static AnnexDataWaste get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + + static QJsonArray doRecover(int id); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const AnnexDataWaste &model); + friend QDataStream &operator>>(QDataStream &ds, AnnexDataWaste &model); +}; + +Q_DECLARE_METATYPE(AnnexDataWaste) +Q_DECLARE_METATYPE(QList) + +#endif // ANNEXDATAWASTE_H diff --git a/models/annexmeta.cpp b/models/annexmeta.cpp new file mode 100644 index 0000000..7411fb3 --- /dev/null +++ b/models/annexmeta.cpp @@ -0,0 +1,251 @@ +#include +#include "annexmeta.h" +#include "sqlobjects/annexmetaobject.h" + +AnnexMeta::AnnexMeta() : + TAbstractModel(), + d(new AnnexMetaObject()) +{ + // set the initial parameters +} + +AnnexMeta::AnnexMeta(const AnnexMeta &other) : + TAbstractModel(), + d(other.d) +{ } + +AnnexMeta::AnnexMeta(const AnnexMetaObject &object) : + TAbstractModel(), + d(new AnnexMetaObject(object)) +{ } + +AnnexMeta::~AnnexMeta() +{ + // If the reference count becomes 0, + // the shared data object 'AnnexMetaObject' is deleted. +} + +// ##### + +AnnexMeta AnnexMeta::getBySpecDataId(int spec_data_id) +{ + TSqlQuery query; + + query.prepare("SELECT id FROM public.annex_meta WHERE spec_data_id = ?"); + query.addBindValue(spec_data_id); + + query.exec(); + query.next(); + + TSqlORMapper mapper; + return AnnexMeta(mapper.findByPrimaryKey(query.value(0).toInt())); +} + +int AnnexMeta::id() const +{ + return d->id; +} + +int AnnexMeta::specDataId() const +{ + return d->spec_data_id; +} + +void AnnexMeta::setSpecDataId(int specDataId) +{ + d->spec_data_id = specDataId; +} + +QDateTime AnnexMeta::specCreated() const +{ + return d->spec_created; +} + +void AnnexMeta::setSpecCreated(const QDateTime &specCreated) +{ + d->spec_created = specCreated; +} + +QDateTime AnnexMeta::specLastModified() const +{ + return d->spec_last_modified; +} + +void AnnexMeta::setSpecLastModified(const QDateTime &specLastModified) +{ + d->spec_last_modified = specLastModified; +} + +QDateTime AnnexMeta::specValidStart() const +{ + return d->spec_valid_start; +} + +void AnnexMeta::setSpecValidStart(const QDateTime &specValidStart) +{ + d->spec_valid_start = specValidStart; +} + +QDateTime AnnexMeta::specValidEnd() const +{ + return d->spec_valid_end; +} + +void AnnexMeta::setSpecValidEnd(const QDateTime &specValidEnd) +{ + d->spec_valid_end = specValidEnd; +} + +QString AnnexMeta::lastEditor() const +{ + return d->last_editor; +} + +void AnnexMeta::setLastEditor(const QString &lastEditor) +{ + d->last_editor = lastEditor; +} + +QString AnnexMeta::gLegacy() const +{ + return d->g_legacy; +} + +void AnnexMeta::setGLegacy(const QString &gLegacy) +{ + d->g_legacy = gLegacy; +} + +QString AnnexMeta::responsibility() const +{ + return d->responsibility; +} + +void AnnexMeta::setResponsibility(const QString &responsibility) +{ + d->responsibility = responsibility; +} + +QString AnnexMeta::specComment() const +{ + return d->spec_comment; +} + +void AnnexMeta::setSpecComment(const QString &specComment) +{ + d->spec_comment = specComment; +} + +QString AnnexMeta::specMarker() const +{ + return d->spec_marker; +} + +void AnnexMeta::setSpecMarker(const QString &specMarker) +{ + d->spec_marker = specMarker; +} + +QString AnnexMeta::groups() const +{ + return d->groups; +} + +void AnnexMeta::setGroups(const QString &groups) +{ + d->groups = groups; +} + +AnnexMeta &AnnexMeta::operator=(const AnnexMeta &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +AnnexMeta AnnexMeta::create(int specDataId, const QDateTime &specCreated, const QDateTime &specLastModified, const QDateTime &specValidStart, const QDateTime &specValidEnd, const QString &lastEditor, const QString &gLegacy, const QString &responsibility, const QString &specComment, const QString &specMarker, const QString &groups) +{ + AnnexMetaObject obj; + obj.spec_data_id = specDataId; + obj.spec_created = specCreated; + obj.spec_last_modified = specLastModified; + obj.spec_valid_start = specValidStart; + obj.spec_valid_end = specValidEnd; + obj.last_editor = lastEditor; + obj.g_legacy = gLegacy; + obj.responsibility = responsibility; + obj.spec_comment = specComment; + obj.spec_marker = specMarker; + obj.groups = groups; + if (!obj.create()) { + return AnnexMeta(); + } + return AnnexMeta(obj); +} + +AnnexMeta AnnexMeta::create(const QVariantMap &values) +{ + AnnexMeta model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +AnnexMeta AnnexMeta::get(int id) +{ + TSqlORMapper mapper; + return AnnexMeta(mapper.findByPrimaryKey(id)); +} + +int AnnexMeta::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList AnnexMeta::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray AnnexMeta::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(AnnexMeta(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *AnnexMeta::modelData() +{ + return d.data(); +} + +const TModelObject *AnnexMeta::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const AnnexMeta &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, AnnexMeta &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(AnnexMeta) diff --git a/models/annexmeta.h b/models/annexmeta.h new file mode 100644 index 0000000..33ca4e8 --- /dev/null +++ b/models/annexmeta.h @@ -0,0 +1,74 @@ +#ifndef ANNEXMETA_H +#define ANNEXMETA_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class AnnexMetaObject; +class QJsonArray; + + +class T_MODEL_EXPORT AnnexMeta : public TAbstractModel +{ +public: + AnnexMeta(); + AnnexMeta(const AnnexMeta &other); + AnnexMeta(const AnnexMetaObject &object); + ~AnnexMeta(); + + int id() const; + int specDataId() const; + void setSpecDataId(int specDataId); + QDateTime specCreated() const; + void setSpecCreated(const QDateTime &specCreated); + QDateTime specLastModified() const; + void setSpecLastModified(const QDateTime &specLastModified); + QDateTime specValidStart() const; + void setSpecValidStart(const QDateTime &specValidStart); + QDateTime specValidEnd() const; + void setSpecValidEnd(const QDateTime &specValidEnd); + QString lastEditor() const; + void setLastEditor(const QString &lastEditor); + QString gLegacy() const; + void setGLegacy(const QString &gLegacy); + QString responsibility() const; + void setResponsibility(const QString &responsibility); + QString specComment() const; + void setSpecComment(const QString &specComment); + QString specMarker() const; + void setSpecMarker(const QString &specMarker); + QString groups() const; + void setGroups(const QString &groups); + AnnexMeta &operator=(const AnnexMeta &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static AnnexMeta create(int specDataId, const QDateTime &specCreated, const QDateTime &specLastModified, const QDateTime &specValidStart, const QDateTime &specValidEnd, const QString &lastEditor, const QString &gLegacy, const QString &responsibility, const QString &specComment, const QString &specMarker, const QString &groups); + static AnnexMeta create(const QVariantMap &values); + static AnnexMeta get(int id); + static AnnexMeta getBySpecDataId(int spec_data_id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const AnnexMeta &model); + friend QDataStream &operator>>(QDataStream &ds, AnnexMeta &model); +}; + +Q_DECLARE_METATYPE(AnnexMeta) +Q_DECLARE_METATYPE(QList) + +#endif // ANNEXMETA_H diff --git a/models/annexmetawaste.cpp b/models/annexmetawaste.cpp new file mode 100644 index 0000000..a04f522 --- /dev/null +++ b/models/annexmetawaste.cpp @@ -0,0 +1,257 @@ +#include +#include "annexmetawaste.h" +#include "sqlobjects/annexmetawasteobject.h" + +AnnexMetaWaste::AnnexMetaWaste() : + TAbstractModel(), + d(new AnnexMetaWasteObject()) +{ + // set the initial parameters +} + +AnnexMetaWaste::AnnexMetaWaste(const AnnexMetaWaste &other) : + TAbstractModel(), + d(other.d) +{ } + +AnnexMetaWaste::AnnexMetaWaste(const AnnexMetaWasteObject &object) : + TAbstractModel(), + d(new AnnexMetaWasteObject(object)) +{ } + +AnnexMetaWaste::~AnnexMetaWaste() +{ + // If the reference count becomes 0, + // the shared data object 'AnnexMetaWasteObject' is deleted. +} + +int AnnexMetaWaste::id() const +{ + return d->id; +} + +QDateTime AnnexMetaWaste::changedOn() const +{ + return d->changed_on; +} + +void AnnexMetaWaste::setChangedOn(const QDateTime &changedOn) +{ + d->changed_on = changedOn; +} + +int AnnexMetaWaste::idOld() const +{ + return d->id_old; +} + +void AnnexMetaWaste::setIdOld(int idOld) +{ + d->id_old = idOld; +} + +int AnnexMetaWaste::specDataId() const +{ + return d->spec_data_id; +} + +void AnnexMetaWaste::setSpecDataId(int specDataId) +{ + d->spec_data_id = specDataId; +} + +QDateTime AnnexMetaWaste::specCreated() const +{ + return d->spec_created; +} + +void AnnexMetaWaste::setSpecCreated(const QDateTime &specCreated) +{ + d->spec_created = specCreated; +} + +QDateTime AnnexMetaWaste::specLastModified() const +{ + return d->spec_last_modified; +} + +void AnnexMetaWaste::setSpecLastModified(const QDateTime &specLastModified) +{ + d->spec_last_modified = specLastModified; +} + +QDateTime AnnexMetaWaste::specValidStart() const +{ + return d->spec_valid_start; +} + +void AnnexMetaWaste::setSpecValidStart(const QDateTime &specValidStart) +{ + d->spec_valid_start = specValidStart; +} + +QDateTime AnnexMetaWaste::specValidEnd() const +{ + return d->spec_valid_end; +} + +void AnnexMetaWaste::setSpecValidEnd(const QDateTime &specValidEnd) +{ + d->spec_valid_end = specValidEnd; +} + +QString AnnexMetaWaste::lastEditor() const +{ + return d->last_editor; +} + +void AnnexMetaWaste::setLastEditor(const QString &lastEditor) +{ + d->last_editor = lastEditor; +} + +QString AnnexMetaWaste::gLegacy() const +{ + return d->g_legacy; +} + +void AnnexMetaWaste::setGLegacy(const QString &gLegacy) +{ + d->g_legacy = gLegacy; +} + +QString AnnexMetaWaste::responsibility() const +{ + return d->responsibility; +} + +void AnnexMetaWaste::setResponsibility(const QString &responsibility) +{ + d->responsibility = responsibility; +} + +QString AnnexMetaWaste::specComment() const +{ + return d->spec_comment; +} + +void AnnexMetaWaste::setSpecComment(const QString &specComment) +{ + d->spec_comment = specComment; +} + +QString AnnexMetaWaste::specMarker() const +{ + return d->spec_marker; +} + +void AnnexMetaWaste::setSpecMarker(const QString &specMarker) +{ + d->spec_marker = specMarker; +} + +QString AnnexMetaWaste::groups() const +{ + return d->groups; +} + +void AnnexMetaWaste::setGroups(const QString &groups) +{ + d->groups = groups; +} + +AnnexMetaWaste &AnnexMetaWaste::operator=(const AnnexMetaWaste &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +AnnexMetaWaste AnnexMetaWaste::create(const QDateTime &changedOn, int idOld, int specDataId, const QDateTime &specCreated, const QDateTime &specLastModified, const QDateTime &specValidStart, const QDateTime &specValidEnd, const QString &lastEditor, const QString &gLegacy, const QString &responsibility, const QString &specComment, const QString &specMarker, const QString &groups) +{ + AnnexMetaWasteObject obj; + obj.changed_on = changedOn; + obj.id_old = idOld; + obj.spec_data_id = specDataId; + obj.spec_created = specCreated; + obj.spec_last_modified = specLastModified; + obj.spec_valid_start = specValidStart; + obj.spec_valid_end = specValidEnd; + obj.last_editor = lastEditor; + obj.g_legacy = gLegacy; + obj.responsibility = responsibility; + obj.spec_comment = specComment; + obj.spec_marker = specMarker; + obj.groups = groups; + if (!obj.create()) { + return AnnexMetaWaste(); + } + return AnnexMetaWaste(obj); +} + +AnnexMetaWaste AnnexMetaWaste::create(const QVariantMap &values) +{ + AnnexMetaWaste model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +AnnexMetaWaste AnnexMetaWaste::get(int id) +{ + TSqlORMapper mapper; + return AnnexMetaWaste(mapper.findByPrimaryKey(id)); +} + +int AnnexMetaWaste::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList AnnexMetaWaste::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray AnnexMetaWaste::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(AnnexMetaWaste(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *AnnexMetaWaste::modelData() +{ + return d.data(); +} + +const TModelObject *AnnexMetaWaste::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const AnnexMetaWaste &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, AnnexMetaWaste &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(AnnexMetaWaste) diff --git a/models/annexmetawaste.h b/models/annexmetawaste.h new file mode 100644 index 0000000..3f818fa --- /dev/null +++ b/models/annexmetawaste.h @@ -0,0 +1,77 @@ +#ifndef ANNEXMETAWASTE_H +#define ANNEXMETAWASTE_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class AnnexMetaWasteObject; +class QJsonArray; + + +class T_MODEL_EXPORT AnnexMetaWaste : public TAbstractModel +{ +public: + AnnexMetaWaste(); + AnnexMetaWaste(const AnnexMetaWaste &other); + AnnexMetaWaste(const AnnexMetaWasteObject &object); + ~AnnexMetaWaste(); + + int id() const; + QDateTime changedOn() const; + void setChangedOn(const QDateTime &changedOn); + int idOld() const; + void setIdOld(int idOld); + int specDataId() const; + void setSpecDataId(int specDataId); + QDateTime specCreated() const; + void setSpecCreated(const QDateTime &specCreated); + QDateTime specLastModified() const; + void setSpecLastModified(const QDateTime &specLastModified); + QDateTime specValidStart() const; + void setSpecValidStart(const QDateTime &specValidStart); + QDateTime specValidEnd() const; + void setSpecValidEnd(const QDateTime &specValidEnd); + QString lastEditor() const; + void setLastEditor(const QString &lastEditor); + QString gLegacy() const; + void setGLegacy(const QString &gLegacy); + QString responsibility() const; + void setResponsibility(const QString &responsibility); + QString specComment() const; + void setSpecComment(const QString &specComment); + QString specMarker() const; + void setSpecMarker(const QString &specMarker); + QString groups() const; + void setGroups(const QString &groups); + AnnexMetaWaste &operator=(const AnnexMetaWaste &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static AnnexMetaWaste create(const QDateTime &changedOn, int idOld, int specDataId, const QDateTime &specCreated, const QDateTime &specLastModified, const QDateTime &specValidStart, const QDateTime &specValidEnd, const QString &lastEditor, const QString &gLegacy, const QString &responsibility, const QString &specComment, const QString &specMarker, const QString &groups); + static AnnexMetaWaste create(const QVariantMap &values); + static AnnexMetaWaste get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const AnnexMetaWaste &model); + friend QDataStream &operator>>(QDataStream &ds, AnnexMetaWaste &model); +}; + +Q_DECLARE_METATYPE(AnnexMetaWaste) +Q_DECLARE_METATYPE(QList) + +#endif // ANNEXMETAWASTE_H diff --git a/models/appvars.cpp b/models/appvars.cpp new file mode 100644 index 0000000..aa94cdf --- /dev/null +++ b/models/appvars.cpp @@ -0,0 +1,169 @@ +#include +#include "appvars.h" +#include "sqlobjects/appvarsobject.h" + +AppVars::AppVars() : + TAbstractModel(), + d(new AppVarsObject()) +{ + // set the initial parameters +} + +AppVars::AppVars(const AppVars &other) : + TAbstractModel(), + d(other.d) +{ } + +AppVars::AppVars(const AppVarsObject &object) : + TAbstractModel(), + d(new AppVarsObject(object)) +{ } + +AppVars::~AppVars() +{ + // If the reference count becomes 0, + // the shared data object 'AppVarsObject' is deleted. +} + +int AppVars::id() const +{ + return d->id; +} + +QString AppVars::stdType() const +{ + return d->std_type; +} + +void AppVars::setStdType(const QString &stdType) +{ + d->std_type = stdType; +} + +QString AppVars::stdAttr() const +{ + return d->std_attr; +} + +void AppVars::setStdAttr(const QString &stdAttr) +{ + d->std_attr = stdAttr; +} + +QString AppVars::stdValDe() const +{ + return d->std_val_de; +} + +void AppVars::setStdValDe(const QString &stdValDe) +{ + d->std_val_de = stdValDe; +} + +QString AppVars::stdValEn() const +{ + return d->std_val_en; +} + +void AppVars::setStdValEn(const QString &stdValEn) +{ + d->std_val_en = stdValEn; +} + +int AppVars::active() const +{ + return d->active; +} + +void AppVars::setActive(int active) +{ + d->active = active; +} + +AppVars &AppVars::operator=(const AppVars &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +AppVars AppVars::create(const QString &stdType, const QString &stdAttr, const QString &stdValDe, const QString &stdValEn, int active) +{ + AppVarsObject obj; + obj.std_type = stdType; + obj.std_attr = stdAttr; + obj.std_val_de = stdValDe; + obj.std_val_en = stdValEn; + obj.active = active; + if (!obj.create()) { + return AppVars(); + } + return AppVars(obj); +} + +AppVars AppVars::create(const QVariantMap &values) +{ + AppVars model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +AppVars AppVars::get(int id) +{ + TSqlORMapper mapper; + return AppVars(mapper.findByPrimaryKey(id)); +} + +int AppVars::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList AppVars::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray AppVars::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(AppVars(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *AppVars::modelData() +{ + return d.data(); +} + +const TModelObject *AppVars::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const AppVars &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, AppVars &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(AppVars) diff --git a/models/appvars.h b/models/appvars.h new file mode 100644 index 0000000..e5624a8 --- /dev/null +++ b/models/appvars.h @@ -0,0 +1,61 @@ +#ifndef APPVARS_H +#define APPVARS_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class AppVarsObject; +class QJsonArray; + + +class T_MODEL_EXPORT AppVars : public TAbstractModel +{ +public: + AppVars(); + AppVars(const AppVars &other); + AppVars(const AppVarsObject &object); + ~AppVars(); + + int id() const; + QString stdType() const; + void setStdType(const QString &stdType); + QString stdAttr() const; + void setStdAttr(const QString &stdAttr); + QString stdValDe() const; + void setStdValDe(const QString &stdValDe); + QString stdValEn() const; + void setStdValEn(const QString &stdValEn); + int active() const; + void setActive(int active); + AppVars &operator=(const AppVars &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static AppVars create(const QString &stdType, const QString &stdAttr, const QString &stdValDe, const QString &stdValEn, int active); + static AppVars create(const QVariantMap &values); + static AppVars get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const AppVars &model); + friend QDataStream &operator>>(QDataStream &ds, AppVars &model); +}; + +Q_DECLARE_METATYPE(AppVars) +Q_DECLARE_METATYPE(QList) + +#endif // APPVARS_H diff --git a/models/catclasses.cpp b/models/catclasses.cpp new file mode 100644 index 0000000..bfa8f8e --- /dev/null +++ b/models/catclasses.cpp @@ -0,0 +1,314 @@ +#include +#include "catclasses.h" +#include "sqlobjects/catclassesobject.h" + +CatClasses::CatClasses() : + TAbstractModel(), + d(new CatClassesObject()) +{ + // set the initial parameters +} + +CatClasses::CatClasses(const CatClasses &other) : + TAbstractModel(), + d(other.d) +{ } + +CatClasses::CatClasses(const CatClassesObject &object) : + TAbstractModel(), + d(new CatClassesObject(object)) +{ } + +CatClasses::~CatClasses() +{ + // If the reference count becomes 0, + // the shared data object 'CatClassesObject' is deleted. +} + +// ##### + +QJsonArray CatClasses::getAllJson(const QString &active, const QString &class_type, const QString strGroups) +{ + + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + QString andStr = strGroups; + + query.prepare("SELECT * FROM cat_classes WHERE active = ? AND class_type = ? and " + andStr + " order by sort"); + //query.prepare("SELECT * FROM cat_classes WHERE active = '1' AND class_type = 'category' and " + andStr + " order by sort"); + //query.bindValue(":active", active); + query.addBindValue(active); + //query.bindValue(":class_type", class_type); + query.addBindValue(class_type); + //query.addBindValue(andStr); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["sys_msg"] = msg; + jsonObject["sys_err"] = "1"; + jsonArray.append(jsonObject); + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["cat_lname_de"] = query.value(1).toString(); + jsonObject["cat_sname_de"] = query.value(2).toString(); + jsonObject["desc_de"] = query.value(3).toString(); + jsonObject["cat_lname_en"] = query.value(4).toString(); + jsonObject["cat_sname_en"] = query.value(5).toString(); + jsonObject["desc_en"] = query.value(6).toString(); + jsonObject["class_type"] = query.value(7).toString(); + jsonObject["groups"] = query.value(8).toString(); + jsonObject["sort"] = query.value(9).toString(); + jsonObject["active"] = query.value(10).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray CatClasses::getAllJson(const QString &active, const QString &class_type) +{ + + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT * FROM cat_classes WHERE active = ? AND class_type = ? order by sort"); + query.addBindValue(active); + query.addBindValue(class_type); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["sys_msg"] = msg; + jsonObject["sys_err"] = "1"; + jsonArray.append(jsonObject); + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["cat_lname_de"] = query.value(1).toString(); + jsonObject["cat_sname_de"] = query.value(2).toString(); + jsonObject["desc_de"] = query.value(3).toString(); + jsonObject["cat_lname_en"] = query.value(4).toString(); + jsonObject["cat_sname_en"] = query.value(5).toString(); + jsonObject["desc_en"] = query.value(6).toString(); + jsonObject["class_type"] = query.value(7).toString(); + jsonObject["groups"] = query.value(8).toString(); + jsonObject["sort"] = query.value(9).toString(); + jsonObject["active"] = query.value(10).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +int CatClasses::id() const +{ + return d->id; +} + +QString CatClasses::catLnameDe() const +{ + return d->cat_lname_de; +} + +void CatClasses::setCatLnameDe(const QString &catLnameDe) +{ + d->cat_lname_de = catLnameDe; +} + +QString CatClasses::catSnameDe() const +{ + return d->cat_sname_de; +} + +void CatClasses::setCatSnameDe(const QString &catSnameDe) +{ + d->cat_sname_de = catSnameDe; +} + +QString CatClasses::descDe() const +{ + return d->desc_de; +} + +void CatClasses::setDescDe(const QString &descDe) +{ + d->desc_de = descDe; +} + +QString CatClasses::catLnameEn() const +{ + return d->cat_lname_en; +} + +void CatClasses::setCatLnameEn(const QString &catLnameEn) +{ + d->cat_lname_en = catLnameEn; +} + +QString CatClasses::catSnameEn() const +{ + return d->cat_sname_en; +} + +void CatClasses::setCatSnameEn(const QString &catSnameEn) +{ + d->cat_sname_en = catSnameEn; +} + +QString CatClasses::descEn() const +{ + return d->desc_en; +} + +void CatClasses::setDescEn(const QString &descEn) +{ + d->desc_en = descEn; +} + +QString CatClasses::classType() const +{ + return d->class_type; +} + +void CatClasses::setClassType(const QString &classType) +{ + d->class_type = classType; +} + +QString CatClasses::groups() const +{ + return d->groups; +} + +void CatClasses::setGroups(const QString &groups) +{ + d->groups = groups; +} + +int CatClasses::sort() const +{ + return d->sort; +} + +void CatClasses::setSort(int sort) +{ + d->sort = sort; +} + +int CatClasses::active() const +{ + return d->active; +} + +void CatClasses::setActive(int active) +{ + d->active = active; +} + +CatClasses &CatClasses::operator=(const CatClasses &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +CatClasses CatClasses::create(const QString &catLnameDe, const QString &catSnameDe, const QString &descDe, const QString &catLnameEn, const QString &catSnameEn, const QString &descEn, const QString &classType, const QString &groups, int sort, int active) +{ + CatClassesObject obj; + obj.cat_lname_de = catLnameDe; + obj.cat_sname_de = catSnameDe; + obj.desc_de = descDe; + obj.cat_lname_en = catLnameEn; + obj.cat_sname_en = catSnameEn; + obj.desc_en = descEn; + obj.class_type = classType; + obj.groups = groups; + obj.sort = sort; + obj.active = active; + if (!obj.create()) { + return CatClasses(); + } + return CatClasses(obj); +} + +CatClasses CatClasses::create(const QVariantMap &values) +{ + CatClasses model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +CatClasses CatClasses::get(int id) +{ + TSqlORMapper mapper; + return CatClasses(mapper.findByPrimaryKey(id)); +} + +int CatClasses::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList CatClasses::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray CatClasses::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(CatClasses(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *CatClasses::modelData() +{ + return d.data(); +} + +const TModelObject *CatClasses::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const CatClasses &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, CatClasses &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(CatClasses) diff --git a/models/catclasses.h b/models/catclasses.h new file mode 100644 index 0000000..d1cd1a9 --- /dev/null +++ b/models/catclasses.h @@ -0,0 +1,74 @@ +#ifndef CATCLASSES_H +#define CATCLASSES_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class CatClassesObject; +class QJsonArray; + + +class T_MODEL_EXPORT CatClasses : public TAbstractModel +{ +public: + CatClasses(); + CatClasses(const CatClasses &other); + CatClasses(const CatClassesObject &object); + ~CatClasses(); + + int id() const; + QString catLnameDe() const; + void setCatLnameDe(const QString &catLnameDe); + QString catSnameDe() const; + void setCatSnameDe(const QString &catSnameDe); + QString descDe() const; + void setDescDe(const QString &descDe); + QString catLnameEn() const; + void setCatLnameEn(const QString &catLnameEn); + QString catSnameEn() const; + void setCatSnameEn(const QString &catSnameEn); + QString descEn() const; + void setDescEn(const QString &descEn); + QString classType() const; + void setClassType(const QString &classType); + QString groups() const; + void setGroups(const QString &groups); + int sort() const; + void setSort(int sort); + int active() const; + void setActive(int active); + CatClasses &operator=(const CatClasses &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static CatClasses create(const QString &catLnameDe, const QString &catSnameDe, const QString &descDe, const QString &catLnameEn, const QString &catSnameEn, const QString &descEn, const QString &classType, const QString &groups, int sort, int active); + static CatClasses create(const QVariantMap &values); + static CatClasses get(int id); + static int count(); + + static QList getAll(); + static QJsonArray getAllJson(); + static QJsonArray getAllJson(const QString &active, const QString &class_type); + static QJsonArray getAllJson(const QString &active, const QString &class_type, const QString strGroups); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const CatClasses &model); + friend QDataStream &operator>>(QDataStream &ds, CatClasses &model); +}; + +Q_DECLARE_METATYPE(CatClasses) +Q_DECLARE_METATYPE(QList) + +#endif // CATCLASSES_H diff --git a/models/glossar.cpp b/models/glossar.cpp new file mode 100644 index 0000000..04f8c60 --- /dev/null +++ b/models/glossar.cpp @@ -0,0 +1,240 @@ +#include +#include "glossar.h" +#include "sqlobjects/glossarobject.h" + +Glossar::Glossar() : + TAbstractModel(), + d(new GlossarObject()) +{ + // set the initial parameters +} + +Glossar::Glossar(const Glossar &other) : + TAbstractModel(), + d(other.d) +{ } + +Glossar::Glossar(const GlossarObject &object) : + TAbstractModel(), + d(new GlossarObject(object)) +{ } + +Glossar::~Glossar() +{ + // If the reference count becomes 0, + // the shared data object 'GlossarObject' is deleted. +} + +// ##### + +QMap Glossar::getStatistics() +{ + TSqlQuery query; + QMap qmapStat; + + // count + query.prepare("SELECT count(id) FROM glossar"); + query.exec(); + query.next(); + qmapStat["glossar_count"] = query.value(0).toString(); + + // active + query.prepare("select count(term_de) from glossar where term_de != ''"); + query.exec(); + query.next(); + qmapStat["de_terms"] = query.value(0).toString(); + + // countries + query.prepare("select count(term_en) from glossar where term_en != ''"); + query.exec(); + query.next(); + qmapStat["en_terms"] = query.value(0).toString(); + + return qmapStat; +} + +int Glossar::id() const +{ + return d->id; +} + +QString Glossar::acronym() const +{ + return d->acronym; +} + +void Glossar::setAcronym(const QString &acronym) +{ + d->acronym = acronym; +} + +QString Glossar::termDe() const +{ + return d->term_de; +} + +void Glossar::setTermDe(const QString &termDe) +{ + d->term_de = termDe; +} + +QString Glossar::termEn() const +{ + return d->term_en; +} + +void Glossar::setTermEn(const QString &termEn) +{ + d->term_en = termEn; +} + +QString Glossar::descDe() const +{ + return d->desc_de; +} + +void Glossar::setDescDe(const QString &descDe) +{ + d->desc_de = descDe; +} + +QString Glossar::descEn() const +{ + return d->desc_en; +} + +void Glossar::setDescEn(const QString &descEn) +{ + d->desc_en = descEn; +} + +int Glossar::sort() const +{ + return d->sort; +} + +void Glossar::setSort(int sort) +{ + d->sort = sort; +} + +int Glossar::active() const +{ + return d->active; +} + +void Glossar::setActive(int active) +{ + d->active = active; +} + +Glossar &Glossar::operator=(const Glossar &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +Glossar Glossar::create(const QString &acronym, const QString &termDe, const QString &termEn, const QString &descDe, const QString &descEn, int sort, int active) +{ + GlossarObject obj; + obj.acronym = acronym; + obj.term_de = termDe; + obj.term_en = termEn; + obj.desc_de = descDe; + obj.desc_en = descEn; + obj.sort = sort; + obj.active = active; + if (!obj.create()) { + return Glossar(); + } + return Glossar(obj); +} + +Glossar Glossar::create(const QVariantMap &values) +{ + Glossar model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +Glossar Glossar::get(int id) +{ + TSqlORMapper mapper; + return Glossar(mapper.findByPrimaryKey(id)); +} + +int Glossar::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList Glossar::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray Glossar::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(Glossar(i.next()).toVariantMap()))); + } + } + return array; +} + +QJsonArray Glossar::getAllJsonSorted() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + + query.prepare("SELECT acronym, term_de, term_en, desc_de, desc_en FROM public.glossar ORDER BY acronym"); + query.exec(); + while (query.next()) + { + jsonObject["acronym"] = query.value(0).toString(); + jsonObject["termDe"] = query.value(1).toString(); + jsonObject["termEn"] = query.value(2).toString(); + jsonObject["descDe"] = query.value(3).toString(); + jsonObject["descEn"] = query.value(4).toString(); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +TModelObject *Glossar::modelData() +{ + return d.data(); +} + +const TModelObject *Glossar::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const Glossar &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, Glossar &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(Glossar) diff --git a/models/glossar.h b/models/glossar.h new file mode 100644 index 0000000..0722fcf --- /dev/null +++ b/models/glossar.h @@ -0,0 +1,68 @@ +#ifndef GLOSSAR_H +#define GLOSSAR_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class GlossarObject; +class QJsonArray; + + +class T_MODEL_EXPORT Glossar : public TAbstractModel +{ +public: + Glossar(); + Glossar(const Glossar &other); + Glossar(const GlossarObject &object); + ~Glossar(); + + int id() const; + QString acronym() const; + void setAcronym(const QString &acronym); + QString termDe() const; + void setTermDe(const QString &termDe); + QString termEn() const; + void setTermEn(const QString &termEn); + QString descDe() const; + void setDescDe(const QString &descDe); + QString descEn() const; + void setDescEn(const QString &descEn); + int sort() const; + void setSort(int sort); + int active() const; + void setActive(int active); + Glossar &operator=(const Glossar &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static Glossar create(const QString &acronym, const QString &termDe, const QString &termEn, const QString &descDe, const QString &descEn, int sort, int active); + static Glossar create(const QVariantMap &values); + static Glossar get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + static QJsonArray getAllJsonSorted(); + + static QMap getStatistics(); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const Glossar &model); + friend QDataStream &operator>>(QDataStream &ds, Glossar &model); +}; + +Q_DECLARE_METATYPE(Glossar) +Q_DECLARE_METATYPE(QList) + +#endif // GLOSSAR_H diff --git a/models/itisgroups.cpp b/models/itisgroups.cpp new file mode 100644 index 0000000..8773219 --- /dev/null +++ b/models/itisgroups.cpp @@ -0,0 +1,149 @@ +#include +#include "itisgroups.h" +#include "sqlobjects/itisgroupsobject.h" + +ItisGroups::ItisGroups() : + TAbstractModel(), + d(new ItisGroupsObject()) +{ + // set the initial parameters +} + +ItisGroups::ItisGroups(const ItisGroups &other) : + TAbstractModel(), + d(other.d) +{ } + +ItisGroups::ItisGroups(const ItisGroupsObject &object) : + TAbstractModel(), + d(new ItisGroupsObject(object)) +{ } + +ItisGroups::~ItisGroups() +{ + // If the reference count becomes 0, + // the shared data object 'ItisGroupsObject' is deleted. +} + +// ##### + +int ItisGroups::id() const +{ + return d->id; +} + +QString ItisGroups::groupname() const +{ + return d->groupname; +} + +void ItisGroups::setGroupname(const QString &groupname) +{ + d->groupname = groupname; +} + +QString ItisGroups::groupdesc() const +{ + return d->groupdesc; +} + +void ItisGroups::setGroupdesc(const QString &groupdesc) +{ + d->groupdesc = groupdesc; +} + +int ItisGroups::active() const +{ + return d->active; +} + +void ItisGroups::setActive(int active) +{ + d->active = active; +} + +ItisGroups &ItisGroups::operator=(const ItisGroups &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +ItisGroups ItisGroups::create(const QString &groupname, const QString &groupdesc, int active) +{ + ItisGroupsObject obj; + obj.groupname = groupname; + obj.groupdesc = groupdesc; + obj.active = active; + if (!obj.create()) { + return ItisGroups(); + } + return ItisGroups(obj); +} + +ItisGroups ItisGroups::create(const QVariantMap &values) +{ + ItisGroups model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +ItisGroups ItisGroups::get(int id) +{ + TSqlORMapper mapper; + return ItisGroups(mapper.findByPrimaryKey(id)); +} + +int ItisGroups::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList ItisGroups::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray ItisGroups::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(ItisGroups(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *ItisGroups::modelData() +{ + return d.data(); +} + +const TModelObject *ItisGroups::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const ItisGroups &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, ItisGroups &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(ItisGroups) diff --git a/models/itisgroups.h b/models/itisgroups.h new file mode 100644 index 0000000..ffec157 --- /dev/null +++ b/models/itisgroups.h @@ -0,0 +1,57 @@ +#ifndef ITISGROUPS_H +#define ITISGROUPS_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class ItisGroupsObject; +class QJsonArray; + + +class T_MODEL_EXPORT ItisGroups : public TAbstractModel +{ +public: + ItisGroups(); + ItisGroups(const ItisGroups &other); + ItisGroups(const ItisGroupsObject &object); + ~ItisGroups(); + + int id() const; + QString groupname() const; + void setGroupname(const QString &groupname); + QString groupdesc() const; + void setGroupdesc(const QString &groupdesc); + int active() const; + void setActive(int active); + ItisGroups &operator=(const ItisGroups &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static ItisGroups create(const QString &groupname, const QString &groupdesc, int active); + static ItisGroups create(const QVariantMap &values); + static ItisGroups get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const ItisGroups &model); + friend QDataStream &operator>>(QDataStream &ds, ItisGroups &model); +}; + +Q_DECLARE_METATYPE(ItisGroups) +Q_DECLARE_METATYPE(QList) + +#endif // ITISGROUPS_H diff --git a/models/itisnews.cpp b/models/itisnews.cpp new file mode 100644 index 0000000..29bf0ba --- /dev/null +++ b/models/itisnews.cpp @@ -0,0 +1,257 @@ +#include +#include "itisnews.h" +#include "sqlobjects/itisnewsobject.h" + +ItisNews::ItisNews() : + TAbstractModel(), + d(new ItisNewsObject()) +{ + // set the initial parameters +} + +ItisNews::ItisNews(const ItisNews &other) : + TAbstractModel(), + d(other.d) +{ } + +ItisNews::ItisNews(const ItisNewsObject &object) : + TAbstractModel(), + d(new ItisNewsObject(object)) +{ } + +ItisNews::~ItisNews() +{ + // If the reference count becomes 0, + // the shared data object 'ItisNewsObject' is deleted. +} + +int ItisNews::id() const +{ + return d->id; +} + +QString ItisNews::newsType() const +{ + return d->news_type; +} + +void ItisNews::setNewsType(const QString &newsType) +{ + d->news_type = newsType; +} + +QString ItisNews::newsTypeSub() const +{ + return d->news_type_sub; +} + +void ItisNews::setNewsTypeSub(const QString &newsTypeSub) +{ + d->news_type_sub = newsTypeSub; +} + +QString ItisNews::newsTitleDe() const +{ + return d->news_title_de; +} + +void ItisNews::setNewsTitleDe(const QString &newsTitleDe) +{ + d->news_title_de = newsTitleDe; +} + +QString ItisNews::newsTitleEn() const +{ + return d->news_title_en; +} + +void ItisNews::setNewsTitleEn(const QString &newsTitleEn) +{ + d->news_title_en = newsTitleEn; +} + +QString ItisNews::newsDescDe() const +{ + return d->news_desc_de; +} + +void ItisNews::setNewsDescDe(const QString &newsDescDe) +{ + d->news_desc_de = newsDescDe; +} + +QString ItisNews::newsDescEn() const +{ + return d->news_desc_en; +} + +void ItisNews::setNewsDescEn(const QString &newsDescEn) +{ + d->news_desc_en = newsDescEn; +} + +QString ItisNews::newsTextDe() const +{ + return d->news_text_de; +} + +void ItisNews::setNewsTextDe(const QString &newsTextDe) +{ + d->news_text_de = newsTextDe; +} + +QString ItisNews::newsTextEn() const +{ + return d->news_text_en; +} + +void ItisNews::setNewsTextEn(const QString &newsTextEn) +{ + d->news_text_en = newsTextEn; +} + +QString ItisNews::newsPrio() const +{ + return d->news_prio; +} + +void ItisNews::setNewsPrio(const QString &newsPrio) +{ + d->news_prio = newsPrio; +} + +QString ItisNews::author() const +{ + return d->author; +} + +void ItisNews::setAuthor(const QString &author) +{ + d->author = author; +} + +QDateTime ItisNews::newsCreated() const +{ + return d->news_created; +} + +void ItisNews::setNewsCreated(const QDateTime &newsCreated) +{ + d->news_created = newsCreated; +} + +QDateTime ItisNews::newsValidStart() const +{ + return d->news_valid_start; +} + +void ItisNews::setNewsValidStart(const QDateTime &newsValidStart) +{ + d->news_valid_start = newsValidStart; +} + +QDateTime ItisNews::newsValidEnd() const +{ + return d->news_valid_end; +} + +void ItisNews::setNewsValidEnd(const QDateTime &newsValidEnd) +{ + d->news_valid_end = newsValidEnd; +} + +ItisNews &ItisNews::operator=(const ItisNews &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +ItisNews ItisNews::create(const QString &newsType, const QString &newsTypeSub, const QString &newsTitleDe, const QString &newsTitleEn, const QString &newsDescDe, const QString &newsDescEn, const QString &newsTextDe, const QString &newsTextEn, const QString &newsPrio, const QString &author, const QDateTime &newsCreated, const QDateTime &newsValidStart, const QDateTime &newsValidEnd) +{ + ItisNewsObject obj; + obj.news_type = newsType; + obj.news_type_sub = newsTypeSub; + obj.news_title_de = newsTitleDe; + obj.news_title_en = newsTitleEn; + obj.news_desc_de = newsDescDe; + obj.news_desc_en = newsDescEn; + obj.news_text_de = newsTextDe; + obj.news_text_en = newsTextEn; + obj.news_prio = newsPrio; + obj.author = author; + obj.news_created = newsCreated; + obj.news_valid_start = newsValidStart; + obj.news_valid_end = newsValidEnd; + if (!obj.create()) { + return ItisNews(); + } + return ItisNews(obj); +} + +ItisNews ItisNews::create(const QVariantMap &values) +{ + ItisNews model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +ItisNews ItisNews::get(int id) +{ + TSqlORMapper mapper; + return ItisNews(mapper.findByPrimaryKey(id)); +} + +int ItisNews::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList ItisNews::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray ItisNews::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(ItisNews(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *ItisNews::modelData() +{ + return d.data(); +} + +const TModelObject *ItisNews::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const ItisNews &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, ItisNews &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(ItisNews) diff --git a/models/itisnews.h b/models/itisnews.h new file mode 100644 index 0000000..dfb8e20 --- /dev/null +++ b/models/itisnews.h @@ -0,0 +1,77 @@ +#ifndef ITISNEWS_H +#define ITISNEWS_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class ItisNewsObject; +class QJsonArray; + + +class T_MODEL_EXPORT ItisNews : public TAbstractModel +{ +public: + ItisNews(); + ItisNews(const ItisNews &other); + ItisNews(const ItisNewsObject &object); + ~ItisNews(); + + int id() const; + QString newsType() const; + void setNewsType(const QString &newsType); + QString newsTypeSub() const; + void setNewsTypeSub(const QString &newsTypeSub); + QString newsTitleDe() const; + void setNewsTitleDe(const QString &newsTitleDe); + QString newsTitleEn() const; + void setNewsTitleEn(const QString &newsTitleEn); + QString newsDescDe() const; + void setNewsDescDe(const QString &newsDescDe); + QString newsDescEn() const; + void setNewsDescEn(const QString &newsDescEn); + QString newsTextDe() const; + void setNewsTextDe(const QString &newsTextDe); + QString newsTextEn() const; + void setNewsTextEn(const QString &newsTextEn); + QString newsPrio() const; + void setNewsPrio(const QString &newsPrio); + QString author() const; + void setAuthor(const QString &author); + QDateTime newsCreated() const; + void setNewsCreated(const QDateTime &newsCreated); + QDateTime newsValidStart() const; + void setNewsValidStart(const QDateTime &newsValidStart); + QDateTime newsValidEnd() const; + void setNewsValidEnd(const QDateTime &newsValidEnd); + ItisNews &operator=(const ItisNews &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static ItisNews create(const QString &newsType, const QString &newsTypeSub, const QString &newsTitleDe, const QString &newsTitleEn, const QString &newsDescDe, const QString &newsDescEn, const QString &newsTextDe, const QString &newsTextEn, const QString &newsPrio, const QString &author, const QDateTime &newsCreated, const QDateTime &newsValidStart, const QDateTime &newsValidEnd); + static ItisNews create(const QVariantMap &values); + static ItisNews get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const ItisNews &model); + friend QDataStream &operator>>(QDataStream &ds, ItisNews &model); +}; + +Q_DECLARE_METATYPE(ItisNews) +Q_DECLARE_METATYPE(QList) + +#endif // ITISNEWS_H diff --git a/models/itisuser.cpp b/models/itisuser.cpp new file mode 100644 index 0000000..32f23c4 --- /dev/null +++ b/models/itisuser.cpp @@ -0,0 +1,498 @@ +#include +#include "itisuser.h" +#include "sqlobjects/itisuserobject.h" + +ItisUser::ItisUser() : + TAbstractUser(), + TAbstractModel(), + d(new ItisUserObject()) +{ + // set the initial parameters +} + +ItisUser::ItisUser(const ItisUser &other) : + TAbstractUser(), + TAbstractModel(), + d(other.d) +{ } + +ItisUser::ItisUser(const ItisUserObject &object) : + TAbstractUser(), + TAbstractModel(), + d(new ItisUserObject(object)) +{ } + + +ItisUser::~ItisUser() +{ + // If the reference count becomes 0, + // the shared data object 'ItisUserObject' is deleted. +} + +// ##### + +QJsonArray ItisUser::setUserNewsCfg(const QString &username, const QString &newsletter) +{ + TSqlQuery query; + QString msg; + QJsonObject jsonObj; + QJsonArray jsonArray; + + query.prepare("UPDATE public.itis_user SET newsletter=(:news) WHERE username=(:username)"); + query.bindValue(":news", newsletter); + query.bindValue(":username",username); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + tError("setUserPwd " + msg.toUtf8()); + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Newsletter config modified"; + } + + jsonArray.append(jsonObj); + return jsonArray; +} + +QString ItisUser::getUserNewsCfg(const QString &username) +{ + TSqlQuery query; + + query.prepare("SELECT newsletter FROM public.itis_user WHERE username=(:username)"); + query.bindValue(":username",username); + query.exec(); + query.next(); + + return query.value(0).toString(); +} + +QJsonArray ItisUser::setUserPwd(const QString &username, const QString pwd) +{ + TSqlQuery query; + QString msg; + QJsonObject jsonObj; + QJsonArray jsonArray; + + tInfo("setUserPwd " + username.toUtf8()); + QByteArray hash = QCryptographicHash::hash(pwd.toLocal8Bit(), QCryptographicHash::Sha256); + + query.prepare("UPDATE public.itis_user SET password=(:pwd), pwd_changed_time=(:pwd_changed_time), pwd_change_force = 0 WHERE username=(:username)"); + query.bindValue(":pwd", hash); + query.bindValue(":pwd_changed_time",QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")); + query.bindValue(":username",username); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + tError("setUserPwd " + msg.toUtf8()); + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Passwort aktualisiert"; + } + + jsonArray.append(jsonObj); + return jsonArray; +} + +QString ItisUser::sqlGroups(QString strGroups, QString crud) +{ + strGroups.replace("{", ""); + strGroups.replace("}", ""); + QStringList groups = strGroups.split(","); + + QString andStr; + + int i = 0; + do + { + if(i == 0) + { + andStr.append("(array_to_string(groups, ',') like '%" + groups[i] + ":%" + crud + "%'"); + } + else + { + andStr.append(" OR array_to_string(groups, ',') like '%" + groups[i] + ":%" + crud + "%'"); + } + i++; + }while(i < groups.size()); + andStr.append(")"); + + return andStr; +} + +QString ItisUser::sqlGroups(QString strGroups) +{ + strGroups.replace("{", ""); + strGroups.replace("}", ""); + QStringList groups = strGroups.split(","); + + QString andStr; + + int i = 0; + do + { + if(i == 0) + { + andStr.append("('" + groups[i] + "' = ANY (groups)"); + } + else + { + andStr.append(" OR '" + groups[i] + "' = ANY (groups)"); + } + i++; + }while(i < groups.size()); + andStr.append(")"); + + return andStr; +} + +/*! + * \brief ItisUser::isInGroup + * \param userGroups + * \param group + * \return bool + * Description: ckecks if the given group is included in groups + * Example: bool isgroupmember = ItisUser::isInGroup(user.groups(), group); + * Example: bool groupmember = ItisUser::isInGroup("{ALL,BMW,Portal-Admin}", "VW"); + */ +bool ItisUser::isInGroup(const QString &userGroups, const QString &group) +{ + QString user_groups = userGroups; + user_groups.replace("{", "").replace("}", ""); + QStringList groups = user_groups.split(","); + + //auto conti = TActionController::name(); auto con = TActionController::activeAction(); + + return groups.contains(group, Qt::CaseInsensitive); +} + +bool ItisUser::isInGroups(const QString &userGroups, const QString &groups) +{ + QString user_groups = userGroups; + user_groups.replace("{", "").replace("}", ""); + QStringList usergroups = user_groups.split(","); + + QString right_groups = groups; + right_groups.replace("{", "").replace("}", ""); + QStringList rightgroups = right_groups.split(","); + + for(int i = 0; i < rightgroups.size(); i++) + { + return usergroups.contains(rightgroups[i], Qt::CaseInsensitive); + } + return false; +} + +ItisUser ItisUser::getByIdentityKey(const QString &username) +{ + TSqlORMapper mapper; + TCriteria cri(ItisUserObject::Username, username); + return ItisUser(mapper.findFirst(cri)); +} + +int ItisUser::id() const +{ + return d->id; +} + +QString ItisUser::username() const +{ + return d->username; +} + +void ItisUser::setUsername(const QString &username) +{ + d->username = username; +} + +QString ItisUser::firstname() const +{ + return d->firstname; +} + +void ItisUser::setFirstname(const QString &firstname) +{ + d->firstname = firstname; +} + +QString ItisUser::surname() const +{ + return d->surname; +} + +void ItisUser::setSurname(const QString &surname) +{ + d->surname = surname; +} + +QString ItisUser::email() const +{ + return d->email; +} + +void ItisUser::setEmail(const QString &email) +{ + d->email = email; +} + +QString ItisUser::company() const +{ + return d->company; +} + +void ItisUser::setCompany(const QString &company) +{ + d->company = company; +} + +QString ItisUser::userTimezone() const +{ + return d->user_timezone; +} + +void ItisUser::setUserTimezone(const QString &userTimezone) +{ + d->user_timezone = userTimezone; +} + +QString ItisUser::groupname() const +{ + return d->groupname; +} + +void ItisUser::setGroupname(const QString &groupname) +{ + d->groupname = groupname; +} + +QString ItisUser::groups() const +{ + return d->groups; +} + +void ItisUser::setGroups(const QString &groups) +{ + d->groups = groups; +} + +QByteArray ItisUser::password() const +{ + return d->password; +} + +void ItisUser::setPassword(const QByteArray &password) +{ + d->password = password; +} + +QDateTime ItisUser::lastLogin() const +{ + return d->last_login; +} + +void ItisUser::setLastLogin(const QDateTime &lastLogin) +{ + d->last_login = lastLogin; +} + +QDateTime ItisUser::loginTime() const +{ + return d->login_time; +} + +void ItisUser::setLoginTime(const QDateTime &loginTime) +{ + TSqlQuery query; + + query.prepare("SELECT login_time from itis_user where username=(:user)"); + query.bindValue(":user",d->username); + + query.exec(); + query.next(); + QString last_login = query.value(0).toString(); + + query.prepare("UPDATE itis_user SET last_login=(:lastlogin), login_time=(:logintime) WHERE username=(:user)"); + query.bindValue(":lastlogin", last_login); + query.bindValue(":user", d->username); + query.bindValue(":logintime", loginTime); + + query.exec(); + + d->login_time = loginTime; +} + +QDateTime ItisUser::loggedOut() const +{ + return d->logged_out; +} + +void ItisUser::setLoggedOut(const QDateTime &loggedOut) +{ + TSqlQuery query; + + query.prepare("UPDATE itis_user SET logged_out=(:outime) WHERE username=(:user)"); + query.bindValue(":outime", QDateTime::currentDateTime()); + query.bindValue(":user", d->username); + + query.exec(); + + d->logged_out = loggedOut; +} + +QDateTime ItisUser::pwdChangedTime() const +{ + return d->pwd_changed_time; +} + +void ItisUser::setPwdChangedTime(const QDateTime &pwdChangedTime) +{ + d->pwd_changed_time = pwdChangedTime; +} + +int ItisUser::pwdChangeForce() const +{ + return d->pwd_change_force; +} + +void ItisUser::setPwdChangeForce(int pwdChangeForce) +{ + d->pwd_change_force = pwdChangeForce; +} + +int ItisUser::active() const +{ + return d->active; +} + +void ItisUser::setActive(int active) +{ + d->active = active; +} + +ItisUser &ItisUser::operator=(const ItisUser &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +ItisUser ItisUser::authenticate(const QString &username, const QString &password) +{ + if (username.isEmpty() || password.isEmpty()) + return ItisUser(); + + TSqlORMapper mapper; + ItisUserObject obj = mapper.findFirst(TCriteria(ItisUserObject::Username, username)); + if (obj.isNull() || obj.password != password) { + obj.clear(); + } + return ItisUser(obj); +} + +ItisUser ItisUser::create(const QString &username, const QString &firstname, const QString &surname, const QString &email, const QString &company, const QString &userTimezone, const QString &groupname, const QString &groups, const QString &pwd, const QDateTime &lastLogin, const QDateTime &loginTime, const QDateTime &loggedOut, const QDateTime &pwdChangedTime, int pwdChangeForce, int active) +{ + QByteArray hash = QCryptographicHash::hash(pwd.toLocal8Bit(), QCryptographicHash::Sha256); + + ItisUserObject obj; + obj.username = username; + obj.firstname = firstname; + obj.surname = surname; + obj.email = email; + obj.company = company; + obj.user_timezone = userTimezone; + obj.groupname = groupname; + obj.groups = groups; + obj.password = hash; + obj.last_login = lastLogin; + obj.login_time = loginTime; + obj.logged_out = loggedOut; + obj.pwd_changed_time = pwdChangedTime; + obj.pwd_change_force = pwdChangeForce; + obj.active = active; + if (!obj.create()) { + return ItisUser(); + } + return ItisUser(obj); +} + +ItisUser ItisUser::create(const QVariantMap &values) +{ + QString pwd = values.value("password").toString(); + QByteArray hash = QCryptographicHash::hash(pwd.toLocal8Bit(), QCryptographicHash::Sha256); + + ItisUser model; + model.setProperties(values); + + model.setPassword(hash); + + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +ItisUser ItisUser::get(int id) +{ + TSqlORMapper mapper; + return ItisUser(mapper.findByPrimaryKey(id)); +} + +int ItisUser::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList ItisUser::getAll() +{ + return tfGetModelListByCriteria(); +} + +QJsonArray ItisUser::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(ItisUser(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *ItisUser::modelData() +{ + return d.data(); +} + +const TModelObject *ItisUser::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const ItisUser &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, ItisUser &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(ItisUser) diff --git a/models/itisuser.h b/models/itisuser.h new file mode 100644 index 0000000..1ba9f50 --- /dev/null +++ b/models/itisuser.h @@ -0,0 +1,95 @@ +#ifndef ITISUSER_H +#define ITISUSER_H + +#include +#include +#include +#include +#include +#include +#include + +class TModelObject; +class ItisUserObject; +class QJsonArray; + + +class T_MODEL_EXPORT ItisUser : public TAbstractUser, public TAbstractModel +{ +public: + ItisUser(); + ItisUser(const ItisUser &other); + ItisUser(const ItisUserObject &object); + ~ItisUser(); + + int id() const; + QString username() const; + void setUsername(const QString &username); + QString firstname() const; + void setFirstname(const QString &firstname); + QString surname() const; + void setSurname(const QString &surname); + QString email() const; + void setEmail(const QString &email); + QString company() const; + void setCompany(const QString &company); + QString userTimezone() const; + void setUserTimezone(const QString &userTimezone); + QString groupname() const; + void setGroupname(const QString &groupname); + QString groups() const; + void setGroups(const QString &groups); + QByteArray password() const; + void setPassword(const QByteArray &password); + QDateTime lastLogin() const; + void setLastLogin(const QDateTime &lastLogin); + QDateTime loginTime() const; + void setLoginTime(const QDateTime &loginTime); + QDateTime loggedOut() const; + void setLoggedOut(const QDateTime &loggedOut); + QDateTime pwdChangedTime() const; + void setPwdChangedTime(const QDateTime &pwdChangedTime); + int pwdChangeForce() const; + void setPwdChangeForce(int pwdChangeForce); + int active() const; + void setActive(int active); + QString identityKey() const { return username(); } + ItisUser &operator=(const ItisUser &other); + + bool create() { return TAbstractModel::create(); } + bool update() { return TAbstractModel::update(); } + bool save() { return TAbstractModel::save(); } + bool remove() { return TAbstractModel::remove(); } + + static bool isInGroup(const QString &usergroups, const QString &group); + static bool isInGroups(const QString &usergroups, const QString &groups); + static QString sqlGroups(QString strGroups); + static QString sqlGroups(QString strGroups, QString crud); + + static ItisUser authenticate(const QString &username, const QString &password); + static ItisUser create(const QString &username, const QString &firstname, const QString &surname, const QString &email, const QString &company, const QString &userTimezone, const QString &groupname, const QString &groups, const QString &password, const QDateTime &lastLogin, const QDateTime &loginTime, const QDateTime &loggedOut, const QDateTime &pwdChangedTime, int pwdChangeForce, int active); + static ItisUser create(const QVariantMap &values); + static ItisUser get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + + static ItisUser getByIdentityKey(const QString &username); + + static QJsonArray setUserPwd(const QString &username, const QString pwd); + static QJsonArray setUserNewsCfg(const QString &username, const QString &newsletter); + static QString getUserNewsCfg(const QString &username); + +private: + QSharedDataPointer d; + + TModelObject *modelData(); + const TModelObject *modelData() const; + friend QDataStream &operator<<(QDataStream &ds, const ItisUser &model); + friend QDataStream &operator>>(QDataStream &ds, ItisUser &model); +}; + +Q_DECLARE_METATYPE(ItisUser) +Q_DECLARE_METATYPE(QList) + +#endif // ITISUSER_H diff --git a/models/lenkinfo.cpp b/models/lenkinfo.cpp new file mode 100644 index 0000000..8917dea --- /dev/null +++ b/models/lenkinfo.cpp @@ -0,0 +1,382 @@ +#include +#include "lenkinfo.h" +#include "sqlobjects/lenkinfoobject.h" + +#include "stdsystem.h" + +Lenkinfo::Lenkinfo() : + TAbstractModel(), + d(new LenkinfoObject()) +{ + // set the initial parameters +} + +Lenkinfo::Lenkinfo(const Lenkinfo &other) : + TAbstractModel(), + d(other.d) +{ } + +Lenkinfo::Lenkinfo(const LenkinfoObject &object) : + TAbstractModel(), + d(new LenkinfoObject(object)) +{ } + +Lenkinfo::~Lenkinfo() +{ + // If the reference count becomes 0, + // the shared data object 'LenkinfoObject' is deleted. +} + +// ##### + +/* +QString Lenkinfo::getLastLenkStatus(QMap &stdDataMap) +{ + TSqlQuery query; + QString lenkinfo; + + query.prepare("SELECT lenk_status WHERE spec_obj = ? AND ac_class = ? AND pc_class = ? AND country = ? AND lang = ? ORDER BY lenk_valid_startdate DESC LIMIT 1"); + query.addBindValue(stdDataMap["spec_obj"]); + query.addBindValue(stdDataMap["ac_class"]); + query.addBindValue(stdDataMap["pc_class"]); + query.addBindValue(stdDataMap["country"]); + query.addBindValue(stdDataMap["lang"]); + + query.exec(); + query.next(); + + return query.value(0).toString(); +} +*/ + +QJsonArray Lenkinfo::getJson(QMap &stdDataMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + int counter = 0; + + query.prepare("SELECT id, spec_obj, spec_title, ac_class, pc_class, country, lang, lenk_version, lenk_status, lenk_valid_startdate, lenk_departments, lenk_content, lenk_creator, lenk_creator_date, lenk_auditor, lenk_auditor_date, lenk_approver, lenk_approver_date FROM public.lenkinfo WHERE spec_obj = ? AND ac_class = ? AND pc_class = ? AND country = ? AND lang = ? ORDER BY lenk_valid_startdate"); + query.addBindValue(stdDataMap["spec_obj"]); + query.addBindValue(stdDataMap["ac_class"]); + query.addBindValue(stdDataMap["pc_class"]); + query.addBindValue(stdDataMap["country"]); + query.addBindValue(stdDataMap["lang"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + jsonObject["counter"] = QString::number(counter++); + jsonObject["id"] = query.value(0).toString(); + jsonObject["spec_obj"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["ac_class"] = query.value(3).toString(); + jsonObject["pc_class"] = query.value(4).toString(); + jsonObject["country"] = query.value(5).toString(); + jsonObject["lang"] = query.value(6).toString(); + jsonObject["lenk_version"] = query.value(7).toString(); + jsonObject["lenk_status"] = query.value(8).toString(); + jsonObject["lenk_valid_startdate"] = query.value(9).toString(); + jsonObject["lenk_departments"] = query.value(10).toString(); + jsonObject["lenk_content"] = query.value(11).toString(); + jsonObject["lenk_creator"] = query.value(12).toString(); + + // jsonObject["lenk_creator_date"] = query.value(13).toString(); + //QDate buildtime = query.value(13).toDate(); + //jsonObject["lenk_creator_date"] = buildtime.toString("yyyy-MM-dd"); + jsonObject["lenk_creator_date"] = StdSystem::convertDate( query.value(13).toDate() ); + + jsonObject["lenk_auditor"] = query.value(14).toString(); + jsonObject["lenk_auditor_date"] = StdSystem::convertDate( query.value(15).toDate() ); + jsonObject["lenk_approver"] = query.value(16).toString(); + jsonObject["lenk_approver_date"] = StdSystem::convertDate( query.value(17).toDate() ); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +int Lenkinfo::id() const +{ + return d->id; +} + +QString Lenkinfo::specObj() const +{ + return d->spec_obj; +} + +void Lenkinfo::setSpecObj(const QString &specObj) +{ + d->spec_obj = specObj; +} + +QString Lenkinfo::specTitle() const +{ + return d->spec_title; +} + +void Lenkinfo::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +int Lenkinfo::acClass() const +{ + return d->ac_class; +} + +void Lenkinfo::setAcClass(int acClass) +{ + d->ac_class = acClass; +} + +int Lenkinfo::pcClass() const +{ + return d->pc_class; +} + +void Lenkinfo::setPcClass(int pcClass) +{ + d->pc_class = pcClass; +} + +QString Lenkinfo::country() const +{ + return d->country; +} + +void Lenkinfo::setCountry(const QString &country) +{ + d->country = country; +} + +QString Lenkinfo::lang() const +{ + return d->lang; +} + +void Lenkinfo::setLang(const QString &lang) +{ + d->lang = lang; +} + +QString Lenkinfo::lenkVersion() const +{ + return d->lenk_version; +} + +void Lenkinfo::setLenkVersion(const QString &lenkVersion) +{ + d->lenk_version = lenkVersion; +} + +QString Lenkinfo::lenkStatus() const +{ + return d->lenk_status; +} + +void Lenkinfo::setLenkStatus(const QString &lenkStatus) +{ + d->lenk_status = lenkStatus; +} + +QDateTime Lenkinfo::lenkValidStartdate() const +{ + return d->lenk_valid_startdate; +} + +void Lenkinfo::setLenkValidStartdate(const QDateTime &lenkValidStartdate) +{ + d->lenk_valid_startdate = lenkValidStartdate; +} + +QString Lenkinfo::lenkDepartments() const +{ + return d->lenk_departments; +} + +void Lenkinfo::setLenkDepartments(const QString &lenkDepartments) +{ + d->lenk_departments = lenkDepartments; +} + +QString Lenkinfo::lenkContent() const +{ + return d->lenk_content; +} + +void Lenkinfo::setLenkContent(const QString &lenkContent) +{ + d->lenk_content = lenkContent; +} + +QString Lenkinfo::lenkCreator() const +{ + return d->lenk_creator; +} + +void Lenkinfo::setLenkCreator(const QString &lenkCreator) +{ + d->lenk_creator = lenkCreator; +} + +QDateTime Lenkinfo::lenkCreatorDate() const +{ + return d->lenk_creator_date; +} + +void Lenkinfo::setLenkCreatorDate(const QDateTime &lenkCreatorDate) +{ + d->lenk_creator_date = lenkCreatorDate; +} + +QString Lenkinfo::lenkAuditor() const +{ + return d->lenk_auditor; +} + +void Lenkinfo::setLenkAuditor(const QString &lenkAuditor) +{ + d->lenk_auditor = lenkAuditor; +} + +QDateTime Lenkinfo::lenkAuditorDate() const +{ + return d->lenk_auditor_date; +} + +void Lenkinfo::setLenkAuditorDate(const QDateTime &lenkAuditorDate) +{ + d->lenk_auditor_date = lenkAuditorDate; +} + +QString Lenkinfo::lenkApprover() const +{ + return d->lenk_approver; +} + +void Lenkinfo::setLenkApprover(const QString &lenkApprover) +{ + d->lenk_approver = lenkApprover; +} + +QDateTime Lenkinfo::lenkApproverDate() const +{ + return d->lenk_approver_date; +} + +void Lenkinfo::setLenkApproverDate(const QDateTime &lenkApproverDate) +{ + d->lenk_approver_date = lenkApproverDate; +} + +Lenkinfo &Lenkinfo::operator=(const Lenkinfo &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +Lenkinfo Lenkinfo::create(const QString &specObj, const QString &specTitle, int acClass, int pcClass, const QString &country, const QString &lang, const QString &lenkVersion, const QString &lenkStatus, const QDateTime &lenkValidStartdate, const QString &lenkDepartments, const QString &lenkContent, const QString &lenkCreator, const QDateTime &lenkCreatorDate, const QString &lenkAuditor, const QDateTime &lenkAuditorDate, const QString &lenkApprover, const QDateTime &lenkApproverDate) +{ + LenkinfoObject obj; + obj.spec_obj = specObj; + obj.spec_title = specTitle; + obj.ac_class = acClass; + obj.pc_class = pcClass; + obj.country = country; + obj.lang = lang; + obj.lenk_version = lenkVersion; + obj.lenk_status = lenkStatus; + obj.lenk_valid_startdate = lenkValidStartdate; + obj.lenk_departments = lenkDepartments; + obj.lenk_content = lenkContent; + obj.lenk_creator = lenkCreator; + obj.lenk_creator_date = lenkCreatorDate; + obj.lenk_auditor = lenkAuditor; + obj.lenk_auditor_date = lenkAuditorDate; + obj.lenk_approver = lenkApprover; + obj.lenk_approver_date = lenkApproverDate; + if (!obj.create()) { + return Lenkinfo(); + } + return Lenkinfo(obj); +} + +Lenkinfo Lenkinfo::create(const QVariantMap &values) +{ + Lenkinfo model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +Lenkinfo Lenkinfo::get(int id) +{ + TSqlORMapper mapper; + return Lenkinfo(mapper.findByPrimaryKey(id)); +} + +int Lenkinfo::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList Lenkinfo::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray Lenkinfo::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(Lenkinfo(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *Lenkinfo::modelData() +{ + return d.data(); +} + +const TModelObject *Lenkinfo::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const Lenkinfo &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, Lenkinfo &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(Lenkinfo) diff --git a/models/lenkinfo.h b/models/lenkinfo.h new file mode 100644 index 0000000..26ab70c --- /dev/null +++ b/models/lenkinfo.h @@ -0,0 +1,87 @@ +#ifndef LENKINFO_H +#define LENKINFO_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class LenkinfoObject; +class QJsonArray; + + +class T_MODEL_EXPORT Lenkinfo : public TAbstractModel +{ +public: + Lenkinfo(); + Lenkinfo(const Lenkinfo &other); + Lenkinfo(const LenkinfoObject &object); + ~Lenkinfo(); + + int id() const; + QString specObj() const; + void setSpecObj(const QString &specObj); + QString specTitle() const; + void setSpecTitle(const QString &specTitle); + int acClass() const; + void setAcClass(int acClass); + int pcClass() const; + void setPcClass(int pcClass); + QString country() const; + void setCountry(const QString &country); + QString lang() const; + void setLang(const QString &lang); + QString lenkVersion() const; + void setLenkVersion(const QString &lenkVersion); + QString lenkStatus() const; + void setLenkStatus(const QString &lenkStatus); + QDateTime lenkValidStartdate() const; + void setLenkValidStartdate(const QDateTime &lenkValidStartdate); + QString lenkDepartments() const; + void setLenkDepartments(const QString &lenkDepartments); + QString lenkContent() const; + void setLenkContent(const QString &lenkContent); + QString lenkCreator() const; + void setLenkCreator(const QString &lenkCreator); + QDateTime lenkCreatorDate() const; + void setLenkCreatorDate(const QDateTime &lenkCreatorDate); + QString lenkAuditor() const; + void setLenkAuditor(const QString &lenkAuditor); + QDateTime lenkAuditorDate() const; + void setLenkAuditorDate(const QDateTime &lenkAuditorDate); + QString lenkApprover() const; + void setLenkApprover(const QString &lenkApprover); + QDateTime lenkApproverDate() const; + void setLenkApproverDate(const QDateTime &lenkApproverDate); + Lenkinfo &operator=(const Lenkinfo &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static Lenkinfo create(const QString &specObj, const QString &specTitle, int acClass, int pcClass, const QString &country, const QString &lang, const QString &lenkVersion, const QString &lenkStatus, const QDateTime &lenkValidStartdate, const QString &lenkDepartments, const QString &lenkContent, const QString &lenkCreator, const QDateTime &lenkCreatorDate, const QString &lenkAuditor, const QDateTime &lenkAuditorDate, const QString &lenkApprover, const QDateTime &lenkApproverDate); + static Lenkinfo create(const QVariantMap &values); + static Lenkinfo get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + static QJsonArray getJson(QMap &stdDataMap); + + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const Lenkinfo &model); + friend QDataStream &operator>>(QDataStream &ds, Lenkinfo &model); +}; + +Q_DECLARE_METATYPE(Lenkinfo) +Q_DECLARE_METATYPE(QList) + +#endif // LENKINFO_H diff --git a/models/models.pro b/models/models.pro new file mode 100644 index 0000000..ce24c98 --- /dev/null +++ b/models/models.pro @@ -0,0 +1,89 @@ +TARGET = model +TEMPLATE = lib +CONFIG += shared c++14 x86_64 +QT += sql qml +QT -= gui +DEFINES += TF_DLL +DESTDIR = ../lib +INCLUDEPATH += ../helpers +DEPENDPATH += ../helpers +LIBS += -L../lib -lhelper +MOC_DIR = .obj/ +OBJECTS_DIR = .obj/ + +include(../appbase.pri) +HEADERS += sqlobjects/standardsdataobject.h +HEADERS += standardsdata.h +SOURCES += standardsdata.cpp +HEADERS += sqlobjects/standardsmetaobject.h +HEADERS += standardsmeta.h +SOURCES += standardsmeta.cpp +HEADERS += sqlobjects/stdsystemobject.h +HEADERS += stdsystem.h +SOURCES += stdsystem.cpp +HEADERS += sqlobjects/webmenuobject.h +HEADERS += webmenu.h +SOURCES += webmenu.cpp +HEADERS += sqlobjects/itisuserobject.h +HEADERS += itisuser.h +SOURCES += itisuser.cpp +HEADERS += sqlobjects/objectsobject.h +HEADERS += objects.h +SOURCES += objects.cpp +HEADERS += sqlobjects/catclassesobject.h +HEADERS += catclasses.h +SOURCES += catclasses.cpp +HEADERS += sqlobjects/acclassesobject.h +HEADERS += acclasses.h +SOURCES += acclasses.cpp +HEADERS += sqlobjects/pcclassesobject.h +HEADERS += pcclasses.h +SOURCES += pcclasses.cpp +HEADERS += sqlobjects/standardsdatawasteobject.h +HEADERS += standardsdatawaste.h +SOURCES += standardsdatawaste.cpp +HEADERS += sqlobjects/standardsmetawasteobject.h +HEADERS += standardsmetawaste.h +SOURCES += standardsmetawaste.cpp +HEADERS += sqlobjects/annexdataobject.h +HEADERS += annexdata.h +SOURCES += annexdata.cpp +HEADERS += sqlobjects/annexmetaobject.h +HEADERS += annexmeta.h +SOURCES += annexmeta.cpp +HEADERS += sqlobjects/annexdatawasteobject.h +HEADERS += annexdatawaste.h +SOURCES += annexdatawaste.cpp +HEADERS += sqlobjects/annexmetawasteobject.h +HEADERS += annexmetawaste.h +SOURCES += annexmetawaste.cpp +HEADERS += sqlobjects/glossarobject.h +HEADERS += glossar.h +SOURCES += glossar.cpp +HEADERS += sqlobjects/standardsdatacommentsobject.h +HEADERS += standardsdatacomments.h +SOURCES += standardsdatacomments.cpp +HEADERS += sqlobjects/appvarsobject.h +HEADERS += appvars.h +SOURCES += appvars.cpp +HEADERS += sqlobjects/itisnewsobject.h +HEADERS += itisnews.h +SOURCES += itisnews.cpp +HEADERS += sqlobjects/actionrightsobject.h +HEADERS += actionrights.h +SOURCES += actionrights.cpp +HEADERS += sqlobjects/itisgroupsobject.h +HEADERS += itisgroups.h +SOURCES += itisgroups.cpp +HEADERS += sqlobjects/annexdatacommentsobject.h +HEADERS += annexdatacomments.h +SOURCES += annexdatacomments.cpp +HEADERS += sqlobjects/releasemgmtobject.h +HEADERS += releasemgmt.h +SOURCES += releasemgmt.cpp +HEADERS += sqlobjects/releaseannexobject.h +HEADERS += releaseannex.h +SOURCES += releaseannex.cpp +HEADERS += sqlobjects/lenkinfoobject.h +HEADERS += lenkinfo.h +SOURCES += lenkinfo.cpp diff --git a/models/objects.cpp b/models/objects.cpp new file mode 100644 index 0000000..55ef75c --- /dev/null +++ b/models/objects.cpp @@ -0,0 +1,283 @@ +#include +#include "objects.h" +#include "sqlobjects/objectsobject.h" + +Objects::Objects() : + TAbstractModel(), + d(new ObjectsObject()) +{ + // set the initial parameters +} + +Objects::Objects(const Objects &other) : + TAbstractModel(), + d(other.d) +{ } + +Objects::Objects(const ObjectsObject &object) : + TAbstractModel(), + d(new ObjectsObject(object)) +{ } + +Objects::~Objects() +{ + // If the reference count becomes 0, + // the shared data object 'ObjectsObject' is deleted. +} + +// ##### + +int Objects::id() const +{ + return d->id; +} + +QString Objects::objSname() const +{ + return d->obj_sname; +} + +void Objects::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString Objects::objLnameDe() const +{ + return d->obj_lname_de; +} + +void Objects::setObjLnameDe(const QString &objLnameDe) +{ + d->obj_lname_de = objLnameDe; +} + +QString Objects::descDe() const +{ + return d->desc_de; +} + +void Objects::setDescDe(const QString &descDe) +{ + d->desc_de = descDe; +} + +QString Objects::objLnameEn() const +{ + return d->obj_lname_en; +} + +void Objects::setObjLnameEn(const QString &objLnameEn) +{ + d->obj_lname_en = objLnameEn; +} + +QString Objects::descEn() const +{ + return d->desc_en; +} + +void Objects::setDescEn(const QString &descEn) +{ + d->desc_en = descEn; +} + +int Objects::sort() const +{ + return d->sort; +} + +void Objects::setSort(int sort) +{ + d->sort = sort; +} + +int Objects::active() const +{ + return d->active; +} + +void Objects::setActive(int active) +{ + d->active = active; +} + +QString Objects::groups() const +{ + return d->groups; +} + +void Objects::setGroups(const QString &groups) +{ + d->groups = groups; +} + +Objects &Objects::operator=(const Objects &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +Objects Objects::create(const QString &objSname, const QString &objLnameDe, const QString &descDe, const QString &objLnameEn, const QString &descEn, int sort, int active, const QString &groups) +{ + ObjectsObject obj; + obj.obj_sname = objSname; + obj.obj_lname_de = objLnameDe; + obj.desc_de = descDe; + obj.obj_lname_en = objLnameEn; + obj.desc_en = descEn; + obj.sort = sort; + obj.active = active; + obj.groups = groups; + if (!obj.create()) { + return Objects(); + } + return Objects(obj); +} + +Objects Objects::create(const QVariantMap &values) +{ + Objects model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +Objects Objects::get(int id) +{ + TSqlORMapper mapper; + return Objects(mapper.findByPrimaryKey(id)); +} + +int Objects::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList Objects::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray Objects::getAllJson(const QString &active, const QString strGroups) +{ + + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + QString andStr = strGroups; + + //id, obj_sname, obj_lname_de, desc_de, obj_lname_en, desc_en, sort, active + //query.prepare("SELECT * FROM objects where active = ? order by sort"); + query.prepare("SELECT * FROM objects where " + andStr + " AND active = '1' order by sort"); + //query.addBindValue(active); + query.addBindValue(andStr); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["sys_msg"] = msg; + jsonObject["sys_err"] = "1"; + jsonArray.append(jsonObject); + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["obj_lname_de"] = query.value(2).toString(); + jsonObject["desc_de"] = query.value(3).toString(); + jsonObject["obj_lname_en"] = query.value(4).toString(); + jsonObject["desc_en"] = query.value(5).toString(); + jsonObject["sort"] = query.value(6).toString(); + jsonObject["active"] = query.value(7).toString(); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray Objects::getAllJson(const QString &active) +{ + + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + + //id, obj_sname, obj_lname_de, desc_de, obj_lname_en, desc_en, sort, active + query.prepare("SELECT * FROM objects where active = ? order by sort"); + query.addBindValue(active); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["sys_msg"] = msg; + jsonObject["sys_err"] = "1"; + jsonArray.append(jsonObject); + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["obj_lname_de"] = query.value(2).toString(); + jsonObject["desc_de"] = query.value(3).toString(); + jsonObject["obj_lname_en"] = query.value(4).toString(); + jsonObject["desc_en"] = query.value(5).toString(); + jsonObject["sort"] = query.value(6).toString(); + jsonObject["active"] = query.value(7).toString(); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray Objects::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(Objects(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *Objects::modelData() +{ + return d.data(); +} + +const TModelObject *Objects::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const Objects &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, Objects &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(Objects) diff --git a/models/objects.h b/models/objects.h new file mode 100644 index 0000000..d248527 --- /dev/null +++ b/models/objects.h @@ -0,0 +1,69 @@ +#ifndef OBJECTS_H +#define OBJECTS_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class ObjectsObject; +class QJsonArray; + + +class T_MODEL_EXPORT Objects : public TAbstractModel +{ +public: + Objects(); + Objects(const Objects &other); + Objects(const ObjectsObject &object); + ~Objects(); + + int id() const; + QString objSname() const; + void setObjSname(const QString &objSname); + QString objLnameDe() const; + void setObjLnameDe(const QString &objLnameDe); + QString descDe() const; + void setDescDe(const QString &descDe); + QString objLnameEn() const; + void setObjLnameEn(const QString &objLnameEn); + QString descEn() const; + void setDescEn(const QString &descEn); + int sort() const; + void setSort(int sort); + int active() const; + void setActive(int active); + QString groups() const; + void setGroups(const QString &groups); + Objects &operator=(const Objects &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static Objects create(const QString &objSname, const QString &objLnameDe, const QString &descDe, const QString &objLnameEn, const QString &descEn, int sort, int active, const QString &groups); + static Objects create(const QVariantMap &values); + static Objects get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + static QJsonArray getAllJson(const QString &active); + static QJsonArray getAllJson(const QString &active, const QString strGroups); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const Objects &model); + friend QDataStream &operator>>(QDataStream &ds, Objects &model); +}; + +Q_DECLARE_METATYPE(Objects) +Q_DECLARE_METATYPE(QList) + +#endif // OBJECTS_H diff --git a/models/pcclasses.cpp b/models/pcclasses.cpp new file mode 100644 index 0000000..4277da8 --- /dev/null +++ b/models/pcclasses.cpp @@ -0,0 +1,222 @@ +#include +#include "pcclasses.h" +#include "sqlobjects/pcclassesobject.h" + +PcClasses::PcClasses() : + TAbstractModel(), + d(new PcClassesObject()) +{ + // set the initial parameters +} + +PcClasses::PcClasses(const PcClasses &other) : + TAbstractModel(), + d(other.d) +{ } + +PcClasses::PcClasses(const PcClassesObject &object) : + TAbstractModel(), + d(new PcClassesObject(object)) +{ } + +PcClasses::~PcClasses() +{ + // If the reference count becomes 0, + // the shared data object 'PcClassesObject' is deleted. +} + +// ##### + +QJsonArray PcClasses::getObjPcJson(QString &obj, int &active) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, obj_sname, pc_class, active FROM public.pc_classes WHERE obj_sname = ? AND active = ? order by pc_class"); + query.addBindValue(obj); + query.addBindValue(active); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["pc_class"] = query.value(2).toString(); + jsonObject["active"] = query.value(3).toString(); + jsonArray.append(jsonObject); + } + jsonObject = QJsonObject(); + jsonObject["ERROR"] = "0"; + jsonArray.append(jsonObject); + + return jsonArray; +} + +QJsonArray PcClasses::getPcClassesJson() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT distinct(pc_class) FROM public.pc_classes order by pc_class;"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["sys_msg"] = msg; + jsonObject["sys_err"] = "1"; + jsonArray.append(jsonObject); + return jsonArray; + } + + while (query.next()) + { + jsonObject["pc_class"] = query.value(0).toString(); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +int PcClasses::id() const +{ + return d->id; +} + +QString PcClasses::objSname() const +{ + return d->obj_sname; +} + +void PcClasses::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +int PcClasses::pcClass() const +{ + return d->pc_class; +} + +void PcClasses::setPcClass(int pcClass) +{ + d->pc_class = pcClass; +} + +QString PcClasses::classType() const +{ + return d->class_type; +} + +void PcClasses::setClassType(const QString &classType) +{ + d->class_type = classType; +} + +int PcClasses::active() const +{ + return d->active; +} + +void PcClasses::setActive(int active) +{ + d->active = active; +} + +PcClasses &PcClasses::operator=(const PcClasses &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +PcClasses PcClasses::create(const QString &objSname, int pcClass, const QString &classType, int active) +{ + PcClassesObject obj; + obj.obj_sname = objSname; + obj.pc_class = pcClass; + obj.class_type = classType; + obj.active = active; + if (!obj.create()) { + return PcClasses(); + } + return PcClasses(obj); +} + +PcClasses PcClasses::create(const QVariantMap &values) +{ + PcClasses model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +PcClasses PcClasses::get(int id) +{ + TSqlORMapper mapper; + return PcClasses(mapper.findByPrimaryKey(id)); +} + +int PcClasses::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList PcClasses::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray PcClasses::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(PcClasses(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *PcClasses::modelData() +{ + return d.data(); +} + +const TModelObject *PcClasses::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const PcClasses &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, PcClasses &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(PcClasses) diff --git a/models/pcclasses.h b/models/pcclasses.h new file mode 100644 index 0000000..4f5d4a1 --- /dev/null +++ b/models/pcclasses.h @@ -0,0 +1,62 @@ +#ifndef PCCLASSES_H +#define PCCLASSES_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class PcClassesObject; +class QJsonArray; + + +class T_MODEL_EXPORT PcClasses : public TAbstractModel +{ +public: + PcClasses(); + PcClasses(const PcClasses &other); + PcClasses(const PcClassesObject &object); + ~PcClasses(); + + int id() const; + QString objSname() const; + void setObjSname(const QString &objSname); + int pcClass() const; + void setPcClass(int pcClass); + QString classType() const; + void setClassType(const QString &classType); + int active() const; + void setActive(int active); + PcClasses &operator=(const PcClasses &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static PcClasses create(const QString &objSname, int pcClass, const QString &classType, int active); + static PcClasses create(const QVariantMap &values); + static PcClasses get(int id); + static int count(); + + static QList getAll(); + static QJsonArray getAllJson(); + static QJsonArray getPcClassesJson(); + static QJsonArray getObjPcJson(QString &obj, int &active); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const PcClasses &model); + friend QDataStream &operator>>(QDataStream &ds, PcClasses &model); +}; + +Q_DECLARE_METATYPE(PcClasses) +Q_DECLARE_METATYPE(QList) + +#endif // PCCLASSES_H diff --git a/models/releaseannex.cpp b/models/releaseannex.cpp new file mode 100644 index 0000000..d8182d8 --- /dev/null +++ b/models/releaseannex.cpp @@ -0,0 +1,1024 @@ +#include +#include "releaseannex.h" +#include "sqlobjects/releaseannexobject.h" + +#include "catclasses.h" + +#include +#include +#include + +ReleaseAnnex::ReleaseAnnex() : + TAbstractModel(), + d(new ReleaseAnnexObject()) +{ + // set the initial parameters +} + +ReleaseAnnex::ReleaseAnnex(const ReleaseAnnex &other) : + TAbstractModel(), + d(other.d) +{ } + +ReleaseAnnex::ReleaseAnnex(const ReleaseAnnexObject &object) : + TAbstractModel(), + d(new ReleaseAnnexObject(object)) +{ } + +ReleaseAnnex::~ReleaseAnnex() +{ + // If the reference count becomes 0, + // the shared data object 'ReleaseAnnexObject' is deleted. +} + +// ##### + +QJsonArray ReleaseAnnex::sqlGet_crObjCatalog(bool doToc, QMap outList) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, id, lang; + + QMapIterator i(outList); + while(i.hasNext()) + { + i.next(); + id = i.value(); + + if(doToc == false) + { + query.prepare("SELECT id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_class, pc_class, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM release_annex WHERE id = ?"); + query.addBindValue(id); + } + else + { + query.prepare("SELECT id, spec_title, spec_content, cat_class FROM release_annex WHERE id = ?"); + query.addBindValue(id); + } + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + if(doToc == false) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + // jsonObject["comments_count"] = QString::number( AnnexDataComments::getSpecsCommentsCount(id.toInt() )); + + jsonArray.append(jsonObject); + } + else + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["spec_title"] = query.value(1).toString(); + jsonObject["cat_class"] = query.value(3).toString(); + + //jsonObject["spec_content"] = query.value(2).toString(); + std::string erg = query.value(2).toString().toStdString(); + findAndReplaceAll(erg, lang, "standard"); + std::string line = erg.c_str(); + + std::regex reg1("()(.{0,100})()", std::regex_constants::icase); + std::smatch match1; + + std::regex reg2("()(.{0,100})()", std::regex_constants::icase); + std::smatch match2; + + std::regex reg3("()(.{0,100})()", std::regex_constants::icase); + std::smatch match3; + + std::regex reg4("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match4; + + QString toc; + std::string ahref1 = "
    .{0,100})|(.{0,100})|(.{0,100}))", std::regex_constants::icase); + std::sregex_iterator next(line.begin(), line.end(), re); + std::sregex_iterator end; + while (next != end) + { + std::smatch match = *next; + //std::cout << "MATCH: " << match.str() << "\n"; + std::string item = match.str(); + + if(std::regex_search(item, match1, reg1)) + { + std::string to = match1.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class1 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match2, reg2)) + { + std::string to = match2.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class2 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match3, reg3)) + { + std::string to = match3.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class3 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match4, reg4)) + { + std::string to = match4.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class4 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + + next++; + } + jsonObject["toc"] = toc; + toc = ""; + } + catch (std::regex_error& e) + { + //std::cout << "Syntax error in the regular expression" << std::endl; + } + + jsonArray.append(jsonObject); + + } + } + } + return jsonArray; +} + +QMap ReleaseAnnex::checkObjCatalog(QMap wwList, QMap localList) +{ + QMapIterator i(localList); + while (i.hasNext()) + { + i.next(); + if(localList.contains(i.key())) + { + wwList[i.key()] = localList[i.key()]; + } + } + + return wwList; +} + +QMap ReleaseAnnex::sqlObjCatalog(QString name, QString ac, QString pc, QString country, QString lang, QString cat, QString spec_active, QString release) +{ + TSqlQuery query; + + QString msg, obj_name, ac_classes, pc_classes; + QMap inList; + + obj_name = "%" + name + "%"; + ac_classes = "%" + ac + "%"; + pc_classes = "%" + pc + "%"; + + query.prepare("select lfdnr, id from release_annex where obj_sname LIKE ? and ac_class LIKE ? and pc_class LIKE ? and lang = ? and country = ? and cat_class = ? AND spec_active = ? AND spec_release = ? order by lfdnr"); + query.addBindValue(obj_name); + query.addBindValue(ac_classes); + query.addBindValue(pc_classes); + query.addBindValue(lang); + query.addBindValue(country); + query.addBindValue(cat); + query.addBindValue(spec_active); + query.addBindValue(release); + + if(!query.exec()) + { + msg = query.lastError().text(); + qWarning("ERROR: " + msg.toUtf8()); + //tDebug(msg.toUtf8()); + } + + while (query.next()) + { + /*msg = "sqlObjCatalog: " + query.value(0).toString() + " " + query.value(1).toString(); + tDebug(msg.toUtf8()); */ + inList.insert(query.value(0).toString(),query.value(1).toString()); + } + + return inList; +} + +QJsonArray ReleaseAnnex::listObjCatalog(bool doToc, QMap editMap) +{ + QMap localList, wwList, outList; + QJsonArray array, tomerge; + + // General + if(editMap["obj_sname"].compare("General") == 0) + { + + wwList.clear(); localList.clear(); outList.clear(); + localList= ReleaseAnnex::sqlObjCatalog("General", "0", "0", editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = ReleaseAnnex::sqlObjCatalog("General", "0", "0", "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + + outList = ReleaseAnnex::checkObjCatalog(wwList, localList); + return ReleaseAnnex::sqlGet_crObjCatalog(doToc, outList); + } + + if(editMap["cat_sname_en"].compare("General") == 0) + { + wwList.clear(); localList.clear(); outList.clear(); + localList= ReleaseAnnex::sqlObjCatalog(editMap["obj_sname"], "0", "0", editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = ReleaseAnnex::sqlObjCatalog(editMap["obj_sname"], "0", "0", "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + outList = ReleaseAnnex::checkObjCatalog(wwList, localList); + array = ReleaseAnnex::sqlGet_crObjCatalog(doToc, outList); + + wwList.clear(); localList.clear(); outList.clear(); + localList= ReleaseAnnex::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = ReleaseAnnex::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + outList = ReleaseAnnex::checkObjCatalog(wwList, localList); + tomerge = ReleaseAnnex::sqlGet_crObjCatalog(doToc, outList); + + for(int i = 0; i < tomerge.size(); i++) + { + array.append(tomerge[i]); + } + return array; + } + else + { + // Cat + wwList.clear(); localList.clear(); outList.clear(); + localList= ReleaseAnnex::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + wwList = ReleaseAnnex::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + outList = ReleaseAnnex::checkObjCatalog(wwList, localList); + return ReleaseAnnex::sqlGet_crObjCatalog(doToc, outList); + } +} + +QJsonArray ReleaseAnnex::getAnnexToc(QMap &stdDataMap) +{ + QJsonObject jsonObject, jsonObjContent; + QJsonValue jsonObjVal; + QJsonArray jsonArr; + + QString obj_sname = stdDataMap["obj_sname"]; + + stdDataMap["obj_sname"] = "General"; + foreach (const QJsonValue & value, ReleaseAnnex::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + jsonObject["obj_sname"] = stdDataMap["obj_sname"]; + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + + stdDataMap["obj_sname"] = obj_sname; + foreach (const QJsonValue & value, CatClasses::getAllJson("1", "category")) + { + QJsonObject objclass = value.toObject(); + QJsonValue obj_class_name = objclass.value(QString("cat_sname_en")); + if(obj_class_name.toString().compare("") == 1 ) + { + stdDataMap["cat_sname_en"] = obj_class_name.toString(); + foreach (const QJsonValue & value, ReleaseAnnex::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + jsonObject["obj_sname"] = stdDataMap["obj_sname"]; + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + } + } + + return jsonArr; +} + +QJsonArray ReleaseAnnex::getAnnexSpec(int &id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, lang; + + query.prepare("SELECT id, lfdnr, spec_title, spec_desc, spec_version, release_version, obj_sname, ac_class, pc_class, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_content FROM public.release_annex WHERE id = ?"); + //query.prepare("SELECT * FROM public.release_annex WHERE id = 7"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["release_version"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + std::string erg = query.value(23).toString().toStdString(); + findAndReplaceAll(erg, lang, "standard"); + jsonObject["spec_content"] = erg.c_str(); + + std::string line = erg.c_str(); + + std::regex reg1("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match1; + + std::regex reg2("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match2; + + std::regex reg3("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match3; + + std::regex reg4("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match4; + + QString toc; + std::string ahref1 = "
  • .{0,100})|(

    .{0,100}

    )|(

    .{0,100}

    )|(

    .{0,100}

    ))", std::regex_constants::icase); + std::regex re("((.{0,100})|(.{0,100})|(.{0,100})|(.{0,100}))", std::regex_constants::icase); + std::sregex_iterator next(line.begin(), line.end(), re); + std::sregex_iterator end; + while (next != end) + { + std::smatch match = *next; + //std::cout << "MATCH: " << match.str() << "\n"; + std::string item = match.str(); + if(std::regex_search(item, match1, reg1)) + { + std::string to = match1.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class1 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match2, reg2)) + { + std::string to = match2.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class2 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match3, reg3)) + { + std::string to = match3.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class3 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match4, reg4)) + { + std::string to = match4.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class4 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + + next++; + } + jsonObject["toc"] = toc; + toc = ""; + } + catch (std::regex_error& e) + { + //std::cout << "Syntax error in the regular expression" << std::endl; + } + + jsonArray.append(jsonObject); + + } + + return jsonArray; +} + +void ReleaseAnnex::findAndReplaceAll(std::string &data, QString &lang, QString std_type) +{ + TSqlQuery query; + std::string toSearch, replaceStr; + + std::string year = QDateTime::currentDateTime().toString("yyyy").toStdString(); + std::string y = "{{YYYY}}"; + std::string month = QDateTime::currentDateTime().toString("MM").toStdString(); + std::string m = "{{MM}}"; + + size_t pos2 = data.find(y); + // Repeat till end is reached + while( pos2 != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos2, y.size(), year); + // Get the next occurrence from the current position + pos2 =data.find(y, pos2 + y.size()); + } + pos2 = data.find(m); + // Repeat till end is reached + while( pos2 != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos2, m.size(), month); + // Get the next occurrence from the current position + pos2 =data.find(m, pos2 + m.size()); + } + + if( lang.compare("de_DE") == 0 ) + { + query.prepare("SELECT std_attr, std_val_de FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + else + { + query.prepare("SELECT std_attr, std_val_en FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + // SELECT id, std_type, std_attr, std_val_de, std_val_en, active FROM public.app_vars; + query.addBindValue(std_type); + + query.exec(); + + while (query.next()) + { + toSearch = "{{" + query.value(0).toString().toStdString() + "}}"; + replaceStr = query.value(1).toString().toStdString(); + + // Get the first occurrence + size_t pos = data.find(toSearch); + // Repeat till end is reached + while( pos != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos, toSearch.size(), replaceStr); + // Get the next occurrence from the current position + pos =data.find(toSearch, pos + replaceStr.size()); + } + } +} + +QJsonArray ReleaseAnnex::getAnnexList(QMap &stdDataMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, obj_sname, ac_class, pc_class, id; + + obj_sname = "%" + stdDataMap["obj_sname"] + "%"; + ac_class = "%" + stdDataMap["ac_class"] + "%"; + pc_class = "%" + stdDataMap["pc_class"] + "%"; + + // query.prepare("SELECT id, lfdnr, spec_title, spec_desc, spec_version, release_version, spec_release, obj_sname, ac_class, pc_class, cat_class, country, lang, spec_content, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_active FROM public.release_annex WHERE obj_sname like ? AND cat_class = ? AND country = ? AND lang = ? AND spec_active = ? AND ac_classes like ? AND pc_classes like ? AND spec_release = ? order by lfdnr"); + //query.prepare("SELECT * FROM public.release_annex where cat_class = 'General' order by lfdnr"); + query.prepare("SELECT id, lfdnr, spec_title, spec_desc, spec_version, release_version, obj_sname, ac_class, pc_class, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM public.release_annex WHERE obj_sname like ? AND cat_class = ? AND country = ? AND lang = ? AND spec_active = ? AND ac_class like ? AND pc_class like ? AND spec_release = ? order by lfdnr"); + query.addBindValue(obj_sname); + query.addBindValue(stdDataMap["cat_sname_en"]); + query.addBindValue(stdDataMap["country"]); + query.addBindValue(stdDataMap["lang"]); + query.addBindValue(stdDataMap["spec_active"]); + query.addBindValue(ac_class); + query.addBindValue(pc_class); + query.addBindValue(stdDataMap["spec_release"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["release_version"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + + +int ReleaseAnnex::id() const +{ + return d->id; +} + +QString ReleaseAnnex::lfdnr() const +{ + return d->lfdnr; +} + +void ReleaseAnnex::setLfdnr(const QString &lfdnr) +{ + d->lfdnr = lfdnr; +} + +QString ReleaseAnnex::specTitle() const +{ + return d->spec_title; +} + +void ReleaseAnnex::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString ReleaseAnnex::specDesc() const +{ + return d->spec_desc; +} + +void ReleaseAnnex::setSpecDesc(const QString &specDesc) +{ + d->spec_desc = specDesc; +} + +QString ReleaseAnnex::specVersion() const +{ + return d->spec_version; +} + +void ReleaseAnnex::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString ReleaseAnnex::releaseVersion() const +{ + return d->release_version; +} + +void ReleaseAnnex::setReleaseVersion(const QString &releaseVersion) +{ + d->release_version = releaseVersion; +} + +QString ReleaseAnnex::specRelease() const +{ + return d->spec_release; +} + +void ReleaseAnnex::setSpecRelease(const QString &specRelease) +{ + d->spec_release = specRelease; +} + +QString ReleaseAnnex::objSname() const +{ + return d->obj_sname; +} + +void ReleaseAnnex::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString ReleaseAnnex::acClass() const +{ + return d->ac_class; +} + +void ReleaseAnnex::setAcClass(const QString &acClass) +{ + d->ac_class = acClass; +} + +QString ReleaseAnnex::pcClass() const +{ + return d->pc_class; +} + +void ReleaseAnnex::setPcClass(const QString &pcClass) +{ + d->pc_class = pcClass; +} + +QString ReleaseAnnex::catClass() const +{ + return d->cat_class; +} + +void ReleaseAnnex::setCatClass(const QString &catClass) +{ + d->cat_class = catClass; +} + +QString ReleaseAnnex::country() const +{ + return d->country; +} + +void ReleaseAnnex::setCountry(const QString &country) +{ + d->country = country; +} + +QString ReleaseAnnex::lang() const +{ + return d->lang; +} + +void ReleaseAnnex::setLang(const QString &lang) +{ + d->lang = lang; +} + +QByteArray ReleaseAnnex::specContent() const +{ + return d->spec_content; +} + +void ReleaseAnnex::setSpecContent(const QByteArray &specContent) +{ + d->spec_content = specContent; +} + +QDateTime ReleaseAnnex::specCreated() const +{ + return d->spec_created; +} + +void ReleaseAnnex::setSpecCreated(const QDateTime &specCreated) +{ + d->spec_created = specCreated; +} + +QDateTime ReleaseAnnex::specLastModified() const +{ + return d->spec_last_modified; +} + +void ReleaseAnnex::setSpecLastModified(const QDateTime &specLastModified) +{ + d->spec_last_modified = specLastModified; +} + +QDateTime ReleaseAnnex::specValidStart() const +{ + return d->spec_valid_start; +} + +void ReleaseAnnex::setSpecValidStart(const QDateTime &specValidStart) +{ + d->spec_valid_start = specValidStart; +} + +QDateTime ReleaseAnnex::specValidEnd() const +{ + return d->spec_valid_end; +} + +void ReleaseAnnex::setSpecValidEnd(const QDateTime &specValidEnd) +{ + d->spec_valid_end = specValidEnd; +} + +QString ReleaseAnnex::lastEditor() const +{ + return d->last_editor; +} + +void ReleaseAnnex::setLastEditor(const QString &lastEditor) +{ + d->last_editor = lastEditor; +} + +QString ReleaseAnnex::gLegacy() const +{ + return d->g_legacy; +} + +void ReleaseAnnex::setGLegacy(const QString &gLegacy) +{ + d->g_legacy = gLegacy; +} + +QString ReleaseAnnex::responsibility() const +{ + return d->responsibility; +} + +void ReleaseAnnex::setResponsibility(const QString &responsibility) +{ + d->responsibility = responsibility; +} + +QString ReleaseAnnex::specComment() const +{ + return d->spec_comment; +} + +void ReleaseAnnex::setSpecComment(const QString &specComment) +{ + d->spec_comment = specComment; +} + +QString ReleaseAnnex::specMarker() const +{ + return d->spec_marker; +} + +void ReleaseAnnex::setSpecMarker(const QString &specMarker) +{ + d->spec_marker = specMarker; +} + +QString ReleaseAnnex::groups() const +{ + return d->groups; +} + +void ReleaseAnnex::setGroups(const QString &groups) +{ + d->groups = groups; +} + +int ReleaseAnnex::specActive() const +{ + return d->spec_active; +} + +void ReleaseAnnex::setSpecActive(int specActive) +{ + d->spec_active = specActive; +} + +ReleaseAnnex &ReleaseAnnex::operator=(const ReleaseAnnex &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +ReleaseAnnex ReleaseAnnex::create(const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &releaseVersion, const QString &specRelease, const QString &objSname, const QString &acClass, const QString &pcClass, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, const QDateTime &specCreated, const QDateTime &specLastModified, const QDateTime &specValidStart, const QDateTime &specValidEnd, const QString &lastEditor, const QString &gLegacy, const QString &responsibility, const QString &specComment, const QString &specMarker, const QString &groups, int specActive) +{ + ReleaseAnnexObject obj; + obj.lfdnr = lfdnr; + obj.spec_title = specTitle; + obj.spec_desc = specDesc; + obj.spec_version = specVersion; + obj.release_version = releaseVersion; + obj.spec_release = specRelease; + obj.obj_sname = objSname; + obj.ac_class = acClass; + obj.pc_class = pcClass; + obj.cat_class = catClass; + obj.country = country; + obj.lang = lang; + obj.spec_content = specContent; + obj.spec_created = specCreated; + obj.spec_last_modified = specLastModified; + obj.spec_valid_start = specValidStart; + obj.spec_valid_end = specValidEnd; + obj.last_editor = lastEditor; + obj.g_legacy = gLegacy; + obj.responsibility = responsibility; + obj.spec_comment = specComment; + obj.spec_marker = specMarker; + obj.groups = groups; + obj.spec_active = specActive; + if (!obj.create()) { + return ReleaseAnnex(); + } + return ReleaseAnnex(obj); +} + +ReleaseAnnex ReleaseAnnex::create(const QVariantMap &values) +{ + ReleaseAnnex model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +ReleaseAnnex ReleaseAnnex::get(int id) +{ + TSqlORMapper mapper; + return ReleaseAnnex(mapper.findByPrimaryKey(id)); +} + +int ReleaseAnnex::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList ReleaseAnnex::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray ReleaseAnnex::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(ReleaseAnnex(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *ReleaseAnnex::modelData() +{ + return d.data(); +} + +const TModelObject *ReleaseAnnex::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const ReleaseAnnex &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, ReleaseAnnex &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(ReleaseAnnex) diff --git a/models/releaseannex.h b/models/releaseannex.h new file mode 100644 index 0000000..9f8ed70 --- /dev/null +++ b/models/releaseannex.h @@ -0,0 +1,114 @@ +#ifndef RELEASEANNEX_H +#define RELEASEANNEX_H + +#include +#include +#include +#include +#include +#include + + + +class TModelObject; +class ReleaseAnnexObject; +class QJsonArray; + + +class T_MODEL_EXPORT ReleaseAnnex : public TAbstractModel +{ +public: + ReleaseAnnex(); + ReleaseAnnex(const ReleaseAnnex &other); + ReleaseAnnex(const ReleaseAnnexObject &object); + ~ReleaseAnnex(); + + int id() const; + QString lfdnr() const; + void setLfdnr(const QString &lfdnr); + QString specTitle() const; + void setSpecTitle(const QString &specTitle); + QString specDesc() const; + void setSpecDesc(const QString &specDesc); + QString specVersion() const; + void setSpecVersion(const QString &specVersion); + QString releaseVersion() const; + void setReleaseVersion(const QString &releaseVersion); + QString specRelease() const; + void setSpecRelease(const QString &specRelease); + QString objSname() const; + void setObjSname(const QString &objSname); + QString acClass() const; + void setAcClass(const QString &acClass); + QString pcClass() const; + void setPcClass(const QString &pcClass); + QString catClass() const; + void setCatClass(const QString &catClass); + QString country() const; + void setCountry(const QString &country); + QString lang() const; + void setLang(const QString &lang); + QByteArray specContent() const; + void setSpecContent(const QByteArray &specContent); + QDateTime specCreated() const; + void setSpecCreated(const QDateTime &specCreated); + QDateTime specLastModified() const; + void setSpecLastModified(const QDateTime &specLastModified); + QDateTime specValidStart() const; + void setSpecValidStart(const QDateTime &specValidStart); + QDateTime specValidEnd() const; + void setSpecValidEnd(const QDateTime &specValidEnd); + QString lastEditor() const; + void setLastEditor(const QString &lastEditor); + QString gLegacy() const; + void setGLegacy(const QString &gLegacy); + QString responsibility() const; + void setResponsibility(const QString &responsibility); + QString specComment() const; + void setSpecComment(const QString &specComment); + QString specMarker() const; + void setSpecMarker(const QString &specMarker); + QString groups() const; + void setGroups(const QString &groups); + int specActive() const; + void setSpecActive(int specActive); + + static QJsonArray getAnnexList(QMap &stdDataMap); + static QJsonArray getAnnexSpec(int &id); + static void findAndReplaceAll(std::string &data, QString &lang, QString std_type); + + ReleaseAnnex &operator=(const ReleaseAnnex &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static ReleaseAnnex create(const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &releaseVersion, const QString &specRelease, const QString &objSname, const QString &acClass, const QString &pcClass, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, const QDateTime &specCreated, const QDateTime &specLastModified, const QDateTime &specValidStart, const QDateTime &specValidEnd, const QString &lastEditor, const QString &gLegacy, const QString &responsibility, const QString &specComment, const QString &specMarker, const QString &groups, int specActive); + static ReleaseAnnex create(const QVariantMap &values); + static ReleaseAnnex get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + + static QJsonArray getAnnexToc(QMap &stdDataMap); + //static QJsonArray listObjCatalog(QMap editMap); + static QJsonArray listObjCatalog(bool doToc, QMap editMap); + static QMap sqlObjCatalog(QString name, QString ac, QString pc, QString country, QString lang, QString cat, QString spec_active, QString release); + static QMap checkObjCatalog(QMap wwList, QMap localList); + // static QJsonArray sqlGet_crObjCatalog(QMap outList); + static QJsonArray sqlGet_crObjCatalog(bool doToc, QMap outList); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const ReleaseAnnex &model); + friend QDataStream &operator>>(QDataStream &ds, ReleaseAnnex &model); +}; + +Q_DECLARE_METATYPE(ReleaseAnnex) +Q_DECLARE_METATYPE(QList) + +#endif // RELEASEANNEX_H diff --git a/models/releasemgmt.cpp b/models/releasemgmt.cpp new file mode 100644 index 0000000..ec19a29 --- /dev/null +++ b/models/releasemgmt.cpp @@ -0,0 +1,597 @@ +#include +#include "releasemgmt.h" +#include "sqlobjects/releasemgmtobject.h" + +#include "stdsystem.h" + +ReleaseMgmt::ReleaseMgmt() : + TAbstractModel(), + d(new ReleaseMgmtObject()) +{ + // set the initial parameters +} + +ReleaseMgmt::ReleaseMgmt(const ReleaseMgmt &other) : + TAbstractModel(), + d(other.d) +{ } + +ReleaseMgmt::ReleaseMgmt(const ReleaseMgmtObject &object) : + TAbstractModel(), + d(new ReleaseMgmtObject(object)) +{ } + +ReleaseMgmt::~ReleaseMgmt() +{ + // If the reference count becomes 0, + // the shared data object 'ReleaseMgmtObject' is deleted. +} + +// ##### + +QJsonArray ReleaseMgmt::fileRemove(QMap stdDataMap) +{ + QFile pathToFile("/webapp/html/itis/pdf/" + stdDataMap["doctype"] + "/" + stdDataMap["docrelease"] + "/" + stdDataMap["docname"]); + + QJsonObject jsonObject; + QJsonArray jsonArray; + + if(pathToFile.exists() == 0) { + tError("fielRemove 0"); + jsonObject["ERROR"] = "0"; + jsonObject["Msg"] = "alles ok"; + } + else { + tError("fileRemove != 0"); + jsonObject["ERROR"] = "1"; + jsonObject["errMsg"] = "NOK"; + } + + jsonArray.append(jsonObject); + return jsonArray; +} + +int ReleaseMgmt::crPDF(const QString &htmlFile, const QString &pdfFile) +{ + QProcess p; + QString program; + + QDir devDir("/webapp_dez"); + QDir prodDir("/webapp"); + + if(devDir.exists()) + { + program = "/webapp_dez/itis_app/doit.sh"; + } + else if(prodDir.exists()) + { + program = "/webapp/itis_api/doit.sh"; + } + + QStringList arguments; + arguments << htmlFile << pdfFile; + + p.start(program,arguments); + p.waitForStarted(); + p.waitForReadyRead(); + p.waitForFinished(); + QString output = p.readAllStandardOutput(); + + if(p.exitCode() != 0) + { + tError(output.toUtf8()); + return(1); + } + else + { + // OK + return(0); + } +} + +QJsonArray ReleaseMgmt::ci_update(QMap stdDataMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + /* + stdDataMap["id"] = httpRequest().formItemValue("id"); + stdDataMap["specVersion"] = httpRequest().formItemValue("specVersion"); + stdDataMap["relCreator"] = httpRequest().formItemValue("relCreator"); + stdDataMap["relcreatorDecisdate"] + */ + query.prepare("UPDATE public.release_mgmt set spec_version = ?, rel_creator = ?, relcreator_decisdate = ? WHERE id = ?"); + query.addBindValue(stdDataMap["specVersion"]); + query.addBindValue(stdDataMap["relCreator"]); + query.addBindValue(stdDataMap["relcreatorDecisdate"]); + query.addBindValue(stdDataMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + else + { + jsonObject["errMsg"] = "update OK"; + jsonObject["ERROR"] = "0"; + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +int ReleaseMgmt::id() const +{ + return d->id; +} + +QString ReleaseMgmt::objSname() const +{ + return d->obj_sname; +} + +void ReleaseMgmt::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString ReleaseMgmt::specVersion() const +{ + return d->spec_version; +} + +void ReleaseMgmt::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString ReleaseMgmt::acClasses() const +{ + return d->ac_classes; +} + +void ReleaseMgmt::setAcClasses(const QString &acClasses) +{ + d->ac_classes = acClasses; +} + +QString ReleaseMgmt::pcClasses() const +{ + return d->pc_classes; +} + +void ReleaseMgmt::setPcClasses(const QString &pcClasses) +{ + d->pc_classes = pcClasses; +} + +QString ReleaseMgmt::catClass() const +{ + return d->cat_class; +} + +void ReleaseMgmt::setCatClass(const QString &catClass) +{ + d->cat_class = catClass; +} + +QString ReleaseMgmt::country() const +{ + return d->country; +} + +void ReleaseMgmt::setCountry(const QString &country) +{ + d->country = country; +} + +QString ReleaseMgmt::lang() const +{ + return d->lang; +} + +void ReleaseMgmt::setLang(const QString &lang) +{ + d->lang = lang; +} + +QString ReleaseMgmt::docType() const +{ + return d->doc_type; +} + +void ReleaseMgmt::setDocType(const QString &docType) +{ + d->doc_type = docType; +} + +QString ReleaseMgmt::relRequester() const +{ + return d->rel_requester; +} + +void ReleaseMgmt::setRelRequester(const QString &relRequester) +{ + d->rel_requester = relRequester; +} + +QDateTime ReleaseMgmt::relrequestDate() const +{ + return d->relrequest_date; +} + +void ReleaseMgmt::setRelrequestDate(const QDateTime &relrequestDate) +{ + d->relrequest_date = relrequestDate; +} + +QString ReleaseMgmt::relCreator() const +{ + return d->rel_creator; +} + +void ReleaseMgmt::setRelCreator(const QString &relCreator) +{ + d->rel_creator = relCreator; +} + +QDateTime ReleaseMgmt::relcreatorDecisdate() const +{ + return d->relcreator_decisdate; +} + +void ReleaseMgmt::setRelcreatorDecisdate(const QDateTime &relcreatorDecisdate) +{ + d->relcreator_decisdate = relcreatorDecisdate; +} + +QString ReleaseMgmt::relInspector() const +{ + return d->rel_inspector; +} + +void ReleaseMgmt::setRelInspector(const QString &relInspector) +{ + d->rel_inspector = relInspector; +} + +QDateTime ReleaseMgmt::relinspectDecisdate() const +{ + return d->relinspect_decisdate; +} + +void ReleaseMgmt::setRelinspectDecisdate(const QDateTime &relinspectDecisdate) +{ + d->relinspect_decisdate = relinspectDecisdate; +} + +QString ReleaseMgmt::relApprover() const +{ + return d->rel_approver; +} + +void ReleaseMgmt::setRelApprover(const QString &relApprover) +{ + d->rel_approver = relApprover; +} + +QDateTime ReleaseMgmt::relapprovDecisdate() const +{ + return d->relapprov_decisdate; +} + +void ReleaseMgmt::setRelapprovDecisdate(const QDateTime &relapprovDecisdate) +{ + d->relapprov_decisdate = relapprovDecisdate; +} + +QDateTime ReleaseMgmt::ciDate() const +{ + return d->ci_date; +} + +void ReleaseMgmt::setCiDate(const QDateTime &ciDate) +{ + d->ci_date = ciDate; +} + +QDateTime ReleaseMgmt::cdDate() const +{ + return d->cd_date; +} + +void ReleaseMgmt::setCdDate(const QDateTime &cdDate) +{ + d->cd_date = cdDate; +} + +QDateTime ReleaseMgmt::cddDate() const +{ + return d->cdd_date; +} + +void ReleaseMgmt::setCddDate(const QDateTime &cddDate) +{ + d->cdd_date = cddDate; +} + +ReleaseMgmt &ReleaseMgmt::operator=(const ReleaseMgmt &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +ReleaseMgmt ReleaseMgmt::create(const QString &objSname, const QString &specVersion, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QString &docType, const QString &relRequester, const QDateTime &relrequestDate, const QString &relCreator, const QDateTime &relcreatorDecisdate, const QString &relInspector, const QDateTime &relinspectDecisdate, const QString &relApprover, const QDateTime &relapprovDecisdate, const QDateTime &ciDate, const QDateTime &cdDate, const QDateTime &cddDate) +{ + ReleaseMgmtObject obj; + obj.obj_sname = objSname; + obj.spec_version = specVersion; + obj.ac_classes = acClasses; + obj.pc_classes = pcClasses; + obj.cat_class = catClass; + obj.country = country; + obj.lang = lang; + obj.doc_type = docType; + obj.rel_requester = relRequester; + obj.relrequest_date = relrequestDate; + obj.rel_creator = relCreator; + obj.relcreator_decisdate = relcreatorDecisdate; + obj.rel_inspector = relInspector; + obj.relinspect_decisdate = relinspectDecisdate; + obj.rel_approver = relApprover; + obj.relapprov_decisdate = relapprovDecisdate; + obj.ci_date = ciDate; + obj.cd_date = cdDate; + obj.cdd_date = cddDate; + if (!obj.create()) { + return ReleaseMgmt(); + } + return ReleaseMgmt(obj); +} + +ReleaseMgmt ReleaseMgmt::create(const QVariantMap &values) +{ + ReleaseMgmt model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +ReleaseMgmt ReleaseMgmt::get(int id) +{ + TSqlORMapper mapper; + return ReleaseMgmt(mapper.findByPrimaryKey(id)); +} + +int ReleaseMgmt::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList ReleaseMgmt::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray ReleaseMgmt::list_allAnnexCi() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, obj_sname, spec_version, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date, rel_creator, relcreator_decisdate, rel_inspector, relinspect_decisdate, rel_approver, relapprov_decisdate, ci_date, cd_date, cdd_date FROM public.release_mgmt WHERE doc_type = 'annex' AND cd_date is null GROUP BY(id, obj_sname,ac_classes, pc_classes, country, lang)"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["spec_version"] = query.value(2).toString(); + jsonObject["ac_classes"] = query.value(3).toString(); + jsonObject["pc_classes"] = query.value(4).toString(); + jsonObject["cat_class"] = query.value(5).toString(); + jsonObject["country"] = query.value(6).toString(); + jsonObject["lang"] = query.value(7).toString(); + jsonObject["doc_type"] = query.value(8).toString(); + jsonObject["rel_requester"] = query.value(9).toString(); + jsonObject["relrequest_date"] = StdSystem::convertDate( query.value(10).toDate() ); + jsonObject["rel_creator"] = query.value(11).toString(); + jsonObject["relcreator_decisdate"] = StdSystem::convertDate( query.value(12).toDate() ); + jsonObject["rel_inspector"] = query.value(13).toString(); + jsonObject["relinspect_decisdate"] = StdSystem::convertDate( query.value(14).toDate() ); + jsonObject["rel_approver"] = query.value(15).toString(); + jsonObject["relapprov_decisdate"] = StdSystem::convertDate( query.value(16).toDate() ); + jsonObject["ci_date"] = StdSystem::convertDate( query.value(17).toDate() ); + + jsonArray.append(jsonObject); + } + return jsonArray; +} +QJsonArray ReleaseMgmt::list_allAnnexCd() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, obj_sname, spec_version, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date, rel_creator, relcreator_decisdate, rel_inspector, relinspect_decisdate, rel_approver, relapprov_decisdate, ci_date, cd_date, cdd_date FROM public.release_mgmt WHERE doc_type = 'annex' AND cd_date is not null GROUP BY(id, obj_sname,ac_classes, pc_classes, country, lang)"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["spec_version"] = query.value(2).toString(); + jsonObject["ac_classes"] = query.value(3).toString(); + jsonObject["pc_classes"] = query.value(4).toString(); + jsonObject["cat_class"] = query.value(5).toString(); + jsonObject["country"] = query.value(6).toString(); + jsonObject["lang"] = query.value(7).toString(); + jsonObject["doc_type"] = query.value(8).toString(); + jsonObject["rel_requester"] = query.value(9).toString(); + jsonObject["relrequest_date"] = StdSystem::convertDate( query.value(10).toDate() ); + jsonObject["rel_creator"] = query.value(11).toString(); + jsonObject["relcreator_decisdate"] = StdSystem::convertDate( query.value(12).toDate() ); + jsonObject["rel_inspector"] = query.value(13).toString(); + jsonObject["relinspect_decisdate"] = StdSystem::convertDate( query.value(14).toDate() ); + jsonObject["rel_approver"] = query.value(15).toString(); + jsonObject["relapprov_decisdate"] = StdSystem::convertDate( query.value(16).toDate() ); + jsonObject["ci_date"] = StdSystem::convertDate( query.value(17).toDate() ); + jsonObject["cd_date"] = StdSystem::convertDate( query.value(18).toDate() ); + jsonObject["cdd_date"] = StdSystem::convertDate( query.value(19).toDate() ); + + + jsonArray.append(jsonObject); + } + return jsonArray; +} +QJsonArray ReleaseMgmt::list_allStdCi() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, obj_sname, spec_version, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date, rel_creator, relcreator_decisdate, rel_inspector, relinspect_decisdate, rel_approver, relapprov_decisdate, ci_date, cd_date, cdd_date FROM public.release_mgmt WHERE doc_type = 'standard' AND cd_date is null GROUP BY(id, obj_sname,ac_classes, pc_classes, country, lang)"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["spec_version"] = query.value(2).toString(); + jsonObject["ac_classes"] = query.value(3).toString(); + jsonObject["pc_classes"] = query.value(4).toString(); + jsonObject["cat_class"] = query.value(5).toString(); + jsonObject["country"] = query.value(6).toString(); + jsonObject["lang"] = query.value(7).toString(); + jsonObject["doc_type"] = query.value(8).toString(); + jsonObject["rel_requester"] = query.value(9).toString(); + jsonObject["relrequest_date"] = StdSystem::convertDate( query.value(10).toDate() ); + jsonObject["rel_creator"] = query.value(11).toString(); + jsonObject["relcreator_decisdate"] = StdSystem::convertDate( query.value(12).toDate() ); + jsonObject["rel_inspector"] = query.value(13).toString(); + jsonObject["relinspect_decisdate"] = StdSystem::convertDate( query.value(14).toDate() ); + jsonObject["rel_approver"] = query.value(15).toString(); + jsonObject["relapprov_decisdate"] = StdSystem::convertDate( query.value(16).toDate() ); + jsonObject["ci_date"] = StdSystem::convertDate( query.value(17).toDate() ); + + jsonArray.append(jsonObject); + } + return jsonArray; +} +QJsonArray ReleaseMgmt::list_allStdCd() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, obj_sname, spec_version, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date, rel_creator, relcreator_decisdate, rel_inspector, relinspect_decisdate, rel_approver, relapprov_decisdate, ci_date, cd_date, cdd_date FROM public.release_mgmt WHERE doc_type = 'standard' AND cd_date is not null GROUP BY(id, obj_sname,ac_classes, pc_classes, country, lang)"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["spec_version"] = query.value(2).toString(); + jsonObject["ac_classes"] = query.value(3).toString(); + jsonObject["pc_classes"] = query.value(4).toString(); + jsonObject["cat_class"] = query.value(5).toString(); + jsonObject["country"] = query.value(6).toString(); + jsonObject["lang"] = query.value(7).toString(); + jsonObject["doc_type"] = query.value(8).toString(); + jsonObject["rel_requester"] = query.value(9).toString(); + jsonObject["relrequest_date"] = StdSystem::convertDate( query.value(10).toDate() ); + jsonObject["rel_creator"] = query.value(11).toString(); + jsonObject["relcreator_decisdate"] = StdSystem::convertDate( query.value(12).toDate() ); + jsonObject["rel_inspector"] = query.value(13).toString(); + jsonObject["relinspect_decisdate"] = StdSystem::convertDate( query.value(14).toDate() ); + jsonObject["rel_approver"] = query.value(15).toString(); + jsonObject["relapprov_decisdate"] = StdSystem::convertDate( query.value(16).toDate() ); + jsonObject["ci_date"] = StdSystem::convertDate( query.value(17).toDate() ); + jsonObject["cd_date"] = StdSystem::convertDate( query.value(18).toDate() ); + jsonObject["cdd_date"] = StdSystem::convertDate( query.value(19).toDate() ); + + jsonArray.append(jsonObject); + } + return jsonArray; +} + +QJsonArray ReleaseMgmt::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(ReleaseMgmt(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *ReleaseMgmt::modelData() +{ + return d.data(); +} + +const TModelObject *ReleaseMgmt::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const ReleaseMgmt &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, ReleaseMgmt &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(ReleaseMgmt) diff --git a/models/releasemgmt.h b/models/releasemgmt.h new file mode 100644 index 0000000..95af27b --- /dev/null +++ b/models/releasemgmt.h @@ -0,0 +1,101 @@ +#ifndef RELEASEMGMT_H +#define RELEASEMGMT_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class ReleaseMgmtObject; +class QJsonArray; + + +class T_MODEL_EXPORT ReleaseMgmt : public TAbstractModel +{ +public: + ReleaseMgmt(); + ReleaseMgmt(const ReleaseMgmt &other); + ReleaseMgmt(const ReleaseMgmtObject &object); + ~ReleaseMgmt(); + + int id() const; + QString objSname() const; + void setObjSname(const QString &objSname); + QString specVersion() const; + void setSpecVersion(const QString &specVersion); + QString acClasses() const; + void setAcClasses(const QString &acClasses); + QString pcClasses() const; + void setPcClasses(const QString &pcClasses); + QString catClass() const; + void setCatClass(const QString &catClass); + QString country() const; + void setCountry(const QString &country); + QString lang() const; + void setLang(const QString &lang); + QString docType() const; + void setDocType(const QString &docType); + QString relRequester() const; + void setRelRequester(const QString &relRequester); + QDateTime relrequestDate() const; + void setRelrequestDate(const QDateTime &relrequestDate); + QString relCreator() const; + void setRelCreator(const QString &relCreator); + QDateTime relcreatorDecisdate() const; + void setRelcreatorDecisdate(const QDateTime &relcreatorDecisdate); + QString relInspector() const; + void setRelInspector(const QString &relInspector); + QDateTime relinspectDecisdate() const; + void setRelinspectDecisdate(const QDateTime &relinspectDecisdate); + QString relApprover() const; + void setRelApprover(const QString &relApprover); + QDateTime relapprovDecisdate() const; + void setRelapprovDecisdate(const QDateTime &relapprovDecisdate); + QDateTime ciDate() const; + void setCiDate(const QDateTime &ciDate); + QDateTime cdDate() const; + void setCdDate(const QDateTime &cdDate); + QDateTime cddDate() const; + void setCddDate(const QDateTime &cddDate); + ReleaseMgmt &operator=(const ReleaseMgmt &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static ReleaseMgmt create(const QString &objSname, const QString &specVersion, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QString &docType, const QString &relRequester, const QDateTime &relrequestDate, const QString &relCreator, const QDateTime &relcreatorDecisdate, const QString &relInspector, const QDateTime &relinspectDecisdate, const QString &relApprover, const QDateTime &relapprovDecisdate, const QDateTime &ciDate, const QDateTime &cdDate, const QDateTime &cddDate); + static ReleaseMgmt create(const QVariantMap &values); + static ReleaseMgmt get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + static QJsonArray listall_ciannex(); + + static QJsonArray list_allAnnexCi(); + static QJsonArray list_allAnnexCd(); + static QJsonArray list_allStdCi(); + static QJsonArray list_allStdCd(); + + static QJsonArray ci_update(QMap stdDataMap); + + static QJsonArray fileRemove(QMap stdDataMap); + + static int crPDF(const QString &htmlFile, const QString &pdfFile); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const ReleaseMgmt &model); + friend QDataStream &operator>>(QDataStream &ds, ReleaseMgmt &model); +}; + +Q_DECLARE_METATYPE(ReleaseMgmt) +Q_DECLARE_METATYPE(QList) + +#endif // RELEASEMGMT_H diff --git a/models/sqlobjects/acclassesobject.h b/models/sqlobjects/acclassesobject.h new file mode 100644 index 0000000..f5888f1 --- /dev/null +++ b/models/sqlobjects/acclassesobject.h @@ -0,0 +1,43 @@ +#ifndef ACCLASSESOBJECT_H +#define ACCLASSESOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT AcClassesObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString obj_sname; + int ac_class {0}; + QString class_type; + int active {0}; + + enum PropertyIndex { + Id = 0, + ObjSname, + AcClass, + ClassType, + Active, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("ac_classes"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString obj_sname READ getobj_sname WRITE setobj_sname) + T_DEFINE_PROPERTY(QString, obj_sname) + Q_PROPERTY(int ac_class READ getac_class WRITE setac_class) + T_DEFINE_PROPERTY(int, ac_class) + Q_PROPERTY(QString class_type READ getclass_type WRITE setclass_type) + T_DEFINE_PROPERTY(QString, class_type) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) +}; + +#endif // ACCLASSESOBJECT_H diff --git a/models/sqlobjects/actionrightsobject.h b/models/sqlobjects/actionrightsobject.h new file mode 100644 index 0000000..c0589ef --- /dev/null +++ b/models/sqlobjects/actionrightsobject.h @@ -0,0 +1,43 @@ +#ifndef ACTIONRIGHTSOBJECT_H +#define ACTIONRIGHTSOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT ActionRightsObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString uri; + QString groups; + QString rights; + int active {0}; + + enum PropertyIndex { + Id = 0, + Uri, + Groups, + Rights, + Active, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("action_rights"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString uri READ geturi WRITE seturi) + T_DEFINE_PROPERTY(QString, uri) + Q_PROPERTY(QString groups READ getgroups WRITE setgroups) + T_DEFINE_PROPERTY(QString, groups) + Q_PROPERTY(QString rights READ getrights WRITE setrights) + T_DEFINE_PROPERTY(QString, rights) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) +}; + +#endif // ACTIONRIGHTSOBJECT_H diff --git a/models/sqlobjects/annexdatacommentsobject.h b/models/sqlobjects/annexdatacommentsobject.h new file mode 100644 index 0000000..acc2177 --- /dev/null +++ b/models/sqlobjects/annexdatacommentsobject.h @@ -0,0 +1,51 @@ +#ifndef ANNEXDATACOMMENTSOBJECT_H +#define ANNEXDATACOMMENTSOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT AnnexDataCommentsObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QDateTime comment_created; + int spec_id {0}; + QString spec_title; + QString spec_version; + QString user_comment; + QString username; + + enum PropertyIndex { + Id = 0, + CommentCreated, + SpecId, + SpecTitle, + SpecVersion, + UserComment, + Username, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("annex_data_comments"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QDateTime comment_created READ getcomment_created WRITE setcomment_created) + T_DEFINE_PROPERTY(QDateTime, comment_created) + Q_PROPERTY(int spec_id READ getspec_id WRITE setspec_id) + T_DEFINE_PROPERTY(int, spec_id) + Q_PROPERTY(QString spec_title READ getspec_title WRITE setspec_title) + T_DEFINE_PROPERTY(QString, spec_title) + Q_PROPERTY(QString spec_version READ getspec_version WRITE setspec_version) + T_DEFINE_PROPERTY(QString, spec_version) + Q_PROPERTY(QString user_comment READ getuser_comment WRITE setuser_comment) + T_DEFINE_PROPERTY(QString, user_comment) + Q_PROPERTY(QString username READ getusername WRITE setusername) + T_DEFINE_PROPERTY(QString, username) +}; + +#endif // ANNEXDATACOMMENTSOBJECT_H diff --git a/models/sqlobjects/annexdataobject.h b/models/sqlobjects/annexdataobject.h new file mode 100644 index 0000000..4986e55 --- /dev/null +++ b/models/sqlobjects/annexdataobject.h @@ -0,0 +1,79 @@ +#ifndef ANNEXDATAOBJECT_H +#define ANNEXDATAOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT AnnexDataObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString lfdnr; + QString spec_title; + QString spec_desc; + QString spec_version; + QString spec_release; + QString obj_sname; + QString ac_classes; + QString pc_classes; + QString cat_class; + QString country; + QString lang; + QByteArray spec_content; + int spec_active {0}; + + enum PropertyIndex { + Id = 0, + Lfdnr, + SpecTitle, + SpecDesc, + SpecVersion, + SpecRelease, + ObjSname, + AcClasses, + PcClasses, + CatClass, + Country, + Lang, + SpecContent, + SpecActive, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("annex_data"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString lfdnr READ getlfdnr WRITE setlfdnr) + T_DEFINE_PROPERTY(QString, lfdnr) + Q_PROPERTY(QString spec_title READ getspec_title WRITE setspec_title) + T_DEFINE_PROPERTY(QString, spec_title) + Q_PROPERTY(QString spec_desc READ getspec_desc WRITE setspec_desc) + T_DEFINE_PROPERTY(QString, spec_desc) + Q_PROPERTY(QString spec_version READ getspec_version WRITE setspec_version) + T_DEFINE_PROPERTY(QString, spec_version) + Q_PROPERTY(QString spec_release READ getspec_release WRITE setspec_release) + T_DEFINE_PROPERTY(QString, spec_release) + Q_PROPERTY(QString obj_sname READ getobj_sname WRITE setobj_sname) + T_DEFINE_PROPERTY(QString, obj_sname) + Q_PROPERTY(QString ac_classes READ getac_classes WRITE setac_classes) + T_DEFINE_PROPERTY(QString, ac_classes) + Q_PROPERTY(QString pc_classes READ getpc_classes WRITE setpc_classes) + T_DEFINE_PROPERTY(QString, pc_classes) + Q_PROPERTY(QString cat_class READ getcat_class WRITE setcat_class) + T_DEFINE_PROPERTY(QString, cat_class) + Q_PROPERTY(QString country READ getcountry WRITE setcountry) + T_DEFINE_PROPERTY(QString, country) + Q_PROPERTY(QString lang READ getlang WRITE setlang) + T_DEFINE_PROPERTY(QString, lang) + Q_PROPERTY(QByteArray spec_content READ getspec_content WRITE setspec_content) + T_DEFINE_PROPERTY(QByteArray, spec_content) + Q_PROPERTY(int spec_active READ getspec_active WRITE setspec_active) + T_DEFINE_PROPERTY(int, spec_active) +}; + +#endif // ANNEXDATAOBJECT_H diff --git a/models/sqlobjects/annexdatawasteobject.h b/models/sqlobjects/annexdatawasteobject.h new file mode 100644 index 0000000..907a7ef --- /dev/null +++ b/models/sqlobjects/annexdatawasteobject.h @@ -0,0 +1,87 @@ +#ifndef ANNEXDATAWASTEOBJECT_H +#define ANNEXDATAWASTEOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT AnnexDataWasteObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QDateTime changed_on; + int id_old {0}; + QString lfdnr; + QString spec_title; + QString spec_desc; + QString spec_version; + QString spec_release; + QString obj_sname; + QString ac_classes; + QString pc_classes; + QString cat_class; + QString country; + QString lang; + QByteArray spec_content; + int spec_active {0}; + + enum PropertyIndex { + Id = 0, + ChangedOn, + IdOld, + Lfdnr, + SpecTitle, + SpecDesc, + SpecVersion, + SpecRelease, + ObjSname, + AcClasses, + PcClasses, + CatClass, + Country, + Lang, + SpecContent, + SpecActive, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("annex_data_waste"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QDateTime changed_on READ getchanged_on WRITE setchanged_on) + T_DEFINE_PROPERTY(QDateTime, changed_on) + Q_PROPERTY(int id_old READ getid_old WRITE setid_old) + T_DEFINE_PROPERTY(int, id_old) + Q_PROPERTY(QString lfdnr READ getlfdnr WRITE setlfdnr) + T_DEFINE_PROPERTY(QString, lfdnr) + Q_PROPERTY(QString spec_title READ getspec_title WRITE setspec_title) + T_DEFINE_PROPERTY(QString, spec_title) + Q_PROPERTY(QString spec_desc READ getspec_desc WRITE setspec_desc) + T_DEFINE_PROPERTY(QString, spec_desc) + Q_PROPERTY(QString spec_version READ getspec_version WRITE setspec_version) + T_DEFINE_PROPERTY(QString, spec_version) + Q_PROPERTY(QString spec_release READ getspec_release WRITE setspec_release) + T_DEFINE_PROPERTY(QString, spec_release) + Q_PROPERTY(QString obj_sname READ getobj_sname WRITE setobj_sname) + T_DEFINE_PROPERTY(QString, obj_sname) + Q_PROPERTY(QString ac_classes READ getac_classes WRITE setac_classes) + T_DEFINE_PROPERTY(QString, ac_classes) + Q_PROPERTY(QString pc_classes READ getpc_classes WRITE setpc_classes) + T_DEFINE_PROPERTY(QString, pc_classes) + Q_PROPERTY(QString cat_class READ getcat_class WRITE setcat_class) + T_DEFINE_PROPERTY(QString, cat_class) + Q_PROPERTY(QString country READ getcountry WRITE setcountry) + T_DEFINE_PROPERTY(QString, country) + Q_PROPERTY(QString lang READ getlang WRITE setlang) + T_DEFINE_PROPERTY(QString, lang) + Q_PROPERTY(QByteArray spec_content READ getspec_content WRITE setspec_content) + T_DEFINE_PROPERTY(QByteArray, spec_content) + Q_PROPERTY(int spec_active READ getspec_active WRITE setspec_active) + T_DEFINE_PROPERTY(int, spec_active) +}; + +#endif // ANNEXDATAWASTEOBJECT_H diff --git a/models/sqlobjects/annexmetaobject.h b/models/sqlobjects/annexmetaobject.h new file mode 100644 index 0000000..9c11496 --- /dev/null +++ b/models/sqlobjects/annexmetaobject.h @@ -0,0 +1,71 @@ +#ifndef ANNEXMETAOBJECT_H +#define ANNEXMETAOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT AnnexMetaObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + int spec_data_id {0}; + QDateTime spec_created; + QDateTime spec_last_modified; + QDateTime spec_valid_start; + QDateTime spec_valid_end; + QString last_editor; + QString g_legacy; + QString responsibility; + QString spec_comment; + QString spec_marker; + QString groups; + + enum PropertyIndex { + Id = 0, + SpecDataId, + SpecCreated, + SpecLastModified, + SpecValidStart, + SpecValidEnd, + LastEditor, + GLegacy, + Responsibility, + SpecComment, + SpecMarker, + Groups, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("annex_meta"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(int spec_data_id READ getspec_data_id WRITE setspec_data_id) + T_DEFINE_PROPERTY(int, spec_data_id) + Q_PROPERTY(QDateTime spec_created READ getspec_created WRITE setspec_created) + T_DEFINE_PROPERTY(QDateTime, spec_created) + Q_PROPERTY(QDateTime spec_last_modified READ getspec_last_modified WRITE setspec_last_modified) + T_DEFINE_PROPERTY(QDateTime, spec_last_modified) + Q_PROPERTY(QDateTime spec_valid_start READ getspec_valid_start WRITE setspec_valid_start) + T_DEFINE_PROPERTY(QDateTime, spec_valid_start) + Q_PROPERTY(QDateTime spec_valid_end READ getspec_valid_end WRITE setspec_valid_end) + T_DEFINE_PROPERTY(QDateTime, spec_valid_end) + Q_PROPERTY(QString last_editor READ getlast_editor WRITE setlast_editor) + T_DEFINE_PROPERTY(QString, last_editor) + Q_PROPERTY(QString g_legacy READ getg_legacy WRITE setg_legacy) + T_DEFINE_PROPERTY(QString, g_legacy) + Q_PROPERTY(QString responsibility READ getresponsibility WRITE setresponsibility) + T_DEFINE_PROPERTY(QString, responsibility) + Q_PROPERTY(QString spec_comment READ getspec_comment WRITE setspec_comment) + T_DEFINE_PROPERTY(QString, spec_comment) + Q_PROPERTY(QString spec_marker READ getspec_marker WRITE setspec_marker) + T_DEFINE_PROPERTY(QString, spec_marker) + Q_PROPERTY(QString groups READ getgroups WRITE setgroups) + T_DEFINE_PROPERTY(QString, groups) +}; + +#endif // ANNEXMETAOBJECT_H diff --git a/models/sqlobjects/annexmetawasteobject.h b/models/sqlobjects/annexmetawasteobject.h new file mode 100644 index 0000000..0801271 --- /dev/null +++ b/models/sqlobjects/annexmetawasteobject.h @@ -0,0 +1,79 @@ +#ifndef ANNEXMETAWASTEOBJECT_H +#define ANNEXMETAWASTEOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT AnnexMetaWasteObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QDateTime changed_on; + int id_old {0}; + int spec_data_id {0}; + QDateTime spec_created; + QDateTime spec_last_modified; + QDateTime spec_valid_start; + QDateTime spec_valid_end; + QString last_editor; + QString g_legacy; + QString responsibility; + QString spec_comment; + QString spec_marker; + QString groups; + + enum PropertyIndex { + Id = 0, + ChangedOn, + IdOld, + SpecDataId, + SpecCreated, + SpecLastModified, + SpecValidStart, + SpecValidEnd, + LastEditor, + GLegacy, + Responsibility, + SpecComment, + SpecMarker, + Groups, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("annex_meta_waste"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QDateTime changed_on READ getchanged_on WRITE setchanged_on) + T_DEFINE_PROPERTY(QDateTime, changed_on) + Q_PROPERTY(int id_old READ getid_old WRITE setid_old) + T_DEFINE_PROPERTY(int, id_old) + Q_PROPERTY(int spec_data_id READ getspec_data_id WRITE setspec_data_id) + T_DEFINE_PROPERTY(int, spec_data_id) + Q_PROPERTY(QDateTime spec_created READ getspec_created WRITE setspec_created) + T_DEFINE_PROPERTY(QDateTime, spec_created) + Q_PROPERTY(QDateTime spec_last_modified READ getspec_last_modified WRITE setspec_last_modified) + T_DEFINE_PROPERTY(QDateTime, spec_last_modified) + Q_PROPERTY(QDateTime spec_valid_start READ getspec_valid_start WRITE setspec_valid_start) + T_DEFINE_PROPERTY(QDateTime, spec_valid_start) + Q_PROPERTY(QDateTime spec_valid_end READ getspec_valid_end WRITE setspec_valid_end) + T_DEFINE_PROPERTY(QDateTime, spec_valid_end) + Q_PROPERTY(QString last_editor READ getlast_editor WRITE setlast_editor) + T_DEFINE_PROPERTY(QString, last_editor) + Q_PROPERTY(QString g_legacy READ getg_legacy WRITE setg_legacy) + T_DEFINE_PROPERTY(QString, g_legacy) + Q_PROPERTY(QString responsibility READ getresponsibility WRITE setresponsibility) + T_DEFINE_PROPERTY(QString, responsibility) + Q_PROPERTY(QString spec_comment READ getspec_comment WRITE setspec_comment) + T_DEFINE_PROPERTY(QString, spec_comment) + Q_PROPERTY(QString spec_marker READ getspec_marker WRITE setspec_marker) + T_DEFINE_PROPERTY(QString, spec_marker) + Q_PROPERTY(QString groups READ getgroups WRITE setgroups) + T_DEFINE_PROPERTY(QString, groups) +}; + +#endif // ANNEXMETAWASTEOBJECT_H diff --git a/models/sqlobjects/appvarsobject.h b/models/sqlobjects/appvarsobject.h new file mode 100644 index 0000000..8574f19 --- /dev/null +++ b/models/sqlobjects/appvarsobject.h @@ -0,0 +1,47 @@ +#ifndef APPVARSOBJECT_H +#define APPVARSOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT AppVarsObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString std_type; + QString std_attr; + QString std_val_de; + QString std_val_en; + int active {0}; + + enum PropertyIndex { + Id = 0, + StdType, + StdAttr, + StdValDe, + StdValEn, + Active, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("app_vars"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString std_type READ getstd_type WRITE setstd_type) + T_DEFINE_PROPERTY(QString, std_type) + Q_PROPERTY(QString std_attr READ getstd_attr WRITE setstd_attr) + T_DEFINE_PROPERTY(QString, std_attr) + Q_PROPERTY(QString std_val_de READ getstd_val_de WRITE setstd_val_de) + T_DEFINE_PROPERTY(QString, std_val_de) + Q_PROPERTY(QString std_val_en READ getstd_val_en WRITE setstd_val_en) + T_DEFINE_PROPERTY(QString, std_val_en) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) +}; + +#endif // APPVARSOBJECT_H diff --git a/models/sqlobjects/catclassesobject.h b/models/sqlobjects/catclassesobject.h new file mode 100644 index 0000000..0c476ed --- /dev/null +++ b/models/sqlobjects/catclassesobject.h @@ -0,0 +1,67 @@ +#ifndef CATCLASSESOBJECT_H +#define CATCLASSESOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT CatClassesObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString cat_lname_de; + QString cat_sname_de; + QString desc_de; + QString cat_lname_en; + QString cat_sname_en; + QString desc_en; + QString class_type; + QString groups; + int sort {0}; + int active {0}; + + enum PropertyIndex { + Id = 0, + CatLnameDe, + CatSnameDe, + DescDe, + CatLnameEn, + CatSnameEn, + DescEn, + ClassType, + Groups, + Sort, + Active, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("cat_classes"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString cat_lname_de READ getcat_lname_de WRITE setcat_lname_de) + T_DEFINE_PROPERTY(QString, cat_lname_de) + Q_PROPERTY(QString cat_sname_de READ getcat_sname_de WRITE setcat_sname_de) + T_DEFINE_PROPERTY(QString, cat_sname_de) + Q_PROPERTY(QString desc_de READ getdesc_de WRITE setdesc_de) + T_DEFINE_PROPERTY(QString, desc_de) + Q_PROPERTY(QString cat_lname_en READ getcat_lname_en WRITE setcat_lname_en) + T_DEFINE_PROPERTY(QString, cat_lname_en) + Q_PROPERTY(QString cat_sname_en READ getcat_sname_en WRITE setcat_sname_en) + T_DEFINE_PROPERTY(QString, cat_sname_en) + Q_PROPERTY(QString desc_en READ getdesc_en WRITE setdesc_en) + T_DEFINE_PROPERTY(QString, desc_en) + Q_PROPERTY(QString class_type READ getclass_type WRITE setclass_type) + T_DEFINE_PROPERTY(QString, class_type) + Q_PROPERTY(QString groups READ getgroups WRITE setgroups) + T_DEFINE_PROPERTY(QString, groups) + Q_PROPERTY(int sort READ getsort WRITE setsort) + T_DEFINE_PROPERTY(int, sort) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) +}; + +#endif // CATCLASSESOBJECT_H diff --git a/models/sqlobjects/glossarobject.h b/models/sqlobjects/glossarobject.h new file mode 100644 index 0000000..8e94fa0 --- /dev/null +++ b/models/sqlobjects/glossarobject.h @@ -0,0 +1,55 @@ +#ifndef GLOSSAROBJECT_H +#define GLOSSAROBJECT_H + +#include +#include + + +class T_MODEL_EXPORT GlossarObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString acronym; + QString term_de; + QString term_en; + QString desc_de; + QString desc_en; + int sort {0}; + int active {0}; + + enum PropertyIndex { + Id = 0, + Acronym, + TermDe, + TermEn, + DescDe, + DescEn, + Sort, + Active, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("glossar"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString acronym READ getacronym WRITE setacronym) + T_DEFINE_PROPERTY(QString, acronym) + Q_PROPERTY(QString term_de READ getterm_de WRITE setterm_de) + T_DEFINE_PROPERTY(QString, term_de) + Q_PROPERTY(QString term_en READ getterm_en WRITE setterm_en) + T_DEFINE_PROPERTY(QString, term_en) + Q_PROPERTY(QString desc_de READ getdesc_de WRITE setdesc_de) + T_DEFINE_PROPERTY(QString, desc_de) + Q_PROPERTY(QString desc_en READ getdesc_en WRITE setdesc_en) + T_DEFINE_PROPERTY(QString, desc_en) + Q_PROPERTY(int sort READ getsort WRITE setsort) + T_DEFINE_PROPERTY(int, sort) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) +}; + +#endif // GLOSSAROBJECT_H diff --git a/models/sqlobjects/itisgroupsobject.h b/models/sqlobjects/itisgroupsobject.h new file mode 100644 index 0000000..1fe6270 --- /dev/null +++ b/models/sqlobjects/itisgroupsobject.h @@ -0,0 +1,39 @@ +#ifndef ITISGROUPSOBJECT_H +#define ITISGROUPSOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT ItisGroupsObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString groupname; + QString groupdesc; + int active {0}; + + enum PropertyIndex { + Id = 0, + Groupname, + Groupdesc, + Active, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("itis_groups"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString groupname READ getgroupname WRITE setgroupname) + T_DEFINE_PROPERTY(QString, groupname) + Q_PROPERTY(QString groupdesc READ getgroupdesc WRITE setgroupdesc) + T_DEFINE_PROPERTY(QString, groupdesc) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) +}; + +#endif // ITISGROUPSOBJECT_H diff --git a/models/sqlobjects/itisnewsobject.h b/models/sqlobjects/itisnewsobject.h new file mode 100644 index 0000000..26cf4c3 --- /dev/null +++ b/models/sqlobjects/itisnewsobject.h @@ -0,0 +1,79 @@ +#ifndef ITISNEWSOBJECT_H +#define ITISNEWSOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT ItisNewsObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString news_type; + QString news_type_sub; + QString news_title_de; + QString news_title_en; + QString news_desc_de; + QString news_desc_en; + QString news_text_de; + QString news_text_en; + QString news_prio; + QString author; + QDateTime news_created; + QDateTime news_valid_start; + QDateTime news_valid_end; + + enum PropertyIndex { + Id = 0, + NewsType, + NewsTypeSub, + NewsTitleDe, + NewsTitleEn, + NewsDescDe, + NewsDescEn, + NewsTextDe, + NewsTextEn, + NewsPrio, + Author, + NewsCreated, + NewsValidStart, + NewsValidEnd, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("itis_news"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString news_type READ getnews_type WRITE setnews_type) + T_DEFINE_PROPERTY(QString, news_type) + Q_PROPERTY(QString news_type_sub READ getnews_type_sub WRITE setnews_type_sub) + T_DEFINE_PROPERTY(QString, news_type_sub) + Q_PROPERTY(QString news_title_de READ getnews_title_de WRITE setnews_title_de) + T_DEFINE_PROPERTY(QString, news_title_de) + Q_PROPERTY(QString news_title_en READ getnews_title_en WRITE setnews_title_en) + T_DEFINE_PROPERTY(QString, news_title_en) + Q_PROPERTY(QString news_desc_de READ getnews_desc_de WRITE setnews_desc_de) + T_DEFINE_PROPERTY(QString, news_desc_de) + Q_PROPERTY(QString news_desc_en READ getnews_desc_en WRITE setnews_desc_en) + T_DEFINE_PROPERTY(QString, news_desc_en) + Q_PROPERTY(QString news_text_de READ getnews_text_de WRITE setnews_text_de) + T_DEFINE_PROPERTY(QString, news_text_de) + Q_PROPERTY(QString news_text_en READ getnews_text_en WRITE setnews_text_en) + T_DEFINE_PROPERTY(QString, news_text_en) + Q_PROPERTY(QString news_prio READ getnews_prio WRITE setnews_prio) + T_DEFINE_PROPERTY(QString, news_prio) + Q_PROPERTY(QString author READ getauthor WRITE setauthor) + T_DEFINE_PROPERTY(QString, author) + Q_PROPERTY(QDateTime news_created READ getnews_created WRITE setnews_created) + T_DEFINE_PROPERTY(QDateTime, news_created) + Q_PROPERTY(QDateTime news_valid_start READ getnews_valid_start WRITE setnews_valid_start) + T_DEFINE_PROPERTY(QDateTime, news_valid_start) + Q_PROPERTY(QDateTime news_valid_end READ getnews_valid_end WRITE setnews_valid_end) + T_DEFINE_PROPERTY(QDateTime, news_valid_end) +}; + +#endif // ITISNEWSOBJECT_H diff --git a/models/sqlobjects/itisuserobject.h b/models/sqlobjects/itisuserobject.h new file mode 100644 index 0000000..9260696 --- /dev/null +++ b/models/sqlobjects/itisuserobject.h @@ -0,0 +1,87 @@ +#ifndef ITISUSEROBJECT_H +#define ITISUSEROBJECT_H + +#include +#include + + +class T_MODEL_EXPORT ItisUserObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString username; + QString firstname; + QString surname; + QString email; + QString company; + QString user_timezone; + QString groupname; + QString groups; + QByteArray password; + QDateTime last_login; + QDateTime login_time; + QDateTime logged_out; + QDateTime pwd_changed_time; + int pwd_change_force {0}; + int active {0}; + + enum PropertyIndex { + Id = 0, + Username, + Firstname, + Surname, + Email, + Company, + UserTimezone, + Groupname, + Groups, + Password, + LastLogin, + LoginTime, + LoggedOut, + PwdChangedTime, + PwdChangeForce, + Active, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("itis_user"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString username READ getusername WRITE setusername) + T_DEFINE_PROPERTY(QString, username) + Q_PROPERTY(QString firstname READ getfirstname WRITE setfirstname) + T_DEFINE_PROPERTY(QString, firstname) + Q_PROPERTY(QString surname READ getsurname WRITE setsurname) + T_DEFINE_PROPERTY(QString, surname) + Q_PROPERTY(QString email READ getemail WRITE setemail) + T_DEFINE_PROPERTY(QString, email) + Q_PROPERTY(QString company READ getcompany WRITE setcompany) + T_DEFINE_PROPERTY(QString, company) + Q_PROPERTY(QString user_timezone READ getuser_timezone WRITE setuser_timezone) + T_DEFINE_PROPERTY(QString, user_timezone) + Q_PROPERTY(QString groupname READ getgroupname WRITE setgroupname) + T_DEFINE_PROPERTY(QString, groupname) + Q_PROPERTY(QString groups READ getgroups WRITE setgroups) + T_DEFINE_PROPERTY(QString, groups) + Q_PROPERTY(QByteArray password READ getpassword WRITE setpassword) + T_DEFINE_PROPERTY(QByteArray, password) + Q_PROPERTY(QDateTime last_login READ getlast_login WRITE setlast_login) + T_DEFINE_PROPERTY(QDateTime, last_login) + Q_PROPERTY(QDateTime login_time READ getlogin_time WRITE setlogin_time) + T_DEFINE_PROPERTY(QDateTime, login_time) + Q_PROPERTY(QDateTime logged_out READ getlogged_out WRITE setlogged_out) + T_DEFINE_PROPERTY(QDateTime, logged_out) + Q_PROPERTY(QDateTime pwd_changed_time READ getpwd_changed_time WRITE setpwd_changed_time) + T_DEFINE_PROPERTY(QDateTime, pwd_changed_time) + Q_PROPERTY(int pwd_change_force READ getpwd_change_force WRITE setpwd_change_force) + T_DEFINE_PROPERTY(int, pwd_change_force) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) +}; + +#endif // ITISUSEROBJECT_H diff --git a/models/sqlobjects/lenkinfoobject.h b/models/sqlobjects/lenkinfoobject.h new file mode 100644 index 0000000..2f2509d --- /dev/null +++ b/models/sqlobjects/lenkinfoobject.h @@ -0,0 +1,95 @@ +#ifndef LENKINFOOBJECT_H +#define LENKINFOOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT LenkinfoObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString spec_obj; + QString spec_title; + int ac_class {0}; + int pc_class {0}; + QString country; + QString lang; + QString lenk_version; + QString lenk_status; + QDateTime lenk_valid_startdate; + QString lenk_departments; + QString lenk_content; + QString lenk_creator; + QDateTime lenk_creator_date; + QString lenk_auditor; + QDateTime lenk_auditor_date; + QString lenk_approver; + QDateTime lenk_approver_date; + + enum PropertyIndex { + Id = 0, + SpecObj, + SpecTitle, + AcClass, + PcClass, + Country, + Lang, + LenkVersion, + LenkStatus, + LenkValidStartdate, + LenkDepartments, + LenkContent, + LenkCreator, + LenkCreatorDate, + LenkAuditor, + LenkAuditorDate, + LenkApprover, + LenkApproverDate, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("lenkinfo"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString spec_obj READ getspec_obj WRITE setspec_obj) + T_DEFINE_PROPERTY(QString, spec_obj) + Q_PROPERTY(QString spec_title READ getspec_title WRITE setspec_title) + T_DEFINE_PROPERTY(QString, spec_title) + Q_PROPERTY(int ac_class READ getac_class WRITE setac_class) + T_DEFINE_PROPERTY(int, ac_class) + Q_PROPERTY(int pc_class READ getpc_class WRITE setpc_class) + T_DEFINE_PROPERTY(int, pc_class) + Q_PROPERTY(QString country READ getcountry WRITE setcountry) + T_DEFINE_PROPERTY(QString, country) + Q_PROPERTY(QString lang READ getlang WRITE setlang) + T_DEFINE_PROPERTY(QString, lang) + Q_PROPERTY(QString lenk_version READ getlenk_version WRITE setlenk_version) + T_DEFINE_PROPERTY(QString, lenk_version) + Q_PROPERTY(QString lenk_status READ getlenk_status WRITE setlenk_status) + T_DEFINE_PROPERTY(QString, lenk_status) + Q_PROPERTY(QDateTime lenk_valid_startdate READ getlenk_valid_startdate WRITE setlenk_valid_startdate) + T_DEFINE_PROPERTY(QDateTime, lenk_valid_startdate) + Q_PROPERTY(QString lenk_departments READ getlenk_departments WRITE setlenk_departments) + T_DEFINE_PROPERTY(QString, lenk_departments) + Q_PROPERTY(QString lenk_content READ getlenk_content WRITE setlenk_content) + T_DEFINE_PROPERTY(QString, lenk_content) + Q_PROPERTY(QString lenk_creator READ getlenk_creator WRITE setlenk_creator) + T_DEFINE_PROPERTY(QString, lenk_creator) + Q_PROPERTY(QDateTime lenk_creator_date READ getlenk_creator_date WRITE setlenk_creator_date) + T_DEFINE_PROPERTY(QDateTime, lenk_creator_date) + Q_PROPERTY(QString lenk_auditor READ getlenk_auditor WRITE setlenk_auditor) + T_DEFINE_PROPERTY(QString, lenk_auditor) + Q_PROPERTY(QDateTime lenk_auditor_date READ getlenk_auditor_date WRITE setlenk_auditor_date) + T_DEFINE_PROPERTY(QDateTime, lenk_auditor_date) + Q_PROPERTY(QString lenk_approver READ getlenk_approver WRITE setlenk_approver) + T_DEFINE_PROPERTY(QString, lenk_approver) + Q_PROPERTY(QDateTime lenk_approver_date READ getlenk_approver_date WRITE setlenk_approver_date) + T_DEFINE_PROPERTY(QDateTime, lenk_approver_date) +}; + +#endif // LENKINFOOBJECT_H diff --git a/models/sqlobjects/objectsobject.h b/models/sqlobjects/objectsobject.h new file mode 100644 index 0000000..24de94d --- /dev/null +++ b/models/sqlobjects/objectsobject.h @@ -0,0 +1,59 @@ +#ifndef OBJECTSOBJECT_H +#define OBJECTSOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT ObjectsObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString obj_sname; + QString obj_lname_de; + QString desc_de; + QString obj_lname_en; + QString desc_en; + int sort {0}; + int active {0}; + QString groups; + + enum PropertyIndex { + Id = 0, + ObjSname, + ObjLnameDe, + DescDe, + ObjLnameEn, + DescEn, + Sort, + Active, + Groups, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("objects"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString obj_sname READ getobj_sname WRITE setobj_sname) + T_DEFINE_PROPERTY(QString, obj_sname) + Q_PROPERTY(QString obj_lname_de READ getobj_lname_de WRITE setobj_lname_de) + T_DEFINE_PROPERTY(QString, obj_lname_de) + Q_PROPERTY(QString desc_de READ getdesc_de WRITE setdesc_de) + T_DEFINE_PROPERTY(QString, desc_de) + Q_PROPERTY(QString obj_lname_en READ getobj_lname_en WRITE setobj_lname_en) + T_DEFINE_PROPERTY(QString, obj_lname_en) + Q_PROPERTY(QString desc_en READ getdesc_en WRITE setdesc_en) + T_DEFINE_PROPERTY(QString, desc_en) + Q_PROPERTY(int sort READ getsort WRITE setsort) + T_DEFINE_PROPERTY(int, sort) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) + Q_PROPERTY(QString groups READ getgroups WRITE setgroups) + T_DEFINE_PROPERTY(QString, groups) +}; + +#endif // OBJECTSOBJECT_H diff --git a/models/sqlobjects/pcclassesobject.h b/models/sqlobjects/pcclassesobject.h new file mode 100644 index 0000000..a8436d4 --- /dev/null +++ b/models/sqlobjects/pcclassesobject.h @@ -0,0 +1,43 @@ +#ifndef PCCLASSESOBJECT_H +#define PCCLASSESOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT PcClassesObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString obj_sname; + int pc_class {0}; + QString class_type; + int active {0}; + + enum PropertyIndex { + Id = 0, + ObjSname, + PcClass, + ClassType, + Active, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("pc_classes"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString obj_sname READ getobj_sname WRITE setobj_sname) + T_DEFINE_PROPERTY(QString, obj_sname) + Q_PROPERTY(int pc_class READ getpc_class WRITE setpc_class) + T_DEFINE_PROPERTY(int, pc_class) + Q_PROPERTY(QString class_type READ getclass_type WRITE setclass_type) + T_DEFINE_PROPERTY(QString, class_type) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) +}; + +#endif // PCCLASSESOBJECT_H diff --git a/models/sqlobjects/releaseannexobject.h b/models/sqlobjects/releaseannexobject.h new file mode 100644 index 0000000..962c4f6 --- /dev/null +++ b/models/sqlobjects/releaseannexobject.h @@ -0,0 +1,123 @@ +#ifndef RELEASEANNEXOBJECT_H +#define RELEASEANNEXOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT ReleaseAnnexObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString lfdnr; + QString spec_title; + QString spec_desc; + QString spec_version; + QString release_version; + QString spec_release; + QString obj_sname; + QString ac_class; + QString pc_class; + QString cat_class; + QString country; + QString lang; + QByteArray spec_content; + QDateTime spec_created; + QDateTime spec_last_modified; + QDateTime spec_valid_start; + QDateTime spec_valid_end; + QString last_editor; + QString g_legacy; + QString responsibility; + QString spec_comment; + QString spec_marker; + QString groups; + int spec_active {0}; + + enum PropertyIndex { + Id = 0, + Lfdnr, + SpecTitle, + SpecDesc, + SpecVersion, + ReleaseVersion, + SpecRelease, + ObjSname, + AcClass, + PcClass, + CatClass, + Country, + Lang, + SpecContent, + SpecCreated, + SpecLastModified, + SpecValidStart, + SpecValidEnd, + LastEditor, + GLegacy, + Responsibility, + SpecComment, + SpecMarker, + Groups, + SpecActive, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("release_annex"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString lfdnr READ getlfdnr WRITE setlfdnr) + T_DEFINE_PROPERTY(QString, lfdnr) + Q_PROPERTY(QString spec_title READ getspec_title WRITE setspec_title) + T_DEFINE_PROPERTY(QString, spec_title) + Q_PROPERTY(QString spec_desc READ getspec_desc WRITE setspec_desc) + T_DEFINE_PROPERTY(QString, spec_desc) + Q_PROPERTY(QString spec_version READ getspec_version WRITE setspec_version) + T_DEFINE_PROPERTY(QString, spec_version) + Q_PROPERTY(QString release_version READ getrelease_version WRITE setrelease_version) + T_DEFINE_PROPERTY(QString, release_version) + Q_PROPERTY(QString spec_release READ getspec_release WRITE setspec_release) + T_DEFINE_PROPERTY(QString, spec_release) + Q_PROPERTY(QString obj_sname READ getobj_sname WRITE setobj_sname) + T_DEFINE_PROPERTY(QString, obj_sname) + Q_PROPERTY(QString ac_class READ getac_class WRITE setac_class) + T_DEFINE_PROPERTY(QString, ac_class) + Q_PROPERTY(QString pc_class READ getpc_class WRITE setpc_class) + T_DEFINE_PROPERTY(QString, pc_class) + Q_PROPERTY(QString cat_class READ getcat_class WRITE setcat_class) + T_DEFINE_PROPERTY(QString, cat_class) + Q_PROPERTY(QString country READ getcountry WRITE setcountry) + T_DEFINE_PROPERTY(QString, country) + Q_PROPERTY(QString lang READ getlang WRITE setlang) + T_DEFINE_PROPERTY(QString, lang) + Q_PROPERTY(QByteArray spec_content READ getspec_content WRITE setspec_content) + T_DEFINE_PROPERTY(QByteArray, spec_content) + Q_PROPERTY(QDateTime spec_created READ getspec_created WRITE setspec_created) + T_DEFINE_PROPERTY(QDateTime, spec_created) + Q_PROPERTY(QDateTime spec_last_modified READ getspec_last_modified WRITE setspec_last_modified) + T_DEFINE_PROPERTY(QDateTime, spec_last_modified) + Q_PROPERTY(QDateTime spec_valid_start READ getspec_valid_start WRITE setspec_valid_start) + T_DEFINE_PROPERTY(QDateTime, spec_valid_start) + Q_PROPERTY(QDateTime spec_valid_end READ getspec_valid_end WRITE setspec_valid_end) + T_DEFINE_PROPERTY(QDateTime, spec_valid_end) + Q_PROPERTY(QString last_editor READ getlast_editor WRITE setlast_editor) + T_DEFINE_PROPERTY(QString, last_editor) + Q_PROPERTY(QString g_legacy READ getg_legacy WRITE setg_legacy) + T_DEFINE_PROPERTY(QString, g_legacy) + Q_PROPERTY(QString responsibility READ getresponsibility WRITE setresponsibility) + T_DEFINE_PROPERTY(QString, responsibility) + Q_PROPERTY(QString spec_comment READ getspec_comment WRITE setspec_comment) + T_DEFINE_PROPERTY(QString, spec_comment) + Q_PROPERTY(QString spec_marker READ getspec_marker WRITE setspec_marker) + T_DEFINE_PROPERTY(QString, spec_marker) + Q_PROPERTY(QString groups READ getgroups WRITE setgroups) + T_DEFINE_PROPERTY(QString, groups) + Q_PROPERTY(int spec_active READ getspec_active WRITE setspec_active) + T_DEFINE_PROPERTY(int, spec_active) +}; + +#endif // RELEASEANNEXOBJECT_H diff --git a/models/sqlobjects/releasemgmtobject.h b/models/sqlobjects/releasemgmtobject.h new file mode 100644 index 0000000..817b4cc --- /dev/null +++ b/models/sqlobjects/releasemgmtobject.h @@ -0,0 +1,103 @@ +#ifndef RELEASEMGMTOBJECT_H +#define RELEASEMGMTOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT ReleaseMgmtObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString obj_sname; + QString spec_version; + QString ac_classes; + QString pc_classes; + QString cat_class; + QString country; + QString lang; + QString doc_type; + QString rel_requester; + QDateTime relrequest_date; + QString rel_creator; + QDateTime relcreator_decisdate; + QString rel_inspector; + QDateTime relinspect_decisdate; + QString rel_approver; + QDateTime relapprov_decisdate; + QDateTime ci_date; + QDateTime cd_date; + QDateTime cdd_date; + + enum PropertyIndex { + Id = 0, + ObjSname, + SpecVersion, + AcClasses, + PcClasses, + CatClass, + Country, + Lang, + DocType, + RelRequester, + RelrequestDate, + RelCreator, + RelcreatorDecisdate, + RelInspector, + RelinspectDecisdate, + RelApprover, + RelapprovDecisdate, + CiDate, + CdDate, + CddDate, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("release_mgmt"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString obj_sname READ getobj_sname WRITE setobj_sname) + T_DEFINE_PROPERTY(QString, obj_sname) + Q_PROPERTY(QString spec_version READ getspec_version WRITE setspec_version) + T_DEFINE_PROPERTY(QString, spec_version) + Q_PROPERTY(QString ac_classes READ getac_classes WRITE setac_classes) + T_DEFINE_PROPERTY(QString, ac_classes) + Q_PROPERTY(QString pc_classes READ getpc_classes WRITE setpc_classes) + T_DEFINE_PROPERTY(QString, pc_classes) + Q_PROPERTY(QString cat_class READ getcat_class WRITE setcat_class) + T_DEFINE_PROPERTY(QString, cat_class) + Q_PROPERTY(QString country READ getcountry WRITE setcountry) + T_DEFINE_PROPERTY(QString, country) + Q_PROPERTY(QString lang READ getlang WRITE setlang) + T_DEFINE_PROPERTY(QString, lang) + Q_PROPERTY(QString doc_type READ getdoc_type WRITE setdoc_type) + T_DEFINE_PROPERTY(QString, doc_type) + Q_PROPERTY(QString rel_requester READ getrel_requester WRITE setrel_requester) + T_DEFINE_PROPERTY(QString, rel_requester) + Q_PROPERTY(QDateTime relrequest_date READ getrelrequest_date WRITE setrelrequest_date) + T_DEFINE_PROPERTY(QDateTime, relrequest_date) + Q_PROPERTY(QString rel_creator READ getrel_creator WRITE setrel_creator) + T_DEFINE_PROPERTY(QString, rel_creator) + Q_PROPERTY(QDateTime relcreator_decisdate READ getrelcreator_decisdate WRITE setrelcreator_decisdate) + T_DEFINE_PROPERTY(QDateTime, relcreator_decisdate) + Q_PROPERTY(QString rel_inspector READ getrel_inspector WRITE setrel_inspector) + T_DEFINE_PROPERTY(QString, rel_inspector) + Q_PROPERTY(QDateTime relinspect_decisdate READ getrelinspect_decisdate WRITE setrelinspect_decisdate) + T_DEFINE_PROPERTY(QDateTime, relinspect_decisdate) + Q_PROPERTY(QString rel_approver READ getrel_approver WRITE setrel_approver) + T_DEFINE_PROPERTY(QString, rel_approver) + Q_PROPERTY(QDateTime relapprov_decisdate READ getrelapprov_decisdate WRITE setrelapprov_decisdate) + T_DEFINE_PROPERTY(QDateTime, relapprov_decisdate) + Q_PROPERTY(QDateTime ci_date READ getci_date WRITE setci_date) + T_DEFINE_PROPERTY(QDateTime, ci_date) + Q_PROPERTY(QDateTime cd_date READ getcd_date WRITE setcd_date) + T_DEFINE_PROPERTY(QDateTime, cd_date) + Q_PROPERTY(QDateTime cdd_date READ getcdd_date WRITE setcdd_date) + T_DEFINE_PROPERTY(QDateTime, cdd_date) +}; + +#endif // RELEASEMGMTOBJECT_H diff --git a/models/sqlobjects/standardsdatacommentsobject.h b/models/sqlobjects/standardsdatacommentsobject.h new file mode 100644 index 0000000..8488969 --- /dev/null +++ b/models/sqlobjects/standardsdatacommentsobject.h @@ -0,0 +1,51 @@ +#ifndef STANDARDSDATACOMMENTSOBJECT_H +#define STANDARDSDATACOMMENTSOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT StandardsDataCommentsObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QDateTime comment_created; + int spec_id {0}; + QString spec_title; + QString spec_version; + QString user_comment; + QString username; + + enum PropertyIndex { + Id = 0, + CommentCreated, + SpecId, + SpecTitle, + SpecVersion, + UserComment, + Username, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("standards_data_comments"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QDateTime comment_created READ getcomment_created WRITE setcomment_created) + T_DEFINE_PROPERTY(QDateTime, comment_created) + Q_PROPERTY(int spec_id READ getspec_id WRITE setspec_id) + T_DEFINE_PROPERTY(int, spec_id) + Q_PROPERTY(QString spec_title READ getspec_title WRITE setspec_title) + T_DEFINE_PROPERTY(QString, spec_title) + Q_PROPERTY(QString spec_version READ getspec_version WRITE setspec_version) + T_DEFINE_PROPERTY(QString, spec_version) + Q_PROPERTY(QString user_comment READ getuser_comment WRITE setuser_comment) + T_DEFINE_PROPERTY(QString, user_comment) + Q_PROPERTY(QString username READ getusername WRITE setusername) + T_DEFINE_PROPERTY(QString, username) +}; + +#endif // STANDARDSDATACOMMENTSOBJECT_H diff --git a/models/sqlobjects/standardsdataobject.h b/models/sqlobjects/standardsdataobject.h new file mode 100644 index 0000000..d7dbea4 --- /dev/null +++ b/models/sqlobjects/standardsdataobject.h @@ -0,0 +1,79 @@ +#ifndef STANDARDSDATAOBJECT_H +#define STANDARDSDATAOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT StandardsDataObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString lfdnr; + QString spec_title; + QString spec_desc; + QString spec_version; + QString spec_release; + QString obj_sname; + QString ac_classes; + QString pc_classes; + QString cat_class; + QString country; + QString lang; + QByteArray spec_content; + int spec_active {0}; + + enum PropertyIndex { + Id = 0, + Lfdnr, + SpecTitle, + SpecDesc, + SpecVersion, + SpecRelease, + ObjSname, + AcClasses, + PcClasses, + CatClass, + Country, + Lang, + SpecContent, + SpecActive, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("standards_data"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString lfdnr READ getlfdnr WRITE setlfdnr) + T_DEFINE_PROPERTY(QString, lfdnr) + Q_PROPERTY(QString spec_title READ getspec_title WRITE setspec_title) + T_DEFINE_PROPERTY(QString, spec_title) + Q_PROPERTY(QString spec_desc READ getspec_desc WRITE setspec_desc) + T_DEFINE_PROPERTY(QString, spec_desc) + Q_PROPERTY(QString spec_version READ getspec_version WRITE setspec_version) + T_DEFINE_PROPERTY(QString, spec_version) + Q_PROPERTY(QString spec_release READ getspec_release WRITE setspec_release) + T_DEFINE_PROPERTY(QString, spec_release) + Q_PROPERTY(QString obj_sname READ getobj_sname WRITE setobj_sname) + T_DEFINE_PROPERTY(QString, obj_sname) + Q_PROPERTY(QString ac_classes READ getac_classes WRITE setac_classes) + T_DEFINE_PROPERTY(QString, ac_classes) + Q_PROPERTY(QString pc_classes READ getpc_classes WRITE setpc_classes) + T_DEFINE_PROPERTY(QString, pc_classes) + Q_PROPERTY(QString cat_class READ getcat_class WRITE setcat_class) + T_DEFINE_PROPERTY(QString, cat_class) + Q_PROPERTY(QString country READ getcountry WRITE setcountry) + T_DEFINE_PROPERTY(QString, country) + Q_PROPERTY(QString lang READ getlang WRITE setlang) + T_DEFINE_PROPERTY(QString, lang) + Q_PROPERTY(QByteArray spec_content READ getspec_content WRITE setspec_content) + T_DEFINE_PROPERTY(QByteArray, spec_content) + Q_PROPERTY(int spec_active READ getspec_active WRITE setspec_active) + T_DEFINE_PROPERTY(int, spec_active) +}; + +#endif // STANDARDSDATAOBJECT_H diff --git a/models/sqlobjects/standardsdatawasteobject.h b/models/sqlobjects/standardsdatawasteobject.h new file mode 100644 index 0000000..244c3c5 --- /dev/null +++ b/models/sqlobjects/standardsdatawasteobject.h @@ -0,0 +1,87 @@ +#ifndef STANDARDSDATAWASTEOBJECT_H +#define STANDARDSDATAWASTEOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT StandardsDataWasteObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QDateTime changed_on; + int id_old {0}; + QString lfdnr; + QString spec_title; + QString spec_desc; + QString spec_version; + QString spec_release; + QString obj_sname; + QString ac_classes; + QString pc_classes; + QString cat_class; + QString country; + QString lang; + QByteArray spec_content; + int spec_active {0}; + + enum PropertyIndex { + Id = 0, + ChangedOn, + IdOld, + Lfdnr, + SpecTitle, + SpecDesc, + SpecVersion, + SpecRelease, + ObjSname, + AcClasses, + PcClasses, + CatClass, + Country, + Lang, + SpecContent, + SpecActive, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("standards_data_waste"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QDateTime changed_on READ getchanged_on WRITE setchanged_on) + T_DEFINE_PROPERTY(QDateTime, changed_on) + Q_PROPERTY(int id_old READ getid_old WRITE setid_old) + T_DEFINE_PROPERTY(int, id_old) + Q_PROPERTY(QString lfdnr READ getlfdnr WRITE setlfdnr) + T_DEFINE_PROPERTY(QString, lfdnr) + Q_PROPERTY(QString spec_title READ getspec_title WRITE setspec_title) + T_DEFINE_PROPERTY(QString, spec_title) + Q_PROPERTY(QString spec_desc READ getspec_desc WRITE setspec_desc) + T_DEFINE_PROPERTY(QString, spec_desc) + Q_PROPERTY(QString spec_version READ getspec_version WRITE setspec_version) + T_DEFINE_PROPERTY(QString, spec_version) + Q_PROPERTY(QString spec_release READ getspec_release WRITE setspec_release) + T_DEFINE_PROPERTY(QString, spec_release) + Q_PROPERTY(QString obj_sname READ getobj_sname WRITE setobj_sname) + T_DEFINE_PROPERTY(QString, obj_sname) + Q_PROPERTY(QString ac_classes READ getac_classes WRITE setac_classes) + T_DEFINE_PROPERTY(QString, ac_classes) + Q_PROPERTY(QString pc_classes READ getpc_classes WRITE setpc_classes) + T_DEFINE_PROPERTY(QString, pc_classes) + Q_PROPERTY(QString cat_class READ getcat_class WRITE setcat_class) + T_DEFINE_PROPERTY(QString, cat_class) + Q_PROPERTY(QString country READ getcountry WRITE setcountry) + T_DEFINE_PROPERTY(QString, country) + Q_PROPERTY(QString lang READ getlang WRITE setlang) + T_DEFINE_PROPERTY(QString, lang) + Q_PROPERTY(QByteArray spec_content READ getspec_content WRITE setspec_content) + T_DEFINE_PROPERTY(QByteArray, spec_content) + Q_PROPERTY(int spec_active READ getspec_active WRITE setspec_active) + T_DEFINE_PROPERTY(int, spec_active) +}; + +#endif // STANDARDSDATAWASTEOBJECT_H diff --git a/models/sqlobjects/standardsmetaobject.h b/models/sqlobjects/standardsmetaobject.h new file mode 100644 index 0000000..2ea23df --- /dev/null +++ b/models/sqlobjects/standardsmetaobject.h @@ -0,0 +1,71 @@ +#ifndef STANDARDSMETAOBJECT_H +#define STANDARDSMETAOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT StandardsMetaObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + int spec_data_id {0}; + QDateTime spec_created; + QDateTime spec_last_modified; + QDateTime spec_valid_start; + QDateTime spec_valid_end; + QString last_editor; + QString g_legacy; + QString responsibility; + QString spec_comment; + QString spec_marker; + QString groups; + + enum PropertyIndex { + Id = 0, + SpecDataId, + SpecCreated, + SpecLastModified, + SpecValidStart, + SpecValidEnd, + LastEditor, + GLegacy, + Responsibility, + SpecComment, + SpecMarker, + Groups, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("standards_meta"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(int spec_data_id READ getspec_data_id WRITE setspec_data_id) + T_DEFINE_PROPERTY(int, spec_data_id) + Q_PROPERTY(QDateTime spec_created READ getspec_created WRITE setspec_created) + T_DEFINE_PROPERTY(QDateTime, spec_created) + Q_PROPERTY(QDateTime spec_last_modified READ getspec_last_modified WRITE setspec_last_modified) + T_DEFINE_PROPERTY(QDateTime, spec_last_modified) + Q_PROPERTY(QDateTime spec_valid_start READ getspec_valid_start WRITE setspec_valid_start) + T_DEFINE_PROPERTY(QDateTime, spec_valid_start) + Q_PROPERTY(QDateTime spec_valid_end READ getspec_valid_end WRITE setspec_valid_end) + T_DEFINE_PROPERTY(QDateTime, spec_valid_end) + Q_PROPERTY(QString last_editor READ getlast_editor WRITE setlast_editor) + T_DEFINE_PROPERTY(QString, last_editor) + Q_PROPERTY(QString g_legacy READ getg_legacy WRITE setg_legacy) + T_DEFINE_PROPERTY(QString, g_legacy) + Q_PROPERTY(QString responsibility READ getresponsibility WRITE setresponsibility) + T_DEFINE_PROPERTY(QString, responsibility) + Q_PROPERTY(QString spec_comment READ getspec_comment WRITE setspec_comment) + T_DEFINE_PROPERTY(QString, spec_comment) + Q_PROPERTY(QString spec_marker READ getspec_marker WRITE setspec_marker) + T_DEFINE_PROPERTY(QString, spec_marker) + Q_PROPERTY(QString groups READ getgroups WRITE setgroups) + T_DEFINE_PROPERTY(QString, groups) +}; + +#endif // STANDARDSMETAOBJECT_H diff --git a/models/sqlobjects/standardsmetawasteobject.h b/models/sqlobjects/standardsmetawasteobject.h new file mode 100644 index 0000000..78fd8a8 --- /dev/null +++ b/models/sqlobjects/standardsmetawasteobject.h @@ -0,0 +1,79 @@ +#ifndef STANDARDSMETAWASTEOBJECT_H +#define STANDARDSMETAWASTEOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT StandardsMetaWasteObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QDateTime changed_on; + int id_old {0}; + int spec_data_id {0}; + QDateTime spec_created; + QDateTime spec_last_modified; + QDateTime spec_valid_start; + QDateTime spec_valid_end; + QString last_editor; + QString g_legacy; + QString responsibility; + QString spec_comment; + QString spec_marker; + QString groups; + + enum PropertyIndex { + Id = 0, + ChangedOn, + IdOld, + SpecDataId, + SpecCreated, + SpecLastModified, + SpecValidStart, + SpecValidEnd, + LastEditor, + GLegacy, + Responsibility, + SpecComment, + SpecMarker, + Groups, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("standards_meta_waste"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QDateTime changed_on READ getchanged_on WRITE setchanged_on) + T_DEFINE_PROPERTY(QDateTime, changed_on) + Q_PROPERTY(int id_old READ getid_old WRITE setid_old) + T_DEFINE_PROPERTY(int, id_old) + Q_PROPERTY(int spec_data_id READ getspec_data_id WRITE setspec_data_id) + T_DEFINE_PROPERTY(int, spec_data_id) + Q_PROPERTY(QDateTime spec_created READ getspec_created WRITE setspec_created) + T_DEFINE_PROPERTY(QDateTime, spec_created) + Q_PROPERTY(QDateTime spec_last_modified READ getspec_last_modified WRITE setspec_last_modified) + T_DEFINE_PROPERTY(QDateTime, spec_last_modified) + Q_PROPERTY(QDateTime spec_valid_start READ getspec_valid_start WRITE setspec_valid_start) + T_DEFINE_PROPERTY(QDateTime, spec_valid_start) + Q_PROPERTY(QDateTime spec_valid_end READ getspec_valid_end WRITE setspec_valid_end) + T_DEFINE_PROPERTY(QDateTime, spec_valid_end) + Q_PROPERTY(QString last_editor READ getlast_editor WRITE setlast_editor) + T_DEFINE_PROPERTY(QString, last_editor) + Q_PROPERTY(QString g_legacy READ getg_legacy WRITE setg_legacy) + T_DEFINE_PROPERTY(QString, g_legacy) + Q_PROPERTY(QString responsibility READ getresponsibility WRITE setresponsibility) + T_DEFINE_PROPERTY(QString, responsibility) + Q_PROPERTY(QString spec_comment READ getspec_comment WRITE setspec_comment) + T_DEFINE_PROPERTY(QString, spec_comment) + Q_PROPERTY(QString spec_marker READ getspec_marker WRITE setspec_marker) + T_DEFINE_PROPERTY(QString, spec_marker) + Q_PROPERTY(QString groups READ getgroups WRITE setgroups) + T_DEFINE_PROPERTY(QString, groups) +}; + +#endif // STANDARDSMETAWASTEOBJECT_H diff --git a/models/sqlobjects/stdsystemobject.h b/models/sqlobjects/stdsystemobject.h new file mode 100644 index 0000000..d230613 --- /dev/null +++ b/models/sqlobjects/stdsystemobject.h @@ -0,0 +1,51 @@ +#ifndef STDSYSTEMOBJECT_H +#define STDSYSTEMOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT StdSystemObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + QString std_type; + QString std_attr; + QString std_val; + QString std_flag; + int sort {0}; + int active {0}; + + enum PropertyIndex { + Id = 0, + StdType, + StdAttr, + StdVal, + StdFlag, + Sort, + Active, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("std_system"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(QString std_type READ getstd_type WRITE setstd_type) + T_DEFINE_PROPERTY(QString, std_type) + Q_PROPERTY(QString std_attr READ getstd_attr WRITE setstd_attr) + T_DEFINE_PROPERTY(QString, std_attr) + Q_PROPERTY(QString std_val READ getstd_val WRITE setstd_val) + T_DEFINE_PROPERTY(QString, std_val) + Q_PROPERTY(QString std_flag READ getstd_flag WRITE setstd_flag) + T_DEFINE_PROPERTY(QString, std_flag) + Q_PROPERTY(int sort READ getsort WRITE setsort) + T_DEFINE_PROPERTY(int, sort) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) +}; + +#endif // STDSYSTEMOBJECT_H diff --git a/models/sqlobjects/webmenuobject.h b/models/sqlobjects/webmenuobject.h new file mode 100644 index 0000000..7beb5b9 --- /dev/null +++ b/models/sqlobjects/webmenuobject.h @@ -0,0 +1,71 @@ +#ifndef WEBMENUOBJECT_H +#define WEBMENUOBJECT_H + +#include +#include + + +class T_MODEL_EXPORT WebmenuObject : public TSqlObject, public QSharedData +{ +public: + int id {0}; + int mnu_id {0}; + int mnu_sub_id {0}; + QString name_de; + QString desc_de; + QString name_en; + QString desc_en; + QString mnu_uri; + QString groups; + QString mnu_item; + int sort {0}; + int active {0}; + + enum PropertyIndex { + Id = 0, + MnuId, + MnuSubId, + NameDe, + DescDe, + NameEn, + DescEn, + MnuUri, + Groups, + MnuItem, + Sort, + Active, + }; + + int primaryKeyIndex() const override { return Id; } + int autoValueIndex() const override { return Id; } + QString tableName() const override { return QStringLiteral("webmenu"); } + +private: /*** Don't modify below this line ***/ + Q_OBJECT + Q_PROPERTY(int id READ getid WRITE setid) + T_DEFINE_PROPERTY(int, id) + Q_PROPERTY(int mnu_id READ getmnu_id WRITE setmnu_id) + T_DEFINE_PROPERTY(int, mnu_id) + Q_PROPERTY(int mnu_sub_id READ getmnu_sub_id WRITE setmnu_sub_id) + T_DEFINE_PROPERTY(int, mnu_sub_id) + Q_PROPERTY(QString name_de READ getname_de WRITE setname_de) + T_DEFINE_PROPERTY(QString, name_de) + Q_PROPERTY(QString desc_de READ getdesc_de WRITE setdesc_de) + T_DEFINE_PROPERTY(QString, desc_de) + Q_PROPERTY(QString name_en READ getname_en WRITE setname_en) + T_DEFINE_PROPERTY(QString, name_en) + Q_PROPERTY(QString desc_en READ getdesc_en WRITE setdesc_en) + T_DEFINE_PROPERTY(QString, desc_en) + Q_PROPERTY(QString mnu_uri READ getmnu_uri WRITE setmnu_uri) + T_DEFINE_PROPERTY(QString, mnu_uri) + Q_PROPERTY(QString groups READ getgroups WRITE setgroups) + T_DEFINE_PROPERTY(QString, groups) + Q_PROPERTY(QString mnu_item READ getmnu_item WRITE setmnu_item) + T_DEFINE_PROPERTY(QString, mnu_item) + Q_PROPERTY(int sort READ getsort WRITE setsort) + T_DEFINE_PROPERTY(int, sort) + Q_PROPERTY(int active READ getactive WRITE setactive) + T_DEFINE_PROPERTY(int, active) +}; + +#endif // WEBMENUOBJECT_H diff --git a/models/standardsdata.cpp b/models/standardsdata.cpp new file mode 100644 index 0000000..f193df8 --- /dev/null +++ b/models/standardsdata.cpp @@ -0,0 +1,1411 @@ +#include +#include "standardsdata.h" +#include "sqlobjects/standardsdataobject.h" + +#include +#include +#include + +#include "catclasses.h" +#include "standardsdatacomments.h" + +StandardsData::StandardsData() : + TAbstractModel(), + d(new StandardsDataObject()) +{ + // set the initial parameters +} + +StandardsData::StandardsData(const StandardsData &other) : + TAbstractModel(), + d(other.d) +{ } + +StandardsData::StandardsData(const StandardsDataObject &object) : + TAbstractModel(), + d(new StandardsDataObject(object)) +{ } + +StandardsData::~StandardsData() +{ + // If the reference count becomes 0, + // the shared data object 'StandardsDataObject' is deleted. +} + +// ##### + +QJsonArray StandardsData::sqlGet_crObjCatalog(bool doToc, QMap outList) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, id, lang; + + QMapIterator i(outList); + while(i.hasNext()) + { + i.next(); + id = i.value(); + + if(doToc == false) + { + query.prepare("SELECT standards_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM standards_data INNER JOIN standards_meta ON standards_meta.spec_data_id = standards_data.id WHERE standards_data.id = ?"); + query.addBindValue(id); + } + else + { + query.prepare("SELECT standards_data.id, spec_title, spec_content, cat_class FROM standards_data WHERE standards_data.id = ?"); + query.addBindValue(id); + } + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + if(doToc == false) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonObject["comments_count"] = QString::number( StandardsDataComments::getSpecsCommentsCount(id.toInt() )); + + jsonArray.append(jsonObject); + } + else + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["spec_title"] = query.value(1).toString(); + jsonObject["cat_class"] = query.value(3).toString(); + + //jsonObject["spec_content"] = query.value(2).toString(); + std::string erg = query.value(2).toString().toStdString(); + findAndReplaceAll(erg, lang, "standard"); + std::string line = erg.c_str(); + + std::regex reg1("()(.{0,100})()", std::regex_constants::icase); + std::smatch match1; + + std::regex reg2("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match2; + + std::regex reg3("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match3; + + std::regex reg4("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match4; + + QString toc; + std::string ahref1 = "
    .{0,100})|(.{0,100})|(.{0,100}))", std::regex_constants::icase); + //std::regex re("((

    .{0,100}

    )|(

    .{0,100}

    )|(

    .{0,100}

    )|(

    .{0,100}

    ))", std::regex_constants::icase); + std::regex re("((.{0,100})|(.{0,100})|(.{0,100})|(.{0,100}))", std::regex_constants::icase); + + std::sregex_iterator next(line.begin(), line.end(), re); + std::sregex_iterator end; + while (next != end) + { + std::smatch match = *next; + //std::cout << "MATCH: " << match.str() << "\n"; + std::string item = match.str(); + if(std::regex_search(item, match1, reg1)) + { + std::string to = match1.str(); +/* +QString temp = QString::fromStdString(to); +temp.replace(QRegExp(" style=.*\""), ""); +//temp.replace(QRegExp("/h1>."), "/h1>\n"); +to = temp.toStdString(); +*/ + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class1 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match2, reg2)) + { + std::string to = match2.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class2 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match3, reg3)) + { + std::string to = match3.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class3 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match4, reg4)) + { + std::string to = match4.str(); + + std::regex style_re("( style=\"[a-z]*-?[a-z]*:[a-z]*;\")"); + to = regex_replace(to, style_re, ""); + + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class4 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + + next++; + } + jsonObject["toc"] = toc; + toc = ""; + } + catch (std::regex_error& e) + { + //std::cout << "Syntax error in the regular expression" << std::endl; + } + + jsonArray.append(jsonObject); + + } + } + } + return jsonArray; +} + +QMap StandardsData::checkObjCatalog(QMap wwList, QMap localList) +{ + QString msg; + QMapIterator i(localList); + while (i.hasNext()) + { + i.next(); + if(localList.contains(i.key())) + { + wwList[i.key()] = localList[i.key()]; + } + } + + return wwList; +} + +QMap StandardsData::sqlObjCatalog(QString name, QString ac, QString pc, QString country, QString lang, QString cat, QString spec_active, QString release) +{ + TSqlQuery query; + + QString msg, obj_name, ac_classes, pc_classes; + QMap inList; + + obj_name = "%" + name + "%"; + ac_classes = "%" + ac + "%"; + pc_classes = "%" + pc + "%"; + + query.prepare("select lfdnr, id from standards_data where obj_sname LIKE ? and ac_classes LIKE ? and pc_classes LIKE ? and lang = ? and country = ? and cat_class = ? AND spec_active = ? and (spec_release = ? or spec_release = 'pre-release') order by lfdnr"); + query.addBindValue(obj_name); + query.addBindValue(ac_classes); + query.addBindValue(pc_classes); + query.addBindValue(lang); + query.addBindValue(country); + query.addBindValue(cat); + query.addBindValue(spec_active); + query.addBindValue(release); + + if(!query.exec()) + { + msg = query.lastError().text(); + qWarning("ERROR: " + msg.toUtf8()); + //tDebug(msg.toUtf8()); + } + + while (query.next()) + { + /*msg = "sqlObjCatalog: " + query.value(0).toString() + " " + query.value(1).toString(); + tDebug(msg.toUtf8()); */ + inList.insert(query.value(0).toString(),query.value(1).toString()); + } + + return inList; +} + +QJsonArray StandardsData::listObjCatalog(bool doToc, QMap editMap) +{ + QMap localList, wwList, outList; + QJsonArray array, tomerge; + + // General + if(editMap["obj_sname"].compare("General") == 0) + { + + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog("General", "0", "0", editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog("General", "0", "0", "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + + outList = StandardsData::checkObjCatalog(wwList, localList); + return StandardsData::sqlGet_crObjCatalog(doToc, outList); + } + + if(editMap["cat_sname_en"].compare("General") == 0) + { + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog(editMap["obj_sname"], "0", "0", editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog(editMap["obj_sname"], "0", "0", "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + outList = StandardsData::checkObjCatalog(wwList, localList); + array = StandardsData::sqlGet_crObjCatalog(doToc, outList); + + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], "General", editMap["spec_active"], editMap["spec_release"]); + outList = StandardsData::checkObjCatalog(wwList, localList); + tomerge = StandardsData::sqlGet_crObjCatalog(doToc, outList); + + for(int i = 0; i < tomerge.size(); i++) + { + array.append(tomerge[i]); + } + return array; + } + else + { + // Cat + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + outList = StandardsData::checkObjCatalog(wwList, localList); + return StandardsData::sqlGet_crObjCatalog(doToc, outList); + } +} + +QJsonArray StandardsData::getStdToc(QMap &stdDataMap) +{ + QJsonObject jsonObject, jsonObjContent; + QJsonValue jsonObjVal; + QJsonArray jsonArr; + + QString obj_sname = stdDataMap["obj_sname"]; + + stdDataMap["obj_sname"] = "General"; + foreach (const QJsonValue & value, StandardsData::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + jsonObject["obj_sname"] = stdDataMap["obj_sname"]; + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + + stdDataMap["obj_sname"] = obj_sname; + foreach (const QJsonValue & value, CatClasses::getAllJson("1", "category")) + { + QJsonObject objclass = value.toObject(); + QJsonValue obj_class_name = objclass.value(QString("cat_sname_en")); + if(obj_class_name.toString().compare("") == 1 ) + { + stdDataMap["cat_sname_en"] = obj_class_name.toString(); + foreach (const QJsonValue & value, StandardsData::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + jsonObject["obj_sname"] = stdDataMap["obj_sname"]; + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + } + } + + //return StandardsData::listObjCatalog(true, stdDataMap); + return jsonArr; +} + +QJsonArray StandardsData::getStdShow(QMap &stdDataMap) +{ + return StandardsData::listObjCatalog(false, stdDataMap); +} + +QJsonArray StandardsData::getStdList(QMap &stdDataMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, obj_sname, ac_class, pc_class, id; + + obj_sname = "%" + stdDataMap["obj_sname"] + "%"; + ac_class = "%" + stdDataMap["ac_class"] + "%"; + pc_class = "%" + stdDataMap["pc_class"] + "%"; + + query.prepare("SELECT standards_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM standards_data INNER JOIN standards_meta ON standards_meta.spec_data_id = standards_data.id WHERE obj_sname like ? AND cat_class = ? AND country = ? AND lang = ? AND spec_active = ? AND ac_classes like ? AND pc_classes like ? AND spec_release = ? ORDER BY lfdnr"); + query.addBindValue(obj_sname); + query.addBindValue(stdDataMap["cat_sname_en"]); + query.addBindValue(stdDataMap["country"]); + query.addBindValue(stdDataMap["lang"]); + query.addBindValue(stdDataMap["spec_active"]); + query.addBindValue(ac_class); + query.addBindValue(pc_class); + query.addBindValue(stdDataMap["spec_release"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + id = query.value(0).toString(); + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +// getStdSpecRepl => mit Data-Parameter für findAndReplaceAll +QJsonArray StandardsData::getStdSpec(int &id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, lang; + + query.prepare("SELECT standards_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_content FROM standards_data INNER JOIN standards_meta ON standards_meta.spec_data_id = standards_data.id WHERE standards_data.id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + //jsonObject["spec_content"] = query.value(23).toString(); + std::string erg = query.value(23).toString().toStdString(); + findAndReplaceAll(erg, lang, "standard"); + jsonObject["spec_content"] = erg.c_str(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +void StandardsData::findAndReplaceAll(std::string &data, QString &lang, QString std_type) +{ + TSqlQuery query; + std::string toSearch, replaceStr; + + std::string year = QDateTime::currentDateTime().toString("yyyy").toStdString(); + std::string y = "{{YYYY}}"; + std::string month = QDateTime::currentDateTime().toString("MM").toStdString(); + std::string m = "{{MM}}"; + + size_t pos2 = data.find(y); + // Repeat till end is reached + while( pos2 != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos2, y.size(), year); + // Get the next occurrence from the current position + pos2 =data.find(y, pos2 + y.size()); + } + pos2 = data.find(m); + // Repeat till end is reached + while( pos2 != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos2, m.size(), month); + // Get the next occurrence from the current position + pos2 =data.find(m, pos2 + m.size()); + } + + if( lang.compare("de_DE") == 0 ) + { + query.prepare("SELECT std_attr, std_val_de FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + else + { + query.prepare("SELECT std_attr, std_val_en FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + // SELECT id, std_type, std_attr, std_val_de, std_val_en, active FROM public.app_vars; + query.addBindValue(std_type); + + query.exec(); + + while (query.next()) + { + toSearch = "{{" + query.value(0).toString().toStdString() + "}}"; + replaceStr = query.value(1).toString().toStdString(); + + // Get the first occurrence + size_t pos = data.find(toSearch); + // Repeat till end is reached + while( pos != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos, toSearch.size(), replaceStr); + // Get the next occurrence from the current position + pos =data.find(toSearch, pos + replaceStr.size()); + } + } +} + +QJsonArray StandardsData::getExistCountries() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT DISTINCT(country) FROM public.standards_data ORDER BY country"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["country"] = query.value(0).toString(); + jsonArray.append(jsonObject); + } + return jsonArray; +} + +int StandardsData::countCheckLfdnrCat() +{ + TSqlQuery query; + int counter = 0; + + query.prepare("SELECT id, obj_sname, cat_class, lfdnr, country, lang, spec_title FROM public.standards_data a WHERE not Exists ( SELECT lfdnr FROM public.standards_data c WHERE a.lang != c.lang AND a.cat_class = c.cat_class and a.lfdnr = c.lfdnr) order by (cat_class,lfdnr)"); + + query.exec(); + + while (query.next()) + { + counter++; + } + + return counter; +} + +QJsonArray StandardsData::getCheckLfdnrCat() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, obj_sname, cat_class, lfdnr, country, lang, spec_title FROM public.standards_data a WHERE not Exists ( SELECT lfdnr FROM public.standards_data c WHERE a.lang != c.lang AND a.cat_class = c.cat_class and a.lfdnr = c.lfdnr) order by (cat_class,lfdnr)"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["cat_class"] = query.value(2).toString(); + jsonObject["lfdnr"] = query.value(3).toString(); + jsonObject["country"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + jsonObject["spec_title"] = query.value(6).toString(); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray StandardsData::upReleased(int id) +{ + + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray jsonArr; + QString msg; + + query.prepare("SELECT standards_data.id, lfdnr, spec_title, spec_desc, spec_version, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_active FROM standards_data INNER JOIN standards_meta ON standards_meta.spec_data_id = standards_data.id WHERE standards_data.id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "upReleased : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + + query.next(); + + QString lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_class, pc_class, cat_class, country, lang, spec_content, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_active; + lfdnr = query.value(1).toString(); + spec_title = query.value(2).toString(); + spec_desc = query.value(3).toString(); + spec_version = query.value(4).toString(); + obj_sname = query.value(5).toString(); + ac_class = query.value(6).toString(); + pc_class = query.value(7).toString(); + cat_class = query.value(8).toString(); + country = query.value(9).toString(); + lang = query.value(10).toString(); + spec_content = query.value(11).toByteArray(); + spec_created = query.value(12).toString(); + spec_last_modified = query.value(13).toString(); + spec_valid_start = query.value(14).toString(); + spec_valid_end = query.value(15).toString(); + last_editor = query.value(16).toString(); + g_legacy = query.value(17).toString(); + responsibility = query.value(18).toString(); + spec_comment = query.value(19).toString(); + spec_marker = query.value(20).toString(); + groups = query.value(21).toString(); + spec_active = "0"; //query.value(22).toString(); + + query.prepare("INSERT INTO public.release_standard(lfdnr, spec_title, spec_desc, spec_version, obj_sname, ac_class, pc_class, cat_class, country, lang, spec_content, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_active, spec_release) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + query.addBindValue(lfdnr); + query.addBindValue(spec_title); + query.addBindValue(spec_desc); + query.addBindValue(spec_version); + query.addBindValue(obj_sname); + query.addBindValue(ac_class); + query.addBindValue(pc_class); + query.addBindValue(cat_class); + query.addBindValue(country); + query.addBindValue(lang); + query.addBindValue(spec_content); + query.addBindValue(spec_created); + query.addBindValue(spec_last_modified); + query.addBindValue(spec_valid_start); + query.addBindValue(spec_valid_end); + query.addBindValue(last_editor); + query.addBindValue(g_legacy); + query.addBindValue(responsibility); + query.addBindValue(spec_comment); + query.addBindValue(spec_marker); + query.addBindValue(groups); + query.addBindValue(spec_active); + query.addBindValue("released"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "upReleased : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz eingefügt"; + jsonObj["last_data_id"] = query.lastInsertId().toInt(); + msg = "Released: " + QDateTime::currentDateTime().toString("yyyy-MM-dd");; + StandardsData::setDraft(id, msg); + } + + jsonArr.append(jsonObj); + return jsonArr; + +} + +void StandardsData::setDraft(int id, QString comment) +{ + TSqlQuery query; + + query.prepare("UPDATE public.standards_data SET spec_release='draft' WHERE id=?"); + query.addBindValue(id); + query.exec(); + + query.prepare("UPDATE public.standards_meta SET spec_comment=? WHERE spec_data_id=?"); + query.addBindValue(comment); + query.addBindValue(id); + query.exec(); +} + +QJsonArray StandardsData::doPreRelease(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + //obj_sname, spec_version, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date, rel_creator, relcreator_decisdate, rel_inspector, relinspect_decisdate, rel_approver, relapprov_decisdate, ci_date, cd_date, cdd_date) + + query.prepare("INSERT INTO public.release_mgmt(obj_sname, ac_classes, pc_classes, cat_class, country, lang, doc_type, rel_requester, relrequest_date, ci_date, rel_status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, now(), now(), 'pre-release')"); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["doc_type"]); + query.addBindValue(editMap["rel_requester"]); + //query.addBindValue(editMap["relrequest_date"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Pre-Release eingestellt"; + jsonObj["last_id"] = query.lastInsertId().toInt(); + } + + array.append(jsonObj); + return array; +} + +QJsonArray StandardsData::upPrelease(int id) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + query.prepare("UPDATE public.standards_data SET spec_release='pre-release' WHERE id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = "upPrelease : " + msg; + jsonObj["query"] = query.lastQuery(); + msg = "upPrelease : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + + array.append(jsonObj); + } + + return array; +} + +QJsonArray StandardsData::updStdData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + QString datetimeNext = QString::number(QDate::currentDate().year() + 1); + datetimeNext.append("-" + QString::number(QDate::currentDate().month())); + datetimeNext.append("-" + QString::number(QDate::currentDate().day())); + datetimeNext.append(" " + QDateTime::currentDateTime().toString("HH:mm:ss")); + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + QRegularExpression re("

    {{page-break}}

    "); + QRegularExpressionMatchIterator i = re.globalMatch(editMap["spec_content"]); + while (i.hasNext()) + { + QRegularExpressionMatch match = i.next(); + editMap["spec_content"].replace(re, "{{page-break}}"); + } + + query.prepare("UPDATE public.standards_data SET id=?, lfdnr=?, spec_title=?, spec_desc=?, spec_version=?, spec_release=?, obj_sname=?, ac_classes=?, pc_classes=?, cat_class=?, country=?, lang=?, spec_content=?, spec_active=? WHERE id = ?"); + + query.addBindValue(editMap["id"]); + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version_new"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + + query.prepare("UPDATE public.standards_meta SET spec_last_modified=?, spec_valid_start=?, spec_valid_end=?, last_editor=?, g_legacy=?, responsibility=?, spec_comment=?, spec_marker=? WHERE spec_data_id = ?"); + + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(datetimeNext); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "updStdData : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + jsonObj["data_id"] = editMap["id"]; + } + + array.append(jsonObj); + return array; +} + +QJsonArray StandardsData::setStdData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray jsonArr; + QString msg; + + QString datetimeNext = QString::number(QDate::currentDate().year() + 1); + datetimeNext.append("-" + QString::number(QDate::currentDate().month())); + datetimeNext.append("-" + QString::number(QDate::currentDate().day())); + datetimeNext.append(" " + QDateTime::currentDateTime().toString("HH:mm:ss")); + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + query.prepare("INSERT INTO standards_data(lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + + int last_id = query.lastInsertId().toInt(); + + query.prepare("INSERT INTO standards_meta(spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(last_id); + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(datetimeNext); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + + query.addBindValue("{ALL}"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz eingefügt"; + jsonObj["last_data_id"] = last_id; + jsonObj["last_meta_id"] = query.lastInsertId().toInt(); + } + + jsonArr.append(jsonObj); + return jsonArr; +} + +QJsonArray StandardsData::getHighestLfdnr(const QString &category) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT MAX(lfdnr) FROM public.standards_data WHERE cat_class = ?"); + query.addBindValue(category); + + query.exec(); + query.next(); + + jsonObject["lfdnr"] = query.value(0).toString(); + jsonObject["cat"] = category; + jsonArray.append(jsonObject); + + return jsonArray; +} + +QJsonArray StandardsData::chkLfdnrEditor(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, lfdnr, spec_title, obj_sname, country, lang FROM public.standards_data WHERE cat_class = ? AND lfdnr = ?"); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["lfdnr"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["MSG"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["obj_sname"] = query.value(3).toString(); + jsonObject["country"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray StandardsData::getStatistics() +{ + TSqlQuery query; + QJsonObject jsonObject, jsonObjReleaseTypes; + QJsonArray jsonArray, jsonArrReleaseTypes; + QString msg; + QList releaseTypes; + + // count + query.prepare("SELECT count(id) FROM standards_data"); + query.exec(); + query.next(); + jsonObject["count_id"] = query.value(0).toString(); + + // active + query.prepare("select count(id) from standards_data where spec_active = 1"); + query.exec(); + query.next(); + jsonObject["count_active"] = query.value(0).toString(); + + // countries + query.prepare("select count(distinct country) from standards_data"); + query.exec(); + query.next(); + jsonObject["count_countries"] = query.value(0).toString(); + + // languages + query.prepare("select count(lang) from standards_data where lang = 'de_DE'"); + query.exec(); + query.next(); + jsonObject["count_language_de"] = query.value(0).toString(); + query.prepare("select count(lang) from standards_data where lang = 'en_GB'"); + query.exec(); + query.next(); + jsonObject["count_language_en"] = query.value(0).toString(); + + // waste + query.prepare("select count(id) from standards_data_waste"); + query.exec(); + query.next(); + jsonObject["count_Stdwaste"] = query.value(0).toString(); + + // releases + query.prepare("SELECT std_attr FROM std_system WHERE std_type = 'release_types' ORDER BY sort"); + query.exec(); + while (query.next()) + { + releaseTypes.append(query.value(0).toString()); + } + + QList::iterator i; + for (i = releaseTypes.begin(); i != releaseTypes.end(); ++i) + { + query.prepare("select count(spec_release) from standards_data where spec_release = ?"); + query.addBindValue(*i); + query.exec(); + query.next(); + jsonObjReleaseTypes["release_type"] = *i; + jsonObjReleaseTypes["count_release_type"] = query.value(0).toString(); + jsonArrReleaseTypes.append(jsonObjReleaseTypes); + } + + jsonObject["countCheckLfdnrCat"] = QString::number( StandardsData::countCheckLfdnrCat() ); + + jsonArray.append(jsonObject); + jsonArray.append(jsonArrReleaseTypes); + + return jsonArray; +} + +int StandardsData::id() const +{ + return d->id; +} + +QString StandardsData::lfdnr() const +{ + return d->lfdnr; +} + +void StandardsData::setLfdnr(const QString &lfdnr) +{ + d->lfdnr = lfdnr; +} + +QString StandardsData::specTitle() const +{ + return d->spec_title; +} + +void StandardsData::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString StandardsData::specDesc() const +{ + return d->spec_desc; +} + +void StandardsData::setSpecDesc(const QString &specDesc) +{ + d->spec_desc = specDesc; +} + +QString StandardsData::specVersion() const +{ + return d->spec_version; +} + +void StandardsData::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString StandardsData::specRelease() const +{ + return d->spec_release; +} + +void StandardsData::setSpecRelease(const QString &specRelease) +{ + d->spec_release = specRelease; +} + +QString StandardsData::objSname() const +{ + return d->obj_sname; +} + +void StandardsData::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString StandardsData::acClasses() const +{ + return d->ac_classes; +} + +void StandardsData::setAcClasses(const QString &acClasses) +{ + d->ac_classes = acClasses; +} + +QString StandardsData::pcClasses() const +{ + return d->pc_classes; +} + +void StandardsData::setPcClasses(const QString &pcClasses) +{ + d->pc_classes = pcClasses; +} + +QString StandardsData::catClass() const +{ + return d->cat_class; +} + +void StandardsData::setCatClass(const QString &catClass) +{ + d->cat_class = catClass; +} + +QString StandardsData::country() const +{ + return d->country; +} + +void StandardsData::setCountry(const QString &country) +{ + d->country = country; +} + +QString StandardsData::lang() const +{ + return d->lang; +} + +void StandardsData::setLang(const QString &lang) +{ + d->lang = lang; +} + +QByteArray StandardsData::specContent() const +{ + return d->spec_content; +} + +void StandardsData::setSpecContent(const QByteArray &specContent) +{ + d->spec_content = specContent; +} + +int StandardsData::specActive() const +{ + return d->spec_active; +} + +void StandardsData::setSpecActive(int specActive) +{ + d->spec_active = specActive; +} + +StandardsData &StandardsData::operator=(const StandardsData &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +StandardsData StandardsData::create(const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive) +{ + StandardsDataObject obj; + obj.lfdnr = lfdnr; + obj.spec_title = specTitle; + obj.spec_desc = specDesc; + obj.spec_version = specVersion; + obj.spec_release = specRelease; + obj.obj_sname = objSname; + obj.ac_classes = acClasses; + obj.pc_classes = pcClasses; + obj.cat_class = catClass; + obj.country = country; + obj.lang = lang; + obj.spec_content = specContent; + obj.spec_active = specActive; + if (!obj.create()) { + return StandardsData(); + } + return StandardsData(obj); +} + +StandardsData StandardsData::create(const QVariantMap &values) +{ + StandardsData model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +StandardsData StandardsData::get(int id) +{ + TSqlORMapper mapper; + return StandardsData(mapper.findByPrimaryKey(id)); +} + +int StandardsData::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList StandardsData::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray StandardsData::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(StandardsData(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *StandardsData::modelData() +{ + return d.data(); +} + +const TModelObject *StandardsData::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const StandardsData &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, StandardsData &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(StandardsData) diff --git a/models/standardsdata.cpp_2020-12-27_1215 b/models/standardsdata.cpp_2020-12-27_1215 new file mode 100644 index 0000000..24bc110 --- /dev/null +++ b/models/standardsdata.cpp_2020-12-27_1215 @@ -0,0 +1,1097 @@ +#include +#include "standardsdata.h" +#include "sqlobjects/standardsdataobject.h" + +#include +#include +#include + +#include "catclasses.h" + +StandardsData::StandardsData() : + TAbstractModel(), + d(new StandardsDataObject()) +{ + // set the initial parameters +} + +StandardsData::StandardsData(const StandardsData &other) : + TAbstractModel(), + d(other.d) +{ } + +StandardsData::StandardsData(const StandardsDataObject &object) : + TAbstractModel(), + d(new StandardsDataObject(object)) +{ } + +StandardsData::~StandardsData() +{ + // If the reference count becomes 0, + // the shared data object 'StandardsDataObject' is deleted. +} + +// ##### + +QJsonArray StandardsData::sqlGet_crObjCatalog(bool doToc, QMap outList) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, id; + + QMapIterator i(outList); + while(i.hasNext()) + { + i.next(); + id = i.value(); + + if(doToc == false) + { + query.prepare("SELECT standards_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM standards_data INNER JOIN standards_meta ON standards_meta.spec_data_id = standards_data.id WHERE standards_data.id = ?"); + query.addBindValue(id); + } + else + { + query.prepare("SELECT standards_data.id, spec_title, spec_content, cat_class FROM standards_data WHERE standards_data.id = ?"); + query.addBindValue(id); + } + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + if(doToc == false) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonArray.append(jsonObject); + } + else + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["spec_title"] = query.value(1).toString(); + jsonObject["cat_class"] = query.value(3).toString(); + + //jsonObject["spec_content"] = query.value(2).toString(); + std::string erg = query.value(2).toString().toStdString(); + //findAndReplaceAll(erg, outList["lang"], "standard"); + std::string line = erg.c_str(); + + std::regex reg1("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match1; + + std::regex reg2("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match2; + + std::regex reg3("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match3; + + QString toc; + std::string ahref1 = "
    .{0,100})|(

    .{0,100}

    )|(

    .{0,100}

    ))", std::regex_constants::icase); + std::sregex_iterator next(line.begin(), line.end(), re); + std::sregex_iterator end; + while (next != end) + { + std::smatch match = *next; + //std::cout << "MATCH: " << match.str() << "\n"; + std::string item = match.str(); + if(std::regex_search(item, match1, reg1)) + { + std::string to = match1.str(); + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class1 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match2, reg2)) + { + std::string to = match2.str(); + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class2 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match3, reg3)) + { + std::string to = match3.str(); + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class3 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + + next++; + } + jsonObject["toc"] = toc; + toc = ""; + } + catch (std::regex_error& e) + { + //std::cout << "Syntax error in the regular expression" << std::endl; + } + + jsonArray.append(jsonObject); + + } + } + } + return jsonArray; +} + +QMap StandardsData::checkObjCatalog(QMap wwList, QMap localList) +{ + QString msg; + QMapIterator i(localList); + while (i.hasNext()) + { + i.next(); + if(localList.contains(i.key())) + { + wwList[i.key()] = localList[i.key()]; + } + } + + return wwList; +} + +QMap StandardsData::sqlObjCatalog(QString name, QString ac, QString pc, QString country, QString lang, QString cat, QString spec_active, QString release) +{ + TSqlQuery query; + + QString msg, obj_name, ac_classes, pc_classes; + QMap inList; + + obj_name = "%" + name + "%"; + ac_classes = "%" + ac + "%"; + pc_classes = "%" + pc + "%"; + + query.prepare("select lfdnr, id from standards_data where obj_sname LIKE ? and ac_classes LIKE ? and pc_classes LIKE ? and lang = ? and country = ? and cat_class = ? AND spec_active = ? and spec_release = ? order by lfdnr"); + query.addBindValue(obj_name); + query.addBindValue(ac_classes); + query.addBindValue(pc_classes); + query.addBindValue(lang); + query.addBindValue(country); + query.addBindValue(cat); + query.addBindValue(spec_active); + query.addBindValue(release); + + if(!query.exec()) + { + msg = query.lastError().text(); + qWarning("ERROR: " + msg.toUtf8()); + //tDebug(msg.toUtf8()); + } + + while (query.next()) + { + /*msg = "sqlObjCatalog: " + query.value(0).toString() + " " + query.value(1).toString(); + tDebug(msg.toUtf8()); */ + inList.insert(query.value(0).toString(),query.value(1).toString()); + } + + return inList; +} + +QJsonArray StandardsData::listObjCatalog(bool doToc, QMap editMap) +{ + QMap localList, wwList, outList; + QJsonArray array, tomerge; + + // Allgemein + if(editMap["obj_sname"].compare("Allgemein") == 0) + { + + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog("Allgemein", "0", "0", editMap["country"], editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog("Allgemein", "0", "0", "WW", editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + + outList = StandardsData::checkObjCatalog(wwList, localList); + return StandardsData::sqlGet_crObjCatalog(doToc, outList); + } + + if(editMap["cat_sname_en"].compare("Allgemein") == 0) + { + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog(editMap["obj_sname"], "0", "0", editMap["country"], editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog(editMap["obj_sname"], "0", "0", "WW", editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + outList = StandardsData::checkObjCatalog(wwList, localList); + array = StandardsData::sqlGet_crObjCatalog(doToc, outList); + + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + outList = StandardsData::checkObjCatalog(wwList, localList); + tomerge = StandardsData::sqlGet_crObjCatalog(doToc, outList); + + for(int i = 0; i < tomerge.size(); i++) + { + array.append(tomerge[i]); + } + return array; + } + else + { + // Cat + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + outList = StandardsData::checkObjCatalog(wwList, localList); + return StandardsData::sqlGet_crObjCatalog(doToc, outList); + } +} + +QJsonArray StandardsData::getStdToc(QMap &stdDataMap) +{ + QJsonObject jsonObject, jsonObjContent; + QJsonValue jsonObjVal; + QJsonArray jsonArr; + + foreach (const QJsonValue & value, CatClasses::getAllJson("1", "category")) + { + QJsonObject objclass = value.toObject(); + QJsonValue obj_class_name = objclass.value(QString("cat_sname_en")); + if(obj_class_name.toString().compare("") == 1 ) + { + stdDataMap["cat_sname_en"] = obj_class_name.toString(); + foreach (const QJsonValue & value, StandardsData::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + } + } + + //return StandardsData::listObjCatalog(true, stdDataMap); + return jsonArr; +} + +QJsonArray StandardsData::getStdShow(QMap &stdDataMap) +{ + return StandardsData::listObjCatalog(false, stdDataMap); +} + +QJsonArray StandardsData::getStdList(QMap &stdDataMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, obj_sname, ac_class, pc_class, id; + + obj_sname = "%" + stdDataMap["obj_sname"] + "%"; + ac_class = "%" + stdDataMap["ac_class"] + "%"; + pc_class = "%" + stdDataMap["pc_class"] + "%"; + + query.prepare("SELECT standards_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM standards_data INNER JOIN standards_meta ON standards_meta.spec_data_id = standards_data.id WHERE obj_sname like ? AND cat_class = ? AND country = ? AND lang = ? AND spec_active = ? AND ac_classes like ? AND pc_classes like ? AND spec_release = ?"); + query.addBindValue(obj_sname); + query.addBindValue(stdDataMap["cat_sname_en"]); + query.addBindValue(stdDataMap["country"]); + query.addBindValue(stdDataMap["lang"]); + query.addBindValue(stdDataMap["spec_active"]); + query.addBindValue(ac_class); + query.addBindValue(pc_class); + query.addBindValue(stdDataMap["spec_release"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + id = query.value(0).toString(); + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +// getStdSpecRepl => mit Data-Parameter für findAndReplaceAll +QJsonArray StandardsData::getStdSpec(int &id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, lang; + + query.prepare("SELECT standards_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_content FROM standards_data INNER JOIN standards_meta ON standards_meta.spec_data_id = standards_data.id WHERE standards_data.id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonObject["spec_content"] = query.value(23).toString(); + //std::string erg = query.value(23).toString().toStdString(); + //findAndReplaceAll(erg, lang, "standard"); + //jsonObject["spec_content"] = erg.c_str(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +void StandardsData::findAndReplaceAll(std::string &data, QString &lang, QString std_type) +{ + TSqlQuery query; + std::string toSearch, replaceStr; + + if( lang.compare("de_DE") == 0 ) + { + query.prepare("SELECT std_attr, std_val_de FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + else + { + query.prepare("SELECT std_attr, std_val_en FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + // SELECT id, std_type, std_attr, std_val_de, std_val_en, active FROM public.app_vars; + query.addBindValue(std_type); + + query.exec(); + + while (query.next()) + { + toSearch = "{{" + query.value(0).toString().toStdString() + "}}"; + replaceStr = query.value(1).toString().toStdString(); + + // Get the first occurrence + size_t pos = data.find(toSearch); + // Repeat till end is reached + while( pos != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos, toSearch.size(), replaceStr); + // Get the next occurrence from the current position + pos =data.find(toSearch, pos + replaceStr.size()); + } + } +} + +QJsonArray StandardsData::getExistCountries() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT DISTINCT(country) FROM public.standards_data ORDER BY country"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["country"] = query.value(0).toString(); + jsonArray.append(jsonObject); + } + return jsonArray; +} + +int StandardsData::countCheckLfdnrCat() +{ + TSqlQuery query; + int counter = 0; + + query.prepare("SELECT id, obj_sname, cat_class, lfdnr, country, lang, spec_title FROM public.standards_data a WHERE not Exists ( SELECT lfdnr FROM public.standards_data c WHERE a.lang != c.lang AND a.cat_class = c.cat_class and a.lfdnr = c.lfdnr) order by (cat_class,lfdnr)"); + + query.exec(); + + while (query.next()) + { + counter++; + } + + return counter; +} + +QJsonArray StandardsData::getCheckLfdnrCat() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, obj_sname, cat_class, lfdnr, country, lang, spec_title FROM public.standards_data a WHERE not Exists ( SELECT lfdnr FROM public.standards_data c WHERE a.lang != c.lang AND a.cat_class = c.cat_class and a.lfdnr = c.lfdnr) order by (cat_class,lfdnr)"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["cat_class"] = query.value(2).toString(); + jsonObject["lfdnr"] = query.value(3).toString(); + jsonObject["country"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + jsonObject["spec_title"] = query.value(6).toString(); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray StandardsData::updStdData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + query.prepare("UPDATE public.standards_data SET id=?, lfdnr=?, spec_title=?, spec_desc=?, spec_version=?, spec_release=?, obj_sname=?, ac_classes=?, pc_classes=?, cat_class=?, country=?, lang=?, spec_content=?, spec_active=? WHERE id = ?"); + + query.addBindValue(editMap["id"]); + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version_new"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + + query.prepare("UPDATE public.standards_meta SET spec_last_modified=?, spec_valid_start=?, spec_valid_end=?, last_editor=?, g_legacy=?, responsibility=?, spec_comment=?, spec_marker=? WHERE spec_data_id = ?"); + + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_end"]); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "updStdData : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + jsonObj["data_id"] = editMap["id"]; + } + + array.append(jsonObj); + return array; +} + +QJsonArray StandardsData::setStdData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray jsonArr; + QString msg; + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + query.prepare("INSERT INTO standards_data(lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + + int last_id = query.lastInsertId().toInt(); + + query.prepare("INSERT INTO standards_meta(spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(last_id); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["spec_valid_start"]); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + + query.addBindValue("{ALL}"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz eingefügt"; + jsonObj["last_data_id"] = last_id; + jsonObj["last_meta_id"] = query.lastInsertId().toInt(); + } + + jsonArr.append(jsonObj); + return jsonArr; +} + +QJsonArray StandardsData::getHighestLfdnr(const QString &category) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT MAX(lfdnr) FROM public.standards_data WHERE cat_class = ?"); + query.addBindValue(category); + + query.exec(); + query.next(); + + jsonObject["lfdnr"] = query.value(0).toString(); + jsonObject["cat"] = category; + jsonArray.append(jsonObject); + + return jsonArray; +} + +QJsonArray StandardsData::chkLfdnrEditor(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, lfdnr, spec_title, obj_sname, country, lang FROM public.standards_data WHERE cat_class = ? AND lfdnr = ?"); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["lfdnr"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["MSG"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["obj_sname"] = query.value(3).toString(); + jsonObject["country"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray StandardsData::getStatistics() +{ + TSqlQuery query; + QJsonObject jsonObject, jsonObjReleaseTypes; + QJsonArray jsonArray, jsonArrReleaseTypes; + QString msg; + QList releaseTypes; + + // count + query.prepare("SELECT count(id) FROM standards_data"); + query.exec(); + query.next(); + jsonObject["count_id"] = query.value(0).toString(); + + // active + query.prepare("select count(id) from standards_data where spec_active = 1"); + query.exec(); + query.next(); + jsonObject["count_active"] = query.value(0).toString(); + + // countries + query.prepare("select count(distinct country) from standards_data"); + query.exec(); + query.next(); + jsonObject["count_countries"] = query.value(0).toString(); + + // languages + query.prepare("select count(lang) from standards_data where lang = 'de_DE'"); + query.exec(); + query.next(); + jsonObject["count_language_de"] = query.value(0).toString(); + query.prepare("select count(lang) from standards_data where lang = 'en_GB'"); + query.exec(); + query.next(); + jsonObject["count_language_en"] = query.value(0).toString(); + + // releases + query.prepare("SELECT std_attr FROM std_system WHERE std_type = 'release_types' ORDER BY sort"); + query.exec(); + while (query.next()) + { + releaseTypes.append(query.value(0).toString()); + } + + QList::iterator i; + for (i = releaseTypes.begin(); i != releaseTypes.end(); ++i) + { + query.prepare("select count(spec_release) from standards_data where spec_release = ?"); + query.addBindValue(*i); + query.exec(); + query.next(); + jsonObjReleaseTypes["release_type"] = *i; + jsonObjReleaseTypes["count_release_type"] = query.value(0).toString(); + jsonArrReleaseTypes.append(jsonObjReleaseTypes); + } + + jsonObject["countCheckLfdnrCat"] = QString::number( StandardsData::countCheckLfdnrCat() ); + + jsonArray.append(jsonObject); + jsonArray.append(jsonArrReleaseTypes); + + return jsonArray; +} + +int StandardsData::id() const +{ + return d->id; +} + +QString StandardsData::lfdnr() const +{ + return d->lfdnr; +} + +void StandardsData::setLfdnr(const QString &lfdnr) +{ + d->lfdnr = lfdnr; +} + +QString StandardsData::specTitle() const +{ + return d->spec_title; +} + +void StandardsData::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString StandardsData::specDesc() const +{ + return d->spec_desc; +} + +void StandardsData::setSpecDesc(const QString &specDesc) +{ + d->spec_desc = specDesc; +} + +QString StandardsData::specVersion() const +{ + return d->spec_version; +} + +void StandardsData::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString StandardsData::specRelease() const +{ + return d->spec_release; +} + +void StandardsData::setSpecRelease(const QString &specRelease) +{ + d->spec_release = specRelease; +} + +QString StandardsData::objSname() const +{ + return d->obj_sname; +} + +void StandardsData::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString StandardsData::acClasses() const +{ + return d->ac_classes; +} + +void StandardsData::setAcClasses(const QString &acClasses) +{ + d->ac_classes = acClasses; +} + +QString StandardsData::pcClasses() const +{ + return d->pc_classes; +} + +void StandardsData::setPcClasses(const QString &pcClasses) +{ + d->pc_classes = pcClasses; +} + +QString StandardsData::catClass() const +{ + return d->cat_class; +} + +void StandardsData::setCatClass(const QString &catClass) +{ + d->cat_class = catClass; +} + +QString StandardsData::country() const +{ + return d->country; +} + +void StandardsData::setCountry(const QString &country) +{ + d->country = country; +} + +QString StandardsData::lang() const +{ + return d->lang; +} + +void StandardsData::setLang(const QString &lang) +{ + d->lang = lang; +} + +QByteArray StandardsData::specContent() const +{ + return d->spec_content; +} + +void StandardsData::setSpecContent(const QByteArray &specContent) +{ + d->spec_content = specContent; +} + +int StandardsData::specActive() const +{ + return d->spec_active; +} + +void StandardsData::setSpecActive(int specActive) +{ + d->spec_active = specActive; +} + +StandardsData &StandardsData::operator=(const StandardsData &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +StandardsData StandardsData::create(const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive) +{ + StandardsDataObject obj; + obj.lfdnr = lfdnr; + obj.spec_title = specTitle; + obj.spec_desc = specDesc; + obj.spec_version = specVersion; + obj.spec_release = specRelease; + obj.obj_sname = objSname; + obj.ac_classes = acClasses; + obj.pc_classes = pcClasses; + obj.cat_class = catClass; + obj.country = country; + obj.lang = lang; + obj.spec_content = specContent; + obj.spec_active = specActive; + if (!obj.create()) { + return StandardsData(); + } + return StandardsData(obj); +} + +StandardsData StandardsData::create(const QVariantMap &values) +{ + StandardsData model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +StandardsData StandardsData::get(int id) +{ + TSqlORMapper mapper; + return StandardsData(mapper.findByPrimaryKey(id)); +} + +int StandardsData::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList StandardsData::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray StandardsData::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(StandardsData(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *StandardsData::modelData() +{ + return d.data(); +} + +const TModelObject *StandardsData::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const StandardsData &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, StandardsData &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(StandardsData) diff --git a/models/standardsdata.cpp_2021-01-12_1320 b/models/standardsdata.cpp_2021-01-12_1320 new file mode 100644 index 0000000..3c4cd82 --- /dev/null +++ b/models/standardsdata.cpp_2021-01-12_1320 @@ -0,0 +1,1138 @@ +#include +#include "standardsdata.h" +#include "sqlobjects/standardsdataobject.h" + +#include +#include +#include + +#include "catclasses.h" + +StandardsData::StandardsData() : + TAbstractModel(), + d(new StandardsDataObject()) +{ + // set the initial parameters +} + +StandardsData::StandardsData(const StandardsData &other) : + TAbstractModel(), + d(other.d) +{ } + +StandardsData::StandardsData(const StandardsDataObject &object) : + TAbstractModel(), + d(new StandardsDataObject(object)) +{ } + +StandardsData::~StandardsData() +{ + // If the reference count becomes 0, + // the shared data object 'StandardsDataObject' is deleted. +} + +// ##### + +QJsonArray StandardsData::sqlGet_crObjCatalog(bool doToc, QMap outList) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, id; + + QMapIterator i(outList); + while(i.hasNext()) + { + i.next(); + id = i.value(); + + if(doToc == false) + { + query.prepare("SELECT standards_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM standards_data INNER JOIN standards_meta ON standards_meta.spec_data_id = standards_data.id WHERE standards_data.id = ?"); + query.addBindValue(id); + } + else + { + query.prepare("SELECT standards_data.id, spec_title, spec_content, cat_class FROM standards_data WHERE standards_data.id = ?"); + query.addBindValue(id); + } + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + if(doToc == false) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonArray.append(jsonObject); + } + else + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["spec_title"] = query.value(1).toString(); + jsonObject["cat_class"] = query.value(3).toString(); + + //jsonObject["spec_content"] = query.value(2).toString(); + std::string erg = query.value(2).toString().toStdString(); + //findAndReplaceAll(erg, outList["lang"], "standard"); + std::string line = erg.c_str(); + + std::regex reg1("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match1; + + std::regex reg2("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match2; + + std::regex reg3("(

    )(.{0,100})(

    )", std::regex_constants::icase); + std::smatch match3; + + QString toc; + std::string ahref1 = "
    .{0,100})|(

    .{0,100}

    )|(

    .{0,100}

    ))", std::regex_constants::icase); + std::sregex_iterator next(line.begin(), line.end(), re); + std::sregex_iterator end; + while (next != end) + { + std::smatch match = *next; + //std::cout << "MATCH: " << match.str() << "\n"; + std::string item = match.str(); + if(std::regex_search(item, match1, reg1)) + { + std::string to = match1.str(); + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class1 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match2, reg2)) + { + std::string to = match2.str(); + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class2 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + if(std::regex_search(item, match3, reg3)) + { + std::string to = match3.str(); + std::regex vowel_re("(

    )|(

    )"); + to = regex_replace(to, vowel_re, ""); + to = ahref1 + query.value(0).toString().toStdString() + class3 + ahref2 + to + ahref3; + toc.append(to.c_str()); + next++; + continue; + } + + next++; + } + jsonObject["toc"] = toc; + toc = ""; + } + catch (std::regex_error& e) + { + //std::cout << "Syntax error in the regular expression" << std::endl; + } + + jsonArray.append(jsonObject); + + } + } + } + return jsonArray; +} + +QMap StandardsData::checkObjCatalog(QMap wwList, QMap localList) +{ + QString msg; + QMapIterator i(localList); + while (i.hasNext()) + { + i.next(); + if(localList.contains(i.key())) + { + wwList[i.key()] = localList[i.key()]; + } + } + + return wwList; +} + +QMap StandardsData::sqlObjCatalog(QString name, QString ac, QString pc, QString country, QString lang, QString cat, QString spec_active, QString release) +{ + TSqlQuery query; + + QString msg, obj_name, ac_classes, pc_classes; + QMap inList; + + obj_name = "%" + name + "%"; + ac_classes = "%" + ac + "%"; + pc_classes = "%" + pc + "%"; + + query.prepare("select lfdnr, id from standards_data where obj_sname LIKE ? and ac_classes LIKE ? and pc_classes LIKE ? and lang = ? and country = ? and cat_class = ? AND spec_active = ? and spec_release = ? order by lfdnr"); + query.addBindValue(obj_name); + query.addBindValue(ac_classes); + query.addBindValue(pc_classes); + query.addBindValue(lang); + query.addBindValue(country); + query.addBindValue(cat); + query.addBindValue(spec_active); + query.addBindValue(release); + + if(!query.exec()) + { + msg = query.lastError().text(); + qWarning("ERROR: " + msg.toUtf8()); + //tDebug(msg.toUtf8()); + } + + while (query.next()) + { + /*msg = "sqlObjCatalog: " + query.value(0).toString() + " " + query.value(1).toString(); + tDebug(msg.toUtf8()); */ + inList.insert(query.value(0).toString(),query.value(1).toString()); + } + + return inList; +} + +QJsonArray StandardsData::listObjCatalog(bool doToc, QMap editMap) +{ + QMap localList, wwList, outList; + QJsonArray array, tomerge; + + // Allgemein + if(editMap["obj_sname"].compare("Allgemein") == 0) + { + + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog("Allgemein", "0", "0", editMap["country"], editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog("Allgemein", "0", "0", "WW", editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + + outList = StandardsData::checkObjCatalog(wwList, localList); + return StandardsData::sqlGet_crObjCatalog(doToc, outList); + } + + if(editMap["cat_sname_en"].compare("Allgemein") == 0) + { + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog(editMap["obj_sname"], "0", "0", editMap["country"], editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog(editMap["obj_sname"], "0", "0", "WW", editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + outList = StandardsData::checkObjCatalog(wwList, localList); + array = StandardsData::sqlGet_crObjCatalog(doToc, outList); + + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], "Allgemein", editMap["spec_active"], editMap["spec_release"]); + outList = StandardsData::checkObjCatalog(wwList, localList); + tomerge = StandardsData::sqlGet_crObjCatalog(doToc, outList); + + for(int i = 0; i < tomerge.size(); i++) + { + array.append(tomerge[i]); + } + return array; + } + else + { + // Cat + wwList.clear(); localList.clear(); outList.clear(); + localList= StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], editMap["country"], editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + wwList = StandardsData::sqlObjCatalog(editMap["obj_sname"], editMap["ac_class"], editMap["pc_class"], "WW", editMap["lang"], editMap["cat_sname_en"], editMap["spec_active"], editMap["spec_release"]); + outList = StandardsData::checkObjCatalog(wwList, localList); + return StandardsData::sqlGet_crObjCatalog(doToc, outList); + } +} + +QJsonArray StandardsData::getStdToc(QMap &stdDataMap) +{ + QJsonObject jsonObject, jsonObjContent; + QJsonValue jsonObjVal; + QJsonArray jsonArr; + + QString obj_sname = stdDataMap["obj_sname"]; + + stdDataMap["obj_sname"] = "Allgemein"; + foreach (const QJsonValue & value, StandardsData::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + jsonObject["obj_sname"] = stdDataMap["obj_sname"]; + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + + stdDataMap["obj_sname"] = obj_sname; + foreach (const QJsonValue & value, CatClasses::getAllJson("1", "category")) + { + QJsonObject objclass = value.toObject(); + QJsonValue obj_class_name = objclass.value(QString("cat_sname_en")); + if(obj_class_name.toString().compare("") == 1 ) + { + stdDataMap["cat_sname_en"] = obj_class_name.toString(); + foreach (const QJsonValue & value, StandardsData::listObjCatalog(true, stdDataMap) ) + { + jsonObjContent = value.toObject(); + jsonObject["obj_sname"] = stdDataMap["obj_sname"]; + + jsonObjVal = jsonObjContent.value(QString("cat_class")); + jsonObject["cat_class"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("id")); + jsonObject["id"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("spec_title")); + jsonObject["spec_title"] = jsonObjVal; + + jsonObjVal = jsonObjContent.value(QString("toc")); + jsonObject["toc"] = jsonObjVal; + + jsonArr.append(jsonObject); + } + } + } + + //return StandardsData::listObjCatalog(true, stdDataMap); + return jsonArr; +} + +QJsonArray StandardsData::getStdShow(QMap &stdDataMap) +{ + return StandardsData::listObjCatalog(false, stdDataMap); +} + +QJsonArray StandardsData::getStdList(QMap &stdDataMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, obj_sname, ac_class, pc_class, id; + + obj_sname = "%" + stdDataMap["obj_sname"] + "%"; + ac_class = "%" + stdDataMap["ac_class"] + "%"; + pc_class = "%" + stdDataMap["pc_class"] + "%"; + + query.prepare("SELECT standards_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM standards_data INNER JOIN standards_meta ON standards_meta.spec_data_id = standards_data.id WHERE obj_sname like ? AND cat_class = ? AND country = ? AND lang = ? AND spec_active = ? AND ac_classes like ? AND pc_classes like ? AND spec_release = ?"); + query.addBindValue(obj_sname); + query.addBindValue(stdDataMap["cat_sname_en"]); + query.addBindValue(stdDataMap["country"]); + query.addBindValue(stdDataMap["lang"]); + query.addBindValue(stdDataMap["spec_active"]); + query.addBindValue(ac_class); + query.addBindValue(pc_class); + query.addBindValue(stdDataMap["spec_release"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + id = query.value(0).toString(); + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +// getStdSpecRepl => mit Data-Parameter für findAndReplaceAll +QJsonArray StandardsData::getStdSpec(int &id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg, lang; + + query.prepare("SELECT standards_data.id, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_active, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups, spec_content FROM standards_data INNER JOIN standards_meta ON standards_meta.spec_data_id = standards_data.id WHERE standards_data.id = ?"); + query.addBindValue(id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["spec_desc"] = query.value(3).toString(); + jsonObject["spec_version"] = query.value(4).toString(); + jsonObject["spec_release"] = query.value(5).toString(); + jsonObject["obj_sname"] = query.value(6).toString(); + jsonObject["ac_classes"] = query.value(7).toString(); + jsonObject["pc_classes"] = query.value(8).toString(); + jsonObject["cat_class"] = query.value(9).toString(); + jsonObject["country"] = query.value(10).toString(); + jsonObject["lang"] = query.value(11).toString(); + lang = query.value(11).toString(); + jsonObject["spec_active"] = query.value(12).toString(); + jsonObject["spec_created"] = query.value(13).toString(); + jsonObject["spec_last_modified"] = query.value(14).toString(); + jsonObject["spec_valid_start"] = query.value(15).toString(); + jsonObject["spec_valid_end"] = query.value(16).toString(); + jsonObject["last_editor"] = query.value(17).toString(); + jsonObject["g_legacy"] = query.value(18).toString(); + jsonObject["responsibility"] = query.value(19).toString(); + jsonObject["spec_comment"] = query.value(20).toString(); + jsonObject["spec_marker"] = query.value(21).toString(); + jsonObject["groups"] = query.value(22).toString(); + + //jsonObject["spec_content"] = query.value(23).toString(); + std::string erg = query.value(23).toString().toStdString(); + findAndReplaceAll(erg, lang, "standard"); + jsonObject["spec_content"] = erg.c_str(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +void StandardsData::findAndReplaceAll(std::string &data, QString &lang, QString std_type) +{ + TSqlQuery query; + std::string toSearch, replaceStr; + + if( lang.compare("de_DE") == 0 ) + { + query.prepare("SELECT std_attr, std_val_de FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + else + { + query.prepare("SELECT std_attr, std_val_en FROM public.app_vars WHERE std_type = ? AND active = 1"); + } + // SELECT id, std_type, std_attr, std_val_de, std_val_en, active FROM public.app_vars; + query.addBindValue(std_type); + + query.exec(); + + while (query.next()) + { + toSearch = "{{" + query.value(0).toString().toStdString() + "}}"; + replaceStr = query.value(1).toString().toStdString(); + + // Get the first occurrence + size_t pos = data.find(toSearch); + // Repeat till end is reached + while( pos != std::string::npos) + { + // Replace this occurrence of Sub String + data.replace(pos, toSearch.size(), replaceStr); + // Get the next occurrence from the current position + pos =data.find(toSearch, pos + replaceStr.size()); + } + } +} + +QJsonArray StandardsData::getExistCountries() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT DISTINCT(country) FROM public.standards_data ORDER BY country"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["country"] = query.value(0).toString(); + jsonArray.append(jsonObject); + } + return jsonArray; +} + +int StandardsData::countCheckLfdnrCat() +{ + TSqlQuery query; + int counter = 0; + + query.prepare("SELECT id, obj_sname, cat_class, lfdnr, country, lang, spec_title FROM public.standards_data a WHERE not Exists ( SELECT lfdnr FROM public.standards_data c WHERE a.lang != c.lang AND a.cat_class = c.cat_class and a.lfdnr = c.lfdnr) order by (cat_class,lfdnr)"); + + query.exec(); + + while (query.next()) + { + counter++; + } + + return counter; +} + +QJsonArray StandardsData::getCheckLfdnrCat() +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, obj_sname, cat_class, lfdnr, country, lang, spec_title FROM public.standards_data a WHERE not Exists ( SELECT lfdnr FROM public.standards_data c WHERE a.lang != c.lang AND a.cat_class = c.cat_class and a.lfdnr = c.lfdnr) order by (cat_class,lfdnr)"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["obj_sname"] = query.value(1).toString(); + jsonObject["cat_class"] = query.value(2).toString(); + jsonObject["lfdnr"] = query.value(3).toString(); + jsonObject["country"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + jsonObject["spec_title"] = query.value(6).toString(); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray StandardsData::updStdData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray array; + QString msg; + + QString datetimeNext = QString::number(QDate::currentDate().year() + 1); + datetimeNext.append("-" + QString::number(QDate::currentDate().month())); + datetimeNext.append("-" + QString::number(QDate::currentDate().day())); + datetimeNext.append(" " + QDateTime::currentDateTime().toString("HH:mm:ss")); + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + query.prepare("UPDATE public.standards_data SET id=?, lfdnr=?, spec_title=?, spec_desc=?, spec_version=?, spec_release=?, obj_sname=?, ac_classes=?, pc_classes=?, cat_class=?, country=?, lang=?, spec_content=?, spec_active=? WHERE id = ?"); + + query.addBindValue(editMap["id"]); + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version_new"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + + query.prepare("UPDATE public.standards_meta SET spec_last_modified=?, spec_valid_start=?, spec_valid_end=?, last_editor=?, g_legacy=?, responsibility=?, spec_comment=?, spec_marker=? WHERE spec_data_id = ?"); + + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(datetimeNext); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + query.addBindValue(editMap["id"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "updStdData : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + array.append(jsonObj); + return array; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz aktualisiert"; + jsonObj["data_id"] = editMap["id"]; + } + + array.append(jsonObj); + return array; +} + +QJsonArray StandardsData::setStdData(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObj; + QJsonArray jsonArr; + QString msg; + + QString datetimeNext = QString::number(QDate::currentDate().year() + 1); + datetimeNext.append("-" + QString::number(QDate::currentDate().month())); + datetimeNext.append("-" + QString::number(QDate::currentDate().day())); + datetimeNext.append(" " + QDateTime::currentDateTime().toString("HH:mm:ss")); + + editMap["country"] = editMap["country"].toUpper(); + + if(editMap["lfdnr"].count() < 2) + { + editMap["lfdnr"] = "00" + editMap["lfdnr"]; + } + else if(editMap["lfdnr"].count() < 3) + { + editMap["lfdnr"] = "0" + editMap["lfdnr"]; + } + + query.prepare("INSERT INTO standards_data(lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(editMap["lfdnr"]); + query.addBindValue(editMap["spec_title"]); + query.addBindValue(editMap["spec_desc"]); + query.addBindValue(editMap["spec_version"]); + query.addBindValue(editMap["spec_release"]); + query.addBindValue(editMap["obj_sname"]); + query.addBindValue(editMap["ac_classes"]); + query.addBindValue(editMap["pc_classes"]); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["country"]); + query.addBindValue(editMap["lang"]); + query.addBindValue(editMap["spec_content"]); + query.addBindValue(editMap["spec_active"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + + int last_id = query.lastInsertId().toInt(); + + query.prepare("INSERT INTO standards_meta(spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + query.addBindValue(last_id); + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(datetimeNext); + query.addBindValue(editMap["last_editor"]); + query.addBindValue(editMap["g_legacy"]); + query.addBindValue(editMap["resp"]); + query.addBindValue(editMap["comment"]); + query.addBindValue(editMap["marker"]); + + query.addBindValue("{ALL}"); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonObj["query"] = query.lastQuery(); + msg = "setObjSpecs : "; + msg.append(msg); + msg.append(" : "); + msg.append(query.lastQuery()); + tError(msg.toUtf8()); + + jsonArr.append(jsonObj); + return jsonArr; + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Datensatz eingefügt"; + jsonObj["last_data_id"] = last_id; + jsonObj["last_meta_id"] = query.lastInsertId().toInt(); + } + + jsonArr.append(jsonObj); + return jsonArr; +} + +QJsonArray StandardsData::getHighestLfdnr(const QString &category) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT MAX(lfdnr) FROM public.standards_data WHERE cat_class = ?"); + query.addBindValue(category); + + query.exec(); + query.next(); + + jsonObject["lfdnr"] = query.value(0).toString(); + jsonObject["cat"] = category; + jsonArray.append(jsonObject); + + return jsonArray; +} + +QJsonArray StandardsData::chkLfdnrEditor(QMap editMap) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, lfdnr, spec_title, obj_sname, country, lang FROM public.standards_data WHERE cat_class = ? AND lfdnr = ?"); + query.addBindValue(editMap["cat_class"]); + query.addBindValue(editMap["lfdnr"]); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["MSG"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["lfdnr"] = query.value(1).toString(); + jsonObject["spec_title"] = query.value(2).toString(); + jsonObject["obj_sname"] = query.value(3).toString(); + jsonObject["country"] = query.value(4).toString(); + jsonObject["lang"] = query.value(5).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray StandardsData::getStatistics() +{ + TSqlQuery query; + QJsonObject jsonObject, jsonObjReleaseTypes; + QJsonArray jsonArray, jsonArrReleaseTypes; + QString msg; + QList releaseTypes; + + // count + query.prepare("SELECT count(id) FROM standards_data"); + query.exec(); + query.next(); + jsonObject["count_id"] = query.value(0).toString(); + + // active + query.prepare("select count(id) from standards_data where spec_active = 1"); + query.exec(); + query.next(); + jsonObject["count_active"] = query.value(0).toString(); + + // countries + query.prepare("select count(distinct country) from standards_data"); + query.exec(); + query.next(); + jsonObject["count_countries"] = query.value(0).toString(); + + // languages + query.prepare("select count(lang) from standards_data where lang = 'de_DE'"); + query.exec(); + query.next(); + jsonObject["count_language_de"] = query.value(0).toString(); + query.prepare("select count(lang) from standards_data where lang = 'en_GB'"); + query.exec(); + query.next(); + jsonObject["count_language_en"] = query.value(0).toString(); + + // waste + query.prepare("select count(id) from standards_data_waste"); + query.exec(); + query.next(); + jsonObject["count_Stdwaste"] = query.value(0).toString(); + + // releases + query.prepare("SELECT std_attr FROM std_system WHERE std_type = 'release_types' ORDER BY sort"); + query.exec(); + while (query.next()) + { + releaseTypes.append(query.value(0).toString()); + } + + QList::iterator i; + for (i = releaseTypes.begin(); i != releaseTypes.end(); ++i) + { + query.prepare("select count(spec_release) from standards_data where spec_release = ?"); + query.addBindValue(*i); + query.exec(); + query.next(); + jsonObjReleaseTypes["release_type"] = *i; + jsonObjReleaseTypes["count_release_type"] = query.value(0).toString(); + jsonArrReleaseTypes.append(jsonObjReleaseTypes); + } + + jsonObject["countCheckLfdnrCat"] = QString::number( StandardsData::countCheckLfdnrCat() ); + + jsonArray.append(jsonObject); + jsonArray.append(jsonArrReleaseTypes); + + return jsonArray; +} + +int StandardsData::id() const +{ + return d->id; +} + +QString StandardsData::lfdnr() const +{ + return d->lfdnr; +} + +void StandardsData::setLfdnr(const QString &lfdnr) +{ + d->lfdnr = lfdnr; +} + +QString StandardsData::specTitle() const +{ + return d->spec_title; +} + +void StandardsData::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString StandardsData::specDesc() const +{ + return d->spec_desc; +} + +void StandardsData::setSpecDesc(const QString &specDesc) +{ + d->spec_desc = specDesc; +} + +QString StandardsData::specVersion() const +{ + return d->spec_version; +} + +void StandardsData::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString StandardsData::specRelease() const +{ + return d->spec_release; +} + +void StandardsData::setSpecRelease(const QString &specRelease) +{ + d->spec_release = specRelease; +} + +QString StandardsData::objSname() const +{ + return d->obj_sname; +} + +void StandardsData::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString StandardsData::acClasses() const +{ + return d->ac_classes; +} + +void StandardsData::setAcClasses(const QString &acClasses) +{ + d->ac_classes = acClasses; +} + +QString StandardsData::pcClasses() const +{ + return d->pc_classes; +} + +void StandardsData::setPcClasses(const QString &pcClasses) +{ + d->pc_classes = pcClasses; +} + +QString StandardsData::catClass() const +{ + return d->cat_class; +} + +void StandardsData::setCatClass(const QString &catClass) +{ + d->cat_class = catClass; +} + +QString StandardsData::country() const +{ + return d->country; +} + +void StandardsData::setCountry(const QString &country) +{ + d->country = country; +} + +QString StandardsData::lang() const +{ + return d->lang; +} + +void StandardsData::setLang(const QString &lang) +{ + d->lang = lang; +} + +QByteArray StandardsData::specContent() const +{ + return d->spec_content; +} + +void StandardsData::setSpecContent(const QByteArray &specContent) +{ + d->spec_content = specContent; +} + +int StandardsData::specActive() const +{ + return d->spec_active; +} + +void StandardsData::setSpecActive(int specActive) +{ + d->spec_active = specActive; +} + +StandardsData &StandardsData::operator=(const StandardsData &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +StandardsData StandardsData::create(const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive) +{ + StandardsDataObject obj; + obj.lfdnr = lfdnr; + obj.spec_title = specTitle; + obj.spec_desc = specDesc; + obj.spec_version = specVersion; + obj.spec_release = specRelease; + obj.obj_sname = objSname; + obj.ac_classes = acClasses; + obj.pc_classes = pcClasses; + obj.cat_class = catClass; + obj.country = country; + obj.lang = lang; + obj.spec_content = specContent; + obj.spec_active = specActive; + if (!obj.create()) { + return StandardsData(); + } + return StandardsData(obj); +} + +StandardsData StandardsData::create(const QVariantMap &values) +{ + StandardsData model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +StandardsData StandardsData::get(int id) +{ + TSqlORMapper mapper; + return StandardsData(mapper.findByPrimaryKey(id)); +} + +int StandardsData::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList StandardsData::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray StandardsData::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(StandardsData(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *StandardsData::modelData() +{ + return d.data(); +} + +const TModelObject *StandardsData::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const StandardsData &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, StandardsData &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(StandardsData) diff --git a/models/standardsdata.h b/models/standardsdata.h new file mode 100644 index 0000000..e377e5b --- /dev/null +++ b/models/standardsdata.h @@ -0,0 +1,101 @@ +#ifndef STANDARDSDATA_H +#define STANDARDSDATA_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class StandardsDataObject; +class QJsonArray; + + +class T_MODEL_EXPORT StandardsData : public TAbstractModel +{ +public: + StandardsData(); + StandardsData(const StandardsData &other); + StandardsData(const StandardsDataObject &object); + ~StandardsData(); + + int id() const; + QString lfdnr() const; + void setLfdnr(const QString &lfdnr); + QString specTitle() const; + void setSpecTitle(const QString &specTitle); + QString specDesc() const; + void setSpecDesc(const QString &specDesc); + QString specVersion() const; + void setSpecVersion(const QString &specVersion); + QString specRelease() const; + void setSpecRelease(const QString &specRelease); + QString objSname() const; + void setObjSname(const QString &objSname); + QString acClasses() const; + void setAcClasses(const QString &acClasses); + QString pcClasses() const; + void setPcClasses(const QString &pcClasses); + QString catClass() const; + void setCatClass(const QString &catClass); + QString country() const; + void setCountry(const QString &country); + QString lang() const; + void setLang(const QString &lang); + QByteArray specContent() const; + void setSpecContent(const QByteArray &specContent); + int specActive() const; + void setSpecActive(int specActive); + StandardsData &operator=(const StandardsData &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + static QJsonArray setStdData(QMap editMap); + static QJsonArray updStdData(QMap editMap); + static QJsonArray upPrelease(int id); + static QJsonArray doPreRelease(QMap editMap); + static QJsonArray upReleased(int id); + static void setDraft(int id, QString comment); + + static StandardsData create(const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive); + static StandardsData create(const QVariantMap &values); + static StandardsData get(int id); + static int count(); + + static QList getAll(); + static QJsonArray getAllJson(); + static QJsonArray getStatistics(); + static QJsonArray getHighestLfdnr(const QString &category); + static QJsonArray getCheckLfdnrCat(); + static int countCheckLfdnrCat(); + static QJsonArray getExistCountries(); + static QJsonArray getStdList(QMap &stdDataMap); + static QJsonArray getStdShow(QMap &stdDataMap); + static QJsonArray getStdToc(QMap &stdDataMap); + static QJsonArray getStdSpec(int &id); + static void findAndReplaceAll(std::string &data, QString &lang, QString std_type); + + static QJsonArray listObjCatalog(bool doToc, QMap editMap); + static QMap sqlObjCatalog(QString name, QString ac, QString pc, QString country, QString lang, QString cat, QString spec_active, QString release); + static QMap checkObjCatalog(QMap wwList, QMap localList); + static QJsonArray sqlGet_crObjCatalog(bool doToc, QMap outList); + + static QJsonArray chkLfdnrEditor(QMap editMap); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const StandardsData &model); + friend QDataStream &operator>>(QDataStream &ds, StandardsData &model); +}; + +Q_DECLARE_METATYPE(StandardsData) +Q_DECLARE_METATYPE(QList) + +#endif // STANDARDSDATA_H diff --git a/models/standardsdatacomments.cpp b/models/standardsdatacomments.cpp new file mode 100644 index 0000000..459c005 --- /dev/null +++ b/models/standardsdatacomments.cpp @@ -0,0 +1,279 @@ +#include +#include "standardsdatacomments.h" +#include "sqlobjects/standardsdatacommentsobject.h" + +StandardsDataComments::StandardsDataComments() : + TAbstractModel(), + d(new StandardsDataCommentsObject()) +{ + // set the initial parameters +} + +StandardsDataComments::StandardsDataComments(const StandardsDataComments &other) : + TAbstractModel(), + d(other.d) +{ } + +StandardsDataComments::StandardsDataComments(const StandardsDataCommentsObject &object) : + TAbstractModel(), + d(new StandardsDataCommentsObject(object)) +{ } + +StandardsDataComments::~StandardsDataComments() +{ + // If the reference count becomes 0, + // the shared data object 'StandardsDataCommentsObject' is deleted. +} + +// ##### + +int StandardsDataComments::getSpecsCommentsCount(const int &spec_id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT count(id) FROM public.standards_data_comments WHERE spec_id = ?"); + query.addBindValue(spec_id); + + query.exec(); + query.next(); + return query.value(0).toInt(); +} + +QJsonArray StandardsDataComments::getSpecComments(const int &spec_id) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT id, spec_id, user_comment FROM public.standards_data_comments WHERE spec_id = ?"); + query.addBindValue(spec_id); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["errMsg"] = msg; + jsonObject["ERROR"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["spec_id"] = query.value(1).toString(); + jsonObject["user_comment"] = query.value(2).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QMap StandardsDataComments::getStatistics() +{ + TSqlQuery query; + QMap qmapStatistik; + + // count + query.prepare("SELECT count(id) FROM standards_data_comments"); + query.exec(); + query.next(); + qmapStatistik["count_id"] = query.value(0).toString(); + + // users + query.prepare("SELECT count (distinct username) FROM standards_data_comments"); + query.exec(); + query.next(); + qmapStatistik["count_users"] = query.value(0).toString(); + + return qmapStatistik; +} + +int StandardsDataComments::id() const +{ + return d->id; +} + +QDateTime StandardsDataComments::commentCreated() const +{ + return d->comment_created; +} + +void StandardsDataComments::setCommentCreated(const QDateTime &commentCreated) +{ + d->comment_created = commentCreated; +} + +int StandardsDataComments::specId() const +{ + return d->spec_id; +} + +void StandardsDataComments::setSpecId(int specId) +{ + d->spec_id = specId; +} + +QString StandardsDataComments::specTitle() const +{ + return d->spec_title; +} + +void StandardsDataComments::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString StandardsDataComments::specVersion() const +{ + return d->spec_version; +} + +void StandardsDataComments::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString StandardsDataComments::userComment() const +{ + return d->user_comment; +} + +void StandardsDataComments::setUserComment(const QString &userComment) +{ + d->user_comment = userComment; +} + +QString StandardsDataComments::username() const +{ + return d->username; +} + +void StandardsDataComments::setUsername(const QString &username) +{ + d->username = username; +} + +StandardsDataComments &StandardsDataComments::operator=(const StandardsDataComments &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +QJsonArray StandardsDataComments::createComment(int spec_id, const QString &spec_title, const QString &spec_version, const QString &user_comment, const QString &username) +{ + TSqlQuery query; + QString msg; + QJsonObject jsonObj; + QJsonArray jsonArray; + + query.prepare("INSERT INTO public.standards_data_comments(comment_created, spec_id, spec_title, spec_version, user_comment, username) VALUES((:comment_created),(:spec_id),(:spec_title),(:spec_version),(:user_comment),(:username))"); + query.bindValue(":comment_created", QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")); + query.bindValue(":spec_id", spec_id); + query.bindValue(":spec_title", spec_title); + query.bindValue(":spec_version", spec_version); + query.bindValue(":user_comment", user_comment); + query.bindValue(":username",username); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + tError("setUserPwd " + msg.toUtf8()); + } + else + { + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = "Newsletter config modified"; + } + + jsonArray.append(jsonObj); + return jsonArray; +} + +StandardsDataComments StandardsDataComments::create(const QDateTime &commentCreated, int specId, const QString &specTitle, const QString &specVersion, const QString &userComment, const QString &username) +{ + StandardsDataCommentsObject obj; + obj.comment_created = commentCreated; + obj.spec_id = specId; + obj.spec_title = specTitle; + obj.spec_version = specVersion; + obj.user_comment = userComment; + obj.username = username; + if (!obj.create()) { + return StandardsDataComments(); + } + return StandardsDataComments(obj); +} + +StandardsDataComments StandardsDataComments::create(const QVariantMap &values) +{ + StandardsDataComments model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +StandardsDataComments StandardsDataComments::get(int id) +{ + TSqlORMapper mapper; + return StandardsDataComments(mapper.findByPrimaryKey(id)); +} + +int StandardsDataComments::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList StandardsDataComments::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray StandardsDataComments::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(StandardsDataComments(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *StandardsDataComments::modelData() +{ + return d.data(); +} + +const TModelObject *StandardsDataComments::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const StandardsDataComments &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, StandardsDataComments &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(StandardsDataComments) diff --git a/models/standardsdatacomments.h b/models/standardsdatacomments.h new file mode 100644 index 0000000..7bb23c4 --- /dev/null +++ b/models/standardsdatacomments.h @@ -0,0 +1,68 @@ +#ifndef STANDARDSDATACOMMENTS_H +#define STANDARDSDATACOMMENTS_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class StandardsDataCommentsObject; +class QJsonArray; + + +class T_MODEL_EXPORT StandardsDataComments : public TAbstractModel +{ +public: + StandardsDataComments(); + StandardsDataComments(const StandardsDataComments &other); + StandardsDataComments(const StandardsDataCommentsObject &object); + ~StandardsDataComments(); + + int id() const; + QDateTime commentCreated() const; + void setCommentCreated(const QDateTime &commentCreated); + int specId() const; + void setSpecId(int specId); + QString specTitle() const; + void setSpecTitle(const QString &specTitle); + QString specVersion() const; + void setSpecVersion(const QString &specVersion); + QString userComment() const; + void setUserComment(const QString &userComment); + QString username() const; + void setUsername(const QString &username); + StandardsDataComments &operator=(const StandardsDataComments &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static QJsonArray createComment(int spec_id, const QString &spec_title, const QString &spec_version, const QString &user_comment, const QString &username); + + static StandardsDataComments create(const QDateTime &commentCreated, int specId, const QString &specTitle, const QString &specVersion, const QString &userComment, const QString &username); + static StandardsDataComments create(const QVariantMap &values); + static StandardsDataComments get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + static QMap getStatistics(); + static int getSpecsCommentsCount(const int &spec_id); + static QJsonArray getSpecComments(const int &spec_id); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const StandardsDataComments &model); + friend QDataStream &operator>>(QDataStream &ds, StandardsDataComments &model); +}; + +Q_DECLARE_METATYPE(StandardsDataComments) +Q_DECLARE_METATYPE(QList) + +#endif // STANDARDSDATACOMMENTS_H diff --git a/models/standardsdatawaste.cpp b/models/standardsdatawaste.cpp new file mode 100644 index 0000000..dc133e2 --- /dev/null +++ b/models/standardsdatawaste.cpp @@ -0,0 +1,402 @@ +#include +#include "standardsdatawaste.h" +#include "sqlobjects/standardsdatawasteobject.h" + +StandardsDataWaste::StandardsDataWaste() : + TAbstractModel(), + d(new StandardsDataWasteObject()) +{ + // set the initial parameters +} + +StandardsDataWaste::StandardsDataWaste(const StandardsDataWaste &other) : + TAbstractModel(), + d(other.d) +{ } + +StandardsDataWaste::StandardsDataWaste(const StandardsDataWasteObject &object) : + TAbstractModel(), + d(new StandardsDataWasteObject(object)) +{ } + +StandardsDataWaste::~StandardsDataWaste() +{ + // If the reference count becomes 0, + // the shared data object 'StandardsDataWasteObject' is deleted. +} + +// ##### +QJsonArray StandardsDataWaste::doRecover(int id) +{ + TSqlQuery query; + QString msg; + QString changed_on, id_old, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active; + + QJsonObject jsonObj; + QJsonArray jsonArr; + + query.prepare("SELECT changed_on, id_old, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active FROM public.standards_data_waste where id = ?"); + query.addBindValue(id); + query.exec(); + + while (query.next()) + { + changed_on = query.value(0).toString(); + id_old = query.value(1).toString(); + lfdnr= query.value(2).toString(); + spec_title = query.value(3).toString(); + spec_desc = query.value(4).toString(); + spec_version = query.value(5).toString(); + spec_release = query.value(6).toString(); + obj_sname = query.value(7).toString(); + ac_classes = query.value(8).toString(); + pc_classes = query.value(9).toString(); + cat_class = query.value(10).toString(); + country = query.value(11).toString(); + lang = query.value(12).toString(); + spec_content = query.value(13).toString(); + spec_active = query.value(14).toString(); + } + + query.prepare("INSERT INTO public.standards_data (lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + query.addBindValue(lfdnr); + query.addBindValue(spec_title); + query.addBindValue(spec_desc); + query.addBindValue(spec_version); + query.addBindValue(spec_release); + query.addBindValue(obj_sname); + query.addBindValue(ac_classes); + query.addBindValue(pc_classes); + query.addBindValue(cat_class); + query.addBindValue(country); + query.addBindValue(lang); + query.addBindValue(spec_content); + query.addBindValue(spec_active); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonArr.append(jsonObj); + return jsonArr; + } + + int last_id = query.lastInsertId().toInt(); + jsonObj["last_data_id"] = QString::number(last_id); + + QString spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups; + query.prepare("SELECT changed_on, spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups FROM public.standards_meta_waste WHERE spec_data_id = ?"); + query.addBindValue(id_old); + query.exec(); + + while (query.next()) + { + changed_on = query.value(0).toString(); + spec_data_id = query.value(1).toString(); + spec_created = query.value(2).toString(); + spec_last_modified = query.value(3).toString(); + spec_valid_start = query.value(4).toString(); + spec_valid_end = query.value(5).toString(); + last_editor = query.value(6).toString(); + g_legacy = query.value(7).toString(); + responsibility = query.value(8).toString(); + spec_comment = query.value(9).toString(); + spec_marker = query.value(10).toString(); + groups = query.value(11).toString(); + } + + query.prepare("INSERT INTO public.standards_meta (spec_data_id, spec_created, spec_last_modified, spec_valid_start, spec_valid_end, last_editor, g_legacy, responsibility, spec_comment, spec_marker, groups) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + query.addBindValue(last_id); + query.addBindValue(spec_created); + query.addBindValue(spec_last_modified); + query.addBindValue(spec_valid_start); + query.addBindValue(spec_valid_end); + query.addBindValue(last_editor); + query.addBindValue( g_legacy); + query.addBindValue(responsibility); + query.addBindValue(spec_comment); + query.addBindValue(spec_marker); + query.addBindValue(groups); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObj["ERROR"] = "1"; + jsonObj["errMsg"] = msg; + jsonArr.append(jsonObj); + return jsonArr; + } + + int last_metaid = query.lastInsertId().toInt(); + jsonObj["last_meta_id"] = QString::number(last_metaid); + + query.prepare("DELETE FROM public.standards_data_waste WHERE id = ?"); + query.addBindValue(id); + query.exec(); + query.prepare("DELETE FROM public.standards_meta_waste WHERE spec_data_id = ?"); + query.addBindValue(spec_data_id); + query.exec(); + + msg = "Recovery successfully."; + msg.append("ID: " + QString::number(last_id)); + msg.append(" Meta-ID: " + QString::number(last_metaid)); + + jsonObj["ERROR"] = "0"; + jsonObj["errMsg"] = msg; + jsonArr.append(jsonObj); + return jsonArr; +} + +int StandardsDataWaste::id() const +{ + return d->id; +} + +QDateTime StandardsDataWaste::changedOn() const +{ + return d->changed_on; +} + +void StandardsDataWaste::setChangedOn(const QDateTime &changedOn) +{ + d->changed_on = changedOn; +} + +int StandardsDataWaste::idOld() const +{ + return d->id_old; +} + +void StandardsDataWaste::setIdOld(int idOld) +{ + d->id_old = idOld; +} + +QString StandardsDataWaste::lfdnr() const +{ + return d->lfdnr; +} + +void StandardsDataWaste::setLfdnr(const QString &lfdnr) +{ + d->lfdnr = lfdnr; +} + +QString StandardsDataWaste::specTitle() const +{ + return d->spec_title; +} + +void StandardsDataWaste::setSpecTitle(const QString &specTitle) +{ + d->spec_title = specTitle; +} + +QString StandardsDataWaste::specDesc() const +{ + return d->spec_desc; +} + +void StandardsDataWaste::setSpecDesc(const QString &specDesc) +{ + d->spec_desc = specDesc; +} + +QString StandardsDataWaste::specVersion() const +{ + return d->spec_version; +} + +void StandardsDataWaste::setSpecVersion(const QString &specVersion) +{ + d->spec_version = specVersion; +} + +QString StandardsDataWaste::specRelease() const +{ + return d->spec_release; +} + +void StandardsDataWaste::setSpecRelease(const QString &specRelease) +{ + d->spec_release = specRelease; +} + +QString StandardsDataWaste::objSname() const +{ + return d->obj_sname; +} + +void StandardsDataWaste::setObjSname(const QString &objSname) +{ + d->obj_sname = objSname; +} + +QString StandardsDataWaste::acClasses() const +{ + return d->ac_classes; +} + +void StandardsDataWaste::setAcClasses(const QString &acClasses) +{ + d->ac_classes = acClasses; +} + +QString StandardsDataWaste::pcClasses() const +{ + return d->pc_classes; +} + +void StandardsDataWaste::setPcClasses(const QString &pcClasses) +{ + d->pc_classes = pcClasses; +} + +QString StandardsDataWaste::catClass() const +{ + return d->cat_class; +} + +void StandardsDataWaste::setCatClass(const QString &catClass) +{ + d->cat_class = catClass; +} + +QString StandardsDataWaste::country() const +{ + return d->country; +} + +void StandardsDataWaste::setCountry(const QString &country) +{ + d->country = country; +} + +QString StandardsDataWaste::lang() const +{ + return d->lang; +} + +void StandardsDataWaste::setLang(const QString &lang) +{ + d->lang = lang; +} + +QByteArray StandardsDataWaste::specContent() const +{ + return d->spec_content; +} + +void StandardsDataWaste::setSpecContent(const QByteArray &specContent) +{ + d->spec_content = specContent; +} + +int StandardsDataWaste::specActive() const +{ + return d->spec_active; +} + +void StandardsDataWaste::setSpecActive(int specActive) +{ + d->spec_active = specActive; +} + +StandardsDataWaste &StandardsDataWaste::operator=(const StandardsDataWaste &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +StandardsDataWaste StandardsDataWaste::create(const QDateTime &changedOn, int idOld, const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive) +{ + StandardsDataWasteObject obj; + obj.changed_on = changedOn; + obj.id_old = idOld; + obj.lfdnr = lfdnr; + obj.spec_title = specTitle; + obj.spec_desc = specDesc; + obj.spec_version = specVersion; + obj.spec_release = specRelease; + obj.obj_sname = objSname; + obj.ac_classes = acClasses; + obj.pc_classes = pcClasses; + obj.cat_class = catClass; + obj.country = country; + obj.lang = lang; + obj.spec_content = specContent; + obj.spec_active = specActive; + if (!obj.create()) { + return StandardsDataWaste(); + } + return StandardsDataWaste(obj); +} + +StandardsDataWaste StandardsDataWaste::create(const QVariantMap &values) +{ + StandardsDataWaste model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +StandardsDataWaste StandardsDataWaste::get(int id) +{ + TSqlORMapper mapper; + return StandardsDataWaste(mapper.findByPrimaryKey(id)); +} + +int StandardsDataWaste::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList StandardsDataWaste::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray StandardsDataWaste::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(StandardsDataWaste(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *StandardsDataWaste::modelData() +{ + return d.data(); +} + +const TModelObject *StandardsDataWaste::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const StandardsDataWaste &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, StandardsDataWaste &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(StandardsDataWaste) diff --git a/models/standardsdatawaste.h b/models/standardsdatawaste.h new file mode 100644 index 0000000..2025b2b --- /dev/null +++ b/models/standardsdatawaste.h @@ -0,0 +1,83 @@ +#ifndef STANDARDSDATAWASTE_H +#define STANDARDSDATAWASTE_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class StandardsDataWasteObject; +class QJsonArray; + + +class T_MODEL_EXPORT StandardsDataWaste : public TAbstractModel +{ +public: + StandardsDataWaste(); + StandardsDataWaste(const StandardsDataWaste &other); + StandardsDataWaste(const StandardsDataWasteObject &object); + ~StandardsDataWaste(); + + int id() const; + QDateTime changedOn() const; + void setChangedOn(const QDateTime &changedOn); + int idOld() const; + void setIdOld(int idOld); + QString lfdnr() const; + void setLfdnr(const QString &lfdnr); + QString specTitle() const; + void setSpecTitle(const QString &specTitle); + QString specDesc() const; + void setSpecDesc(const QString &specDesc); + QString specVersion() const; + void setSpecVersion(const QString &specVersion); + QString specRelease() const; + void setSpecRelease(const QString &specRelease); + QString objSname() const; + void setObjSname(const QString &objSname); + QString acClasses() const; + void setAcClasses(const QString &acClasses); + QString pcClasses() const; + void setPcClasses(const QString &pcClasses); + QString catClass() const; + void setCatClass(const QString &catClass); + QString country() const; + void setCountry(const QString &country); + QString lang() const; + void setLang(const QString &lang); + QByteArray specContent() const; + void setSpecContent(const QByteArray &specContent); + int specActive() const; + void setSpecActive(int specActive); + StandardsDataWaste &operator=(const StandardsDataWaste &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static StandardsDataWaste create(const QDateTime &changedOn, int idOld, const QString &lfdnr, const QString &specTitle, const QString &specDesc, const QString &specVersion, const QString &specRelease, const QString &objSname, const QString &acClasses, const QString &pcClasses, const QString &catClass, const QString &country, const QString &lang, const QByteArray &specContent, int specActive); + static StandardsDataWaste create(const QVariantMap &values); + static StandardsDataWaste get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + + static QJsonArray doRecover(int id); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const StandardsDataWaste &model); + friend QDataStream &operator>>(QDataStream &ds, StandardsDataWaste &model); +}; + +Q_DECLARE_METATYPE(StandardsDataWaste) +Q_DECLARE_METATYPE(QList) + +#endif // STANDARDSDATAWASTE_H diff --git a/models/standardsmeta.cpp b/models/standardsmeta.cpp new file mode 100644 index 0000000..a10284d --- /dev/null +++ b/models/standardsmeta.cpp @@ -0,0 +1,270 @@ +#include +#include "standardsmeta.h" +#include "sqlobjects/standardsmetaobject.h" + +StandardsMeta::StandardsMeta() : + TAbstractModel(), + d(new StandardsMetaObject()) +{ + // set the initial parameters +} + +StandardsMeta::StandardsMeta(const StandardsMeta &other) : + TAbstractModel(), + d(other.d) +{ } + +StandardsMeta::StandardsMeta(const StandardsMetaObject &object) : + TAbstractModel(), + d(new StandardsMetaObject(object)) +{ } + +StandardsMeta::~StandardsMeta() +{ + // If the reference count becomes 0, + // the shared data object 'StandardsMetaObject' is deleted. +} + +// ##### +void StandardsMeta::saveMeta(int id, QString username) +{ + TSqlQuery query; + + int year = QDate::currentDate().year() + 1; + int month = QDate::currentDate().month(); + int day = QDate::currentDate().day(); + QString datetimeNext = QString::number(year); + datetimeNext.append("-" + QString::number(month)); + datetimeNext.append("-" + QString::number(day)); + datetimeNext.append(" " + QDateTime::currentDateTime().toString()); + + query.prepare("UPDATE public.standards_meta SET spec_last_modified=?, spec_valid_end=?, last_editor=? WHERE spec_data_id=?"); + query.addBindValue(QDateTime::currentDateTime()); + query.addBindValue(datetimeNext); + query.addBindValue(username); + query.addBindValue(id); + query.exec(); +} + +int StandardsMeta::id() const +{ + return d->id; +} + +int StandardsMeta::specDataId() const +{ + return d->spec_data_id; +} + +void StandardsMeta::setSpecDataId(int specDataId) +{ + d->spec_data_id = specDataId; +} + +QDateTime StandardsMeta::specCreated() const +{ + return d->spec_created; +} + +void StandardsMeta::setSpecCreated(const QDateTime &specCreated) +{ + d->spec_created = specCreated; +} + +QDateTime StandardsMeta::specLastModified() const +{ + return d->spec_last_modified; +} + +void StandardsMeta::setSpecLastModified(const QDateTime &specLastModified) +{ + d->spec_last_modified = specLastModified; +} + +QDateTime StandardsMeta::specValidStart() const +{ + return d->spec_valid_start; +} + +void StandardsMeta::setSpecValidStart(const QDateTime &specValidStart) +{ + d->spec_valid_start = specValidStart; +} + +QDateTime StandardsMeta::specValidEnd() const +{ + return d->spec_valid_end; +} + +void StandardsMeta::setSpecValidEnd(const QDateTime &specValidEnd) +{ + d->spec_valid_end = specValidEnd; +} + +QString StandardsMeta::lastEditor() const +{ + return d->last_editor; +} + +void StandardsMeta::setLastEditor(const QString &lastEditor) +{ + d->last_editor = lastEditor; +} + +QString StandardsMeta::gLegacy() const +{ + return d->g_legacy; +} + +void StandardsMeta::setGLegacy(const QString &gLegacy) +{ + d->g_legacy = gLegacy; +} + +QString StandardsMeta::responsibility() const +{ + return d->responsibility; +} + +void StandardsMeta::setResponsibility(const QString &responsibility) +{ + d->responsibility = responsibility; +} + +QString StandardsMeta::specComment() const +{ + return d->spec_comment; +} + +void StandardsMeta::setSpecComment(const QString &specComment) +{ + d->spec_comment = specComment; +} + +QString StandardsMeta::specMarker() const +{ + return d->spec_marker; +} + +void StandardsMeta::setSpecMarker(const QString &specMarker) +{ + d->spec_marker = specMarker; +} + +QString StandardsMeta::groups() const +{ + return d->groups; +} + +void StandardsMeta::setGroups(const QString &groups) +{ + d->groups = groups; +} + +StandardsMeta &StandardsMeta::operator=(const StandardsMeta &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +StandardsMeta StandardsMeta::create(int specDataId, const QDateTime &specCreated, const QDateTime &specLastModified, const QDateTime &specValidStart, const QDateTime &specValidEnd, const QString &lastEditor, const QString &gLegacy, const QString &responsibility, const QString &specComment, const QString &specMarker, const QString &groups) +{ + StandardsMetaObject obj; + obj.spec_data_id = specDataId; + obj.spec_created = specCreated; + obj.spec_last_modified = specLastModified; + obj.spec_valid_start = specValidStart; + obj.spec_valid_end = specValidEnd; + obj.last_editor = lastEditor; + obj.g_legacy = gLegacy; + obj.responsibility = responsibility; + obj.spec_comment = specComment; + obj.spec_marker = specMarker; + obj.groups = groups; + if (!obj.create()) { + return StandardsMeta(); + } + return StandardsMeta(obj); +} + +StandardsMeta StandardsMeta::create(const QVariantMap &values) +{ + StandardsMeta model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +StandardsMeta StandardsMeta::getBySpecDataId(int spec_data_id) +{ + TSqlQuery query; + + query.prepare("SELECT id FROM public.standards_meta WHERE spec_data_id = ?"); + query.addBindValue(spec_data_id); + + query.exec(); + query.next(); + + TSqlORMapper mapper; + return StandardsMeta(mapper.findByPrimaryKey(query.value(0).toInt())); +} + +StandardsMeta StandardsMeta::get(int id) +{ + TSqlORMapper mapper; + return StandardsMeta(mapper.findByPrimaryKey(id)); +} + +int StandardsMeta::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList StandardsMeta::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray StandardsMeta::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(StandardsMeta(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *StandardsMeta::modelData() +{ + return d.data(); +} + +const TModelObject *StandardsMeta::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const StandardsMeta &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, StandardsMeta &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(StandardsMeta) diff --git a/models/standardsmeta.h b/models/standardsmeta.h new file mode 100644 index 0000000..1688671 --- /dev/null +++ b/models/standardsmeta.h @@ -0,0 +1,76 @@ +#ifndef STANDARDSMETA_H +#define STANDARDSMETA_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class StandardsMetaObject; +class QJsonArray; + + +class T_MODEL_EXPORT StandardsMeta : public TAbstractModel +{ +public: + StandardsMeta(); + StandardsMeta(const StandardsMeta &other); + StandardsMeta(const StandardsMetaObject &object); + ~StandardsMeta(); + + int id() const; + int specDataId() const; + void setSpecDataId(int specDataId); + QDateTime specCreated() const; + void setSpecCreated(const QDateTime &specCreated); + QDateTime specLastModified() const; + void setSpecLastModified(const QDateTime &specLastModified); + QDateTime specValidStart() const; + void setSpecValidStart(const QDateTime &specValidStart); + QDateTime specValidEnd() const; + void setSpecValidEnd(const QDateTime &specValidEnd); + QString lastEditor() const; + void setLastEditor(const QString &lastEditor); + QString gLegacy() const; + void setGLegacy(const QString &gLegacy); + QString responsibility() const; + void setResponsibility(const QString &responsibility); + QString specComment() const; + void setSpecComment(const QString &specComment); + QString specMarker() const; + void setSpecMarker(const QString &specMarker); + QString groups() const; + void setGroups(const QString &groups); + StandardsMeta &operator=(const StandardsMeta &other); + + static void saveMeta(int id, QString username); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static StandardsMeta create(int specDataId, const QDateTime &specCreated, const QDateTime &specLastModified, const QDateTime &specValidStart, const QDateTime &specValidEnd, const QString &lastEditor, const QString &gLegacy, const QString &responsibility, const QString &specComment, const QString &specMarker, const QString &groups); + static StandardsMeta create(const QVariantMap &values); + static StandardsMeta get(int id); + static StandardsMeta getBySpecDataId(int spec_data_id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const StandardsMeta &model); + friend QDataStream &operator>>(QDataStream &ds, StandardsMeta &model); +}; + +Q_DECLARE_METATYPE(StandardsMeta) +Q_DECLARE_METATYPE(QList) + +#endif // STANDARDSMETA_H diff --git a/models/standardsmetawaste.cpp b/models/standardsmetawaste.cpp new file mode 100644 index 0000000..ee00a65 --- /dev/null +++ b/models/standardsmetawaste.cpp @@ -0,0 +1,257 @@ +#include +#include "standardsmetawaste.h" +#include "sqlobjects/standardsmetawasteobject.h" + +StandardsMetaWaste::StandardsMetaWaste() : + TAbstractModel(), + d(new StandardsMetaWasteObject()) +{ + // set the initial parameters +} + +StandardsMetaWaste::StandardsMetaWaste(const StandardsMetaWaste &other) : + TAbstractModel(), + d(other.d) +{ } + +StandardsMetaWaste::StandardsMetaWaste(const StandardsMetaWasteObject &object) : + TAbstractModel(), + d(new StandardsMetaWasteObject(object)) +{ } + +StandardsMetaWaste::~StandardsMetaWaste() +{ + // If the reference count becomes 0, + // the shared data object 'StandardsMetaWasteObject' is deleted. +} + +int StandardsMetaWaste::id() const +{ + return d->id; +} + +QDateTime StandardsMetaWaste::changedOn() const +{ + return d->changed_on; +} + +void StandardsMetaWaste::setChangedOn(const QDateTime &changedOn) +{ + d->changed_on = changedOn; +} + +int StandardsMetaWaste::idOld() const +{ + return d->id_old; +} + +void StandardsMetaWaste::setIdOld(int idOld) +{ + d->id_old = idOld; +} + +int StandardsMetaWaste::specDataId() const +{ + return d->spec_data_id; +} + +void StandardsMetaWaste::setSpecDataId(int specDataId) +{ + d->spec_data_id = specDataId; +} + +QDateTime StandardsMetaWaste::specCreated() const +{ + return d->spec_created; +} + +void StandardsMetaWaste::setSpecCreated(const QDateTime &specCreated) +{ + d->spec_created = specCreated; +} + +QDateTime StandardsMetaWaste::specLastModified() const +{ + return d->spec_last_modified; +} + +void StandardsMetaWaste::setSpecLastModified(const QDateTime &specLastModified) +{ + d->spec_last_modified = specLastModified; +} + +QDateTime StandardsMetaWaste::specValidStart() const +{ + return d->spec_valid_start; +} + +void StandardsMetaWaste::setSpecValidStart(const QDateTime &specValidStart) +{ + d->spec_valid_start = specValidStart; +} + +QDateTime StandardsMetaWaste::specValidEnd() const +{ + return d->spec_valid_end; +} + +void StandardsMetaWaste::setSpecValidEnd(const QDateTime &specValidEnd) +{ + d->spec_valid_end = specValidEnd; +} + +QString StandardsMetaWaste::lastEditor() const +{ + return d->last_editor; +} + +void StandardsMetaWaste::setLastEditor(const QString &lastEditor) +{ + d->last_editor = lastEditor; +} + +QString StandardsMetaWaste::gLegacy() const +{ + return d->g_legacy; +} + +void StandardsMetaWaste::setGLegacy(const QString &gLegacy) +{ + d->g_legacy = gLegacy; +} + +QString StandardsMetaWaste::responsibility() const +{ + return d->responsibility; +} + +void StandardsMetaWaste::setResponsibility(const QString &responsibility) +{ + d->responsibility = responsibility; +} + +QString StandardsMetaWaste::specComment() const +{ + return d->spec_comment; +} + +void StandardsMetaWaste::setSpecComment(const QString &specComment) +{ + d->spec_comment = specComment; +} + +QString StandardsMetaWaste::specMarker() const +{ + return d->spec_marker; +} + +void StandardsMetaWaste::setSpecMarker(const QString &specMarker) +{ + d->spec_marker = specMarker; +} + +QString StandardsMetaWaste::groups() const +{ + return d->groups; +} + +void StandardsMetaWaste::setGroups(const QString &groups) +{ + d->groups = groups; +} + +StandardsMetaWaste &StandardsMetaWaste::operator=(const StandardsMetaWaste &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +StandardsMetaWaste StandardsMetaWaste::create(const QDateTime &changedOn, int idOld, int specDataId, const QDateTime &specCreated, const QDateTime &specLastModified, const QDateTime &specValidStart, const QDateTime &specValidEnd, const QString &lastEditor, const QString &gLegacy, const QString &responsibility, const QString &specComment, const QString &specMarker, const QString &groups) +{ + StandardsMetaWasteObject obj; + obj.changed_on = changedOn; + obj.id_old = idOld; + obj.spec_data_id = specDataId; + obj.spec_created = specCreated; + obj.spec_last_modified = specLastModified; + obj.spec_valid_start = specValidStart; + obj.spec_valid_end = specValidEnd; + obj.last_editor = lastEditor; + obj.g_legacy = gLegacy; + obj.responsibility = responsibility; + obj.spec_comment = specComment; + obj.spec_marker = specMarker; + obj.groups = groups; + if (!obj.create()) { + return StandardsMetaWaste(); + } + return StandardsMetaWaste(obj); +} + +StandardsMetaWaste StandardsMetaWaste::create(const QVariantMap &values) +{ + StandardsMetaWaste model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +StandardsMetaWaste StandardsMetaWaste::get(int id) +{ + TSqlORMapper mapper; + return StandardsMetaWaste(mapper.findByPrimaryKey(id)); +} + +int StandardsMetaWaste::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList StandardsMetaWaste::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray StandardsMetaWaste::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(StandardsMetaWaste(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *StandardsMetaWaste::modelData() +{ + return d.data(); +} + +const TModelObject *StandardsMetaWaste::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const StandardsMetaWaste &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, StandardsMetaWaste &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(StandardsMetaWaste) diff --git a/models/standardsmetawaste.h b/models/standardsmetawaste.h new file mode 100644 index 0000000..c0e4e0e --- /dev/null +++ b/models/standardsmetawaste.h @@ -0,0 +1,77 @@ +#ifndef STANDARDSMETAWASTE_H +#define STANDARDSMETAWASTE_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class StandardsMetaWasteObject; +class QJsonArray; + + +class T_MODEL_EXPORT StandardsMetaWaste : public TAbstractModel +{ +public: + StandardsMetaWaste(); + StandardsMetaWaste(const StandardsMetaWaste &other); + StandardsMetaWaste(const StandardsMetaWasteObject &object); + ~StandardsMetaWaste(); + + int id() const; + QDateTime changedOn() const; + void setChangedOn(const QDateTime &changedOn); + int idOld() const; + void setIdOld(int idOld); + int specDataId() const; + void setSpecDataId(int specDataId); + QDateTime specCreated() const; + void setSpecCreated(const QDateTime &specCreated); + QDateTime specLastModified() const; + void setSpecLastModified(const QDateTime &specLastModified); + QDateTime specValidStart() const; + void setSpecValidStart(const QDateTime &specValidStart); + QDateTime specValidEnd() const; + void setSpecValidEnd(const QDateTime &specValidEnd); + QString lastEditor() const; + void setLastEditor(const QString &lastEditor); + QString gLegacy() const; + void setGLegacy(const QString &gLegacy); + QString responsibility() const; + void setResponsibility(const QString &responsibility); + QString specComment() const; + void setSpecComment(const QString &specComment); + QString specMarker() const; + void setSpecMarker(const QString &specMarker); + QString groups() const; + void setGroups(const QString &groups); + StandardsMetaWaste &operator=(const StandardsMetaWaste &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static StandardsMetaWaste create(const QDateTime &changedOn, int idOld, int specDataId, const QDateTime &specCreated, const QDateTime &specLastModified, const QDateTime &specValidStart, const QDateTime &specValidEnd, const QString &lastEditor, const QString &gLegacy, const QString &responsibility, const QString &specComment, const QString &specMarker, const QString &groups); + static StandardsMetaWaste create(const QVariantMap &values); + static StandardsMetaWaste get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const StandardsMetaWaste &model); + friend QDataStream &operator>>(QDataStream &ds, StandardsMetaWaste &model); +}; + +Q_DECLARE_METATYPE(StandardsMetaWaste) +Q_DECLARE_METATYPE(QList) + +#endif // STANDARDSMETAWASTE_H diff --git a/models/stdsystem.cpp b/models/stdsystem.cpp new file mode 100644 index 0000000..3b0ab98 --- /dev/null +++ b/models/stdsystem.cpp @@ -0,0 +1,231 @@ +#include +#include "stdsystem.h" +#include "sqlobjects/stdsystemobject.h" + +StdSystem::StdSystem() : + TAbstractModel(), + d(new StdSystemObject()) +{ + // set the initial parameters +} + +StdSystem::StdSystem(const StdSystem &other) : + TAbstractModel(), + d(other.d) +{ } + +StdSystem::StdSystem(const StdSystemObject &object) : + TAbstractModel(), + d(new StdSystemObject(object)) +{ } + +StdSystem::~StdSystem() +{ + // If the reference count becomes 0, + // the shared data object 'StdSystemObject' is deleted. +} + +// ##### + +QString StdSystem::convertDate(QDate buildtime) +{ + return buildtime.toString("yyyy-MM-dd"); +} + +QString StdSystem::getAppVersion() +{ + return ("IT-IS ReST API v00.01.00-Beta+20"); +} + +// ##### + +QJsonArray StdSystem::getAllJson(const QString &active, const QString &std_type) +{ + + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + query.prepare("SELECT * FROM std_system WHERE active = ? AND std_type = ? order by sort"); + query.addBindValue(active); + query.addBindValue(std_type); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["sys_msg"] = msg; + jsonObject["sys_err"] = "1"; + jsonArray.append(jsonObject); + return jsonArray; + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["std_type"] = query.value(1).toString(); + jsonObject["std_attr"] = query.value(2).toString(); + jsonObject["std_val"] = query.value(3).toString(); + jsonObject["std_flag"] = query.value(4).toString(); + jsonObject["sort"] = query.value(5).toString(); + jsonObject["active"] = query.value(6).toString(); + + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +int StdSystem::id() const +{ + return d->id; +} + +QString StdSystem::stdType() const +{ + return d->std_type; +} + +void StdSystem::setStdType(const QString &stdType) +{ + d->std_type = stdType; +} + +QString StdSystem::stdAttr() const +{ + return d->std_attr; +} + +void StdSystem::setStdAttr(const QString &stdAttr) +{ + d->std_attr = stdAttr; +} + +QString StdSystem::stdVal() const +{ + return d->std_val; +} + +void StdSystem::setStdVal(const QString &stdVal) +{ + d->std_val = stdVal; +} + +QString StdSystem::stdFlag() const +{ + return d->std_flag; +} + +void StdSystem::setStdFlag(const QString &stdFlag) +{ + d->std_flag = stdFlag; +} + +int StdSystem::sort() const +{ + return d->sort; +} + +void StdSystem::setSort(int sort) +{ + d->sort = sort; +} + +int StdSystem::active() const +{ + return d->active; +} + +void StdSystem::setActive(int active) +{ + d->active = active; +} + +StdSystem &StdSystem::operator=(const StdSystem &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +StdSystem StdSystem::create(const QString &stdType, const QString &stdAttr, const QString &stdVal, const QString &stdFlag, int sort, int active) +{ + StdSystemObject obj; + obj.std_type = stdType; + obj.std_attr = stdAttr; + obj.std_val = stdVal; + obj.std_flag = stdFlag; + obj.sort = sort; + obj.active = active; + if (!obj.create()) { + return StdSystem(); + } + return StdSystem(obj); +} + +StdSystem StdSystem::create(const QVariantMap &values) +{ + StdSystem model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +StdSystem StdSystem::get(int id) +{ + TSqlORMapper mapper; + return StdSystem(mapper.findByPrimaryKey(id)); +} + +int StdSystem::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList StdSystem::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray StdSystem::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(StdSystem(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *StdSystem::modelData() +{ + return d.data(); +} + +const TModelObject *StdSystem::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const StdSystem &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, StdSystem &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(StdSystem) diff --git a/models/stdsystem.h b/models/stdsystem.h new file mode 100644 index 0000000..a1359ff --- /dev/null +++ b/models/stdsystem.h @@ -0,0 +1,69 @@ +#ifndef STDSYSTEM_H +#define STDSYSTEM_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class StdSystemObject; +class QJsonArray; + + +class T_MODEL_EXPORT StdSystem : public TAbstractModel +{ +public: + StdSystem(); + StdSystem(const StdSystem &other); + StdSystem(const StdSystemObject &object); + ~StdSystem(); + + int id() const; + QString stdType() const; + void setStdType(const QString &stdType); + QString stdAttr() const; + void setStdAttr(const QString &stdAttr); + QString stdVal() const; + void setStdVal(const QString &stdVal); + QString stdFlag() const; + void setStdFlag(const QString &stdFlag); + int sort() const; + void setSort(int sort); + int active() const; + void setActive(int active); + StdSystem &operator=(const StdSystem &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static StdSystem create(const QString &stdType, const QString &stdAttr, const QString &stdVal, const QString &stdFlag, int sort, int active); + static StdSystem create(const QVariantMap &values); + static StdSystem get(int id); + static int count(); + + static QList getAll(); + static QJsonArray getAllJson(); + static QJsonArray getAllJson(const QString &active, const QString &std_type); + + static QString convertDate(QDate buildtime); + + static QString getAppVersion(); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const StdSystem &model); + friend QDataStream &operator>>(QDataStream &ds, StdSystem &model); +}; + +Q_DECLARE_METATYPE(StdSystem) +Q_DECLARE_METATYPE(QList) + +#endif // STDSYSTEM_H diff --git a/models/webmenu.cpp b/models/webmenu.cpp new file mode 100644 index 0000000..0f15301 --- /dev/null +++ b/models/webmenu.cpp @@ -0,0 +1,375 @@ +#include +#include "webmenu.h" +#include "sqlobjects/webmenuobject.h" + +Webmenu::Webmenu() : + TAbstractModel(), + d(new WebmenuObject()) +{ + // set the initial parameters +} + +Webmenu::Webmenu(const Webmenu &other) : + TAbstractModel(), + d(other.d) +{ } + +Webmenu::Webmenu(const WebmenuObject &object) : + TAbstractModel(), + d(new WebmenuObject(object)) +{ } + +Webmenu::~Webmenu() +{ + // If the reference count becomes 0, + // the shared data object 'WebmenuObject' is deleted. +} + +// ##### + +QJsonArray Webmenu::getMnu(QString strGroups) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + QString andStr = strGroups; +/* + strGroups.replace("{", ""); + strGroups.replace("}", ""); + QStringList groups = strGroups.split(","); + + QString andStr; + + int i = 0; + do + { + if(i == 0) + { + andStr.append("('" + groups[i] + "' = ANY (groups)"); + } + else + { + andStr.append(" OR '" + groups[i] + "' = ANY (groups)"); + } + i++; + }while(i < groups.size()); + andStr.append(")"); +*/ + + query.prepare("select * from webmenu where (mnu_id = 0 and mnu_sub_id = 0) and " + andStr + " AND active = '1' order by sort"); + query.addBindValue(andStr); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["ERR_MSG"] = msg; + jsonObject["ERR_RET"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + jsonObject["id"] = query.value(0).toString(); + jsonObject["mnu_id"] = query.value(1).toString(); + jsonObject["mnu_sub_id"] = query.value(2).toString(); + jsonObject["name_de"] = query.value(3).toString(); + jsonObject["desc_de"] = query.value(4).toString(); + jsonObject["name_en"] = query.value(5).toString(); + jsonObject["desc_en"] = query.value(6).toString(); + jsonObject["mnu_uri"] = query.value(7).toString(); + jsonObject["mnu_item"] = query.value(9).toString(); + jsonObject["sort"] = query.value(10).toString(); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +QJsonArray Webmenu::getMnuSub(QString &mnu, QString strGroups) +{ + TSqlQuery query; + QJsonObject jsonObject; + QJsonArray jsonArray; + QString msg; + + QString andStr = strGroups; +/* + strGroups.replace("{", ""); + strGroups.replace("}", ""); + QStringList groups = strGroups.split(","); + + QString andStr; + int i = 0; + do + { + if(i == 0) + { + andStr.append("('" + groups[i] + "' = ANY (groups)"); + } + else + { + andStr.append(" OR '" + groups[i] + "' = ANY (groups)"); + } + i++; + }while(i < groups.size()); + andStr.append(")"); +*/ + + // query.prepare("select * from webmenu where (mnu_item = ? and mnu_sub_id = 1) and " + andStr + " AND active = '1' order by sort"); + query.prepare("select * from webmenu where (mnu_item ILIKE ? and mnu_sub_id = 1) and " + andStr + " AND active = '1' order by sort"); + query.addBindValue(mnu); + + if(!query.exec()) + { + msg = query.lastError().text(); + jsonObject["ERR_MSG"] = msg; + jsonObject["ERR_RET"] = "1"; + jsonArray.append(jsonObject); + } + + while (query.next()) + { + + QString erg = query.value(6).toString(); + erg.replace("{", ""); + erg.replace("}", ""); + QStringList groups = erg.split(","); + + /* + jsonObject["test"] = groups[0]; + + if(groups.contains("BMW",Qt::CaseInsensitive)) + { + jsonObject["BMW"] = "yepp"; + } + if(groups.contains("BmW",Qt::CaseInsensitive)) + { + jsonObject["BmW"] = "auchyepp"; + } + */ + jsonObject["id"] = query.value(0).toString(); + jsonObject["mnu_id"] = query.value(1).toString(); + jsonObject["mnu_sub_id"] = query.value(2).toString(); + jsonObject["name_de"] = query.value(3).toString(); + jsonObject["desc_de"] = query.value(4).toString(); + jsonObject["name_en"] = query.value(5).toString(); + jsonObject["desc_en"] = query.value(6).toString(); + jsonObject["mnu_uri"] = query.value(7).toString(); + jsonObject["mnu_item"] = query.value(9).toString(); + jsonObject["sort"] = query.value(10).toString(); + jsonArray.append(jsonObject); + } + + return jsonArray; +} + +int Webmenu::id() const +{ + return d->id; +} + +int Webmenu::mnuId() const +{ + return d->mnu_id; +} + +void Webmenu::setMnuId(int mnuId) +{ + d->mnu_id = mnuId; +} + +int Webmenu::mnuSubId() const +{ + return d->mnu_sub_id; +} + +void Webmenu::setMnuSubId(int mnuSubId) +{ + d->mnu_sub_id = mnuSubId; +} + +QString Webmenu::nameDe() const +{ + return d->name_de; +} + +void Webmenu::setNameDe(const QString &nameDe) +{ + d->name_de = nameDe; +} + +QString Webmenu::descDe() const +{ + return d->desc_de; +} + +void Webmenu::setDescDe(const QString &descDe) +{ + d->desc_de = descDe; +} + +QString Webmenu::nameEn() const +{ + return d->name_en; +} + +void Webmenu::setNameEn(const QString &nameEn) +{ + d->name_en = nameEn; +} + +QString Webmenu::descEn() const +{ + return d->desc_en; +} + +void Webmenu::setDescEn(const QString &descEn) +{ + d->desc_en = descEn; +} + +QString Webmenu::mnuUri() const +{ + return d->mnu_uri; +} + +void Webmenu::setMnuUri(const QString &mnuUri) +{ + d->mnu_uri = mnuUri; +} + +QString Webmenu::groups() const +{ + return d->groups; +} + +void Webmenu::setGroups(const QString &groups) +{ + d->groups = groups; +} + +QString Webmenu::mnuItem() const +{ + return d->mnu_item; +} + +void Webmenu::setMnuItem(const QString &mnuItem) +{ + d->mnu_item = mnuItem; +} + +int Webmenu::sort() const +{ + return d->sort; +} + +void Webmenu::setSort(int sort) +{ + d->sort = sort; +} + +int Webmenu::active() const +{ + return d->active; +} + +void Webmenu::setActive(int active) +{ + d->active = active; +} + +Webmenu &Webmenu::operator=(const Webmenu &other) +{ + d = other.d; // increments the reference count of the data + return *this; +} + +Webmenu Webmenu::create(int mnuId, int mnuSubId, const QString &nameDe, const QString &descDe, const QString &nameEn, const QString &descEn, const QString &mnuUri, const QString &groups, const QString &mnuItem, int sort, int active) +{ + WebmenuObject obj; + obj.mnu_id = mnuId; + obj.mnu_sub_id = mnuSubId; + obj.name_de = nameDe; + obj.desc_de = descDe; + obj.name_en = nameEn; + obj.desc_en = descEn; + obj.mnu_uri = mnuUri; + obj.groups = groups; + obj.mnu_item = mnuItem; + obj.sort = sort; + obj.active = active; + if (!obj.create()) { + return Webmenu(); + } + return Webmenu(obj); +} + +Webmenu Webmenu::create(const QVariantMap &values) +{ + Webmenu model; + model.setProperties(values); + if (!model.d->create()) { + model.d->clear(); + } + return model; +} + +Webmenu Webmenu::get(int id) +{ + TSqlORMapper mapper; + return Webmenu(mapper.findByPrimaryKey(id)); +} + +int Webmenu::count() +{ + TSqlORMapper mapper; + return mapper.findCount(); +} + +QList Webmenu::getAll() +{ + return tfGetModelListByCriteria(TCriteria()); +} + +QJsonArray Webmenu::getAllJson() +{ + QJsonArray array; + TSqlORMapper mapper; + + if (mapper.find() > 0) { + for (TSqlORMapperIterator i(mapper); i.hasNext(); ) { + array.append(QJsonValue(QJsonObject::fromVariantMap(Webmenu(i.next()).toVariantMap()))); + } + } + return array; +} + +TModelObject *Webmenu::modelData() +{ + return d.data(); +} + +const TModelObject *Webmenu::modelData() const +{ + return d.data(); +} + +QDataStream &operator<<(QDataStream &ds, const Webmenu &model) +{ + auto varmap = model.toVariantMap(); + ds << varmap; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, Webmenu &model) +{ + QVariantMap varmap; + ds >> varmap; + model.setProperties(varmap); + return ds; +} + +// Don't remove below this line +T_REGISTER_STREAM_OPERATORS(Webmenu) diff --git a/models/webmenu.h b/models/webmenu.h new file mode 100644 index 0000000..1772ba7 --- /dev/null +++ b/models/webmenu.h @@ -0,0 +1,76 @@ +#ifndef WEBMENU_H +#define WEBMENU_H + +#include +#include +#include +#include +#include +#include + +class TModelObject; +class WebmenuObject; +class QJsonArray; + + +class T_MODEL_EXPORT Webmenu : public TAbstractModel +{ +public: + Webmenu(); + Webmenu(const Webmenu &other); + Webmenu(const WebmenuObject &object); + ~Webmenu(); + + int id() const; + int mnuId() const; + void setMnuId(int mnuId); + int mnuSubId() const; + void setMnuSubId(int mnuSubId); + QString nameDe() const; + void setNameDe(const QString &nameDe); + QString descDe() const; + void setDescDe(const QString &descDe); + QString nameEn() const; + void setNameEn(const QString &nameEn); + QString descEn() const; + void setDescEn(const QString &descEn); + QString mnuUri() const; + void setMnuUri(const QString &mnuUri); + QString groups() const; + void setGroups(const QString &groups); + QString mnuItem() const; + void setMnuItem(const QString &mnuItem); + int sort() const; + void setSort(int sort); + int active() const; + void setActive(int active); + Webmenu &operator=(const Webmenu &other); + + bool create() override { return TAbstractModel::create(); } + bool update() override { return TAbstractModel::update(); } + bool save() override { return TAbstractModel::save(); } + bool remove() override { return TAbstractModel::remove(); } + + static Webmenu create(int mnuId, int mnuSubId, const QString &nameDe, const QString &descDe, const QString &nameEn, const QString &descEn, const QString &mnuUri, const QString &groups, const QString &mnuItem, int sort, int active); + static Webmenu create(const QVariantMap &values); + static Webmenu get(int id); + static int count(); + static QList getAll(); + static QJsonArray getAllJson(); + + static QJsonArray getMnu(QString groups); + static QJsonArray getMnuSub(QString &mnu, QString groups); + +private: + QSharedDataPointer d; + + TModelObject *modelData() override; + const TModelObject *modelData() const override; + friend QDataStream &operator<<(QDataStream &ds, const Webmenu &model); + friend QDataStream &operator>>(QDataStream &ds, Webmenu &model); +}; + +Q_DECLARE_METATYPE(Webmenu) +Q_DECLARE_METATYPE(QList) + +#endif // WEBMENU_H diff --git a/public/401.html b/public/401.html new file mode 100644 index 0000000..a3e4d02 --- /dev/null +++ b/public/401.html @@ -0,0 +1,84 @@ + + + + + + + + Unauthorized + + + + + + + + + + + + + + + + + + + + + + + +
    +

    IaaS::IT-IS ReST API

    +
    + + +

    +
    + +

    + +
    +

    Unauthorized

    +

    Not authorized to access the page or resource you were trying to reach.

    +
    + + + + + + diff --git a/public/403.html b/public/403.html new file mode 100644 index 0000000..5d61d12 --- /dev/null +++ b/public/403.html @@ -0,0 +1,28 @@ + + + + + Forbidden + + + + +
    +

    Forbidden

    +

    Accessing the page or resource you were trying to reach is absolutely forbidden.

    +
    + + diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..4df129a --- /dev/null +++ b/public/404.html @@ -0,0 +1,28 @@ + + + + + Page Not Found + + + + +
    +

    Page Not Found

    +

    The server has not found anything matching the Request-URI.

    +
    + + diff --git a/public/413.html b/public/413.html new file mode 100644 index 0000000..cfb748c --- /dev/null +++ b/public/413.html @@ -0,0 +1,28 @@ + + + + + Request Entity Too Large + + + + +
    +

    Request Entity Too Large

    +

    The server is refusing to process a request because the request entity is larger than the server is willing or able to process.

    +
    + + diff --git a/public/500.html b/public/500.html new file mode 100644 index 0000000..1a1f27b --- /dev/null +++ b/public/500.html @@ -0,0 +1,29 @@ + + + + + Internal Server Error + + + + +
    +

    Internal Server Error

    +

    The server encountered an unexpected condition which prevented it from fulfilling the request. +

    +
    + + diff --git a/public/Icons/149906.svg b/public/Icons/149906.svg new file mode 100644 index 0000000..67b1a05 --- /dev/null +++ b/public/Icons/149906.svg @@ -0,0 +1,119 @@ + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + + + + + + + + + + + + diff --git a/public/Icons/159236.svg b/public/Icons/159236.svg new file mode 100644 index 0000000..5c4f171 --- /dev/null +++ b/public/Icons/159236.svg @@ -0,0 +1,39 @@ + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + diff --git a/public/Icons/1691389.svg b/public/Icons/1691389.svg new file mode 100644 index 0000000..2906871 --- /dev/null +++ b/public/Icons/1691389.svg @@ -0,0 +1,83 @@ + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + + + + + + diff --git a/public/Icons/23802.svg b/public/Icons/23802.svg new file mode 100644 index 0000000..1b956f8 --- /dev/null +++ b/public/Icons/23802.svg @@ -0,0 +1,222 @@ + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/Icons/304967.svg b/public/Icons/304967.svg new file mode 100644 index 0000000..7dfabdd --- /dev/null +++ b/public/Icons/304967.svg @@ -0,0 +1,48 @@ + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + + diff --git a/public/Icons/308973.svg b/public/Icons/308973.svg new file mode 100644 index 0000000..e60e80b --- /dev/null +++ b/public/Icons/308973.svg @@ -0,0 +1,118 @@ + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + + + + + + + + + + + + diff --git a/public/Icons/Hitchhiker-Symbol-icon.png b/public/Icons/Hitchhiker-Symbol-icon.png new file mode 100644 index 0000000..4851f57 Binary files /dev/null and b/public/Icons/Hitchhiker-Symbol-icon.png differ diff --git a/public/Icons/Marvin-icon.png b/public/Icons/Marvin-icon.png new file mode 100644 index 0000000..56a8ad1 Binary files /dev/null and b/public/Icons/Marvin-icon.png differ diff --git a/public/Icons/alarm-fill.svg b/public/Icons/alarm-fill.svg new file mode 100644 index 0000000..ee5f4a4 --- /dev/null +++ b/public/Icons/alarm-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/alarm.svg b/public/Icons/alarm.svg new file mode 100644 index 0000000..3e9cebb --- /dev/null +++ b/public/Icons/alarm.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/align-bottom.svg b/public/Icons/align-bottom.svg new file mode 100644 index 0000000..c86cf89 --- /dev/null +++ b/public/Icons/align-bottom.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/align-center.svg b/public/Icons/align-center.svg new file mode 100644 index 0000000..d2f0438 --- /dev/null +++ b/public/Icons/align-center.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/align-end.svg b/public/Icons/align-end.svg new file mode 100644 index 0000000..0e27501 --- /dev/null +++ b/public/Icons/align-end.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/align-middle.svg b/public/Icons/align-middle.svg new file mode 100644 index 0000000..eb95e80 --- /dev/null +++ b/public/Icons/align-middle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/align-start.svg b/public/Icons/align-start.svg new file mode 100644 index 0000000..19db6ec --- /dev/null +++ b/public/Icons/align-start.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/align-top.svg b/public/Icons/align-top.svg new file mode 100644 index 0000000..843e661 --- /dev/null +++ b/public/Icons/align-top.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/alt.svg b/public/Icons/alt.svg new file mode 100644 index 0000000..794e069 --- /dev/null +++ b/public/Icons/alt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/app-indicator.svg b/public/Icons/app-indicator.svg new file mode 100644 index 0000000..92347f2 --- /dev/null +++ b/public/Icons/app-indicator.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/app.svg b/public/Icons/app.svg new file mode 100644 index 0000000..a5cb396 --- /dev/null +++ b/public/Icons/app.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/archive-fill.svg b/public/Icons/archive-fill.svg new file mode 100644 index 0000000..753662b --- /dev/null +++ b/public/Icons/archive-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/archive.svg b/public/Icons/archive.svg new file mode 100644 index 0000000..a427155 --- /dev/null +++ b/public/Icons/archive.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-90deg-down.svg b/public/Icons/arrow-90deg-down.svg new file mode 100644 index 0000000..ac2b8b1 --- /dev/null +++ b/public/Icons/arrow-90deg-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-90deg-left.svg b/public/Icons/arrow-90deg-left.svg new file mode 100644 index 0000000..9c28e15 --- /dev/null +++ b/public/Icons/arrow-90deg-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-90deg-right.svg b/public/Icons/arrow-90deg-right.svg new file mode 100644 index 0000000..613bc07 --- /dev/null +++ b/public/Icons/arrow-90deg-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-90deg-up.svg b/public/Icons/arrow-90deg-up.svg new file mode 100644 index 0000000..d42bfd8 --- /dev/null +++ b/public/Icons/arrow-90deg-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-bar-down.svg b/public/Icons/arrow-bar-down.svg new file mode 100644 index 0000000..4d23ef9 --- /dev/null +++ b/public/Icons/arrow-bar-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-bar-left.svg b/public/Icons/arrow-bar-left.svg new file mode 100644 index 0000000..982eef5 --- /dev/null +++ b/public/Icons/arrow-bar-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-bar-right.svg b/public/Icons/arrow-bar-right.svg new file mode 100644 index 0000000..30c7ade --- /dev/null +++ b/public/Icons/arrow-bar-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-bar-up.svg b/public/Icons/arrow-bar-up.svg new file mode 100644 index 0000000..9741f25 --- /dev/null +++ b/public/Icons/arrow-bar-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-clockwise.svg b/public/Icons/arrow-clockwise.svg new file mode 100644 index 0000000..7a05f7d --- /dev/null +++ b/public/Icons/arrow-clockwise.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-counterclockwise.svg b/public/Icons/arrow-counterclockwise.svg new file mode 100644 index 0000000..01a40bb --- /dev/null +++ b/public/Icons/arrow-counterclockwise.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-circle-fill.svg b/public/Icons/arrow-down-circle-fill.svg new file mode 100644 index 0000000..fbc302f --- /dev/null +++ b/public/Icons/arrow-down-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-circle.svg b/public/Icons/arrow-down-circle.svg new file mode 100644 index 0000000..6dd5543 --- /dev/null +++ b/public/Icons/arrow-down-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-left-circle-fill.svg b/public/Icons/arrow-down-left-circle-fill.svg new file mode 100644 index 0000000..0019add --- /dev/null +++ b/public/Icons/arrow-down-left-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-left-circle.svg b/public/Icons/arrow-down-left-circle.svg new file mode 100644 index 0000000..86ab337 --- /dev/null +++ b/public/Icons/arrow-down-left-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-left-square-fill.svg b/public/Icons/arrow-down-left-square-fill.svg new file mode 100644 index 0000000..1acc671 --- /dev/null +++ b/public/Icons/arrow-down-left-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-left-square.svg b/public/Icons/arrow-down-left-square.svg new file mode 100644 index 0000000..5445104 --- /dev/null +++ b/public/Icons/arrow-down-left-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-left.svg b/public/Icons/arrow-down-left.svg new file mode 100644 index 0000000..8451f0b --- /dev/null +++ b/public/Icons/arrow-down-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-right-circle-fill.svg b/public/Icons/arrow-down-right-circle-fill.svg new file mode 100644 index 0000000..54d29d1 --- /dev/null +++ b/public/Icons/arrow-down-right-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-right-circle.svg b/public/Icons/arrow-down-right-circle.svg new file mode 100644 index 0000000..6a8fd73 --- /dev/null +++ b/public/Icons/arrow-down-right-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-right-square-fill.svg b/public/Icons/arrow-down-right-square-fill.svg new file mode 100644 index 0000000..7884207 --- /dev/null +++ b/public/Icons/arrow-down-right-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-right-square.svg b/public/Icons/arrow-down-right-square.svg new file mode 100644 index 0000000..1a638e1 --- /dev/null +++ b/public/Icons/arrow-down-right-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-right.svg b/public/Icons/arrow-down-right.svg new file mode 100644 index 0000000..87cc351 --- /dev/null +++ b/public/Icons/arrow-down-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-short.svg b/public/Icons/arrow-down-short.svg new file mode 100644 index 0000000..35b1c03 --- /dev/null +++ b/public/Icons/arrow-down-short.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-square-fill.svg b/public/Icons/arrow-down-square-fill.svg new file mode 100644 index 0000000..d735894 --- /dev/null +++ b/public/Icons/arrow-down-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-square.svg b/public/Icons/arrow-down-square.svg new file mode 100644 index 0000000..1ed66bf --- /dev/null +++ b/public/Icons/arrow-down-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-down-up.svg b/public/Icons/arrow-down-up.svg new file mode 100644 index 0000000..2431110 --- /dev/null +++ b/public/Icons/arrow-down-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-down.svg b/public/Icons/arrow-down.svg new file mode 100644 index 0000000..5956c24 --- /dev/null +++ b/public/Icons/arrow-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-left-circle-fill.svg b/public/Icons/arrow-left-circle-fill.svg new file mode 100644 index 0000000..786ccdd --- /dev/null +++ b/public/Icons/arrow-left-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-left-circle.svg b/public/Icons/arrow-left-circle.svg new file mode 100644 index 0000000..b059d27 --- /dev/null +++ b/public/Icons/arrow-left-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-left-right.svg b/public/Icons/arrow-left-right.svg new file mode 100644 index 0000000..7d18f68 --- /dev/null +++ b/public/Icons/arrow-left-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-left-short.svg b/public/Icons/arrow-left-short.svg new file mode 100644 index 0000000..7ff82dd --- /dev/null +++ b/public/Icons/arrow-left-short.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-left-square-fill.svg b/public/Icons/arrow-left-square-fill.svg new file mode 100644 index 0000000..70ea0a1 --- /dev/null +++ b/public/Icons/arrow-left-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-left-square.svg b/public/Icons/arrow-left-square.svg new file mode 100644 index 0000000..13d761d --- /dev/null +++ b/public/Icons/arrow-left-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-left.svg b/public/Icons/arrow-left.svg new file mode 100644 index 0000000..5756eca --- /dev/null +++ b/public/Icons/arrow-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-repeat.svg b/public/Icons/arrow-repeat.svg new file mode 100644 index 0000000..14ba7b0 --- /dev/null +++ b/public/Icons/arrow-repeat.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-return-left.svg b/public/Icons/arrow-return-left.svg new file mode 100644 index 0000000..93c8c5f --- /dev/null +++ b/public/Icons/arrow-return-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-return-right.svg b/public/Icons/arrow-return-right.svg new file mode 100644 index 0000000..ae66cc8 --- /dev/null +++ b/public/Icons/arrow-return-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-right-circle-fill.svg b/public/Icons/arrow-right-circle-fill.svg new file mode 100644 index 0000000..717e84f --- /dev/null +++ b/public/Icons/arrow-right-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-right-circle.svg b/public/Icons/arrow-right-circle.svg new file mode 100644 index 0000000..174bc9f --- /dev/null +++ b/public/Icons/arrow-right-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-right-short.svg b/public/Icons/arrow-right-short.svg new file mode 100644 index 0000000..bd29f0b --- /dev/null +++ b/public/Icons/arrow-right-short.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-right-square-fill.svg b/public/Icons/arrow-right-square-fill.svg new file mode 100644 index 0000000..af20fe8 --- /dev/null +++ b/public/Icons/arrow-right-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-right-square.svg b/public/Icons/arrow-right-square.svg new file mode 100644 index 0000000..b7ff647 --- /dev/null +++ b/public/Icons/arrow-right-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-right.svg b/public/Icons/arrow-right.svg new file mode 100644 index 0000000..cbbf545 --- /dev/null +++ b/public/Icons/arrow-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-circle-fill.svg b/public/Icons/arrow-up-circle-fill.svg new file mode 100644 index 0000000..ca98a5a --- /dev/null +++ b/public/Icons/arrow-up-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-circle.svg b/public/Icons/arrow-up-circle.svg new file mode 100644 index 0000000..c743a4d --- /dev/null +++ b/public/Icons/arrow-up-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-left-circle-fill.svg b/public/Icons/arrow-up-left-circle-fill.svg new file mode 100644 index 0000000..155d19a --- /dev/null +++ b/public/Icons/arrow-up-left-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-left-circle.svg b/public/Icons/arrow-up-left-circle.svg new file mode 100644 index 0000000..117c1f4 --- /dev/null +++ b/public/Icons/arrow-up-left-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-left-square-fill.svg b/public/Icons/arrow-up-left-square-fill.svg new file mode 100644 index 0000000..cbc323a --- /dev/null +++ b/public/Icons/arrow-up-left-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-left-square.svg b/public/Icons/arrow-up-left-square.svg new file mode 100644 index 0000000..73209c7 --- /dev/null +++ b/public/Icons/arrow-up-left-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-left.svg b/public/Icons/arrow-up-left.svg new file mode 100644 index 0000000..9af2a09 --- /dev/null +++ b/public/Icons/arrow-up-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-right-circle-fill.svg b/public/Icons/arrow-up-right-circle-fill.svg new file mode 100644 index 0000000..2df5622 --- /dev/null +++ b/public/Icons/arrow-up-right-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-right-circle.svg b/public/Icons/arrow-up-right-circle.svg new file mode 100644 index 0000000..512a7f0 --- /dev/null +++ b/public/Icons/arrow-up-right-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-right-square-fill.svg b/public/Icons/arrow-up-right-square-fill.svg new file mode 100644 index 0000000..14873a0 --- /dev/null +++ b/public/Icons/arrow-up-right-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-right-square.svg b/public/Icons/arrow-up-right-square.svg new file mode 100644 index 0000000..c73fc84 --- /dev/null +++ b/public/Icons/arrow-up-right-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-right.svg b/public/Icons/arrow-up-right.svg new file mode 100644 index 0000000..fc2a40d --- /dev/null +++ b/public/Icons/arrow-up-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-short.svg b/public/Icons/arrow-up-short.svg new file mode 100644 index 0000000..fb69e8e --- /dev/null +++ b/public/Icons/arrow-up-short.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-square-fill.svg b/public/Icons/arrow-up-square-fill.svg new file mode 100644 index 0000000..e657079 --- /dev/null +++ b/public/Icons/arrow-up-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrow-up-square.svg b/public/Icons/arrow-up-square.svg new file mode 100644 index 0000000..14193c0 --- /dev/null +++ b/public/Icons/arrow-up-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/arrow-up.svg b/public/Icons/arrow-up.svg new file mode 100644 index 0000000..caee545 --- /dev/null +++ b/public/Icons/arrow-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrows-angle-contract.svg b/public/Icons/arrows-angle-contract.svg new file mode 100644 index 0000000..e4593f3 --- /dev/null +++ b/public/Icons/arrows-angle-contract.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrows-angle-expand.svg b/public/Icons/arrows-angle-expand.svg new file mode 100644 index 0000000..76473c3 --- /dev/null +++ b/public/Icons/arrows-angle-expand.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrows-collapse.svg b/public/Icons/arrows-collapse.svg new file mode 100644 index 0000000..cb0c3af --- /dev/null +++ b/public/Icons/arrows-collapse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrows-expand.svg b/public/Icons/arrows-expand.svg new file mode 100644 index 0000000..4cd66e4 --- /dev/null +++ b/public/Icons/arrows-expand.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrows-fullscreen.svg b/public/Icons/arrows-fullscreen.svg new file mode 100644 index 0000000..4471e55 --- /dev/null +++ b/public/Icons/arrows-fullscreen.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/arrows-move.svg b/public/Icons/arrows-move.svg new file mode 100644 index 0000000..3a88f46 --- /dev/null +++ b/public/Icons/arrows-move.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/aspect-ratio-fill.svg b/public/Icons/aspect-ratio-fill.svg new file mode 100644 index 0000000..97dd4b9 --- /dev/null +++ b/public/Icons/aspect-ratio-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/aspect-ratio.svg b/public/Icons/aspect-ratio.svg new file mode 100644 index 0000000..88ecb3f --- /dev/null +++ b/public/Icons/aspect-ratio.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/asterisk.svg b/public/Icons/asterisk.svg new file mode 100644 index 0000000..d1f14e0 --- /dev/null +++ b/public/Icons/asterisk.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/at.svg b/public/Icons/at.svg new file mode 100644 index 0000000..8fca62b --- /dev/null +++ b/public/Icons/at.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/award-fill.svg b/public/Icons/award-fill.svg new file mode 100644 index 0000000..861f0c8 --- /dev/null +++ b/public/Icons/award-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/award.svg b/public/Icons/award.svg new file mode 100644 index 0000000..02a0adf --- /dev/null +++ b/public/Icons/award.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/back.svg b/public/Icons/back.svg new file mode 100644 index 0000000..c5505ab --- /dev/null +++ b/public/Icons/back.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/backspace-fill.svg b/public/Icons/backspace-fill.svg new file mode 100644 index 0000000..9733acd --- /dev/null +++ b/public/Icons/backspace-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/backspace-reverse-fill.svg b/public/Icons/backspace-reverse-fill.svg new file mode 100644 index 0000000..343499c --- /dev/null +++ b/public/Icons/backspace-reverse-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/backspace-reverse.svg b/public/Icons/backspace-reverse.svg new file mode 100644 index 0000000..c45a83b --- /dev/null +++ b/public/Icons/backspace-reverse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/backspace.svg b/public/Icons/backspace.svg new file mode 100644 index 0000000..6d24460 --- /dev/null +++ b/public/Icons/backspace.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/badge-4k-fill.svg b/public/Icons/badge-4k-fill.svg new file mode 100644 index 0000000..e53f05c --- /dev/null +++ b/public/Icons/badge-4k-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/badge-4k.svg b/public/Icons/badge-4k.svg new file mode 100644 index 0000000..8439a06 --- /dev/null +++ b/public/Icons/badge-4k.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/badge-8k-fill.svg b/public/Icons/badge-8k-fill.svg new file mode 100644 index 0000000..95d73ca --- /dev/null +++ b/public/Icons/badge-8k-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/badge-8k.svg b/public/Icons/badge-8k.svg new file mode 100644 index 0000000..32b5be3 --- /dev/null +++ b/public/Icons/badge-8k.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/badge-ad-fill.svg b/public/Icons/badge-ad-fill.svg new file mode 100644 index 0000000..e0d38b8 --- /dev/null +++ b/public/Icons/badge-ad-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/badge-ad.svg b/public/Icons/badge-ad.svg new file mode 100644 index 0000000..14ad72f --- /dev/null +++ b/public/Icons/badge-ad.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/badge-cc-fill.svg b/public/Icons/badge-cc-fill.svg new file mode 100644 index 0000000..d721b25 --- /dev/null +++ b/public/Icons/badge-cc-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/badge-cc.svg b/public/Icons/badge-cc.svg new file mode 100644 index 0000000..f93bfde --- /dev/null +++ b/public/Icons/badge-cc.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/badge-hd-fill.svg b/public/Icons/badge-hd-fill.svg new file mode 100644 index 0000000..17ac71d --- /dev/null +++ b/public/Icons/badge-hd-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/badge-hd.svg b/public/Icons/badge-hd.svg new file mode 100644 index 0000000..66342f4 --- /dev/null +++ b/public/Icons/badge-hd.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/badge-tm-fill.svg b/public/Icons/badge-tm-fill.svg new file mode 100644 index 0000000..d09b269 --- /dev/null +++ b/public/Icons/badge-tm-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/badge-tm.svg b/public/Icons/badge-tm.svg new file mode 100644 index 0000000..008321a --- /dev/null +++ b/public/Icons/badge-tm.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/badge-vo-fill.svg b/public/Icons/badge-vo-fill.svg new file mode 100644 index 0000000..f14f6a7 --- /dev/null +++ b/public/Icons/badge-vo-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/badge-vo.svg b/public/Icons/badge-vo.svg new file mode 100644 index 0000000..191e232 --- /dev/null +++ b/public/Icons/badge-vo.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bag-check-fill.svg b/public/Icons/bag-check-fill.svg new file mode 100644 index 0000000..dc49c94 --- /dev/null +++ b/public/Icons/bag-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bag-check.svg b/public/Icons/bag-check.svg new file mode 100644 index 0000000..ec0e000 --- /dev/null +++ b/public/Icons/bag-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bag-dash-fill.svg b/public/Icons/bag-dash-fill.svg new file mode 100644 index 0000000..4836649 --- /dev/null +++ b/public/Icons/bag-dash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bag-dash.svg b/public/Icons/bag-dash.svg new file mode 100644 index 0000000..aca495a --- /dev/null +++ b/public/Icons/bag-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bag-fill.svg b/public/Icons/bag-fill.svg new file mode 100644 index 0000000..01d3347 --- /dev/null +++ b/public/Icons/bag-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bag-plus-fill.svg b/public/Icons/bag-plus-fill.svg new file mode 100644 index 0000000..e6b12af --- /dev/null +++ b/public/Icons/bag-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bag-plus.svg b/public/Icons/bag-plus.svg new file mode 100644 index 0000000..b6f1d5f --- /dev/null +++ b/public/Icons/bag-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bag-x-fill.svg b/public/Icons/bag-x-fill.svg new file mode 100644 index 0000000..960ef82 --- /dev/null +++ b/public/Icons/bag-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bag-x.svg b/public/Icons/bag-x.svg new file mode 100644 index 0000000..300ea7a --- /dev/null +++ b/public/Icons/bag-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bag.svg b/public/Icons/bag.svg new file mode 100644 index 0000000..152b01f --- /dev/null +++ b/public/Icons/bag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bar-chart-fill.svg b/public/Icons/bar-chart-fill.svg new file mode 100644 index 0000000..8389187 --- /dev/null +++ b/public/Icons/bar-chart-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/bar-chart-line-fill.svg b/public/Icons/bar-chart-line-fill.svg new file mode 100644 index 0000000..359c191 --- /dev/null +++ b/public/Icons/bar-chart-line-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bar-chart-line.svg b/public/Icons/bar-chart-line.svg new file mode 100644 index 0000000..191f8ff --- /dev/null +++ b/public/Icons/bar-chart-line.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bar-chart-steps.svg b/public/Icons/bar-chart-steps.svg new file mode 100644 index 0000000..47f7f42 --- /dev/null +++ b/public/Icons/bar-chart-steps.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/bar-chart.svg b/public/Icons/bar-chart.svg new file mode 100644 index 0000000..7b0600d --- /dev/null +++ b/public/Icons/bar-chart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/basket-fill.svg b/public/Icons/basket-fill.svg new file mode 100644 index 0000000..ea9d9dc --- /dev/null +++ b/public/Icons/basket-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/basket.svg b/public/Icons/basket.svg new file mode 100644 index 0000000..36924db --- /dev/null +++ b/public/Icons/basket.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/basket2-fill.svg b/public/Icons/basket2-fill.svg new file mode 100644 index 0000000..8a14ddf --- /dev/null +++ b/public/Icons/basket2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/basket2.svg b/public/Icons/basket2.svg new file mode 100644 index 0000000..704cb80 --- /dev/null +++ b/public/Icons/basket2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/basket3-fill.svg b/public/Icons/basket3-fill.svg new file mode 100644 index 0000000..ee37c81 --- /dev/null +++ b/public/Icons/basket3-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/basket3.svg b/public/Icons/basket3.svg new file mode 100644 index 0000000..503313b --- /dev/null +++ b/public/Icons/basket3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/battery-charging.svg b/public/Icons/battery-charging.svg new file mode 100644 index 0000000..1435a8d --- /dev/null +++ b/public/Icons/battery-charging.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/battery-full.svg b/public/Icons/battery-full.svg new file mode 100644 index 0000000..1dc0f36 --- /dev/null +++ b/public/Icons/battery-full.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/battery-half.svg b/public/Icons/battery-half.svg new file mode 100644 index 0000000..faedd06 --- /dev/null +++ b/public/Icons/battery-half.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/battery.svg b/public/Icons/battery.svg new file mode 100644 index 0000000..c3bb84d --- /dev/null +++ b/public/Icons/battery.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bell-fill.svg b/public/Icons/bell-fill.svg new file mode 100644 index 0000000..8bed646 --- /dev/null +++ b/public/Icons/bell-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bell.svg b/public/Icons/bell.svg new file mode 100644 index 0000000..166c30e --- /dev/null +++ b/public/Icons/bell.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bezier.svg b/public/Icons/bezier.svg new file mode 100644 index 0000000..e409955 --- /dev/null +++ b/public/Icons/bezier.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bezier2.svg b/public/Icons/bezier2.svg new file mode 100644 index 0000000..370019b --- /dev/null +++ b/public/Icons/bezier2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bicycle.svg b/public/Icons/bicycle.svg new file mode 100644 index 0000000..e476ef5 --- /dev/null +++ b/public/Icons/bicycle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/binoculars-fill.svg b/public/Icons/binoculars-fill.svg new file mode 100644 index 0000000..2898671 --- /dev/null +++ b/public/Icons/binoculars-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/binoculars.svg b/public/Icons/binoculars.svg new file mode 100644 index 0000000..1f6d032 --- /dev/null +++ b/public/Icons/binoculars.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/blockquote-left.svg b/public/Icons/blockquote-left.svg new file mode 100644 index 0000000..b3fb69b --- /dev/null +++ b/public/Icons/blockquote-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/blockquote-right.svg b/public/Icons/blockquote-right.svg new file mode 100644 index 0000000..a75eb62 --- /dev/null +++ b/public/Icons/blockquote-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/book-fill.svg b/public/Icons/book-fill.svg new file mode 100644 index 0000000..82b4d4b --- /dev/null +++ b/public/Icons/book-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/book-half.svg b/public/Icons/book-half.svg new file mode 100644 index 0000000..653f02d --- /dev/null +++ b/public/Icons/book-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/book.svg b/public/Icons/book.svg new file mode 100644 index 0000000..a6e1c29 --- /dev/null +++ b/public/Icons/book.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bookmark-check-fill.svg b/public/Icons/bookmark-check-fill.svg new file mode 100644 index 0000000..536f0c0 --- /dev/null +++ b/public/Icons/bookmark-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bookmark-check.svg b/public/Icons/bookmark-check.svg new file mode 100644 index 0000000..43d7519 --- /dev/null +++ b/public/Icons/bookmark-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bookmark-dash-fill.svg b/public/Icons/bookmark-dash-fill.svg new file mode 100644 index 0000000..57ff610 --- /dev/null +++ b/public/Icons/bookmark-dash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bookmark-dash.svg b/public/Icons/bookmark-dash.svg new file mode 100644 index 0000000..63b1322 --- /dev/null +++ b/public/Icons/bookmark-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bookmark-fill.svg b/public/Icons/bookmark-fill.svg new file mode 100644 index 0000000..9f1f04a --- /dev/null +++ b/public/Icons/bookmark-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bookmark-heart-fill.svg b/public/Icons/bookmark-heart-fill.svg new file mode 100644 index 0000000..69e757c --- /dev/null +++ b/public/Icons/bookmark-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bookmark-heart.svg b/public/Icons/bookmark-heart.svg new file mode 100644 index 0000000..34a4f5c --- /dev/null +++ b/public/Icons/bookmark-heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bookmark-plus-fill.svg b/public/Icons/bookmark-plus-fill.svg new file mode 100644 index 0000000..30239a4 --- /dev/null +++ b/public/Icons/bookmark-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bookmark-plus.svg b/public/Icons/bookmark-plus.svg new file mode 100644 index 0000000..bc04b9e --- /dev/null +++ b/public/Icons/bookmark-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bookmark-star-fill.svg b/public/Icons/bookmark-star-fill.svg new file mode 100644 index 0000000..6f53d81 --- /dev/null +++ b/public/Icons/bookmark-star-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bookmark-star.svg b/public/Icons/bookmark-star.svg new file mode 100644 index 0000000..971f19d --- /dev/null +++ b/public/Icons/bookmark-star.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bookmark-x-fill.svg b/public/Icons/bookmark-x-fill.svg new file mode 100644 index 0000000..b9f3d96 --- /dev/null +++ b/public/Icons/bookmark-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bookmark-x.svg b/public/Icons/bookmark-x.svg new file mode 100644 index 0000000..1fdf56e --- /dev/null +++ b/public/Icons/bookmark-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bookmark.svg b/public/Icons/bookmark.svg new file mode 100644 index 0000000..9b4a19a --- /dev/null +++ b/public/Icons/bookmark.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bookmarks-fill.svg b/public/Icons/bookmarks-fill.svg new file mode 100644 index 0000000..822618f --- /dev/null +++ b/public/Icons/bookmarks-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/bookmarks.svg b/public/Icons/bookmarks.svg new file mode 100644 index 0000000..30c8b9d --- /dev/null +++ b/public/Icons/bookmarks.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/books.svg b/public/Icons/books.svg new file mode 100644 index 0000000..98b1894 --- /dev/null +++ b/public/Icons/books.svg @@ -0,0 +1,33 @@ + + + + image/svg+xmlbooks - lineart2016-04-03Frank Tremmelbooksbookreadingeducationteachingschoolbuchbücherunterrichtschuleline artoutlineline art books + + Ebene 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/Icons/books_pen.svg b/public/Icons/books_pen.svg new file mode 100644 index 0000000..04f03dd --- /dev/null +++ b/public/Icons/books_pen.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/Icons/books_pile.svg b/public/Icons/books_pile.svg new file mode 100644 index 0000000..0c633ff --- /dev/null +++ b/public/Icons/books_pile.svg @@ -0,0 +1,466 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + + + + + + + + + diff --git a/public/Icons/bookshelf.svg b/public/Icons/bookshelf.svg new file mode 100644 index 0000000..8f012a4 --- /dev/null +++ b/public/Icons/bookshelf.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bootstrap-fill.svg b/public/Icons/bootstrap-fill.svg new file mode 100644 index 0000000..2e23d38 --- /dev/null +++ b/public/Icons/bootstrap-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bootstrap-icons.svg b/public/Icons/bootstrap-icons.svg new file mode 100644 index 0000000..f7731a1 --- /dev/null +++ b/public/Icons/bootstrap-icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/Icons/bootstrap-reboot.svg b/public/Icons/bootstrap-reboot.svg new file mode 100644 index 0000000..a276e3c --- /dev/null +++ b/public/Icons/bootstrap-reboot.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bootstrap.svg b/public/Icons/bootstrap.svg new file mode 100644 index 0000000..c4b96ab --- /dev/null +++ b/public/Icons/bootstrap.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/border-style.svg b/public/Icons/border-style.svg new file mode 100644 index 0000000..d2b5643 --- /dev/null +++ b/public/Icons/border-style.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/border-width.svg b/public/Icons/border-width.svg new file mode 100644 index 0000000..50a95e3 --- /dev/null +++ b/public/Icons/border-width.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bounding-box-circles.svg b/public/Icons/bounding-box-circles.svg new file mode 100644 index 0000000..adb5d58 --- /dev/null +++ b/public/Icons/bounding-box-circles.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bounding-box.svg b/public/Icons/bounding-box.svg new file mode 100644 index 0000000..3136df4 --- /dev/null +++ b/public/Icons/bounding-box.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-down-left.svg b/public/Icons/box-arrow-down-left.svg new file mode 100644 index 0000000..0eb8e46 --- /dev/null +++ b/public/Icons/box-arrow-down-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-down-right.svg b/public/Icons/box-arrow-down-right.svg new file mode 100644 index 0000000..181f42f --- /dev/null +++ b/public/Icons/box-arrow-down-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-down.svg b/public/Icons/box-arrow-down.svg new file mode 100644 index 0000000..ff3dcbc --- /dev/null +++ b/public/Icons/box-arrow-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-in-down-left.svg b/public/Icons/box-arrow-in-down-left.svg new file mode 100644 index 0000000..17f8f29 --- /dev/null +++ b/public/Icons/box-arrow-in-down-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-in-down-right.svg b/public/Icons/box-arrow-in-down-right.svg new file mode 100644 index 0000000..10114b2 --- /dev/null +++ b/public/Icons/box-arrow-in-down-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-in-down.svg b/public/Icons/box-arrow-in-down.svg new file mode 100644 index 0000000..672c6c0 --- /dev/null +++ b/public/Icons/box-arrow-in-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-in-left.svg b/public/Icons/box-arrow-in-left.svg new file mode 100644 index 0000000..764d781 --- /dev/null +++ b/public/Icons/box-arrow-in-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-in-right.svg b/public/Icons/box-arrow-in-right.svg new file mode 100644 index 0000000..7716ce8 --- /dev/null +++ b/public/Icons/box-arrow-in-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-in-up-left.svg b/public/Icons/box-arrow-in-up-left.svg new file mode 100644 index 0000000..c88585f --- /dev/null +++ b/public/Icons/box-arrow-in-up-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-in-up-right.svg b/public/Icons/box-arrow-in-up-right.svg new file mode 100644 index 0000000..b1bbfac --- /dev/null +++ b/public/Icons/box-arrow-in-up-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-in-up.svg b/public/Icons/box-arrow-in-up.svg new file mode 100644 index 0000000..0ed4ca3 --- /dev/null +++ b/public/Icons/box-arrow-in-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-left.svg b/public/Icons/box-arrow-left.svg new file mode 100644 index 0000000..4e86f17 --- /dev/null +++ b/public/Icons/box-arrow-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-right.svg b/public/Icons/box-arrow-right.svg new file mode 100644 index 0000000..1ab8745 --- /dev/null +++ b/public/Icons/box-arrow-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-up-left.svg b/public/Icons/box-arrow-up-left.svg new file mode 100644 index 0000000..afada98 --- /dev/null +++ b/public/Icons/box-arrow-up-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-up-right.svg b/public/Icons/box-arrow-up-right.svg new file mode 100644 index 0000000..63c21b8 --- /dev/null +++ b/public/Icons/box-arrow-up-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-arrow-up.svg b/public/Icons/box-arrow-up.svg new file mode 100644 index 0000000..e579122 --- /dev/null +++ b/public/Icons/box-arrow-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/box-seam.svg b/public/Icons/box-seam.svg new file mode 100644 index 0000000..b69adc9 --- /dev/null +++ b/public/Icons/box-seam.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/box.svg b/public/Icons/box.svg new file mode 100644 index 0000000..d88aa9d --- /dev/null +++ b/public/Icons/box.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/braces.svg b/public/Icons/braces.svg new file mode 100644 index 0000000..b4cc0ef --- /dev/null +++ b/public/Icons/braces.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bricks.svg b/public/Icons/bricks.svg new file mode 100644 index 0000000..6a68546 --- /dev/null +++ b/public/Icons/bricks.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/briefcase-fill.svg b/public/Icons/briefcase-fill.svg new file mode 100644 index 0000000..eec485b --- /dev/null +++ b/public/Icons/briefcase-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/briefcase.svg b/public/Icons/briefcase.svg new file mode 100644 index 0000000..09cb65c --- /dev/null +++ b/public/Icons/briefcase.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/brightness-alt-high-fill.svg b/public/Icons/brightness-alt-high-fill.svg new file mode 100644 index 0000000..f5516e2 --- /dev/null +++ b/public/Icons/brightness-alt-high-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/brightness-alt-high.svg b/public/Icons/brightness-alt-high.svg new file mode 100644 index 0000000..49b8190 --- /dev/null +++ b/public/Icons/brightness-alt-high.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/brightness-alt-low-fill.svg b/public/Icons/brightness-alt-low-fill.svg new file mode 100644 index 0000000..cb66b6e --- /dev/null +++ b/public/Icons/brightness-alt-low-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/brightness-alt-low.svg b/public/Icons/brightness-alt-low.svg new file mode 100644 index 0000000..d11e3d3 --- /dev/null +++ b/public/Icons/brightness-alt-low.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/brightness-high-fill.svg b/public/Icons/brightness-high-fill.svg new file mode 100644 index 0000000..9f24b9a --- /dev/null +++ b/public/Icons/brightness-high-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/brightness-high.svg b/public/Icons/brightness-high.svg new file mode 100644 index 0000000..7630c21 --- /dev/null +++ b/public/Icons/brightness-high.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/brightness-low-fill.svg b/public/Icons/brightness-low-fill.svg new file mode 100644 index 0000000..cbe07f7 --- /dev/null +++ b/public/Icons/brightness-low-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/brightness-low.svg b/public/Icons/brightness-low.svg new file mode 100644 index 0000000..0235848 --- /dev/null +++ b/public/Icons/brightness-low.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/broadcast-pin.svg b/public/Icons/broadcast-pin.svg new file mode 100644 index 0000000..c93cccd --- /dev/null +++ b/public/Icons/broadcast-pin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/broadcast.svg b/public/Icons/broadcast.svg new file mode 100644 index 0000000..4987eeb --- /dev/null +++ b/public/Icons/broadcast.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/brush-fill.svg b/public/Icons/brush-fill.svg new file mode 100644 index 0000000..bd5df35 --- /dev/null +++ b/public/Icons/brush-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/brush.svg b/public/Icons/brush.svg new file mode 100644 index 0000000..d1b3544 --- /dev/null +++ b/public/Icons/brush.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bucket-fill.svg b/public/Icons/bucket-fill.svg new file mode 100644 index 0000000..198e3a9 --- /dev/null +++ b/public/Icons/bucket-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bucket.svg b/public/Icons/bucket.svg new file mode 100644 index 0000000..03ab5ef --- /dev/null +++ b/public/Icons/bucket.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bug-fill.svg b/public/Icons/bug-fill.svg new file mode 100644 index 0000000..525749c --- /dev/null +++ b/public/Icons/bug-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/bug.svg b/public/Icons/bug.svg new file mode 100644 index 0000000..69b9142 --- /dev/null +++ b/public/Icons/bug.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/building.svg b/public/Icons/building.svg new file mode 100644 index 0000000..f2541b3 --- /dev/null +++ b/public/Icons/building.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/building_2.svg b/public/Icons/building_2.svg new file mode 100644 index 0000000..149faf2 --- /dev/null +++ b/public/Icons/building_2.svg @@ -0,0 +1,424 @@ + + + + hopital + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + Hospital / hopital + 2011-03-26T04:23:45 + A line art of an hospital + https://openclipart.org/detail/129253/hospital--hopital-by-lmproulx + + + lmproulx + + + + + building + hospital + line art + + + + + + + + + + + diff --git a/public/Icons/bullseye.svg b/public/Icons/bullseye.svg new file mode 100644 index 0000000..b5daf97 --- /dev/null +++ b/public/Icons/bullseye.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/calculator-fill.svg b/public/Icons/calculator-fill.svg new file mode 100644 index 0000000..d633dab --- /dev/null +++ b/public/Icons/calculator-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calculator.svg b/public/Icons/calculator.svg new file mode 100644 index 0000000..1a3de49 --- /dev/null +++ b/public/Icons/calculator.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar-check-fill.svg b/public/Icons/calendar-check-fill.svg new file mode 100644 index 0000000..30620c3 --- /dev/null +++ b/public/Icons/calendar-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-check.svg b/public/Icons/calendar-check.svg new file mode 100644 index 0000000..1a6d919 --- /dev/null +++ b/public/Icons/calendar-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar-date-fill.svg b/public/Icons/calendar-date-fill.svg new file mode 100644 index 0000000..41145a2 --- /dev/null +++ b/public/Icons/calendar-date-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-date.svg b/public/Icons/calendar-date.svg new file mode 100644 index 0000000..fc98b9c --- /dev/null +++ b/public/Icons/calendar-date.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar-day-fill.svg b/public/Icons/calendar-day-fill.svg new file mode 100644 index 0000000..39cffc3 --- /dev/null +++ b/public/Icons/calendar-day-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-day.svg b/public/Icons/calendar-day.svg new file mode 100644 index 0000000..73fa00a --- /dev/null +++ b/public/Icons/calendar-day.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar-event-fill.svg b/public/Icons/calendar-event-fill.svg new file mode 100644 index 0000000..6310a29 --- /dev/null +++ b/public/Icons/calendar-event-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-event.svg b/public/Icons/calendar-event.svg new file mode 100644 index 0000000..372d94a --- /dev/null +++ b/public/Icons/calendar-event.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar-fill.svg b/public/Icons/calendar-fill.svg new file mode 100644 index 0000000..bacf7a6 --- /dev/null +++ b/public/Icons/calendar-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-minus-fill.svg b/public/Icons/calendar-minus-fill.svg new file mode 100644 index 0000000..2ef97b3 --- /dev/null +++ b/public/Icons/calendar-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-minus.svg b/public/Icons/calendar-minus.svg new file mode 100644 index 0000000..e8f1587 --- /dev/null +++ b/public/Icons/calendar-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar-month-fill.svg b/public/Icons/calendar-month-fill.svg new file mode 100644 index 0000000..a87369c --- /dev/null +++ b/public/Icons/calendar-month-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-month.svg b/public/Icons/calendar-month.svg new file mode 100644 index 0000000..ecb99bf --- /dev/null +++ b/public/Icons/calendar-month.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar-plus-fill.svg b/public/Icons/calendar-plus-fill.svg new file mode 100644 index 0000000..0d55843 --- /dev/null +++ b/public/Icons/calendar-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-plus.svg b/public/Icons/calendar-plus.svg new file mode 100644 index 0000000..41ccef0 --- /dev/null +++ b/public/Icons/calendar-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar-range-fill.svg b/public/Icons/calendar-range-fill.svg new file mode 100644 index 0000000..77e2a40 --- /dev/null +++ b/public/Icons/calendar-range-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-range.svg b/public/Icons/calendar-range.svg new file mode 100644 index 0000000..e6334f9 --- /dev/null +++ b/public/Icons/calendar-range.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar-week-fill.svg b/public/Icons/calendar-week-fill.svg new file mode 100644 index 0000000..ea9d3cf --- /dev/null +++ b/public/Icons/calendar-week-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-week.svg b/public/Icons/calendar-week.svg new file mode 100644 index 0000000..73c1007 --- /dev/null +++ b/public/Icons/calendar-week.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar-x-fill.svg b/public/Icons/calendar-x-fill.svg new file mode 100644 index 0000000..4fa7809 --- /dev/null +++ b/public/Icons/calendar-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar-x.svg b/public/Icons/calendar-x.svg new file mode 100644 index 0000000..4c79438 --- /dev/null +++ b/public/Icons/calendar-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar.svg b/public/Icons/calendar.svg new file mode 100644 index 0000000..d5cb705 --- /dev/null +++ b/public/Icons/calendar.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-check-fill.svg b/public/Icons/calendar2-check-fill.svg new file mode 100644 index 0000000..f8f7693 --- /dev/null +++ b/public/Icons/calendar2-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-check.svg b/public/Icons/calendar2-check.svg new file mode 100644 index 0000000..e778db4 --- /dev/null +++ b/public/Icons/calendar2-check.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/calendar2-date-fill.svg b/public/Icons/calendar2-date-fill.svg new file mode 100644 index 0000000..0f5eb36 --- /dev/null +++ b/public/Icons/calendar2-date-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-date.svg b/public/Icons/calendar2-date.svg new file mode 100644 index 0000000..585fbc7 --- /dev/null +++ b/public/Icons/calendar2-date.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar2-day-fill.svg b/public/Icons/calendar2-day-fill.svg new file mode 100644 index 0000000..57e82bc --- /dev/null +++ b/public/Icons/calendar2-day-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-day.svg b/public/Icons/calendar2-day.svg new file mode 100644 index 0000000..2a7b5a9 --- /dev/null +++ b/public/Icons/calendar2-day.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar2-event-fill.svg b/public/Icons/calendar2-event-fill.svg new file mode 100644 index 0000000..c8546a0 --- /dev/null +++ b/public/Icons/calendar2-event-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-event.svg b/public/Icons/calendar2-event.svg new file mode 100644 index 0000000..7c6c223 --- /dev/null +++ b/public/Icons/calendar2-event.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar2-fill.svg b/public/Icons/calendar2-fill.svg new file mode 100644 index 0000000..3176240 --- /dev/null +++ b/public/Icons/calendar2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-minus-fill.svg b/public/Icons/calendar2-minus-fill.svg new file mode 100644 index 0000000..00e0c66 --- /dev/null +++ b/public/Icons/calendar2-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-minus.svg b/public/Icons/calendar2-minus.svg new file mode 100644 index 0000000..b23c8a1 --- /dev/null +++ b/public/Icons/calendar2-minus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/calendar2-month-fill.svg b/public/Icons/calendar2-month-fill.svg new file mode 100644 index 0000000..f28ebfc --- /dev/null +++ b/public/Icons/calendar2-month-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-month.svg b/public/Icons/calendar2-month.svg new file mode 100644 index 0000000..3f17f81 --- /dev/null +++ b/public/Icons/calendar2-month.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar2-plus-fill.svg b/public/Icons/calendar2-plus-fill.svg new file mode 100644 index 0000000..b63cbe4 --- /dev/null +++ b/public/Icons/calendar2-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-plus.svg b/public/Icons/calendar2-plus.svg new file mode 100644 index 0000000..353987f --- /dev/null +++ b/public/Icons/calendar2-plus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/calendar2-range-fill.svg b/public/Icons/calendar2-range-fill.svg new file mode 100644 index 0000000..2bb03f7 --- /dev/null +++ b/public/Icons/calendar2-range-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-range.svg b/public/Icons/calendar2-range.svg new file mode 100644 index 0000000..f5ed3e7 --- /dev/null +++ b/public/Icons/calendar2-range.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar2-week-fill.svg b/public/Icons/calendar2-week-fill.svg new file mode 100644 index 0000000..d1e5216 --- /dev/null +++ b/public/Icons/calendar2-week-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-week.svg b/public/Icons/calendar2-week.svg new file mode 100644 index 0000000..634fe2b --- /dev/null +++ b/public/Icons/calendar2-week.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar2-x-fill.svg b/public/Icons/calendar2-x-fill.svg new file mode 100644 index 0000000..cda7427 --- /dev/null +++ b/public/Icons/calendar2-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar2-x.svg b/public/Icons/calendar2-x.svg new file mode 100644 index 0000000..d748100 --- /dev/null +++ b/public/Icons/calendar2-x.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/calendar2.svg b/public/Icons/calendar2.svg new file mode 100644 index 0000000..c6da21c --- /dev/null +++ b/public/Icons/calendar2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar3-event-fill.svg b/public/Icons/calendar3-event-fill.svg new file mode 100644 index 0000000..22cf257 --- /dev/null +++ b/public/Icons/calendar3-event-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar3-event.svg b/public/Icons/calendar3-event.svg new file mode 100644 index 0000000..c282b54 --- /dev/null +++ b/public/Icons/calendar3-event.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar3-fill.svg b/public/Icons/calendar3-fill.svg new file mode 100644 index 0000000..4bfe7c7 --- /dev/null +++ b/public/Icons/calendar3-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar3-range-fill.svg b/public/Icons/calendar3-range-fill.svg new file mode 100644 index 0000000..8217446 --- /dev/null +++ b/public/Icons/calendar3-range-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar3-range.svg b/public/Icons/calendar3-range.svg new file mode 100644 index 0000000..61acf6b --- /dev/null +++ b/public/Icons/calendar3-range.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar3-week-fill.svg b/public/Icons/calendar3-week-fill.svg new file mode 100644 index 0000000..a4d0dfd --- /dev/null +++ b/public/Icons/calendar3-week-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/calendar3-week.svg b/public/Icons/calendar3-week.svg new file mode 100644 index 0000000..adc2542 --- /dev/null +++ b/public/Icons/calendar3-week.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar3.svg b/public/Icons/calendar3.svg new file mode 100644 index 0000000..0ca46df --- /dev/null +++ b/public/Icons/calendar3.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar4-event.svg b/public/Icons/calendar4-event.svg new file mode 100644 index 0000000..6f83765 --- /dev/null +++ b/public/Icons/calendar4-event.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar4-range.svg b/public/Icons/calendar4-range.svg new file mode 100644 index 0000000..65bb819 --- /dev/null +++ b/public/Icons/calendar4-range.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar4-week.svg b/public/Icons/calendar4-week.svg new file mode 100644 index 0000000..5c2d25d --- /dev/null +++ b/public/Icons/calendar4-week.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/calendar4.svg b/public/Icons/calendar4.svg new file mode 100644 index 0000000..5645950 --- /dev/null +++ b/public/Icons/calendar4.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/camera-fill.svg b/public/Icons/camera-fill.svg new file mode 100644 index 0000000..ff25242 --- /dev/null +++ b/public/Icons/camera-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/camera-reels-fill.svg b/public/Icons/camera-reels-fill.svg new file mode 100644 index 0000000..f8f8115 --- /dev/null +++ b/public/Icons/camera-reels-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/camera-reels.svg b/public/Icons/camera-reels.svg new file mode 100644 index 0000000..d63ddb5 --- /dev/null +++ b/public/Icons/camera-reels.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/camera-video-fill.svg b/public/Icons/camera-video-fill.svg new file mode 100644 index 0000000..7c71312 --- /dev/null +++ b/public/Icons/camera-video-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/camera-video-off-fill.svg b/public/Icons/camera-video-off-fill.svg new file mode 100644 index 0000000..f656276 --- /dev/null +++ b/public/Icons/camera-video-off-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/camera-video-off.svg b/public/Icons/camera-video-off.svg new file mode 100644 index 0000000..c27b9e0 --- /dev/null +++ b/public/Icons/camera-video-off.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/camera-video.svg b/public/Icons/camera-video.svg new file mode 100644 index 0000000..4d4a00d --- /dev/null +++ b/public/Icons/camera-video.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/camera.svg b/public/Icons/camera.svg new file mode 100644 index 0000000..ac3e2cb --- /dev/null +++ b/public/Icons/camera.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/camera2.svg b/public/Icons/camera2.svg new file mode 100644 index 0000000..e7a294a --- /dev/null +++ b/public/Icons/camera2.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/capslock-fill.svg b/public/Icons/capslock-fill.svg new file mode 100644 index 0000000..6c5f9fc --- /dev/null +++ b/public/Icons/capslock-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/capslock.svg b/public/Icons/capslock.svg new file mode 100644 index 0000000..a2de049 --- /dev/null +++ b/public/Icons/capslock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/card-checklist.svg b/public/Icons/card-checklist.svg new file mode 100644 index 0000000..e94cb9c --- /dev/null +++ b/public/Icons/card-checklist.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/card-heading.svg b/public/Icons/card-heading.svg new file mode 100644 index 0000000..b6e8a91 --- /dev/null +++ b/public/Icons/card-heading.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/card-image.svg b/public/Icons/card-image.svg new file mode 100644 index 0000000..3a33f2b --- /dev/null +++ b/public/Icons/card-image.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/card-list.svg b/public/Icons/card-list.svg new file mode 100644 index 0000000..b47eba7 --- /dev/null +++ b/public/Icons/card-list.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/public/Icons/card-text.svg b/public/Icons/card-text.svg new file mode 100644 index 0000000..d5cde00 --- /dev/null +++ b/public/Icons/card-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/caret-down-fill.svg b/public/Icons/caret-down-fill.svg new file mode 100644 index 0000000..dad4fde --- /dev/null +++ b/public/Icons/caret-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-down-square-fill.svg b/public/Icons/caret-down-square-fill.svg new file mode 100644 index 0000000..a63801f --- /dev/null +++ b/public/Icons/caret-down-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-down-square.svg b/public/Icons/caret-down-square.svg new file mode 100644 index 0000000..4beabd0 --- /dev/null +++ b/public/Icons/caret-down-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/caret-down.svg b/public/Icons/caret-down.svg new file mode 100644 index 0000000..5f5e791 --- /dev/null +++ b/public/Icons/caret-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-left-fill.svg b/public/Icons/caret-left-fill.svg new file mode 100644 index 0000000..85ab78d --- /dev/null +++ b/public/Icons/caret-left-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-left-square-fill.svg b/public/Icons/caret-left-square-fill.svg new file mode 100644 index 0000000..32caf57 --- /dev/null +++ b/public/Icons/caret-left-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-left-square.svg b/public/Icons/caret-left-square.svg new file mode 100644 index 0000000..349dcea --- /dev/null +++ b/public/Icons/caret-left-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/caret-left.svg b/public/Icons/caret-left.svg new file mode 100644 index 0000000..f4e662f --- /dev/null +++ b/public/Icons/caret-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-right-fill.svg b/public/Icons/caret-right-fill.svg new file mode 100644 index 0000000..3db00ba --- /dev/null +++ b/public/Icons/caret-right-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-right-square-fill.svg b/public/Icons/caret-right-square-fill.svg new file mode 100644 index 0000000..adb8f09 --- /dev/null +++ b/public/Icons/caret-right-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-right-square.svg b/public/Icons/caret-right-square.svg new file mode 100644 index 0000000..7f9c6ae --- /dev/null +++ b/public/Icons/caret-right-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/caret-right.svg b/public/Icons/caret-right.svg new file mode 100644 index 0000000..bb20b7e --- /dev/null +++ b/public/Icons/caret-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-up-fill.svg b/public/Icons/caret-up-fill.svg new file mode 100644 index 0000000..7e2fec4 --- /dev/null +++ b/public/Icons/caret-up-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-up-square-fill.svg b/public/Icons/caret-up-square-fill.svg new file mode 100644 index 0000000..1f50c8d --- /dev/null +++ b/public/Icons/caret-up-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/caret-up-square.svg b/public/Icons/caret-up-square.svg new file mode 100644 index 0000000..ba8117c --- /dev/null +++ b/public/Icons/caret-up-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/caret-up.svg b/public/Icons/caret-up.svg new file mode 100644 index 0000000..b61eb80 --- /dev/null +++ b/public/Icons/caret-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cart-check-fill.svg b/public/Icons/cart-check-fill.svg new file mode 100644 index 0000000..aa4e23b --- /dev/null +++ b/public/Icons/cart-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cart-check.svg b/public/Icons/cart-check.svg new file mode 100644 index 0000000..e996204 --- /dev/null +++ b/public/Icons/cart-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cart-dash-fill.svg b/public/Icons/cart-dash-fill.svg new file mode 100644 index 0000000..61d8da6 --- /dev/null +++ b/public/Icons/cart-dash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cart-dash.svg b/public/Icons/cart-dash.svg new file mode 100644 index 0000000..7aa8cc2 --- /dev/null +++ b/public/Icons/cart-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cart-fill.svg b/public/Icons/cart-fill.svg new file mode 100644 index 0000000..6339b30 --- /dev/null +++ b/public/Icons/cart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cart-plus-fill.svg b/public/Icons/cart-plus-fill.svg new file mode 100644 index 0000000..78e2bb8 --- /dev/null +++ b/public/Icons/cart-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cart-plus.svg b/public/Icons/cart-plus.svg new file mode 100644 index 0000000..5c02897 --- /dev/null +++ b/public/Icons/cart-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cart-x-fill.svg b/public/Icons/cart-x-fill.svg new file mode 100644 index 0000000..c7fc85d --- /dev/null +++ b/public/Icons/cart-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cart-x.svg b/public/Icons/cart-x.svg new file mode 100644 index 0000000..dd0c77b --- /dev/null +++ b/public/Icons/cart-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cart.svg b/public/Icons/cart.svg new file mode 100644 index 0000000..ccbe99b --- /dev/null +++ b/public/Icons/cart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cart2.svg b/public/Icons/cart2.svg new file mode 100644 index 0000000..bbb06cc --- /dev/null +++ b/public/Icons/cart2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cart3.svg b/public/Icons/cart3.svg new file mode 100644 index 0000000..1fd56ea --- /dev/null +++ b/public/Icons/cart3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cart4.svg b/public/Icons/cart4.svg new file mode 100644 index 0000000..c843ab0 --- /dev/null +++ b/public/Icons/cart4.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cash-stack.svg b/public/Icons/cash-stack.svg new file mode 100644 index 0000000..d66265f --- /dev/null +++ b/public/Icons/cash-stack.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/cash.svg b/public/Icons/cash.svg new file mode 100644 index 0000000..e87d01f --- /dev/null +++ b/public/Icons/cash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cast.svg b/public/Icons/cast.svg new file mode 100644 index 0000000..4b3cd65 --- /dev/null +++ b/public/Icons/cast.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-dots-fill.svg b/public/Icons/chat-dots-fill.svg new file mode 100644 index 0000000..952d603 --- /dev/null +++ b/public/Icons/chat-dots-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-dots.svg b/public/Icons/chat-dots.svg new file mode 100644 index 0000000..cc6fba5 --- /dev/null +++ b/public/Icons/chat-dots.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-fill.svg b/public/Icons/chat-fill.svg new file mode 100644 index 0000000..fe3eedc --- /dev/null +++ b/public/Icons/chat-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-left-dots-fill.svg b/public/Icons/chat-left-dots-fill.svg new file mode 100644 index 0000000..2cb86a6 --- /dev/null +++ b/public/Icons/chat-left-dots-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-left-dots.svg b/public/Icons/chat-left-dots.svg new file mode 100644 index 0000000..38be081 --- /dev/null +++ b/public/Icons/chat-left-dots.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-left-fill.svg b/public/Icons/chat-left-fill.svg new file mode 100644 index 0000000..40ebeb4 --- /dev/null +++ b/public/Icons/chat-left-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-left-quote-fill.svg b/public/Icons/chat-left-quote-fill.svg new file mode 100644 index 0000000..8d2d798 --- /dev/null +++ b/public/Icons/chat-left-quote-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-left-quote.svg b/public/Icons/chat-left-quote.svg new file mode 100644 index 0000000..87d94ed --- /dev/null +++ b/public/Icons/chat-left-quote.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-left-text-fill.svg b/public/Icons/chat-left-text-fill.svg new file mode 100644 index 0000000..bb10b22 --- /dev/null +++ b/public/Icons/chat-left-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-left-text.svg b/public/Icons/chat-left-text.svg new file mode 100644 index 0000000..eba1919 --- /dev/null +++ b/public/Icons/chat-left-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-left.svg b/public/Icons/chat-left.svg new file mode 100644 index 0000000..6440918 --- /dev/null +++ b/public/Icons/chat-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-quote-fill.svg b/public/Icons/chat-quote-fill.svg new file mode 100644 index 0000000..d718be0 --- /dev/null +++ b/public/Icons/chat-quote-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-quote.svg b/public/Icons/chat-quote.svg new file mode 100644 index 0000000..1896934 --- /dev/null +++ b/public/Icons/chat-quote.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/public/Icons/chat-right-dots-fill.svg b/public/Icons/chat-right-dots-fill.svg new file mode 100644 index 0000000..1e7de76 --- /dev/null +++ b/public/Icons/chat-right-dots-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-right-dots.svg b/public/Icons/chat-right-dots.svg new file mode 100644 index 0000000..0745b79 --- /dev/null +++ b/public/Icons/chat-right-dots.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-right-fill.svg b/public/Icons/chat-right-fill.svg new file mode 100644 index 0000000..a405c4f --- /dev/null +++ b/public/Icons/chat-right-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-right-quote-fill.svg b/public/Icons/chat-right-quote-fill.svg new file mode 100644 index 0000000..000352f --- /dev/null +++ b/public/Icons/chat-right-quote-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-right-quote.svg b/public/Icons/chat-right-quote.svg new file mode 100644 index 0000000..1636036 --- /dev/null +++ b/public/Icons/chat-right-quote.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-right-text-fill.svg b/public/Icons/chat-right-text-fill.svg new file mode 100644 index 0000000..f9eb6f6 --- /dev/null +++ b/public/Icons/chat-right-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-right-text.svg b/public/Icons/chat-right-text.svg new file mode 100644 index 0000000..bc2680a --- /dev/null +++ b/public/Icons/chat-right-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-right.svg b/public/Icons/chat-right.svg new file mode 100644 index 0000000..474ae5a --- /dev/null +++ b/public/Icons/chat-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-square-dots-fill.svg b/public/Icons/chat-square-dots-fill.svg new file mode 100644 index 0000000..3b04351 --- /dev/null +++ b/public/Icons/chat-square-dots-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-square-dots.svg b/public/Icons/chat-square-dots.svg new file mode 100644 index 0000000..f074f36 --- /dev/null +++ b/public/Icons/chat-square-dots.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-square-fill.svg b/public/Icons/chat-square-fill.svg new file mode 100644 index 0000000..7082edd --- /dev/null +++ b/public/Icons/chat-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-square-quote-fill.svg b/public/Icons/chat-square-quote-fill.svg new file mode 100644 index 0000000..68778df --- /dev/null +++ b/public/Icons/chat-square-quote-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-square-quote.svg b/public/Icons/chat-square-quote.svg new file mode 100644 index 0000000..50d8848 --- /dev/null +++ b/public/Icons/chat-square-quote.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-square-text-fill.svg b/public/Icons/chat-square-text-fill.svg new file mode 100644 index 0000000..5d6c4c9 --- /dev/null +++ b/public/Icons/chat-square-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-square-text.svg b/public/Icons/chat-square-text.svg new file mode 100644 index 0000000..4ab1736 --- /dev/null +++ b/public/Icons/chat-square-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat-square.svg b/public/Icons/chat-square.svg new file mode 100644 index 0000000..59f5628 --- /dev/null +++ b/public/Icons/chat-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-text-fill.svg b/public/Icons/chat-text-fill.svg new file mode 100644 index 0000000..306dbb5 --- /dev/null +++ b/public/Icons/chat-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chat-text.svg b/public/Icons/chat-text.svg new file mode 100644 index 0000000..b32cc88 --- /dev/null +++ b/public/Icons/chat-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chat.svg b/public/Icons/chat.svg new file mode 100644 index 0000000..ea981ef --- /dev/null +++ b/public/Icons/chat.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/check-all.svg b/public/Icons/check-all.svg new file mode 100644 index 0000000..d2ef14e --- /dev/null +++ b/public/Icons/check-all.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/check-circle-fill.svg b/public/Icons/check-circle-fill.svg new file mode 100644 index 0000000..12bc824 --- /dev/null +++ b/public/Icons/check-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/check-circle.svg b/public/Icons/check-circle.svg new file mode 100644 index 0000000..8767f83 --- /dev/null +++ b/public/Icons/check-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/check-square-fill.svg b/public/Icons/check-square-fill.svg new file mode 100644 index 0000000..934e0b9 --- /dev/null +++ b/public/Icons/check-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/check-square.svg b/public/Icons/check-square.svg new file mode 100644 index 0000000..f093371 --- /dev/null +++ b/public/Icons/check-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/check.svg b/public/Icons/check.svg new file mode 100644 index 0000000..7cae4c5 --- /dev/null +++ b/public/Icons/check.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/check2-all.svg b/public/Icons/check2-all.svg new file mode 100644 index 0000000..cbb6550 --- /dev/null +++ b/public/Icons/check2-all.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/check2-circle.svg b/public/Icons/check2-circle.svg new file mode 100644 index 0000000..aee2828 --- /dev/null +++ b/public/Icons/check2-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/check2-square.svg b/public/Icons/check2-square.svg new file mode 100644 index 0000000..707ed7d --- /dev/null +++ b/public/Icons/check2-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/check2.svg b/public/Icons/check2.svg new file mode 100644 index 0000000..d8b9d98 --- /dev/null +++ b/public/Icons/check2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-bar-contract.svg b/public/Icons/chevron-bar-contract.svg new file mode 100644 index 0000000..63f306d --- /dev/null +++ b/public/Icons/chevron-bar-contract.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-bar-down.svg b/public/Icons/chevron-bar-down.svg new file mode 100644 index 0000000..238a288 --- /dev/null +++ b/public/Icons/chevron-bar-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-bar-expand.svg b/public/Icons/chevron-bar-expand.svg new file mode 100644 index 0000000..26f9fd5 --- /dev/null +++ b/public/Icons/chevron-bar-expand.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-bar-left.svg b/public/Icons/chevron-bar-left.svg new file mode 100644 index 0000000..ecc5355 --- /dev/null +++ b/public/Icons/chevron-bar-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-bar-right.svg b/public/Icons/chevron-bar-right.svg new file mode 100644 index 0000000..8f08b8f --- /dev/null +++ b/public/Icons/chevron-bar-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-bar-up.svg b/public/Icons/chevron-bar-up.svg new file mode 100644 index 0000000..98a1ef2 --- /dev/null +++ b/public/Icons/chevron-bar-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-compact-down.svg b/public/Icons/chevron-compact-down.svg new file mode 100644 index 0000000..22e924e --- /dev/null +++ b/public/Icons/chevron-compact-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-compact-left.svg b/public/Icons/chevron-compact-left.svg new file mode 100644 index 0000000..9c32bf3 --- /dev/null +++ b/public/Icons/chevron-compact-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-compact-right.svg b/public/Icons/chevron-compact-right.svg new file mode 100644 index 0000000..9c63470 --- /dev/null +++ b/public/Icons/chevron-compact-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-compact-up.svg b/public/Icons/chevron-compact-up.svg new file mode 100644 index 0000000..5492fce --- /dev/null +++ b/public/Icons/chevron-compact-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-contract.svg b/public/Icons/chevron-contract.svg new file mode 100644 index 0000000..668e7b9 --- /dev/null +++ b/public/Icons/chevron-contract.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-double-down.svg b/public/Icons/chevron-double-down.svg new file mode 100644 index 0000000..4a97278 --- /dev/null +++ b/public/Icons/chevron-double-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chevron-double-left.svg b/public/Icons/chevron-double-left.svg new file mode 100644 index 0000000..5fae374 --- /dev/null +++ b/public/Icons/chevron-double-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chevron-double-right.svg b/public/Icons/chevron-double-right.svg new file mode 100644 index 0000000..424ce01 --- /dev/null +++ b/public/Icons/chevron-double-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chevron-double-up.svg b/public/Icons/chevron-double-up.svg new file mode 100644 index 0000000..18ddcce --- /dev/null +++ b/public/Icons/chevron-double-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/chevron-down.svg b/public/Icons/chevron-down.svg new file mode 100644 index 0000000..88a251e --- /dev/null +++ b/public/Icons/chevron-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-expand.svg b/public/Icons/chevron-expand.svg new file mode 100644 index 0000000..282ef7c --- /dev/null +++ b/public/Icons/chevron-expand.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-left.svg b/public/Icons/chevron-left.svg new file mode 100644 index 0000000..52cb0c3 --- /dev/null +++ b/public/Icons/chevron-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-right.svg b/public/Icons/chevron-right.svg new file mode 100644 index 0000000..bcfa16b --- /dev/null +++ b/public/Icons/chevron-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/chevron-up.svg b/public/Icons/chevron-up.svg new file mode 100644 index 0000000..3e9437e --- /dev/null +++ b/public/Icons/chevron-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/circle-fill.svg b/public/Icons/circle-fill.svg new file mode 100644 index 0000000..5829b0d --- /dev/null +++ b/public/Icons/circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/circle-half.svg b/public/Icons/circle-half.svg new file mode 100644 index 0000000..f351953 --- /dev/null +++ b/public/Icons/circle-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/circle-square.svg b/public/Icons/circle-square.svg new file mode 100644 index 0000000..869bf01 --- /dev/null +++ b/public/Icons/circle-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/circle.svg b/public/Icons/circle.svg new file mode 100644 index 0000000..9f36f91 --- /dev/null +++ b/public/Icons/circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/clipboard-check.svg b/public/Icons/clipboard-check.svg new file mode 100644 index 0000000..2f51207 --- /dev/null +++ b/public/Icons/clipboard-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/clipboard-data.svg b/public/Icons/clipboard-data.svg new file mode 100644 index 0000000..98ccf4a --- /dev/null +++ b/public/Icons/clipboard-data.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/clipboard-minus.svg b/public/Icons/clipboard-minus.svg new file mode 100644 index 0000000..d19e681 --- /dev/null +++ b/public/Icons/clipboard-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/clipboard-plus.svg b/public/Icons/clipboard-plus.svg new file mode 100644 index 0000000..5fff5e7 --- /dev/null +++ b/public/Icons/clipboard-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/clipboard-x.svg b/public/Icons/clipboard-x.svg new file mode 100644 index 0000000..4cf301c --- /dev/null +++ b/public/Icons/clipboard-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/clipboard.svg b/public/Icons/clipboard.svg new file mode 100644 index 0000000..938caf8 --- /dev/null +++ b/public/Icons/clipboard.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/clock-fill.svg b/public/Icons/clock-fill.svg new file mode 100644 index 0000000..57f5364 --- /dev/null +++ b/public/Icons/clock-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/clock-history.svg b/public/Icons/clock-history.svg new file mode 100644 index 0000000..d5e9d89 --- /dev/null +++ b/public/Icons/clock-history.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/clock.svg b/public/Icons/clock.svg new file mode 100644 index 0000000..a8c0321 --- /dev/null +++ b/public/Icons/clock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cloud-arrow-down-fill.svg b/public/Icons/cloud-arrow-down-fill.svg new file mode 100644 index 0000000..261396a --- /dev/null +++ b/public/Icons/cloud-arrow-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cloud-arrow-down.svg b/public/Icons/cloud-arrow-down.svg new file mode 100644 index 0000000..c96e5fe --- /dev/null +++ b/public/Icons/cloud-arrow-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cloud-arrow-up-fill.svg b/public/Icons/cloud-arrow-up-fill.svg new file mode 100644 index 0000000..b4f215f --- /dev/null +++ b/public/Icons/cloud-arrow-up-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cloud-arrow-up.svg b/public/Icons/cloud-arrow-up.svg new file mode 100644 index 0000000..9eb13cc --- /dev/null +++ b/public/Icons/cloud-arrow-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cloud-check-fill.svg b/public/Icons/cloud-check-fill.svg new file mode 100644 index 0000000..2365df9 --- /dev/null +++ b/public/Icons/cloud-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cloud-check.svg b/public/Icons/cloud-check.svg new file mode 100644 index 0000000..0336835 --- /dev/null +++ b/public/Icons/cloud-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cloud-download-fill.svg b/public/Icons/cloud-download-fill.svg new file mode 100644 index 0000000..0656c61 --- /dev/null +++ b/public/Icons/cloud-download-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cloud-download.svg b/public/Icons/cloud-download.svg new file mode 100644 index 0000000..d489ade --- /dev/null +++ b/public/Icons/cloud-download.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cloud-fill.svg b/public/Icons/cloud-fill.svg new file mode 100644 index 0000000..96843a9 --- /dev/null +++ b/public/Icons/cloud-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cloud-minus-fill.svg b/public/Icons/cloud-minus-fill.svg new file mode 100644 index 0000000..f6dffdf --- /dev/null +++ b/public/Icons/cloud-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cloud-minus.svg b/public/Icons/cloud-minus.svg new file mode 100644 index 0000000..88932e2 --- /dev/null +++ b/public/Icons/cloud-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cloud-plus-fill.svg b/public/Icons/cloud-plus-fill.svg new file mode 100644 index 0000000..866b362 --- /dev/null +++ b/public/Icons/cloud-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cloud-plus.svg b/public/Icons/cloud-plus.svg new file mode 100644 index 0000000..0f37302 --- /dev/null +++ b/public/Icons/cloud-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cloud-slash-fill.svg b/public/Icons/cloud-slash-fill.svg new file mode 100644 index 0000000..4fa8607 --- /dev/null +++ b/public/Icons/cloud-slash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cloud-slash.svg b/public/Icons/cloud-slash.svg new file mode 100644 index 0000000..0643fff --- /dev/null +++ b/public/Icons/cloud-slash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cloud-upload-fill.svg b/public/Icons/cloud-upload-fill.svg new file mode 100644 index 0000000..296233c --- /dev/null +++ b/public/Icons/cloud-upload-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cloud-upload.svg b/public/Icons/cloud-upload.svg new file mode 100644 index 0000000..2a1e0cb --- /dev/null +++ b/public/Icons/cloud-upload.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cloud.svg b/public/Icons/cloud.svg new file mode 100644 index 0000000..07045a1 --- /dev/null +++ b/public/Icons/cloud.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/code-slash.svg b/public/Icons/code-slash.svg new file mode 100644 index 0000000..3ff65f2 --- /dev/null +++ b/public/Icons/code-slash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/code-square.svg b/public/Icons/code-square.svg new file mode 100644 index 0000000..fe4991d --- /dev/null +++ b/public/Icons/code-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/code.svg b/public/Icons/code.svg new file mode 100644 index 0000000..256bf16 --- /dev/null +++ b/public/Icons/code.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/collection-fill.svg b/public/Icons/collection-fill.svg new file mode 100644 index 0000000..7c046df --- /dev/null +++ b/public/Icons/collection-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/collection-play-fill.svg b/public/Icons/collection-play-fill.svg new file mode 100644 index 0000000..751d7e6 --- /dev/null +++ b/public/Icons/collection-play-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/collection-play.svg b/public/Icons/collection-play.svg new file mode 100644 index 0000000..8aaea08 --- /dev/null +++ b/public/Icons/collection-play.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/collection.svg b/public/Icons/collection.svg new file mode 100644 index 0000000..ace88f8 --- /dev/null +++ b/public/Icons/collection.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/columns-gap.svg b/public/Icons/columns-gap.svg new file mode 100644 index 0000000..b60bf1e --- /dev/null +++ b/public/Icons/columns-gap.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/columns.svg b/public/Icons/columns.svg new file mode 100644 index 0000000..2553ddf --- /dev/null +++ b/public/Icons/columns.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/command.svg b/public/Icons/command.svg new file mode 100644 index 0000000..2f0d43c --- /dev/null +++ b/public/Icons/command.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/compass-fill.svg b/public/Icons/compass-fill.svg new file mode 100644 index 0000000..3af7330 --- /dev/null +++ b/public/Icons/compass-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/compass.svg b/public/Icons/compass.svg new file mode 100644 index 0000000..d1e07bb --- /dev/null +++ b/public/Icons/compass.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/cone-striped.svg b/public/Icons/cone-striped.svg new file mode 100644 index 0000000..95db047 --- /dev/null +++ b/public/Icons/cone-striped.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cone.svg b/public/Icons/cone.svg new file mode 100644 index 0000000..390f1f9 --- /dev/null +++ b/public/Icons/cone.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/controller.svg b/public/Icons/controller.svg new file mode 100644 index 0000000..3c0d0a4 --- /dev/null +++ b/public/Icons/controller.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/cpu-fill.svg b/public/Icons/cpu-fill.svg new file mode 100644 index 0000000..19f8e35 --- /dev/null +++ b/public/Icons/cpu-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cpu.svg b/public/Icons/cpu.svg new file mode 100644 index 0000000..c3694e1 --- /dev/null +++ b/public/Icons/cpu.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/credit-card-2-back-fill.svg b/public/Icons/credit-card-2-back-fill.svg new file mode 100644 index 0000000..49fc6cd --- /dev/null +++ b/public/Icons/credit-card-2-back-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/credit-card-2-back.svg b/public/Icons/credit-card-2-back.svg new file mode 100644 index 0000000..92ecc13 --- /dev/null +++ b/public/Icons/credit-card-2-back.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/credit-card-2-front-fill.svg b/public/Icons/credit-card-2-front-fill.svg new file mode 100644 index 0000000..44ab2de --- /dev/null +++ b/public/Icons/credit-card-2-front-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/credit-card-2-front.svg b/public/Icons/credit-card-2-front.svg new file mode 100644 index 0000000..458d723 --- /dev/null +++ b/public/Icons/credit-card-2-front.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/credit-card-fill.svg b/public/Icons/credit-card-fill.svg new file mode 100644 index 0000000..7c100d2 --- /dev/null +++ b/public/Icons/credit-card-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/credit-card.svg b/public/Icons/credit-card.svg new file mode 100644 index 0000000..499bc2b --- /dev/null +++ b/public/Icons/credit-card.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/crop.svg b/public/Icons/crop.svg new file mode 100644 index 0000000..e04a054 --- /dev/null +++ b/public/Icons/crop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cup-fill.svg b/public/Icons/cup-fill.svg new file mode 100644 index 0000000..4d1f142 --- /dev/null +++ b/public/Icons/cup-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cup-straw.svg b/public/Icons/cup-straw.svg new file mode 100644 index 0000000..efd790b --- /dev/null +++ b/public/Icons/cup-straw.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cup.svg b/public/Icons/cup.svg new file mode 100644 index 0000000..4cf1035 --- /dev/null +++ b/public/Icons/cup.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cursor-fill.svg b/public/Icons/cursor-fill.svg new file mode 100644 index 0000000..5ea58e9 --- /dev/null +++ b/public/Icons/cursor-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cursor-text.svg b/public/Icons/cursor-text.svg new file mode 100644 index 0000000..0159044 --- /dev/null +++ b/public/Icons/cursor-text.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/cursor.svg b/public/Icons/cursor.svg new file mode 100644 index 0000000..9e19ca1 --- /dev/null +++ b/public/Icons/cursor.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/dash-circle-fill.svg b/public/Icons/dash-circle-fill.svg new file mode 100644 index 0000000..d61d049 --- /dev/null +++ b/public/Icons/dash-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/dash-circle.svg b/public/Icons/dash-circle.svg new file mode 100644 index 0000000..eec0074 --- /dev/null +++ b/public/Icons/dash-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/dash-square-fill.svg b/public/Icons/dash-square-fill.svg new file mode 100644 index 0000000..45f273e --- /dev/null +++ b/public/Icons/dash-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/dash-square.svg b/public/Icons/dash-square.svg new file mode 100644 index 0000000..3fc830c --- /dev/null +++ b/public/Icons/dash-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/dash.svg b/public/Icons/dash.svg new file mode 100644 index 0000000..2969c8d --- /dev/null +++ b/public/Icons/dash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/de_flag.svg b/public/Icons/de_flag.svg new file mode 100644 index 0000000..ef9e365 --- /dev/null +++ b/public/Icons/de_flag.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/public/Icons/diagram-2-fill.svg b/public/Icons/diagram-2-fill.svg new file mode 100644 index 0000000..e041600 --- /dev/null +++ b/public/Icons/diagram-2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/diagram-2.svg b/public/Icons/diagram-2.svg new file mode 100644 index 0000000..849aeee --- /dev/null +++ b/public/Icons/diagram-2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/diagram-3-fill.svg b/public/Icons/diagram-3-fill.svg new file mode 100644 index 0000000..58c6d0b --- /dev/null +++ b/public/Icons/diagram-3-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/diagram-3.svg b/public/Icons/diagram-3.svg new file mode 100644 index 0000000..6c1ba81 --- /dev/null +++ b/public/Icons/diagram-3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/diamond-fill.svg b/public/Icons/diamond-fill.svg new file mode 100644 index 0000000..5905b85 --- /dev/null +++ b/public/Icons/diamond-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/diamond-half.svg b/public/Icons/diamond-half.svg new file mode 100644 index 0000000..d839c16 --- /dev/null +++ b/public/Icons/diamond-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/diamond.svg b/public/Icons/diamond.svg new file mode 100644 index 0000000..8913e2f --- /dev/null +++ b/public/Icons/diamond.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/dice-1-fill.svg b/public/Icons/dice-1-fill.svg new file mode 100644 index 0000000..f295e33 --- /dev/null +++ b/public/Icons/dice-1-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/dice-1.svg b/public/Icons/dice-1.svg new file mode 100644 index 0000000..1ce4630 --- /dev/null +++ b/public/Icons/dice-1.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/dice-2-fill.svg b/public/Icons/dice-2-fill.svg new file mode 100644 index 0000000..0d20548 --- /dev/null +++ b/public/Icons/dice-2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/dice-2.svg b/public/Icons/dice-2.svg new file mode 100644 index 0000000..1ab7ded --- /dev/null +++ b/public/Icons/dice-2.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/dice-3-fill.svg b/public/Icons/dice-3-fill.svg new file mode 100644 index 0000000..6527147 --- /dev/null +++ b/public/Icons/dice-3-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/dice-3.svg b/public/Icons/dice-3.svg new file mode 100644 index 0000000..20f311c --- /dev/null +++ b/public/Icons/dice-3.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/dice-4-fill.svg b/public/Icons/dice-4-fill.svg new file mode 100644 index 0000000..0059bb4 --- /dev/null +++ b/public/Icons/dice-4-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/dice-4.svg b/public/Icons/dice-4.svg new file mode 100644 index 0000000..c92e0fd --- /dev/null +++ b/public/Icons/dice-4.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/public/Icons/dice-5-fill.svg b/public/Icons/dice-5-fill.svg new file mode 100644 index 0000000..b3d07ca --- /dev/null +++ b/public/Icons/dice-5-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/dice-5.svg b/public/Icons/dice-5.svg new file mode 100644 index 0000000..6dd6c13 --- /dev/null +++ b/public/Icons/dice-5.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/public/Icons/dice-6-fill.svg b/public/Icons/dice-6-fill.svg new file mode 100644 index 0000000..41b449a --- /dev/null +++ b/public/Icons/dice-6-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/dice-6.svg b/public/Icons/dice-6.svg new file mode 100644 index 0000000..c92c61b --- /dev/null +++ b/public/Icons/dice-6.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/public/Icons/display-fill.svg b/public/Icons/display-fill.svg new file mode 100644 index 0000000..1f09421 --- /dev/null +++ b/public/Icons/display-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/display.svg b/public/Icons/display.svg new file mode 100644 index 0000000..57d5811 --- /dev/null +++ b/public/Icons/display.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/distribute-horizontal.svg b/public/Icons/distribute-horizontal.svg new file mode 100644 index 0000000..7f07856 --- /dev/null +++ b/public/Icons/distribute-horizontal.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/distribute-vertical.svg b/public/Icons/distribute-vertical.svg new file mode 100644 index 0000000..0446659 --- /dev/null +++ b/public/Icons/distribute-vertical.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/door-closed-fill.svg b/public/Icons/door-closed-fill.svg new file mode 100644 index 0000000..9679ec9 --- /dev/null +++ b/public/Icons/door-closed-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/door-closed.svg b/public/Icons/door-closed.svg new file mode 100644 index 0000000..7ddcbcc --- /dev/null +++ b/public/Icons/door-closed.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/door-open-fill.svg b/public/Icons/door-open-fill.svg new file mode 100644 index 0000000..3c12474 --- /dev/null +++ b/public/Icons/door-open-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/door-open.svg b/public/Icons/door-open.svg new file mode 100644 index 0000000..af8f113 --- /dev/null +++ b/public/Icons/door-open.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/dot.svg b/public/Icons/dot.svg new file mode 100644 index 0000000..57a6111 --- /dev/null +++ b/public/Icons/dot.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/download.svg b/public/Icons/download.svg new file mode 100644 index 0000000..9b6c93a --- /dev/null +++ b/public/Icons/download.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/droplet-fill.svg b/public/Icons/droplet-fill.svg new file mode 100644 index 0000000..91800a8 --- /dev/null +++ b/public/Icons/droplet-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/droplet-half.svg b/public/Icons/droplet-half.svg new file mode 100644 index 0000000..cd29107 --- /dev/null +++ b/public/Icons/droplet-half.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/droplet.svg b/public/Icons/droplet.svg new file mode 100644 index 0000000..6429fa0 --- /dev/null +++ b/public/Icons/droplet.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/earbuds.svg b/public/Icons/earbuds.svg new file mode 100644 index 0000000..0181b5c --- /dev/null +++ b/public/Icons/earbuds.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/easel-fill.svg b/public/Icons/easel-fill.svg new file mode 100644 index 0000000..5499874 --- /dev/null +++ b/public/Icons/easel-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/easel.svg b/public/Icons/easel.svg new file mode 100644 index 0000000..66e29a0 --- /dev/null +++ b/public/Icons/easel.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/egg-fill.svg b/public/Icons/egg-fill.svg new file mode 100644 index 0000000..2d9bd1c --- /dev/null +++ b/public/Icons/egg-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/egg-fried.svg b/public/Icons/egg-fried.svg new file mode 100644 index 0000000..6aceb02 --- /dev/null +++ b/public/Icons/egg-fried.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/egg.svg b/public/Icons/egg.svg new file mode 100644 index 0000000..b6cb217 --- /dev/null +++ b/public/Icons/egg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/eject-fill.svg b/public/Icons/eject-fill.svg new file mode 100644 index 0000000..a074dee --- /dev/null +++ b/public/Icons/eject-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/eject.svg b/public/Icons/eject.svg new file mode 100644 index 0000000..d627f56 --- /dev/null +++ b/public/Icons/eject.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/emoji-angry.svg b/public/Icons/emoji-angry.svg new file mode 100644 index 0000000..cbed449 --- /dev/null +++ b/public/Icons/emoji-angry.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/emoji-dizzy.svg b/public/Icons/emoji-dizzy.svg new file mode 100644 index 0000000..df9eba8 --- /dev/null +++ b/public/Icons/emoji-dizzy.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/emoji-expressionless.svg b/public/Icons/emoji-expressionless.svg new file mode 100644 index 0000000..ca36635 --- /dev/null +++ b/public/Icons/emoji-expressionless.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/emoji-frown.svg b/public/Icons/emoji-frown.svg new file mode 100644 index 0000000..96f0f5b --- /dev/null +++ b/public/Icons/emoji-frown.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/emoji-laughing.svg b/public/Icons/emoji-laughing.svg new file mode 100644 index 0000000..8e840a9 --- /dev/null +++ b/public/Icons/emoji-laughing.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/emoji-neutral.svg b/public/Icons/emoji-neutral.svg new file mode 100644 index 0000000..5ba5c7c --- /dev/null +++ b/public/Icons/emoji-neutral.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/emoji-smile-upside-down.svg b/public/Icons/emoji-smile-upside-down.svg new file mode 100644 index 0000000..7ea64de --- /dev/null +++ b/public/Icons/emoji-smile-upside-down.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/emoji-smile.svg b/public/Icons/emoji-smile.svg new file mode 100644 index 0000000..8d6a8e3 --- /dev/null +++ b/public/Icons/emoji-smile.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/emoji-sunglasses.svg b/public/Icons/emoji-sunglasses.svg new file mode 100644 index 0000000..6dd7829 --- /dev/null +++ b/public/Icons/emoji-sunglasses.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/en_flag.svg b/public/Icons/en_flag.svg new file mode 100644 index 0000000..a43436b --- /dev/null +++ b/public/Icons/en_flag.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/Icons/envelope-fill.svg b/public/Icons/envelope-fill.svg new file mode 100644 index 0000000..5aee5d7 --- /dev/null +++ b/public/Icons/envelope-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/envelope-open-fill.svg b/public/Icons/envelope-open-fill.svg new file mode 100644 index 0000000..72c6756 --- /dev/null +++ b/public/Icons/envelope-open-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/envelope-open.svg b/public/Icons/envelope-open.svg new file mode 100644 index 0000000..30a2f07 --- /dev/null +++ b/public/Icons/envelope-open.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/envelope.svg b/public/Icons/envelope.svg new file mode 100644 index 0000000..7445194 --- /dev/null +++ b/public/Icons/envelope.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/exclamation-circle-fill.svg b/public/Icons/exclamation-circle-fill.svg new file mode 100644 index 0000000..006789e --- /dev/null +++ b/public/Icons/exclamation-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/exclamation-circle.svg b/public/Icons/exclamation-circle.svg new file mode 100644 index 0000000..b5d5150 --- /dev/null +++ b/public/Icons/exclamation-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/exclamation-diamond-fill.svg b/public/Icons/exclamation-diamond-fill.svg new file mode 100644 index 0000000..6f13ab5 --- /dev/null +++ b/public/Icons/exclamation-diamond-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/exclamation-diamond.svg b/public/Icons/exclamation-diamond.svg new file mode 100644 index 0000000..e475e20 --- /dev/null +++ b/public/Icons/exclamation-diamond.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/exclamation-octagon-fill.svg b/public/Icons/exclamation-octagon-fill.svg new file mode 100644 index 0000000..0e72ae7 --- /dev/null +++ b/public/Icons/exclamation-octagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/exclamation-octagon.svg b/public/Icons/exclamation-octagon.svg new file mode 100644 index 0000000..fb3a12f --- /dev/null +++ b/public/Icons/exclamation-octagon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/exclamation-square-fill.svg b/public/Icons/exclamation-square-fill.svg new file mode 100644 index 0000000..0d6a7fc --- /dev/null +++ b/public/Icons/exclamation-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/exclamation-square.svg b/public/Icons/exclamation-square.svg new file mode 100644 index 0000000..dabc82f --- /dev/null +++ b/public/Icons/exclamation-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/exclamation-triangle-fill.svg b/public/Icons/exclamation-triangle-fill.svg new file mode 100644 index 0000000..1019c60 --- /dev/null +++ b/public/Icons/exclamation-triangle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/exclamation-triangle.svg b/public/Icons/exclamation-triangle.svg new file mode 100644 index 0000000..4c10f80 --- /dev/null +++ b/public/Icons/exclamation-triangle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/exclamation.svg b/public/Icons/exclamation.svg new file mode 100644 index 0000000..378d355 --- /dev/null +++ b/public/Icons/exclamation.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/exclude.svg b/public/Icons/exclude.svg new file mode 100644 index 0000000..e210264 --- /dev/null +++ b/public/Icons/exclude.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/eye-fill.svg b/public/Icons/eye-fill.svg new file mode 100644 index 0000000..b85e1e3 --- /dev/null +++ b/public/Icons/eye-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/eye-slash-fill.svg b/public/Icons/eye-slash-fill.svg new file mode 100644 index 0000000..c519f91 --- /dev/null +++ b/public/Icons/eye-slash-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/eye-slash.svg b/public/Icons/eye-slash.svg new file mode 100644 index 0000000..2723281 --- /dev/null +++ b/public/Icons/eye-slash.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/eye.svg b/public/Icons/eye.svg new file mode 100644 index 0000000..4c11ecb --- /dev/null +++ b/public/Icons/eye.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/eyeglasses.svg b/public/Icons/eyeglasses.svg new file mode 100644 index 0000000..922458c --- /dev/null +++ b/public/Icons/eyeglasses.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/favicon.ico b/public/Icons/favicon.ico new file mode 100644 index 0000000..c2f2422 Binary files /dev/null and b/public/Icons/favicon.ico differ diff --git a/public/Icons/file-arrow-down-fill.svg b/public/Icons/file-arrow-down-fill.svg new file mode 100644 index 0000000..af02abf --- /dev/null +++ b/public/Icons/file-arrow-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-arrow-down.svg b/public/Icons/file-arrow-down.svg new file mode 100644 index 0000000..1e12d53 --- /dev/null +++ b/public/Icons/file-arrow-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-arrow-up-fill.svg b/public/Icons/file-arrow-up-fill.svg new file mode 100644 index 0000000..a5370fb --- /dev/null +++ b/public/Icons/file-arrow-up-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-arrow-up.svg b/public/Icons/file-arrow-up.svg new file mode 100644 index 0000000..a94c71a --- /dev/null +++ b/public/Icons/file-arrow-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-binary-fill.svg b/public/Icons/file-binary-fill.svg new file mode 100644 index 0000000..fb296ae --- /dev/null +++ b/public/Icons/file-binary-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-binary.svg b/public/Icons/file-binary.svg new file mode 100644 index 0000000..7cd162a --- /dev/null +++ b/public/Icons/file-binary.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-break-fill.svg b/public/Icons/file-break-fill.svg new file mode 100644 index 0000000..4da8f75 --- /dev/null +++ b/public/Icons/file-break-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-break.svg b/public/Icons/file-break.svg new file mode 100644 index 0000000..c29f68e --- /dev/null +++ b/public/Icons/file-break.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-check-fill.svg b/public/Icons/file-check-fill.svg new file mode 100644 index 0000000..a76d6e7 --- /dev/null +++ b/public/Icons/file-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-check.svg b/public/Icons/file-check.svg new file mode 100644 index 0000000..43bcb38 --- /dev/null +++ b/public/Icons/file-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-code-fill.svg b/public/Icons/file-code-fill.svg new file mode 100644 index 0000000..83c30fc --- /dev/null +++ b/public/Icons/file-code-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-code.svg b/public/Icons/file-code.svg new file mode 100644 index 0000000..d450940 --- /dev/null +++ b/public/Icons/file-code.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-diff-fill.svg b/public/Icons/file-diff-fill.svg new file mode 100644 index 0000000..d9406f2 --- /dev/null +++ b/public/Icons/file-diff-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-diff.svg b/public/Icons/file-diff.svg new file mode 100644 index 0000000..2928d5d --- /dev/null +++ b/public/Icons/file-diff.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-arrow-down-fill.svg b/public/Icons/file-earmark-arrow-down-fill.svg new file mode 100644 index 0000000..bfec4ed --- /dev/null +++ b/public/Icons/file-earmark-arrow-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-arrow-down.svg b/public/Icons/file-earmark-arrow-down.svg new file mode 100644 index 0000000..4dacf85 --- /dev/null +++ b/public/Icons/file-earmark-arrow-down.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-arrow-up-fill.svg b/public/Icons/file-earmark-arrow-up-fill.svg new file mode 100644 index 0000000..2fb9638 --- /dev/null +++ b/public/Icons/file-earmark-arrow-up-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-arrow-up.svg b/public/Icons/file-earmark-arrow-up.svg new file mode 100644 index 0000000..8d2fb6f --- /dev/null +++ b/public/Icons/file-earmark-arrow-up.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-binary-fill.svg b/public/Icons/file-earmark-binary-fill.svg new file mode 100644 index 0000000..b8d8858 --- /dev/null +++ b/public/Icons/file-earmark-binary-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-binary.svg b/public/Icons/file-earmark-binary.svg new file mode 100644 index 0000000..5ec3361 --- /dev/null +++ b/public/Icons/file-earmark-binary.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-break-fill.svg b/public/Icons/file-earmark-break-fill.svg new file mode 100644 index 0000000..937ae34 --- /dev/null +++ b/public/Icons/file-earmark-break-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-break.svg b/public/Icons/file-earmark-break.svg new file mode 100644 index 0000000..09e07ba --- /dev/null +++ b/public/Icons/file-earmark-break.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-check-fill.svg b/public/Icons/file-earmark-check-fill.svg new file mode 100644 index 0000000..cf36b40 --- /dev/null +++ b/public/Icons/file-earmark-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-check.svg b/public/Icons/file-earmark-check.svg new file mode 100644 index 0000000..f514081 --- /dev/null +++ b/public/Icons/file-earmark-check.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-code-fill.svg b/public/Icons/file-earmark-code-fill.svg new file mode 100644 index 0000000..62db5ed --- /dev/null +++ b/public/Icons/file-earmark-code-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-code.svg b/public/Icons/file-earmark-code.svg new file mode 100644 index 0000000..de05c9f --- /dev/null +++ b/public/Icons/file-earmark-code.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-diff-fill.svg b/public/Icons/file-earmark-diff-fill.svg new file mode 100644 index 0000000..834c887 --- /dev/null +++ b/public/Icons/file-earmark-diff-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-diff.svg b/public/Icons/file-earmark-diff.svg new file mode 100644 index 0000000..980a970 --- /dev/null +++ b/public/Icons/file-earmark-diff.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-easel-fill.svg b/public/Icons/file-earmark-easel-fill.svg new file mode 100644 index 0000000..216be16 --- /dev/null +++ b/public/Icons/file-earmark-easel-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-easel.svg b/public/Icons/file-earmark-easel.svg new file mode 100644 index 0000000..6dfc89c --- /dev/null +++ b/public/Icons/file-earmark-easel.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-fill.svg b/public/Icons/file-earmark-fill.svg new file mode 100644 index 0000000..474a4d1 --- /dev/null +++ b/public/Icons/file-earmark-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-font-fill.svg b/public/Icons/file-earmark-font-fill.svg new file mode 100644 index 0000000..4e4a0c7 --- /dev/null +++ b/public/Icons/file-earmark-font-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-font.svg b/public/Icons/file-earmark-font.svg new file mode 100644 index 0000000..65353ff --- /dev/null +++ b/public/Icons/file-earmark-font.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-image-fill.svg b/public/Icons/file-earmark-image-fill.svg new file mode 100644 index 0000000..367f639 --- /dev/null +++ b/public/Icons/file-earmark-image-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-image.svg b/public/Icons/file-earmark-image.svg new file mode 100644 index 0000000..b07bc9b --- /dev/null +++ b/public/Icons/file-earmark-image.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-lock-fill.svg b/public/Icons/file-earmark-lock-fill.svg new file mode 100644 index 0000000..c9a84ce --- /dev/null +++ b/public/Icons/file-earmark-lock-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-lock.svg b/public/Icons/file-earmark-lock.svg new file mode 100644 index 0000000..9bd5d29 --- /dev/null +++ b/public/Icons/file-earmark-lock.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-lock2-fill.svg b/public/Icons/file-earmark-lock2-fill.svg new file mode 100644 index 0000000..3c31b2a --- /dev/null +++ b/public/Icons/file-earmark-lock2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-lock2.svg b/public/Icons/file-earmark-lock2.svg new file mode 100644 index 0000000..9b36db7 --- /dev/null +++ b/public/Icons/file-earmark-lock2.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-medical-fill.svg b/public/Icons/file-earmark-medical-fill.svg new file mode 100644 index 0000000..d712546 --- /dev/null +++ b/public/Icons/file-earmark-medical-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-medical.svg b/public/Icons/file-earmark-medical.svg new file mode 100644 index 0000000..27b8bc9 --- /dev/null +++ b/public/Icons/file-earmark-medical.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-minus-fill.svg b/public/Icons/file-earmark-minus-fill.svg new file mode 100644 index 0000000..b470ed2 --- /dev/null +++ b/public/Icons/file-earmark-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-minus.svg b/public/Icons/file-earmark-minus.svg new file mode 100644 index 0000000..15f87c0 --- /dev/null +++ b/public/Icons/file-earmark-minus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-music-fill.svg b/public/Icons/file-earmark-music-fill.svg new file mode 100644 index 0000000..7eac826 --- /dev/null +++ b/public/Icons/file-earmark-music-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-music.svg b/public/Icons/file-earmark-music.svg new file mode 100644 index 0000000..62a404e --- /dev/null +++ b/public/Icons/file-earmark-music.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-person-fill.svg b/public/Icons/file-earmark-person-fill.svg new file mode 100644 index 0000000..2b48e88 --- /dev/null +++ b/public/Icons/file-earmark-person-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-person.svg b/public/Icons/file-earmark-person.svg new file mode 100644 index 0000000..2729dec --- /dev/null +++ b/public/Icons/file-earmark-person.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-play-fill.svg b/public/Icons/file-earmark-play-fill.svg new file mode 100644 index 0000000..d6e0f79 --- /dev/null +++ b/public/Icons/file-earmark-play-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-play.svg b/public/Icons/file-earmark-play.svg new file mode 100644 index 0000000..24ee073 --- /dev/null +++ b/public/Icons/file-earmark-play.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-plus-fill.svg b/public/Icons/file-earmark-plus-fill.svg new file mode 100644 index 0000000..1b05525 --- /dev/null +++ b/public/Icons/file-earmark-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-plus.svg b/public/Icons/file-earmark-plus.svg new file mode 100644 index 0000000..924d5e1 --- /dev/null +++ b/public/Icons/file-earmark-plus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-post-fill.svg b/public/Icons/file-earmark-post-fill.svg new file mode 100644 index 0000000..cf3c8d3 --- /dev/null +++ b/public/Icons/file-earmark-post-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-post.svg b/public/Icons/file-earmark-post.svg new file mode 100644 index 0000000..bf959c8 --- /dev/null +++ b/public/Icons/file-earmark-post.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-richtext-fill.svg b/public/Icons/file-earmark-richtext-fill.svg new file mode 100644 index 0000000..6357369 --- /dev/null +++ b/public/Icons/file-earmark-richtext-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-richtext.svg b/public/Icons/file-earmark-richtext.svg new file mode 100644 index 0000000..a99413c --- /dev/null +++ b/public/Icons/file-earmark-richtext.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-ruled-fill.svg b/public/Icons/file-earmark-ruled-fill.svg new file mode 100644 index 0000000..0622342 --- /dev/null +++ b/public/Icons/file-earmark-ruled-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-ruled.svg b/public/Icons/file-earmark-ruled.svg new file mode 100644 index 0000000..c4a43e9 --- /dev/null +++ b/public/Icons/file-earmark-ruled.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-slides-fill.svg b/public/Icons/file-earmark-slides-fill.svg new file mode 100644 index 0000000..017c54c --- /dev/null +++ b/public/Icons/file-earmark-slides-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-slides.svg b/public/Icons/file-earmark-slides.svg new file mode 100644 index 0000000..b74d230 --- /dev/null +++ b/public/Icons/file-earmark-slides.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-spreadsheet-fill.svg b/public/Icons/file-earmark-spreadsheet-fill.svg new file mode 100644 index 0000000..650b0e8 --- /dev/null +++ b/public/Icons/file-earmark-spreadsheet-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-spreadsheet.svg b/public/Icons/file-earmark-spreadsheet.svg new file mode 100644 index 0000000..ca12123 --- /dev/null +++ b/public/Icons/file-earmark-spreadsheet.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-text-fill.svg b/public/Icons/file-earmark-text-fill.svg new file mode 100644 index 0000000..8db6a4c --- /dev/null +++ b/public/Icons/file-earmark-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-text.svg b/public/Icons/file-earmark-text.svg new file mode 100644 index 0000000..7e9e5fa --- /dev/null +++ b/public/Icons/file-earmark-text.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-x-fill.svg b/public/Icons/file-earmark-x-fill.svg new file mode 100644 index 0000000..91ee305 --- /dev/null +++ b/public/Icons/file-earmark-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-x.svg b/public/Icons/file-earmark-x.svg new file mode 100644 index 0000000..841221a --- /dev/null +++ b/public/Icons/file-earmark-x.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-zip-fill.svg b/public/Icons/file-earmark-zip-fill.svg new file mode 100644 index 0000000..456e4e5 --- /dev/null +++ b/public/Icons/file-earmark-zip-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-earmark-zip.svg b/public/Icons/file-earmark-zip.svg new file mode 100644 index 0000000..d0b9674 --- /dev/null +++ b/public/Icons/file-earmark-zip.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/file-earmark.svg b/public/Icons/file-earmark.svg new file mode 100644 index 0000000..93be327 --- /dev/null +++ b/public/Icons/file-earmark.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-easel-fill.svg b/public/Icons/file-easel-fill.svg new file mode 100644 index 0000000..3deb7ef --- /dev/null +++ b/public/Icons/file-easel-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-easel.svg b/public/Icons/file-easel.svg new file mode 100644 index 0000000..537f57b --- /dev/null +++ b/public/Icons/file-easel.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-fill.svg b/public/Icons/file-fill.svg new file mode 100644 index 0000000..cccd6af --- /dev/null +++ b/public/Icons/file-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-font-fill.svg b/public/Icons/file-font-fill.svg new file mode 100644 index 0000000..5f73116 --- /dev/null +++ b/public/Icons/file-font-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-font.svg b/public/Icons/file-font.svg new file mode 100644 index 0000000..e502995 --- /dev/null +++ b/public/Icons/file-font.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-image-fill.svg b/public/Icons/file-image-fill.svg new file mode 100644 index 0000000..3b9a618 --- /dev/null +++ b/public/Icons/file-image-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-image.svg b/public/Icons/file-image.svg new file mode 100644 index 0000000..094f9d2 --- /dev/null +++ b/public/Icons/file-image.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-lock-fill.svg b/public/Icons/file-lock-fill.svg new file mode 100644 index 0000000..f9a3902 --- /dev/null +++ b/public/Icons/file-lock-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-lock.svg b/public/Icons/file-lock.svg new file mode 100644 index 0000000..15cf9b4 --- /dev/null +++ b/public/Icons/file-lock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-lock2-fill.svg b/public/Icons/file-lock2-fill.svg new file mode 100644 index 0000000..a917e3a --- /dev/null +++ b/public/Icons/file-lock2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-lock2.svg b/public/Icons/file-lock2.svg new file mode 100644 index 0000000..c9676f8 --- /dev/null +++ b/public/Icons/file-lock2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-medical-fill.svg b/public/Icons/file-medical-fill.svg new file mode 100644 index 0000000..38e583d --- /dev/null +++ b/public/Icons/file-medical-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-medical.svg b/public/Icons/file-medical.svg new file mode 100644 index 0000000..183a03b --- /dev/null +++ b/public/Icons/file-medical.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-minus-fill.svg b/public/Icons/file-minus-fill.svg new file mode 100644 index 0000000..e8ecf73 --- /dev/null +++ b/public/Icons/file-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-minus.svg b/public/Icons/file-minus.svg new file mode 100644 index 0000000..c0b6c93 --- /dev/null +++ b/public/Icons/file-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-music-fill.svg b/public/Icons/file-music-fill.svg new file mode 100644 index 0000000..dd9ed93 --- /dev/null +++ b/public/Icons/file-music-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-music.svg b/public/Icons/file-music.svg new file mode 100644 index 0000000..c728ff3 --- /dev/null +++ b/public/Icons/file-music.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-person-fill.svg b/public/Icons/file-person-fill.svg new file mode 100644 index 0000000..bce7921 --- /dev/null +++ b/public/Icons/file-person-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-person.svg b/public/Icons/file-person.svg new file mode 100644 index 0000000..e68d60c --- /dev/null +++ b/public/Icons/file-person.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-play-fill.svg b/public/Icons/file-play-fill.svg new file mode 100644 index 0000000..77e0f61 --- /dev/null +++ b/public/Icons/file-play-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-play.svg b/public/Icons/file-play.svg new file mode 100644 index 0000000..10f8c06 --- /dev/null +++ b/public/Icons/file-play.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-plus-fill.svg b/public/Icons/file-plus-fill.svg new file mode 100644 index 0000000..fa8f413 --- /dev/null +++ b/public/Icons/file-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-plus.svg b/public/Icons/file-plus.svg new file mode 100644 index 0000000..bd7e9ff --- /dev/null +++ b/public/Icons/file-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-post-fill.svg b/public/Icons/file-post-fill.svg new file mode 100644 index 0000000..ff9d860 --- /dev/null +++ b/public/Icons/file-post-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-post.svg b/public/Icons/file-post.svg new file mode 100644 index 0000000..6ac2260 --- /dev/null +++ b/public/Icons/file-post.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-richtext-fill.svg b/public/Icons/file-richtext-fill.svg new file mode 100644 index 0000000..7bd5a3c --- /dev/null +++ b/public/Icons/file-richtext-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-richtext.svg b/public/Icons/file-richtext.svg new file mode 100644 index 0000000..aa7a32a --- /dev/null +++ b/public/Icons/file-richtext.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-ruled-fill.svg b/public/Icons/file-ruled-fill.svg new file mode 100644 index 0000000..863ffd0 --- /dev/null +++ b/public/Icons/file-ruled-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-ruled.svg b/public/Icons/file-ruled.svg new file mode 100644 index 0000000..9875df4 --- /dev/null +++ b/public/Icons/file-ruled.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-slides-fill.svg b/public/Icons/file-slides-fill.svg new file mode 100644 index 0000000..d5e9af6 --- /dev/null +++ b/public/Icons/file-slides-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-slides.svg b/public/Icons/file-slides.svg new file mode 100644 index 0000000..96b769a --- /dev/null +++ b/public/Icons/file-slides.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file-spreadsheet-fill.svg b/public/Icons/file-spreadsheet-fill.svg new file mode 100644 index 0000000..7016b48 --- /dev/null +++ b/public/Icons/file-spreadsheet-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-spreadsheet.svg b/public/Icons/file-spreadsheet.svg new file mode 100644 index 0000000..6b108db --- /dev/null +++ b/public/Icons/file-spreadsheet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-text-fill.svg b/public/Icons/file-text-fill.svg new file mode 100644 index 0000000..10f6178 --- /dev/null +++ b/public/Icons/file-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-text.svg b/public/Icons/file-text.svg new file mode 100644 index 0000000..6f6dce8 --- /dev/null +++ b/public/Icons/file-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-x-fill.svg b/public/Icons/file-x-fill.svg new file mode 100644 index 0000000..a5c8983 --- /dev/null +++ b/public/Icons/file-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-x.svg b/public/Icons/file-x.svg new file mode 100644 index 0000000..330ea3a --- /dev/null +++ b/public/Icons/file-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/file-zip-fill.svg b/public/Icons/file-zip-fill.svg new file mode 100644 index 0000000..581694f --- /dev/null +++ b/public/Icons/file-zip-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/file-zip.svg b/public/Icons/file-zip.svg new file mode 100644 index 0000000..8cb5aa3 --- /dev/null +++ b/public/Icons/file-zip.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/file.svg b/public/Icons/file.svg new file mode 100644 index 0000000..f0e87e2 --- /dev/null +++ b/public/Icons/file.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/files-alt.svg b/public/Icons/files-alt.svg new file mode 100644 index 0000000..d9b3b75 --- /dev/null +++ b/public/Icons/files-alt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/files.svg b/public/Icons/files.svg new file mode 100644 index 0000000..c53f1e3 --- /dev/null +++ b/public/Icons/files.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/film.svg b/public/Icons/film.svg new file mode 100644 index 0000000..bbfb29e --- /dev/null +++ b/public/Icons/film.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/filter-circle-fill.svg b/public/Icons/filter-circle-fill.svg new file mode 100644 index 0000000..41e3ba0 --- /dev/null +++ b/public/Icons/filter-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/filter-circle.svg b/public/Icons/filter-circle.svg new file mode 100644 index 0000000..820450e --- /dev/null +++ b/public/Icons/filter-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/filter-left.svg b/public/Icons/filter-left.svg new file mode 100644 index 0000000..0fb8502 --- /dev/null +++ b/public/Icons/filter-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/filter-right.svg b/public/Icons/filter-right.svg new file mode 100644 index 0000000..140da71 --- /dev/null +++ b/public/Icons/filter-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/filter-square-fill.svg b/public/Icons/filter-square-fill.svg new file mode 100644 index 0000000..0ee5e07 --- /dev/null +++ b/public/Icons/filter-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/filter-square.svg b/public/Icons/filter-square.svg new file mode 100644 index 0000000..52c5d41 --- /dev/null +++ b/public/Icons/filter-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/filter.svg b/public/Icons/filter.svg new file mode 100644 index 0000000..0b44aa8 --- /dev/null +++ b/public/Icons/filter.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/flag-fill.svg b/public/Icons/flag-fill.svg new file mode 100644 index 0000000..e07ae3c --- /dev/null +++ b/public/Icons/flag-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/flag.svg b/public/Icons/flag.svg new file mode 100644 index 0000000..0ba351b --- /dev/null +++ b/public/Icons/flag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/flower1.svg b/public/Icons/flower1.svg new file mode 100644 index 0000000..6b3670d --- /dev/null +++ b/public/Icons/flower1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/flower2.svg b/public/Icons/flower2.svg new file mode 100644 index 0000000..c510e6b --- /dev/null +++ b/public/Icons/flower2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/flower3.svg b/public/Icons/flower3.svg new file mode 100644 index 0000000..f02c6ea --- /dev/null +++ b/public/Icons/flower3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/folder-check.svg b/public/Icons/folder-check.svg new file mode 100644 index 0000000..529e319 --- /dev/null +++ b/public/Icons/folder-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/folder-fill.svg b/public/Icons/folder-fill.svg new file mode 100644 index 0000000..e75cb94 --- /dev/null +++ b/public/Icons/folder-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/folder-minus.svg b/public/Icons/folder-minus.svg new file mode 100644 index 0000000..55554de --- /dev/null +++ b/public/Icons/folder-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/folder-plus.svg b/public/Icons/folder-plus.svg new file mode 100644 index 0000000..bece76a --- /dev/null +++ b/public/Icons/folder-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/folder-symlink-fill.svg b/public/Icons/folder-symlink-fill.svg new file mode 100644 index 0000000..748040a --- /dev/null +++ b/public/Icons/folder-symlink-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/folder-symlink.svg b/public/Icons/folder-symlink.svg new file mode 100644 index 0000000..ed5893f --- /dev/null +++ b/public/Icons/folder-symlink.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/folder-x.svg b/public/Icons/folder-x.svg new file mode 100644 index 0000000..ef6068f --- /dev/null +++ b/public/Icons/folder-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/folder.svg b/public/Icons/folder.svg new file mode 100644 index 0000000..a125ca0 --- /dev/null +++ b/public/Icons/folder.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/folder2-open.svg b/public/Icons/folder2-open.svg new file mode 100644 index 0000000..1f18065 --- /dev/null +++ b/public/Icons/folder2-open.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/folder2.svg b/public/Icons/folder2.svg new file mode 100644 index 0000000..840698d --- /dev/null +++ b/public/Icons/folder2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/fonts.svg b/public/Icons/fonts.svg new file mode 100644 index 0000000..36a6a1e --- /dev/null +++ b/public/Icons/fonts.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/forward-fill.svg b/public/Icons/forward-fill.svg new file mode 100644 index 0000000..e5b1e4d --- /dev/null +++ b/public/Icons/forward-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/forward.svg b/public/Icons/forward.svg new file mode 100644 index 0000000..c5b7c72 --- /dev/null +++ b/public/Icons/forward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/front.svg b/public/Icons/front.svg new file mode 100644 index 0000000..51d1a5f --- /dev/null +++ b/public/Icons/front.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/fullscreen-exit.svg b/public/Icons/fullscreen-exit.svg new file mode 100644 index 0000000..26b6727 --- /dev/null +++ b/public/Icons/fullscreen-exit.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/fullscreen.svg b/public/Icons/fullscreen.svg new file mode 100644 index 0000000..5ca11b2 --- /dev/null +++ b/public/Icons/fullscreen.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/funnel-fill.svg b/public/Icons/funnel-fill.svg new file mode 100644 index 0000000..d959b6e --- /dev/null +++ b/public/Icons/funnel-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/funnel.svg b/public/Icons/funnel.svg new file mode 100644 index 0000000..e387ed5 --- /dev/null +++ b/public/Icons/funnel.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/gear-fill.svg b/public/Icons/gear-fill.svg new file mode 100644 index 0000000..9865bfd --- /dev/null +++ b/public/Icons/gear-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/gear-wide-connected.svg b/public/Icons/gear-wide-connected.svg new file mode 100644 index 0000000..9f96096 --- /dev/null +++ b/public/Icons/gear-wide-connected.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/gear-wide.svg b/public/Icons/gear-wide.svg new file mode 100644 index 0000000..7437c98 --- /dev/null +++ b/public/Icons/gear-wide.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/gear.svg b/public/Icons/gear.svg new file mode 100644 index 0000000..5414b1d --- /dev/null +++ b/public/Icons/gear.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/gem.svg b/public/Icons/gem.svg new file mode 100644 index 0000000..8a711d5 --- /dev/null +++ b/public/Icons/gem.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/geo-alt-fill.svg b/public/Icons/geo-alt-fill.svg new file mode 100644 index 0000000..e210786 --- /dev/null +++ b/public/Icons/geo-alt-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/geo-alt.svg b/public/Icons/geo-alt.svg new file mode 100644 index 0000000..d19585a --- /dev/null +++ b/public/Icons/geo-alt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/geo-fill.svg b/public/Icons/geo-fill.svg new file mode 100644 index 0000000..a171d4a --- /dev/null +++ b/public/Icons/geo-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/geo.svg b/public/Icons/geo.svg new file mode 100644 index 0000000..3bd1962 --- /dev/null +++ b/public/Icons/geo.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/gift-fill.svg b/public/Icons/gift-fill.svg new file mode 100644 index 0000000..efac98f --- /dev/null +++ b/public/Icons/gift-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/gift.svg b/public/Icons/gift.svg new file mode 100644 index 0000000..39b7285 --- /dev/null +++ b/public/Icons/gift.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/globe.svg b/public/Icons/globe.svg new file mode 100644 index 0000000..7500aaa --- /dev/null +++ b/public/Icons/globe.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/globe2.svg b/public/Icons/globe2.svg new file mode 100644 index 0000000..f891064 --- /dev/null +++ b/public/Icons/globe2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/globe_2.svg b/public/Icons/globe_2.svg new file mode 100644 index 0000000..20d6819 --- /dev/null +++ b/public/Icons/globe_2.svg @@ -0,0 +1,241 @@ + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + diff --git a/public/Icons/globe_3.svg b/public/Icons/globe_3.svg new file mode 100644 index 0000000..1d78de0 --- /dev/null +++ b/public/Icons/globe_3.svg @@ -0,0 +1,4294 @@ + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/Icons/graph-down.svg b/public/Icons/graph-down.svg new file mode 100644 index 0000000..ad9b81a --- /dev/null +++ b/public/Icons/graph-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/graph-up.svg b/public/Icons/graph-up.svg new file mode 100644 index 0000000..96e146e --- /dev/null +++ b/public/Icons/graph-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grid-1x2-fill.svg b/public/Icons/grid-1x2-fill.svg new file mode 100644 index 0000000..244eb24 --- /dev/null +++ b/public/Icons/grid-1x2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grid-1x2.svg b/public/Icons/grid-1x2.svg new file mode 100644 index 0000000..549202d --- /dev/null +++ b/public/Icons/grid-1x2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grid-3x2-gap-fill.svg b/public/Icons/grid-3x2-gap-fill.svg new file mode 100644 index 0000000..36b4b91 --- /dev/null +++ b/public/Icons/grid-3x2-gap-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grid-3x2-gap.svg b/public/Icons/grid-3x2-gap.svg new file mode 100644 index 0000000..27a9ea4 --- /dev/null +++ b/public/Icons/grid-3x2-gap.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grid-3x2.svg b/public/Icons/grid-3x2.svg new file mode 100644 index 0000000..3ccae60 --- /dev/null +++ b/public/Icons/grid-3x2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grid-3x3-gap-fill.svg b/public/Icons/grid-3x3-gap-fill.svg new file mode 100644 index 0000000..4658723 --- /dev/null +++ b/public/Icons/grid-3x3-gap-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grid-3x3-gap.svg b/public/Icons/grid-3x3-gap.svg new file mode 100644 index 0000000..db72d65 --- /dev/null +++ b/public/Icons/grid-3x3-gap.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grid-3x3.svg b/public/Icons/grid-3x3.svg new file mode 100644 index 0000000..fe22afb --- /dev/null +++ b/public/Icons/grid-3x3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grid-fill.svg b/public/Icons/grid-fill.svg new file mode 100644 index 0000000..8e26fc5 --- /dev/null +++ b/public/Icons/grid-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grid.svg b/public/Icons/grid.svg new file mode 100644 index 0000000..43b4d9c --- /dev/null +++ b/public/Icons/grid.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grip-horizontal.svg b/public/Icons/grip-horizontal.svg new file mode 100644 index 0000000..1ec8191 --- /dev/null +++ b/public/Icons/grip-horizontal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/grip-vertical.svg b/public/Icons/grip-vertical.svg new file mode 100644 index 0000000..d97e404 --- /dev/null +++ b/public/Icons/grip-vertical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hammer.svg b/public/Icons/hammer.svg new file mode 100644 index 0000000..9c40e9d --- /dev/null +++ b/public/Icons/hammer.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/hand-index-thumb.svg b/public/Icons/hand-index-thumb.svg new file mode 100644 index 0000000..4810ef4 --- /dev/null +++ b/public/Icons/hand-index-thumb.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hand-index.svg b/public/Icons/hand-index.svg new file mode 100644 index 0000000..b190a57 --- /dev/null +++ b/public/Icons/hand-index.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hand-links.png b/public/Icons/hand-links.png new file mode 100644 index 0000000..b4e2d8d Binary files /dev/null and b/public/Icons/hand-links.png differ diff --git a/public/Icons/hand-thumbs-down.svg b/public/Icons/hand-thumbs-down.svg new file mode 100644 index 0000000..19fb2c3 --- /dev/null +++ b/public/Icons/hand-thumbs-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hand-thumbs-up.svg b/public/Icons/hand-thumbs-up.svg new file mode 100644 index 0000000..63bcdf5 --- /dev/null +++ b/public/Icons/hand-thumbs-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/handbag-fill.svg b/public/Icons/handbag-fill.svg new file mode 100644 index 0000000..f5a4673 --- /dev/null +++ b/public/Icons/handbag-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/handbag.svg b/public/Icons/handbag.svg new file mode 100644 index 0000000..41c6fb4 --- /dev/null +++ b/public/Icons/handbag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hash.svg b/public/Icons/hash.svg new file mode 100644 index 0000000..658a591 --- /dev/null +++ b/public/Icons/hash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hdd-fill.svg b/public/Icons/hdd-fill.svg new file mode 100644 index 0000000..3bba393 --- /dev/null +++ b/public/Icons/hdd-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/hdd-network-fill.svg b/public/Icons/hdd-network-fill.svg new file mode 100644 index 0000000..d1c692c --- /dev/null +++ b/public/Icons/hdd-network-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hdd-network.svg b/public/Icons/hdd-network.svg new file mode 100644 index 0000000..3dfd814 --- /dev/null +++ b/public/Icons/hdd-network.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/hdd-rack-fill.svg b/public/Icons/hdd-rack-fill.svg new file mode 100644 index 0000000..f9d7c49 --- /dev/null +++ b/public/Icons/hdd-rack-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hdd-rack.svg b/public/Icons/hdd-rack.svg new file mode 100644 index 0000000..e9be9f7 --- /dev/null +++ b/public/Icons/hdd-rack.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/public/Icons/hdd-stack-fill.svg b/public/Icons/hdd-stack-fill.svg new file mode 100644 index 0000000..2b56d2b --- /dev/null +++ b/public/Icons/hdd-stack-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hdd-stack.svg b/public/Icons/hdd-stack.svg new file mode 100644 index 0000000..abbcf14 --- /dev/null +++ b/public/Icons/hdd-stack.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/hdd.svg b/public/Icons/hdd.svg new file mode 100644 index 0000000..051950b --- /dev/null +++ b/public/Icons/hdd.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/headphones.svg b/public/Icons/headphones.svg new file mode 100644 index 0000000..691cc96 --- /dev/null +++ b/public/Icons/headphones.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/headset.svg b/public/Icons/headset.svg new file mode 100644 index 0000000..2fe0aef --- /dev/null +++ b/public/Icons/headset.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/heart-fill.svg b/public/Icons/heart-fill.svg new file mode 100644 index 0000000..93699ca --- /dev/null +++ b/public/Icons/heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/heart-half.svg b/public/Icons/heart-half.svg new file mode 100644 index 0000000..78c44d2 --- /dev/null +++ b/public/Icons/heart-half.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/heart.svg b/public/Icons/heart.svg new file mode 100644 index 0000000..1a53386 --- /dev/null +++ b/public/Icons/heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/heptagon-fill.svg b/public/Icons/heptagon-fill.svg new file mode 100644 index 0000000..5627b22 --- /dev/null +++ b/public/Icons/heptagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/heptagon-half.svg b/public/Icons/heptagon-half.svg new file mode 100644 index 0000000..9b41874 --- /dev/null +++ b/public/Icons/heptagon-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/heptagon.svg b/public/Icons/heptagon.svg new file mode 100644 index 0000000..c6ee735 --- /dev/null +++ b/public/Icons/heptagon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hexagon-fill.svg b/public/Icons/hexagon-fill.svg new file mode 100644 index 0000000..c87e117 --- /dev/null +++ b/public/Icons/hexagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hexagon-half.svg b/public/Icons/hexagon-half.svg new file mode 100644 index 0000000..b146335 --- /dev/null +++ b/public/Icons/hexagon-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hexagon.svg b/public/Icons/hexagon.svg new file mode 100644 index 0000000..52a3927 --- /dev/null +++ b/public/Icons/hexagon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hourglass-bottom.svg b/public/Icons/hourglass-bottom.svg new file mode 100644 index 0000000..c2d3df3 --- /dev/null +++ b/public/Icons/hourglass-bottom.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hourglass-split.svg b/public/Icons/hourglass-split.svg new file mode 100644 index 0000000..3d352d2 --- /dev/null +++ b/public/Icons/hourglass-split.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hourglass-top.svg b/public/Icons/hourglass-top.svg new file mode 100644 index 0000000..f09528d --- /dev/null +++ b/public/Icons/hourglass-top.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/hourglass.svg b/public/Icons/hourglass.svg new file mode 100644 index 0000000..934d7ea --- /dev/null +++ b/public/Icons/hourglass.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/house-door-fill.svg b/public/Icons/house-door-fill.svg new file mode 100644 index 0000000..dbe3e3d --- /dev/null +++ b/public/Icons/house-door-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/house-door.svg b/public/Icons/house-door.svg new file mode 100644 index 0000000..04c427d --- /dev/null +++ b/public/Icons/house-door.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/house-fill.svg b/public/Icons/house-fill.svg new file mode 100644 index 0000000..f67c371 --- /dev/null +++ b/public/Icons/house-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/house.svg b/public/Icons/house.svg new file mode 100644 index 0000000..16fd58c --- /dev/null +++ b/public/Icons/house.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/hr.svg b/public/Icons/hr.svg new file mode 100644 index 0000000..1853792 --- /dev/null +++ b/public/Icons/hr.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/image-alt.svg b/public/Icons/image-alt.svg new file mode 100644 index 0000000..694644b --- /dev/null +++ b/public/Icons/image-alt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/image-fill.svg b/public/Icons/image-fill.svg new file mode 100644 index 0000000..773eb50 --- /dev/null +++ b/public/Icons/image-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/image.svg b/public/Icons/image.svg new file mode 100644 index 0000000..10ec9d7 --- /dev/null +++ b/public/Icons/image.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/images.svg b/public/Icons/images.svg new file mode 100644 index 0000000..affca7f --- /dev/null +++ b/public/Icons/images.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/inbox-fill.svg b/public/Icons/inbox-fill.svg new file mode 100644 index 0000000..fc24710 --- /dev/null +++ b/public/Icons/inbox-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/inbox.svg b/public/Icons/inbox.svg new file mode 100644 index 0000000..a621f02 --- /dev/null +++ b/public/Icons/inbox.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/inboxes-fill.svg b/public/Icons/inboxes-fill.svg new file mode 100644 index 0000000..15cce9a --- /dev/null +++ b/public/Icons/inboxes-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/inboxes.svg b/public/Icons/inboxes.svg new file mode 100644 index 0000000..057402c --- /dev/null +++ b/public/Icons/inboxes.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/info-circle-fill.svg b/public/Icons/info-circle-fill.svg new file mode 100644 index 0000000..ccb2410 --- /dev/null +++ b/public/Icons/info-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/info-circle.svg b/public/Icons/info-circle.svg new file mode 100644 index 0000000..396f778 --- /dev/null +++ b/public/Icons/info-circle.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/info-square-fill.svg b/public/Icons/info-square-fill.svg new file mode 100644 index 0000000..f544b89 --- /dev/null +++ b/public/Icons/info-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/info-square.svg b/public/Icons/info-square.svg new file mode 100644 index 0000000..37a96b7 --- /dev/null +++ b/public/Icons/info-square.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/info.svg b/public/Icons/info.svg new file mode 100644 index 0000000..6b613c6 --- /dev/null +++ b/public/Icons/info.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/input-cursor-text.svg b/public/Icons/input-cursor-text.svg new file mode 100644 index 0000000..217cc3e --- /dev/null +++ b/public/Icons/input-cursor-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/input-cursor.svg b/public/Icons/input-cursor.svg new file mode 100644 index 0000000..bfe0ee0 --- /dev/null +++ b/public/Icons/input-cursor.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/intersect.svg b/public/Icons/intersect.svg new file mode 100644 index 0000000..01f5856 --- /dev/null +++ b/public/Icons/intersect.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/journal-album.svg b/public/Icons/journal-album.svg new file mode 100644 index 0000000..b5b9f04 --- /dev/null +++ b/public/Icons/journal-album.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal-arrow-down.svg b/public/Icons/journal-arrow-down.svg new file mode 100644 index 0000000..defc93b --- /dev/null +++ b/public/Icons/journal-arrow-down.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal-arrow-up.svg b/public/Icons/journal-arrow-up.svg new file mode 100644 index 0000000..5aa0a3a --- /dev/null +++ b/public/Icons/journal-arrow-up.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal-check.svg b/public/Icons/journal-check.svg new file mode 100644 index 0000000..0b92851 --- /dev/null +++ b/public/Icons/journal-check.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal-code.svg b/public/Icons/journal-code.svg new file mode 100644 index 0000000..6bc10bf --- /dev/null +++ b/public/Icons/journal-code.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal-medical.svg b/public/Icons/journal-medical.svg new file mode 100644 index 0000000..33366b1 --- /dev/null +++ b/public/Icons/journal-medical.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal-minus.svg b/public/Icons/journal-minus.svg new file mode 100644 index 0000000..6f773d5 --- /dev/null +++ b/public/Icons/journal-minus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal-plus.svg b/public/Icons/journal-plus.svg new file mode 100644 index 0000000..9b99e38 --- /dev/null +++ b/public/Icons/journal-plus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal-richtext.svg b/public/Icons/journal-richtext.svg new file mode 100644 index 0000000..7a27f87 --- /dev/null +++ b/public/Icons/journal-richtext.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal-text.svg b/public/Icons/journal-text.svg new file mode 100644 index 0000000..b31ce24 --- /dev/null +++ b/public/Icons/journal-text.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal-x.svg b/public/Icons/journal-x.svg new file mode 100644 index 0000000..fa718e6 --- /dev/null +++ b/public/Icons/journal-x.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/journal.svg b/public/Icons/journal.svg new file mode 100644 index 0000000..954f38a --- /dev/null +++ b/public/Icons/journal.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/journals.svg b/public/Icons/journals.svg new file mode 100644 index 0000000..dc7d96d --- /dev/null +++ b/public/Icons/journals.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/joystick.svg b/public/Icons/joystick.svg new file mode 100644 index 0000000..6221ed1 --- /dev/null +++ b/public/Icons/joystick.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/justify-left.svg b/public/Icons/justify-left.svg new file mode 100644 index 0000000..d5a7019 --- /dev/null +++ b/public/Icons/justify-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/justify-right.svg b/public/Icons/justify-right.svg new file mode 100644 index 0000000..a21c24f --- /dev/null +++ b/public/Icons/justify-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/justify.svg b/public/Icons/justify.svg new file mode 100644 index 0000000..1d483c3 --- /dev/null +++ b/public/Icons/justify.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/kanban-fill.svg b/public/Icons/kanban-fill.svg new file mode 100644 index 0000000..be95eab --- /dev/null +++ b/public/Icons/kanban-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/kanban.svg b/public/Icons/kanban.svg new file mode 100644 index 0000000..e77cb5d --- /dev/null +++ b/public/Icons/kanban.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/key-fill.svg b/public/Icons/key-fill.svg new file mode 100644 index 0000000..b42d1d0 --- /dev/null +++ b/public/Icons/key-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/key.svg b/public/Icons/key.svg new file mode 100644 index 0000000..3f0150b --- /dev/null +++ b/public/Icons/key.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/keyboard-fill.svg b/public/Icons/keyboard-fill.svg new file mode 100644 index 0000000..8011d18 --- /dev/null +++ b/public/Icons/keyboard-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/keyboard.svg b/public/Icons/keyboard.svg new file mode 100644 index 0000000..5329bca --- /dev/null +++ b/public/Icons/keyboard.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/ladder.svg b/public/Icons/ladder.svg new file mode 100644 index 0000000..fea6ed7 --- /dev/null +++ b/public/Icons/ladder.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/lamp-fill.svg b/public/Icons/lamp-fill.svg new file mode 100644 index 0000000..02856a1 --- /dev/null +++ b/public/Icons/lamp-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/lamp.svg b/public/Icons/lamp.svg new file mode 100644 index 0000000..5287c0e --- /dev/null +++ b/public/Icons/lamp.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/laptop-fill.svg b/public/Icons/laptop-fill.svg new file mode 100644 index 0000000..40518e9 --- /dev/null +++ b/public/Icons/laptop-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/laptop.svg b/public/Icons/laptop.svg new file mode 100644 index 0000000..d48262e --- /dev/null +++ b/public/Icons/laptop.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layers-fill.svg b/public/Icons/layers-fill.svg new file mode 100644 index 0000000..c5bdba0 --- /dev/null +++ b/public/Icons/layers-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layers-half.svg b/public/Icons/layers-half.svg new file mode 100644 index 0000000..b4a726b --- /dev/null +++ b/public/Icons/layers-half.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layers.svg b/public/Icons/layers.svg new file mode 100644 index 0000000..dd76896 --- /dev/null +++ b/public/Icons/layers.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-sidebar-inset-reverse.svg b/public/Icons/layout-sidebar-inset-reverse.svg new file mode 100644 index 0000000..7eadea9 --- /dev/null +++ b/public/Icons/layout-sidebar-inset-reverse.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-sidebar-inset.svg b/public/Icons/layout-sidebar-inset.svg new file mode 100644 index 0000000..6e206f0 --- /dev/null +++ b/public/Icons/layout-sidebar-inset.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-sidebar-reverse.svg b/public/Icons/layout-sidebar-reverse.svg new file mode 100644 index 0000000..7481d68 --- /dev/null +++ b/public/Icons/layout-sidebar-reverse.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-sidebar.svg b/public/Icons/layout-sidebar.svg new file mode 100644 index 0000000..2b39513 --- /dev/null +++ b/public/Icons/layout-sidebar.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-split.svg b/public/Icons/layout-split.svg new file mode 100644 index 0000000..601b810 --- /dev/null +++ b/public/Icons/layout-split.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-text-sidebar-reverse.svg b/public/Icons/layout-text-sidebar-reverse.svg new file mode 100644 index 0000000..0cc1ba8 --- /dev/null +++ b/public/Icons/layout-text-sidebar-reverse.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-text-sidebar.svg b/public/Icons/layout-text-sidebar.svg new file mode 100644 index 0000000..823fb79 --- /dev/null +++ b/public/Icons/layout-text-sidebar.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-text-window-reverse.svg b/public/Icons/layout-text-window-reverse.svg new file mode 100644 index 0000000..2838eeb --- /dev/null +++ b/public/Icons/layout-text-window-reverse.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-text-window.svg b/public/Icons/layout-text-window.svg new file mode 100644 index 0000000..5dede32 --- /dev/null +++ b/public/Icons/layout-text-window.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-three-columns.svg b/public/Icons/layout-three-columns.svg new file mode 100644 index 0000000..8c2f7ed --- /dev/null +++ b/public/Icons/layout-three-columns.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/layout-wtf.svg b/public/Icons/layout-wtf.svg new file mode 100644 index 0000000..8fe3a01 --- /dev/null +++ b/public/Icons/layout-wtf.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/life-preserver.svg b/public/Icons/life-preserver.svg new file mode 100644 index 0000000..6e1015e --- /dev/null +++ b/public/Icons/life-preserver.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/lightning-fill.svg b/public/Icons/lightning-fill.svg new file mode 100644 index 0000000..f07ccfd --- /dev/null +++ b/public/Icons/lightning-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/lightning.svg b/public/Icons/lightning.svg new file mode 100644 index 0000000..0f3c5e9 --- /dev/null +++ b/public/Icons/lightning.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/link-45deg.svg b/public/Icons/link-45deg.svg new file mode 100644 index 0000000..a94c4ce --- /dev/null +++ b/public/Icons/link-45deg.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/link.svg b/public/Icons/link.svg new file mode 100644 index 0000000..d51264a --- /dev/null +++ b/public/Icons/link.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/list-check.svg b/public/Icons/list-check.svg new file mode 100644 index 0000000..ad95265 --- /dev/null +++ b/public/Icons/list-check.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/list-nested.svg b/public/Icons/list-nested.svg new file mode 100644 index 0000000..a06191a --- /dev/null +++ b/public/Icons/list-nested.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/list-ol.svg b/public/Icons/list-ol.svg new file mode 100644 index 0000000..f786e1d --- /dev/null +++ b/public/Icons/list-ol.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/list-stars.svg b/public/Icons/list-stars.svg new file mode 100644 index 0000000..d3a6bf8 --- /dev/null +++ b/public/Icons/list-stars.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/list-task.svg b/public/Icons/list-task.svg new file mode 100644 index 0000000..54b454e --- /dev/null +++ b/public/Icons/list-task.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/list-ul.svg b/public/Icons/list-ul.svg new file mode 100644 index 0000000..2d7eb7c --- /dev/null +++ b/public/Icons/list-ul.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/list.svg b/public/Icons/list.svg new file mode 100644 index 0000000..3e48191 --- /dev/null +++ b/public/Icons/list.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/lock-fill.svg b/public/Icons/lock-fill.svg new file mode 100644 index 0000000..6552d35 --- /dev/null +++ b/public/Icons/lock-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/lock.svg b/public/Icons/lock.svg new file mode 100644 index 0000000..34100ad --- /dev/null +++ b/public/Icons/lock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/mailbox.svg b/public/Icons/mailbox.svg new file mode 100644 index 0000000..78b27ef --- /dev/null +++ b/public/Icons/mailbox.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/mailbox2.svg b/public/Icons/mailbox2.svg new file mode 100644 index 0000000..d8f12b5 --- /dev/null +++ b/public/Icons/mailbox2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/map-fill.svg b/public/Icons/map-fill.svg new file mode 100644 index 0000000..58701c1 --- /dev/null +++ b/public/Icons/map-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/map.svg b/public/Icons/map.svg new file mode 100644 index 0000000..1425e0d --- /dev/null +++ b/public/Icons/map.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/markdown-fill.svg b/public/Icons/markdown-fill.svg new file mode 100644 index 0000000..8ea5797 --- /dev/null +++ b/public/Icons/markdown-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/markdown.svg b/public/Icons/markdown.svg new file mode 100644 index 0000000..83635be --- /dev/null +++ b/public/Icons/markdown.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/menu-app-fill.svg b/public/Icons/menu-app-fill.svg new file mode 100644 index 0000000..af521c6 --- /dev/null +++ b/public/Icons/menu-app-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/menu-app.svg b/public/Icons/menu-app.svg new file mode 100644 index 0000000..0035ce3 --- /dev/null +++ b/public/Icons/menu-app.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/menu-button-fill.svg b/public/Icons/menu-button-fill.svg new file mode 100644 index 0000000..bbc5d6f --- /dev/null +++ b/public/Icons/menu-button-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/menu-button-wide-fill.svg b/public/Icons/menu-button-wide-fill.svg new file mode 100644 index 0000000..9d73907 --- /dev/null +++ b/public/Icons/menu-button-wide-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/menu-button-wide.svg b/public/Icons/menu-button-wide.svg new file mode 100644 index 0000000..1445627 --- /dev/null +++ b/public/Icons/menu-button-wide.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/menu-button.svg b/public/Icons/menu-button.svg new file mode 100644 index 0000000..4d38ea1 --- /dev/null +++ b/public/Icons/menu-button.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/menu-down.svg b/public/Icons/menu-down.svg new file mode 100644 index 0000000..6818632 --- /dev/null +++ b/public/Icons/menu-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/menu-up.svg b/public/Icons/menu-up.svg new file mode 100644 index 0000000..edf6bbc --- /dev/null +++ b/public/Icons/menu-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/mic-fill.svg b/public/Icons/mic-fill.svg new file mode 100644 index 0000000..ef0d7af --- /dev/null +++ b/public/Icons/mic-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/mic-mute-fill.svg b/public/Icons/mic-mute-fill.svg new file mode 100644 index 0000000..5cefd0b --- /dev/null +++ b/public/Icons/mic-mute-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/mic-mute.svg b/public/Icons/mic-mute.svg new file mode 100644 index 0000000..7014109 --- /dev/null +++ b/public/Icons/mic-mute.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/mic.svg b/public/Icons/mic.svg new file mode 100644 index 0000000..9608a1b --- /dev/null +++ b/public/Icons/mic.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/minecart-loaded.svg b/public/Icons/minecart-loaded.svg new file mode 100644 index 0000000..d6b49b3 --- /dev/null +++ b/public/Icons/minecart-loaded.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/minecart.svg b/public/Icons/minecart.svg new file mode 100644 index 0000000..363043d --- /dev/null +++ b/public/Icons/minecart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/moon.svg b/public/Icons/moon.svg new file mode 100644 index 0000000..8d5cf14 --- /dev/null +++ b/public/Icons/moon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/mouse.svg b/public/Icons/mouse.svg new file mode 100644 index 0000000..6e2a878 --- /dev/null +++ b/public/Icons/mouse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/mouse2.svg b/public/Icons/mouse2.svg new file mode 100644 index 0000000..c409177 --- /dev/null +++ b/public/Icons/mouse2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/mouse3.svg b/public/Icons/mouse3.svg new file mode 100644 index 0000000..0a10ada --- /dev/null +++ b/public/Icons/mouse3.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/music-note-beamed.svg b/public/Icons/music-note-beamed.svg new file mode 100644 index 0000000..c862afa --- /dev/null +++ b/public/Icons/music-note-beamed.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/music-note-list.svg b/public/Icons/music-note-list.svg new file mode 100644 index 0000000..4690ef6 --- /dev/null +++ b/public/Icons/music-note-list.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/music-note.svg b/public/Icons/music-note.svg new file mode 100644 index 0000000..7a23b84 --- /dev/null +++ b/public/Icons/music-note.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/music-player-fill.svg b/public/Icons/music-player-fill.svg new file mode 100644 index 0000000..9c63cb8 --- /dev/null +++ b/public/Icons/music-player-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/music-player.svg b/public/Icons/music-player.svg new file mode 100644 index 0000000..01ee20f --- /dev/null +++ b/public/Icons/music-player.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/newspaper.svg b/public/Icons/newspaper.svg new file mode 100644 index 0000000..8c5dfa9 --- /dev/null +++ b/public/Icons/newspaper.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/node-minus-fill.svg b/public/Icons/node-minus-fill.svg new file mode 100644 index 0000000..5ed4ab9 --- /dev/null +++ b/public/Icons/node-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/node-minus.svg b/public/Icons/node-minus.svg new file mode 100644 index 0000000..2e1620d --- /dev/null +++ b/public/Icons/node-minus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/node-plus-fill.svg b/public/Icons/node-plus-fill.svg new file mode 100644 index 0000000..0b2b64e --- /dev/null +++ b/public/Icons/node-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/node-plus.svg b/public/Icons/node-plus.svg new file mode 100644 index 0000000..a5ad50a --- /dev/null +++ b/public/Icons/node-plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/nok.svg b/public/Icons/nok.svg new file mode 100644 index 0000000..d559255 --- /dev/null +++ b/public/Icons/nok.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + X icon + 2008-04-04T03:28:52 + Game Design for pyweek#6 + http://openclipart.org/detail/16155/x-icon-by-milker-16155 + + + milker + + + + + clip art + clipart + game + icon + image + media + png + public domain + svg + + + + + + + + + + + diff --git a/public/Icons/nut-fill.svg b/public/Icons/nut-fill.svg new file mode 100644 index 0000000..a0c1f57 --- /dev/null +++ b/public/Icons/nut-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/nut.svg b/public/Icons/nut.svg new file mode 100644 index 0000000..30bba5d --- /dev/null +++ b/public/Icons/nut.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/octagon-fill.svg b/public/Icons/octagon-fill.svg new file mode 100644 index 0000000..45417b5 --- /dev/null +++ b/public/Icons/octagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/octagon-half.svg b/public/Icons/octagon-half.svg new file mode 100644 index 0000000..90522d6 --- /dev/null +++ b/public/Icons/octagon-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/octagon.svg b/public/Icons/octagon.svg new file mode 100644 index 0000000..374bad4 --- /dev/null +++ b/public/Icons/octagon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/ok.svg b/public/Icons/ok.svg new file mode 100644 index 0000000..9c977f5 --- /dev/null +++ b/public/Icons/ok.svg @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + Check mark + 2010-09-10T21:09:32 + Check mark icon. + https://openclipart.org/detail/84289/check-mark-by-jhnri4 + + + jhnri4 + + + + + accepted + approval + approved + certified + check + good + how i did it + ok + + + + + + + + + + + diff --git a/public/Icons/option.svg b/public/Icons/option.svg new file mode 100644 index 0000000..9998974 --- /dev/null +++ b/public/Icons/option.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/outlet.svg b/public/Icons/outlet.svg new file mode 100644 index 0000000..5ac85f3 --- /dev/null +++ b/public/Icons/outlet.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/paperclip.svg b/public/Icons/paperclip.svg new file mode 100644 index 0000000..e146ea2 --- /dev/null +++ b/public/Icons/paperclip.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/paragraph.svg b/public/Icons/paragraph.svg new file mode 100644 index 0000000..399329c --- /dev/null +++ b/public/Icons/paragraph.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/patch-check-fll.svg b/public/Icons/patch-check-fll.svg new file mode 100644 index 0000000..750b530 --- /dev/null +++ b/public/Icons/patch-check-fll.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/patch-check.svg b/public/Icons/patch-check.svg new file mode 100644 index 0000000..50e1200 --- /dev/null +++ b/public/Icons/patch-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/patch-exclamation-fll.svg b/public/Icons/patch-exclamation-fll.svg new file mode 100644 index 0000000..9640010 --- /dev/null +++ b/public/Icons/patch-exclamation-fll.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/patch-exclamation.svg b/public/Icons/patch-exclamation.svg new file mode 100644 index 0000000..42ab96f --- /dev/null +++ b/public/Icons/patch-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/patch-minus-fll.svg b/public/Icons/patch-minus-fll.svg new file mode 100644 index 0000000..d490d2a --- /dev/null +++ b/public/Icons/patch-minus-fll.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/patch-minus.svg b/public/Icons/patch-minus.svg new file mode 100644 index 0000000..e45e885 --- /dev/null +++ b/public/Icons/patch-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/patch-plus-fll.svg b/public/Icons/patch-plus-fll.svg new file mode 100644 index 0000000..a9b96cd --- /dev/null +++ b/public/Icons/patch-plus-fll.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/patch-plus.svg b/public/Icons/patch-plus.svg new file mode 100644 index 0000000..4f8f1c8 --- /dev/null +++ b/public/Icons/patch-plus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/patch-question-fll.svg b/public/Icons/patch-question-fll.svg new file mode 100644 index 0000000..6f007b1 --- /dev/null +++ b/public/Icons/patch-question-fll.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/patch-question.svg b/public/Icons/patch-question.svg new file mode 100644 index 0000000..ae317bc --- /dev/null +++ b/public/Icons/patch-question.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/pause-fill.svg b/public/Icons/pause-fill.svg new file mode 100644 index 0000000..8d6d474 --- /dev/null +++ b/public/Icons/pause-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pause.svg b/public/Icons/pause.svg new file mode 100644 index 0000000..ca1d03d --- /dev/null +++ b/public/Icons/pause.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pdf.svg b/public/Icons/pdf.svg new file mode 100644 index 0000000..abac648 --- /dev/null +++ b/public/Icons/pdf.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/Icons/peace-fill.svg b/public/Icons/peace-fill.svg new file mode 100644 index 0000000..69b68c9 --- /dev/null +++ b/public/Icons/peace-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/peace.svg b/public/Icons/peace.svg new file mode 100644 index 0000000..1f1766a --- /dev/null +++ b/public/Icons/peace.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pen-fill.svg b/public/Icons/pen-fill.svg new file mode 100644 index 0000000..916ac56 --- /dev/null +++ b/public/Icons/pen-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pen.svg b/public/Icons/pen.svg new file mode 100644 index 0000000..7eb9d4d --- /dev/null +++ b/public/Icons/pen.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pencil-fill.svg b/public/Icons/pencil-fill.svg new file mode 100644 index 0000000..7479a0b --- /dev/null +++ b/public/Icons/pencil-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pencil-square.svg b/public/Icons/pencil-square.svg new file mode 100644 index 0000000..6835072 --- /dev/null +++ b/public/Icons/pencil-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/pencil.svg b/public/Icons/pencil.svg new file mode 100644 index 0000000..aa3a6f7 --- /dev/null +++ b/public/Icons/pencil.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pentagon-fill.svg b/public/Icons/pentagon-fill.svg new file mode 100644 index 0000000..515a446 --- /dev/null +++ b/public/Icons/pentagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pentagon-half.svg b/public/Icons/pentagon-half.svg new file mode 100644 index 0000000..49da0f0 --- /dev/null +++ b/public/Icons/pentagon-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pentagon.svg b/public/Icons/pentagon.svg new file mode 100644 index 0000000..25bb5df --- /dev/null +++ b/public/Icons/pentagon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/people-fill.svg b/public/Icons/people-fill.svg new file mode 100644 index 0000000..2c20ba7 --- /dev/null +++ b/public/Icons/people-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/people.svg b/public/Icons/people.svg new file mode 100644 index 0000000..e07d514 --- /dev/null +++ b/public/Icons/people.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/percent.svg b/public/Icons/percent.svg new file mode 100644 index 0000000..0db19e2 --- /dev/null +++ b/public/Icons/percent.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-badge-fill.svg b/public/Icons/person-badge-fill.svg new file mode 100644 index 0000000..e57f688 --- /dev/null +++ b/public/Icons/person-badge-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-badge.svg b/public/Icons/person-badge.svg new file mode 100644 index 0000000..3d26322 --- /dev/null +++ b/public/Icons/person-badge.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/person-bounding-box.svg b/public/Icons/person-bounding-box.svg new file mode 100644 index 0000000..4f17dd3 --- /dev/null +++ b/public/Icons/person-bounding-box.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/person-check-fill.svg b/public/Icons/person-check-fill.svg new file mode 100644 index 0000000..4e5dbfb --- /dev/null +++ b/public/Icons/person-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-check.svg b/public/Icons/person-check.svg new file mode 100644 index 0000000..a34e4ef --- /dev/null +++ b/public/Icons/person-check.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-circle.svg b/public/Icons/person-circle.svg new file mode 100644 index 0000000..992fbff --- /dev/null +++ b/public/Icons/person-circle.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/person-dash-fill.svg b/public/Icons/person-dash-fill.svg new file mode 100644 index 0000000..351d449 --- /dev/null +++ b/public/Icons/person-dash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-dash.svg b/public/Icons/person-dash.svg new file mode 100644 index 0000000..810612b --- /dev/null +++ b/public/Icons/person-dash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-fill.svg b/public/Icons/person-fill.svg new file mode 100644 index 0000000..1d1e64f --- /dev/null +++ b/public/Icons/person-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-lines-fill.svg b/public/Icons/person-lines-fill.svg new file mode 100644 index 0000000..6aa83b6 --- /dev/null +++ b/public/Icons/person-lines-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-plus-fill.svg b/public/Icons/person-plus-fill.svg new file mode 100644 index 0000000..c7af1ac --- /dev/null +++ b/public/Icons/person-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-plus.svg b/public/Icons/person-plus.svg new file mode 100644 index 0000000..f9365f9 --- /dev/null +++ b/public/Icons/person-plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-square.svg b/public/Icons/person-square.svg new file mode 100644 index 0000000..4dbc18b --- /dev/null +++ b/public/Icons/person-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/person-x-fill.svg b/public/Icons/person-x-fill.svg new file mode 100644 index 0000000..1a8674e --- /dev/null +++ b/public/Icons/person-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person-x.svg b/public/Icons/person-x.svg new file mode 100644 index 0000000..0a1ef4d --- /dev/null +++ b/public/Icons/person-x.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/person.svg b/public/Icons/person.svg new file mode 100644 index 0000000..bae757c --- /dev/null +++ b/public/Icons/person.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/phone-fill.svg b/public/Icons/phone-fill.svg new file mode 100644 index 0000000..c82edd9 --- /dev/null +++ b/public/Icons/phone-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/phone-landscape-fill.svg b/public/Icons/phone-landscape-fill.svg new file mode 100644 index 0000000..2729277 --- /dev/null +++ b/public/Icons/phone-landscape-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/phone-landscape.svg b/public/Icons/phone-landscape.svg new file mode 100644 index 0000000..aeeb3c4 --- /dev/null +++ b/public/Icons/phone-landscape.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/phone-vibrate.svg b/public/Icons/phone-vibrate.svg new file mode 100644 index 0000000..3e930c0 --- /dev/null +++ b/public/Icons/phone-vibrate.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/phone.svg b/public/Icons/phone.svg new file mode 100644 index 0000000..ff6be95 --- /dev/null +++ b/public/Icons/phone.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/pie-chart-fill.svg b/public/Icons/pie-chart-fill.svg new file mode 100644 index 0000000..310ab14 --- /dev/null +++ b/public/Icons/pie-chart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pie-chart.svg b/public/Icons/pie-chart.svg new file mode 100644 index 0000000..78fd2ff --- /dev/null +++ b/public/Icons/pie-chart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/pip-fill.svg b/public/Icons/pip-fill.svg new file mode 100644 index 0000000..69671d9 --- /dev/null +++ b/public/Icons/pip-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/pip.svg b/public/Icons/pip.svg new file mode 100644 index 0000000..2bf45d0 --- /dev/null +++ b/public/Icons/pip.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/play-fill.svg b/public/Icons/play-fill.svg new file mode 100644 index 0000000..21193fb --- /dev/null +++ b/public/Icons/play-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/play.svg b/public/Icons/play.svg new file mode 100644 index 0000000..bafd685 --- /dev/null +++ b/public/Icons/play.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/plug-fill.svg b/public/Icons/plug-fill.svg new file mode 100644 index 0000000..90a301f --- /dev/null +++ b/public/Icons/plug-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/plug.svg b/public/Icons/plug.svg new file mode 100644 index 0000000..59af5b0 --- /dev/null +++ b/public/Icons/plug.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/plus-circle-fill.svg b/public/Icons/plus-circle-fill.svg new file mode 100644 index 0000000..ff3013c --- /dev/null +++ b/public/Icons/plus-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/plus-circle.svg b/public/Icons/plus-circle.svg new file mode 100644 index 0000000..da6dcd1 --- /dev/null +++ b/public/Icons/plus-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/plus-square-fill.svg b/public/Icons/plus-square-fill.svg new file mode 100644 index 0000000..c4829f1 --- /dev/null +++ b/public/Icons/plus-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/plus-square.svg b/public/Icons/plus-square.svg new file mode 100644 index 0000000..29a0be3 --- /dev/null +++ b/public/Icons/plus-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/plus.svg b/public/Icons/plus.svg new file mode 100644 index 0000000..aadda81 --- /dev/null +++ b/public/Icons/plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/power.svg b/public/Icons/power.svg new file mode 100644 index 0000000..cd9385a --- /dev/null +++ b/public/Icons/power.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/printer-fill.svg b/public/Icons/printer-fill.svg new file mode 100644 index 0000000..6aece3a --- /dev/null +++ b/public/Icons/printer-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/printer.svg b/public/Icons/printer.svg new file mode 100644 index 0000000..f25973d --- /dev/null +++ b/public/Icons/printer.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/puzzle-fill.svg b/public/Icons/puzzle-fill.svg new file mode 100644 index 0000000..cb6b57a --- /dev/null +++ b/public/Icons/puzzle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/puzzle.svg b/public/Icons/puzzle.svg new file mode 100644 index 0000000..42d646d --- /dev/null +++ b/public/Icons/puzzle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/question-circle-fill.svg b/public/Icons/question-circle-fill.svg new file mode 100644 index 0000000..8204b40 --- /dev/null +++ b/public/Icons/question-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/question-circle.svg b/public/Icons/question-circle.svg new file mode 100644 index 0000000..f6cd3fd --- /dev/null +++ b/public/Icons/question-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/question-diamond-fill.svg b/public/Icons/question-diamond-fill.svg new file mode 100644 index 0000000..ca24786 --- /dev/null +++ b/public/Icons/question-diamond-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/question-diamond.svg b/public/Icons/question-diamond.svg new file mode 100644 index 0000000..5a5f89e --- /dev/null +++ b/public/Icons/question-diamond.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/question-octagon-fill.svg b/public/Icons/question-octagon-fill.svg new file mode 100644 index 0000000..e2eb817 --- /dev/null +++ b/public/Icons/question-octagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/question-octagon.svg b/public/Icons/question-octagon.svg new file mode 100644 index 0000000..c10317d --- /dev/null +++ b/public/Icons/question-octagon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/question-square-fill.svg b/public/Icons/question-square-fill.svg new file mode 100644 index 0000000..1f246f5 --- /dev/null +++ b/public/Icons/question-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/question-square.svg b/public/Icons/question-square.svg new file mode 100644 index 0000000..5683022 --- /dev/null +++ b/public/Icons/question-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/question.svg b/public/Icons/question.svg new file mode 100644 index 0000000..7c43f8d --- /dev/null +++ b/public/Icons/question.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/receipt-cutoff.svg b/public/Icons/receipt-cutoff.svg new file mode 100644 index 0000000..6b9470e --- /dev/null +++ b/public/Icons/receipt-cutoff.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/receipt.svg b/public/Icons/receipt.svg new file mode 100644 index 0000000..cd288f3 --- /dev/null +++ b/public/Icons/receipt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/reception-0.svg b/public/Icons/reception-0.svg new file mode 100644 index 0000000..aefc9e5 --- /dev/null +++ b/public/Icons/reception-0.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/reception-1.svg b/public/Icons/reception-1.svg new file mode 100644 index 0000000..1b48b80 --- /dev/null +++ b/public/Icons/reception-1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/reception-2.svg b/public/Icons/reception-2.svg new file mode 100644 index 0000000..6d67f4d --- /dev/null +++ b/public/Icons/reception-2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/reception-3.svg b/public/Icons/reception-3.svg new file mode 100644 index 0000000..dd7c691 --- /dev/null +++ b/public/Icons/reception-3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/reception-4.svg b/public/Icons/reception-4.svg new file mode 100644 index 0000000..6b6c1a7 --- /dev/null +++ b/public/Icons/reception-4.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/reply-all-fill.svg b/public/Icons/reply-all-fill.svg new file mode 100644 index 0000000..5cae22f --- /dev/null +++ b/public/Icons/reply-all-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/reply-all.svg b/public/Icons/reply-all.svg new file mode 100644 index 0000000..8b5ab20 --- /dev/null +++ b/public/Icons/reply-all.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/reply-fill.svg b/public/Icons/reply-fill.svg new file mode 100644 index 0000000..dac6973 --- /dev/null +++ b/public/Icons/reply-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/reply.svg b/public/Icons/reply.svg new file mode 100644 index 0000000..db04297 --- /dev/null +++ b/public/Icons/reply.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/rss-fill.svg b/public/Icons/rss-fill.svg new file mode 100644 index 0000000..19e083c --- /dev/null +++ b/public/Icons/rss-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/rss.svg b/public/Icons/rss.svg new file mode 100644 index 0000000..a5e4ebc --- /dev/null +++ b/public/Icons/rss.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/scissors.svg b/public/Icons/scissors.svg new file mode 100644 index 0000000..0c1dd4e --- /dev/null +++ b/public/Icons/scissors.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/screwdriver.svg b/public/Icons/screwdriver.svg new file mode 100644 index 0000000..107193c --- /dev/null +++ b/public/Icons/screwdriver.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/search.svg b/public/Icons/search.svg new file mode 100644 index 0000000..3bd1605 --- /dev/null +++ b/public/Icons/search.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/segmented-nav.svg b/public/Icons/segmented-nav.svg new file mode 100644 index 0000000..53d30ea --- /dev/null +++ b/public/Icons/segmented-nav.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/server.svg b/public/Icons/server.svg new file mode 100644 index 0000000..76b598d --- /dev/null +++ b/public/Icons/server.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/share-fill.svg b/public/Icons/share-fill.svg new file mode 100644 index 0000000..01d787b --- /dev/null +++ b/public/Icons/share-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/share.svg b/public/Icons/share.svg new file mode 100644 index 0000000..66b3217 --- /dev/null +++ b/public/Icons/share.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shield-check.svg b/public/Icons/shield-check.svg new file mode 100644 index 0000000..c60179d --- /dev/null +++ b/public/Icons/shield-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/shield-exclamation.svg b/public/Icons/shield-exclamation.svg new file mode 100644 index 0000000..71e955e --- /dev/null +++ b/public/Icons/shield-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/shield-fill-check.svg b/public/Icons/shield-fill-check.svg new file mode 100644 index 0000000..2ede675 --- /dev/null +++ b/public/Icons/shield-fill-check.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shield-fill-exclamation.svg b/public/Icons/shield-fill-exclamation.svg new file mode 100644 index 0000000..669308d --- /dev/null +++ b/public/Icons/shield-fill-exclamation.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shield-fill-minus.svg b/public/Icons/shield-fill-minus.svg new file mode 100644 index 0000000..c8b9a1b --- /dev/null +++ b/public/Icons/shield-fill-minus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shield-fill-plus.svg b/public/Icons/shield-fill-plus.svg new file mode 100644 index 0000000..3fc1bf2 --- /dev/null +++ b/public/Icons/shield-fill-plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shield-fill-x.svg b/public/Icons/shield-fill-x.svg new file mode 100644 index 0000000..3f7132c --- /dev/null +++ b/public/Icons/shield-fill-x.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shield-fill.svg b/public/Icons/shield-fill.svg new file mode 100644 index 0000000..0b0107d --- /dev/null +++ b/public/Icons/shield-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shield-lock-fill.svg b/public/Icons/shield-lock-fill.svg new file mode 100644 index 0000000..31f9b1f --- /dev/null +++ b/public/Icons/shield-lock-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shield-lock.svg b/public/Icons/shield-lock.svg new file mode 100644 index 0000000..662d2fc --- /dev/null +++ b/public/Icons/shield-lock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/shield-minus.svg b/public/Icons/shield-minus.svg new file mode 100644 index 0000000..8ee8c22 --- /dev/null +++ b/public/Icons/shield-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/shield-plus.svg b/public/Icons/shield-plus.svg new file mode 100644 index 0000000..f617028 --- /dev/null +++ b/public/Icons/shield-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/shield-shaded.svg b/public/Icons/shield-shaded.svg new file mode 100644 index 0000000..6862c46 --- /dev/null +++ b/public/Icons/shield-shaded.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/shield-slash-fill.svg b/public/Icons/shield-slash-fill.svg new file mode 100644 index 0000000..d0a9973 --- /dev/null +++ b/public/Icons/shield-slash-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/shield-slash.svg b/public/Icons/shield-slash.svg new file mode 100644 index 0000000..1fc59e0 --- /dev/null +++ b/public/Icons/shield-slash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/shield-x.svg b/public/Icons/shield-x.svg new file mode 100644 index 0000000..b96304b --- /dev/null +++ b/public/Icons/shield-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/shield.svg b/public/Icons/shield.svg new file mode 100644 index 0000000..2f37ada --- /dev/null +++ b/public/Icons/shield.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shift-fill.svg b/public/Icons/shift-fill.svg new file mode 100644 index 0000000..3f7de95 --- /dev/null +++ b/public/Icons/shift-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shift.svg b/public/Icons/shift.svg new file mode 100644 index 0000000..958725d --- /dev/null +++ b/public/Icons/shift.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shop-window.svg b/public/Icons/shop-window.svg new file mode 100644 index 0000000..b12a6ce --- /dev/null +++ b/public/Icons/shop-window.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shop.svg b/public/Icons/shop.svg new file mode 100644 index 0000000..24eb2d8 --- /dev/null +++ b/public/Icons/shop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/shuffle.svg b/public/Icons/shuffle.svg new file mode 100644 index 0000000..ae74e73 --- /dev/null +++ b/public/Icons/shuffle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/signpost-2-fill.svg b/public/Icons/signpost-2-fill.svg new file mode 100644 index 0000000..e912707 --- /dev/null +++ b/public/Icons/signpost-2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/signpost-2.svg b/public/Icons/signpost-2.svg new file mode 100644 index 0000000..a85979e --- /dev/null +++ b/public/Icons/signpost-2.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/signpost-fill.svg b/public/Icons/signpost-fill.svg new file mode 100644 index 0000000..49b6d1c --- /dev/null +++ b/public/Icons/signpost-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/signpost-split-fill.svg b/public/Icons/signpost-split-fill.svg new file mode 100644 index 0000000..18f5a34 --- /dev/null +++ b/public/Icons/signpost-split-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/signpost-split.svg b/public/Icons/signpost-split.svg new file mode 100644 index 0000000..e224551 --- /dev/null +++ b/public/Icons/signpost-split.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/signpost.svg b/public/Icons/signpost.svg new file mode 100644 index 0000000..69a4aae --- /dev/null +++ b/public/Icons/signpost.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/sim-fill.svg b/public/Icons/sim-fill.svg new file mode 100644 index 0000000..c072d45 --- /dev/null +++ b/public/Icons/sim-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/sim.svg b/public/Icons/sim.svg new file mode 100644 index 0000000..82f8b48 --- /dev/null +++ b/public/Icons/sim.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/skip-backward-fill.svg b/public/Icons/skip-backward-fill.svg new file mode 100644 index 0000000..3615352 --- /dev/null +++ b/public/Icons/skip-backward-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/skip-backward.svg b/public/Icons/skip-backward.svg new file mode 100644 index 0000000..c6ba28d --- /dev/null +++ b/public/Icons/skip-backward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/skip-end-fill.svg b/public/Icons/skip-end-fill.svg new file mode 100644 index 0000000..e08252f --- /dev/null +++ b/public/Icons/skip-end-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/skip-end.svg b/public/Icons/skip-end.svg new file mode 100644 index 0000000..124274c --- /dev/null +++ b/public/Icons/skip-end.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/skip-forward-fill.svg b/public/Icons/skip-forward-fill.svg new file mode 100644 index 0000000..7db8939 --- /dev/null +++ b/public/Icons/skip-forward-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/skip-forward.svg b/public/Icons/skip-forward.svg new file mode 100644 index 0000000..db6750c --- /dev/null +++ b/public/Icons/skip-forward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/skip-start-fill.svg b/public/Icons/skip-start-fill.svg new file mode 100644 index 0000000..52af2fe --- /dev/null +++ b/public/Icons/skip-start-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/skip-start.svg b/public/Icons/skip-start.svg new file mode 100644 index 0000000..bf9fc19 --- /dev/null +++ b/public/Icons/skip-start.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/slash-circle-fill.svg b/public/Icons/slash-circle-fill.svg new file mode 100644 index 0000000..98ca989 --- /dev/null +++ b/public/Icons/slash-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/slash-circle.svg b/public/Icons/slash-circle.svg new file mode 100644 index 0000000..31b393b --- /dev/null +++ b/public/Icons/slash-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/slash-square-fill.svg b/public/Icons/slash-square-fill.svg new file mode 100644 index 0000000..77045bf --- /dev/null +++ b/public/Icons/slash-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/slash-square.svg b/public/Icons/slash-square.svg new file mode 100644 index 0000000..1ba6730 --- /dev/null +++ b/public/Icons/slash-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/slash.svg b/public/Icons/slash.svg new file mode 100644 index 0000000..4e47060 --- /dev/null +++ b/public/Icons/slash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/sliders.svg b/public/Icons/sliders.svg new file mode 100644 index 0000000..e8c7460 --- /dev/null +++ b/public/Icons/sliders.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/smartwatch.svg b/public/Icons/smartwatch.svg new file mode 100644 index 0000000..c2b7699 --- /dev/null +++ b/public/Icons/smartwatch.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/sort-alpha-down-alt.svg b/public/Icons/sort-alpha-down-alt.svg new file mode 100644 index 0000000..6b70bee --- /dev/null +++ b/public/Icons/sort-alpha-down-alt.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/sort-alpha-down.svg b/public/Icons/sort-alpha-down.svg new file mode 100644 index 0000000..f688f19 --- /dev/null +++ b/public/Icons/sort-alpha-down.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/sort-alpha-up-alt.svg b/public/Icons/sort-alpha-up-alt.svg new file mode 100644 index 0000000..2399b48 --- /dev/null +++ b/public/Icons/sort-alpha-up-alt.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/sort-alpha-up.svg b/public/Icons/sort-alpha-up.svg new file mode 100644 index 0000000..2baf712 --- /dev/null +++ b/public/Icons/sort-alpha-up.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/sort-down-alt.svg b/public/Icons/sort-down-alt.svg new file mode 100644 index 0000000..e92ced4 --- /dev/null +++ b/public/Icons/sort-down-alt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/sort-down.svg b/public/Icons/sort-down.svg new file mode 100644 index 0000000..ba56691 --- /dev/null +++ b/public/Icons/sort-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/sort-numeric-down-alt.svg b/public/Icons/sort-numeric-down-alt.svg new file mode 100644 index 0000000..223e16d --- /dev/null +++ b/public/Icons/sort-numeric-down-alt.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/sort-numeric-down.svg b/public/Icons/sort-numeric-down.svg new file mode 100644 index 0000000..c7954b5 --- /dev/null +++ b/public/Icons/sort-numeric-down.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/sort-numeric-up-alt.svg b/public/Icons/sort-numeric-up-alt.svg new file mode 100644 index 0000000..2eced23 --- /dev/null +++ b/public/Icons/sort-numeric-up-alt.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/sort-numeric-up.svg b/public/Icons/sort-numeric-up.svg new file mode 100644 index 0000000..76d554a --- /dev/null +++ b/public/Icons/sort-numeric-up.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/sort-up-alt.svg b/public/Icons/sort-up-alt.svg new file mode 100644 index 0000000..1df3792 --- /dev/null +++ b/public/Icons/sort-up-alt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/sort-up.svg b/public/Icons/sort-up.svg new file mode 100644 index 0000000..1443c5b --- /dev/null +++ b/public/Icons/sort-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/soundwave.svg b/public/Icons/soundwave.svg new file mode 100644 index 0000000..7885ab0 --- /dev/null +++ b/public/Icons/soundwave.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/speaker-fill.svg b/public/Icons/speaker-fill.svg new file mode 100644 index 0000000..ba64b47 --- /dev/null +++ b/public/Icons/speaker-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/speaker.svg b/public/Icons/speaker.svg new file mode 100644 index 0000000..d9f1fdf --- /dev/null +++ b/public/Icons/speaker.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/spellcheck.svg b/public/Icons/spellcheck.svg new file mode 100644 index 0000000..beeb1ec --- /dev/null +++ b/public/Icons/spellcheck.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/square-fill.svg b/public/Icons/square-fill.svg new file mode 100644 index 0000000..4ad0edf --- /dev/null +++ b/public/Icons/square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/square-half.svg b/public/Icons/square-half.svg new file mode 100644 index 0000000..767e193 --- /dev/null +++ b/public/Icons/square-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/square.svg b/public/Icons/square.svg new file mode 100644 index 0000000..3b67b9c --- /dev/null +++ b/public/Icons/square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/star-fill.svg b/public/Icons/star-fill.svg new file mode 100644 index 0000000..873021f --- /dev/null +++ b/public/Icons/star-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/star-half.svg b/public/Icons/star-half.svg new file mode 100644 index 0000000..18c86f7 --- /dev/null +++ b/public/Icons/star-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/star.svg b/public/Icons/star.svg new file mode 100644 index 0000000..5a284de --- /dev/null +++ b/public/Icons/star.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/stickies-fill.svg b/public/Icons/stickies-fill.svg new file mode 100644 index 0000000..4d390b3 --- /dev/null +++ b/public/Icons/stickies-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/stickies.svg b/public/Icons/stickies.svg new file mode 100644 index 0000000..38bbc5b --- /dev/null +++ b/public/Icons/stickies.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/sticky-fill.svg b/public/Icons/sticky-fill.svg new file mode 100644 index 0000000..ede5aab --- /dev/null +++ b/public/Icons/sticky-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/sticky.svg b/public/Icons/sticky.svg new file mode 100644 index 0000000..8d61574 --- /dev/null +++ b/public/Icons/sticky.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/stop-fill.svg b/public/Icons/stop-fill.svg new file mode 100644 index 0000000..cafea0d --- /dev/null +++ b/public/Icons/stop-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/stop.svg b/public/Icons/stop.svg new file mode 100644 index 0000000..7fbe4e9 --- /dev/null +++ b/public/Icons/stop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/stoplights-fill.svg b/public/Icons/stoplights-fill.svg new file mode 100644 index 0000000..bfb9899 --- /dev/null +++ b/public/Icons/stoplights-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/stoplights.svg b/public/Icons/stoplights.svg new file mode 100644 index 0000000..c94613a --- /dev/null +++ b/public/Icons/stoplights.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/stopwatch-fill.svg b/public/Icons/stopwatch-fill.svg new file mode 100644 index 0000000..9efb9bd --- /dev/null +++ b/public/Icons/stopwatch-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/stopwatch.svg b/public/Icons/stopwatch.svg new file mode 100644 index 0000000..d5b2a15 --- /dev/null +++ b/public/Icons/stopwatch.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/subtract.svg b/public/Icons/subtract.svg new file mode 100644 index 0000000..633cbd4 --- /dev/null +++ b/public/Icons/subtract.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/suit-club-fill.svg b/public/Icons/suit-club-fill.svg new file mode 100644 index 0000000..903bd83 --- /dev/null +++ b/public/Icons/suit-club-fill.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/suit-club.svg b/public/Icons/suit-club.svg new file mode 100644 index 0000000..4062a3e --- /dev/null +++ b/public/Icons/suit-club.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/suit-diamond-fill.svg b/public/Icons/suit-diamond-fill.svg new file mode 100644 index 0000000..af60084 --- /dev/null +++ b/public/Icons/suit-diamond-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/suit-diamond.svg b/public/Icons/suit-diamond.svg new file mode 100644 index 0000000..600889c --- /dev/null +++ b/public/Icons/suit-diamond.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/suit-heart-fill.svg b/public/Icons/suit-heart-fill.svg new file mode 100644 index 0000000..0ea499b --- /dev/null +++ b/public/Icons/suit-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/suit-heart.svg b/public/Icons/suit-heart.svg new file mode 100644 index 0000000..8892ea3 --- /dev/null +++ b/public/Icons/suit-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/suit-spade-fill.svg b/public/Icons/suit-spade-fill.svg new file mode 100644 index 0000000..9e41f11 --- /dev/null +++ b/public/Icons/suit-spade-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/suit-spade.svg b/public/Icons/suit-spade.svg new file mode 100644 index 0000000..222c489 --- /dev/null +++ b/public/Icons/suit-spade.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/sun.svg b/public/Icons/sun.svg new file mode 100644 index 0000000..846b86a --- /dev/null +++ b/public/Icons/sun.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/sunglasses.svg b/public/Icons/sunglasses.svg new file mode 100644 index 0000000..e7ea00a --- /dev/null +++ b/public/Icons/sunglasses.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/table.svg b/public/Icons/table.svg new file mode 100644 index 0000000..11be450 --- /dev/null +++ b/public/Icons/table.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/tablet-fill.svg b/public/Icons/tablet-fill.svg new file mode 100644 index 0000000..2c90fef --- /dev/null +++ b/public/Icons/tablet-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/tablet-landscape-fill.svg b/public/Icons/tablet-landscape-fill.svg new file mode 100644 index 0000000..8554c5f --- /dev/null +++ b/public/Icons/tablet-landscape-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/tablet-landscape.svg b/public/Icons/tablet-landscape.svg new file mode 100644 index 0000000..ff04926 --- /dev/null +++ b/public/Icons/tablet-landscape.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/tablet.svg b/public/Icons/tablet.svg new file mode 100644 index 0000000..e41eab9 --- /dev/null +++ b/public/Icons/tablet.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/tag-fill.svg b/public/Icons/tag-fill.svg new file mode 100644 index 0000000..e157395 --- /dev/null +++ b/public/Icons/tag-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/tag.svg b/public/Icons/tag.svg new file mode 100644 index 0000000..2fb5592 --- /dev/null +++ b/public/Icons/tag.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/tags-fill.svg b/public/Icons/tags-fill.svg new file mode 100644 index 0000000..f5895a7 --- /dev/null +++ b/public/Icons/tags-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/tags.svg b/public/Icons/tags.svg new file mode 100644 index 0000000..81a1993 --- /dev/null +++ b/public/Icons/tags.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/telephone-fill.svg b/public/Icons/telephone-fill.svg new file mode 100644 index 0000000..8b4144b --- /dev/null +++ b/public/Icons/telephone-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-forward-fill.svg b/public/Icons/telephone-forward-fill.svg new file mode 100644 index 0000000..daa5553 --- /dev/null +++ b/public/Icons/telephone-forward-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-forward.svg b/public/Icons/telephone-forward.svg new file mode 100644 index 0000000..ca417cc --- /dev/null +++ b/public/Icons/telephone-forward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-inbound-fill.svg b/public/Icons/telephone-inbound-fill.svg new file mode 100644 index 0000000..616e81d --- /dev/null +++ b/public/Icons/telephone-inbound-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-inbound.svg b/public/Icons/telephone-inbound.svg new file mode 100644 index 0000000..ecc0535 --- /dev/null +++ b/public/Icons/telephone-inbound.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-minus-fill.svg b/public/Icons/telephone-minus-fill.svg new file mode 100644 index 0000000..c61298d --- /dev/null +++ b/public/Icons/telephone-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-minus.svg b/public/Icons/telephone-minus.svg new file mode 100644 index 0000000..5dada79 --- /dev/null +++ b/public/Icons/telephone-minus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-outbound-fill.svg b/public/Icons/telephone-outbound-fill.svg new file mode 100644 index 0000000..a017f86 --- /dev/null +++ b/public/Icons/telephone-outbound-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-outbound.svg b/public/Icons/telephone-outbound.svg new file mode 100644 index 0000000..cb01269 --- /dev/null +++ b/public/Icons/telephone-outbound.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-plus-fill.svg b/public/Icons/telephone-plus-fill.svg new file mode 100644 index 0000000..bfb276b --- /dev/null +++ b/public/Icons/telephone-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-plus.svg b/public/Icons/telephone-plus.svg new file mode 100644 index 0000000..6b88f50 --- /dev/null +++ b/public/Icons/telephone-plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-x-fill.svg b/public/Icons/telephone-x-fill.svg new file mode 100644 index 0000000..de43e78 --- /dev/null +++ b/public/Icons/telephone-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone-x.svg b/public/Icons/telephone-x.svg new file mode 100644 index 0000000..66d3a78 --- /dev/null +++ b/public/Icons/telephone-x.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/telephone.svg b/public/Icons/telephone.svg new file mode 100644 index 0000000..93c6185 --- /dev/null +++ b/public/Icons/telephone.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/terminal-fill.svg b/public/Icons/terminal-fill.svg new file mode 100644 index 0000000..0bc5106 --- /dev/null +++ b/public/Icons/terminal-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/terminal.svg b/public/Icons/terminal.svg new file mode 100644 index 0000000..65db544 --- /dev/null +++ b/public/Icons/terminal.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/text-center.svg b/public/Icons/text-center.svg new file mode 100644 index 0000000..c9e53f3 --- /dev/null +++ b/public/Icons/text-center.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/text-indent-left.svg b/public/Icons/text-indent-left.svg new file mode 100644 index 0000000..974b60f --- /dev/null +++ b/public/Icons/text-indent-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/text-indent-right.svg b/public/Icons/text-indent-right.svg new file mode 100644 index 0000000..c9566cb --- /dev/null +++ b/public/Icons/text-indent-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/text-left.svg b/public/Icons/text-left.svg new file mode 100644 index 0000000..faae0f0 --- /dev/null +++ b/public/Icons/text-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/text-paragraph.svg b/public/Icons/text-paragraph.svg new file mode 100644 index 0000000..9ed808a --- /dev/null +++ b/public/Icons/text-paragraph.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/text-right.svg b/public/Icons/text-right.svg new file mode 100644 index 0000000..4c75129 --- /dev/null +++ b/public/Icons/text-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/textarea-resize.svg b/public/Icons/textarea-resize.svg new file mode 100644 index 0000000..a38fb15 --- /dev/null +++ b/public/Icons/textarea-resize.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/textarea-t.svg b/public/Icons/textarea-t.svg new file mode 100644 index 0000000..28dea3b --- /dev/null +++ b/public/Icons/textarea-t.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/textarea.svg b/public/Icons/textarea.svg new file mode 100644 index 0000000..ecad227 --- /dev/null +++ b/public/Icons/textarea.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/thermometer-half.svg b/public/Icons/thermometer-half.svg new file mode 100644 index 0000000..90ec025 --- /dev/null +++ b/public/Icons/thermometer-half.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/thermometer.svg b/public/Icons/thermometer.svg new file mode 100644 index 0000000..77d0b04 --- /dev/null +++ b/public/Icons/thermometer.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/three-dots-vertical.svg b/public/Icons/three-dots-vertical.svg new file mode 100644 index 0000000..129ea9b --- /dev/null +++ b/public/Icons/three-dots-vertical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/three-dots.svg b/public/Icons/three-dots.svg new file mode 100644 index 0000000..d875af2 --- /dev/null +++ b/public/Icons/three-dots.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/toggle-off.svg b/public/Icons/toggle-off.svg new file mode 100644 index 0000000..e7cea8f --- /dev/null +++ b/public/Icons/toggle-off.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/toggle-on.svg b/public/Icons/toggle-on.svg new file mode 100644 index 0000000..d7ef306 --- /dev/null +++ b/public/Icons/toggle-on.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/toggle2-off.svg b/public/Icons/toggle2-off.svg new file mode 100644 index 0000000..80aa424 --- /dev/null +++ b/public/Icons/toggle2-off.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/toggle2-on.svg b/public/Icons/toggle2-on.svg new file mode 100644 index 0000000..d58f26d --- /dev/null +++ b/public/Icons/toggle2-on.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/toggles.svg b/public/Icons/toggles.svg new file mode 100644 index 0000000..86a0471 --- /dev/null +++ b/public/Icons/toggles.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/toggles2.svg b/public/Icons/toggles2.svg new file mode 100644 index 0000000..db1b897 --- /dev/null +++ b/public/Icons/toggles2.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/tools-server.svg b/public/Icons/tools-server.svg new file mode 100644 index 0000000..15f968d --- /dev/null +++ b/public/Icons/tools-server.svg @@ -0,0 +1,790 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +image/svg+xmlOpenclipartTools Server2013-02-14T03:47:47A server offering tools. https://openclipart.org/detail/175114/tools-server-by-tomz-175114TomZservertools diff --git a/public/Icons/tools.svg b/public/Icons/tools.svg new file mode 100644 index 0000000..6ba879e --- /dev/null +++ b/public/Icons/tools.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/trash-fill.svg b/public/Icons/trash-fill.svg new file mode 100644 index 0000000..b9b42b9 --- /dev/null +++ b/public/Icons/trash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/trash.svg b/public/Icons/trash.svg new file mode 100644 index 0000000..c7aaf63 --- /dev/null +++ b/public/Icons/trash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/trash2-fill.svg b/public/Icons/trash2-fill.svg new file mode 100644 index 0000000..92cd706 --- /dev/null +++ b/public/Icons/trash2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/trash2.svg b/public/Icons/trash2.svg new file mode 100644 index 0000000..c674cdf --- /dev/null +++ b/public/Icons/trash2.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/tree-fill.svg b/public/Icons/tree-fill.svg new file mode 100644 index 0000000..be70b4f --- /dev/null +++ b/public/Icons/tree-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/tree.svg b/public/Icons/tree.svg new file mode 100644 index 0000000..f2ec78b --- /dev/null +++ b/public/Icons/tree.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/triangle-fill.svg b/public/Icons/triangle-fill.svg new file mode 100644 index 0000000..03a2d5d --- /dev/null +++ b/public/Icons/triangle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/triangle-half.svg b/public/Icons/triangle-half.svg new file mode 100644 index 0000000..bd195f9 --- /dev/null +++ b/public/Icons/triangle-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/triangle.svg b/public/Icons/triangle.svg new file mode 100644 index 0000000..e8ee5a1 --- /dev/null +++ b/public/Icons/triangle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/trophy-fill.svg b/public/Icons/trophy-fill.svg new file mode 100644 index 0000000..91e8f2b --- /dev/null +++ b/public/Icons/trophy-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/trophy.svg b/public/Icons/trophy.svg new file mode 100644 index 0000000..8d793ee --- /dev/null +++ b/public/Icons/trophy.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/truck-flatbed.svg b/public/Icons/truck-flatbed.svg new file mode 100644 index 0000000..422e88e --- /dev/null +++ b/public/Icons/truck-flatbed.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/truck.svg b/public/Icons/truck.svg new file mode 100644 index 0000000..b5a347e --- /dev/null +++ b/public/Icons/truck.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/tv-fill.svg b/public/Icons/tv-fill.svg new file mode 100644 index 0000000..2626ade --- /dev/null +++ b/public/Icons/tv-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/tv.svg b/public/Icons/tv.svg new file mode 100644 index 0000000..f695a38 --- /dev/null +++ b/public/Icons/tv.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/type-bold.svg b/public/Icons/type-bold.svg new file mode 100644 index 0000000..51ae788 --- /dev/null +++ b/public/Icons/type-bold.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/type-h1.svg b/public/Icons/type-h1.svg new file mode 100644 index 0000000..2e7fb7f --- /dev/null +++ b/public/Icons/type-h1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/type-h2.svg b/public/Icons/type-h2.svg new file mode 100644 index 0000000..1dce161 --- /dev/null +++ b/public/Icons/type-h2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/type-h3.svg b/public/Icons/type-h3.svg new file mode 100644 index 0000000..de5d314 --- /dev/null +++ b/public/Icons/type-h3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/type-italic.svg b/public/Icons/type-italic.svg new file mode 100644 index 0000000..599c628 --- /dev/null +++ b/public/Icons/type-italic.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/type-strikethrough.svg b/public/Icons/type-strikethrough.svg new file mode 100644 index 0000000..b785e0c --- /dev/null +++ b/public/Icons/type-strikethrough.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/type-underline.svg b/public/Icons/type-underline.svg new file mode 100644 index 0000000..ea6e596 --- /dev/null +++ b/public/Icons/type-underline.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/type.svg b/public/Icons/type.svg new file mode 100644 index 0000000..eeebe50 --- /dev/null +++ b/public/Icons/type.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/ui-checks-grid.svg b/public/Icons/ui-checks-grid.svg new file mode 100644 index 0000000..58ac7c3 --- /dev/null +++ b/public/Icons/ui-checks-grid.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/ui-checks.svg b/public/Icons/ui-checks.svg new file mode 100644 index 0000000..5b92c5b --- /dev/null +++ b/public/Icons/ui-checks.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/ui-radios-grid.svg b/public/Icons/ui-radios-grid.svg new file mode 100644 index 0000000..34138eb --- /dev/null +++ b/public/Icons/ui-radios-grid.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/ui-radios.svg b/public/Icons/ui-radios.svg new file mode 100644 index 0000000..5517e72 --- /dev/null +++ b/public/Icons/ui-radios.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/union.svg b/public/Icons/union.svg new file mode 100644 index 0000000..b2dab3b --- /dev/null +++ b/public/Icons/union.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/unlock-fill.svg b/public/Icons/unlock-fill.svg new file mode 100644 index 0000000..a885fe5 --- /dev/null +++ b/public/Icons/unlock-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/unlock.svg b/public/Icons/unlock.svg new file mode 100644 index 0000000..7b2e8b9 --- /dev/null +++ b/public/Icons/unlock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/upc-scan.svg b/public/Icons/upc-scan.svg new file mode 100644 index 0000000..36645bb --- /dev/null +++ b/public/Icons/upc-scan.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/upc.svg b/public/Icons/upc.svg new file mode 100644 index 0000000..0949585 --- /dev/null +++ b/public/Icons/upc.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/upload.svg b/public/Icons/upload.svg new file mode 100644 index 0000000..b3ea20b --- /dev/null +++ b/public/Icons/upload.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/vector-pen.svg b/public/Icons/vector-pen.svg new file mode 100644 index 0000000..73e2428 --- /dev/null +++ b/public/Icons/vector-pen.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/view-list.svg b/public/Icons/view-list.svg new file mode 100644 index 0000000..3f43f71 --- /dev/null +++ b/public/Icons/view-list.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/view-stacked.svg b/public/Icons/view-stacked.svg new file mode 100644 index 0000000..8688e4a --- /dev/null +++ b/public/Icons/view-stacked.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/voicemail.svg b/public/Icons/voicemail.svg new file mode 100644 index 0000000..df14e8d --- /dev/null +++ b/public/Icons/voicemail.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/volume-down-fill.svg b/public/Icons/volume-down-fill.svg new file mode 100644 index 0000000..50b8415 --- /dev/null +++ b/public/Icons/volume-down-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/volume-down.svg b/public/Icons/volume-down.svg new file mode 100644 index 0000000..0fd3618 --- /dev/null +++ b/public/Icons/volume-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/volume-mute-fill.svg b/public/Icons/volume-mute-fill.svg new file mode 100644 index 0000000..3a4be08 --- /dev/null +++ b/public/Icons/volume-mute-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/volume-mute.svg b/public/Icons/volume-mute.svg new file mode 100644 index 0000000..00393ec --- /dev/null +++ b/public/Icons/volume-mute.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/volume-off-fill.svg b/public/Icons/volume-off-fill.svg new file mode 100644 index 0000000..f24ed1f --- /dev/null +++ b/public/Icons/volume-off-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/volume-off.svg b/public/Icons/volume-off.svg new file mode 100644 index 0000000..dbead44 --- /dev/null +++ b/public/Icons/volume-off.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/volume-up-fill.svg b/public/Icons/volume-up-fill.svg new file mode 100644 index 0000000..ecbe120 --- /dev/null +++ b/public/Icons/volume-up-fill.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/volume-up.svg b/public/Icons/volume-up.svg new file mode 100644 index 0000000..7049e23 --- /dev/null +++ b/public/Icons/volume-up.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/Icons/vr.svg b/public/Icons/vr.svg new file mode 100644 index 0000000..864e0f7 --- /dev/null +++ b/public/Icons/vr.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/wallet-fill.svg b/public/Icons/wallet-fill.svg new file mode 100644 index 0000000..8b363a6 --- /dev/null +++ b/public/Icons/wallet-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/wallet.svg b/public/Icons/wallet.svg new file mode 100644 index 0000000..97c428f --- /dev/null +++ b/public/Icons/wallet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/wallet2.svg b/public/Icons/wallet2.svg new file mode 100644 index 0000000..6c03775 --- /dev/null +++ b/public/Icons/wallet2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/watch.svg b/public/Icons/watch.svg new file mode 100644 index 0000000..01c9638 --- /dev/null +++ b/public/Icons/watch.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/wifi-1.svg b/public/Icons/wifi-1.svg new file mode 100644 index 0000000..d27e2ab --- /dev/null +++ b/public/Icons/wifi-1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/wifi-2.svg b/public/Icons/wifi-2.svg new file mode 100644 index 0000000..0082d58 --- /dev/null +++ b/public/Icons/wifi-2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/wifi-off.svg b/public/Icons/wifi-off.svg new file mode 100644 index 0000000..0a41217 --- /dev/null +++ b/public/Icons/wifi-off.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/wifi.svg b/public/Icons/wifi.svg new file mode 100644 index 0000000..0c8157f --- /dev/null +++ b/public/Icons/wifi.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/window.svg b/public/Icons/window.svg new file mode 100644 index 0000000..230d0f4 --- /dev/null +++ b/public/Icons/window.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/world.svg b/public/Icons/world.svg new file mode 100644 index 0000000..558f3d1 --- /dev/null +++ b/public/Icons/world.svg @@ -0,0 +1,58 @@ + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/public/Icons/wrench.svg b/public/Icons/wrench.svg new file mode 100644 index 0000000..2d78d6e --- /dev/null +++ b/public/Icons/wrench.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/x-circle-fill.svg b/public/Icons/x-circle-fill.svg new file mode 100644 index 0000000..be5d1e7 --- /dev/null +++ b/public/Icons/x-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/x-circle.svg b/public/Icons/x-circle.svg new file mode 100644 index 0000000..740a658 --- /dev/null +++ b/public/Icons/x-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/x-diamond-fill.svg b/public/Icons/x-diamond-fill.svg new file mode 100644 index 0000000..67259f7 --- /dev/null +++ b/public/Icons/x-diamond-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/x-diamond.svg b/public/Icons/x-diamond.svg new file mode 100644 index 0000000..b670fd1 --- /dev/null +++ b/public/Icons/x-diamond.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/x-octagon-fill.svg b/public/Icons/x-octagon-fill.svg new file mode 100644 index 0000000..1fcb8fc --- /dev/null +++ b/public/Icons/x-octagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/x-octagon.svg b/public/Icons/x-octagon.svg new file mode 100644 index 0000000..e89a222 --- /dev/null +++ b/public/Icons/x-octagon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/x-square-fill.svg b/public/Icons/x-square-fill.svg new file mode 100644 index 0000000..d03e7b7 --- /dev/null +++ b/public/Icons/x-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/x-square.svg b/public/Icons/x-square.svg new file mode 100644 index 0000000..ec0865d --- /dev/null +++ b/public/Icons/x-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/Icons/x.svg b/public/Icons/x.svg new file mode 100644 index 0000000..6e07777 --- /dev/null +++ b/public/Icons/x.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/Icons/zoom-in.svg b/public/Icons/zoom-in.svg new file mode 100644 index 0000000..11de509 --- /dev/null +++ b/public/Icons/zoom-in.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Icons/zoom-out.svg b/public/Icons/zoom-out.svg new file mode 100644 index 0000000..1c38814 --- /dev/null +++ b/public/Icons/zoom-out.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/Img/1x1.png b/public/Img/1x1.png new file mode 100644 index 0000000..1914264 Binary files /dev/null and b/public/Img/1x1.png differ diff --git a/public/Img/3d-gif-transparent-20.png b/public/Img/3d-gif-transparent-20.png new file mode 100644 index 0000000..c36267c Binary files /dev/null and b/public/Img/3d-gif-transparent-20.png differ diff --git a/public/Img/Arthur-Dent-icon.png b/public/Img/Arthur-Dent-icon.png new file mode 100644 index 0000000..8bbf60d Binary files /dev/null and b/public/Img/Arthur-Dent-icon.png differ diff --git a/public/Img/Robot-PNG-HD.png b/public/Img/Robot-PNG-HD.png new file mode 100644 index 0000000..2c6c5fb Binary files /dev/null and b/public/Img/Robot-PNG-HD.png differ diff --git a/public/Img/avatar.png b/public/Img/avatar.png new file mode 100644 index 0000000..743b99b Binary files /dev/null and b/public/Img/avatar.png differ diff --git a/public/Img/bmw-mini_logo.png b/public/Img/bmw-mini_logo.png new file mode 100644 index 0000000..5bd5b22 Binary files /dev/null and b/public/Img/bmw-mini_logo.png differ diff --git a/public/Img/bmw.png b/public/Img/bmw.png new file mode 100644 index 0000000..24ea9b7 Binary files /dev/null and b/public/Img/bmw.png differ diff --git a/public/Img/electronics-robots.png b/public/Img/electronics-robots.png new file mode 100644 index 0000000..56730ed Binary files /dev/null and b/public/Img/electronics-robots.png differ diff --git a/public/Img/externe-links-kennzeichnen.png b/public/Img/externe-links-kennzeichnen.png new file mode 100644 index 0000000..e7993e1 Binary files /dev/null and b/public/Img/externe-links-kennzeichnen.png differ diff --git a/public/Img/it-rooms_dc_2.png b/public/Img/it-rooms_dc_2.png new file mode 100644 index 0000000..a64c737 Binary files /dev/null and b/public/Img/it-rooms_dc_2.png differ diff --git a/public/Img/it-rooms_dc__big_v0.2.1.png b/public/Img/it-rooms_dc__big_v0.2.1.png new file mode 100644 index 0000000..0f10e90 Binary files /dev/null and b/public/Img/it-rooms_dc__big_v0.2.1.png differ diff --git a/public/Img/it-rooms_dc__big_v0.2.2-1000.jpeg b/public/Img/it-rooms_dc__big_v0.2.2-1000.jpeg new file mode 100644 index 0000000..3b4e1ca Binary files /dev/null and b/public/Img/it-rooms_dc__big_v0.2.2-1000.jpeg differ diff --git a/public/Img/it-rooms_dc__big_v0.2.2-1000.webp b/public/Img/it-rooms_dc__big_v0.2.2-1000.webp new file mode 100644 index 0000000..d54b100 Binary files /dev/null and b/public/Img/it-rooms_dc__big_v0.2.2-1000.webp differ diff --git a/public/Img/it-rooms_dc__big_v0.2.2-1400.jpeg b/public/Img/it-rooms_dc__big_v0.2.2-1400.jpeg new file mode 100644 index 0000000..700edf4 Binary files /dev/null and b/public/Img/it-rooms_dc__big_v0.2.2-1400.jpeg differ diff --git a/public/Img/it-rooms_dc__big_v0.2.2-1400.webp b/public/Img/it-rooms_dc__big_v0.2.2-1400.webp new file mode 100644 index 0000000..2c7c856 Binary files /dev/null and b/public/Img/it-rooms_dc__big_v0.2.2-1400.webp differ diff --git a/public/Img/it-rooms_dc__big_v0.2.2-600.jpeg b/public/Img/it-rooms_dc__big_v0.2.2-600.jpeg new file mode 100644 index 0000000..050bf40 Binary files /dev/null and b/public/Img/it-rooms_dc__big_v0.2.2-600.jpeg differ diff --git a/public/Img/it-rooms_dc__big_v0.2.2-600.webp b/public/Img/it-rooms_dc__big_v0.2.2-600.webp new file mode 100644 index 0000000..dac3cbd Binary files /dev/null and b/public/Img/it-rooms_dc__big_v0.2.2-600.webp differ diff --git a/public/Img/it-rooms_dc__big_v0.2.2.png b/public/Img/it-rooms_dc__big_v0.2.2.png new file mode 100644 index 0000000..25e503b Binary files /dev/null and b/public/Img/it-rooms_dc__big_v0.2.2.png differ diff --git a/public/Img/it-rooms_dc__medium_v0.2.1.png b/public/Img/it-rooms_dc__medium_v0.2.1.png new file mode 100644 index 0000000..6343fb6 Binary files /dev/null and b/public/Img/it-rooms_dc__medium_v0.2.1.png differ diff --git a/public/Img/it-rooms_dc__small_v0.2.1.png b/public/Img/it-rooms_dc__small_v0.2.1.png new file mode 100644 index 0000000..1288d33 Binary files /dev/null and b/public/Img/it-rooms_dc__small_v0.2.1.png differ diff --git a/public/Img/robot-head.svg b/public/Img/robot-head.svg new file mode 100644 index 0000000..366cff4 --- /dev/null +++ b/public/Img/robot-head.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/bmw-mini_logo.png b/public/bmw-mini_logo.png new file mode 100644 index 0000000..5bd5b22 Binary files /dev/null and b/public/bmw-mini_logo.png differ diff --git a/public/css/annexRel.css b/public/css/annexRel.css new file mode 100644 index 0000000..02bb544 --- /dev/null +++ b/public/css/annexRel.css @@ -0,0 +1,129 @@ +BODY { + counter-reset: h7; + font-family: Arial, serif; color: #333333; + font-size: 12pt; + background-color: white; +} +@page { margin: 1cm;} + +data-pcount h7 {font-size: 9px;} +data-pcount h7:before +{ + font-size: 9px; + content: "Seite " counter(h7) "/"; + counter-increment: h7; +} + +data-pbreak h6 {page-break-after: always;} + +/* H1 {page-break-before: always;} */ + +span[data-title] { + font-size: 2.5rem; +} +/* +.printarea:before { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2rem; +text-align: center; +margin: auto; +padding-top: 30px; +} +.printarea:after { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2em; +text-align: center; +padding-top: 30px; +} +*/ +.noprint { display: none; } + +#btnprint, #btnsubmit, #btnimg, #menue, #submenue, #searchform { display: none; } +header, nav, aside, footer { display: none; } +#footer { display: none; } + +img { width: 100%; max-width: 100%; height: auto;} + +article,section {border-radius: none;border: none; padding: none;margin: none; background: #fff; border-color: #fff;} + +data-rnav {float: right;font-size: 12px; max-width: 12cm;} + +a:link,a:active, a:visited {color: black; text-decoration: none;} + +table {max-width:100%;} +table, th, td { + border-collapse: collapse; + border: 1px solid black; + padding: 2px; +} +thead { + background-color:#D0CECE; + border:1.0pt solid windowtext; + text-align: center; + font-weight: bold; +} +caption {font-size: small;} +figcaption {font-size: 0.8em;} + +.htoc1 { +} +.htoc2 { + padding-left: 25px; +} +.htoc3 { + padding-left: 45px; +} +.htoc4 { + padding-left: 65px; +} + +/* FUNKTIONIERT +BODY { + counter-reset: H1; Create a chapter counter scope +} +H1:before { + content: "Chapter " counter(H1) ". "; + counter-increment: H1; +} +H1 { + counter-reset: H2; +} +H2:before { + content: counter(H1) "." counter(H2) " "; + counter-increment: H2; +} +*/ + +H10.divFooter { + width: 100%; + max-width: 100%; + border-top-style: solid; + border-width: thin; + font-size: 9px; + text-align: left; + position: fixed; + bottom: 0; + } + +/* so lala +div.divHeader { + width: 100%; + max-width: 100%; + + font-size: 9px; + text-align: right; + position: fixed; + top: 0; + margin-bottom: 25px; + } + +div.divHeader img{ + width: 100px; + height: 35px; +} +*/ + + + diff --git a/public/css/cd_print.css b/public/css/cd_print.css new file mode 100644 index 0000000..ead84b8 --- /dev/null +++ b/public/css/cd_print.css @@ -0,0 +1,132 @@ +BODY { + counter-reset: h7; + font-family: Arial, serif; color: #333333; + font-size: 12pt; + background-color: white; +} +@page { margin: 1cm;} + +data-pcount h7 {font-size: 9px;} +data-pcount h7:before +{ + font-size: 9px; + content: "Seite " counter(h7) "/"; + counter-increment: h7; +} + +data-pbreak h6 {page-break-after: always;} + +/* H1 {page-break-before: always;} */ + +span[data-title] { + /*color:red; */ + font-size: 2.5rem; +} + +[data-aktiv*="yepp"] {border: 2px solid; border-color: lightblue;} + +.printarea:before { +content: "\ --- pre-release: review - not for production ---"; +color: #ff0000 !important; +font-size: 1rem; +text-align: center; +margin: auto; +padding-top: 30px; +} +.printarea:after { +content: "\ --- pre-release: review - not for production ---"; +color: #ff0000 !important; +font-size: 1em; +text-align: center; +padding-top: 30px; +} + +.noprint { display: none; } + +#btnprint, #btnsubmit, #btnimg, #menue, #submenue, #searchform { display: none; } +header, nav, aside, footer { display: none; } +#footer { display: none; } + +img { width: 100%; max-width: 100%; height: auto;} + +article,section {border-radius: none;border: none; padding: none;margin: none; background: #fff; border-color: #fff;} + +data-rnav {float: right;font-size: 12px; max-width: 12cm;} + +a:link,a:active, a:visited {color: black; text-decoration: none;} + +table {max-width:100%;} +table, th, td { + border-collapse: collapse; + border: 1px solid black; + padding: 2px; +} +thead { + background-color:#D0CECE; + border:1.0pt solid windowtext; + text-align: center; + font-weight: bold; +} +caption {font-size: small;} + +.htoc1 { +} +.htoc2 { + padding-left: 25px; +} +.htoc3 { + padding-left: 45px; +} +.htoc4 { + padding-left: 65px; +} + +/* FUNKTIONIERT +BODY { + counter-reset: H1; Create a chapter counter scope +} +H1:before { + content: "Chapter " counter(H1) ". "; + counter-increment: H1; +} +H1 { + counter-reset: H2; +} +H2:before { + content: counter(H1) "." counter(H2) " "; + counter-increment: H2; +} +*/ + +H10.divFooter { + width: 100%; + max-width: 100%; + border-top-style: solid; + border-width: thin; + font-size: 9px; + text-align: left; + position: fixed; + bottom: 0; + color: red; + } + +/* so lala +div.divHeader { + width: 100%; + max-width: 100%; + + font-size: 9px; + text-align: right; + position: fixed; + top: 0; + margin-bottom: 25px; + } + +div.divHeader img{ + width: 100px; + height: 35px; +} +*/ + + + diff --git a/public/css/ci_print.css b/public/css/ci_print.css new file mode 100644 index 0000000..f5fd333 --- /dev/null +++ b/public/css/ci_print.css @@ -0,0 +1,135 @@ +BODY { + counter-reset: h7; + font-family: Arial, serif; color: #333333; + font-size: 12pt; + background-color: white; +} +@page { margin: 1cm;} + +data-pcount h7 {font-size: 9px;} +data-pcount h7:before +{ + font-size: 9px; + content: "Seite " counter(h7) "/"; + counter-increment: h7; +} + +data-pbreak h6 {page-break-after: always;} + +/* H1 {page-break-before: always;} */ + +span[data-title] { + /*color:red; */ + font-size: 2.5rem; +} + +[data-aktiv*="yepp"] {border: 2px solid; border-color: lightblue;} + +/* +.printarea:before { +content: "\ --- pre-release: review - not for production ---"; +color: #ff0000 !important; +font-size: 1rem; +text-align: center; +margin: auto; +padding-top: 30px; +} +.printarea:after { +content: "\ --- pre-release: review - not for production ---"; +color: #ff0000 !important; +font-size: 1em; +text-align: center; +padding-top: 30px; +} +*/ +.noprint { display: none; } + +#btnprint, #btnsubmit, #btnimg, #menue, #submenue, #searchform { display: none; } +header, nav, aside, footer { display: none; } +#footer { display: none; } + +img { max-width: 100%; height: auto;} + +article,section {border-radius: none;border: none; padding: none;margin: none; background: #fff; border-color: #fff;} + +data-rnav {float: right;font-size: 12px; max-width: 12cm;} + +a:link,a:active, a:visited {color: black; text-decoration: none;} + +table {max-width:100%;} +table, th, td { + border-collapse: collapse; + border: 1px solid black; + padding: 2px; +} +thead { + background-color:#D0CECE; + border:1.0pt solid windowtext; + text-align: center; + font-weight: bold; +} +caption {font-size: small;} + +.htoc1 { +} +.htoc2 { + padding-left: 25px; +} +.htoc3 { + padding-left: 45px; +} +.htoc4 { + padding-left: 65px; +} + +figcaption {font-size: 0.8em;} + +/* FUNKTIONIERT +BODY { + counter-reset: H1; Create a chapter counter scope +} +H1:before { + content: "Chapter " counter(H1) ". "; + counter-increment: H1; +} +H1 { + counter-reset: H2; +} +H2:before { + content: counter(H1) "." counter(H2) " "; + counter-increment: H2; +} +*/ + +H10.divFooter { + width: 100%; + max-width: 100%; + border-top-style: solid; + border-width: thin; + font-size: 9px; + text-align: left; + position: fixed; + bottom: 0; + color: red; + } + +/* so lala +div.divHeader { + width: 100%; + max-width: 100%; + + font-size: 9px; + text-align: right; + position: fixed; + top: 0; + margin-bottom: 25px; + } + +div.divHeader img{ + width: 100px; + height: 35px; +} +*/ + + + diff --git a/public/css/custom.css b/public/css/custom.css new file mode 100644 index 0000000..e248d90 --- /dev/null +++ b/public/css/custom.css @@ -0,0 +1,153 @@ + +/* body {font-family: Verdana, Arial, Helvetica, sans-serif;color: #333333;} */ + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../fonts/Inter-Regular.woff2?v=3.15") format("woff2"), + url("../fonts/Inter-Regular.woff?v=3.15") format("woff"); +} + +/* #000000 schwarz #333333; grau*/ +body {font-family: 'Inter', -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, 'Segeo UI', 'Helvetica Neue', Arial, sans-serif; color: #000000;} + +BODY { + counter-reset: h7; +} +@page { margin: 1cm;} + +data-pbreak h6 {font-size: 9px;} +data-pcount h7 {font-size: 9px;} +data-pcount h7:before +{ + font-size: 9px; + content: "Seite " counter(h7) "/"; + counter-increment: h7; +} + +article,section {border-radius: 0.5em 0.5em 0.5em 0.5em;border: 1px solid;padding: 10px;margin: 10px;} +section {background: #F1F3F4;border-color: #d5d5d5;} +main {display: block;/* für IE */ background: #c4ced3;border-color: #8a9da8; border-radius: 0.5em 0.5em 0.5em 0.5em; padding: 10px; margin: 0px 0px 10px;} + +article {background: #F1F1F1;border-color: #d5d5d5;} +data-rnav {float: right;font-size: 12px;background-color: lightblue;} + +a:link,a:active, a:visited { + color: #000000; + text-decoration: none; +} +a:hover {color: #6495ED; text-decoration: underline;} + +a:not(.w3-button):not(.w3-btn):not([href^="https"]:not([href^="mailto"])) { + padding-right: 1em; + background: url("data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2012%2012%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpolygon%20fill%3D%22blue%22%20points%3D%222%2C5%203%2C5%203%2C3%209%2C3%209%2C9%207%2C9%207%2C10%2010%2C10%2010%2C2%202%2C2%22/%3E%3Cpolygon%20points%3D%220.5%2C10.5%203.5%2C7.5%202%2C6%205.5%2C6%205.5%2C10%204.5%2C8.5%201.5%2C11.5%22/%3E%3C/svg%3E") no-repeat right; + background-size: 10px auto; +} + +[data-aktiv*="yepp"] {border: 2px solid; border-color: lightblue;} + +a[href^="https"] { + padding-right: 1em; + background: url("data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2012%2012%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpolygon%20fill%3D%22blue%22%20points%3D%222%2C2%205%2C2%205%2C3%203%2C3%203%2C9%209%2C9%209%2C7%2010%2C7%2010%2C10%202%2C10%22/%3E%3Cpolygon%20points%3D%226.2%2C2%2010%2C2%2010%2C5.8%208.6%2C4.4%206.5%2C6.5%205.5%2C5.5%207.6%2C3.4%22/%3E%3C/svg%3E") no-repeat right; + background-size: 11px auto; +} + +a[href^="mailto"] { + padding-right: 1em; + background: url("data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2012%2012%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22blue%22%20d%3D%22M1%2C4%20h10%20v6%20h-10z%20l10%2C6m0%2C-6%20l-10%2C6%22/%3E%3C/svg%3E") no-repeat right; + background-size: 10px auto; +} + +span[data-title] { +/*color:red; */ + font-size: 2.5rem; +} + +.htoc1 { +} +.htoc2 { + padding-left: 25px; +} +.htoc3 { + padding-left: 45px; +} +.htoc4 { + padding-left: 65px; +} + + + +figcaption {font-size: 0.8em;} + +dialog:not([open]) { display: none; } +dialog {background-color: lightblue; border-color: red; min-height: 200px; min-width: 500px;} + +table {max-width:100%;} +table, th, td { + border-collapse: collapse; + border: 1px solid black; + padding: 2px; +} +thead { + background-color:#D0CECE; + border:1.0pt solid windowtext; + text-align: center; + font-weight: bold; +} +caption {font-size: small;} + +img { + max-width: 100%; + height: auto; +} + +@media only screen and (min-width: 64em) +{ + .printarea section + { + /* background-color: yellow; */ + margin-left: 10%; + margin-right: 10%; + } +} +@media only screen and (min-width: 100em) +{ + .printarea section + { + /* background-color: yellow; */ + margin-left: 20%; + margin-right: 20%; + } + +} + +@media screen { + div.divFooter { + display: none; + } +} + +.loader { + border: 16px solid #f3f3f3; + border-radius: 50%; + border-top: 16px solid lightblue; + width: 120px; + height: 120px; + -webkit-animation: spin 2s linear infinite; /* Safari */ + animation: spin 2s linear infinite; +} + +/* Safari */ +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + + diff --git a/public/css/custom.css_2021-03-06_1103 b/public/css/custom.css_2021-03-06_1103 new file mode 100644 index 0000000..fae2c23 --- /dev/null +++ b/public/css/custom.css_2021-03-06_1103 @@ -0,0 +1,15 @@ + +body {font-family: Verdana, Arial, Helvetica, sans-serif;color: #333333;} + +article,section {border-radius: 0.5em 0.5em 0.5em 0.5em;border: 1px solid;padding: 10px;margin: 10px;} +section {background: #F1F3F4;border-color: #d5d5d5;} +main {display: block;/* für IE */ background: #c4ced3;border-color: #8a9da8; border-radius: 0.5em 0.5em 0.5em 0.5em; padding: 10px; margin: 0px 0px 10px;} + +article {background: #F1F1F1;border-color: #d5d5d5;} +data-rnav {float: right;font-size: 12px;background-color: lightblue;} + +a:link,a:active, a:visited {color: black; text-decoration: none;} +a:hover {color: #6495ED; text-decoration: underline;} + +dialog:not([open]) { display: none; } +dialog {background-color: lightblue; border-color: red; min-height: 200px; min-width: 500px;} diff --git a/public/css/custom.css_2021-03-25_2148 b/public/css/custom.css_2021-03-25_2148 new file mode 100644 index 0000000..037206b --- /dev/null +++ b/public/css/custom.css_2021-03-25_2148 @@ -0,0 +1,77 @@ + +/* body {font-family: Verdana, Arial, Helvetica, sans-serif;color: #333333;} */ + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../fonts/Inter-Regular.woff2?v=3.15") format("woff2"), + url("../fonts/Inter-Regular.woff?v=3.15") format("woff"); +} + +/* #000000 schwarz #333333; grau*/ +body {font-family: 'Inter', -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, 'Segeo UI', 'Helvetica Neue', Arial, sans-serif; color: #000000;} + +BODY { + counter-reset: h6; +} +@page { margin: 1cm;} + +data-pbreak h6 {font-size: 9px;} +data-pbreak h6:before +{ + font-size: 9px; + content: "Seite " counter(h6) "/"; + counter-increment: h6; +} + +article,section {border-radius: 0.5em 0.5em 0.5em 0.5em;border: 1px solid;padding: 10px;margin: 10px;} +section {background: #F1F3F4;border-color: #d5d5d5;} +main {display: block;/* für IE */ background: #c4ced3;border-color: #8a9da8; border-radius: 0.5em 0.5em 0.5em 0.5em; padding: 10px; margin: 0px 0px 10px;} + +article {background: #F1F1F1;border-color: #d5d5d5;} +data-rnav {float: right;font-size: 12px;background-color: lightblue;} + +a:link,a:active, a:visited {color: #000000; text-decoration: none;} +a:hover {color: #6495ED; text-decoration: underline;} + +figcaption {font-size: 0.8em;} + +dialog:not([open]) { display: none; } +dialog {background-color: lightblue; border-color: red; min-height: 200px; min-width: 500px;} + +table {max-width:100%;} +table, th, td { + border-collapse: collapse; + border: 1px solid black; + padding: 2px; +} +thead {background-color:#D0CECE;border:1.0pt solid windowtext;} +caption {font-size: small;} + +img { + max-width: 100%; + height: auto; +} + +@media only screen and (min-width: 64em) +{ + .printarea section + { + /* background-color: yellow; */ + margin-left: 10%; + margin-right: 10%; + } +} +@media only screen and (min-width: 100em) +{ + .printarea section + { + /* background-color: yellow; */ + margin-left: 20%; + margin-right: 20%; + } +} + + diff --git a/public/css/custom.css_2021-04-01_1716 b/public/css/custom.css_2021-04-01_1716 new file mode 100644 index 0000000..5734008 --- /dev/null +++ b/public/css/custom.css_2021-04-01_1716 @@ -0,0 +1,89 @@ + +/* body {font-family: Verdana, Arial, Helvetica, sans-serif;color: #333333;} */ + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../fonts/Inter-Regular.woff2?v=3.15") format("woff2"), + url("../fonts/Inter-Regular.woff?v=3.15") format("woff"); +} + +/* #000000 schwarz #333333; grau*/ +body {font-family: 'Inter', -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, 'Segeo UI', 'Helvetica Neue', Arial, sans-serif; color: #000000;} + +BODY { + counter-reset: h7; +} +@page { margin: 1cm;} + +data-pbreak h6 {font-size: 9px;} +data-pcount h7 {font-size: 9px;} +data-pcount h7:before +{ + font-size: 9px; + content: "Seite " counter(h7) "/"; + counter-increment: h7; +} + +article,section {border-radius: 0.5em 0.5em 0.5em 0.5em;border: 1px solid;padding: 10px;margin: 10px;} +section {background: #F1F3F4;border-color: #d5d5d5;} +main {display: block;/* für IE */ background: #c4ced3;border-color: #8a9da8; border-radius: 0.5em 0.5em 0.5em 0.5em; padding: 10px; margin: 0px 0px 10px;} + +article {background: #F1F1F1;border-color: #d5d5d5;} +data-rnav {float: right;font-size: 12px;background-color: lightblue;} + +a:link,a:active, a:visited { +color: #000000; + text-decoration-line: underline; + text-decoration-style: dotted; + text-decoration-color: #6495ED; +} +a:hover {color: #6495ED; text-decoration: underline;} + +figcaption {font-size: 0.8em;} + +dialog:not([open]) { display: none; } +dialog {background-color: lightblue; border-color: red; min-height: 200px; min-width: 500px;} + +table {max-width:100%;} +table, th, td { + border-collapse: collapse; + border: 1px solid black; + padding: 2px; +} +thead {background-color:#D0CECE;border:1.0pt solid windowtext;} +caption {font-size: small;} + +img { + max-width: 100%; + height: auto; +} + +@media only screen and (min-width: 64em) +{ + .printarea section + { + /* background-color: yellow; */ + margin-left: 10%; + margin-right: 10%; + } +} +@media only screen and (min-width: 100em) +{ + .printarea section + { + /* background-color: yellow; */ + margin-left: 20%; + margin-right: 20%; + } +} + +@media screen { + div.divFooter { + display: none; + } +} + + diff --git a/public/css/custom.css_2021-04-11_1012 b/public/css/custom.css_2021-04-11_1012 new file mode 100644 index 0000000..8f928d6 --- /dev/null +++ b/public/css/custom.css_2021-04-11_1012 @@ -0,0 +1,118 @@ + +/* body {font-family: Verdana, Arial, Helvetica, sans-serif;color: #333333;} */ + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../fonts/Inter-Regular.woff2?v=3.15") format("woff2"), + url("../fonts/Inter-Regular.woff?v=3.15") format("woff"); +} + +/* #000000 schwarz #333333; grau*/ +body {font-family: 'Inter', -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, 'Segeo UI', 'Helvetica Neue', Arial, sans-serif; color: #000000;} + +BODY { + counter-reset: h7; +} +@page { margin: 1cm;} + +data-pbreak h6 {font-size: 9px;} +data-pcount h7 {font-size: 9px;} +data-pcount h7:before +{ + font-size: 9px; + content: "Seite " counter(h7) "/"; + counter-increment: h7; +} + +article,section {border-radius: 0.5em 0.5em 0.5em 0.5em;border: 1px solid;padding: 10px;margin: 10px;} +section {background: #F1F3F4;border-color: #d5d5d5;} +main {display: block;/* für IE */ background: #c4ced3;border-color: #8a9da8; border-radius: 0.5em 0.5em 0.5em 0.5em; padding: 10px; margin: 0px 0px 10px;} + +article {background: #F1F1F1;border-color: #d5d5d5;} +data-rnav {float: right;font-size: 12px;background-color: lightblue;} + +a:link,a:active, a:visited { + color: #000000; + text-decoration: none; +} +a:hover {color: #6495ED; text-decoration: underline;} + +a:not(.w3-button):not(.w3-btn) { + padding-right: 1em; + background: url("data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2012%2012%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpolygon%20fill%3D%22blue%22%20points%3D%222%2C5%203%2C5%203%2C3%209%2C3%209%2C9%207%2C9%207%2C10%2010%2C10%2010%2C2%202%2C2%22/%3E%3Cpolygon%20points%3D%220.5%2C10.5%203.5%2C7.5%202%2C6%205.5%2C6%205.5%2C10%204.5%2C8.5%201.5%2C11.5%22/%3E%3C/svg%3E") no-repeat right; + background-size: 10px auto; +} + +a[href^="http"] { +background: url("data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2012%2012%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpolygon%20fill%3D%22blue%22%20points%3D%222%2C2%205%2C2%205%2C3%203%2C3%203%2C9%209%2C9%209%2C7%2010%2C7%2010%2C10%202%2C10%22/%3E%3Cpolygon%20points%3D%226.2%2C2%2010%2C2%2010%2C5.8%208.6%2C4.4%206.5%2C6.5%205.5%2C5.5%207.6%2C3.4%22/%3E%3C/svg%3E") no-repeat right; +background-size: 10px auto; +} + +span[data-title] { +/*color:red; */ + font-size: 2.5rem; +} + +.htoc1 { +} +.htoc2 { + padding-left: 25px; +} +.htoc3 { + padding-left: 45px; +} +.htoc4 { + padding-left: 65px; +} + + + +figcaption {font-size: 0.8em;} + +dialog:not([open]) { display: none; } +dialog {background-color: lightblue; border-color: red; min-height: 200px; min-width: 500px;} + +table {max-width:100%;} +table, th, td { + border-collapse: collapse; + border: 1px solid black; + padding: 2px; +} +thead {background-color:#D0CECE;border:1.0pt solid windowtext;} +caption {font-size: small;} + +img { + max-width: 100%; + height: auto; +} + +@media only screen and (min-width: 64em) +{ + .printarea section + { + /* background-color: yellow; */ + margin-left: 10%; + margin-right: 10%; + } +} +@media only screen and (min-width: 100em) +{ + .printarea section + { + /* background-color: yellow; */ + margin-left: 20%; + margin-right: 20%; + } + +} + +@media screen { + div.divFooter { + display: none; + } +} + + diff --git a/public/css/print.css b/public/css/print.css new file mode 100644 index 0000000..8577485 --- /dev/null +++ b/public/css/print.css @@ -0,0 +1,127 @@ +BODY { + counter-reset: h7; + font-family: Arial, serif; color: #333333; + font-size: 12pt; + background-color: white; +} +@page { margin: 1cm;} + +data-pcount h7 {font-size: 9px;} +data-pcount h7:before +{ + font-size: 9px; + content: "Seite " counter(h7) "/"; + counter-increment: h7; +} + +data-pbreak h6 {page-break-after: always;} + +/* H1 {page-break-before: always;} */ + +span[data-title] { + color:red; + font-size: 2.5rem; +} + +[data-aktiv*="yepp"] {border: 2px solid; border-color: lightblue;} + +.printarea:before { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2rem; +text-align: center; +margin: auto; +padding-top: 30px; +} +.printarea:after { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2em; +text-align: center; +padding-top: 30px; +} + +.noprint { display: none; } + +#btnprint, #btnsubmit, #btnimg, #menue, #submenue, #searchform { display: none; } +header, nav, aside, footer { display: none; } +#footer { display: none; } + +img { width: 100%; max-width: 100%; height: auto;} + +article,section {border-radius: none;border: none; padding: none;margin: none; background: #fff; border-color: #fff;} + +data-rnav {float: right;font-size: 12px; max-width: 12cm;} + +a:link,a:active, a:visited {color: black; text-decoration: none;} + +table {max-width:100%;} +table, th, td { + border-collapse: collapse; + border: 1px solid black; + padding: 2px; +} +thead {background-color:#D0CECE;border:1.0pt solid windowtext;} +caption {font-size: small;} + +.htoc1 { +} +.htoc2 { + padding-left: 25px; +} +.htoc3 { + padding-left: 45px; +} +.htoc4 { + padding-left: 65px; +} + +/* FUNKTIONIERT +BODY { + counter-reset: H1; Create a chapter counter scope +} +H1:before { + content: "Chapter " counter(H1) ". "; + counter-increment: H1; +} +H1 { + counter-reset: H2; +} +H2:before { + content: counter(H1) "." counter(H2) " "; + counter-increment: H2; +} +*/ + +H10.divFooter { + width: 100%; + max-width: 100%; + border-top-style: solid; + border-width: thin; + font-size: 9px; + text-align: left; + position: fixed; + bottom: 0; + color: red; + } + +/* so lala +div.divHeader { + width: 100%; + max-width: 100%; + + font-size: 9px; + text-align: right; + position: fixed; + top: 0; + margin-bottom: 25px; + } + +div.divHeader img{ + width: 100px; + height: 35px; +} +*/ + + + diff --git a/public/css/print.css_2021-02-23_1144 b/public/css/print.css_2021-02-23_1144 new file mode 100644 index 0000000..e0b0c22 --- /dev/null +++ b/public/css/print.css_2021-02-23_1144 @@ -0,0 +1,43 @@ +@page { margin: 1cm } + +.printarea:before { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2em; +text-align: center; +margin: auto; +padding-top: 30px; +} +.printarea:after { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2em; +text-align: center; +padding-top: 30px; +} + +.noprint { display: none; } + +#btnprint, #btnsubmit, #btnimg, #menue, #submenue, #searchform { display: none; } +header, nav, aside, footer { display: none; } +#footer { display: none; } + +h1, h2, h3, h4, h5 { page-break-after: avoid; } +h1 { font-size: 16pt; } +h2, h3, h4 { font-size: 14pt; margin-top: 25px; } + +//img { max-width: 12cm; } +img { width: 100%; max-width: 100%; height: auto;} + +body { +font: 12pt Georgia, "Times New Roman", Times, serif; +line-height: 1.3; +background: #fff !important; +color: #000; +} + +article,section {border-radius: none;border: none; padding: none;margin: none; background: #fff; border-color: #fff;} + +data-rnav {float: right;font-size: 12px; max-width: 12cm;} + +a:link,a:active, a:visited {color: black; text-decoration: none;} diff --git a/public/css/print.css_2021-03-25_1814 b/public/css/print.css_2021-03-25_1814 new file mode 100644 index 0000000..9ebdaf7 --- /dev/null +++ b/public/css/print.css_2021-03-25_1814 @@ -0,0 +1,64 @@ +@page { margin: 1cm } + +.printarea:before { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2em; +text-align: center; +margin: auto; +padding-top: 30px; +} +.printarea:after { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2em; +text-align: center; +padding-top: 30px; +} + +.noprint { display: none; } + +#btnprint, #btnsubmit, #btnimg, #menue, #submenue, #searchform { display: none; } +header, nav, aside, footer { display: none; } +#footer { display: none; } + +h1, h2, h3, h4, h5 { page-break-after: avoid; } +h1 { font-size: 16pt;} +h2, h3, h4 { font-size: 14pt; margin-top: 25px; } + +h1:not([data-title*="title"]) {page-break-before: always;} +div.[data-title*="title"]) {page-break-before: always;} +[data-title*="ptitle"] {page-break-before: always;} + +//img { max-width: 12cm; } +img { width: 100%; max-width: 100%; height: auto;} + +body { +font: 12pt Georgia, "Times New Roman", Times, serif; +line-height: 1.3; +background: #fff !important; +color: #000; +} + +article,section {border-radius: none;border: none; padding: none;margin: none; background: #fff; border-color: #fff;} + +data-rnav {float: right;font-size: 12px; max-width: 12cm;} + +a:link,a:active, a:visited {color: black; text-decoration: none;} + +/* FUNKTIONIERT +BODY { + counter-reset: H1; /* Create a chapter counter scope */ +} +H1:before { + content: "Chapter " counter(H1) ". "; + counter-increment: H1; /* Add 1 to chapter */ +} +H1 { + counter-reset: H2; /* Set section to 0 */ +} +H2:before { + content: counter(H1) "." counter(H2) " "; + counter-increment: H2; +} +*/ diff --git a/public/css/print.css_2021-03-25_2149 b/public/css/print.css_2021-03-25_2149 new file mode 100644 index 0000000..d1978e4 --- /dev/null +++ b/public/css/print.css_2021-03-25_2149 @@ -0,0 +1,80 @@ +BODY { + counter-reset: h6; + font-family: Arial, serif; color: #333333; + font-size: 12pt; + background-color: white; +} +@page { margin: 1cm;} + +data-pbreak h6 {font-size: 9px;} +data-pbreak h6:before +{ + font-size: 9px; + content: "Seite " counter(h6) "/"; + counter-increment: h6; +} +data-pbreak h6 {page-break-after: always;} + + +.printarea:before { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2rem; +text-align: center; +margin: auto; +padding-top: 30px; +} +.printarea:after { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2em; +text-align: center; +padding-top: 30px; +} + +.noprint { display: none; } + +#btnprint, #btnsubmit, #btnimg, #menue, #submenue, #searchform { display: none; } +header, nav, aside, footer { display: none; } +#footer { display: none; } + +img { width: 100%; max-width: 100%; height: auto;} + +article,section {border-radius: none;border: none; padding: none;margin: none; background: #fff; border-color: #fff;} + +data-rnav {float: right;font-size: 12px; max-width: 12cm;} + +a:link,a:active, a:visited {color: black; text-decoration: none;} + +table {max-width:100%;} +table, th, td { + border-collapse: collapse; + border: 1px solid black; + padding: 2px; +} +thead {background-color:#D0CECE;border:1.0pt solid windowtext;} +caption {font-size: small;} + +/* FUNKTIONIERT +BODY { + counter-reset: H1; Create a chapter counter scope +} +H1:before { + content: "Chapter " counter(H1) ". "; + counter-increment: H1; +} +H1 { + counter-reset: H2; +} +H2:before { + content: counter(H1) "." counter(H2) " "; + counter-increment: H2; +} +*/ + + + + + + + diff --git a/public/css/print.css_2021-04-01_1716 b/public/css/print.css_2021-04-01_1716 new file mode 100644 index 0000000..8df149b --- /dev/null +++ b/public/css/print.css_2021-04-01_1716 @@ -0,0 +1,109 @@ +BODY { + counter-reset: h7; + font-family: Arial, serif; color: #333333; + font-size: 12pt; + background-color: white; +} +@page { margin: 1cm;} + +data-pcount h7 {font-size: 9px;} +data-pcount h7:before +{ + font-size: 9px; + content: "Seite " counter(h7) "/"; + counter-increment: h7; +} + +data-pbreak h6 {page-break-after: always;} + + +.printarea:before { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2rem; +text-align: center; +margin: auto; +padding-top: 30px; +} +.printarea:after { +content: "\ --- DRAFT, not for production ---"; +color: #ff0000 !important; +font-size: 2em; +text-align: center; +padding-top: 30px; +} + +.noprint { display: none; } + +#btnprint, #btnsubmit, #btnimg, #menue, #submenue, #searchform { display: none; } +header, nav, aside, footer { display: none; } +#footer { display: none; } + +img { width: 100%; max-width: 100%; height: auto;} + +article,section {border-radius: none;border: none; padding: none;margin: none; background: #fff; border-color: #fff;} + +data-rnav {float: right;font-size: 12px; max-width: 12cm;} + +a:link,a:active, a:visited {color: black; text-decoration: none;} + +table {max-width:100%;} +table, th, td { + border-collapse: collapse; + border: 1px solid black; + padding: 2px; +} +thead {background-color:#D0CECE;border:1.0pt solid windowtext;} +caption {font-size: small;} + +/* FUNKTIONIERT +BODY { + counter-reset: H1; Create a chapter counter scope +} +H1:before { + content: "Chapter " counter(H1) ". "; + counter-increment: H1; +} +H1 { + counter-reset: H2; +} +H2:before { + content: counter(H1) "." counter(H2) " "; + counter-increment: H2; +} +*/ + + + + +div.divFooter { + width: 100%; + max-width: 100%; + border-top-style: solid; + border-width: thin; + font-size: 9px; + text-align: left; + position: fixed; + bottom: 0; + } + + + +div.divHeader { + width: 100%; + max-width: 100%; + + font-size: 9px; + text-align: right; + position: fixed; + top: 0; + margin-bottom: 25px; + } + +div.divHeader img{ + width: 100px; + height: 35px; +} + + + diff --git a/public/css/tabulator/tabulator.min.css b/public/css/tabulator/tabulator.min.css new file mode 100644 index 0000000..bee8a0c --- /dev/null +++ b/public/css/tabulator/tabulator.min.css @@ -0,0 +1,3 @@ +/* Tabulator v4.7.2 (c) Oliver Folkerd */ +.tabulator{position:relative;border:1px solid #999;background-color:#888;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:1px solid #999;background-color:#e6e6e6;color:#555;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background:#e6e6e6;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#cdcdcd;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:9px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#cdcdcd}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#f3f3f3!important;border-top:1px solid #aaa;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#ccc;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#e2e2e2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #aaa}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #aaa}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#e6e6e6;text-align:right;color:#555;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#f3f3f3!important;border-bottom:1px solid #aaa;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator{color:#555;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:hsla(0,0%,100%,.2)}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:4px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#d00}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#d00}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333} +/*# sourceMappingURL=tabulator.min.css.map */ diff --git a/public/css/tabulator/tabulator.min.css.map b/public/css/tabulator/tabulator.min.css.map new file mode 100644 index 0000000..f703d30 --- /dev/null +++ b/public/css/tabulator/tabulator.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"AA0CA,WACC,kBAAkB,AAElB,sBAxCgB,AA0ChB,sBA3CqB,AA6CrB,eA3Ca,AA4Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAwfxB,AAvgBD,iFAoBI,cAAc,CACd,AArBJ,0CA0BE,oBAAqB,CACrB,AA3BF,kCA8BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA/BF,6BAmCE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAtEwB,AAuExB,yBA1E4B,AA2E5B,WA1EmB,AA2EnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAmPpB,AAtSF,qDAsDG,YAAY,CACZ,AAvDH,4CA2DG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BA7FoB,AA8FpB,mBAhG2B,AAiG3B,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAqLhB,AAvPH,6DAqEI,kBAAkB,AAClB,sBApGsB,AAqGtB,mBAA8C,AAC9C,mBAAoB,CACpB,AAzEJ,mEA6EI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAgDX,AA/HJ,iGAmFK,aAAc,CAMd,AAzFL,uGAsFM,eAAe,AACf,UAAW,CACX,AAxFN,wFA6FK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAarB,AAhHL,gHAuGM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AA/GN,oFAoHK,qBAAqB,AACrB,kBAAkB,AAClB,QAAO,AACP,UAAS,AACT,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BArJmB,CAsJnB,AA7HL,0FAsIK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAxKkB,AAyKlB,gBAAgB,AAEhB,iBAAiB,CACjB,AA7IL,0FAmJK,YAAa,CACb,AApJL,qEAyJI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AA9KJ,8EAiKK,qBAAsB,CACtB,AAlKL,yEAqKK,cAAe,CACf,AAtKL,sFA0KM,QAAS,AACT,QAAS,CACT,AA5KN,oFAmLK,kBAAkB,CAClB,AApLL,qEAuLK,eAAc,AACd,wBAAoD,CACpD,AAzLL,uHA6LM,gBAAgB,AAChB,4BAvNkB,CAwNlB,AA/LN,sHAoMM,gBAAgB,AAChB,4BA/NgB,CAgOhB,AAtMN,uHA2MM,0BArOgB,AAsOhB,kBAAmB,CACnB,AA7MN,+GAqNM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AA3NN,oHAgOM,wBAAyB,CACzB,AAjON,2GAsOM,gBAAe,AACf,gBAAgB,CAChB,AAxON,uIA4OO,gBAAe,AACf,mBAAmB,CACnB,AA9OP,uGAmPM,qBAAqB,CACrB,AApPN,+CA0PG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AAxQH,qEAkQI,2BAtRgB,CAuRhB,AAnQJ,sEAsQI,0BA1RgB,CA2RhB,AAvQJ,qDA4QG,sBAAqB,AACrB,eAAc,AAEd,6BAAyD,AAUzD,0BA7SiB,AA8SjB,6BAzToB,AA2TpB,eAAgB,CAChB,AA7RH,oEAkRI,4BAAyD,CAKzD,AAvRJ,iGAqRK,YAAa,CACb,AAtRL,2DAgSG,cAAc,CAKd,AArSH,iEAmSI,YAAa,CACb,AApSJ,kCA0SE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAyDjC,AAvWF,wCAiTG,YAAa,CACb,AAlTH,yDAsTG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AA3UH,wFA2TI,gBAAe,AACf,cAAc,CACd,AA7TJ,8DAkUI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AA1UJ,mDA+UG,kBAAiB,AACjB,qBAAoB,AACpB,sBAvWqB,AAwWrB,mBAAmB,AACnB,iBAAgB,AAChB,UAvWe,CAyXf,AAtWH,kFAyVK,gBAAiB,AACjB,4BAAwD,CASxD,AAnWL,sGA6VM,4BAjXc,CAkXd,AA9VN,yGAiWM,yBArXc,CAsXd,AAlWN,6BA6WE,iBAAgB,AAChB,0BApXwB,AAqXxB,yBAxX4B,AAyX5B,iBAAiB,AACjB,WAzXmB,AA0XnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAgFpB,AAzcF,qDA4XG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAyD,AAUzD,6BAhaiB,AAiajB,0BAjaiB,AAmajB,eAAgB,CAMhB,AArZH,oEAqYI,4BAAyD,CAKzD,AA1YJ,iGAwYK,YAAa,CACb,AAzYL,gEAkZI,mBAAkB,AAClB,kBAAkB,CAClB,AApZJ,kDAwZG,WAhakB,AAialB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CACjB,AA5ZH,kDAgaG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5aoB,AA6apB,iBAAiB,CACjB,AAvaH,8CA0aG,YAAY,CACZ,AA3aH,6CA+aG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA3boB,AA4bpB,kBAAiB,AAEjB,6BAA+B,CAiB/B,AAxcH,oDA0bI,UA/bmB,CAgcnB,AA3bJ,sDA8bI,UAAU,CACV,AA/bJ,kEAmcK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAtcL,wCA6cE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AA3dF,6CAodG,OAAM,AACN,UAAU,CACV,AAtdH,8CAydG,gBAAgB,CAChB,AA1dH,6BAgeE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAtgBF,mDA+eG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AArgBH,qEA4fI,sBAAqB,AACrB,UAAU,CACV,AA9fJ,mEAkgBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBApiBuB,CAo5BvB,AApXD,kCAQE,wBAviB4B,CAwiB5B,AATF,0CAYE,sBAxiBsB,AAyiBtB,cAAe,CACf,AAdF,kCAiBE,wBA3iB6B,CA4iB7B,AAlBF,wCAqBE,yBA9iBkC,AA+iBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BA/jBkB,AAgkBlB,6BAhkBkB,AAkkBlB,oBAAoB,AACpB,UAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AAzEF,uDAmEG,2BAjmBiB,CAkmBjB,AApEH,wDAuEG,0BArmBiB,CAsmBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BA9mBkB,AA+mBlB,4BA/mBkB,CAkoBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cAtoBW,CAipBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BA1oBkB,AA2oBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CAyLtB,AAzSF,iDAmHG,yBA1oBkB,AA2oBlB,SAAU,CAMV,AA1HH,+GAuHI,WAAU,AACV,sBAAsB,CACtB,AAzHJ,yDA6HG,qBAnpBgB,CA0pBhB,AApIH,+HA+HI,WAAU,AACV,uBAAsB,AAEtB,UAxpBe,CAypBf,AAnIJ,6EAyII,YAAa,CACb,AA1IJ,oDA+IG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AApKH,8EA0JI,SAAS,CAST,AAnKJ,wGA8JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AAlKL,2DAuKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAhtBiB,AAitBjB,4BAjtBiB,CAktBjB,AApLH,4DAwLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA/tBe,AAguBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AAzPH,kEAyMI,eAAc,AACd,yBAA4B,CAC5B,AA3MJ,kGA8MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjOJ,wGAuNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA5vBa,CA6vBb,AAhOL,gGAoOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAvwBc,CAoxBd,AAvPJ,sGA6OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAlxBa,CAmxBb,AAtPL,qEA4PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WA3yBqB,AA4yBrB,gBAAgB,AAChB,eAAe,CAmBf,AAhSH,2EAgRI,UAAU,CACV,AAjRJ,sHAqRK,eAAe,CACf,AAtRL,sOA8RI,YAAY,CACZ,AA/RJ,wDAmSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AAxSH,+BA6SE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA70BkB,AA80BlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CA4Df,AAlXF,qCAyTG,eAAc,AACd,+BAA+B,CAC/B,AA3TH,wEAgUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAv2BkB,AAw2BlB,eAAgB,CAChB,AArUJ,uDA0UG,iBAAiB,CACjB,AA3UH,uDA8UG,iBAAiB,CACjB,AA/UH,uDAkVG,iBAAiB,CACjB,AAnVH,uDAsVG,iBAAiB,CACjB,AAvVH,uDA0VG,kBAAkB,CAClB,AA3VH,uDA8VG,oBAAqB,CACrB,AA/VH,gDAmWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BA94BmB,AA+4BnB,qBAAqB,CACrB,AA5WH,oCA+WG,iBAAgB,AAChB,UAAU,CACV,AAKH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBA35BuB,AA45BvB,sBA15BmB,AA25BnB,oCAAuC,AAEvC,eA76Ba,AA+6Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CAqBd,AAnCD,qCAkBE,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAUjB,AA9BF,kEAuBG,UAAW,CACX,AAxBH,8EA2BG,eAAe,AACf,kBAj7B2B,CAk7B3B,AA7BH,0CAiCE,yBAr7BkB,CAs7BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBAl8BuB,AAm8BvB,sBAj8BmB,AAm8BnB,eAn9Ba,AAq9Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA4Cd,AA3DD,6DAkBE,YAAW,AAEX,UA58BgB,CAi+BhB,AAzCF,oEAuBG,WAl9BqB,AAm9BrB,kBA18BkB,CA+8BlB,AA7BH,4EA2BI,oCAt9BoB,CAu9BpB,AA5BJ,qEAgCG,yBAl9BkB,CAm9BlB,AAjCH,mEAoCG,eAAc,AAEd,WAj+BqB,AAk+BrB,kBAz9BkB,CA09BlB,AAxCH,+DA4CE,YAAW,AAEX,WAt+BgB,AAu+BhB,iBAAkB,CAClB,AAhDF,8DAmDE,6BA5+BkB,AA8+BlB,YAAW,AACX,gBAAe,AAEf,WAh/BgB,AAi/BhB,eAAgB,CAChB,AAKF,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAwKzB,AAzKD,mDAIE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BArhCkB,AAshClB,4BAthCkB,CAuhClB,AAjBF,oDAqBE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA7hCkB,AA8hClB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CAsEf,AApGF,0DAiCG,eAAc,AACd,+BAA+B,CAC/B,AAnCH,6FAwCI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAvjCkB,AAwjClB,eAAgB,CAChB,AA7CJ,+EAmDI,2BAA4B,CAC5B,AApDJ,+EAyDI,2BAA4B,CAC5B,AA1DJ,+EA+DI,2BAA4B,CAC5B,AAhEJ,+EAqEI,2BAA4B,CAC5B,AAtEJ,+EA2EI,4BAA6B,CAC7B,AA5EJ,4EAgFG,oBAAqB,CACrB,AAjFH,qEAqFG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAxmCmB,AAymCnB,qBAAqB,CACrB,AA9FH,yDAiGG,iBAAgB,AAChB,UAAU,CACV,AAnGH,oDAwGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAvnCgB,AAwnChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAxKF,0DAyHG,eAAc,AACd,yBAA4B,CAC5B,AA3HH,0FA8HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjJH,gGAuII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAppCc,CAqpCd,AAhJJ,wFAoJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA/pCe,CA4qCf,AAvKH,8FA6JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA1qCc,CA2qCd","file":"tabulator.min.css","sourcesContent":["/* Tabulator v4.7.2 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #888 !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#aaa !default; //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder: 1px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground:$headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:9px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#ccc;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t//row element\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align: right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]} \ No newline at end of file diff --git a/public/css/tbl_print.css b/public/css/tbl_print.css new file mode 100644 index 0000000..888a226 --- /dev/null +++ b/public/css/tbl_print.css @@ -0,0 +1,46 @@ +/* Styles go here */ + +.page-header, .page-header-space { + height: 40px; +} + +.page-footer, .page-footer-space { + height: 30px; +} + +.page-footer { + position: fixed; + bottom: 0; + width: 100%; + border-top: 1px solid black; /* for demo */ + background: yellow; /* for demo */ + + border-color: #d5d5d5; +} + +.page-header { + position: fixed; + top: 0mm; + width: 100%; + border-bottom: 1px solid black; /* for demo */ + background: yellow; /* for demo */ + + border-color: #d5d5d5; +} + +.page { + page-break-after: always; +} + +@page { + margin: 20mm +} + +@media print { + thead {display: table-header-group;} + tfoot {display: table-footer-group;} + + button {display: none;} + + body {margin: 0;} +} diff --git a/public/css/w3.css b/public/css/w3.css new file mode 100644 index 0000000..b303800 --- /dev/null +++ b/public/css/w3.css @@ -0,0 +1,232 @@ +/* W3.CSS 4.13 June 2019 by Jan Egil and Borge Refsnes */ +html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit} +/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */ +html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0} +article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item} +audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline} +audio:not([controls]){display:none;height:0}[hidden],template{display:none} +a{background-color:transparent}a:active,a:hover{outline-width:0} +abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted} +b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000} +small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none} +code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible} +button,input,select,textarea,optgroup{font:inherit;margin:0}optgroup{font-weight:bold} +button,input{overflow:visible}button,select{text-transform:none} +button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button} +button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0} +button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText} +fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} +legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto} +[type=checkbox],[type=radio]{padding:0} +[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto} +[type=search]{-webkit-appearance:textfield;outline-offset:-2px} +[type=search]::-webkit-search-decoration{-webkit-appearance:none} +::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} +/* End extract */ +html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden} +h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.w3-serif{font-family:serif} +h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px} +hr{border:0;border-top:1px solid #eee;margin:20px 0} +.w3-image{max-width:100%;height:auto}img{vertical-align:middle}a{color:inherit} +.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc} +.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1} +.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1} +.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center} +.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top} +.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px} +.w3-btn,.w3-button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap} +.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)} +.w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none} +.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none} +.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%} +.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none} +.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block} +.w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s} +.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #ccc;width:100%} +.w3-select{padding:9px 0;width:100%;border:none;border-bottom:1px solid #ccc} +.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer} +.w3-dropdown-hover:hover .w3-dropdown-content{display:block} +.w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000} +.w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000} +.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1} +.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px} +.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto} +.w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%} +.w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%} +.w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px} +.w3-main,#main{transition:margin-left .4s} +.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)} +.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px} +.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto} +.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0} +.w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left} +.w3-bar .w3-button{white-space:normal} +.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0} +.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%} +.w3-responsive{display:block;overflow-x:auto} +.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before, +.w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:"";display:table;clear:both} +.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%} +.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%} +.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%} +.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%} +@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%} +.w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%} +.w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}} +@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%} +.w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%} +.w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}} +.w3-rest{overflow:hidden}.w3-stretch{margin-left:-16px;margin-right:-16px} +.w3-content,.w3-auto{margin-left:auto;margin-right:auto}.w3-content{max-width:980px}.w3-auto{max-width:1140px} +.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell} +.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom} +.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important} +@media (max-width:1205px){.w3-auto{max-width:95%}} +@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px} +.w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative} +.w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center} +.w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}} +@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}} +@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}} +@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}} +@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}.w3-auto{max-width:100%}} +.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0} +.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2} +.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0} +.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0} +.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)} +.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)} +.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)} +.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none} +.w3-display-position{position:absolute} +.w3-circle{border-radius:50%} +.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px} +.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px} +.w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px} +.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px} +.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word} +.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%} +.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)} +.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)} +.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}} +.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}} +.w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}} +.w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}} +.w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}} +.w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}} +.w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}} +.w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}} +.w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important} +.w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1} +.w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75} +.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)} +.w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)} +.w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)} +.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important} +.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important} +.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important} +.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important} +.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important} +.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important} +.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important} +.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important} +.w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important} +.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important} +.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important} +.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important} +.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important} +.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important} +.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important} +.w3-left{float:left!important}.w3-right{float:right!important} +.w3-button:hover{color:#000!important;background-color:#ccc!important} +.w3-transparent,.w3-hover-none:hover{background-color:transparent!important} +.w3-hover-none:hover{box-shadow:none!important} +/* Colors */ +.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important} +.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important} +.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important} +.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important} +.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important} +.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important} +.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important} +.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important} +.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important} +.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important} +.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important} +.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important} +.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important} +.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important} +.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important} +.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important} +.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important} +.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important} +.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important} +.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important} +.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important} +.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important} +.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important} +.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important} +.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important} +.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important} +.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important} +.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important} +.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important} +.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important} +.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important} +.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important} +.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important} +.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important} +.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important} +.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important} +.w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important} +.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important} +.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important} +.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important} +.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important} +.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important} +.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important} +.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important} +.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important} +.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important} +.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important} +.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important} +.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important} +.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important} +.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important} +.w3-text-white,.w3-hover-text-white:hover{color:#fff!important} +.w3-text-black,.w3-hover-text-black:hover{color:#000!important} +.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important} +.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important} +.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important} +.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important} +.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important} +.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important} +.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important} +.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important} +.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important} +.w3-border-blue-grey,.w3-hover-border-blue-grey:hover,.w3-border-blue-gray,.w3-hover-border-blue-gray:hover{border-color:#607d8b!important} +.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important} +.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important} +.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important} +.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important} +.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important} +.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important} +.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important} +.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important} +.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important} +.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important} +.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important} +.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important} +.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important} +.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important} +.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important} +.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important} +.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important} +.w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important} +.w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important} +.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important} +.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e71dec9 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/favicon.ico_ b/public/favicon.ico_ new file mode 100644 index 0000000..c2f2422 Binary files /dev/null and b/public/favicon.ico_ differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..04f03dd --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/fonts/Inter-Regular.woff b/public/fonts/Inter-Regular.woff new file mode 100644 index 0000000..7cb4990 Binary files /dev/null and b/public/fonts/Inter-Regular.woff differ diff --git a/public/fonts/Inter-Regular.woff2 b/public/fonts/Inter-Regular.woff2 new file mode 100644 index 0000000..66691b8 Binary files /dev/null and b/public/fonts/Inter-Regular.woff2 differ diff --git a/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.eot b/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.eot new file mode 100644 index 0000000..1632987 Binary files /dev/null and b/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.eot differ diff --git a/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.svg b/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.svg new file mode 100644 index 0000000..a095d4a --- /dev/null +++ b/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.svg @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.ttf b/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.ttf new file mode 100644 index 0000000..b83a180 Binary files /dev/null and b/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.ttf differ diff --git a/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.woff b/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.woff new file mode 100644 index 0000000..24cbb7d Binary files /dev/null and b/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.woff differ diff --git a/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.woff2 b/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.woff2 new file mode 100644 index 0000000..1c11337 Binary files /dev/null and b/public/fonts/ibm-plex-sans-v8-latin/ibm-plex-sans-v8-latin-regular.woff2 differ diff --git a/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.eot b/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.eot new file mode 100644 index 0000000..fd4f3e5 Binary files /dev/null and b/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.eot differ diff --git a/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.svg b/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.svg new file mode 100644 index 0000000..14882c5 --- /dev/null +++ b/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.svg @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.ttf b/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.ttf new file mode 100644 index 0000000..b4cfa59 Binary files /dev/null and b/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.ttf differ diff --git a/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.woff b/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.woff new file mode 100644 index 0000000..45eea67 Binary files /dev/null and b/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.woff differ diff --git a/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.woff2 b/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.woff2 new file mode 100644 index 0000000..ff11d05 Binary files /dev/null and b/public/fonts/red-hat-text-v3-latin/red-hat-text-v3-latin-regular.woff2 differ diff --git a/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.eot b/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.eot new file mode 100644 index 0000000..4f34800 Binary files /dev/null and b/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.eot differ diff --git a/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.svg b/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.svg new file mode 100644 index 0000000..627f5a3 --- /dev/null +++ b/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.svg @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.ttf b/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.ttf new file mode 100644 index 0000000..a97385d Binary files /dev/null and b/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.ttf differ diff --git a/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff b/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff new file mode 100644 index 0000000..69c8825 Binary files /dev/null and b/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff differ diff --git a/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff2 b/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff2 new file mode 100644 index 0000000..1a53701 Binary files /dev/null and b/public/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff2 differ diff --git a/public/i18n/de_DE.json b/public/i18n/de_DE.json new file mode 100644 index 0000000..9090227 --- /dev/null +++ b/public/i18n/de_DE.json @@ -0,0 +1,16 @@ +{ + "values":{ + "General": "Allgemeines", + "Planning": "Planung", + "Environment": "Umgebung", + "Power": "Stromversorgung", + "Cabling": "Verkabelung", + "Construction": "Konstruktion", + "Operations": "Betrieb", + "Management": "Management", + "Safety": "Arbeitssicherheit", + "Security": "Sicherheit", + "footer_copyright": "Alle Rechte vorbehalten. Schutzvermerk nach DIN ISO 16016 beachten.", + "not for production": "nicht freigegeben" + } + } diff --git a/public/i18n/en_GB.json b/public/i18n/en_GB.json new file mode 100644 index 0000000..47dba8c --- /dev/null +++ b/public/i18n/en_GB.json @@ -0,0 +1,10 @@ +{ + "values":{ + "Ja": "Yes", + "Nein": "No", + "Sprache": "Language", + "anmelden": "login", + "kruzifix": "holy shit", + "footer_copyright": "All rights reserved. Note protection notice according to DIN ISO 16016" + } + } diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..e0a8b7c --- /dev/null +++ b/public/index.html @@ -0,0 +1,90 @@ + + + + + + + + + ReST API Methoden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    IaaS::IT-IS ReST API

    +
    + +

    Die ReST-API steht nicht durchgehend zur Verfügung (ins besondere an verregneten Wochenden und Feiertagen). +

    + + + +

    + +
    + +

    API Methoden

    +

    aus Entwicklungsgründen bis auf weiteres gesperrt (derzeit ausschliesslich interne Verwendung).

    + +
    +
    + +IT-Rooms and Datacenter +
    +
    + +
    + + + + + diff --git a/public/index.html_2021-02-07_0926 b/public/index.html_2021-02-07_0926 new file mode 100644 index 0000000..7b8b9a6 --- /dev/null +++ b/public/index.html_2021-02-07_0926 @@ -0,0 +1,191 @@ + + + + + + + + + ReST API Methoden + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    IaaS::IT-IS ReST API

    +
    + +

    Die ReST-API der INT-Umgebung steht nicht durchgehend zur Verfügung (ins besondere an verregneten Wochenden und Feiertagen). +

    + + + + +

    + +
    + +

    API Methoden

    + +aus Entwicklungsgründen bis auf weiteres gesperrt (derzeit ausschliesslich interne Verwendung). + +
    +

    (ReST) API Methoden

    +
    +

    temporary closed

    +
    +
    + +
    +

    Glossar - Abkürzungen

    +
    +

    Glossar

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Deutscher BegriffEnglischer BegriffAbkürzung
    Etagenverteiler (EVT)Floor DistributionFD
    Gebäudeverteiler (GVT)Building DistributionBD
    NetzwerkverteilerNetwork DistributionND
    Gebäudeverteiler-RaumBuilding Distributor RoomBD_Room
    Etagenverteiler-RaumFloor Distributor RoomFD_Room
    Etagenverteiler-RackFloor Distributor RackFD_Rack
    NetzbetreiberraumCarrier Room 
    Netzwerk KommunikationszentrumNetwork Communication CenterNCC
    Server RaumServer / Storage RoomSRV
    RechenzentrumDatacenterDC
    DatensicherungsraumData Backup and ArchiveDBA
    VerfügbarkeitsklasseAvailability ClassAC [1-4]
    SchutzklasseProtection ClassPC [1-4]
    +
    +
    + +
    +

    Use-Case Beispiel

    + + Ist zu einem weltweiten (internationen) Text-Baustein ("WW" = world wide) in der abgefragten Landes- und Sprachversion ("de_DE" oder "en_GB") ein gleicher nationaler Text-Bausteine (Bsp.: "US", "JP") vorhanden so ersetzt der nationale den internationalen. + +

    temporary closed

    +
    + +
    + + + + diff --git a/public/index.html_2021-03-22_1930 b/public/index.html_2021-03-22_1930 new file mode 100644 index 0000000..cffb0e1 --- /dev/null +++ b/public/index.html_2021-03-22_1930 @@ -0,0 +1,90 @@ + + + + + + + + + ReST API Methoden + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    IaaS::IT-IS ReST API

    +
    + +

    Die ReST-API steht nicht durchgehend zur Verfügung (ins besondere an verregneten Wochenden und Feiertagen). +

    + + + +

    + +
    + +

    API Methoden

    +aus Entwicklungsgründen bis auf weiteres gesperrt (derzeit ausschliesslich interne Verwendung). + +
    +
    + IT-Rooms and Datacenter +
    +
    + +
    + + + + diff --git a/public/index.html_2021-05-18_1330 b/public/index.html_2021-05-18_1330 new file mode 100644 index 0000000..097e007 --- /dev/null +++ b/public/index.html_2021-05-18_1330 @@ -0,0 +1,88 @@ + + + + + + + + + ReST API Methoden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    IaaS::IT-IS ReST API

    +
    + +

    Die ReST-API steht nicht durchgehend zur Verfügung (ins besondere an verregneten Wochenden und Feiertagen). +

    + + + +

    + +
    + +

    API Methoden

    +

    aus Entwicklungsgründen bis auf weiteres gesperrt (derzeit ausschliesslich interne Verwendung).

    + +
    +
    + IT-Rooms and Datacenter +
    +
    + +
    + + + + diff --git a/public/js/account/userhome.js b/public/js/account/userhome.js new file mode 100644 index 0000000..bfee953 --- /dev/null +++ b/public/js/account/userhome.js @@ -0,0 +1,58 @@ +// 2020-12-19 15:35 + +function getLastLogin(lastLogin) +{} + +function getlastLogout(lastLogout) +{} + +function getlastPwdChangeTime(lastPwdChangeTime) +{} + +function setUserData(user) +{ + // const user = {username: "<%==$ username %>", firstname: "<%==$ firstname %>", surname: "<%==$ surname %>", email: "<%==$ email %>", company: "<%==$ company %>", lastLogin: "<%==$ lastLogin %>", lastLogout: "<%==$ lastLogout %>", lastPwdChangeTime: "<%==$ lastPwdChangeTime %>", usertimezone: "<%==$ usertimezone %>", groupname: "<%==$ groupname %>", groups: "<%==$ groups %>", newsletter: "<%==$ newsletter %>"}; + + let radios = document.getElementsByName('news'); + + for (var i = 0, length = radios.length; i < length; i++) + { + if (radios[i].value === user.newsletter) + { + radios[i].checked = true; + break; + } + } +} + +function setUserNewsletter(radioBtn, username) +{ + console.log("Newsletter: " + radioBtn.value + " " + username); + data = new URLSearchParams([["username", username], ["newsletter", radioBtn.value]]); + fetch("/account/setUserNewsCfg", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `Newsletter Einstellung wurde aktualisiert.`; + doPopUp(`

    Newsletter Einstellung wurde aktualisiert.`); + } + else + { + document.getElementById("redmsg").innerHTML = "Newsletter Einstellung wurde nicht aktualisiert.
    " + json[0].ERROR + " " + json[0].errMsg ; + doPopUp(`

    Newsletter Einstellung wurde nicht aktualisiert.
    ${json[0].ERROR}
    ${json[0].errMsg}

    `); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler: " + error + data; }); +} + +function doPopUp(msg) +{ + const mgsTxt = document.getElementById("msg"); + mgsTxt.innerHTML = msg; + const pup = document.getElementById("pup"); + pup.setAttribute("style", "display: block;"); + + window.location.href='#body'; +} diff --git a/public/js/admin.js b/public/js/admin.js new file mode 100644 index 0000000..15ee200 --- /dev/null +++ b/public/js/admin.js @@ -0,0 +1,16 @@ +// 2020-12-19 15:35 + +function getLastLogin(lastLogin) +{} + +function getlastLogout(lastLogout) +{} + +function getlastPwdChangeTime(lastPwdChangeTime) +{} + +function setUserData(user) +{ + // const user = {username: "<%==$ username %>", firstname: "<%==$ firstname %>", surname: "<%==$ surname %>", email: "<%==$ email %>", company: "<%==$ company %>", lastLogin: "<%==$ lastLogin %>", lastLogout: "<%==$ lastLogout %>", lastPwdChangeTime: "<%==$ lastPwdChangeTime %>", usertimezone: "<%==$ usertimezone %>", groupname: "<%==$ groupname %>", groups: "<%==$ groups %>"}; +} + diff --git a/public/js/annex-data/AnnexData.js b/public/js/annex-data/AnnexData.js new file mode 100644 index 0000000..b83c090 --- /dev/null +++ b/public/js/annex-data/AnnexData.js @@ -0,0 +1,120 @@ + + +class AnnexData extends HTMLElement +{ + constructor() + { + super(); + //this.attachShadow({mode: "open"}); + } + + connectedCallback() + { + this.getAnnexStatistic(); + } + + getAnnexStatistic() + { + return new Promise((res, rej) => { + fetch('/annexdata/getStatistics') + .then(data => data.json()) + .then((json) => { + this.renderAnnexStatistic(json); + res(); + }) + .catch((error) => {this.annonymous(error);}); + }) + } + + annonymous(error) + { + const div = document.createElement("div"); + div.innerHTML = error; + + this.appendChild(div); + } + + renderAnnexStatistic(data) + { + var Obj = data; + let i = 0; + var section = document.createElement("section"); + + var row = document.createElement("div"); + row.setAttribute("class", "w3-cell-row"); + + var cell1 = document.createElement("div"); + cell1.setAttribute("class", "w3-container w3-cell"); + + + var head = document.createElement("h4"); + head.innerText = 'Bausteine'; + cell1.appendChild(head); + + var node = document.createElement("p"); + var textnode = document.createTextNode("Anzahl Bausteine: " + Obj[i].count_id); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("aktive Bausteine: " + Obj[i].count_active); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("landesspezifische Bausteine: " + Obj[i].count_countries); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("Bausteine deutsch: " + Obj[i].count_language_de); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("Bausteine englisch: " + Obj[i].count_language_en); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + if(Obj[i].countCheckLfdnrCat > 0) {node.setAttribute("style", "color: red");} + else{node.setAttribute("style", "color: green");} + textnode = document.createTextNode("unvollständige Bausteine: " + Obj[i].countCheckLfdnrCat); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + if(Obj[i].count_Annexwaste > 0) {node.setAttribute("style", "color: Tomato");} + else{node.setAttribute("style", "color: green");} + textnode = document.createTextNode("gelöschte Bausteine: " + Obj[i].count_Annexwaste); + node.appendChild(textnode); + cell1.appendChild(node); + + row.appendChild(cell1); + + var cell2 = document.createElement("div"); + cell2.setAttribute("class", "w3-container w3-cell"); + + head = document.createElement("h4"); + head.innerText = 'Release Status'; + cell2.appendChild(head); + + for (i in Obj[1]) + { + node = document.createElement("p"); + textnode = document.createTextNode(Obj[1][i].release_type + ': ' + Obj[1][i].count_release_type); + node.appendChild(textnode); + cell2.appendChild(node); + } + + row.appendChild(cell2); + section.appendChild(row); + + //this.shadowRoot.appendChild(section); + this.appendChild(section); + } + +} +customElements.define("annex-data", AnnexData); + + diff --git a/public/js/annex-data/AnnexData.js_2021-04-01_1712 b/public/js/annex-data/AnnexData.js_2021-04-01_1712 new file mode 100644 index 0000000..b83c090 --- /dev/null +++ b/public/js/annex-data/AnnexData.js_2021-04-01_1712 @@ -0,0 +1,120 @@ + + +class AnnexData extends HTMLElement +{ + constructor() + { + super(); + //this.attachShadow({mode: "open"}); + } + + connectedCallback() + { + this.getAnnexStatistic(); + } + + getAnnexStatistic() + { + return new Promise((res, rej) => { + fetch('/annexdata/getStatistics') + .then(data => data.json()) + .then((json) => { + this.renderAnnexStatistic(json); + res(); + }) + .catch((error) => {this.annonymous(error);}); + }) + } + + annonymous(error) + { + const div = document.createElement("div"); + div.innerHTML = error; + + this.appendChild(div); + } + + renderAnnexStatistic(data) + { + var Obj = data; + let i = 0; + var section = document.createElement("section"); + + var row = document.createElement("div"); + row.setAttribute("class", "w3-cell-row"); + + var cell1 = document.createElement("div"); + cell1.setAttribute("class", "w3-container w3-cell"); + + + var head = document.createElement("h4"); + head.innerText = 'Bausteine'; + cell1.appendChild(head); + + var node = document.createElement("p"); + var textnode = document.createTextNode("Anzahl Bausteine: " + Obj[i].count_id); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("aktive Bausteine: " + Obj[i].count_active); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("landesspezifische Bausteine: " + Obj[i].count_countries); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("Bausteine deutsch: " + Obj[i].count_language_de); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("Bausteine englisch: " + Obj[i].count_language_en); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + if(Obj[i].countCheckLfdnrCat > 0) {node.setAttribute("style", "color: red");} + else{node.setAttribute("style", "color: green");} + textnode = document.createTextNode("unvollständige Bausteine: " + Obj[i].countCheckLfdnrCat); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + if(Obj[i].count_Annexwaste > 0) {node.setAttribute("style", "color: Tomato");} + else{node.setAttribute("style", "color: green");} + textnode = document.createTextNode("gelöschte Bausteine: " + Obj[i].count_Annexwaste); + node.appendChild(textnode); + cell1.appendChild(node); + + row.appendChild(cell1); + + var cell2 = document.createElement("div"); + cell2.setAttribute("class", "w3-container w3-cell"); + + head = document.createElement("h4"); + head.innerText = 'Release Status'; + cell2.appendChild(head); + + for (i in Obj[1]) + { + node = document.createElement("p"); + textnode = document.createTextNode(Obj[1][i].release_type + ': ' + Obj[1][i].count_release_type); + node.appendChild(textnode); + cell2.appendChild(node); + } + + row.appendChild(cell2); + section.appendChild(row); + + //this.shadowRoot.appendChild(section); + this.appendChild(section); + } + +} +customElements.define("annex-data", AnnexData); + + diff --git a/public/js/annex-data/StandardsData.js_2020-12-02_1956 b/public/js/annex-data/StandardsData.js_2020-12-02_1956 new file mode 100644 index 0000000..7dd22f5 --- /dev/null +++ b/public/js/annex-data/StandardsData.js_2020-12-02_1956 @@ -0,0 +1,105 @@ + + +class StandardsData extends HTMLElement +{ + constructor() + { + super(); + this._message = "This website use Cookies to ensure you get the best"; + } + + connectedCallback() + { + this.getStandardsStatistic(); + } + + getStandardsStatistic() + { + return new Promise((res, rej) => { + fetch('/standardsdata/getStatistics') + .then(data => data.json()) + .then((json) => { + this.renderStandardsStatistic(json); + res(); + }) + .catch((error) => {this.annonymous(error);}); + }) + } + + annonymous(error) + { + const div = document.createElement("div"); + div.innerHTML = error; + + this.appendChild(div); + } + + renderStandardsStatistic(data) + { + var Obj = data; + let i = 0; + var section = document.createElement("section"); + + var row = document.createElement("div"); + row.setAttribute("class", "w3-cell-row"); + + var cell1 = document.createElement("div"); + cell1.setAttribute("class", "w3-container w3-cell"); + + + var head = document.createElement("h4"); + head.innerText = 'Bausteine'; + cell1.appendChild(head); + + var node = document.createElement("p"); + var textnode = document.createTextNode("Anzahl Bausteine: " + Obj[i].count_id); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("aktive Bausteine: " + Obj[i].count_active); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("landesspezifische Bausteine: " + Obj[i].count_countries); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("Bausteine deutsch: " + Obj[i].count_language_de); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("Bausteine englisch: " + Obj[i].count_language_en); + node.appendChild(textnode); + cell1.appendChild(node); + + row.appendChild(cell1); + + var cell2 = document.createElement("div"); + cell2.setAttribute("class", "w3-container w3-cell"); + + head = document.createElement("h4"); + head.innerText = 'Release Status'; + cell2.appendChild(head); + + for (i in Obj[1]) + { + node = document.createElement("p"); + textnode = document.createTextNode(Obj[1][i].release_type + ': ' + Obj[1][i].count_release_type); + node.appendChild(textnode); + cell2.appendChild(node); + } + + row.appendChild(cell2); + section.appendChild(row); + + this.appendChild(section); + } + +} +customElements.define("standards-data", StandardsData); + + diff --git a/public/js/annex-data/StandardsData.js_2020-12-29_1541 b/public/js/annex-data/StandardsData.js_2020-12-29_1541 new file mode 100644 index 0000000..3d8d0d8 --- /dev/null +++ b/public/js/annex-data/StandardsData.js_2020-12-29_1541 @@ -0,0 +1,113 @@ + + +class StandardsData extends HTMLElement +{ + constructor() + { + super(); + //this.attachShadow({mode: "open"}); + } + + connectedCallback() + { + this.getStandardsStatistic(); + } + + getStandardsStatistic() + { + return new Promise((res, rej) => { + fetch('/standardsdata/getStatistics') + .then(data => data.json()) + .then((json) => { + this.renderStandardsStatistic(json); + res(); + }) + .catch((error) => {this.annonymous(error);}); + }) + } + + annonymous(error) + { + const div = document.createElement("div"); + div.innerHTML = error; + + this.appendChild(div); + } + + renderStandardsStatistic(data) + { + var Obj = data; + let i = 0; + var section = document.createElement("section"); + + var row = document.createElement("div"); + row.setAttribute("class", "w3-cell-row"); + + var cell1 = document.createElement("div"); + cell1.setAttribute("class", "w3-container w3-cell"); + + + var head = document.createElement("h4"); + head.innerText = 'Bausteine'; + cell1.appendChild(head); + + var node = document.createElement("p"); + var textnode = document.createTextNode("Anzahl Bausteine: " + Obj[i].count_id); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("aktive Bausteine: " + Obj[i].count_active); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("landesspezifische Bausteine: " + Obj[i].count_countries); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("Bausteine deutsch: " + Obj[i].count_language_de); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + textnode = document.createTextNode("Bausteine englisch: " + Obj[i].count_language_en); + node.appendChild(textnode); + cell1.appendChild(node); + + node = document.createElement("p"); + if(Obj[i].countCheckLfdnrCat > 0) {node.setAttribute("style", "color: red");} + else{node.setAttribute("style", "color: green");} + textnode = document.createTextNode("unvollständige Bausteine: " + Obj[i].countCheckLfdnrCat); + node.appendChild(textnode); + cell1.appendChild(node); + + row.appendChild(cell1); + + var cell2 = document.createElement("div"); + cell2.setAttribute("class", "w3-container w3-cell"); + + head = document.createElement("h4"); + head.innerText = 'Release Status'; + cell2.appendChild(head); + + for (i in Obj[1]) + { + node = document.createElement("p"); + textnode = document.createTextNode(Obj[1][i].release_type + ': ' + Obj[1][i].count_release_type); + node.appendChild(textnode); + cell2.appendChild(node); + } + + row.appendChild(cell2); + section.appendChild(row); + + //this.shadowRoot.appendChild(section); + this.appendChild(section); + } + +} +customElements.define("standards-data", StandardsData); + + diff --git a/public/js/annex-toc/AnnexToc.js b/public/js/annex-toc/AnnexToc.js new file mode 100644 index 0000000..cf7c9e7 --- /dev/null +++ b/public/js/annex-toc/AnnexToc.js @@ -0,0 +1,150 @@ +var lang = 'de'; +try +{ + lang = checkLangCookie(); +} +catch(err) +{ + lang = 'de'; +} + +class AnnexToc extends HTMLElement +{ + constructor() + { + super(); + this._lang = 'de'; + } + + connectedCallback() + { + this.getGlossar(); + } + + attributeChangedCallback(name, oldValue, newValue) + { + if(oldValue !== newValue) + { + if(name === "lang") + { + this._lang = newValue; + this.updateMessage(); + } + } + } + + static get observedAttributes() + { + return ["lang"]; + } + + get message() + { + return this._lang; + } + + set message(value) + { + this._lang = value; + this.updateMessage(); + } + + updateMessage() + { + try + { + lang = this._lang; + } + catch(e){} + } + + getGlossar() + { + //data = new URLSearchParams([["getStdType", "show"], ["obj_sname", "ND"], ["cat_sname_en", "Planning"], ["country", "WW"], ["lang", "de_DE"], ["spec_active", "1"], ["ac_class", "3"], ["pc_class", "3"], ["spec_release", "draft"]]); + + return new Promise((res, rej) => { + fetch('/annexdata/getAnnexToc', + { + body: data, + method: "post" + }) + .then(data => data.json()) + .then((json) => { + this.renderGlossar(json); + res(); + }) + .catch((error) => {this.annonymous(error);}); + }) + } + + annonymous(error) + { + const div = document.createElement("div"); + div.innerHTML = error; + + this.appendChild(div); + } + + renderGlossar(data) + { + var obj = data; + + var item_class = document.createElement("span"); + + if(obj.length < 1) + { + console.log("getToc no items: "); // + stdObj.obj_sname); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log("getToc ERROR: " + stdObj.obj_sname);} + } + catch(err) + { + //ignore + } + } + var cat_class = ""; + var catBool = true; + + for (i in obj) + { + let item_cat_title = ""; + let item_cat = obj[i].cat_class; + + if(obj[i].cat_class === "General" && obj[i].obj_sname !== "General" && catBool === true) + { + item_cat_title = obj[i].obj_sname + " " + translate(obj[i].cat_class); + catBool = false + + } + else + { + item_cat_title = translate(obj[i].cat_class); + } + + if(cat_class != item_cat) + { + cat_class = item_cat; + item_class = document.createElement("span"); + //item_class.setAttribute('id', item_cat); + item_class.innerHTML = `
  • ${translate(item_cat_title)}
  • `; + } + + let item = document.createElement("span"); + item.innerHTML = obj[i].toc; + item_class.appendChild(item); + + + this.appendChild(item_class); + } + //this.updateMessage(); + } + +} +customElements.define("annex-toc", AnnexToc); + + diff --git a/public/js/annex-toc/AnnexToc.js_2021-02-23_0808 b/public/js/annex-toc/AnnexToc.js_2021-02-23_0808 new file mode 100644 index 0000000..7db99ae --- /dev/null +++ b/public/js/annex-toc/AnnexToc.js_2021-02-23_0808 @@ -0,0 +1,150 @@ +var lang = 'de'; +try +{ + lang = checkLangCookie(); +} +catch(err) +{ + lang = 'de'; +} + +class AnnexToc extends HTMLElement +{ + constructor() + { + super(); + this._lang = 'de'; + } + + connectedCallback() + { + this.getGlossar(); + } + + attributeChangedCallback(name, oldValue, newValue) + { + if(oldValue !== newValue) + { + if(name === "lang") + { + this._lang = newValue; + this.updateMessage(); + } + } + } + + static get observedAttributes() + { + return ["lang"]; + } + + get message() + { + return this._lang; + } + + set message(value) + { + this._lang = value; + this.updateMessage(); + } + + updateMessage() + { + try + { + lang = this._lang; + } + catch(e){} + } + + getGlossar() + { + //data = new URLSearchParams([["getStdType", "show"], ["obj_sname", "ND"], ["cat_sname_en", "Planning"], ["country", "WW"], ["lang", "de_DE"], ["spec_active", "1"], ["ac_class", "3"], ["pc_class", "3"], ["spec_release", "draft"]]); + + return new Promise((res, rej) => { + fetch('/annexdata/getAnnexToc', + { + body: data, + method: "post" + }) + .then(data => data.json()) + .then((json) => { + this.renderGlossar(json); + res(); + }) + .catch((error) => {this.annonymous(error);}); + }) + } + + annonymous(error) + { + const div = document.createElement("div"); + div.innerHTML = error; + + this.appendChild(div); + } + + renderGlossar(data) + { + var obj = data; + + var item_class = document.createElement("span"); + + if(obj.length < 1) + { + console.log("getToc no items: "); // + stdObj.obj_sname); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log("getToc ERROR: " + stdObj.obj_sname);} + } + catch(err) + { + //ignore + } + } + var cat_class = ""; + var catBool = true; + + for (i in obj) + { + let item_cat_title = ""; + let item_cat = obj[i].cat_class; + + if(obj[i].cat_class === "General" && obj[i].obj_sname !== "General" && catBool === true) + { + item_cat_title = obj[i].obj_sname + " " + obj[i].cat_class; + catBool = false + + } + else + { + item_cat_title = obj[i].cat_class; + } + + if(cat_class != item_cat) + { + cat_class = item_cat; + item_class = document.createElement("span"); + //item_class.setAttribute('id', item_cat); + item_class.innerHTML = `
  • ${item_cat_title}
  • `; + } + + let item = document.createElement("span"); + item.innerHTML = obj[i].toc; + item_class.appendChild(item); + + + this.appendChild(item_class); + } + //this.updateMessage(); + } + +} +customElements.define("annex-toc", AnnexToc); + + diff --git a/public/js/annex-toc/AnnexToc.js_2021-03-19_1841 b/public/js/annex-toc/AnnexToc.js_2021-03-19_1841 new file mode 100644 index 0000000..7db99ae --- /dev/null +++ b/public/js/annex-toc/AnnexToc.js_2021-03-19_1841 @@ -0,0 +1,150 @@ +var lang = 'de'; +try +{ + lang = checkLangCookie(); +} +catch(err) +{ + lang = 'de'; +} + +class AnnexToc extends HTMLElement +{ + constructor() + { + super(); + this._lang = 'de'; + } + + connectedCallback() + { + this.getGlossar(); + } + + attributeChangedCallback(name, oldValue, newValue) + { + if(oldValue !== newValue) + { + if(name === "lang") + { + this._lang = newValue; + this.updateMessage(); + } + } + } + + static get observedAttributes() + { + return ["lang"]; + } + + get message() + { + return this._lang; + } + + set message(value) + { + this._lang = value; + this.updateMessage(); + } + + updateMessage() + { + try + { + lang = this._lang; + } + catch(e){} + } + + getGlossar() + { + //data = new URLSearchParams([["getStdType", "show"], ["obj_sname", "ND"], ["cat_sname_en", "Planning"], ["country", "WW"], ["lang", "de_DE"], ["spec_active", "1"], ["ac_class", "3"], ["pc_class", "3"], ["spec_release", "draft"]]); + + return new Promise((res, rej) => { + fetch('/annexdata/getAnnexToc', + { + body: data, + method: "post" + }) + .then(data => data.json()) + .then((json) => { + this.renderGlossar(json); + res(); + }) + .catch((error) => {this.annonymous(error);}); + }) + } + + annonymous(error) + { + const div = document.createElement("div"); + div.innerHTML = error; + + this.appendChild(div); + } + + renderGlossar(data) + { + var obj = data; + + var item_class = document.createElement("span"); + + if(obj.length < 1) + { + console.log("getToc no items: "); // + stdObj.obj_sname); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log("getToc ERROR: " + stdObj.obj_sname);} + } + catch(err) + { + //ignore + } + } + var cat_class = ""; + var catBool = true; + + for (i in obj) + { + let item_cat_title = ""; + let item_cat = obj[i].cat_class; + + if(obj[i].cat_class === "General" && obj[i].obj_sname !== "General" && catBool === true) + { + item_cat_title = obj[i].obj_sname + " " + obj[i].cat_class; + catBool = false + + } + else + { + item_cat_title = obj[i].cat_class; + } + + if(cat_class != item_cat) + { + cat_class = item_cat; + item_class = document.createElement("span"); + //item_class.setAttribute('id', item_cat); + item_class.innerHTML = `
  • ${item_cat_title}
  • `; + } + + let item = document.createElement("span"); + item.innerHTML = obj[i].toc; + item_class.appendChild(item); + + + this.appendChild(item_class); + } + //this.updateMessage(); + } + +} +customElements.define("annex-toc", AnnexToc); + + diff --git a/public/js/annex-toc/cdAnnexToc.js b/public/js/annex-toc/cdAnnexToc.js new file mode 100644 index 0000000..b98240c --- /dev/null +++ b/public/js/annex-toc/cdAnnexToc.js @@ -0,0 +1,150 @@ +var lang = 'de'; +try +{ + lang = checkLangCookie(); +} +catch(err) +{ + lang = 'de'; +} + +class AnnexToc extends HTMLElement +{ + constructor() + { + super(); + this._lang = 'de'; + } + + connectedCallback() + { + this.getGlossar(); + } + + attributeChangedCallback(name, oldValue, newValue) + { + if(oldValue !== newValue) + { + if(name === "lang") + { + this._lang = newValue; + this.updateMessage(); + } + } + } + + static get observedAttributes() + { + return ["lang"]; + } + + get message() + { + return this._lang; + } + + set message(value) + { + this._lang = value; + this.updateMessage(); + } + + updateMessage() + { + try + { + lang = this._lang; + } + catch(e){} + } + + getGlossar() + { + //data = new URLSearchParams([["getStdType", "show"], ["obj_sname", "Annex B-3"], ["cat_sname_en", "Planning"], ["country", "WW"], ["lang", "de_DE"], ["spec_active", "1"], ["ac_class", "1"], ["pc_class", "1"], ["spec_release", "draft"]]); + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", document.getElementById("obj_name").value], ["cat_sname_en", document.getElementById("cat").value], ["country", document.getElementById("countries").value], ["lang", document.getElementById("lang").value], ["spec_active", "1"], ["ac_class", document.getElementById("ac_classes").value], ["pc_class", document.getElementById("pc_classes").value], ["spec_release", "released"]]); + return new Promise((res, rej) => { + fetch('/releasemgmt/getAnnexToc', + { + body: data, + method: "post" + }) + .then(data => data.json()) + .then((json) => { + this.renderGlossar(json); + res(); + }) + .catch((error) => {this.annonymous(error);}); + }) + } + + annonymous(error) + { + const div = document.createElement("div"); + div.innerHTML = error; + + this.appendChild(div); + } + + renderGlossar(data) + { + var obj = data; + + var item_class = document.createElement("span"); + + if(obj.length < 1) + { + console.log("getToc no items: "); // + stdObj.obj_sname); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log("getToc ERROR: " + stdObj.obj_sname);} + } + catch(err) + { + //ignore + } + } + var cat_class = ""; + var catBool = true; + + for (i in obj) + { + let item_cat_title = ""; + let item_cat = obj[i].cat_class; + + if(obj[i].cat_class === "General" && obj[i].obj_sname !== "General" && catBool === true) + { + item_cat_title = obj[i].obj_sname + " " + translate(obj[i].cat_class); + catBool = false + + } + else + { + item_cat_title = translate(obj[i].cat_class); + } + + if(cat_class != item_cat) + { + cat_class = item_cat; + item_class = document.createElement("span"); + //item_class.setAttribute('id', item_cat); + item_class.innerHTML = `
  • ${translate(item_cat_title)}
  • `; + } + + let item = document.createElement("span"); + item.innerHTML = obj[i].toc; + item_class.appendChild(item); + + + this.appendChild(item_class); + } + //this.updateMessage(); + } + +} +customElements.define("annex-toc", AnnexToc); + + diff --git a/public/js/annex/annex_editor.js b/public/js/annex/annex_editor.js new file mode 100644 index 0000000..377c5dc --- /dev/null +++ b/public/js/annex/annex_editor.js @@ -0,0 +1,542 @@ +// 2020-12-05 10:10 + +function delComment(id) +{ + data = new URLSearchParams([["id", id]]); + fetch("/AnnexDataComments/remove/" + id, { body: data, method: "post" }); + + document.getElementById("comment_" + id).setAttribute("width" , "25px"); + document.getElementById("comment_" + id).setAttribute("src" , "/Icons/ok.svg"); + + let txtcomment = parseInt( document.getElementById("textcomment").innerHTML ); + document.getElementById("textcomment").innerHTML = txtcomment -1; +} + + +function open_txtcomments(spec_id) +{ + console.log("open_txtcomments: " + spec_id); + + var content_list_txtcomments = document.getElementById('content_list_txtcomments'); + content_list_txtcomments.innerHTML = ''; + + fetch("/AnnexDataComments/getSpecComments/" + spec_id) + .then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + if(obj.length < 1) + { + content_list_txtcomments.innerHTML = 'kein Kommentar
    '; + return; + } + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "user_comment"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "delete"; + tr.appendChild(th); + + table.appendChild(tr); + for (i in obj) + { + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].user_comment; + tr.appendChild(td); + td = document.createElement("td"); + td.innerHTML = ''; + tr.appendChild(td); + + table.appendChild(tr); + } + content_list_txtcomments.appendChild(table); + }); + + document.getElementById("list_txtcomments").showModal(); +} + +function open_comment() +{ + document.getElementById("dialog").showModal(); +} + +function getGalleryImgs() +{ + let imgPlace = document.getElementById('Images'); + + let ulcont = document.createElement('ul'); + ulcont.setAttribute('class', 'card-wrapper'); + + fetch("/annexdata/getImages").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + let counter = 0; + for (i in Obj) + { + /* + let i_li = document.createElement('li'); + i_li.setAttribute('class', 'card'); + i_li.innerHTML = `

    ${Obj[i].name}

    Bild-Größe: ${Obj[i].size}kB,
    URL: ${Obj[i].img}

    `; + ulcont.appendChild(i_li); + */ + + let id = "img_" + counter; + let idclip = "img_" + counter + "_clip"; + let i_li = document.createElement('li'); + i_li.setAttribute('class', 'card'); + i_li.innerHTML = `URI: <mark>${Obj[i].img}</mark>

    ${Obj[i].name}

    Bild-Größe: ${Obj[i].size}kB

    `; + ulcont.appendChild(i_li); + counter++; + } + }); + + imgPlace.appendChild(ulcont); + +} + +function copyUri(id) +{ + console.log("id: " + id); + id.select(); + id.setSelectionRange(0, 99999); /* For mobile devices */ + document.execCommand("copy"); + + alert("das Bild kann nun per STRG+V eingefügt werden:\n " + id.value); +} + +function getObjects(Obj) +{ + let selectbox = document.getElementById("objects"); + + let fs = document.createDocumentFragment() ; + let cb = document.createElement( 'input' ) ; + cb.type = 'radio' ; + cb.checked = false ; + cb.id = 'objAllgemein'; + cb.name = "cbobj"; + fs.appendChild(cb) ; + let cbl = document.createTextNode(" Allgemein") ; + fs.appendChild(cbl) ; + selectbox.after(fs, " "); + selectbox.appendChild(fs) ; + + Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + cb = document.createElement( 'input' ) ; + cb.type = 'checkbox' ; + //cb.checked = false ; + cb.id = Obj[i].cat_sname_en; + cb.name = "cbobj"; + fs.appendChild(cb) ; + cbl = document.createTextNode(" " + Obj[i].cat_sname_de) ; + fs.appendChild(cbl) ; + selectbox.after(fs, " "); + selectbox.appendChild(fs) ; + document.getElementById(Obj[i].cat_sname_en).addEventListener("click", cbobjNoAllgemein); + } + } + + document.getElementById("objAllgemein").addEventListener("change", cbobjAllgemein); +} + +function getCategories(Obj) +{ + let selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + selectbox.addEventListener("click", getNextLfdnr); +} + +function getLanguages(Obj) +{ + let selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getAcClasses(Obj) +{ + let fs = document.createDocumentFragment() ; + let selectbox = document.getElementById("ac_classes"); + + Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + cb = document.createElement( 'input' ); + cb.setAttribute("type", "checkbox"); + cb.setAttribute("id", 'AC-' + Obj[i].ac_class); + cb.setAttribute("value", Obj[i].ac_class); + cb.setAttribute("name", "ac_class"); + fs.appendChild(cb) ; + cbl = document.createTextNode(" " + 'AC-' + Obj[i].ac_class) ; + fs.appendChild(cbl) ; + selectbox.after(fs, " "); + selectbox.appendChild(fs) ; + } + } +} + +function getPcClasses(Obj) +{ + let fs = document.createDocumentFragment() ; + let selectbox = document.getElementById("pc_classes"); + + Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + cb = document.createElement( 'input' ); + cb.setAttribute("type", "checkbox"); + cb.setAttribute("id", 'PC-' + Obj[i].pc_class); + cb.setAttribute("value", Obj[i].pc_class); + cb.setAttribute("name", "pc_class"); + fs.appendChild(cb) ; + cbl = document.createTextNode(" " + 'PC-' + Obj[i].pc_class) ; + fs.appendChild(cbl) ; + selectbox.after(fs, " "); + selectbox.appendChild(fs) ; + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function setSpecValidDate() +{ + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + document.getElementById("spec_valid_start").value = datestr; + yy += 1; + datestr = yy + "-" + mm + "-" + dd; + document.getElementById("spec_valid_end").value = datestr; +} + +function cbAcPC(tocheck, doit) +{ + const classes = document.getElementById(tocheck); + const cats = document.getElementById('cat'); + + if(doit) + { + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + document.getElementById("btnAc").disabled = true; + document.getElementById("btnPc").disabled = true; + + try + { + cats.options[0].disabled = false; + } + catch(err){} + toggleCheckboxes("ac_class", true); + toggleCheckboxes("pc_class", true); + } + else + { + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + document.getElementById("btnAc").disabled = false; + document.getElementById("btnPc").disabled = false; + toggleCheckboxes("ac_class"); + toggleCheckboxes("pc_class"); + } +} + +function toggleCheckboxes(tocheck, allgemein) +{ + const input = document.getElementsByName(tocheck); + let i; + + for (i = 0; i < input.length ;i++) + { + if(input[i].checked == true) + { + input[i].checked = false; + if(allgemein) + { + input[i].disabled = true; + } + } + else + { + if(! allgemein) + { + input[i].disabled = false; + input[i].checked = true; + } + } + } + + if(! allgemein) + { + input[0].checked = false; + input[0].disabled = true; + } + else + { + input[0].disabled = false; + input[0].checked = true; + } +} + +function toggleObjCheckboxes(tocheck) +{ + var checkboxes = document.getElementsByName("cbobj"); + + for (var i=0; i×'; + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "Titel"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "Objekte"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "lfdnr"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "Land"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "Sprache"; + tr.appendChild(th); + table.appendChild(tr); + for (i in obj) + { + document.getElementById('lfdnrErg').setAttribute("class", "w3-tag w3-yellow"); + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].spec_title; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].obj_sname; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].lfdnr; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].country; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].lang; + tr.appendChild(td); + table.appendChild(tr); + } + document.getElementById('lfdnrErg').appendChild(table); + document.getElementById('lfdnrErg').style.display='block'; + }); +} + +function cbobjNoAllgemein() +{ + document.getElementById("objAllgemein").checked = false; + cbAcPC("ac_classes", false); + cbAcPC("pc_classes", false); +} + +function cbobjAllgemein() +{ + const ALLGEMEIN = document.getElementById("objAllgemein"); + if(ALLGEMEIN.checked) + { + let cbName = document.getElementsByName("cbobj"); + document.getElementById("cat").selectedIndex = 0; + + for(var i=0; i < cbName.length; i++) + { + cbName[i].checked = false; + } + cbAcPC("ac_classes", true); + cbAcPC("pc_classes", true); + ALLGEMEIN.checked = true; + } + else + { + //ALLGEMEIN.checked = false; + } +} + +function doPopUp(msg) +{ + const mgsTxt = document.getElementById("msg"); + mgsTxt.innerHTML = msg; + const test = document.getElementById("test"); + test.setAttribute("style", "display: block;"); + + window.location.href='#body'; +} + + diff --git a/public/js/annex/annex_editor_upd.js b/public/js/annex/annex_editor_upd.js new file mode 100644 index 0000000..8347a60 --- /dev/null +++ b/public/js/annex/annex_editor_upd.js @@ -0,0 +1,274 @@ +// 2020-12-17 12:00 + + +function addopen_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("addclose-dialog").innerHTML = "abbrechen"; + document.getElementById("addspec_title").innerHTML = title; + document.getElementById("addspec_version").innerHTML = version; + document.getElementById("addspec_id").value = id; + document.getElementById("adddialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("addclose-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("addspec_title").innerHTML; + const spec_version = document.getElementById("addspec_version").innerHTML; + const spec_id = document.getElementById("addspec_id").value; + const user_comment = document.getElementById("adduser_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("adduser_comment").value = msg; + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function setTitle(specTitle) +{ + +} + +function setDesc(specDesc) +{ + +} + +function setObjects(objSname) +{ + let res = objSname.split(","); + + for (i = 0; i < res.length; i++) + { + try + { + document.getElementById(res[i]).checked = true; + } + catch(err) + { + if(res[i] == '') + { + // nix, harmlos + } + else if(res[i] == "General") + { + document.getElementById('objAllgemein').checked = true; + } + else + { + console.log("setObjects item: " + res[i] + " ERR: " + err); + } + } + } +} + +function setCategories(catClass) +{ + let selectbox = document.getElementById("cat"); + var options = selectbox.options.length; + + for (i = 0; i < options; i++) + { + if(selectbox.options[i].value === catClass) + { + selectbox.selectedIndex = i; + } + } +} + +function setCountry(country) +{ + +} + +function setLanguages(lang) +{ + let selectbox = document.getElementById("lang"); + var options = selectbox.options.length; + + for (i = 0; i < options; i++) + { + if(selectbox.options[i].value === lang) + { + selectbox.selectedIndex = i; + } + } +} + +function setResponsibility(responsibility) +{ + +} + +function setAcClasses(acClasses) +{ + let res = acClasses.split(","); + + for (i = 0; i < res.length; i++) + { + try + { + document.getElementById('AC-' + res[i]).checked = true; + } + catch(err) + { + if(res[i] == '') + { + // nix, harmlos + } + else + { + console.log("setAcClasses item: " + res[i] + " ERR: " + err); + } + } + } +} + +function setPcClasses(pcClasses) +{ + let res = pcClasses.split(","); + + for (i = 0; i < res.length; i++) + { + try + { + document.getElementById('PC-' + res[i]).checked = true; + } + catch(err) + { + if(res[i] == '') + { + // nix, harmlos + } + else + { + console.log("setPcClasses item: " + res[i] + " ERR: " + err); + } + } + } +} + +function setReleaseTypes(specRelease) +{ + let selectbox = document.getElementById("releases"); + + if(specRelease === "draft") + { + selectbox.selectedIndex = "0"; + } + else if(specRelease === "pre-release") + { + selectbox.selectedIndex = "1"; + } + else if(specRelease === "released") + { + selectbox.selectedIndex = "2"; + } + else if(specRelease === "expired") + { + selectbox.selectedIndex = "3"; + } + else + { + selectbox.selectedIndex = "0"; + } + + selectbox.options[2].disabled = true; + selectbox.options[3].disabled = true; +} + +function setLfdnr(lfdnr) +{ + document.getElementById("lfdnr").value = lfdnr; +} + +function setComment(specComment) +{ + +} + +function setActive(specActive) +{ + if(specActive == 0) + { + document.getElementById('spec_active').checked = false; + } + else + { + document.getElementById('spec_active').checked = true; + } + +} + +function setLegacy(gLegacy) +{ + let res = gLegacy.split(","); + + for (i = 0; i < res.length; i++) + { + try + { + document.getElementById(res[i]).checked = true; + } + catch(err) + { + if(res[i] == '') + { + // nix, harmlos + } + else + { + console.log("setLegacy item: " + res[i] + " ERR: " + err); + } + } + } +} + +function setMarker(specMarker) +{ + let selectbox = document.getElementById("marker"); + var options = selectbox.options.length; + + for (i = 0; i < options; i++) + { + if(selectbox.options[i].value === specMarker) + { + selectbox.selectedIndex = i; + } + } +} + +function setNextVersion(specVersion) +{ + let items = specVersion.split("."); + let patchlevel = Number(items[items.length -1]) + 1; + if(patchlevel < 10) + { + patchlevel = "0" + patchlevel + } + items[items.length -1] = patchlevel; + + document.getElementById("spec_version_new").value = items.join('.'); +} diff --git a/public/js/annex/annex_editor_upd.js_2021-01-01_1159 b/public/js/annex/annex_editor_upd.js_2021-01-01_1159 new file mode 100644 index 0000000..a4488bf --- /dev/null +++ b/public/js/annex/annex_editor_upd.js_2021-01-01_1159 @@ -0,0 +1,220 @@ +// 2020-12-17 12:00 + +function setTitle(specTitle) +{ + +} + +function setDesc(specDesc) +{ + +} + +function setObjects(objSname) +{ + let res = objSname.split(","); + + for (i = 0; i < res.length; i++) + { + try + { + document.getElementById(res[i]).checked = true; + } + catch(err) + { + if(res[i] == '') + { + // nix, harmlos + } + else if(res[i] == "Allgemein") + { + document.getElementById(objAllgemein).checked = true; + } + else + { + console.log("setAcClasses item: " + res[i] + " ERR: " + err); + } + } + } +} + +function setCategories(catClass) +{ + let selectbox = document.getElementById("cat"); + var options = selectbox.options.length; + + for (i = 0; i < options; i++) + { + if(selectbox.options[i].value === catClass) + { + selectbox.selectedIndex = i; + } + } +} + +function setCountry(country) +{ + +} + +function setLanguages(lang) +{ + let selectbox = document.getElementById("lang"); + var options = selectbox.options.length; + + for (i = 0; i < options; i++) + { + if(selectbox.options[i].value === lang) + { + selectbox.selectedIndex = i; + } + } +} + +function setResponsibility(responsibility) +{ + +} + +function setAcClasses(acClasses) +{ + let res = acClasses.split(","); + + for (i = 0; i < res.length; i++) + { + try + { + document.getElementById('AC-' + res[i]).checked = true; + } + catch(err) + { + if(res[i] == '') + { + // nix, harmlos + } + else + { + console.log("setAcClasses item: " + res[i] + " ERR: " + err); + } + } + } +} + +function setPcClasses(pcClasses) +{ + let res = pcClasses.split(","); + + for (i = 0; i < res.length; i++) + { + try + { + document.getElementById('PC-' + res[i]).checked = true; + } + catch(err) + { + if(res[i] == '') + { + // nix, harmlos + } + else + { + console.log("setPcClasses item: " + res[i] + " ERR: " + err); + } + } + } +} + +function setReleaseTypes(specRelease) +{ + let selectbox = document.getElementById("releases"); + + if(specRelease === "draft") + { + selectbox.selectedIndex = "0"; + } + else if(specRelease === "pre-release") + { + selectbox.selectedIndex = "1"; + } + else + { + selectbox.selectedIndex = "0"; + } + + selectbox.options[2].disabled = true; + selectbox.options[3].disabled = true; +} + +function setLfdnr(lfdnr) +{ + document.getElementById("lfdnr").value = lfdnr; +} + +function setComment(specComment) +{ + +} + +function setActive(specActive) +{ + if(specActive == 0) + { + document.getElementById('spec_active').checked = false; + } + else + { + document.getElementById('spec_active').checked = true; + } + +} + +function setLegacy(gLegacy) +{ + let res = gLegacy.split(","); + + for (i = 0; i < res.length; i++) + { + try + { + document.getElementById(res[i]).checked = true; + } + catch(err) + { + if(res[i] == '') + { + // nix, harmlos + } + else + { + console.log("setLegacy item: " + res[i] + " ERR: " + err); + } + } + } +} + +function setMarker(specMarker) +{ + let selectbox = document.getElementById("marker"); + var options = selectbox.options.length; + + for (i = 0; i < options; i++) + { + if(selectbox.options[i].value === specMarker) + { + selectbox.selectedIndex = i; + } + } +} + +function setNextVersion(specVersion) +{ + let items = specVersion.split("."); + let patchlevel = Number(items[items.length -1]) + 1; + if(patchlevel < 10) + { + patchlevel = "0" + patchlevel + } + items[items.length -1] = patchlevel; + + document.getElementById("spec_version_new").value = items.join('.'); +} diff --git a/public/js/annex/listannex.js b/public/js/annex/listannex.js new file mode 100644 index 0000000..40c197a --- /dev/null +++ b/public/js/annex/listannex.js @@ -0,0 +1,414 @@ +// 2020-12-25 16:50 + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listPlace = document.getElementById("listErg"); + listPlace.innerHTML = ""; + + let stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac = document.getElementById("ac_classes").value; + stdObj.pc = document.getElementById("pc_classes").value; + stdObj.release = document.getElementById("releases").value; + + stdObj.active = (stdObj.active == true) ? 1 : 0; + + switch(stdObj.release) + { + case '0': stdObj.release = "draft"; break; + case '1': stdObj.release = "pre-release"; break; + case '2': stdObj.release = "released"; break; + case '3': stdObj.release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', "top_" + 'General'); + let title = document.createElement("h4"); + title.innerText = 'General'; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListAnnex(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', x[i].value); + let title = document.createElement("h4"); + title.innerText = x[i].value; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListAnnex(stdObj, x[i].value) + } + } + else + { + if(stdObj.obj_sname === "General") + { + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', "top_" + 'General'); + let title = document.createElement("h4"); + title.innerText = 'General'; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListAnnex(stdObj, 'General', 'General'); + } + else + { + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', stdObj.cat_class); + let title = document.createElement("h4"); + title.innerText = stdObj.cat_class; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListAnnex(stdObj, stdObj.cat_class) + } + } + setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 1000); +} + +function setListAnnex(obj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? obj.obj_sname : obj_name; + var data; + var top_toc; + + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + data = new URLSearchParams([["getStdType", "list"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", "WW"], ["lang", obj.lang], ["spec_active", obj.active], ["ac_class", "0"], ["pc_class", "0"], ["spec_release", obj.release]]); + } + else + { + top_toc = document.getElementById(cat); + data = new URLSearchParams([["getStdType", "list"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", obj.country], ["lang", obj.lang], ["spec_active", obj.active], ["ac_class", obj.ac], ["pc_class", obj.pc], ["spec_release", obj.release]]); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length == 1 && obj[0].ERROR == "1") + { + try{console.log("setListAnnex ERROR: " + obj[0].errMsg);} + catch(err) + {} + return; + } + + let table = document.createElement("table"); + table.classList.add("w3-table-all"); + table.setAttribute('id', 'listable'); + + let header = document.createElement("thead"); + header.insertRow(0); + header.rows[0].insertCell(0); + header.rows[0].cells[0].appendChild(document.createTextNode('id')); + header.rows[0].cells[0].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(1); + header.rows[0].cells[1].appendChild(document.createTextNode('Object')); + header.rows[0].cells[1].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(2); + header.rows[0].cells[2].appendChild(document.createTextNode("Title")); + header.rows[0].cells[2].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(3); + header.rows[0].cells[3].appendChild(document.createTextNode("Desc")); + header.rows[0].cells[3].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(4); + header.rows[0].cells[4].appendChild(document.createTextNode("active")); + header.rows[0].cells[4].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(5); + header.rows[0].cells[5].appendChild(document.createTextNode("version")); + header.rows[0].cells[5].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(6); + header.rows[0].cells[6].appendChild(document.createTextNode("country")); + header.rows[0].cells[6].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(7); + header.rows[0].cells[7].appendChild(document.createTextNode("lfdnr")); + header.rows[0].cells[7].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(8); + header.rows[0].cells[8].appendChild(document.createTextNode("cat")); + header.rows[0].cells[8].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(9); + header.rows[0].cells[9].appendChild(document.createTextNode("marker")); + header.rows[0].cells[9].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(10); + header.rows[0].cells[10].appendChild(document.createTextNode("Baustein")); + header.rows[0].cells[10].setAttribute('class', 'w3-red w3-center'); + header.rows[0].cells[10].setAttribute('style', 'font-weight: bold; width:160px;'); + table.appendChild(header); + + let tbody = document.createElement("tbody"); + table.appendChild(tbody); + + var count = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(count) + obj.length; + + for (i in obj) + { + if(!obj[i].hasOwnProperty('ERROR')) + { + tbody.insertRow(i); + tbody.rows[i].insertCell(0); + tbody.rows[i].cells[0].appendChild(document.createTextNode(obj[i].id)); + tbody.rows[i].insertCell(1); + tbody.rows[i].cells[1].appendChild(document.createTextNode(obj[i].obj_sname)); + tbody.rows[i].insertCell(2); + tbody.rows[i].cells[2].appendChild(document.createTextNode(obj[i].spec_title)); + tbody.rows[i].insertCell(3); + tbody.rows[i].cells[3].appendChild(document.createTextNode(obj[i].spec_desc)); + tbody.rows[i].insertCell(4); + tbody.rows[i].cells[4].appendChild(document.createTextNode(obj[i].spec_active)); + tbody.rows[i].insertCell(5); + tbody.rows[i].cells[5].appendChild(document.createTextNode(obj[i].spec_version)); + tbody.rows[i].insertCell(6); + tbody.rows[i].cells[6].appendChild(document.createTextNode(obj[i].country)); + tbody.rows[i].insertCell(7); + tbody.rows[i].cells[7].appendChild(document.createTextNode(obj[i].lfdnr)); + tbody.rows[i].insertCell(8); + tbody.rows[i].cells[8].appendChild(document.createTextNode(obj[i].cat_class)); + tbody.rows[i].insertCell(9); + tbody.rows[i].cells[9].appendChild(document.createTextNode(obj[i].spec_marker)); + tbody.rows[i].insertCell(10); + a = document.createElement('a'); + a.href = '/annexdata/show/' + obj[i].id; + a.title= 'Show'; + a.style = 'text-decoration: none; background: none;'; + a.innerHTML = ''; + tbody.rows[i].cells[10].appendChild(a); + a = document.createElement('a'); + a.href = '/annexdata/save/' + obj[i].id; + a.title = 'Q-Edit'; + a.style = 'text-decoration: none; background: none;'; + a.innerHTML = ''; + tbody.rows[i].cells[10].appendChild(a); + a = document.createElement('a'); + a.href = '/annexdata/editor_upd/' + obj[i].id; + a.title = 'Editor'; + a.style = 'text-decoration: none; background: none;'; + a.innerHTML = ''; + tbody.rows[i].cells[10].appendChild(a); + a = document.createElement('a'); + a.href = '/annexdata/show/' + obj[i].id; + a.title = 'delete'; + a.style = 'text-decoration: none; background: none;'; + a.innerHTML = ''; + tbody.rows[i].cells[10].appendChild(a); + } + else + { + document.getElementById("redmsg").innerHTML = "Fehler passiert: " + obj[i].errMsg; + } + + //document.getElementById(cat).appendChild(table); + top_toc.appendChild(table); + + } + + }); +} diff --git a/public/js/annex/liststd.js b/public/js/annex/liststd.js new file mode 100644 index 0000000..304addf --- /dev/null +++ b/public/js/annex/liststd.js @@ -0,0 +1,401 @@ +// 2020-12-25 16:50 + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "Allgemein"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].obj_lname_en, Obj[i].obj_sname); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_en, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlLstStds() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listPlace = document.getElementById("listErg"); + listPlace.innerHTML = ""; + + let stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac = document.getElementById("ac_classes").value; + stdObj.pc = document.getElementById("pc_classes").value; + stdObj.release = document.getElementById("releases").value; + + stdObj.active = (stdObj.active == true) ? 1 : 0; + + switch(stdObj.release) + { + case '0': stdObj.release = "draft"; break; + case '1': stdObj.release = "pre-release"; break; + case '2': stdObj.release = "released"; break; + case '3': stdObj.release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', "top_" + 'Allgemein'); + let title = document.createElement("h4"); + title.innerText = 'Allgemein'; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListStds(stdObj, 'Allgemein', 'Allgemein'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', x[i].value); + let title = document.createElement("h4"); + title.innerText = x[i].value; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListStds(stdObj, x[i].value) + } + } + else + { + if(stdObj.obj_sname === "Allgemein") + { + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', "top_" + 'Allgemein'); + let title = document.createElement("h4"); + title.innerText = 'Allgemein'; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListStds(stdObj, 'Allgemein', 'Allgemein'); + } + else + { + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', stdObj.cat_class); + let title = document.createElement("h4"); + title.innerText = stdObj.cat_class; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListStds(stdObj, stdObj.cat_class) + } + } + setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 1000); +} + +function setListStds(obj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? obj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "list"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", obj.country], ["lang", obj.lang], ["spec_active", obj.active], ["ac_class", obj.ac], ["pc_class", obj.pc], ["spec_release", obj.release]]); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/standardsdata/getStdList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + let table = document.createElement("table"); + table.classList.add("w3-table-all"); + table.setAttribute('id', 'listable'); + + let header = document.createElement("thead"); + header.insertRow(0); + header.rows[0].insertCell(0); + header.rows[0].cells[0].appendChild(document.createTextNode('id')); + header.rows[0].cells[0].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(1); + header.rows[0].cells[1].appendChild(document.createTextNode('Object')); + header.rows[0].cells[1].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(2); + header.rows[0].cells[2].appendChild(document.createTextNode("Title")); + header.rows[0].cells[2].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(3); + header.rows[0].cells[3].appendChild(document.createTextNode("Desc")); + header.rows[0].cells[3].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(4); + header.rows[0].cells[4].appendChild(document.createTextNode("active")); + header.rows[0].cells[4].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(5); + header.rows[0].cells[5].appendChild(document.createTextNode("version")); + header.rows[0].cells[5].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(6); + header.rows[0].cells[6].appendChild(document.createTextNode("country")); + header.rows[0].cells[6].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(7); + header.rows[0].cells[7].appendChild(document.createTextNode("lfdnr")); + header.rows[0].cells[7].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(8); + header.rows[0].cells[8].appendChild(document.createTextNode("cat")); + header.rows[0].cells[8].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(9); + header.rows[0].cells[9].appendChild(document.createTextNode("marker")); + header.rows[0].cells[9].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(10); + header.rows[0].cells[10].appendChild(document.createTextNode("Baustein")); + header.rows[0].cells[10].setAttribute('class', 'w3-red w3-center'); + header.rows[0].cells[10].setAttribute('style', 'font-weight: bold; width:150px;'); + table.appendChild(header); + + let tbody = document.createElement("tbody"); + table.appendChild(tbody); + + var count = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(count) + obj.length; + + for (i in obj) + { + if(!obj[i].hasOwnProperty('ERROR')) + { + tbody.insertRow(i); + tbody.rows[i].insertCell(0); + tbody.rows[i].cells[0].appendChild(document.createTextNode(obj[i].id)); + tbody.rows[i].insertCell(1); + tbody.rows[i].cells[1].appendChild(document.createTextNode(obj[i].obj_sname)); + tbody.rows[i].insertCell(2); + tbody.rows[i].cells[2].appendChild(document.createTextNode(obj[i].spec_title)); + tbody.rows[i].insertCell(3); + tbody.rows[i].cells[3].appendChild(document.createTextNode(obj[i].spec_desc)); + tbody.rows[i].insertCell(4); + tbody.rows[i].cells[4].appendChild(document.createTextNode(obj[i].spec_active)); + tbody.rows[i].insertCell(5); + tbody.rows[i].cells[5].appendChild(document.createTextNode(obj[i].spec_version)); + tbody.rows[i].insertCell(6); + tbody.rows[i].cells[6].appendChild(document.createTextNode(obj[i].country)); + tbody.rows[i].insertCell(7); + tbody.rows[i].cells[7].appendChild(document.createTextNode(obj[i].lfdnr)); + tbody.rows[i].insertCell(8); + tbody.rows[i].cells[8].appendChild(document.createTextNode(obj[i].cat_class)); + tbody.rows[i].insertCell(9); + a = document.createElement('a'); + a.href = '/standardsdata/show/' + obj[i].id; + a.title= 'Show'; + a.style = 'text-decoration: none'; + a.innerHTML = '    '; + tbody.rows[i].cells[9].appendChild(a); + a = document.createElement('a'); + a.href = '/standardsdata/save/' + obj[i].id; + a.title = 'Q-Edit'; + a.style = 'text-decoration: none'; + a.innerHTML = '    '; + tbody.rows[i].cells[9].appendChild(a); + a = document.createElement('a'); + a.href = '/standardsdata/editor_upd/' + obj[i].id; + a.title = 'Editor'; + a.style = 'text-decoration: none'; + a.innerHTML = '    '; + tbody.rows[i].cells[9].appendChild(a); + a = document.createElement('a'); + a.href = '/standardsdata/show/' + obj[i].id; + a.title = 'delete'; + a.style = 'text-decoration: none'; + a.innerHTML = ''; + tbody.rows[i].cells[9].appendChild(a); + } + else + { + document.getElementById("redmsg").innerHTML = "Fehler passiert: " + obj[i].errMsg; + } + + //document.getElementById(cat).appendChild(table); + top_toc.appendChild(table); + + } + + }); +} diff --git a/public/js/annex/liststd.js_2020-12-25_1650 b/public/js/annex/liststd.js_2020-12-25_1650 new file mode 100644 index 0000000..74b281c --- /dev/null +++ b/public/js/annex/liststd.js_2020-12-25_1650 @@ -0,0 +1,372 @@ +// 2020-12-22 10:47 + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "Allgemein"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].obj_lname_en, Obj[i].obj_sname); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_en, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlLstStds() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listPlace = document.getElementById("listErg"); + listPlace.innerHTML = ""; + + let stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac = document.getElementById("ac_classes").value; + stdObj.pc = document.getElementById("pc_classes").value; + stdObj.release = document.getElementById("releases").value; + + stdObj.active = (stdObj.active == true) ? 1 : 0; + + switch(stdObj.release) + { + case '0': stdObj.release = "draft"; break; + case '1': stdObj.release = "pre-release"; break; + case '2': stdObj.release = "released"; break; + case '3': stdObj.release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', "top_" + 'Allgemein'); + let title = document.createElement("h4"); + title.innerText = x[i].value; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListStds(stdObj, 'Allgemein', 'Allgemein'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', x[i].value); + let title = document.createElement("h4"); + title.innerText = x[i].value; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListStds(stdObj, x[i].value) + } + } + else + { + let catPlace = document.createElement("article"); + catPlace.setAttribute('id', stdObj.cat_class); + let title = document.createElement("h4"); + title.innerText = stdObj.cat_class; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + setListStds(stdObj, stdObj.cat_class) + } +} + +function setListStds(obj, cat, obj_name)) +{ + data = new URLSearchParams([["getStdType", "list"], ["obj_sname", obj.obj_sname], ["cat_sname_en", cat], ["country", obj.country], ["lang", obj.lang], ["spec_active", obj.active], ["ac_class", obj.ac], ["pc_class", obj.pc], ["spec_release", obj.release]]); + + fetch("/standardsdata/getStdList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + let table = document.createElement("table"); + table.classList.add("w3-table-all"); + table.setAttribute('id', 'listable'); + + let header = document.createElement("thead"); + header.insertRow(0); + header.rows[0].insertCell(0); + header.rows[0].cells[0].appendChild(document.createTextNode('id')); + header.rows[0].cells[0].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(1); + header.rows[0].cells[1].appendChild(document.createTextNode('Object')); + header.rows[0].cells[1].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(2); + header.rows[0].cells[2].appendChild(document.createTextNode("Title")); + header.rows[0].cells[2].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(3); + header.rows[0].cells[3].appendChild(document.createTextNode("Desc")); + header.rows[0].cells[3].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(4); + header.rows[0].cells[4].appendChild(document.createTextNode("active")); + header.rows[0].cells[4].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(5); + header.rows[0].cells[5].appendChild(document.createTextNode("version")); + header.rows[0].cells[5].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(6); + header.rows[0].cells[6].appendChild(document.createTextNode("country")); + header.rows[0].cells[6].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(7); + header.rows[0].cells[7].appendChild(document.createTextNode("lfdnr")); + header.rows[0].cells[7].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(8); + header.rows[0].cells[8].appendChild(document.createTextNode("cat")); + header.rows[0].cells[8].setAttribute('style', 'font-weight: bold;'); + header.rows[0].insertCell(9); + header.rows[0].cells[9].appendChild(document.createTextNode("Baustein")); + header.rows[0].cells[9].setAttribute('class', 'w3-red w3-center'); + header.rows[0].cells[9].setAttribute('style', 'font-weight: bold; width:150px;'); + table.appendChild(header); + + let tbody = document.createElement("tbody"); + table.appendChild(tbody); + + var count = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(count) + obj.length; + + for (i in obj) + { + if(!obj[i].hasOwnProperty('ERROR')) + { + tbody.insertRow(i); + tbody.rows[i].insertCell(0); + tbody.rows[i].cells[0].appendChild(document.createTextNode(obj[i].id)); + tbody.rows[i].insertCell(1); + tbody.rows[i].cells[1].appendChild(document.createTextNode(obj[i].obj_sname)); + tbody.rows[i].insertCell(2); + tbody.rows[i].cells[2].appendChild(document.createTextNode(obj[i].spec_title)); + tbody.rows[i].insertCell(3); + tbody.rows[i].cells[3].appendChild(document.createTextNode(obj[i].spec_desc)); + tbody.rows[i].insertCell(4); + tbody.rows[i].cells[4].appendChild(document.createTextNode(obj[i].spec_active)); + tbody.rows[i].insertCell(5); + tbody.rows[i].cells[5].appendChild(document.createTextNode(obj[i].spec_version)); + tbody.rows[i].insertCell(6); + tbody.rows[i].cells[6].appendChild(document.createTextNode(obj[i].country)); + tbody.rows[i].insertCell(7); + tbody.rows[i].cells[7].appendChild(document.createTextNode(obj[i].lfdnr)); + tbody.rows[i].insertCell(8); + tbody.rows[i].cells[8].appendChild(document.createTextNode(obj[i].cat_class)); + tbody.rows[i].insertCell(9); + a = document.createElement('a'); + a.href = '/standardsdata/show/' + obj[i].id; + a.title= 'Show'; + a.style = 'text-decoration: none'; + a.innerHTML = '    '; + tbody.rows[i].cells[9].appendChild(a); + a = document.createElement('a'); + a.href = '/standardsdata/save/' + obj[i].id; + a.title = 'Q-Edit'; + a.style = 'text-decoration: none'; + a.innerHTML = '    '; + tbody.rows[i].cells[9].appendChild(a); + a = document.createElement('a'); + a.href = '/standardsdata/editor_upd/' + obj[i].id; + a.title = 'Editor'; + a.style = 'text-decoration: none'; + a.innerHTML = '    '; + tbody.rows[i].cells[9].appendChild(a); + a = document.createElement('a'); + a.href = '/standardsdata/show/' + obj[i].id; + a.title = 'delete'; + a.style = 'text-decoration: none'; + a.innerHTML = ''; + tbody.rows[i].cells[9].appendChild(a); + } + else + { + document.getElementById("redmsg").innerHTML = "Fehler passiert: " + obj[i].errMsg; + } + + document.getElementById(cat).appendChild(table); + //document.getElementById("listErg").appendChild(table); + + } + + }); +} diff --git a/public/js/annex/printcdannex.js b/public/js/annex/printcdannex.js new file mode 100644 index 0000000..7c0ecfd --- /dev/null +++ b/public/js/annex/printcdannex.js @@ -0,0 +1,820 @@ +// 2020-12-25 16:50 + +// i18n +var translate; +// pre-release +var prereleaseArr = new Array(); + + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function delComment(id, spec_id) +{ + data = new URLSearchParams([["id", id]]); + fetch("/AnnexDataComments/remove/" + id, { body: data, method: "post" }); + + document.getElementById("comment_" + id).setAttribute("width" , "25px"); + document.getElementById("comment_" + id).setAttribute("src" , "/Icons/ok.svg"); + + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + if(txtcomment === 1) + { + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-light-blue'); + } + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment -1; +} + +function open_txtcomments(spec_id) +{ + //console.log("open_txtcomments: " + spec_id); + + var content_list_txtcomments = document.getElementById('content_list_txtcomments'); + content_list_txtcomments.innerHTML = ''; + + fetch("/AnnexDataComments/getSpecComments/" + spec_id) + .then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + if(obj.length < 1) + { + content_list_txtcomments.innerHTML = 'kein Kommentar
    '; + return; + } + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "user_comment"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "delete"; + tr.appendChild(th); + + table.appendChild(tr); + for (i in obj) + { + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].user_comment; + tr.appendChild(td); + td = document.createElement("td"); + td.innerHTML = ''; + tr.appendChild(td); + + table.appendChild(tr); + } + content_list_txtcomments.appendChild(table); + }); + + document.getElementById("list_txtcomments").showModal(); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment +1; + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-yellow'); + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + document.getElementById("prelCount").innerHTML = "0"; + document.getElementById("prerel").style.visibility = "hidden"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + prereleaseArr = []; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + stdObj.release_id = document.getElementById("release_id").value; + stdObj.spec_active = 1; + + // load translation + getLang(stdObj.lang); + + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + + + document.getElementById('btnprint').style.display='block'; + //setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); + document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; + + setTimeout(() => { + let pcount = document.querySelectorAll('span[data-title*="title"]'); + let counter = 1; + for(i = 0; i < pcount.length; i++) + { + let c = pcount[i].innerHTML; + //pcount[i].childNodes[0].innerHTML = 1 + " " + c; + pcount[i].innerHTML = counter++ + ". " + c; + //console.log("data: " + c + " " + pcount[i].childNodes[0].innerHTML); + } + }, 1000); + +} + +function doPrintAnnex(obj_sname, ac_class, pc_class, country, lang, spec_release, release_id) +{ + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = obj_sname; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = country; + stdObj.lang = lang; + stdObj.spec_active = 1; + stdObj.spec_compl = 1; + stdObj.ac_class = ac_class; + stdObj.pc_class = pc_class; + stdObj.spec_release = spec_release; + stdObj.release_id = release_id; + stdObj.spec_active = 1; + + // load translation + getLang(stdObj.lang); + + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + //showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + + + setTimeout(() => { + let pcount = document.querySelectorAll('span[data-title*="title"]'); + let counter = 1; + for(i = 0; i < pcount.length; i++) + { + let c = pcount[i].innerHTML; + //pcount[i].childNodes[0].innerHTML = 1 + " " + c; + pcount[i].innerHTML = counter++ + ". " + c; + //console.log("data: " + c + " " + pcount[i].childNodes[0].innerHTML); + } + }, 1000); +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + if(obj_name == 'General') + { + console.log("General: " + cat + " " + obj_name); + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", "WW"], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", "0"], ["pc_class", "0"], ["spec_release", stdObj.spec_release]]); + } + else + { + console.log("General else " + obj_name); + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + } + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/releasemgmt/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + //article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + article.innerHTML = `
     
    ${obj_name} ${translate(cat)}`; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + //article.innerHTML = `

    ${translate(cat)}

    `; + article.innerHTML = `
     
    ${translate(cat)}`; + } + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = ' '; + section_mnu += '    '; + section_mnu += ' '; + + if(parseInt(obj[i].comments_count) > 0) + { + section_mnu += '' + obj[i].comments_count + ' '; + } + else + { + section_mnu += '0    '; + } + + section_mnu += ' '; + section_mnu += ' '; + section_mnu += '    '; + section_mnu += '    '; + + // release btn + if(obj[i].spec_release == 'pre-release') + { + section_mnu += ''; + } + else if(obj[i].spec_release == 'released') + { + let counter = parseInt(document.getElementById("prelCount").innerHTML); + document.getElementById("prelCount").innerHTML = counter + 1; + section_mnu += 'released'; + } + section_head.innerHTML = obj[i].spec_version + " - " + datestr; // + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + + /* if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + */ + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(id) +{ + let relBtn = document.getElementById(`relBtn_${id}`); + let counter = parseInt(document.getElementById("prelCount").innerHTML); + const txtCounts = parseInt(document.getElementById('greennotice').innerHTML); + + let css = relBtn.getAttribute("class"); + if(css != "w3-green") + { + relBtn.setAttribute("class", "w3-green"); + //console.log('setRelease: ' + id + " count: " + `relBtn_${id}`); + + document.getElementById("prelMsg").innerHTML = '↔ Released:'; + document.getElementById("prelCount").innerHTML = counter + 1; + document.getElementById("prerel").style.visibility="visible"; + prereleaseArr.push(id); + } + else + { + relBtn.removeAttribute("class"); + document.getElementById("prelCount").innerHTML = counter - 1; + + let dCount = prereleaseArr.indexOf(id); + prereleaseArr.splice(dCount, 1); + } + + counter = parseInt(document.getElementById("prelCount").innerHTML); + console.info("Bausteine: " + txtCounts + " Counter: " + counter); + if(txtCounts === counter) + { + document.getElementById("prerel").style.color = "green"; + document.getElementById('prelDoBtn').style.visibility = "visible"; + } + else + { + document.getElementById("prerel").style.color = "black"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + } +} + +function doprelDoBtn() +{ + + //console.log(prereleaseArr.join()); + + for(let i=0; i < prereleaseArr.length; i++) + { + data = new URLSearchParams([["id", prereleaseArr[i]]]); + fetch("/annexdata/upReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `Baustein ${prereleaseArr[i]} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('upRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler upPrelease: " + error + " " + data; }); + } + + //doRelease + + // nicht nötig -> server utc + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + var hh = d.getHours(); + var m = d.getMinutes(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + if(hh < 10) + { + hh = "0" + hh; + } + if(m < 10) + { + m = "0" + m; + } + let datestr = yy + "-" + mm + "-" + dd + " " + hh + ":" + m; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.ac_classes = document.getElementById("ac_classes").value; + stdObj.pc_classes = document.getElementById("pc_classes").value; + stdObj.relrequest_date = datestr; + + data = new URLSearchParams([["release_id", stdObj.release_id]]); + fetch("/annexdata/doReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `${stdObj.obj_sname} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('doReleased NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler doReleased: " + error + " " + data; }); + + document.getElementById('prelDoBtn').style.visibility = "hidden"; +} + +function getSpec(id, sect, stdObj) +{ + fetch("/releasemgmt/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anforderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G:
    Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + // page-break + //repl = repl.replace("{{page-break + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/printciannex.js b/public/js/annex/printciannex.js new file mode 100644 index 0000000..2964139 --- /dev/null +++ b/public/js/annex/printciannex.js @@ -0,0 +1,788 @@ +// 2020-12-25 16:50 + +// i18n +var translate; +// pre-release +var prereleaseArr = new Array(); + + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function delComment(id, spec_id) +{ + data = new URLSearchParams([["id", id]]); + fetch("/AnnexDataComments/remove/" + id, { body: data, method: "post" }); + + document.getElementById("comment_" + id).setAttribute("width" , "25px"); + document.getElementById("comment_" + id).setAttribute("src" , "/Icons/ok.svg"); + + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + if(txtcomment === 1) + { + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-light-blue'); + } + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment -1; +} + +function open_txtcomments(spec_id) +{ + //console.log("open_txtcomments: " + spec_id); + + var content_list_txtcomments = document.getElementById('content_list_txtcomments'); + content_list_txtcomments.innerHTML = ''; + + fetch("/AnnexDataComments/getSpecComments/" + spec_id) + .then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + if(obj.length < 1) + { + content_list_txtcomments.innerHTML = 'kein Kommentar
    '; + return; + } + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "user_comment"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "delete"; + tr.appendChild(th); + + table.appendChild(tr); + for (i in obj) + { + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].user_comment; + tr.appendChild(td); + td = document.createElement("td"); + td.innerHTML = ''; + tr.appendChild(td); + + table.appendChild(tr); + } + content_list_txtcomments.appendChild(table); + }); + + document.getElementById("list_txtcomments").showModal(); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment +1; + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-yellow'); + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + document.getElementById("prelCount").innerHTML = "0"; + document.getElementById("prerel").style.visibility = "hidden"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + prereleaseArr = []; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + stdObj.release_id = document.getElementById("release_id").value; + stdObj.spec_active = 1; + + + if(stdObj.spec_release === 'pre-released' || stdObj.spec_release === 'pre-released review') + { + stdObj.spec_release = 'pre-release'; + } + + + // load translation + try { + getLang(stdObj.lang); + } + catch(err) + { + //ignore + } + + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + //const x = document.getElementById('cat'); + let x = ["General","Planning", "Environment", "Construction","Power","Safety","Security","Management","Operations","Appendix"]; + + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i]); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i]); + } + + document.getElementById('btnprint').style.display='block'; + //setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); + document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; + + setTimeout(() => { + let pcount = document.querySelectorAll('span[data-title*="title"]'); + let counter = 1; + for(i = 0; i < pcount.length; i++) + { + let c = pcount[i].innerHTML; + //pcount[i].childNodes[0].innerHTML = 1 + " " + c; + pcount[i].innerHTML = counter++ + ". " + c; + //console.log("data: " + c + " " + pcount[i].childNodes[0].innerHTML); + } + }, 1000); + +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + //article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + article.innerHTML = `
     
    ${obj_name} ${translate(cat)}`; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + //article.innerHTML = `

    ${translate(cat)}

    `; + article.innerHTML = `
     
    ${translate(cat)}`; + } + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = ' '; + section_mnu += '    '; + section_mnu += ' '; + + if(parseInt(obj[i].comments_count) > 0) + { + section_mnu += '' + obj[i].comments_count + ' '; + } + else + { + section_mnu += '0    '; + } + + section_mnu += ' '; + section_mnu += ' '; + section_mnu += '    '; + section_mnu += '    '; + + // release btn + if(obj[i].spec_release == 'pre-release') + { + section_mnu += ''; + } + else if(obj[i].spec_release == 'released') + { + let counter = parseInt(document.getElementById("prelCount").innerHTML); + document.getElementById("prelCount").innerHTML = counter + 1; + section_mnu += 'released'; + } + section_head.innerHTML = obj[i].spec_title + " " + obj[i].spec_version + " vom " + datestr; // + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(id) +{ + let relBtn = document.getElementById(`relBtn_${id}`); + let counter = parseInt(document.getElementById("prelCount").innerHTML); + const txtCounts = parseInt(document.getElementById('greennotice').innerHTML); + + let css = relBtn.getAttribute("class"); + if(css != "w3-green") + { + relBtn.setAttribute("class", "w3-green"); + //console.log('setRelease: ' + id + " count: " + `relBtn_${id}`); + + document.getElementById("prelMsg").innerHTML = '↔ Released:'; + document.getElementById("prelCount").innerHTML = counter + 1; + document.getElementById("prerel").style.visibility="visible"; + prereleaseArr.push(id); + } + else + { + relBtn.removeAttribute("class"); + document.getElementById("prelCount").innerHTML = counter - 1; + + let dCount = prereleaseArr.indexOf(id); + prereleaseArr.splice(dCount, 1); + } + + counter = parseInt(document.getElementById("prelCount").innerHTML); + console.info("Bausteine: " + txtCounts + " Counter: " + counter); + if(txtCounts === counter) + { + document.getElementById("prerel").style.color = "green"; + document.getElementById('prelDoBtn').style.visibility = "visible"; + } + else + { + document.getElementById("prerel").style.color = "black"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + } +} + +function doprelDoBtn() +{ + + //console.log(prereleaseArr.join()); + + for(let i=0; i < prereleaseArr.length; i++) + { + data = new URLSearchParams([["id", prereleaseArr[i]]]); + fetch("/annexdata/upReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR == "0") + { + document.getElementById("greenmsg").innerHTML = `Baustein ${prereleaseArr[i]} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('upRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler upRelease: " + error + " " + data; }); + } + + //doRelease + + // nicht nötig -> server utc + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + var hh = d.getHours(); + var m = d.getMinutes(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + if(hh < 10) + { + hh = "0" + hh; + } + if(m < 10) + { + m = "0" + m; + } + let datestr = yy + "-" + mm + "-" + dd + " " + hh + ":" + m; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.ac_classes = document.getElementById("ac_classes").value; + stdObj.pc_classes = document.getElementById("pc_classes").value; + stdObj.release_id = document.getElementById("release_id").value; + stdObj.relrequest_date = datestr; + + data = new URLSearchParams([["release_id", stdObj.release_id]]); + fetch("/annexdata/doReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR == "0") + { + document.getElementById("greenmsg").innerHTML = `${stdObj.obj_sname} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('doReleased NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler doReleased: " + error + " " + data; }); + + document.getElementById('prelDoBtn').style.visibility = "hidden"; +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + // LenkInfo + if(stdObj.spec_release !== "released") + { + repl = repl.replace("{{lenkinfo_spec_release}}", `${stdObj.spec_release} - nicht freigegeben`); + } + else + { + repl = repl.replace("{{lenkinfo_spec_release}}", stdObj.spec_release); + } + repl = repl.replace("{{lenkinfo_specrelease}}", stdObj.spec_release); + repl = repl.replace("{{lenkinfo_obj_name}}", stdObj.obj_sname); + repl = repl.replace("{{lenkinfo_ac_class}}", stdObj.ac_class); + repl = repl.replace("{{lenkinfo_pc_class}}", stdObj.pc_class); + repl = repl.replace("{{lenkinfo_country}}", stdObj.country); + repl = repl.replace("{{lenkinfo_lang}}", stdObj.lang); + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anfoderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G:
    Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + // page-break + //repl = repl.replace("{{page-break + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannex.js b/public/js/annex/showannex.js new file mode 100644 index 0000000..2a61124 --- /dev/null +++ b/public/js/annex/showannex.js @@ -0,0 +1,822 @@ +// 2020-12-25 16:50 + +// i18n +var translate; +// pre-release +var prereleaseArr = new Array(); + + +function getLang(lang) +{ + if(! lang) + { + lang = document.getElementById("lang").value; + } + + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function delComment(id, spec_id) +{ + data = new URLSearchParams([["id", id]]); + fetch("/AnnexDataComments/remove/" + id, { body: data, method: "post" }); + + document.getElementById("comment_" + id).setAttribute("width" , "25px"); + document.getElementById("comment_" + id).setAttribute("src" , "/Icons/ok.svg"); + + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + if(txtcomment === 1) + { + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-light-blue'); + } + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment -1; +} + +function open_txtcomments(spec_id) +{ + //console.log("open_txtcomments: " + spec_id); + + var content_list_txtcomments = document.getElementById('content_list_txtcomments'); + content_list_txtcomments.innerHTML = ''; + + fetch("/AnnexDataComments/getSpecComments/" + spec_id) + .then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + if(obj.length < 1) + { + content_list_txtcomments.innerHTML = 'kein Kommentar
    '; + return; + } + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "user_comment"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "delete"; + tr.appendChild(th); + + table.appendChild(tr); + for (i in obj) + { + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].user_comment; + tr.appendChild(td); + td = document.createElement("td"); + td.innerHTML = ''; + tr.appendChild(td); + + table.appendChild(tr); + } + content_list_txtcomments.appendChild(table); + }); + + document.getElementById("list_txtcomments").showModal(); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment +1; + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-yellow'); + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } + document.getElementById("lang").addEventListener("click", function(){ getLang(document.getElementById("lang").value); }); +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + document.getElementById("prelCount").innerHTML = "0"; + document.getElementById("prerel").style.visibility = "hidden"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + + document.getElementById('btnprint').style.display = "none"; + + prereleaseArr = []; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // load translation + try { + getLang(stdObj.lang); + } + catch(err) + { + //ignore + } + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } + if(stdObj.spec_release === "draft") + { + document.getElementById('btnprint').style.display='block'; + } + + //setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); + document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; + + setTimeout(() => { + let pcount = document.querySelectorAll('span[data-title*="title"]'); + // document.getElementById("redmsg").innerHTML = "pbreak: " + pcount.length; + let counter = 1; + for(i = 0; i < pcount.length; i++) + { + let c = pcount[i].innerHTML; + //pcount[i].childNodes[0].innerHTML = 1 + " " + c; + pcount[i].innerHTML = counter++ + ". " + c; + //console.log("data: " + c + " " + pcount[i].childNodes[0].innerHTML); + } + }, 1000); + +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + //article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + article.innerHTML = `
     
    ${obj_name} ${translate(cat)}`; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + //article.innerHTML = `

    ${translate(cat)}

    `; + article.innerHTML = `
     
    ${translate(cat)}`; + } + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + //section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = ' '; + section_mnu += '    '; + section_mnu += ' '; + + if(parseInt(obj[i].comments_count) > 0) + { + section_mnu += '' + obj[i].comments_count + ' '; + } + else + { + section_mnu += '0    '; + } + + section_mnu += ' '; + section_mnu += ' '; + section_mnu += '    '; + section_mnu += '    '; + + // release btn + if(obj[i].spec_release == 'draft') + { + section_mnu += ''; + } + else if(obj[i].spec_release == 'pre-release') + { + let counter = parseInt(document.getElementById("prelCount").innerHTML); + document.getElementById("prelCount").innerHTML = counter + 1; + section_mnu += 'pre-released'; + } + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(id) +{ + let relBtn = document.getElementById(`relBtn_${id}`); + let counter = parseInt(document.getElementById("prelCount").innerHTML); + const txtCounts = parseInt(document.getElementById('greennotice').innerHTML); + + let css = relBtn.getAttribute("class"); + if(css != "w3-green") + { + relBtn.setAttribute("class", "w3-green"); + //console.log('setRelease: ' + id + " count: " + `relBtn_${id}`); + + document.getElementById("prelMsg").innerHTML = '↔ Pre-Release:'; + document.getElementById("prelCount").innerHTML = counter + 1; + document.getElementById("prerel").style.visibility="visible"; + prereleaseArr.push(id); + } + else + { + relBtn.removeAttribute("class"); + document.getElementById("prelCount").innerHTML = counter - 1; + + let dCount = prereleaseArr.indexOf(id); + prereleaseArr.splice(dCount, 1); + } + + counter = parseInt(document.getElementById("prelCount").innerHTML); + console.info("Bausteine: " + txtCounts + " Counter: " + counter); + if(txtCounts === counter) + { + document.getElementById("prerel").style.color = "green"; + document.getElementById('prelDoBtn').style.visibility = "visible"; + } + else + { + document.getElementById("prerel").style.color = "black"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + } +} + +function doprelDoBtn() +{ + + //console.log(prereleaseArr.join()); + + for(let i=0; i < prereleaseArr.length; i++) + { + data = new URLSearchParams([["id", prereleaseArr[i]]]); + fetch("/annexdata/upPrelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR == "0") + { + document.getElementById("greenmsg").innerHTML = `Baustein ${prereleaseArr[i]} auf pre-release gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('upPrelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler upPrelease: " + error + " " + data; }); + } + + //doPreRelease + + // nicht nötig -> server utc + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + var hh = d.getHours(); + var m = d.getMinutes(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + if(hh < 10) + { + hh = "0" + hh; + } + if(m < 10) + { + m = "0" + m; + } + let datestr = yy + "-" + mm + "-" + dd + " " + hh + ":" + m; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.ac_classes = document.getElementById("ac_classes").value; + stdObj.pc_classes = document.getElementById("pc_classes").value; + stdObj.relrequest_date = datestr; + + data = new URLSearchParams([["obj_sname", stdObj.obj_sname], ["cat_class", stdObj.cat_class], ["country", stdObj.country], ["lang", stdObj.lang], ["ac_classes", stdObj.ac_classes], ["pc_classes", stdObj.pc_classes], ["relrequest_date", stdObj.relrequest_date]]); + fetch("/annexdata/doPreRelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR == "0") + { + document.getElementById("greenmsg").innerHTML = `${stdObj.obj_sname} auf pre-release gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('doPreRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler doPreRelease: " + error + " " + data; }); + + document.getElementById('prelDoBtn').style.visibility = "hidden"; +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + // LenkInfo + if(stdObj.spec_release !== "released") + { + repl = repl.replace("{{lenkinfo_spec_release}}", `${stdObj.spec_release} - nicht freigegeben`); + } + else + { + repl = repl.replace("{{lenkinfo_spec_release}}", stdObj.spec_release); + } + repl = repl.replace("{{lenkinfo_specrelease}}", stdObj.spec_release); + repl = repl.replace(/{{lenkinfo_obj_name}}/g, stdObj.obj_sname); + repl = repl.replace("{{lenkinfo_ac_class}}", stdObj.ac_class); + repl = repl.replace("{{lenkinfo_pc_class}}", stdObj.pc_class); + repl = repl.replace("{{lenkinfo_country}}", stdObj.country); + repl = repl.replace("{{lenkinfo_lang}}", stdObj.lang); + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace(/{{obj_name}}/g, "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anforderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G:
    Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + // page-break + //repl = repl.replace("{{page-break + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannex.js_2021-02-13_1325 b/public/js/annex/showannex.js_2021-02-13_1325 new file mode 100644 index 0000000..938924b --- /dev/null +++ b/public/js/annex/showannex.js_2021-02-13_1325 @@ -0,0 +1,413 @@ +// 2020-12-25 16:50 + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + document.getElementById("toc_tmp").innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } +//setTimeout(getToc.bind(null, stdObj), 3000); +setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 1000); +setTimeout(doTocCopy, 2000); +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var top_toc; +var toc_tmp = document.getElementById('toc_tmp'); + + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(counter) + obj.length; + + let article = document.createElement("article"); +let toc_article = document.createElement('li'); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${cat}

    `; +//toc_article.innerHTML = `
      ${obj_name} ${cat}
    `; + } + else + { + article.innerHTML = `

    ${cat}

    `; +//toc_article.innerHTML = `
      ${cat}
    `; +toc_article.innerHTML = `
      ${cat}
    `; + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += ''; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section); + article.appendChild(section); + } + top_toc.appendChild(article); +toc_tmp.appendChild(toc_article); + }); +} + +function getSpec(id, sect) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + txtBlob.innerHTML = obj[0].spec_content; + sect.appendChild(txtBlob); + +let toc_tmp; +if(obj[0].obj_sname === 'General' && obj[0].cat_class === 'General') +{ + toc_tmp = document.getElementById("tmptoc_" + obj[0].obj_sname + "_" + obj[0].cat_class); +} +else +{ + toc_tmp = document.getElementById("tmptoc_" + obj[0].cat_class); +} +let toctmp = document.createElement("span"); +toctmp.innerHTML = obj[0].toc; +toc_tmp.appendChild(toctmp); + + }); +} diff --git a/public/js/annex/showannex.js_2021-02-21_1330 b/public/js/annex/showannex.js_2021-02-21_1330 new file mode 100644 index 0000000..d7a622a --- /dev/null +++ b/public/js/annex/showannex.js_2021-02-21_1330 @@ -0,0 +1,512 @@ +// 2020-12-25 16:50 + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } + + document.getElementById('btnprint').style.display='block'; +setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 500); +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(counter) + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${cat}

    `; + } + else + { + article.innerHTML = `

    ${cat}

    `; + } + + // dummy for release btn + let count1 = 0; + let count2 = 1; + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '      '; + + // dummy release btn + section_mnu += '   '; + section_mnu += ''; + count1 = count1 + 2; + count2 = count2 + 2; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// dummy for release btn +function MyFunction() +{ + return; +} +function setThumbsColor(count) +{ + if (count%2 == 0) + { + document.getElementById(count).setAttribute("class", "w3-green"); + document.getElementById(count+1).removeAttribute("class"); + } + else + { + document.getElementById(count).setAttribute("class", "w3-red"); + document.getElementById(count-1).removeAttribute("class"); + } + + alert("currently no function"); +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B: IT-Schränke") : repl = repl.replace("{{obj_name}}", "Annex B: passive IT-Cabinets"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: USV Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: UPS Power Supply "); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G: 4G Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: 4G Mobilesystems in Building- and Floordistribution"); break;} + case "Annex H": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang H: IT-Schränke: Server-Bebauung") : repl = repl.replace("{{obj_name}}", "Annex H: IT-Cabinets: Server-Setup"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + repl = repl.replace("{{ac}}", stdObj.ac_class); + + repl = repl.replace("{{pc}}", stdObj.pc_class); + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannex.js_2021-03-07_1209 b/public/js/annex/showannex.js_2021-03-07_1209 new file mode 100644 index 0000000..f59bbd3 --- /dev/null +++ b/public/js/annex/showannex.js_2021-03-07_1209 @@ -0,0 +1,515 @@ +// 2020-12-25 16:50 + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } + + document.getElementById('btnprint').style.display='block'; +setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 500); +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(counter) + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${cat}

    `; + } + else + { + article.innerHTML = `

    ${cat}

    `; + } + + // for release btn + let count1 = 0; + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '      '; + + // release btn + section_mnu += ''; + count1 = count1 + 2; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(count, id) +{ + document.getElementById(count).setAttribute("class", "w3-green"); + console.log('setRelease: ' + id); + + data = new URLSearchParams([["id", id]]); + fetch("/annexdata/upPrelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greennotice").innerHTML = `Baustein ${id} auf pre-release gesetzt.`; + } + else + { + console.log('setRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler: " + error + data; }); +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B: IT-Schränke") : repl = repl.replace("{{obj_name}}", "Annex B: passive IT-Cabinets"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: USV Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: UPS Power Supply "); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G: 4G Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: 4G Mobilesystems in Building- and Floordistribution"); break;} + case "Annex H": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang H: IT-Schränke: Server-Bebauung") : repl = repl.replace("{{obj_name}}", "Annex H: IT-Cabinets: Server-Setup"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + repl = repl.replace("{{ac}}", stdObj.ac_class); + + repl = repl.replace("{{pc}}", stdObj.pc_class); + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannex.js_2021-03-16_1622 b/public/js/annex/showannex.js_2021-03-16_1622 new file mode 100644 index 0000000..5e2a940 --- /dev/null +++ b/public/js/annex/showannex.js_2021-03-16_1622 @@ -0,0 +1,530 @@ +// 2020-12-25 16:50 + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } + + document.getElementById('btnprint').style.display='block'; +setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 500); +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(counter) + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${cat}

    `; + } + else + { + article.innerHTML = `

    ${cat}

    `; + } + + // for release btn + let count1 = 0; + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '      '; + + // release btn + section_mnu += ''; + count1 = count1 + 2; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(count, id) +{ + document.getElementById(count).setAttribute("class", "w3-green"); + console.log('setRelease: ' + id); + + data = new URLSearchParams([["id", id]]); + fetch("/annexdata/upPrelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greennotice").innerHTML = `Baustein ${id} auf pre-release gesetzt.`; + } + else + { + console.log('setRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler: " + error + data; }); +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: USV Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: UPS Power Supply "); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G: Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: 4G Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", stdObj.ac_class); + repl = repl.replace("{{pc}}", stdObj.pc_class); + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannex.js_2021-03-18_0928 b/public/js/annex/showannex.js_2021-03-18_0928 new file mode 100644 index 0000000..112be61 --- /dev/null +++ b/public/js/annex/showannex.js_2021-03-18_0928 @@ -0,0 +1,534 @@ +// 2020-12-25 16:50 + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } + + document.getElementById('btnprint').style.display='block'; +//setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); +document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${cat}

    `; + } + else + { + article.innerHTML = `

    ${cat}

    `; + } + + // for release btn + let count1 = 0; + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '      '; + + // release btn + section_mnu += ''; + count1 = count1 + 2; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(count, id) +{ + document.getElementById(count).setAttribute("class", "w3-green"); + console.log('setRelease: ' + id); + + data = new URLSearchParams([["id", id]]); + fetch("/annexdata/upPrelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greennotice").innerHTML = `Baustein ${id} auf pre-release gesetzt.`; + } + else + { + console.log('setRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler: " + error + data; }); +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: USV Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: UPS Power Supply "); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G: Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: 4G Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", stdObj.ac_class); + repl = repl.replace("{{pc}}", stdObj.pc_class); + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannex.js_2021-03-23_1201 b/public/js/annex/showannex.js_2021-03-23_1201 new file mode 100644 index 0000000..578a320 --- /dev/null +++ b/public/js/annex/showannex.js_2021-03-23_1201 @@ -0,0 +1,561 @@ +// 2020-12-25 16:50 + +var translate; + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // load translation + getLang(stdObj.lang); + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } + + document.getElementById('btnprint').style.display='block'; +//setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); +document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + article.innerHTML = `

    ${translate(cat)}

    `; + } + } + + // for release btn + let count1 = 0; + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '      '; + + // release btn + section_mnu += ''; + count1 = count1 + 2; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(count, id) +{ + document.getElementById(count).setAttribute("class", "w3-green"); + console.log('setRelease: ' + id); + + data = new URLSearchParams([["id", id]]); + fetch("/annexdata/upPrelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greennotice").innerHTML = `Baustein ${id} auf pre-release gesetzt.`; + } + else + { + console.log('setRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler: " + error + data; }); +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anfoderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G: Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: 4G Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", stdObj.ac_class); + repl = repl.replace("{{pc}}", stdObj.pc_class); + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannex.js_2021-03-24_0801 b/public/js/annex/showannex.js_2021-03-24_0801 new file mode 100644 index 0000000..0b81927 --- /dev/null +++ b/public/js/annex/showannex.js_2021-03-24_0801 @@ -0,0 +1,570 @@ +// 2020-12-25 16:50 + +var translate; + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // load translation + getLang(stdObj.lang); + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } + + document.getElementById('btnprint').style.display='block'; +//setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); +document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + article.innerHTML = `

    ${translate(cat)}

    `; + } + } + + // for release btn + let count1 = 0; + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '      '; + + // release btn + section_mnu += ''; + count1 = count1 + 2; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(count, id) +{ + document.getElementById(count).setAttribute("class", "w3-green"); + console.log('setRelease: ' + id); + + data = new URLSearchParams([["id", id]]); + fetch("/annexdata/upPrelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greennotice").innerHTML = `Baustein ${id} auf pre-release gesetzt.`; + } + else + { + console.log('setRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler: " + error + data; }); +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anfoderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G: Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannex.js_2021-03-25_1805 b/public/js/annex/showannex.js_2021-03-25_1805 new file mode 100644 index 0000000..f28fc3a --- /dev/null +++ b/public/js/annex/showannex.js_2021-03-25_1805 @@ -0,0 +1,679 @@ +// 2020-12-25 16:50 + +// i18n +var translate; +// pre-release +var prereleaseArr = new Array(); + + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + document.getElementById("prelCount").innerHTML = "0"; + document.getElementById("prerel").style.visibility = "hidden"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + prereleaseArr = []; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // load translation + getLang(stdObj.lang); + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } + + document.getElementById('btnprint').style.display='block'; +//setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); +document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + article.innerHTML = `

    ${translate(cat)}

    `; + } + } + + // for release btn + let count1 = 0; + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '      '; + + // release btn + if(obj[i].spec_release == 'draft') + { + section_mnu += ''; + } + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(id) +{ + let relBtn = document.getElementById(`relBtn_${id}`); + let counter = parseInt(document.getElementById("prelCount").innerHTML); + const txtCounts = parseInt(document.getElementById('greennotice').innerHTML); + + let css = relBtn.getAttribute("class"); + if(css != "w3-green") + { + relBtn.setAttribute("class", "w3-green"); + console.log('setRelease: ' + id + " count: " + `relBtn_${id}`); + + document.getElementById("prelMsg").innerHTML = '↔ Pre-Release:'; + document.getElementById("prelCount").innerHTML = counter + 1; + document.getElementById("prerel").style.visibility="visible"; + prereleaseArr.push(id); + } + else + { + relBtn.removeAttribute("class"); + document.getElementById("prelCount").innerHTML = counter - 1; + + let dCount = prereleaseArr.indexOf(id); + prereleaseArr.splice(dCount, 1); + } + + counter = parseInt(document.getElementById("prelCount").innerHTML); + console.info("Bausteine: " + txtCounts + " Counter: " + counter); + if(txtCounts === counter) + { + document.getElementById("prerel").style.color = "green"; + document.getElementById('prelDoBtn').style.visibility = "visible"; + } + else + { + document.getElementById("prerel").style.color = "black"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + } +} + +function doprelDoBtn() +{ + + console.log(prereleaseArr.join()); + + for(let i=0; i < prereleaseArr.length; i++) + { + data = new URLSearchParams([["id", prereleaseArr[i]]]); + fetch("/annexdata/upPrelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `Baustein ${prereleaseArr[i]} auf pre-release gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.log('upPrelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler upPrelease: " + error + " " + data; }); + } + + //doPreRelease + + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + var hh = d.getHours(); + var m = d.getMinutes(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + if(hh < 10) + { + hh = "0" + hh; + } + if(m < 10) + { + m = "0" + m; + } + let datestr = yy + "-" + mm + "-" + dd + " " + hh + ":" + m; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.ac_classes = document.getElementById("ac_classes").value; + stdObj.pc_classes = document.getElementById("pc_classes").value; + stdObj.relrequest_date = datestr; + + data = new URLSearchParams([["obj_sname", stdObj.obj_sname], ["cat_class", stdObj.cat_class], ["country", stdObj.country], ["lang", stdObj.lang], ["ac_classes", stdObj.ac_classes], ["pc_classes", stdObj.pc_classes], ["relrequest_date", stdObj.relrequest_date]]); + fetch("/annexdata/doPreRelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `${stdObj.obj_sname} auf pre-release gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.log('doPreRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler doPreRelease: " + error + " " + data; }); + + document.getElementById('prelDoBtn').style.visibility = "hidden"; +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anfoderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G: Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannex.js_2021-04-01_1713 b/public/js/annex/showannex.js_2021-04-01_1713 new file mode 100644 index 0000000..311b17c --- /dev/null +++ b/public/js/annex/showannex.js_2021-04-01_1713 @@ -0,0 +1,781 @@ +// 2020-12-25 16:50 + +// i18n +var translate; +// pre-release +var prereleaseArr = new Array(); + + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function delComment(id, spec_id) +{ + data = new URLSearchParams([["id", id]]); + fetch("/AnnexDataComments/remove/" + id, { body: data, method: "post" }); + + document.getElementById("comment_" + id).setAttribute("width" , "25px"); + document.getElementById("comment_" + id).setAttribute("src" , "/Icons/ok.svg"); + + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + if(txtcomment === 1) + { + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-light-blue'); + } + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment -1; +} + +function open_txtcomments(spec_id) +{ + //console.log("open_txtcomments: " + spec_id); + + var content_list_txtcomments = document.getElementById('content_list_txtcomments'); + content_list_txtcomments.innerHTML = ''; + + fetch("/AnnexDataComments/getSpecComments/" + spec_id) + .then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + if(obj.length < 1) + { + content_list_txtcomments.innerHTML = 'kein Kommentar
    '; + return; + } + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "user_comment"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "delete"; + tr.appendChild(th); + + table.appendChild(tr); + for (i in obj) + { + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].user_comment; + tr.appendChild(td); + td = document.createElement("td"); + td.innerHTML = ''; + tr.appendChild(td); + + table.appendChild(tr); + } + content_list_txtcomments.appendChild(table); + }); + + document.getElementById("list_txtcomments").showModal(); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment +1; + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-yellow'); + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + document.getElementById("prelCount").innerHTML = "0"; + document.getElementById("prerel").style.visibility = "hidden"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + prereleaseArr = []; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // load translation + getLang(stdObj.lang); + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } + + document.getElementById('btnprint').style.display='block'; + //setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); + document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; + + setTimeout(() => { + let pcount = document.querySelectorAll("data-pcount"); + //document.getElementById("redmsg").innerHTML = "pbreak: " + pbreak.length; + for(i = 0; i < pcount.length; i++) + { + pcount[i].childNodes[0].innerHTML = pcount.length; + } + }, 1000); + +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + article.innerHTML = `

    ${translate(cat)}

    `; + } + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '  '; + section_mnu += '    '; + section_mnu += '  '; + + if(parseInt(obj[i].comments_count) > 0) + { + section_mnu += '' + obj[i].comments_count + '  '; + } + else + { + section_mnu += '0    '; + } + + section_mnu += '  '; + section_mnu += '  '; + section_mnu += '    '; + section_mnu += '    '; + + // release btn + if(obj[i].spec_release == 'draft') + { + section_mnu += ''; + } + else if(obj[i].spec_release == 'pre-release') + { + let counter = parseInt(document.getElementById("prelCount").innerHTML); + document.getElementById("prelCount").innerHTML = counter + 1; + section_mnu += 'pre-released'; + } + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(id) +{ + let relBtn = document.getElementById(`relBtn_${id}`); + let counter = parseInt(document.getElementById("prelCount").innerHTML); + const txtCounts = parseInt(document.getElementById('greennotice').innerHTML); + + let css = relBtn.getAttribute("class"); + if(css != "w3-green") + { + relBtn.setAttribute("class", "w3-green"); + //console.log('setRelease: ' + id + " count: " + `relBtn_${id}`); + + document.getElementById("prelMsg").innerHTML = '↔ Pre-Release:'; + document.getElementById("prelCount").innerHTML = counter + 1; + document.getElementById("prerel").style.visibility="visible"; + prereleaseArr.push(id); + } + else + { + relBtn.removeAttribute("class"); + document.getElementById("prelCount").innerHTML = counter - 1; + + let dCount = prereleaseArr.indexOf(id); + prereleaseArr.splice(dCount, 1); + } + + counter = parseInt(document.getElementById("prelCount").innerHTML); + console.info("Bausteine: " + txtCounts + " Counter: " + counter); + if(txtCounts === counter) + { + document.getElementById("prerel").style.color = "green"; + document.getElementById('prelDoBtn').style.visibility = "visible"; + } + else + { + document.getElementById("prerel").style.color = "black"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + } +} + +function doprelDoBtn() +{ + + console.log(prereleaseArr.join()); + + for(let i=0; i < prereleaseArr.length; i++) + { + data = new URLSearchParams([["id", prereleaseArr[i]]]); + fetch("/annexdata/upPrelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `Baustein ${prereleaseArr[i]} auf pre-release gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.log('upPrelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler upPrelease: " + error + " " + data; }); + } + + //doPreRelease + + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + var hh = d.getHours(); + var m = d.getMinutes(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + if(hh < 10) + { + hh = "0" + hh; + } + if(m < 10) + { + m = "0" + m; + } + let datestr = yy + "-" + mm + "-" + dd + " " + hh + ":" + m; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.ac_classes = document.getElementById("ac_classes").value; + stdObj.pc_classes = document.getElementById("pc_classes").value; + stdObj.relrequest_date = datestr; + + data = new URLSearchParams([["obj_sname", stdObj.obj_sname], ["cat_class", stdObj.cat_class], ["country", stdObj.country], ["lang", stdObj.lang], ["ac_classes", stdObj.ac_classes], ["pc_classes", stdObj.pc_classes], ["relrequest_date", stdObj.relrequest_date]]); + fetch("/annexdata/doPreRelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `${stdObj.obj_sname} auf pre-release gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.log('doPreRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler doPreRelease: " + error + " " + data; }); + + document.getElementById('prelDoBtn').style.visibility = "hidden"; +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anfoderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G: Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + // page-break + //repl = repl.replace("{{page-break + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannex.js_2021-04-06_0904 b/public/js/annex/showannex.js_2021-04-06_0904 new file mode 100644 index 0000000..48fbcac --- /dev/null +++ b/public/js/annex/showannex.js_2021-04-06_0904 @@ -0,0 +1,782 @@ +// 2020-12-25 16:50 + +// i18n +var translate; +// pre-release +var prereleaseArr = new Array(); + + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function delComment(id, spec_id) +{ + data = new URLSearchParams([["id", id]]); + fetch("/AnnexDataComments/remove/" + id, { body: data, method: "post" }); + + document.getElementById("comment_" + id).setAttribute("width" , "25px"); + document.getElementById("comment_" + id).setAttribute("src" , "/Icons/ok.svg"); + + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + if(txtcomment === 1) + { + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-light-blue'); + } + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment -1; +} + +function open_txtcomments(spec_id) +{ + //console.log("open_txtcomments: " + spec_id); + + var content_list_txtcomments = document.getElementById('content_list_txtcomments'); + content_list_txtcomments.innerHTML = ''; + + fetch("/AnnexDataComments/getSpecComments/" + spec_id) + .then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + if(obj.length < 1) + { + content_list_txtcomments.innerHTML = 'kein Kommentar
    '; + return; + } + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "user_comment"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "delete"; + tr.appendChild(th); + + table.appendChild(tr); + for (i in obj) + { + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].user_comment; + tr.appendChild(td); + td = document.createElement("td"); + td.innerHTML = ''; + tr.appendChild(td); + + table.appendChild(tr); + } + content_list_txtcomments.appendChild(table); + }); + + document.getElementById("list_txtcomments").showModal(); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment +1; + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-yellow'); + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + document.getElementById("prelCount").innerHTML = "0"; + document.getElementById("prerel").style.visibility = "hidden"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + prereleaseArr = []; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // load translation + getLang(stdObj.lang); + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } + + document.getElementById('btnprint').style.display='block'; + //setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); + document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; + + setTimeout(() => { + let pcount = document.querySelectorAll("data-title"); + //document.getElementById("redmsg").innerHTML = "pbreak: " + pbreak.length; + for(i = 0; i < pcount.length; i++) + { + let i = pcount[i].childNodes[0].innerHTML + pcount[i].childNodes[0].innerHTML = 1 + " " + i + } + }, 1000); + +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + article.innerHTML = `

    ${translate(cat)}

    `; + } + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '  '; + section_mnu += '    '; + section_mnu += '  '; + + if(parseInt(obj[i].comments_count) > 0) + { + section_mnu += '' + obj[i].comments_count + '  '; + } + else + { + section_mnu += '0    '; + } + + section_mnu += '  '; + section_mnu += '  '; + section_mnu += '    '; + section_mnu += '    '; + + // release btn + if(obj[i].spec_release == 'draft') + { + section_mnu += ''; + } + else if(obj[i].spec_release == 'pre-release') + { + let counter = parseInt(document.getElementById("prelCount").innerHTML); + document.getElementById("prelCount").innerHTML = counter + 1; + section_mnu += 'pre-released'; + } + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(id) +{ + let relBtn = document.getElementById(`relBtn_${id}`); + let counter = parseInt(document.getElementById("prelCount").innerHTML); + const txtCounts = parseInt(document.getElementById('greennotice').innerHTML); + + let css = relBtn.getAttribute("class"); + if(css != "w3-green") + { + relBtn.setAttribute("class", "w3-green"); + //console.log('setRelease: ' + id + " count: " + `relBtn_${id}`); + + document.getElementById("prelMsg").innerHTML = '↔ Pre-Release:'; + document.getElementById("prelCount").innerHTML = counter + 1; + document.getElementById("prerel").style.visibility="visible"; + prereleaseArr.push(id); + } + else + { + relBtn.removeAttribute("class"); + document.getElementById("prelCount").innerHTML = counter - 1; + + let dCount = prereleaseArr.indexOf(id); + prereleaseArr.splice(dCount, 1); + } + + counter = parseInt(document.getElementById("prelCount").innerHTML); + console.info("Bausteine: " + txtCounts + " Counter: " + counter); + if(txtCounts === counter) + { + document.getElementById("prerel").style.color = "green"; + document.getElementById('prelDoBtn').style.visibility = "visible"; + } + else + { + document.getElementById("prerel").style.color = "black"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + } +} + +function doprelDoBtn() +{ + + console.log(prereleaseArr.join()); + + for(let i=0; i < prereleaseArr.length; i++) + { + data = new URLSearchParams([["id", prereleaseArr[i]]]); + fetch("/annexdata/upPrelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `Baustein ${prereleaseArr[i]} auf pre-release gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.log('upPrelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler upPrelease: " + error + " " + data; }); + } + + //doPreRelease + + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + var hh = d.getHours(); + var m = d.getMinutes(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + if(hh < 10) + { + hh = "0" + hh; + } + if(m < 10) + { + m = "0" + m; + } + let datestr = yy + "-" + mm + "-" + dd + " " + hh + ":" + m; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.ac_classes = document.getElementById("ac_classes").value; + stdObj.pc_classes = document.getElementById("pc_classes").value; + stdObj.relrequest_date = datestr; + + data = new URLSearchParams([["obj_sname", stdObj.obj_sname], ["cat_class", stdObj.cat_class], ["country", stdObj.country], ["lang", stdObj.lang], ["ac_classes", stdObj.ac_classes], ["pc_classes", stdObj.pc_classes], ["relrequest_date", stdObj.relrequest_date]]); + fetch("/annexdata/doPreRelease", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `${stdObj.obj_sname} auf pre-release gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.log('doPreRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler doPreRelease: " + error + " " + data; }); + + document.getElementById('prelDoBtn').style.visibility = "hidden"; +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anfoderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G: Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + // page-break + //repl = repl.replace("{{page-break + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showannexElectron.js b/public/js/annex/showannexElectron.js new file mode 100644 index 0000000..397cef6 --- /dev/null +++ b/public/js/annex/showannexElectron.js @@ -0,0 +1,429 @@ +// 2020-12-25 16:50 + +function open_show(id) +{ + +} + +function open_qedit(id) +{ + +} + +function open_edit(id) +{ + +} + +function open_list() +{ + +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + document.getElementById("toc_tmp").innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "General") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } +//setTimeout(getToc.bind(null, stdObj), 3000); +setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 1000); +setTimeout(doTocCopy, 2000); +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var top_toc; +var toc_tmp = document.getElementById('toc_tmp'); + + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(counter) + obj.length; + + let article = document.createElement("article"); +let toc_article = document.createElement('li'); + if(obj_name != cat && cat == 'General') + { + article.innerHTML = `

    ${obj_name} ${cat}

    `; +//toc_article.innerHTML = `
      ${obj_name} ${cat}
    `; + } + else + { + article.innerHTML = `

    ${cat}

    `; +//toc_article.innerHTML = `
      ${cat}
    `; +toc_article.innerHTML = `
      ${cat}
    `; + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section); + article.appendChild(section); + } + top_toc.appendChild(article); +toc_tmp.appendChild(toc_article); + }); +} + +function getSpec(id, sect) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + txtBlob.innerHTML = obj[0].spec_content; + sect.appendChild(txtBlob); + +let toc_tmp; +if(obj[0].obj_sname === 'General' && obj[0].cat_class === 'General') +{ + toc_tmp = document.getElementById("tmptoc_" + obj[0].obj_sname + "_" + obj[0].cat_class); +} +else +{ + toc_tmp = document.getElementById("tmptoc_" + obj[0].cat_class); +} +let toctmp = document.createElement("span"); +toctmp.innerHTML = obj[0].toc; +toc_tmp.appendChild(toctmp); + + }); +} diff --git a/public/js/annex/showcdannex.js b/public/js/annex/showcdannex.js new file mode 100644 index 0000000..fb5fa97 --- /dev/null +++ b/public/js/annex/showcdannex.js @@ -0,0 +1,820 @@ +// 2020-12-25 16:50 + +// i18n +var translate; +// pre-release +var prereleaseArr = new Array(); + + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function delComment(id, spec_id) +{ + data = new URLSearchParams([["id", id]]); + fetch("/AnnexDataComments/remove/" + id, { body: data, method: "post" }); + + document.getElementById("comment_" + id).setAttribute("width" , "25px"); + document.getElementById("comment_" + id).setAttribute("src" , "/Icons/ok.svg"); + + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + if(txtcomment === 1) + { + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-light-blue'); + } + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment -1; +} + +function open_txtcomments(spec_id) +{ + //console.log("open_txtcomments: " + spec_id); + + var content_list_txtcomments = document.getElementById('content_list_txtcomments'); + content_list_txtcomments.innerHTML = ''; + + fetch("/AnnexDataComments/getSpecComments/" + spec_id) + .then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + if(obj.length < 1) + { + content_list_txtcomments.innerHTML = 'kein Kommentar
    '; + return; + } + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "user_comment"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "delete"; + tr.appendChild(th); + + table.appendChild(tr); + for (i in obj) + { + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].user_comment; + tr.appendChild(td); + td = document.createElement("td"); + td.innerHTML = ''; + tr.appendChild(td); + + table.appendChild(tr); + } + content_list_txtcomments.appendChild(table); + }); + + document.getElementById("list_txtcomments").showModal(); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment +1; + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-yellow'); + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + document.getElementById("prelCount").innerHTML = "0"; + document.getElementById("prerel").style.visibility = "hidden"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + prereleaseArr = []; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + stdObj.release_id = document.getElementById("release_id").value; + stdObj.spec_active = 1; + + // load translation + getLang(stdObj.lang); + + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + //const x = document.getElementById('cat'); + let x = ["General","Planning", "Environment", "Construction","Power","Safety","Security","Management","Operations","Appendix"]; + + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i]); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i]); + } + + + document.getElementById('btnprint').style.display='block'; + //setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); + document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; + + setTimeout(() => { + let pcount = document.querySelectorAll('span[data-title*="title"]'); + let counter = 1; + for(i = 0; i < pcount.length; i++) + { + let c = pcount[i].innerHTML; + //pcount[i].childNodes[0].innerHTML = 1 + " " + c; + pcount[i].innerHTML = counter++ + ". " + c; + //console.log("data: " + c + " " + pcount[i].childNodes[0].innerHTML); + } + }, 1000); + +} + +function doPrintAnnex(obj_sname, ac_class, pc_class, country, lang, spec_release, release_id) +{ + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = obj_sname; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = country; + stdObj.lang = lang; + stdObj.spec_active = 1; + stdObj.spec_compl = 1; + stdObj.ac_class = ac_class; + stdObj.pc_class = pc_class; + stdObj.spec_release = spec_release; + stdObj.release_id = release_id; + stdObj.spec_active = 1; + + // load translation + getLang(stdObj.lang); + + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + + + setTimeout(() => { + let pcount = document.querySelectorAll('span[data-title*="title"]'); + let counter = 1; + for(i = 0; i < pcount.length; i++) + { + let c = pcount[i].innerHTML; + //pcount[i].childNodes[0].innerHTML = 1 + " " + c; + pcount[i].innerHTML = counter++ + ". " + c; + //console.log("data: " + c + " " + pcount[i].childNodes[0].innerHTML); + } + }, 1000); +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + if(obj_name == 'General') + { + console.log("General: " + cat + " " + obj_name); + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", "0"], ["pc_class", "0"], ["spec_release", stdObj.spec_release]]); + } + else + { + console.log("General else " + obj_name); + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + } + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/releasemgmt/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + //article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + article.innerHTML = `
     
    ${obj_name} ${translate(cat)}`; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + //article.innerHTML = `

    ${translate(cat)}

    `; + article.innerHTML = `
     
    ${translate(cat)}`; + } + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = ' '; + section_mnu += '    '; + section_mnu += ' '; + + if(parseInt(obj[i].comments_count) > 0) + { + section_mnu += '' + obj[i].comments_count + ' '; + } + else + { + section_mnu += '0    '; + } + + section_mnu += ' '; + section_mnu += ' '; + section_mnu += '    '; + section_mnu += '    '; + + // release btn + if(obj[i].spec_release == 'pre-release') + { + section_mnu += ''; + } + else if(obj[i].spec_release == 'released') + { + let counter = parseInt(document.getElementById("prelCount").innerHTML); + document.getElementById("prelCount").innerHTML = counter + 1; + section_mnu += 'released'; + } + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(id) +{ + let relBtn = document.getElementById(`relBtn_${id}`); + let counter = parseInt(document.getElementById("prelCount").innerHTML); + const txtCounts = parseInt(document.getElementById('greennotice').innerHTML); + + let css = relBtn.getAttribute("class"); + if(css != "w3-green") + { + relBtn.setAttribute("class", "w3-green"); + //console.log('setRelease: ' + id + " count: " + `relBtn_${id}`); + + document.getElementById("prelMsg").innerHTML = '↔ Released:'; + document.getElementById("prelCount").innerHTML = counter + 1; + document.getElementById("prerel").style.visibility="visible"; + prereleaseArr.push(id); + } + else + { + relBtn.removeAttribute("class"); + document.getElementById("prelCount").innerHTML = counter - 1; + + let dCount = prereleaseArr.indexOf(id); + prereleaseArr.splice(dCount, 1); + } + + counter = parseInt(document.getElementById("prelCount").innerHTML); + console.info("Bausteine: " + txtCounts + " Counter: " + counter); + if(txtCounts === counter) + { + document.getElementById("prerel").style.color = "green"; + document.getElementById('prelDoBtn').style.visibility = "visible"; + } + else + { + document.getElementById("prerel").style.color = "black"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + } +} + +function doprelDoBtn() +{ + + //console.log(prereleaseArr.join()); + + for(let i=0; i < prereleaseArr.length; i++) + { + data = new URLSearchParams([["id", prereleaseArr[i]]]); + fetch("/annexdata/upReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `Baustein ${prereleaseArr[i]} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('upRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler upPrelease: " + error + " " + data; }); + } + + //doRelease + + // nicht nötig -> server utc + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + var hh = d.getHours(); + var m = d.getMinutes(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + if(hh < 10) + { + hh = "0" + hh; + } + if(m < 10) + { + m = "0" + m; + } + let datestr = yy + "-" + mm + "-" + dd + " " + hh + ":" + m; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.ac_classes = document.getElementById("ac_classes").value; + stdObj.pc_classes = document.getElementById("pc_classes").value; + stdObj.relrequest_date = datestr; + + data = new URLSearchParams([["release_id", stdObj.release_id]]); + fetch("/annexdata/doReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `${stdObj.obj_sname} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('doReleased NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler doReleased: " + error + " " + data; }); + + document.getElementById('prelDoBtn').style.visibility = "hidden"; +} + +function getSpec(id, sect, stdObj) +{ + fetch("/releasemgmt/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anforderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G:
    Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + // page-break + //repl = repl.replace("{{page-break + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showcdannex.js_2021-04-18_1812 b/public/js/annex/showcdannex.js_2021-04-18_1812 new file mode 100644 index 0000000..a562766 --- /dev/null +++ b/public/js/annex/showcdannex.js_2021-04-18_1812 @@ -0,0 +1,818 @@ +// 2020-12-25 16:50 + +// i18n +var translate; +// pre-release +var prereleaseArr = new Array(); + + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function delComment(id, spec_id) +{ + data = new URLSearchParams([["id", id]]); + fetch("/AnnexDataComments/remove/" + id, { body: data, method: "post" }); + + document.getElementById("comment_" + id).setAttribute("width" , "25px"); + document.getElementById("comment_" + id).setAttribute("src" , "/Icons/ok.svg"); + + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + if(txtcomment === 1) + { + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-light-blue'); + } + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment -1; +} + +function open_txtcomments(spec_id) +{ + //console.log("open_txtcomments: " + spec_id); + + var content_list_txtcomments = document.getElementById('content_list_txtcomments'); + content_list_txtcomments.innerHTML = ''; + + fetch("/AnnexDataComments/getSpecComments/" + spec_id) + .then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + if(obj.length < 1) + { + content_list_txtcomments.innerHTML = 'kein Kommentar
    '; + return; + } + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "user_comment"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "delete"; + tr.appendChild(th); + + table.appendChild(tr); + for (i in obj) + { + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].user_comment; + tr.appendChild(td); + td = document.createElement("td"); + td.innerHTML = ''; + tr.appendChild(td); + + table.appendChild(tr); + } + content_list_txtcomments.appendChild(table); + }); + + document.getElementById("list_txtcomments").showModal(); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment +1; + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-yellow'); + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + document.getElementById("prelCount").innerHTML = "0"; + document.getElementById("prerel").style.visibility = "hidden"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + prereleaseArr = []; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + stdObj.release_id = document.getElementById("release_id").value; + stdObj.spec_active = 1; + + // load translation + getLang(stdObj.lang); + + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + + + document.getElementById('btnprint').style.display='block'; + //setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); + document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; + + setTimeout(() => { + let pcount = document.querySelectorAll('span[data-title*="title"]'); + let counter = 1; + for(i = 0; i < pcount.length; i++) + { + let c = pcount[i].innerHTML; + //pcount[i].childNodes[0].innerHTML = 1 + " " + c; + pcount[i].innerHTML = counter++ + ". " + c; + //console.log("data: " + c + " " + pcount[i].childNodes[0].innerHTML); + } + }, 1000); + +} + +function doPrintAnnex(obj_sname, ac_class, pc_class, country, lang, spec_release, release_id) +{ + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = obj_sname; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = country; + stdObj.lang = lang; + stdObj.spec_active = 1; + stdObj.spec_compl = 1; + stdObj.ac_class = ac_class; + stdObj.pc_class = pc_class; + stdObj.spec_release = spec_release; + stdObj.release_id = release_id; + stdObj.spec_active = 1; + + // load translation + getLang(stdObj.lang); + + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + + + setTimeout(() => { + let pcount = document.querySelectorAll('span[data-title*="title"]'); + let counter = 1; + for(i = 0; i < pcount.length; i++) + { + let c = pcount[i].innerHTML; + //pcount[i].childNodes[0].innerHTML = 1 + " " + c; + pcount[i].innerHTML = counter++ + ". " + c; + //console.log("data: " + c + " " + pcount[i].childNodes[0].innerHTML); + } + }, 1000); +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + if(obj_name == 'General') + { + console.log("General: " + cat + " " + obj_name); + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", "0"], ["pc_class", "0"], ["spec_release", stdObj.spec_release]]); + } + else + { + console.log("General else " + obj_name); + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + } + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/releasemgmt/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + //article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + article.innerHTML = `
     
    ${obj_name} ${translate(cat)}`; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + //article.innerHTML = `

    ${translate(cat)}

    `; + article.innerHTML = `
     
    ${translate(cat)}`; + } + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = ' '; + section_mnu += '    '; + section_mnu += ' '; + + if(parseInt(obj[i].comments_count) > 0) + { + section_mnu += '' + obj[i].comments_count + ' '; + } + else + { + section_mnu += '0    '; + } + + section_mnu += ' '; + section_mnu += ' '; + section_mnu += '    '; + section_mnu += '    '; + + // release btn + if(obj[i].spec_release == 'pre-release') + { + section_mnu += ''; + } + else if(obj[i].spec_release == 'released') + { + let counter = parseInt(document.getElementById("prelCount").innerHTML); + document.getElementById("prelCount").innerHTML = counter + 1; + section_mnu += 'released'; + } + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(id) +{ + let relBtn = document.getElementById(`relBtn_${id}`); + let counter = parseInt(document.getElementById("prelCount").innerHTML); + const txtCounts = parseInt(document.getElementById('greennotice').innerHTML); + + let css = relBtn.getAttribute("class"); + if(css != "w3-green") + { + relBtn.setAttribute("class", "w3-green"); + //console.log('setRelease: ' + id + " count: " + `relBtn_${id}`); + + document.getElementById("prelMsg").innerHTML = '↔ Released:'; + document.getElementById("prelCount").innerHTML = counter + 1; + document.getElementById("prerel").style.visibility="visible"; + prereleaseArr.push(id); + } + else + { + relBtn.removeAttribute("class"); + document.getElementById("prelCount").innerHTML = counter - 1; + + let dCount = prereleaseArr.indexOf(id); + prereleaseArr.splice(dCount, 1); + } + + counter = parseInt(document.getElementById("prelCount").innerHTML); + console.info("Bausteine: " + txtCounts + " Counter: " + counter); + if(txtCounts === counter) + { + document.getElementById("prerel").style.color = "green"; + document.getElementById('prelDoBtn').style.visibility = "visible"; + } + else + { + document.getElementById("prerel").style.color = "black"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + } +} + +function doprelDoBtn() +{ + + //console.log(prereleaseArr.join()); + + for(let i=0; i < prereleaseArr.length; i++) + { + data = new URLSearchParams([["id", prereleaseArr[i]]]); + fetch("/annexdata/upReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `Baustein ${prereleaseArr[i]} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('upRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler upPrelease: " + error + " " + data; }); + } + + //doRelease + + // nicht nötig -> server utc + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + var hh = d.getHours(); + var m = d.getMinutes(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + if(hh < 10) + { + hh = "0" + hh; + } + if(m < 10) + { + m = "0" + m; + } + let datestr = yy + "-" + mm + "-" + dd + " " + hh + ":" + m; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.ac_classes = document.getElementById("ac_classes").value; + stdObj.pc_classes = document.getElementById("pc_classes").value; + stdObj.relrequest_date = datestr; + + data = new URLSearchParams([["release_id", stdObj.release_id]]); + fetch("/annexdata/doReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + document.getElementById("greenmsg").innerHTML = `${stdObj.obj_sname} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('doReleased NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler doReleased: " + error + " " + data; }); + + document.getElementById('prelDoBtn').style.visibility = "hidden"; +} + +function getSpec(id, sect, stdObj) +{ + fetch("/releasemgmt/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anforderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G:
    Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + // page-break + //repl = repl.replace("{{page-break + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showciannex.js b/public/js/annex/showciannex.js new file mode 100644 index 0000000..f67b25f --- /dev/null +++ b/public/js/annex/showciannex.js @@ -0,0 +1,797 @@ +// 2020-12-25 16:50 + +// i18n +var translate; +// pre-release +var prereleaseArr = new Array(); + + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function delComment(id, spec_id) +{ + data = new URLSearchParams([["id", id]]); + fetch("/AnnexDataComments/remove/" + id, { body: data, method: "post" }); + + document.getElementById("comment_" + id).setAttribute("width" , "25px"); + document.getElementById("comment_" + id).setAttribute("src" , "/Icons/ok.svg"); + + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + if(txtcomment === 1) + { + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-light-blue'); + } + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment -1; +} + +function open_txtcomments(spec_id) +{ + //console.log("open_txtcomments: " + spec_id); + + var content_list_txtcomments = document.getElementById('content_list_txtcomments'); + content_list_txtcomments.innerHTML = ''; + + fetch("/AnnexDataComments/getSpecComments/" + spec_id) + .then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + if(obj.length < 1) + { + content_list_txtcomments.innerHTML = 'kein Kommentar
    '; + return; + } + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "user_comment"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "delete"; + tr.appendChild(th); + + table.appendChild(tr); + for (i in obj) + { + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].user_comment; + tr.appendChild(td); + td = document.createElement("td"); + td.innerHTML = ''; + tr.appendChild(td); + + table.appendChild(tr); + } + content_list_txtcomments.appendChild(table); + }); + + document.getElementById("list_txtcomments").showModal(); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment +1; + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-yellow'); + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + document.getElementById("prelCount").innerHTML = "0"; + document.getElementById("prerel").style.visibility = "hidden"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + + document.getElementById('btnprint').style.display = "none"; + document.getElementById('btnpdf').disabled = false; + document.getElementById('imgpdf').style.backgroundColor = ""; + + prereleaseArr = []; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + stdObj.release_id = document.getElementById("release_id").value; + stdObj.spec_active = 1; + + + if(stdObj.spec_release === 'pre-released' || stdObj.spec_release === 'pre-released review') + { + stdObj.spec_release = 'pre-release'; + } + + + // load translation + try { + getLang(stdObj.lang); + } + catch(err) + { + //ignore + } + + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + //const x = document.getElementById('cat'); + let x = ["General","Planning", "Environment", "Construction", "Power", "Cabling", "Safety", "Security","Management","Operations","Appendix"]; + + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i]); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i]); + } + + document.getElementById('btnprint').style.display='block'; + //setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); + document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; + + setTimeout(() => { + let pcount = document.querySelectorAll('span[data-title*="title"]'); + let counter = 1; + for(i = 0; i < pcount.length; i++) + { + let c = pcount[i].innerHTML; + //pcount[i].childNodes[0].innerHTML = 1 + " " + c; + pcount[i].innerHTML = counter++ + ". " + c; + //console.log("data: " + c + " " + pcount[i].childNodes[0].innerHTML); + } + }, 1000); + +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + //article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + article.innerHTML = `
     
    ${obj_name} ${translate(cat)}`; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + //article.innerHTML = `

    ${translate(cat)}

    `; + article.innerHTML = `
     
    ${translate(cat)}`; + } + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = ' '; + section_mnu += '    '; + section_mnu += ' '; + + if(parseInt(obj[i].comments_count) > 0) + { + section_mnu += '' + obj[i].comments_count + ' '; + } + else + { + section_mnu += '0    '; + } + + section_mnu += ' '; + section_mnu += ' '; + section_mnu += '    '; + section_mnu += '    '; + + // release btn + if(obj[i].spec_release == 'pre-release') + { + section_mnu += ''; + } + else if(obj[i].spec_release == 'released') + { + let counter = parseInt(document.getElementById("prelCount").innerHTML); + document.getElementById("prelCount").innerHTML = counter + 1; + section_mnu += 'released'; + } + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(id) +{ + let relBtn = document.getElementById(`relBtn_${id}`); + let counter = parseInt(document.getElementById("prelCount").innerHTML); + const txtCounts = parseInt(document.getElementById('greennotice').innerHTML); + + let css = relBtn.getAttribute("class"); + if(css != "w3-green") + { + relBtn.setAttribute("class", "w3-green"); + //console.log('setRelease: ' + id + " count: " + `relBtn_${id}`); + + document.getElementById("prelMsg").innerHTML = '↔ Released:'; + document.getElementById("prelCount").innerHTML = counter + 1; + document.getElementById("prerel").style.visibility="visible"; + prereleaseArr.push(id); + } + else + { + relBtn.removeAttribute("class"); + document.getElementById("prelCount").innerHTML = counter - 1; + + let dCount = prereleaseArr.indexOf(id); + prereleaseArr.splice(dCount, 1); + } + + counter = parseInt(document.getElementById("prelCount").innerHTML); + console.info("Bausteine: " + txtCounts + " Counter: " + counter); + if(txtCounts === counter) + { + document.getElementById("prerel").style.color = "green"; + document.getElementById('prelDoBtn').style.visibility = "visible"; + } + else + { + document.getElementById("prerel").style.color = "black"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + } +} + +function doprelDoBtn() +{ + + //console.log(prereleaseArr.join()); + + for(let i=0; i < prereleaseArr.length; i++) + { + data = new URLSearchParams([["id", prereleaseArr[i]]]); + fetch("/annexdata/upReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR == "0") + { + document.getElementById("greenmsg").innerHTML = `Baustein ${prereleaseArr[i]} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('upRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler upRelease: " + error + " " + data; }); + } + + //doRelease + + // nicht nötig -> server utc + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + var hh = d.getHours(); + var m = d.getMinutes(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + if(hh < 10) + { + hh = "0" + hh; + } + if(m < 10) + { + m = "0" + m; + } + let datestr = yy + "-" + mm + "-" + dd + " " + hh + ":" + m; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.ac_classes = document.getElementById("ac_classes").value; + stdObj.pc_classes = document.getElementById("pc_classes").value; + stdObj.release_id = document.getElementById("release_id").value; + stdObj.relrequest_date = datestr; + + data = new URLSearchParams([["release_id", stdObj.release_id]]); + fetch("/annexdata/doReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR == "0") + { + document.getElementById("greenmsg").innerHTML = `${stdObj.obj_sname} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('doReleased NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler doReleased: " + error + " " + data; }); + + document.getElementById('prelDoBtn').style.visibility = "hidden"; +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + // LenkInfo + if(stdObj.spec_release !== "released") + { + repl = repl.replace("{{lenkinfo_spec_release}}", `${stdObj.spec_release} - nicht freigegeben`); + } + else + { + repl = repl.replace("{{lenkinfo_spec_release}}", stdObj.spec_release); + } + repl = repl.replace("{{lenkinfo_specrelease}}", stdObj.spec_release); + repl = repl.replace("{{lenkinfo_obj_name}}", stdObj.obj_sname); + repl = repl.replace("{{lenkinfo_ac_class}}", stdObj.ac_class); + repl = repl.replace("{{lenkinfo_pc_class}}", stdObj.pc_class); + repl = repl.replace("{{lenkinfo_country}}", stdObj.country); + repl = repl.replace("{{lenkinfo_lang}}", stdObj.lang); + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anforderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G:
    Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class == 1) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + else if(stdObj.ac_class == 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + // page-break + //repl = repl.replace("{{page-break + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showciannex.js_2021-04-29_1802 b/public/js/annex/showciannex.js_2021-04-29_1802 new file mode 100644 index 0000000..10faded --- /dev/null +++ b/public/js/annex/showciannex.js_2021-04-29_1802 @@ -0,0 +1,771 @@ +// 2020-12-25 16:50 + +// i18n +var translate; +// pre-release +var prereleaseArr = new Array(); + + +function getLang(lang) +{ + fetch(`/i18n/${lang}.json`).then(function (response) + { + return response.json(); + }).then(function (json) + { + //data = json; + //i18n.translator.add(data); + //console.info("translation: " + lang); + translate = i18n.create(json); + }); +} + +function delComment(id, spec_id) +{ + data = new URLSearchParams([["id", id]]); + fetch("/AnnexDataComments/remove/" + id, { body: data, method: "post" }); + + document.getElementById("comment_" + id).setAttribute("width" , "25px"); + document.getElementById("comment_" + id).setAttribute("src" , "/Icons/ok.svg"); + + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + if(txtcomment === 1) + { + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-light-blue'); + } + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment -1; +} + +function open_txtcomments(spec_id) +{ + //console.log("open_txtcomments: " + spec_id); + + var content_list_txtcomments = document.getElementById('content_list_txtcomments'); + content_list_txtcomments.innerHTML = ''; + + fetch("/AnnexDataComments/getSpecComments/" + spec_id) + .then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + if(obj.length < 1) + { + content_list_txtcomments.innerHTML = 'kein Kommentar
    '; + return; + } + + let table, tr, th, td; + table = document.createElement("table"); + table.setAttribute("class", "w3-table-all"); + tr = document.createElement("tr"); + th = document.createElement("th"); + th.innerText = "id"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "user_comment"; + tr.appendChild(th); + th = document.createElement("th"); + th.innerText = "delete"; + tr.appendChild(th); + + table.appendChild(tr); + for (i in obj) + { + tr = document.createElement("tr"); + td = document.createElement("td"); + td.innerText = obj[i].id; + tr.appendChild(td); + td = document.createElement("td"); + td.innerText = obj[i].user_comment; + tr.appendChild(td); + td = document.createElement("td"); + td.innerHTML = ''; + tr.appendChild(td); + + table.appendChild(tr); + } + content_list_txtcomments.appendChild(table); + }); + + document.getElementById("list_txtcomments").showModal(); +} + +function open_comment(id, title, version) +{ + document.getElementById("savecomment").disabled = false; + document.getElementById("close-dialog").innerHTML = "abbrechen"; + document.getElementById("spec_title").innerHTML = title; + document.getElementById("spec_version").innerHTML = version; + document.getElementById("spec_id").value = id; + document.getElementById("dialog").showModal(); +} + +function sendComment() +{ + document.getElementById("savecomment").disabled = true; + document.getElementById("close-dialog").innerHTML = "schließen"; + + const spec_title = document.getElementById("spec_title").innerHTML; + const spec_version = document.getElementById("spec_version").innerHTML; + const spec_id = document.getElementById("spec_id").value; + const user_comment = document.getElementById("user_comment").value; + + var data = new URLSearchParams([["spec_id", spec_id], ["spec_title", spec_title], ["spec_version", spec_version], ["user_comment", user_comment]]); + + fetch("/AnnexDataComments/createComment", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR === "0") + { + let msg = '\n\nVielen Dank für Ihren Kommentar.\n\nSie können das Eingabefenster nun schließen.'; + document.getElementById("greenmsg").innerHTML = msg; + document.getElementById("user_comment").value = msg; + let txtcomment = parseInt( document.getElementById(spec_id + "_textcomment").innerHTML ); + document.getElementById(spec_id + "_textcomment").innerHTML = txtcomment +1; + document.getElementById(spec_id + "_textcomment").removeAttribute("class"); + document.getElementById(spec_id + "_textcomment").setAttribute('class', 'w3-badge w3-yellow'); + } + else + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${json[0].ERROR} ${json[0].errMsg}`; + document.getElementById("redmsg").innerHTML = msg; + } + }) + .catch((error) => + { + let msg = `Bei der Kommentierung ist ein Fehler aufgetreten.
    Bitte versuchen Sie es in Kürze erneut oder wenden Sie sich an Ihren Admin.
    ${error}`; + document.getElementById("redmsg").innerHTML = msg; + }); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "General"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_lname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_de, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } + document.getElementById('countries').value = 'WW'; +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + //console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlListAnnex() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("rederror").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + document.getElementById("greennotice").innerHTML = "0"; + document.getElementById("prelCount").innerHTML = "0"; + document.getElementById("prerel").style.visibility = "hidden"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + prereleaseArr = []; + + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + stdObj.release_id = document.getElementById("release_id").value; + stdObj.spec_active = 1; + + // load translation + getLang(stdObj.lang); + + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'General'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'General', 'General'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + + + document.getElementById('btnprint').style.display='block'; + //setTimeout(() => { document.getElementById("greenmsg").innerHTML = document.getElementById('datacounter').innerHTML + " Bausteine gefunden"; }, 750); + document.getElementById("greenmsg").innerHTML = "Bausteine gefunden:"; + + setTimeout(() => { + let pcount = document.querySelectorAll('span[data-title*="title"]'); + let counter = 1; + for(i = 0; i < pcount.length; i++) + { + let c = pcount[i].innerHTML; + //pcount[i].childNodes[0].innerHTML = 1 + " " + c; + pcount[i].innerHTML = counter++ + ". " + c; + //console.log("data: " + c + " " + pcount[i].childNodes[0].innerHTML); + } + }, 1000); + +} + +function doTocCopy() +{ + var itm = document.getElementById("toc_tmp"); + var cln = itm.cloneNode(true); + document.getElementById("toc").appendChild(cln); + + //itm.innerHTML = ""; +} + +function showListStds(stdObj, cat, obj_name) +{ + /* + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); +*/ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + if(obj_name == 'General') + { + console.log("General: " + cat + " " + obj_name); + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", "WW"], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", "0"], ["pc_class", "0"], ["spec_release", stdObj.spec_release]]); + } + else + { + console.log("General else " + obj_name); + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + } + + // console.log("showListStds: " + en("General")); + + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/annexdata/getAnnexList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + //console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = parseInt(document.getElementById("greennotice").innerHTML); + document.getElementById("greennotice").innerHTML = counter + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'General') + { + //article.innerHTML = `

    ${obj_name} ${translate(cat)}

    `; + article.innerHTML = `
     
    ${obj_name} ${translate(cat)}`; + } + else + { + // nicht benötigt + //article.innerHTML = `

    ${en(cat)}

    `; + if(obj_name != cat && cat != 'General') + { + //article.innerHTML = `

    ${translate(cat)}

    `; + article.innerHTML = `
     
    ${translate(cat)}`; + } + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + section_head.setAttribute('class', "noprint"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = ' '; + section_mnu += '    '; + section_mnu += ' '; + + if(parseInt(obj[i].comments_count) > 0) + { + section_mnu += '' + obj[i].comments_count + ' '; + } + else + { + section_mnu += '0    '; + } + + section_mnu += ' '; + section_mnu += ' '; + section_mnu += '    '; + section_mnu += '    '; + + // release btn + if(obj[i].spec_release == 'pre-release') + { + section_mnu += ''; + } + else if(obj[i].spec_release == 'released') + { + let counter = parseInt(document.getElementById("prelCount").innerHTML); + document.getElementById("prelCount").innerHTML = counter + 1; + section_mnu += 'released'; + } + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section, stdObj); + article.appendChild(section); + } + // no toc needed anymore + top_toc.appendChild(article); + }); +} + +// release btn +function MyFunction() +{ + return; +} +function setRelease(id) +{ + let relBtn = document.getElementById(`relBtn_${id}`); + let counter = parseInt(document.getElementById("prelCount").innerHTML); + const txtCounts = parseInt(document.getElementById('greennotice').innerHTML); + + let css = relBtn.getAttribute("class"); + if(css != "w3-green") + { + relBtn.setAttribute("class", "w3-green"); + //console.log('setRelease: ' + id + " count: " + `relBtn_${id}`); + + document.getElementById("prelMsg").innerHTML = '↔ Released:'; + document.getElementById("prelCount").innerHTML = counter + 1; + document.getElementById("prerel").style.visibility="visible"; + prereleaseArr.push(id); + } + else + { + relBtn.removeAttribute("class"); + document.getElementById("prelCount").innerHTML = counter - 1; + + let dCount = prereleaseArr.indexOf(id); + prereleaseArr.splice(dCount, 1); + } + + counter = parseInt(document.getElementById("prelCount").innerHTML); + console.info("Bausteine: " + txtCounts + " Counter: " + counter); + if(txtCounts === counter) + { + document.getElementById("prerel").style.color = "green"; + document.getElementById('prelDoBtn').style.visibility = "visible"; + } + else + { + document.getElementById("prerel").style.color = "black"; + document.getElementById('prelDoBtn').style.visibility = "hidden"; + } +} + +function doprelDoBtn() +{ + + //console.log(prereleaseArr.join()); + + for(let i=0; i < prereleaseArr.length; i++) + { + data = new URLSearchParams([["id", prereleaseArr[i]]]); + fetch("/annexdata/upReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR == "0") + { + document.getElementById("greenmsg").innerHTML = `Baustein ${prereleaseArr[i]} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('upRelease NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler upRelease: " + error + " " + data; }); + } + + //doRelease + + // nicht nötig -> server utc + var d = new Date(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + var hh = d.getHours(); + var m = d.getMinutes(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + if(hh < 10) + { + hh = "0" + hh; + } + if(m < 10) + { + m = "0" + m; + } + let datestr = yy + "-" + mm + "-" + dd + " " + hh + ":" + m; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.ac_classes = document.getElementById("ac_classes").value; + stdObj.pc_classes = document.getElementById("pc_classes").value; + stdObj.release_id = document.getElementById("release_id").value; + stdObj.relrequest_date = datestr; + + data = new URLSearchParams([["release_id", stdObj.release_id]]); + fetch("/annexdata/doReleased", { body: data, method: "post" }) + .then(data => data.json()) + .then((json) => + { + if(json[0].ERROR == "0") + { + document.getElementById("greenmsg").innerHTML = `${stdObj.obj_sname} auf released gesetzt.`; + document.getElementById("greennotice").innerHTML = ""; + } + else + { + console.error('doReleased NOK: ' + json[0].errMsg + ' ' + json[0].query); + } + }) + .catch((error) => { document.getElementById("redmsg").innerHTML = "Fehler doReleased: " + error + " " + data; }); + + document.getElementById('prelDoBtn').style.visibility = "hidden"; +} + +function getSpec(id, sect, stdObj) +{ + fetch("/annexdata/getAnnexSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + // txtBlob.innerHTML = obj[0].spec_content; + var repl = obj[0].spec_content; + + switch(stdObj.obj_sname) + { + case "Annex A": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang A: passive IT-IS Komponenten") : repl = repl.replace("{{obj_name}}", "Annex A: passive IT-IS Components"); break;} + case "Annex B-1": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-1: IT-Rack Design-Guide") : repl = repl.replace("{{obj_name}}", "Annex B-1: IT-Rack Design-Guide"); break;} + case "Annex B-2": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-2: IT-Racks Modelbeschreibungen") : repl = repl.replace("{{obj_name}}", "Annex B-2: IT-Racks Models Descriptions"); break;} + case "Annex B-3": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang B-3: IT-Rack SDN-Server Bebauungsvorgaben") : repl = repl.replace("{{obj_name}}", "Annex B-3: IT-Rack SDN-Server Setup Requirements"); break;} + case "Annex C": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang C: Installateure") : repl = repl.replace("{{obj_name}}", "Annex C: Installers"); break;} + case "Annex D": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang D: Meßtechnik") : repl = repl.replace("{{obj_name}}", "Annex D: Measurements"); break;} + case "Annex E": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang E: Installations-Ausführungen") : repl = repl.replace("{{obj_name}}", "Annex E: Installations"); break;} + case "Annex F": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang F: Anfoderungen an die Stromversorgung") : repl = repl.replace("{{obj_name}}", "Annex F: Requirements to be met on Power Supply"); break;} + case "Annex G4": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang G:
    Mobilfunkanlagen in Gebäude-und Etagenverteilern") : repl = repl.replace("{{obj_name}}", "Annex G: Mobilesystems in Building- and Floordistribution"); break;} + case "Annex I": {(stdObj.lang == "de_DE") ? repl = repl.replace("{{obj_name}}", "Anhang I: Informationen für Management und Betrieb") : repl = repl.replace("{{obj_name}}", "Annex I: Information for Management and Operations"); break;} + } + + // Annex_a-de_DE.png + let annexpng = stdObj.obj_sname; + annexpng = annexpng.replace(" ", "_"); + let obj_struct_img = "/Annexspecs/" + annexpng + "-" + stdObj.lang + ".png"; + //console.log("struct: " + obj_struct_img); + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + + if(stdObj.obj_sname == 'Annex F' || stdObj.obj_sname == 'Annex G4') + { + if(stdObj.ac_class <= 2) + { + repl = repl.replace("{{GLEGACY}}", "G2: "); + } + else if(stdObj.ac_class == 3) + { + repl = repl.replace("{{GLEGACY}}", "G3: "); + } + else if(stdObj.ac_class == 4) + { + repl = repl.replace("{{GLEGACY}}", ""); + } + + repl = repl.replace("{{ac}}", `AC-${stdObj.ac_class}`); + repl = repl.replace("{{pc}}", `PC-${stdObj.pc_class}`); + } + else + { + repl = repl.replace("{{GLEGACY}}", ''); + repl = repl.replace("{{ac}}", ''); + repl = repl.replace("{{pc}}", ''); + } + + var country; + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){country = "World Wide";} + else if(stdObj.country === "WW" && stdObj.lang === "de_DE"){country = "weltweit";} + else if(stdObj.country === "DE" && stdObj.lang === "de_DE"){country = "Deutschland";} + else if(stdObj.country === "DE" && stdObj.lang === "en_GB"){country = "Germany";} + else if(stdObj.country === "SG" && stdObj.lang === "en_GB"){country = "Singapore";} + else if(stdObj.country === "SG" && stdObj.lang === "de_DE"){country = "Singapur";} + else {country = stdObj.country;} + + switch(stdObj.lang) + { + case "de_DE": {repl = repl.replace("{{country}}", "Land: " + country); repl = repl.replace("{{lang}}", "Sprache: deutsch"); break;} + case "en_GB": {repl = repl.replace("{{country}}", "Country: " + country); repl = repl.replace("{{lang}}", "Language: english"); break;} + } + + // page-break + //repl = repl.replace("{{page-break + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + }); +} diff --git a/public/js/annex/showstd.js b/public/js/annex/showstd.js new file mode 100644 index 0000000..e7a3a18 --- /dev/null +++ b/public/js/annex/showstd.js @@ -0,0 +1,471 @@ +// 2020-12-25 11:19 + +function open_show(id) +{ + window.open("/standardsdata/show/" + id); +} + +function open_qedit(id) +{ + window.open("/standardsdata/save/" + id); +} + +function open_edit(id) +{ + window.open("/standardsdata/editor_upd/" + id); +} + +function open_list() +{ + window.open("/standardsdata/list_all"); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "Allgemein"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].obj_lname_en, Obj[i].obj_sname); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_en, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlLstStds() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'Allgemein'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'Allgemein', 'Allgemein'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "Allgemein") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'Allgemein'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'Allgemein', 'Allgemein'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } +setTimeout(getToc.bind(null, stdObj), 3000); +setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 1000); +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/standardsdata/getStdList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(counter) + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'Allgemein') + { + article.innerHTML = `

    ${obj_name} ${cat}

    `; + } + else + { + article.innerHTML = `

    ${cat}

    `; + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += ''; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + + if(obj[i].responsibility) + { + section_head.innerHTML += ' (Verantwortlich: ' + obj[i].responsibility + ')'; + } + if(obj[i].spec_marker !== "nomark") + { + switch(obj[i].spec_marker) + { + case 'green': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'yellow': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + case 'red': {section_head.innerHTML += '
    ' + obj[i].spec_comment + ''; break;} + } + } + + section.appendChild(section_head); + + getSpec(obj[i].id, section); + article.appendChild(section); + } + top_toc.appendChild(article); + }); +} + +function getSpec(id, sect) +{ + fetch("/standardsdata/getStdSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + txtBlob.innerHTML = obj[0].spec_content; + sect.appendChild(txtBlob); + + }); +} + +function getToc(stdObj) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", stdObj.obj_sname], ["cat_sname_en", stdObj.cat_class], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var contentlist = document.getElementById("neuetoc"); + + fetch("/standardsdata/getStdToc", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("getToc no items: " + stdObj.obj_sname); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log("getToc ERROR: " + stdObj.obj_sname);} + } + catch(err) + { + //ignore + } + } + var cat_class = ""; + var catBool = true; + + for (i in obj) + { + let item_cat_title = ""; + let item_cat = obj[i].cat_class; + + if(obj[i].cat_class === "Allgemein" && obj[i].obj_sname !== "Allgemein" && catBool === true) + { + item_cat_title = obj[i].obj_sname + " " + obj[i].cat_class; + catBool = false + + } + else + { + item_cat_title = obj[i].cat_class; + } + + if(cat_class != item_cat) + { + cat_class = item_cat; + item_class = document.createElement("span"); + //item_class.setAttribute('id', item_cat); + item_class.innerHTML = `
  • ${item_cat_title}
  • `; + } + + let item = document.createElement("span"); + item.innerHTML = obj[i].toc; + item_class.appendChild(item); + + contentlist.appendChild(item_class); + } + }); +} diff --git a/public/js/annex/showstd.js_2020-12-25_1025 b/public/js/annex/showstd.js_2020-12-25_1025 new file mode 100644 index 0000000..d7345fe --- /dev/null +++ b/public/js/annex/showstd.js_2020-12-25_1025 @@ -0,0 +1,528 @@ +// 2020-12-22 10:47 + +function open_show(id) +{ + window.open("/standardsdata/show/" + id); +} + +function open_qedit(id) +{ + window.open("/standardsdata/save/" + id); +} + +function open_edit(id) +{ + window.open("/standardsdata/editor_upd/" + id); +} + +function open_list() +{ + window.open("/standardsdata/list_all"); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "Allgemein"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].obj_lname_en, Obj[i].obj_sname); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_en, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlLstStds() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listPlace = document.getElementById("listErg"); + listPlace.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac = document.getElementById("ac_classes").value; + stdObj.pc = document.getElementById("pc_classes").value; + stdObj.release = document.getElementById("releases").value; + + stdObj.active = (stdObj.active == true) ? 1 : 0; + + switch(stdObj.release) + { + case '0': stdObj.release = "draft"; break; + case '1': stdObj.release = "pre-release"; break; + case '2': stdObj.release = "released"; break; + case '3': stdObj.release = "expired"; break; + } + + let catPlace = document.createElement("span"); + catPlace.setAttribute('id', 'top_Allgemein'); + listPlace.appendChild(catPlace); + + if(stdObj.spec_compl == true) + { + // stupid + let allgemObj = new Object(); + Object.assign(allgemObj, stdObj); + allgemObj.obj_sname = 'Allgemein'; + + const tmp_toc = document.getElementById('tmp_toc'); + let toc_title = document.createElement("div"); + toc_title.setAttribute('id', 'toc_Allgemein_Allgemein'); + toc_title.innerHTML = '-- Allgemein --
    '; + tmp_toc.appendChild(toc_title); + + showListStds(allgemObj, 'Allgemein', stdObj.obj_sname) + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let catPlace = document.createElement("span"); + catPlace.setAttribute('id', x[i].value); + let title = document.createElement("h4"); + title.innerText = x[i].value; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + let toc_title = document.createElement("span"); + toc_title.setAttribute('id', 'toc_' + stdObj.obj_sname + '_' + x[i].value); + toc_title.innerHTML = x[i].value + '
    '; + tmp_toc.appendChild(toc_title); + + showListStds(stdObj, x[i].value, stdObj.obj_sname) + } + } + else + { + let catPlace = document.createElement("span"); + catPlace.setAttribute('id', stdObj.cat_class); + let title = document.createElement("h4"); + title.innerText = stdObj.cat_class; + catPlace.appendChild(title); + listPlace.appendChild(catPlace); + + showListStds(stdObj, stdObj.cat_class) + } +} + +function showListStds(stdObj, cat, obj_name) +{ + + + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", stdObj.obj_sname], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.active], ["ac_class", stdObj.ac], ["pc_class", stdObj.pc], ["spec_release", stdObj.release]]); + + let top_Allgemein = false; + + if (stdObj.obj_sname != "Allgemein") + { + top_Allgemein = false; + } + else + { + top_Allgemein = true; + } + +//? let liste__toc = document.getElementById("liste__" + cat); + + fetch("/standardsdata/getStdList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + document.getElementById("greenmsg").innerHTML = "gefunden: " + obj.length; + + let art = document.createElement("article"); + let head = document.createElement("h1"); + //head.setAttribute('id', "c_" + cat); + + if(top_Allgemein == true) + { + head.setAttribute('id', "top_Allgemein"); + head.innerText = "top_Allgemein"; + } + else + { + head.setAttribute('id', cat); + head.innerText = cat; + } + art.appendChild(head); + + let iv = document.createElement("li"); + iv.setAttribute('id', "iv_" + cat); + //iv.innerText = cat; + iv.innerHTML = '' + cat + ''; + let ivo = document.createElement("ol"); + iv.appendChild(ivo); + inhaltv.appendChild(iv); + + /* + console.log("toci: " + "toc_" + cat); + try{ + console.log("toci: " + "toc_" + cat); + let toci = document.getElementById("toc_Allgemein"); + toci.innerHTML = "toc_" + cat; + //toci.appendChild(iv); + } + catch(err) {console.log("toci: " + err);} */ + + + //art.setAttribute('id', cat); + + for (i in obj) + { + let sect = ""; + if(!obj[i].hasOwnProperty('ERROR')) + { + sect = document.createElement("section"); + //sect.setAttribute('id', obj[i].id); + sect.setAttribute('id', obj[i].id); + let head = document.createElement("small"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + //#Inhaltsverzeichnis arrow-up-circle-fill + var erg = "   "; + erg += "   "; + erg += '   '; + erg += '   '; + erg += '   '; + erg += ''; + + head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + erg + ""; +// ? head.innerHTML += obj[i].toc; + sect.appendChild(head); + + let repl = document.createElement("span"); + repl.innerHTML = obj[i].spec_content; + sect.appendChild(repl); + + let tmp_toc = document.getElementById('toc_' + obj_name + '_' + cat); + let toc_item = document.createElement("span"); + toc_item.innerHTML = obj[i].toc; + tmp_toc.appendChild(toc_item); + + //let liste_item = document.createElement("p"); + //liste_item.innerHTML = obj[i].toc; + //liste__toc.appendChild(liste_item); +// ? liste__toc.insertAdjacentHTML("beforeend", obj[i].toc + " (" + cat + ")
    "); + +// 2 let ivc = document.createElement("li"); + //ivc.innerText = obj[i].spec_title; +// 2 ivc.innerHTML = '' + obj[i].spec_title + ''; +// 2 ivo.appendChild(ivc); + + //console.log("Adding titel: " + obj[i].spec_title); +// 2 var idtoc = '' + obj[i].spec_title + ''; + + art.appendChild(sect); + +//? getSpec(obj[i].id, sect, stdObj, obj_name); + } + else + { + document.getElementById("redmsg").innerHTML = "Fehler passiert: " + obj[i].errMsg; + } + + if(top_Allgemein == true) + { + document.getElementById("top_Allgemein").appendChild(art); + } + else + { + document.getElementById(cat).appendChild(art); + } + + //document.getElementById(cat).appendChild(art); + } + }); +} + +function getSpec(id, sect, stdObj, obj_name) +{ + + fetch("/standardsdata/getStdSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + let repl = obj[0].spec_content; + + // var res = str.replace(/blue/g, "red"); + if(obj_name != undefined) + { + switch(obj_name) + { + case "ND": repl = repl.replace("{{obj_name}}", "Network Distribution (ND)"); break; + case "BD": repl = repl.replace("{{obj_name}}", "Buidling Distribution (BD)"); break; + case "FD_Room": repl = repl.replace("{{obj_name}}", "Floor Distribution (Room) (FD_Room)"); break; + case "FD_Rack": repl = repl.replace("{{obj_name}}", "Floor Distribution Rack-System (FD_Rack)"); break; + case "DBA": repl = repl.replace("{{obj_name}}", "Data Backup Archive (DBA)"); break; + case "SRV": repl = repl.replace("{{obj_name}}", "Server/Storage Room (SRV)"); break; + case "NCC": repl = repl.replace("{{obj_name}}", "Network Communication Center (NCC)"); break; + case "DC": repl = repl.replace("{{obj_name}}", "Datacenter (DC)"); break; + } + repl = repl.replace("{{obj_name}}", obj_name); + + let obj_struct_img = "/Objspecs/" + "g2-" + lang + ".png"; + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + } + + + if(stdObj.ac != 'undefined') + { + repl = repl.replace("{{ac}}", stdObj.ac); + } + if(stdObj.pc != 'undefined') + { + repl = repl.replace("{{pc}}", stdObj.pc); + } + + if(stdObj.country != 'undefined') + { + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){stdObj.country = "World Wide";} + if(stdObj.country === "WW" && stdObj.lang === "de_DE"){stdObj.country = "weltweit";} + switch(stdObj.lang) + { + case "de_DE": repl = repl.replace("{{country}}", "Land: " + stdObj.country); break; + case "en_GB": repl = repl.replace("{{country}}", "Country: " + stdObj.country); break; + } + /* + case "WW": repl = repl.replace("{{country}}", "World Wide"); break; + case "DE": repl = repl.replace("{{country}}", "Deutschland"); break; + case "EN": repl = repl.replace("{{country}}", "England"); break; + case "US": repl = repl.replace("{{country}}", "US"); break; + case "ZA": repl = repl.replace("{{country}}", "South Africa"); break; + case "JP": repl = repl.replace("{{country}}", "Japan"); break; + case "CN": repl = repl.replace("{{country}}", "China"); break; + */ + } + if(stdObj.lang != 'undefined') + { + switch(stdObj.lang) + { + case "de_DE": repl = repl.replace("{{lang}}", "Sprache: deutsch"); break; + case "en_GB": repl = repl.replace("{{lang}}", "Language: english"); break; + default: repl = repl.replace("{{lang}}", stdObj.lang); break; + } + } + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + + let toc_item = document.createElement("span"); + toc_item.innerHTML = stdObj.toc; + tmp_toc.appendChild(toc_item); +/* + try{ + let tcat = document.getElementById("toc_" + obj[0].cat + "_sub") ; + var idtoc = '
  • ' + obj[0].spec_title + '
  • '; + //tcat.innerHTML += idtoc; + tcat.insertAdjacentHTML('beforeend', idtoc); + } + catch(err) + {console.log("Error getSpec toc:" + err + " -- toc_" + obj[0].cat + "_sub");} +*/ + + }); +} + diff --git a/public/js/annex/showstd.js_2020-12-25_1345 b/public/js/annex/showstd.js_2020-12-25_1345 new file mode 100644 index 0000000..3212db4 --- /dev/null +++ b/public/js/annex/showstd.js_2020-12-25_1345 @@ -0,0 +1,448 @@ +// 2020-12-25 11:19 + +function open_show(id) +{ + window.open("/standardsdata/show/" + id); +} + +function open_qedit(id) +{ + window.open("/standardsdata/save/" + id); +} + +function open_edit(id) +{ + window.open("/standardsdata/editor_upd/" + id); +} + +function open_list() +{ + window.open("/standardsdata/list_all"); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "Allgemein"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].obj_lname_en, Obj[i].obj_sname); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_en, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlLstStds() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'Allgemein'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'Allgemein', 'Allgemein'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + showListStds(stdObj, stdObj.cat_class); + } +setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 1000); +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/standardsdata/getStdList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(counter) + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'Allgemein') + { + article.innerHTML = `

    ${obj_name} ${cat}

    `; + } + else + { + article.innerHTML = `

    ${cat}

    `; + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', "section_" + obj[i].id); + let section_head = document.createElement("small"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += ''; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + section.appendChild(section_head); + +// getSpec(obj[i].id, sect); + article.appendChild(section); + } + top_toc.appendChild(article); + }); +} + +function getSpec(id, sect, stdObj, obj_name) +{ + + fetch("/standardsdata/getStdSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + let repl = obj[0].spec_content; + + // var res = str.replace(/blue/g, "red"); + if(obj_name != undefined) + { + switch(obj_name) + { + case "ND": repl = repl.replace("{{obj_name}}", "Network Distribution (ND)"); break; + case "BD": repl = repl.replace("{{obj_name}}", "Buidling Distribution (BD)"); break; + case "FD_Room": repl = repl.replace("{{obj_name}}", "Floor Distribution (Room) (FD_Room)"); break; + case "FD_Rack": repl = repl.replace("{{obj_name}}", "Floor Distribution Rack-System (FD_Rack)"); break; + case "DBA": repl = repl.replace("{{obj_name}}", "Data Backup Archive (DBA)"); break; + case "SRV": repl = repl.replace("{{obj_name}}", "Server/Storage Room (SRV)"); break; + case "NCC": repl = repl.replace("{{obj_name}}", "Network Communication Center (NCC)"); break; + case "DC": repl = repl.replace("{{obj_name}}", "Datacenter (DC)"); break; + } + repl = repl.replace("{{obj_name}}", obj_name); + + let obj_struct_img = "/Objspecs/" + "g2-" + lang + ".png"; + repl = repl.replace("{{obj_struct_img}}", obj_struct_img); + } + + + if(stdObj.ac != 'undefined') + { + repl = repl.replace("{{ac}}", stdObj.ac); + } + if(stdObj.pc != 'undefined') + { + repl = repl.replace("{{pc}}", stdObj.pc); + } + + if(stdObj.country != 'undefined') + { + if(stdObj.country === "WW" && stdObj.lang === "en_GB"){stdObj.country = "World Wide";} + if(stdObj.country === "WW" && stdObj.lang === "de_DE"){stdObj.country = "weltweit";} + switch(stdObj.lang) + { + case "de_DE": repl = repl.replace("{{country}}", "Land: " + stdObj.country); break; + case "en_GB": repl = repl.replace("{{country}}", "Country: " + stdObj.country); break; + } + /* + case "WW": repl = repl.replace("{{country}}", "World Wide"); break; + case "DE": repl = repl.replace("{{country}}", "Deutschland"); break; + case "EN": repl = repl.replace("{{country}}", "England"); break; + case "US": repl = repl.replace("{{country}}", "US"); break; + case "ZA": repl = repl.replace("{{country}}", "South Africa"); break; + case "JP": repl = repl.replace("{{country}}", "Japan"); break; + case "CN": repl = repl.replace("{{country}}", "China"); break; + */ + } + if(stdObj.lang != 'undefined') + { + switch(stdObj.lang) + { + case "de_DE": repl = repl.replace("{{lang}}", "Sprache: deutsch"); break; + case "en_GB": repl = repl.replace("{{lang}}", "Language: english"); break; + default: repl = repl.replace("{{lang}}", stdObj.lang); break; + } + } + + txtBlob.innerHTML = repl; + sect.appendChild(txtBlob); + + + let toc_item = document.createElement("span"); + toc_item.innerHTML = stdObj.toc; + tmp_toc.appendChild(toc_item); +/* + try{ + let tcat = document.getElementById("toc_" + obj[0].cat + "_sub") ; + var idtoc = '
  • ' + obj[0].spec_title + '
  • '; + //tcat.innerHTML += idtoc; + tcat.insertAdjacentHTML('beforeend', idtoc); + } + catch(err) + {console.log("Error getSpec toc:" + err + " -- toc_" + obj[0].cat + "_sub");} +*/ + + }); +} + diff --git a/public/js/annex/showstd.js_2020-12-29_1138 b/public/js/annex/showstd.js_2020-12-29_1138 new file mode 100644 index 0000000..9b21391 --- /dev/null +++ b/public/js/annex/showstd.js_2020-12-29_1138 @@ -0,0 +1,453 @@ +// 2020-12-25 11:19 + +function open_show(id) +{ + window.open("/standardsdata/show/" + id); +} + +function open_qedit(id) +{ + window.open("/standardsdata/save/" + id); +} + +function open_edit(id) +{ + window.open("/standardsdata/editor_upd/" + id); +} + +function open_list() +{ + window.open("/standardsdata/list_all"); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "Allgemein"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].obj_lname_en, Obj[i].obj_sname); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_en, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlLstStds() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'Allgemein'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'Allgemein', 'Allgemein'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "Allgemein") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'Allgemein'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'Allgemein', 'Allgemein'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } +setTimeout(getToc.bind(null, stdObj), 3000); +setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 1000); +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/standardsdata/getStdList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(counter) + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'Allgemein') + { + article.innerHTML = `

    ${obj_name} ${cat}

    `; + } + else + { + article.innerHTML = `

    ${cat}

    `; + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += ''; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + section.appendChild(section_head); + + getSpec(obj[i].id, section); + article.appendChild(section); + } + top_toc.appendChild(article); + }); +} + +function getSpec(id, sect) +{ + fetch("/standardsdata/getStdSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + txtBlob.innerHTML = obj[0].spec_content; + sect.appendChild(txtBlob); + + }); +} + +function getToc(stdObj) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", stdObj.obj_sname], ["cat_sname_en", stdObj.cat_class], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var contentlist = document.getElementById("neuetoc"); + + fetch("/standardsdata/getStdToc", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("getToc no items: " + stdObj.obj_sname); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log("getToc ERROR: " + stdObj.obj_sname);} + } + catch(err) + { + //ignore + } + } + var cat_class = ""; + for (i in obj) + { + let item_cat_title = ""; + let item_cat = obj[i].cat_class; + + if(obj[i].cat_class == "Allgemein" && obj[i].obj_sname != "Allgemein") + { + item_cat_title = obj[i].obj_sname + " " + obj[i].cat_class; + + } + else + { + item_cat_title = obj[i].cat_class; + } + + if(cat_class != item_cat) + { + cat_class = item_cat; + item_class = document.createElement("span"); + //item_class.setAttribute('id', item_cat); + item_class.innerHTML = `${item_cat_title}
    `; + } + + let item = document.createElement("span"); + item.innerHTML = obj[i].toc; + item_class.appendChild(item); + + contentlist.appendChild(item_class); + } + }); +} diff --git a/public/js/annex/showstd.js_2020-12-29_1235 b/public/js/annex/showstd.js_2020-12-29_1235 new file mode 100644 index 0000000..c8a25e1 --- /dev/null +++ b/public/js/annex/showstd.js_2020-12-29_1235 @@ -0,0 +1,453 @@ +// 2020-12-25 11:19 + +function open_show(id) +{ + window.open("/standardsdata/show/" + id); +} + +function open_qedit(id) +{ + window.open("/standardsdata/save/" + id); +} + +function open_edit(id) +{ + window.open("/standardsdata/editor_upd/" + id); +} + +function open_list() +{ + window.open("/standardsdata/list_all"); +} + +function getObjects(Obj) +{ + const selectbox = document.getElementById("obj_name"); + const newOption = new Option("Allgemein", "Allgemein"); + selectbox.add(newOption, undefined); + + //Obj.reverse(); + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].obj_lname_en, Obj[i].obj_sname); + selectbox.add(newOption, undefined); + } + } + } + document.getElementById("obj_name").addEventListener("click", getAcPc); +} + +function getCategories(Obj) +{ + const selectbox = document.getElementById("cat"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].cat_sname_en, Obj[i].cat_sname_en); + selectbox.add(newOption, undefined); + } + } + selectbox.selectedIndex = "0"; + document.getElementById("spec_complete").addEventListener("click", catSelection); +} + +function getLanguages(Obj) +{ + const selectbox = document.getElementById("lang"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_val); + selectbox.add(newOption, undefined); + } + } +} + +function getReleaseTypes(Obj) +{ + let selectbox = document.getElementById("releases"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].std_attr, Obj[i].std_attr); + selectbox.add(newOption, undefined); + } + } +} + +function getjsonExistCountries(Obj) +{ + const selectbox = document.getElementById("countries"); + + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let newOption = new Option(Obj[i].country, Obj[i].country); + selectbox.add(newOption, undefined); + } + } +} + +// ##### +function getAcPc() +{ + let ac_selectbox = document.getElementById("ac_classes"); + ac_selectbox.innerHTML = ""; + let pc_selectbox = document.getElementById("pc_classes"); + pc_selectbox.innerHTML = ""; + + let iObj = document.getElementById("obj_name").selectedIndex; + let oObj = document.getElementById("obj_name").options; + let obj = oObj[iObj].value; + + if(obj === "Allgemein") + { + let newOption = new Option("AC-0", "0"); + ac_selectbox.add(newOption, undefined); + newOption = new Option("PC-0", "0"); + pc_selectbox.add(newOption, undefined); + document.getElementById("cat").selectedIndex = 0; + document.getElementById("cat").disabled=true; + return; + } + else + { + document.getElementById("cat").disabled=false; + } + + if(document.getElementById("spec_complete").checked) + { + console.log("Allg = on"); + let cats = document.getElementById('cat'); + cats.selectedIndex = 0; + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = true; + } + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } + + fetch("/acclasses/getObjAcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let ac = "AC-" + Obj[i].ac_class; + let newOption = new Option(ac, Obj[i].ac_class); + ac_selectbox.add(newOption, undefined); + } + } + }); + + fetch("/pcclasses/getObjPcJson?obj=" + obj + "&active=1").then(function (response) + { + return response.json(); + }).then(function (json) + { + var Obj = json; + for (i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + let pc = "PC-" + Obj[i].pc_class; + let newOption = new Option(pc, Obj[i].pc_class); + pc_selectbox.add(newOption, undefined); + } + } + }); +} + +function catSelection() +{ + if(document.getElementById("spec_complete").checked) + { + document.getElementById("cat").disabled=true; + } + else + { + document.getElementById("cat").disabled=false; + let cats = document.getElementById('cat'); + for (i = 1; i < cats.length; i++) + { + cats.options[i].disabled = false; + } + } +} + +function getlLstStds() +{ + document.getElementById("redmsg").innerHTML = ""; + document.getElementById("greenmsg").innerHTML = ""; + const listErg = document.getElementById("listErg"); + listErg.innerHTML = ""; + + var stdObj = new Object(); + stdObj.obj_sname = document.getElementById("obj_name").value; + if(stdObj.obj_sname == "0") + { + document.getElementById("redmsg").innerHTML = "Bitte ein Objekt auswählen"; + return; + } + + stdObj.cat_class = document.getElementById("cat").value; + stdObj.country = document.getElementById("countries").value; + stdObj.lang = document.getElementById("lang").value; + stdObj.spec_active = document.getElementById("spec_active").checked; + stdObj.spec_compl = document.getElementById("spec_complete").checked; + stdObj.ac_class = document.getElementById("ac_classes").value; + stdObj.pc_class = document.getElementById("pc_classes").value; + stdObj.spec_release = document.getElementById("releases").value; + + stdObj.spec_active = (stdObj.spec_active == true) ? 1 : 0; + + // stupid + switch(stdObj.spec_release) + { + case '0': stdObj.spec_release = "draft"; break; + case '1': stdObj.spec_release = "pre-release"; break; + case '2': stdObj.spec_release = "released"; break; + case '3': stdObj.spec_release = "expired"; break; + } + + if(stdObj.spec_compl == true) + { + // stupid + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'Allgemein'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'Allgemein', 'Allgemein'); + + const x = document.getElementById('cat'); + for (let i = 0; i < x.length; i++) + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', x[i].value); + listErg.appendChild(top_toc); + + showListStds(stdObj, x[i].value); + } + } + else + { + if(stdObj.obj_sname === "Allgemein") + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', "top_" + 'Allgemein'); + listErg.appendChild(top_toc); + + showListStds(stdObj, 'Allgemein', 'Allgemein'); + } + else + { + let top_toc = document.createElement("span"); + top_toc.setAttribute('id', stdObj.cat_class); + listErg.appendChild(top_toc); + + showListStds(stdObj, stdObj.cat_class); + } + } +setTimeout(getToc.bind(null, stdObj), 3000); +setTimeout(() => { document.getElementById("greenmsg").innerHTML += " Bausteine gefunden"; }, 1000); +} + +function showListStds(stdObj, cat, obj_name) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", obj_name], ["cat_sname_en", cat], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var top_toc; + if(obj_name == cat) + { + top_toc = document.getElementById("top_" + cat); + } + else + { + top_toc = document.getElementById(cat); + } + + fetch("/standardsdata/getStdList", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("showListStds no item: " + `obj_name: ${obj_name} cat: ${cat}`); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log(`showListStds ERROR: obj_name: ${obj_name} cat: ${cat} Msg: ${obj[0].errMsg}`);} + } + catch(err) + { + //ignore + } + } + let counter = document.getElementById("greenmsg").innerHTML; + document.getElementById("greenmsg").innerHTML = Number(counter) + obj.length; + + let article = document.createElement("article"); + if(obj_name != cat && cat == 'Allgemein') + { + article.innerHTML = `

    ${obj_name} ${cat}

    `; + } + else + { + article.innerHTML = `

    ${cat}

    `; + } + + for (i in obj) + { + let sect = ""; + section = document.createElement("section"); + section.setAttribute('id', obj[i].id); + let section_head = document.createElement("small"); + + var d = new Date(obj[i].spec_last_modified); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + var yy = d.getFullYear(); + + if(mm < 10) + { + mm = "0" + mm; + } + if(dd < 10) + { + dd = "0" + dd; + } + let datestr = yy + "-" + mm + "-" + dd; + + let section_mnu = '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += '   '; + section_mnu += ''; + + section_head.innerHTML = obj[i].spec_title + " (" + obj[i].lfdnr + ") " + obj[i].spec_version + " vom " + datestr + "" + section_mnu + ""; + section.appendChild(section_head); + + getSpec(obj[i].id, section); + article.appendChild(section); + } + top_toc.appendChild(article); + }); +} + +function getSpec(id, sect) +{ + fetch("/standardsdata/getStdSpec?id=" + id, { + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + let txtBlob = document.createElement("span"); + + txtBlob.innerHTML = obj[0].spec_content; + sect.appendChild(txtBlob); + + }); +} + +function getToc(stdObj) +{ + obj_name = (obj_name === undefined) ? stdObj.obj_sname : obj_name; + data = new URLSearchParams([["getStdType", "show"], ["obj_sname", stdObj.obj_sname], ["cat_sname_en", stdObj.cat_class], ["country", stdObj.country], ["lang", stdObj.lang], ["spec_active", stdObj.spec_active], ["ac_class", stdObj.ac_class], ["pc_class", stdObj.pc_class], ["spec_release", stdObj.spec_release]]); + var contentlist = document.getElementById("neuetoc"); + + fetch("/standardsdata/getStdToc", + { + body: data, + method: "post" + }).then(function (response) + { + return response.json(); + }).then(function (json) + { + var obj = json; + + if(obj.length < 1) + { + console.log("getToc no items: " + stdObj.obj_sname); + return; + } + else if(obj.length == 1) + { + try + { + if(obj[0].hasOwnProperty('ERROR') && obj[0].ERROR == "1") {console.log("getToc ERROR: " + stdObj.obj_sname);} + } + catch(err) + { + //ignore + } + } + var cat_class = ""; + for (i in obj) + { + let item_cat_title = ""; + let item_cat = obj[i].cat_class; + + if(obj[i].cat_class == "Allgemein" && obj[i].obj_sname != "Allgemein") + { + item_cat_title = obj[i].obj_sname + " " + obj[i].cat_class; + + } + else + { + item_cat_title = obj[i].cat_class; + } + + if(cat_class != item_cat) + { + cat_class = item_cat; + item_class = document.createElement("span"); + //item_class.setAttribute('id', item_cat); + item_class.innerHTML = `${item_cat_title}
    `; + } + + let item = document.createElement("span"); + item.innerHTML = obj[i].toc; + item_class.appendChild(item); + + contentlist.appendChild(item_class); + } + }); +} diff --git a/public/js/annexlist-data/AnnexlistData.js b/public/js/annexlist-data/AnnexlistData.js new file mode 100644 index 0000000..3ac98e3 --- /dev/null +++ b/public/js/annexlist-data/AnnexlistData.js @@ -0,0 +1,143 @@ +var lang = 'de'; + +try +{ + lang = checkLangCookie(); +} +catch(err) +{ + lang = 'de'; +} + +class AnnexlistData extends HTMLElement +{ + constructor() + { + super(); + this.lang = 'de'; + } + + connectedCallback() + { + this.getGlossar(); + } + + attributeChangedCallback(name, oldValue, newValue) + { + if(oldValue !== newValue) + { + if(name === "lang") + { + this.lang = newValue; + this.updateMessage(); + } + if(name === 'annex') + { + this.annex = newValue; + this.updateMessage(); + } + } + } + + static get observedAttributes() + { + return ["lang", 'annex']; + } + + get message() + { + return this.lang; + } + + set message(value) + { + this.lang = value; + this.updateMessage(); + } + + updateMessage() + { + try + { + lang = this.lang; + } + catch(e){} + } + + getGlossar() + { + return new Promise((res, rej) => { + fetch('/catclasses/getAllJson/1/annex') + .then(data => data.json()) + .then((json) => { + this.renderGlossar(json); + res(); + }) + .catch((error) => {this.annonymous(error);}); + }) + } + + annonymous(error) + { + const div = document.createElement("div"); + div.innerHTML = error; + + this.appendChild(div); + } + + renderGlossar(data) + { + var Obj = data; + let li, repl; + + for (let i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + li = document.createElement("li"); + let dataaktiv = document.getElementById("obj_name").value; + + //console.log("Dok: " + this.annex + " - " + Obj[i].cat_sname_en); + + if(this.annex !== Obj[i].cat_sname_en) + { + + if(this.lang === "de") + { + repl = Obj[i].cat_lname_de; + //repl = repl.replace(`${Obj[i].cat_sname_de}: `, ""); [data-aktiv*="yepp"] + repl = repl.replace(/Anhang.*: /, ""); + if(dataaktiv === Obj[i].cat_sname_en) + { + li.innerHTML = `${Obj[i].cat_sname_de} - ${repl}`; + } + else + { + li.innerHTML = `${Obj[i].cat_sname_de} - ${repl}`; + } + } + else + { + repl = Obj[i].cat_lname_en; + //repl = repl.replace(`${Obj[i].cat_sname_de}: `, ""); [data-aktiv*="yepp"] + repl = repl.replace(/Annex.*: /, ""); + if(dataaktiv === Obj[i].cat_sname_en) + { + li.innerHTML = `${Obj[i].cat_sname_en} - ${repl}`; + } + else + { + li.innerHTML = `${Obj[i].cat_sname_en} - ${repl}`; + } + } + + this.appendChild(li); + } + } + } + } + +} +customElements.define("data-annexlist", AnnexlistData); + + diff --git a/public/js/annexlist-data/AnnexlistData.js_2021-05-01_1016 b/public/js/annexlist-data/AnnexlistData.js_2021-05-01_1016 new file mode 100644 index 0000000..5e8d35b --- /dev/null +++ b/public/js/annexlist-data/AnnexlistData.js_2021-05-01_1016 @@ -0,0 +1,132 @@ +var lang = 'de'; + +try +{ + lang = checkLangCookie(); +} +catch(err) +{ + lang = 'de'; +} + +class AnnexlistData extends HTMLElement +{ + constructor() + { + super(); + this._lang = 'de'; + } + + connectedCallback() + { + this.getGlossar(); + } + + attributeChangedCallback(name, oldValue, newValue) + { + if(oldValue !== newValue) + { + if(name === "lang") + { + this._lang = newValue; + this.updateMessage(); + } + } + } + + static get observedAttributes() + { + return ["lang"]; + } + + get message() + { + return this._lang; + } + + set message(value) + { + this._lang = value; + this.updateMessage(); + } + + updateMessage() + { + try + { + lang = this._lang; + } + catch(e){} + } + + getGlossar() + { + return new Promise((res, rej) => { + fetch('/catclasses/getAllJson/1/annex') + .then(data => data.json()) + .then((json) => { + this.renderGlossar(json); + res(); + }) + .catch((error) => {this.annonymous(error);}); + }) + } + + annonymous(error) + { + const div = document.createElement("div"); + div.innerHTML = error; + + this.appendChild(div); + } + + renderGlossar(data) + { + var Obj = data; + let li, repl; + + for (let i in Obj) + { + if(!Obj[i].hasOwnProperty('ERROR')) + { + li = document.createElement("li"); + let dataaktiv = document.getElementById("obj_name").value; + + if(lang === "de") + { + repl = Obj[i].cat_lname_de; + //repl = repl.replace(`${Obj[i].cat_sname_de}: `, ""); [data-aktiv*="yepp"] + repl = repl.replace(/Anhang.*: /, ""); + if(dataaktiv === Obj[i].cat_sname_en) + { + li.innerHTML = `${Obj[i].cat_sname_de} - ${repl}`; + } + else + { + li.innerHTML = `${Obj[i].cat_sname_de} - ${repl}`; + } + } + else + { + repl = Obj[i].cat_lname_en; + //repl = repl.replace(`${Obj[i].cat_sname_de}: `, ""); [data-aktiv*="yepp"] + repl = repl.replace(/Annex.*: /, ""); + if(dataaktiv === Obj[i].cat_sname_en) + { + li.innerHTML = `${Obj[i].cat_sname_en} - ${repl}`; + } + else + { + li.innerHTML = `${Obj[i].cat_sname_en} - ${repl}`; + } + } + + this.appendChild(li); + } + } + } + +} +customElements.define("data-annexlist", AnnexlistData); + + diff --git a/public/js/ckedit5/20.0.0/ckeditor.js b/public/js/ckedit5/20.0.0/ckeditor.js new file mode 100644 index 0000000..72b6091 --- /dev/null +++ b/public/js/ckedit5/20.0.0/ckeditor.js @@ -0,0 +1,6 @@ +/*! + * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md. + */ +(function(e){const t=e["de"]=e["de"]||{};t.dictionary=Object.assign(t.dictionary||{},{"%0 of %1":"%0 von %1","Align cell text to the bottom":"Zellentext unten ausrichten","Align cell text to the center":"Zellentext zentriert ausrichten","Align cell text to the left":"Zellentext linksbündig ausrichten","Align cell text to the middle":"Zellentext mittig ausrichten","Align cell text to the right":"Zellentext rechtsbündig ausrichten","Align cell text to the top":"Zellentext oben ausrichten","Align center":"Zentriert","Align left":"Linksbündig","Align right":"Rechtsbündig","Align table to the left":"Tabelle links ausrichten","Align table to the right":"Tabelle rechts ausrichten",Alignment:"Ausrichtung",Aquamarine:"Aquamarinblau",Background:"Hintergrund",Big:"Groß",Black:"Schwarz","Block quote":"Blockzitat",Blue:"Blau","Blue marker":"Blauer Marker",Bold:"Fett",Border:"Rahmen","Bulleted List":"Aufzählungsliste",Cancel:"Abbrechen","Cell properties":"Zelleneigenschaften","Center table":"Tabelle zentrieren","Centered image":"zentriertes Bild","Change image text alternative":"Alternativ Text ändern","Choose heading":"Überschrift auswählen",Code:"Code",Color:"Farbe","Color picker":"Farbwähler",Column:"Spalte",Dashed:"Gestrichelt","Decrease indent":"Einzug verkleinern",Default:"Standard","Delete column":"Spalte löschen","Delete row":"Zeile löschen","Dim grey":"Dunkelgrau",Dimensions:"Größe","Document colors":"Dokumentfarben",Dotted:"Gepunktet",Double:"Doppelt",Downloadable:"Herunterladbar","Dropdown toolbar":"Dropdown-Liste Werkzeugleiste","Edit link":"Link bearbeiten","Editor toolbar":"Editor Werkzeugleiste","Enter image caption":"Bildunterschrift eingeben","Font Background Color":"Hintergrundfarbe","Font Color":"Schriftfarbe","Font Family":"Schriftart","Font Size":"Schriftgröße","Full size image":"Bild in voller Größe",Green:"Grün","Green marker":"Grüner Marker","Green pen":"Grüne Schriftfarbe",Grey:"Grau",Groove:"Eingeritzt","Header column":"Kopfspalte","Header row":"Kopfzeile",Heading:"Überschrift","Heading 1":"Überschrift 1","Heading 2":"Überschrift 2","Heading 3":"Überschrift 3","Heading 4":"Überschrift 4","Heading 5":"Überschrift 5","Heading 6":"Überschrift 6",Height:"Höhe",Highlight:"Texthervorhebung","Horizontal text alignment toolbar":"Werkzeugleiste für die horizontale Zellentext-Ausrichtung",Huge:"Sehr groß","Image toolbar":"Bild Werkzeugleiste","image widget":"Bild-Steuerelement","Increase indent":"Einzug vergrößern","Insert code block":"Block einfügen","Insert column left":"Spalte links einfügen","Insert column right":"Spalte rechts einfügen","Insert image":"Bild einfügen","Insert media":"Medium einfügen","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Zeile oben einfügen","Insert row below":"Zeile unten einfügen","Insert table":"Tabelle einfügen",Inset:"Eingelassen",Italic:"Kursiv",Justify:"Blocksatz","Justify cell text":"Zellentext als Blocksatz ausrichten","Left aligned image":"linksbündiges Bild","Light blue":"Hellblau","Light green":"Hellgrün","Light grey":"Hellgrau",Link:"Link","Link URL":"Link Adresse","Media URL":"Medien-Url","media widget":"Medien-Widget","Merge cell down":"Zelle unten verbinden","Merge cell left":"Zelle links verbinden","Merge cell right":"Zelle rechts verbinden","Merge cell up":"Zelle verbinden","Merge cells":"Zellen verbinden",Next:"Nächste",None:"Kein Rahmen","Numbered List":"Nummerierte Liste","Open in a new tab":"In neuem Tab öffnen","Open link in new tab":"Link im neuen Tab öffnen",Orange:"Orange",Outset:"Geprägt",Padding:"Innenabstand",Paragraph:"Absatz","Paste the media URL in the input.":"Medien-URL in das Eingabefeld einfügen.","Pink marker":"Pinker Marker","Plain text":"Nur Text",Previous:"vorherige",Purple:"Violett",Red:"Rot","Red pen":"Rote Schriftfarbe",Redo:"Wiederherstellen","Remove color":"Farbe entfernen","Remove highlight":"Texthervorhebung entfernen","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich-Text-Editor, %0",Ridge:"Hervorgehoben","Right aligned image":"rechtsbündiges Bild",Row:"Zeile",Save:"Speichern","Select all":"Alles auswählen","Select column":"Spalte auswählen","Select row":"Zeile auswählen","Show more items":"Mehr anzeigen","Side image":"Seitenbild",Small:"Klein",Solid:"Durchgezogen","Split cell horizontally":"Zelle horizontal teilen","Split cell vertically":"Zelle vertikal teilen",Style:"Rahmenart","Table alignment toolbar":"Werkzeugleiste für die Tabellen-Ausrichtung","Table cell text alignment":"Ausrichtung des Zellentextes","Table properties":"Tabelleneigenschaften","Table toolbar":"Tabelle Werkzeugleiste","Text alignment":"Textausrichtung","Text alignment toolbar":"Text-Ausrichtung Toolbar","Text alternative":"Textalternative","Text highlight toolbar":"Text hervorheben Werkzeugleiste",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"Die Farbe ist ungültig. Probieren Sie „#FF0000“ oder „rgb(255,0,0)“ oder „red“.","The URL must not be empty.":"Die Url darf nicht leer sein",'The value is invalid. Try "10px" or "2em" or simply "2".':"Der Wert ist ungültig. Probieren Sie „10px“ oder „2em“ oder „2“.","This link has no URL":"Dieser Link hat keine Adresse","This media URL is not supported.":"Diese Medien-Url wird nicht unterstützt",Tiny:"Sehr klein","Tip: Paste the URL into the content to embed faster.":"Tipp: Zum schnelleren Einbetten können Sie die Medien-URL in den Inhalt einfügen.",Turquoise:"Türkis",Underline:"Unterstrichen",Undo:"Rückgängig",Unlink:"Link entfernen","Upload failed":"Hochladen fehlgeschlagen","Upload in progress":"Upload läuft","Vertical text alignment toolbar":"Werkzeugleiste für die vertikale Zellentext-Ausrichtung",White:"Weiß","Widget toolbar":"Widget Werkzeugleiste",Width:"Breite",Yellow:"Gelb","Yellow marker":"Gelber Marker"});t.getPluralForm=function(e){return e!=1}})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));(function e(t,n){if(typeof exports==="object"&&typeof module==="object")module.exports=n();else if(typeof define==="function"&&define.amd)define([],n);else if(typeof exports==="object")exports["ClassicEditor"]=n();else t["ClassicEditor"]=n()})(window,(function(){return function(e){var t={};function n(i){if(t[i]){return t[i].exports}var o=t[i]={i:i,l:false,exports:{}};e[i].call(o.exports,o,o.exports,n);o.l=true;return o.exports}n.m=e;n.c=t;n.d=function(e,t,i){if(!n.o(e,t)){Object.defineProperty(e,t,{enumerable:true,get:i})}};n.r=function(e){if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(e,"__esModule",{value:true})};n.t=function(e,t){if(t&1)e=n(e);if(t&8)return e;if(t&4&&typeof e==="object"&&e&&e.__esModule)return e;var i=Object.create(null);n.r(i);Object.defineProperty(i,"default",{enumerable:true,value:e});if(t&2&&typeof e!="string")for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i};n.n=function(e){var t=e&&e.__esModule?function t(){return e["default"]}:function t(){return e};n.d(t,"a",t);return t};n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};n.p="";return n(n.s=126)}([function(e,t,n){"use strict";n.d(t,"b",(function(){return o}));n.d(t,"a",(function(){return r}));const i="https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html";class o extends Error{constructor(e,t,n){e=r(e);if(n){e+=" "+JSON.stringify(n)}super(e);this.name="CKEditorError";this.context=t;this.data=n}is(e){return e==="CKEditorError"}static rethrowUnexpectedError(e,t){if(e.is&&e.is("CKEditorError")){throw e}const n=new o(e.message,t);n.stack=e.stack;throw n}}function r(e){const t=e.match(/^([^:]+):/);if(!t){return e}return e+` Read more: ${i}#error-${t[1]}\n`}},function(e,t,n){"use strict";var i=function e(){var t;return function e(){if(typeof t==="undefined"){t=Boolean(window&&document&&document.all&&!window.atob)}return t}}();var o=function e(){var t={};return function e(n){if(typeof t[n]==="undefined"){var i=document.querySelector(n);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement){try{i=i.contentDocument.head}catch(e){i=null}}t[n]=i}return t[n]}}();var r=[];function s(e){var t=-1;for(var n=0;n:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-editor__editable_inline.ck-blurred ::selection{background:var(--ck-color-editable-blur-selection)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-base-foreground)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-base-foreground)}"},function(e,t,n){var i=n(1);var o=n(23);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-label{display:block}.ck.ck-voice-label{display:none}.ck.ck-label{font-weight:700}"},function(e,t,n){var i=n(1);var o=n(25);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-sticky-panel .ck-sticky-panel__content_sticky{z-index:var(--ck-z-modal);position:fixed;top:0}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{top:auto;position:absolute}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{box-shadow:var(--ck-drop-shadow),0 0;border-width:0 1px 1px;border-top-left-radius:0;border-top-right-radius:0}"},function(e,t,n){var i=n(1);var o=n(27);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-dropdown{display:inline-block;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on .ck-tooltip{display:none}.ck.ck-dropdown .ck-dropdown__panel{-webkit-backface-visibility:hidden;display:none;z-index:var(--ck-z-modal);position:absolute}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{top:100%;bottom:auto}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}:root{--ck-dropdown-arrow-size:calc(0.5*var(--ck-icon-size))}.ck.ck-dropdown{font-size:inherit}.ck.ck-dropdown .ck-dropdown__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{width:7em;overflow:hidden;text-overflow:ellipsis}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-dropdown__button_label-width_auto .ck-button__label{width:auto}.ck.ck-dropdown__panel{border-radius:0}.ck-rounded-corners .ck.ck-dropdown__panel,.ck.ck-dropdown__panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-dropdown__panel{box-shadow:var(--ck-drop-shadow),0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);bottom:0;min-width:100%}.ck.ck-dropdown__panel.ck-dropdown__panel_se{border-top-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_sw{border-top-right-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_ne{border-bottom-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_nw{border-bottom-right-radius:0}"},function(e,t,n){var i=n(1);var o=n(29);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-icon{vertical-align:middle}:root{--ck-icon-size:calc(var(--ck-line-height-base)*var(--ck-font-size-normal))}.ck.ck-icon{width:var(--ck-icon-size);height:var(--ck-icon-size);font-size:.8333350694em;will-change:transform}.ck.ck-icon,.ck.ck-icon *{color:inherit;cursor:inherit}.ck.ck-icon :not([fill]){fill:currentColor}"},function(e,t,n){var i=n(1);var o=n(31);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck.ck-tooltip,.ck.ck-tooltip .ck-tooltip__text:after{position:absolute;pointer-events:none;-webkit-backface-visibility:hidden}.ck.ck-tooltip{visibility:hidden;opacity:0;display:none;z-index:var(--ck-z-modal)}.ck.ck-tooltip .ck-tooltip__text{display:inline-block}.ck.ck-tooltip .ck-tooltip__text:after{content:"";width:0;height:0}:root{--ck-tooltip-arrow-size:5px}.ck.ck-tooltip{left:50%;top:0;transition:opacity .2s ease-in-out .2s}.ck.ck-tooltip .ck-tooltip__text{border-radius:0}.ck-rounded-corners .ck.ck-tooltip .ck-tooltip__text,.ck.ck-tooltip .ck-tooltip__text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-tooltip .ck-tooltip__text{font-size:.9em;line-height:1.5;color:var(--ck-color-tooltip-text);padding:var(--ck-spacing-small) var(--ck-spacing-medium);background:var(--ck-color-tooltip-background);position:relative;left:-50%}.ck.ck-tooltip .ck-tooltip__text:after{transition:opacity .2s ease-in-out .2s;border-style:solid;left:50%}.ck.ck-tooltip.ck-tooltip_s{bottom:calc(-1*var(--ck-tooltip-arrow-size));transform:translateY(100%)}.ck.ck-tooltip.ck-tooltip_s .ck-tooltip__text:after{top:calc(-1*var(--ck-tooltip-arrow-size));transform:translateX(-50%);border-left-color:transparent;border-bottom-color:var(--ck-color-tooltip-background);border-right-color:transparent;border-top-color:transparent;border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:var(--ck-tooltip-arrow-size);border-right-width:var(--ck-tooltip-arrow-size);border-top-width:0}.ck.ck-tooltip.ck-tooltip_n{top:calc(-1*var(--ck-tooltip-arrow-size));transform:translateY(-100%)}.ck.ck-tooltip.ck-tooltip_n .ck-tooltip__text:after{bottom:calc(-1*var(--ck-tooltip-arrow-size));transform:translateX(-50%);border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent;border-top-color:var(--ck-color-tooltip-background);border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:0;border-right-width:var(--ck-tooltip-arrow-size);border-top-width:var(--ck-tooltip-arrow-size)}'},function(e,t,n){var i=n(1);var o=n(33);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-button,a.ck.ck-button{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:block}@media (hover:none){.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:none}}.ck.ck-button,a.ck.ck-button{position:relative;display:inline-flex;align-items:center;justify-content:left}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{display:none}.ck.ck-button.ck-button_with-text .ck-button__label,a.ck.ck-button.ck-button_with-text .ck-button__label{display:inline-block}.ck.ck-button:not(.ck-button_with-text),a.ck.ck-button:not(.ck-button_with-text){justify-content:center}.ck.ck-button:hover .ck-tooltip,a.ck.ck-button:hover .ck-tooltip{visibility:visible;opacity:1}.ck.ck-button:focus:not(:hover) .ck-tooltip,a.ck.ck-button:focus:not(:hover) .ck-tooltip{display:none}.ck.ck-button,a.ck.ck-button{background:var(--ck-color-button-default-background)}.ck.ck-button:not(.ck-disabled):hover,a.ck.ck-button:not(.ck-disabled):hover{background:var(--ck-color-button-default-hover-background)}.ck.ck-button:not(.ck-disabled):active,a.ck.ck-button:not(.ck-disabled):active{background:var(--ck-color-button-default-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-default-active-shadow)}.ck.ck-button.ck-disabled,a.ck.ck-button.ck-disabled{background:var(--ck-color-button-default-disabled-background)}.ck.ck-button,a.ck.ck-button{border-radius:0}.ck-rounded-corners .ck.ck-button,.ck-rounded-corners a.ck.ck-button,.ck.ck-button.ck-rounded-corners,a.ck.ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-button,a.ck.ck-button{white-space:nowrap;cursor:default;vertical-align:middle;padding:var(--ck-spacing-tiny);text-align:center;min-width:var(--ck-ui-component-min-height);min-height:var(--ck-ui-component-min-height);line-height:1;font-size:inherit;border:1px solid transparent;transition:box-shadow .2s ease-in-out,border .2s ease-in-out;-webkit-appearance:none}.ck.ck-button:active,.ck.ck-button:focus,a.ck.ck-button:active,a.ck.ck-button:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0}.ck.ck-button .ck-button__icon use,.ck.ck-button .ck-button__icon use *,a.ck.ck-button .ck-button__icon use,a.ck.ck-button .ck-button__icon use *{color:inherit}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{font-size:inherit;font-weight:inherit;color:inherit;cursor:inherit;vertical-align:middle}[dir=ltr] .ck.ck-button .ck-button__label,[dir=ltr] a.ck.ck-button .ck-button__label{text-align:left}[dir=rtl] .ck.ck-button .ck-button__label,[dir=rtl] a.ck.ck-button .ck-button__label{text-align:right}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{color:inherit}[dir=ltr] .ck.ck-button .ck-button__keystroke,[dir=ltr] a.ck.ck-button .ck-button__keystroke{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-button .ck-button__keystroke,[dir=rtl] a.ck.ck-button .ck-button__keystroke{margin-right:var(--ck-spacing-large)}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{font-weight:700;opacity:.7}.ck.ck-button.ck-disabled:active,.ck.ck-button.ck-disabled:focus,a.ck.ck-button.ck-disabled:active,a.ck.ck-button.ck-disabled:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-button.ck-disabled .ck-button__icon,a.ck.ck-button.ck-disabled .ck-button__icon{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__label,a.ck.ck-button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__keystroke,a.ck.ck-button.ck-disabled .ck-button__keystroke{opacity:.3}.ck.ck-button.ck-button_with-text,a.ck.ck-button.ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=ltr] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-left:calc(-1*var(--ck-spacing-small));margin-right:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=rtl] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-right:calc(-1*var(--ck-spacing-small));margin-left:var(--ck-spacing-small)}.ck.ck-button.ck-button_with-keystroke .ck-button__label,a.ck.ck-button.ck-button_with-keystroke .ck-button__label{flex-grow:1}.ck.ck-button.ck-on,a.ck.ck-button.ck-on{background:var(--ck-color-button-on-background)}.ck.ck-button.ck-on:not(.ck-disabled):hover,a.ck.ck-button.ck-on:not(.ck-disabled):hover{background:var(--ck-color-button-on-hover-background)}.ck.ck-button.ck-on:not(.ck-disabled):active,a.ck.ck-button.ck-on:not(.ck-disabled):active{background:var(--ck-color-button-on-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-on-active-shadow)}.ck.ck-button.ck-on.ck-disabled,a.ck.ck-button.ck-on.ck-disabled{background:var(--ck-color-button-on-disabled-background)}.ck.ck-button.ck-button-save,a.ck.ck-button.ck-button-save{color:var(--ck-color-button-save)}.ck.ck-button.ck-button-cancel,a.ck.ck-button.ck-button-cancel{color:var(--ck-color-button-cancel)}.ck.ck-button-action,a.ck.ck-button-action{background:var(--ck-color-button-action-background)}.ck.ck-button-action:not(.ck-disabled):hover,a.ck.ck-button-action:not(.ck-disabled):hover{background:var(--ck-color-button-action-hover-background)}.ck.ck-button-action:not(.ck-disabled):active,a.ck.ck-button-action:not(.ck-disabled):active{background:var(--ck-color-button-action-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-action-active-shadow)}.ck.ck-button-action.ck-disabled,a.ck.ck-button-action.ck-disabled{background:var(--ck-color-button-action-disabled-background)}.ck.ck-button-action,a.ck.ck-button-action{color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}"},function(e,t,n){var i=n(1);var o=n(35);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-list{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{position:relative;z-index:var(--ck-z-default)}.ck.ck-list{border-radius:0}.ck-rounded-corners .ck.ck-list,.ck.ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-list{list-style-type:none;background:var(--ck-color-list-background)}.ck.ck-list__item{cursor:default;min-width:12em}.ck.ck-list__item .ck-button{min-height:unset;width:100%;text-align:left;border-radius:0;padding:calc(0.2*var(--ck-line-height-base)*var(--ck-font-size-base)) calc(0.4*var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item .ck-button .ck-button__label{line-height:calc(1.2*var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item .ck-button:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item .ck-button.ck-on:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item .ck-button.ck-on:focus:not(.ck-disabled){border-color:var(--ck-color-base-background)}.ck.ck-list__item .ck-button:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item .ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item .ck-switchbutton.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck.ck-list__separator{height:1px;width:100%;background:var(--ck-color-base-border)}"},function(e,t,n){var i=n(1);var o=n(37);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}:root{--ck-switch-button-toggle-width:2.6153846154em;--ck-switch-button-toggle-inner-size:1.0769230769em;--ck-switch-button-toggle-spacing:1px;--ck-switch-button-translation:calc(var(--ck-switch-button-toggle-width) - var(--ck-switch-button-toggle-inner-size) - 2*var(--ck-switch-button-toggle-spacing))}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__label{margin-right:calc(2*var(--ck-spacing-large))}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__label{margin-left:calc(2*var(--ck-spacing-large))}.ck.ck-button.ck-switchbutton .ck-button__toggle{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle.ck-rounded-corners{border-radius:var(--ck-border-radius)}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-left:auto}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle{transition:background .4s ease;width:var(--ck-switch-button-toggle-width);background:var(--ck-color-switch-button-off-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:calc(0.5*var(--ck-border-radius))}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{margin:var(--ck-switch-button-toggle-spacing);width:var(--ck-switch-button-toggle-inner-size);height:var(--ck-switch-button-toggle-inner-size);background:var(--ck-color-switch-button-inner-background);transition:all .3s ease}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{box-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(var(--ck-switch-button-translation))}[dir=rtl] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(calc(-1*var(--ck-switch-button-translation)))}"},function(e,t,n){var i=n(1);var o=n(39);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-toolbar-dropdown .ck.ck-toolbar .ck.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar-dropdown .ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}"},function(e,t,n){var i=n(1);var o=n(41);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-dropdown .ck-dropdown__panel .ck-list{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list,.ck.ck-dropdown .ck-dropdown__panel .ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}"},function(e,t,n){var i=n(1);var o=n(43);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-toolbar{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-flow:row nowrap;align-items:center}.ck.ck-toolbar>.ck-toolbar__items{display:flex;flex-flow:row wrap;align-items:center;flex-grow:1}.ck.ck-toolbar .ck.ck-toolbar__separator{display:inline-block}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-toolbar,.ck.ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-toolbar{background:var(--ck-color-toolbar-background);padding:0 var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border)}.ck.ck-toolbar .ck.ck-toolbar__separator{align-self:stretch;width:1px;min-width:1px;margin-top:0;margin-bottom:0;background:var(--ck-color-toolbar-border)}.ck.ck-toolbar>.ck-toolbar__items>*{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small);margin-right:var(--ck-spacing-small)}.ck.ck-toolbar>.ck-toolbar__items:empty+.ck.ck-toolbar__separator{display:none}.ck.ck-toolbar>.ck-toolbar__items>*,.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{width:100%;margin:0;border-radius:0;border:0}.ck.ck-toolbar.ck-toolbar_compact{padding:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*{margin:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>:not(:first-child):not(:last-child){border-radius:0}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck{margin-right:0}.ck.ck-toolbar[dir=rtl]:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-left:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_compact>.ck-toolbar__items>.ck:first-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_compact>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__separator,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl].ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=rtl] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr]>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-right:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_compact>.ck-toolbar__items>.ck:first-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_compact>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar[dir=ltr]>.ck.ck-toolbar__separator,[dir=ltr] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-right:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr].ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=ltr] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-right:var(--ck-spacing-small)}"},function(e,t,n){var i=n(1);var o=n(45);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-editor{position:relative}.ck.ck-editor .ck-editor__top .ck-sticky-panel .ck-toolbar{z-index:var(--ck-z-modal)}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-bottom-width:0}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar{border-bottom-width:1px;border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:0}.ck.ck-editor__main>.ck-editor__editable{background:var(--ck-color-base-background);border-radius:0}.ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,.ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-editor__main>.ck-editor__editable:not(.ck-focused){border-color:var(--ck-color-base-border)}"},function(e,t,n){var i=n(1);var o=n(47);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content blockquote{overflow:hidden;padding-right:1.5em;padding-left:1.5em;margin-left:0;margin-right:0;font-style:italic;border-left:5px solid #ccc}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}"},function(e,t){e.exports=".ck-content code{background-color:hsla(0,0%,78%,.3);padding:.15em;border-radius:2px}"},function(e,t,n){var i=n(1);var o=n(50);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-splitbutton{font-size:inherit}.ck.ck-splitbutton .ck-splitbutton__action:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button .ck-tooltip{display:none}:root{--ck-color-split-button-hover-background:#ebebeb;--ck-color-split-button-hover-border:#b3b3b3}[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__action{border-top-right-radius:unset;border-bottom-right-radius:unset}[dir=rtl] .ck.ck-splitbutton>.ck-splitbutton__action{border-top-left-radius:unset;border-bottom-left-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow{min-width:unset}[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-radius:0}.ck-rounded-corners [dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow,[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:unset;border-bottom-left-radius:unset}[dir=rtl] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-top-right-radius:unset;border-bottom-right-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow svg{width:var(--ck-dropdown-arrow-size)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover),.ck.ck-splitbutton:hover>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover){background:var(--ck-color-split-button-hover-background)}[dir=ltr] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled),[dir=ltr] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled){border-left-color:var(--ck-color-split-button-hover-border)}[dir=rtl] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled),[dir=rtl] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled){border-right-color:var(--ck-color-split-button-hover-border)}.ck.ck-splitbutton.ck-splitbutton_open{border-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__action{border-bottom-left-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__arrow{border-bottom-right-radius:0}"},function(e,t,n){var i=n(1);var o=n(52);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content pre{padding:1em;color:#353535;background:hsla(0,0%,78%,.3);border:1px solid #c4c4c4;border-radius:2px;text-align:left;direction:ltr;tab-size:4;white-space:pre-wrap;font-style:normal;min-width:200px}.ck-content pre code{background:unset;padding:0;border-radius:0}.ck.ck-editor__editable pre{position:relative}.ck.ck-editor__editable pre[data-language]:after{content:attr(data-language);position:absolute}:root{--ck-color-code-block-label-background:#757575}.ck.ck-editor__editable pre[data-language]:after{top:-1px;right:10px;background:var(--ck-color-code-block-label-background);font-size:10px;font-family:var(--ck-font-face);line-height:16px;padding:var(--ck-spacing-tiny) var(--ck-spacing-medium);color:#fff;white-space:nowrap}.ck.ck-code-block-dropdown .ck-dropdown__panel{max-height:250px;overflow-y:auto;overflow-x:hidden}"},function(e,t,n){var i=n(1);var o=n(54);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-color-grid{display:grid}:root{--ck-color-grid-tile-size:24px;--ck-color-color-grid-check-icon:#000}.ck.ck-color-grid{grid-gap:5px;padding:8px}.ck.ck-color-grid__tile{width:var(--ck-color-grid-tile-size);height:var(--ck-color-grid-tile-size);min-width:var(--ck-color-grid-tile-size);min-height:var(--ck-color-grid-tile-size);padding:0;transition:box-shadow .2s ease;border:0}.ck.ck-color-grid__tile.ck-disabled{cursor:unset;transition:unset}.ck.ck-color-grid__tile.ck-color-table__color-tile_bordered{box-shadow:0 0 0 1px var(--ck-color-base-border)}.ck.ck-color-grid__tile .ck.ck-icon{display:none;color:var(--ck-color-color-grid-check-icon)}.ck.ck-color-grid__tile.ck-on{box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-base-text)}.ck.ck-color-grid__tile.ck-on .ck.ck-icon{display:block}.ck.ck-color-grid__tile.ck-on,.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){border:0}.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-color-grid__label{padding:0 var(--ck-spacing-standard)}"},function(e,t,n){var i=n(1);var o=n(56);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-button.ck-color-table__remove-color{display:flex;align-items:center;width:100%}label.ck.ck-color-grid__label{font-weight:unset}.ck .ck-button.ck-color-table__remove-color{padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck .ck-button.ck-color-table__remove-color:not(:focus){border-bottom:1px solid var(--ck-color-base-border)}[dir=ltr] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-left:var(--ck-spacing-standard)}"},function(e,t,n){var i=n(1);var o=n(58);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .text-tiny{font-size:.7em}.ck-content .text-small{font-size:.85em}.ck-content .text-big{font-size:1.4em}.ck-content .text-huge{font-size:1.8em}"},function(e,t){e.exports=".ck.ck-heading_heading1{font-size:20px}.ck.ck-heading_heading2{font-size:17px}.ck.ck-heading_heading3{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}"},function(e,t,n){var i=n(1);var o=n(61);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-highlight-marker-yellow:#fdfd77;--ck-highlight-marker-green:#62f962;--ck-highlight-marker-pink:#fc7899;--ck-highlight-marker-blue:#72ccfd;--ck-highlight-pen-red:#e71313;--ck-highlight-pen-green:#128a00}.ck-content .marker-yellow{background-color:var(--ck-highlight-marker-yellow)}.ck-content .marker-green{background-color:var(--ck-highlight-marker-green)}.ck-content .marker-pink{background-color:var(--ck-highlight-marker-pink)}.ck-content .marker-blue{background-color:var(--ck-highlight-marker-blue)}.ck-content .pen-red{color:var(--ck-highlight-pen-red);background-color:transparent}.ck-content .pen-green{color:var(--ck-highlight-pen-green);background-color:transparent}"},function(e,t,n){var i=n(1);var o=n(63);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=':root{--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{display:none;position:absolute;z-index:var(--ck-z-modal)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{content:"";position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}:root{--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px}.ck.ck-balloon-panel{border-radius:0}.ck-rounded-corners .ck.ck-balloon-panel,.ck.ck-balloon-panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-balloon-panel{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{width:0;height:0;border-style:solid}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:var(--ck-balloon-arrow-height);border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:0}.ck.ck-balloon-panel[class*=arrow_n]:before{border-bottom-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-color:transparent;border-right-color:transparent;border-top-color:transparent}.ck.ck-balloon-panel[class*=arrow_n]:after{border-bottom-color:var(--ck-color-panel-background);margin-top:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:0;border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-top-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent}.ck.ck-balloon-panel[class*=arrow_s]:after{border-top-color:var(--ck-color-panel-background);margin-bottom:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before{left:50%;margin-left:calc(-1*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before{left:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before{right:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before{left:50%;margin-left:calc(-1*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before{left:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before{right:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:before{right:25%;margin-right:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:before{left:25%;margin-left:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:before{right:25%;margin-right:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:before{left:25%;margin-left:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}'},function(e,t,n){var i=n(1);var o=n(65);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck .ck-widget .ck-widget__type-around__button{display:block;position:absolute;overflow:hidden;z-index:var(--ck-z-default)}.ck .ck-widget .ck-widget__type-around__button svg{position:absolute;top:50%;left:50%;z-index:calc(var(--ck-z-default) + 2)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_before{top:calc(-0.5*var(--ck-widget-outline-thickness));left:min(10%,30px);transform:translateY(-50%)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_after{bottom:calc(-0.5*var(--ck-widget-outline-thickness));right:min(10%,30px);transform:translateY(50%)}.ck .ck-widget:not(.ck-widget_can-type-around_after)>.ck-widget__type-around>.ck-widget__type-around__button_after,.ck .ck-widget:not(.ck-widget_can-type-around_before)>.ck-widget__type-around>.ck-widget__type-around__button_before{display:none}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{content:"";display:block;position:absolute;top:1px;left:1px;z-index:calc(var(--ck-z-default) + 1)}.ck.ck-editor__editable.ck-read-only .ck-widget__type-around,.ck.ck-editor__editable.ck-restricted-editing_mode_restricted .ck-widget__type-around{display:none}:root{--ck-widget-type-around-button-size:20px;--ck-color-widget-type-around-button-active:var(--ck-color-focus-border);--ck-color-widget-type-around-button-hover:var(--ck-color-widget-hover-border);--ck-color-widget-type-around-button-blurred-editable:var(--ck-color-widget-blurred-border);--ck-color-widget-type-around-button-radar-start-alpha:0;--ck-color-widget-type-around-button-radar-end-alpha:.3;--ck-color-widget-type-around-button-icon:var(--ck-color-base-background)}.ck .ck-widget .ck-widget__type-around__button{width:var(--ck-widget-type-around-button-size);height:var(--ck-widget-type-around-button-size);background:var(--ck-color-widget-type-around-button);border-radius:100px;pointer-events:none;opacity:0;transition:opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget .ck-widget__type-around__button svg{width:10px;height:8px;transform:translate(-50%,-50%);transition:transform .5s ease;margin-top:1px}.ck .ck-widget .ck-widget__type-around__button svg *{stroke-dasharray:10;stroke-dashoffset:0;fill:none;stroke:var(--ck-color-widget-type-around-button-icon);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.ck .ck-widget .ck-widget__type-around__button svg line{stroke-dasharray:7}.ck .ck-widget .ck-widget__type-around__button:hover{animation:ck-widget-type-around-button-sonar 1s ease infinite}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline{animation:ck-widget-type-around-arrow-dash 2s linear}.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:ck-widget-type-around-arrow-tip-dash 2s linear}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{pointer-events:auto;opacity:1}.ck .ck-widget:not(.ck-widget_selected)>.ck-widget__type-around>.ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button-hover)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover{background:var(--ck-color-widget-type-around-button-active)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{width:calc(var(--ck-widget-type-around-button-size) - 2px);height:calc(var(--ck-widget-type-around-button-size) - 2px);border-radius:100px;background:linear-gradient(135deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.3))}.ck .ck-widget.ck-widget_with-selection-handle>.ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:20px}.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{pointer-events:none;opacity:0}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover){background:var(--ck-color-widget-type-around-button-blurred-editable)}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover) svg *{stroke:#999}@keyframes ck-widget-type-around-arrow-dash{0%{stroke-dashoffset:10}20%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-arrow-tip-dash{0%,20%{stroke-dashoffset:7}40%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-button-sonar{0%{box-shadow:0 0 0 0 hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}50%{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-end-alpha))}to{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}}'},function(e,t,n){var i=n(1);var o=n(67);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-color-resizer:var(--ck-color-focus-border);--ck-resizer-size:10px;--ck-resizer-border-width:1px;--ck-resizer-border-radius:2px;--ck-resizer-offset:calc(var(--ck-resizer-size)/-2 - 2px);--ck-resizer-tooltip-offset:10px;--ck-color-resizer-tooltip-background:#262626;--ck-color-resizer-tooltip-text:#f2f2f2}.ck .ck-widget,.ck .ck-widget.ck-widget_with-selection-handle{position:relative}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{position:absolute}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{display:block}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle:hover .ck-widget__selection-handle{visibility:visible}.ck .ck-size-view{background:var(--ck-color-resizer-tooltip-background);color:var(--ck-color-resizer-tooltip-text);border:1px solid var(--ck-color-resizer-tooltip-text);border-radius:var(--ck-resizer-border-radius);font-size:var(--ck-font-size-tiny);display:block;padding:var(--ck-spacing-small)}.ck .ck-size-view.ck-orientation-bottom-left,.ck .ck-size-view.ck-orientation-bottom-right,.ck .ck-size-view.ck-orientation-top-left,.ck .ck-size-view.ck-orientation-top-right{position:absolute}.ck .ck-size-view.ck-orientation-top-left{top:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-top-right{top:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-right{bottom:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-left{bottom:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}:root{--ck-widget-outline-thickness:3px;--ck-widget-handler-icon-size:16px;--ck-widget-handler-animation-duration:200ms;--ck-widget-handler-animation-curve:ease;--ck-color-widget-blurred-border:#dedede;--ck-color-widget-hover-border:#ffc83d;--ck-color-widget-editable-focus-background:var(--ck-color-base-background);--ck-color-widget-drag-handler-icon-color:var(--ck-color-base-background)}.ck .ck-widget{outline-width:var(--ck-widget-outline-thickness);outline-style:solid;outline-color:transparent;transition:outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_selected,.ck .ck-widget.ck-widget_selected:hover{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border)}.ck .ck-widget:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-editor__nested-editable{border:1px solid transparent}.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0;background-color:var(--ck-color-widget-editable-focus-background)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{padding:4px;box-sizing:border-box;background-color:transparent;opacity:0;transition:background-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),visibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0;transform:translateY(-100%);left:calc(0px - var(--ck-widget-outline-thickness))}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{width:var(--ck-widget-handler-icon-size);height:var(--ck-widget-handler-icon-size);color:var(--ck-color-widget-drag-handler-icon-color)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:0;transition:opacity .3s var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle:hover .ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-widget-hover-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover .ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-focus-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:1}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{left:auto;right:calc(0px - var(--ck-widget-outline-thickness))}.ck.ck-editor__editable.ck-read-only .ck-widget{transition:none}.ck.ck-editor__editable.ck-read-only .ck-widget:not(.ck-widget_selected){--ck-widget-outline-thickness:0px}.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover{outline-color:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle .ck-widget__selection-handle:hover,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable>.ck-widget.ck-widget_with-selection-handle:first-child,.ck.ck-editor__editable blockquote>.ck-widget.ck-widget_with-selection-handle:first-child{margin-top:calc(1em + var(--ck-widget-handler-icon-size))}"},function(e,t,n){var i=n(1);var o=n(69);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-labeled-field-view .ck-labeled-field-view__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-field-view .ck-labeled-field-view__status_error{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view>.ck.ck-label{width:100%;text-overflow:ellipsis;overflow:hidden}"},function(e,t,n){var i=n(1);var o=n(71);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-input-text-width:18em}.ck.ck-input-text{border-radius:0}.ck-rounded-corners .ck.ck-input-text,.ck.ck-input-text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-text{box-shadow:var(--ck-inner-shadow),0 0;background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);min-width:var(--ck-input-text-width);min-height:var(--ck-ui-component-min-height);transition:box-shadow .2s ease-in-out,border .2s ease-in-out}.ck.ck-input-text:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text[readonly]{border:1px solid var(--ck-color-input-disabled-border);background:var(--ck-color-input-disabled-background);color:var(--ck-color-input-disabled-text)}.ck.ck-input-text[readonly]:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text.ck-error{border-color:var(--ck-color-input-error-border);animation:ck-text-input-shake .3s ease both}.ck.ck-input-text.ck-error:focus{box-shadow:var(--ck-focus-error-outer-shadow),var(--ck-inner-shadow)}@keyframes ck-text-input-shake{20%{transform:translateX(-2px)}40%{transform:translateX(2px)}60%{transform:translateX(-1px)}80%{transform:translateX(1px)}}"},function(e,t,n){var i=n(1);var o=n(73);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-text-alternative-form{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-text-alternative-form .ck-labeled-field-view{display:inline-block}.ck.ck-text-alternative-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-text-alternative-form{flex-wrap:wrap}.ck.ck-text-alternative-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-text-alternative-form .ck-button{flex-basis:50%}}.ck.ck-text-alternative-form{padding:var(--ck-spacing-standard)}.ck.ck-text-alternative-form:focus{outline:none}[dir=ltr] .ck.ck-text-alternative-form>:not(:first-child),[dir=rtl] .ck.ck-text-alternative-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-text-alternative-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-text-alternative-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-text-alternative-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-text-alternative-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-text-alternative-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-text-alternative-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-text-alternative-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-text-alternative-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(e,t,n){var i=n(1);var o=n(75);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-balloon-rotator__navigation{display:flex;align-items:center;justify-content:center}.ck .ck-balloon-rotator__content .ck-toolbar{justify-content:center}.ck .ck-balloon-rotator__navigation{background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation>*{margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{box-shadow:none}"},function(e,t,n){var i=n(1);var o=n(77);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-fake-panel{position:absolute;z-index:calc(var(--ck-z-modal) - 1)}.ck .ck-fake-panel div{position:absolute}.ck .ck-fake-panel div:first-child{z-index:2}.ck .ck-fake-panel div:nth-child(2){z-index:1}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);width:100%;height:100%}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical)}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*2)}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*3)}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}"},function(e,t,n){var i=n(1);var o=n(79);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .image{display:table;clear:both;text-align:center;margin:1em auto}.ck-content .image>img{display:block;margin:0 auto;max-width:100%;min-width:50px}"},function(e,t,n){var i=n(1);var o=n(81);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .image>figcaption{display:table-caption;caption-side:bottom;word-break:break-word;color:#333;background-color:#f7f7f7;padding:.6em;font-size:.75em;outline-offset:-1px}"},function(e,t,n){var i=n(1);var o=n(83);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-widget_with-resizer{position:relative}.ck .ck-widget__resizer{display:none;position:absolute;pointer-events:none;left:0;top:0;outline:1px solid var(--ck-color-resizer)}.ck-focused .ck-widget_with-resizer.ck-widget_selected>.ck-widget__resizer{display:block}.ck .ck-widget__resizer__handle{position:absolute;pointer-events:all;width:var(--ck-resizer-size);height:var(--ck-resizer-size);background:var(--ck-color-focus-border);border:var(--ck-resizer-border-width) solid #fff;border-radius:var(--ck-resizer-border-radius)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{top:var(--ck-resizer-offset);left:var(--ck-resizer-offset);cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{top:var(--ck-resizer-offset);right:var(--ck-resizer-offset);cursor:nesw-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{bottom:var(--ck-resizer-offset);right:var(--ck-resizer-offset);cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{bottom:var(--ck-resizer-offset);left:var(--ck-resizer-offset);cursor:nesw-resize}"},function(e,t,n){var i=n(1);var o=n(85);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .image.image_resized{max-width:100%;display:block;box-sizing:border-box}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}"},function(e,t,n){var i=n(1);var o=n(87);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-image-style-spacing:1.5em}.ck-content .image-style-align-center,.ck-content .image-style-align-left,.ck-content .image-style-align-right,.ck-content .image-style-side{max-width:50%}.ck-content .image-style-side{float:right;margin-left:var(--ck-image-style-spacing)}.ck-content .image-style-align-left{float:left;margin-right:var(--ck-image-style-spacing)}.ck-content .image-style-align-center{margin-left:auto;margin-right:auto}.ck-content .image-style-align-right{float:right;margin-left:var(--ck-image-style-spacing)}"},function(e,t,n){var i=n(1);var o=n(89);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-editor__editable .image{position:relative}.ck.ck-editor__editable .image .ck-progress-bar{position:absolute;top:0;left:0}.ck.ck-editor__editable .image.ck-appear{animation:fadeIn .7s}.ck.ck-editor__editable .image .ck-progress-bar{height:2px;width:0;background:var(--ck-color-upload-bar-background);transition:width .1s}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}"},function(e,t,n){var i=n(1);var o=n(91);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-image-upload-complete-icon{display:block;position:absolute;top:10px;right:10px;border-radius:50%}.ck-image-upload-complete-icon:after{content:"";position:absolute}:root{--ck-color-image-upload-icon:#fff;--ck-color-image-upload-icon-background:#008a00;--ck-image-upload-icon-size:20px;--ck-image-upload-icon-width:2px}.ck-image-upload-complete-icon{width:var(--ck-image-upload-icon-size);height:var(--ck-image-upload-icon-size);opacity:0;background:var(--ck-color-image-upload-icon-background);animation-name:ck-upload-complete-icon-show,ck-upload-complete-icon-hide;animation-fill-mode:forwards,forwards;animation-duration:.5s,.5s;font-size:var(--ck-image-upload-icon-size);animation-delay:0ms,3s}.ck-image-upload-complete-icon:after{left:25%;top:50%;opacity:0;height:0;width:0;transform:scaleX(-1) rotate(135deg);transform-origin:left top;border-top:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);border-right:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);animation-name:ck-upload-complete-icon-check;animation-duration:.5s;animation-delay:.5s;animation-fill-mode:forwards;box-sizing:border-box}@keyframes ck-upload-complete-icon-show{0%{opacity:0}to{opacity:1}}@keyframes ck-upload-complete-icon-hide{0%{opacity:1}to{opacity:0}}@keyframes ck-upload-complete-icon-check{0%{opacity:1;width:0;height:0}33%{width:.3em;height:0}to{opacity:1;width:.3em;height:.45em}}'},function(e,t,n){var i=n(1);var o=n(93);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck .ck-upload-placeholder-loader{position:absolute;display:flex;align-items:center;justify-content:center;top:0;left:0}.ck .ck-upload-placeholder-loader:before{content:"";position:relative}:root{--ck-color-upload-placeholder-loader:#b3b3b3;--ck-upload-placeholder-loader-size:32px}.ck .ck-image-upload-placeholder{width:100%;margin:0}.ck .ck-upload-placeholder-loader{width:100%;height:100%}.ck .ck-upload-placeholder-loader:before{width:var(--ck-upload-placeholder-loader-size);height:var(--ck-upload-placeholder-loader-size);border-radius:50%;border-top:3px solid var(--ck-color-upload-placeholder-loader);border-right:2px solid transparent;animation:ck-upload-placeholder-loader 1s linear infinite}@keyframes ck-upload-placeholder-loader{to{transform:rotate(1turn)}}'},function(e,t,n){var i=n(1);var o=n(95);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-link_selected{background:var(--ck-color-link-selected-background)}"},function(e,t,n){var i=n(1);var o=n(97);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-link-form{display:flex}.ck.ck-link-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-link-form{flex-wrap:wrap}.ck.ck-link-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-link-form .ck-button{flex-basis:50%}}.ck.ck-link-form_layout-vertical{display:block}.ck.ck-link-form{padding:var(--ck-spacing-standard)}.ck.ck-link-form:focus{outline:none}[dir=ltr] .ck.ck-link-form>:not(:first-child),[dir=rtl] .ck.ck-link-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-link-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-link-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}.ck.ck-link-form_layout-vertical{padding:0;min-width:var(--ck-input-text-width)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) var(--ck-spacing-small)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-link-form_layout-vertical .ck-button{padding:var(--ck-spacing-standard);margin:0;border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border);width:50%}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-link-form_layout-vertical .ck.ck-list{margin-left:0}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton{border:0;width:100%}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton:hover{background:none}"},function(e,t,n){var i=n(1);var o=n(99);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-link-actions{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-link-actions .ck-link-actions__preview{display:inline-block}.ck.ck-link-actions .ck-link-actions__preview .ck-button__label{overflow:hidden}@media screen and (max-width:600px){.ck.ck-link-actions{flex-wrap:wrap}.ck.ck-link-actions .ck-link-actions__preview{flex-basis:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){flex-basis:50%}}.ck.ck-link-actions{padding:var(--ck-spacing-standard)}.ck.ck-link-actions .ck-button.ck-link-actions__preview{padding-left:0;padding-right:0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{padding:0 var(--ck-spacing-medium);color:var(--ck-color-link-default);text-overflow:ellipsis;cursor:pointer;max-width:var(--ck-input-text-width);min-width:3em;text-align:center}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label:hover{text-decoration:underline}.ck.ck-link-actions .ck-button.ck-link-actions__preview,.ck.ck-link-actions .ck-button.ck-link-actions__preview:active,.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus,.ck.ck-link-actions .ck-button.ck-link-actions__preview:hover{background:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:active{box-shadow:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus .ck-button__label{text-decoration:underline}.ck.ck-link-actions:focus{outline:none}[dir=ltr] .ck.ck-link-actions .ck-button:not(:first-child),[dir=rtl] .ck.ck-link-actions .ck-button:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-actions{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-link-actions .ck-button.ck-link-actions__preview{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{min-width:0;max-width:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(e,t,n){var i=n(1);var o=n(101);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-media__wrapper .ck-media__placeholder{display:flex;flex-direction:column;align-items:center}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-tooltip{display:block}@media (hover:none){.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-tooltip{display:none}}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url{max-width:100%;position:relative}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url:hover .ck-tooltip{visibility:visible;opacity:1}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-media__placeholder__url__text{overflow:hidden;display:block}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="google.com/maps"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck-media__placeholder__icon *{display:none}.ck-editor__editable:not(.ck-read-only) .ck-media__wrapper>:not(.ck-media__placeholder),.ck-editor__editable:not(.ck-read-only) .ck-widget:not(.ck-widget_selected) .ck-media__placeholder{pointer-events:none}:root{--ck-media-embed-placeholder-icon-size:3em;--ck-color-media-embed-placeholder-url-text:#757575;--ck-color-media-embed-placeholder-url-text-hover:var(--ck-color-base-text)}.ck-media__wrapper{margin:0 auto}.ck-media__wrapper .ck-media__placeholder{padding:calc(3*var(--ck-spacing-standard));background:var(--ck-color-base-foreground)}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon{min-width:var(--ck-media-embed-placeholder-icon-size);height:var(--ck-media-embed-placeholder-icon-size);margin-bottom:var(--ck-spacing-large);background-position:50%;background-size:cover}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon .ck-icon{width:100%;height:100%}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text{color:var(--ck-color-media-embed-placeholder-url-text);white-space:nowrap;text-align:center;font-style:italic;text-overflow:ellipsis}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:var(--ck-color-media-embed-placeholder-url-text-hover);cursor:pointer;text-decoration:underline}.ck-media__wrapper[data-oembed-url*="open.spotify.com"]{max-width:300px;max-height:380px}.ck-media__wrapper[data-oembed-url*="google.com/maps"] .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAuMzc4IiBoZWlnaHQ9IjI1NC4xNjciIHZpZXdCb3g9IjAgMCA2Ni4yNDYgNjcuMjQ4Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcyLjUzMSAtMjE4LjQ1NSkgc2NhbGUoLjk4MDEyKSI+PHJlY3Qgcnk9IjUuMjM4IiByeD0iNS4yMzgiIHk9IjIzMS4zOTkiIHg9IjE3Ni4wMzEiIGhlaWdodD0iNjAuMDk5IiB3aWR0aD0iNjAuMDk5IiBmaWxsPSIjMzRhNjY4IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0yMDYuNDc3IDI2MC45bC0yOC45ODcgMjguOTg3YTUuMjE4IDUuMjE4IDAgMDAzLjc4IDEuNjFoNDkuNjIxYzEuNjk0IDAgMy4xOS0uNzk4IDQuMTQ2LTIuMDM3eiIgZmlsbD0iIzVjODhjNSIvPjxwYXRoIGQ9Ik0yMjYuNzQyIDIyMi45ODhjLTkuMjY2IDAtMTYuNzc3IDcuMTctMTYuNzc3IDE2LjAxNC4wMDcgMi43NjIuNjYzIDUuNDc0IDIuMDkzIDcuODc1LjQzLjcwMy44MyAxLjQwOCAxLjE5IDIuMTA3LjMzMy41MDIuNjUgMS4wMDUuOTUgMS41MDguMzQzLjQ3Ny42NzMuOTU3Ljk4OCAxLjQ0IDEuMzEgMS43NjkgMi41IDMuNTAyIDMuNjM3IDUuMTY4Ljc5MyAxLjI3NSAxLjY4MyAyLjY0IDIuNDY2IDMuOTkgMi4zNjMgNC4wOTQgNC4wMDcgOC4wOTIgNC42IDEzLjkxNHYuMDEyYy4xODIuNDEyLjUxNi42NjYuODc5LjY2Ny40MDMtLjAwMS43NjgtLjMxNC45My0uNzk5LjYwMy01Ljc1NiAyLjIzOC05LjcyOSA0LjU4NS0xMy43OTQuNzgyLTEuMzUgMS42NzMtMi43MTUgMi40NjUtMy45OSAxLjEzNy0xLjY2NiAyLjMyOC0zLjQgMy42MzgtNS4xNjkuMzE1LS40ODIuNjQ1LS45NjIuOTg4LTEuNDM5LjMtLjUwMy42MTctMS4wMDYuOTUtMS41MDguMzU5LS43Ljc2LTEuNDA0IDEuMTktMi4xMDcgMS40MjYtMi40MDIgMi01LjExNCAyLjAwNC03Ljg3NSAwLTguODQ0LTcuNTExLTE2LjAxNC0xNi43NzYtMTYuMDE0eiIgZmlsbD0iI2RkNGIzZSIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48ZWxsaXBzZSByeT0iNS41NjQiIHJ4PSI1LjgyOCIgY3k9IjIzOS4wMDIiIGN4PSIyMjYuNzQyIiBmaWxsPSIjODAyZDI3IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0xOTAuMzAxIDIzNy4yODNjLTQuNjcgMC04LjQ1NyAzLjg1My04LjQ1NyA4LjYwNnMzLjc4NiA4LjYwNyA4LjQ1NyA4LjYwN2MzLjA0MyAwIDQuODA2LS45NTggNi4zMzctMi41MTYgMS41My0xLjU1NyAyLjA4Ny0zLjkxMyAyLjA4Ny02LjI5IDAtLjM2Mi0uMDIzLS43MjItLjA2NC0xLjA3OWgtOC4yNTd2My4wNDNoNC44NWMtLjE5Ny43NTktLjUzMSAxLjQ1LTEuMDU4IDEuOTg2LS45NDIuOTU4LTIuMDI4IDEuNTQ4LTMuOTAxIDEuNTQ4LTIuODc2IDAtNS4yMDgtMi4zNzItNS4yMDgtNS4yOTkgMC0yLjkyNiAyLjMzMi01LjI5OSA1LjIwOC01LjI5OSAxLjM5OSAwIDIuNjE4LjQwNyAzLjU4NCAxLjI5M2wyLjM4MS0yLjM4YzAtLjAwMi0uMDAzLS4wMDQtLjAwNC0uMDA1LTEuNTg4LTEuNTI0LTMuNjItMi4yMTUtNS45NTUtMi4yMTV6bTQuNDMgNS42NmwuMDAzLjAwNnYtLjAwM3oiIGZpbGw9IiNmZmYiIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTIxNS4xODQgMjUxLjkyOWwtNy45OCA3Ljk3OSAyOC40NzcgMjguNDc1YTUuMjMzIDUuMjMzIDAgMDAuNDQ5LTIuMTIzdi0zMS4xNjVjLS40NjkuNjc1LS45MzQgMS4zNDktMS4zODIgMi4wMDUtLjc5MiAxLjI3NS0xLjY4MiAyLjY0LTIuNDY1IDMuOTktMi4zNDcgNC4wNjUtMy45ODIgOC4wMzgtNC41ODUgMTMuNzk0LS4xNjIuNDg1LS41MjcuNzk4LS45My43OTktLjM2My0uMDAxLS42OTctLjI1NS0uODc5LS42Njd2LS4wMTJjLS41OTMtNS44MjItMi4yMzctOS44Mi00LjYtMTMuOTE0LS43ODMtMS4zNS0xLjY3My0yLjcxNS0yLjQ2Ni0zLjk5LTEuMTM3LTEuNjY2LTIuMzI3LTMuNC0zLjYzNy01LjE2OWwtLjAwMi0uMDAzeiIgZmlsbD0iI2MzYzNjMyIvPjxwYXRoIGQ9Ik0yMTIuOTgzIDI0OC40OTVsLTM2Ljk1MiAzNi45NTN2LjgxMmE1LjIyNyA1LjIyNyAwIDAwNS4yMzggNS4yMzhoMS4wMTVsMzUuNjY2LTM1LjY2NmExMzYuMjc1IDEzNi4yNzUgMCAwMC0yLjc2NC0zLjkgMzcuNTc1IDM3LjU3NSAwIDAwLS45ODktMS40NCAzNS4xMjcgMzUuMTI3IDAgMDAtLjk1LTEuNTA4Yy0uMDgzLS4xNjItLjE3Ni0uMzI2LS4yNjQtLjQ4OXoiIGZpbGw9IiNmZGRjNGYiIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTIxMS45OTggMjYxLjA4M2wtNi4xNTIgNi4xNTEgMjQuMjY0IDI0LjI2NGguNzgxYTUuMjI3IDUuMjI3IDAgMDA1LjIzOS01LjIzOHYtMS4wNDV6IiBmaWxsPSIjZmZmIiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjwvZz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder{background:#4268b3}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05NjcuNDg0IDBINTYuNTE3QzI1LjMwNCAwIDAgMjUuMzA0IDAgNTYuNTE3djkxMC45NjZDMCA5OTguNjk0IDI1LjI5NyAxMDI0IDU2LjUyMiAxMDI0SDU0N1Y2MjhINDE0VjQ3M2gxMzNWMzU5LjAyOWMwLTEzMi4yNjIgODAuNzczLTIwNC4yODIgMTk4Ljc1Ni0yMDQuMjgyIDU2LjUxMyAwIDEwNS4wODYgNC4yMDggMTE5LjI0NCA2LjA4OVYyOTlsLTgxLjYxNi4wMzdjLTYzLjk5MyAwLTc2LjM4NCAzMC40OTItNzYuMzg0IDc1LjIzNlY0NzNoMTUzLjQ4N2wtMTkuOTg2IDE1NUg3MDd2Mzk2aDI2MC40ODRjMzEuMjEzIDAgNTYuNTE2LTI1LjMwMyA1Ni41MTYtNTYuNTE2VjU2LjUxNUMxMDI0IDI1LjMwMyA5OTguNjk3IDAgOTY3LjQ4NCAwIiBmaWxsPSIjRkZGRkZFIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__url__text{color:#cdf}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder{background:linear-gradient(-135deg,#1400c7,#b800b1,#f50000)}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTA0IiBoZWlnaHQ9IjUwNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik0wIC4xNTloNTAzLjg0MVY1MDMuOTRIMHoiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjYSIvPjwvbWFzaz48cGF0aCBkPSJNMjUxLjkyMS4xNTljLTY4LjQxOCAwLTc2Ljk5Ny4yOS0xMDMuODY3IDEuNTE2LTI2LjgxNCAxLjIyMy00NS4xMjcgNS40ODItNjEuMTUxIDExLjcxLTE2LjU2NiA2LjQzNy0zMC42MTUgMTUuMDUxLTQ0LjYyMSAyOS4wNTYtMTQuMDA1IDE0LjAwNi0yMi42MTkgMjguMDU1LTI5LjA1NiA0NC42MjEtNi4yMjggMTYuMDI0LTEwLjQ4NyAzNC4zMzctMTEuNzEgNjEuMTUxQy4yOSAxNzUuMDgzIDAgMTgzLjY2MiAwIDI1Mi4wOGMwIDY4LjQxNy4yOSA3Ni45OTYgMS41MTYgMTAzLjg2NiAxLjIyMyAyNi44MTQgNS40ODIgNDUuMTI3IDExLjcxIDYxLjE1MSA2LjQzNyAxNi41NjYgMTUuMDUxIDMwLjYxNSAyOS4wNTYgNDQuNjIxIDE0LjAwNiAxNC4wMDUgMjguMDU1IDIyLjYxOSA0NC42MjEgMjkuMDU3IDE2LjAyNCA2LjIyNyAzNC4zMzcgMTAuNDg2IDYxLjE1MSAxMS43MDkgMjYuODcgMS4yMjYgMzUuNDQ5IDEuNTE2IDEwMy44NjcgMS41MTYgNjguNDE3IDAgNzYuOTk2LS4yOSAxMDMuODY2LTEuNTE2IDI2LjgxNC0xLjIyMyA0NS4xMjctNS40ODIgNjEuMTUxLTExLjcwOSAxNi41NjYtNi40MzggMzAuNjE1LTE1LjA1MiA0NC42MjEtMjkuMDU3IDE0LjAwNS0xNC4wMDYgMjIuNjE5LTI4LjA1NSAyOS4wNTctNDQuNjIxIDYuMjI3LTE2LjAyNCAxMC40ODYtMzQuMzM3IDExLjcwOS02MS4xNTEgMS4yMjYtMjYuODcgMS41MTYtMzUuNDQ5IDEuNTE2LTEwMy44NjYgMC02OC40MTgtLjI5LTc2Ljk5Ny0xLjUxNi0xMDMuODY3LTEuMjIzLTI2LjgxNC01LjQ4Mi00NS4xMjctMTEuNzA5LTYxLjE1MS02LjQzOC0xNi41NjYtMTUuMDUyLTMwLjYxNS0yOS4wNTctNDQuNjIxLTE0LjAwNi0xNC4wMDUtMjguMDU1LTIyLjYxOS00NC42MjEtMjkuMDU2LTE2LjAyNC02LjIyOC0zNC4zMzctMTAuNDg3LTYxLjE1MS0xMS43MUMzMjguOTE3LjQ0OSAzMjAuMzM4LjE1OSAyNTEuOTIxLjE1OXptMCA0NS4zOTFjNjcuMjY1IDAgNzUuMjMzLjI1NyAxMDEuNzk3IDEuNDY5IDI0LjU2MiAxLjEyIDM3LjkwMSA1LjIyNCA0Ni43NzggOC42NzQgMTEuNzU5IDQuNTcgMjAuMTUxIDEwLjAyOSAyOC45NjYgMTguODQ1IDguODE2IDguODE1IDE0LjI3NSAxNy4yMDcgMTguODQ1IDI4Ljk2NiAzLjQ1IDguODc3IDcuNTU0IDIyLjIxNiA4LjY3NCA0Ni43NzggMS4yMTIgMjYuNTY0IDEuNDY5IDM0LjUzMiAxLjQ2OSAxMDEuNzk4IDAgNjcuMjY1LS4yNTcgNzUuMjMzLTEuNDY5IDEwMS43OTctMS4xMiAyNC41NjItNS4yMjQgMzcuOTAxLTguNjc0IDQ2Ljc3OC00LjU3IDExLjc1OS0xMC4wMjkgMjAuMTUxLTE4Ljg0NSAyOC45NjYtOC44MTUgOC44MTYtMTcuMjA3IDE0LjI3NS0yOC45NjYgMTguODQ1LTguODc3IDMuNDUtMjIuMjE2IDcuNTU0LTQ2Ljc3OCA4LjY3NC0yNi41NiAxLjIxMi0zNC41MjcgMS40NjktMTAxLjc5NyAxLjQ2OS02Ny4yNzEgMC03NS4yMzctLjI1Ny0xMDEuNzk4LTEuNDY5LTI0LjU2Mi0xLjEyLTM3LjkwMS01LjIyNC00Ni43NzgtOC42NzQtMTEuNzU5LTQuNTctMjAuMTUxLTEwLjAyOS0yOC45NjYtMTguODQ1LTguODE1LTguODE1LTE0LjI3NS0xNy4yMDctMTguODQ1LTI4Ljk2Ni0zLjQ1LTguODc3LTcuNTU0LTIyLjIxNi04LjY3NC00Ni43NzgtMS4yMTItMjYuNTY0LTEuNDY5LTM0LjUzMi0xLjQ2OS0xMDEuNzk3IDAtNjcuMjY2LjI1Ny03NS4yMzQgMS40NjktMTAxLjc5OCAxLjEyLTI0LjU2MiA1LjIyNC0zNy45MDEgOC42NzQtNDYuNzc4IDQuNTctMTEuNzU5IDEwLjAyOS0yMC4xNTEgMTguODQ1LTI4Ljk2NiA4LjgxNS04LjgxNiAxNy4yMDctMTQuMjc1IDI4Ljk2Ni0xOC44NDUgOC44NzctMy40NSAyMi4yMTYtNy41NTQgNDYuNzc4LTguNjc0IDI2LjU2NC0xLjIxMiAzNC41MzItMS40NjkgMTAxLjc5OC0xLjQ2OXoiIGZpbGw9IiNGRkYiIG1hc2s9InVybCgjYikiLz48cGF0aCBkPSJNMjUxLjkyMSAzMzYuMDUzYy00Ni4zNzggMC04My45NzQtMzcuNTk2LTgzLjk3NC04My45NzMgMC00Ni4zNzggMzcuNTk2LTgzLjk3NCA4My45NzQtODMuOTc0IDQ2LjM3NyAwIDgzLjk3MyAzNy41OTYgODMuOTczIDgzLjk3NCAwIDQ2LjM3Ny0zNy41OTYgODMuOTczLTgzLjk3MyA4My45NzN6bTAtMjEzLjMzOGMtNzEuNDQ3IDAtMTI5LjM2NSA1Ny45MTgtMTI5LjM2NSAxMjkuMzY1IDAgNzEuNDQ2IDU3LjkxOCAxMjkuMzY0IDEyOS4zNjUgMTI5LjM2NCA3MS40NDYgMCAxMjkuMzY0LTU3LjkxOCAxMjkuMzY0LTEyOS4zNjQgMC03MS40NDctNTcuOTE4LTEyOS4zNjUtMTI5LjM2NC0xMjkuMzY1ek00MTYuNjI3IDExNy42MDRjMCAxNi42OTYtMTMuNTM1IDMwLjIzLTMwLjIzMSAzMC4yMy0xNi42OTUgMC0zMC4yMy0xMy41MzQtMzAuMjMtMzAuMjMgMC0xNi42OTYgMTMuNTM1LTMwLjIzMSAzMC4yMy0zMC4yMzEgMTYuNjk2IDAgMzAuMjMxIDEzLjUzNSAzMC4yMzEgMzAuMjMxIiBmaWxsPSIjRkZGIi8+PC9nPjwvc3ZnPg==)}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__url__text{color:#ffe0fe}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder{background:linear-gradient(90deg,#71c6f4,#0d70a5)}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDAwIj48cGF0aCBkPSJNNDAwIDIwMGMwIDExMC41LTg5LjUgMjAwLTIwMCAyMDBTMCAzMTAuNSAwIDIwMCA4OS41IDAgMjAwIDBzMjAwIDg5LjUgMjAwIDIwMHpNMTYzLjQgMzA1LjVjODguNyAwIDEzNy4yLTczLjUgMTM3LjItMTM3LjIgMC0yLjEgMC00LjItLjEtNi4yIDkuNC02LjggMTcuNi0xNS4zIDI0LjEtMjUtOC42IDMuOC0xNy45IDYuNC0yNy43IDcuNiAxMC02IDE3LjYtMTUuNCAyMS4yLTI2LjctOS4zIDUuNS0xOS42IDkuNS0zMC42IDExLjctOC44LTkuNC0yMS4zLTE1LjItMzUuMi0xNS4yLTI2LjYgMC00OC4yIDIxLjYtNDguMiA0OC4yIDAgMy44LjQgNy41IDEuMyAxMS00MC4xLTItNzUuNi0yMS4yLTk5LjQtNTAuNC00LjEgNy4xLTYuNSAxNS40LTYuNSAyNC4yIDAgMTYuNyA4LjUgMzEuNSAyMS41IDQwLjEtNy45LS4yLTE1LjMtMi40LTIxLjgtNnYuNmMwIDIzLjQgMTYuNiA0Mi44IDM4LjcgNDcuMy00IDEuMS04LjMgMS43LTEyLjcgMS43LTMuMSAwLTYuMS0uMy05LjEtLjkgNi4xIDE5LjIgMjMuOSAzMy4xIDQ1IDMzLjUtMTYuNSAxMi45LTM3LjMgMjAuNi01OS45IDIwLjYtMy45IDAtNy43LS4yLTExLjUtLjcgMjEuMSAxMy44IDQ2LjUgMjEuOCA3My43IDIxLjgiIGZpbGw9IiNmZmYiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__url__text{color:#b8e6ff}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}'},function(e,t,n){var i=n(1);var o=n(103);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-media-form{display:flex;align-items:flex-start;flex-direction:row;flex-wrap:nowrap}.ck.ck-media-form .ck-labeled-field-view{display:inline-block}.ck.ck-media-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-media-form{flex-wrap:wrap}.ck.ck-media-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-media-form .ck-button{flex-basis:50%}}.ck.ck-media-form{padding:var(--ck-spacing-standard)}.ck.ck-media-form:focus{outline:none}[dir=ltr] .ck.ck-media-form>:not(:first-child),[dir=rtl] .ck.ck-media-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-media-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-media-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-media-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-media-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-media-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-media-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-media-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-media-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-media-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(e,t,n){var i=n(1);var o=n(105);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .media{clear:both;margin:1em 0;display:block;min-width:15em}"},function(e,t,n){var i=n(1);var o=n(107);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-color-table-focused-cell-background:rgba(158,207,250,0.3)}.ck-widget.table td.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table td.ck-editor__nested-editable:focus,.ck-widget.table th.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table th.ck-editor__nested-editable:focus{background:var(--ck-color-table-focused-cell-background);border-style:none;outline:1px solid var(--ck-color-focus-border);outline-offset:-1px}"},function(e,t,n){var i=n(1);var o=n(109);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-insert-table-dropdown__grid{display:flex;flex-direction:row;flex-wrap:wrap}:root{--ck-insert-table-dropdown-padding:10px;--ck-insert-table-dropdown-box-height:11px;--ck-insert-table-dropdown-box-width:12px;--ck-insert-table-dropdown-box-margin:1px}.ck .ck-insert-table-dropdown__grid{width:calc(var(--ck-insert-table-dropdown-box-width)*10 + var(--ck-insert-table-dropdown-box-margin)*20 + var(--ck-insert-table-dropdown-padding)*2);padding:var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0}.ck .ck-insert-table-dropdown__label{text-align:center}.ck .ck-insert-table-dropdown-grid-box{width:var(--ck-insert-table-dropdown-box-width);height:var(--ck-insert-table-dropdown-box-height);margin:var(--ck-insert-table-dropdown-box-margin);border:1px solid var(--ck-color-base-border);border-radius:1px}.ck .ck-insert-table-dropdown-grid-box.ck-on{border-color:var(--ck-color-focus-border);background:var(--ck-color-focus-outer-shadow)}"},function(e,t,n){var i=n(1);var o=n(111);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=':root{--ck-table-selected-cell-background:rgba(158,207,250,0.3)}.ck.ck-editor__editable .table table td.ck-editor__editable_selected,.ck.ck-editor__editable .table table th.ck-editor__editable_selected{position:relative;caret-color:transparent;outline:unset;box-shadow:unset}.ck.ck-editor__editable .table table td.ck-editor__editable_selected:after,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:after{content:"";pointer-events:none;background-color:var(--ck-table-selected-cell-background);position:absolute;top:0;left:0;right:0;bottom:0}.ck.ck-editor__editable .table table td.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table td.ck-editor__editable_selected:focus,.ck.ck-editor__editable .table table th.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:focus{background-color:transparent}.ck.ck-editor__editable .table table td.ck-editor__editable_selected .ck-widget_selected,.ck.ck-editor__editable .table table th.ck-editor__editable_selected .ck-widget_selected{outline:unset}'},function(e,t,n){var i=n(1);var o=n(113);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .table{margin:1em auto;display:table}.ck-content .table table{border-collapse:collapse;border-spacing:0;width:100%;height:100%;border:1px double #b3b3b3}.ck-content .table table td,.ck-content .table table th{min-width:2em;padding:.4em;border:1px solid #bfbfbf}.ck-content .table table th{font-weight:700;background:hsla(0,0%,0%,5%)}.ck-content[dir=rtl] .table th{text-align:right}.ck-content[dir=ltr] .table th{text-align:left}"},function(e,t,n){var i=n(1);var o=n(115);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-input-color{width:100%;display:flex}.ck.ck-input-color>input.ck.ck-input-text{min-width:auto;flex-grow:1}.ck.ck-input-color>input.ck.ck-input-text:active,.ck.ck-input-color>input.ck.ck-input-text:focus{z-index:var(--ck-z-default)}.ck.ck-input-color>div.ck.ck-dropdown{min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown>.ck-input-color__button .ck-dropdown__arrow{display:none}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview{position:relative;overflow:hidden}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{position:absolute;display:block}[dir=ltr] .ck.ck-input-color>.ck.ck-input-text{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .ck.ck-input-color>.ck.ck-input-text{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{padding:0}[dir=ltr] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}[dir=rtl] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-1px}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button.ck-disabled{background:var(--ck-color-input-disabled-background)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview{border-radius:0}.ck-rounded-corners .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview,.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview{width:20px;height:20px;border:1px solid var(--ck-color-input-border)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{top:-30%;left:50%;height:150%;width:8%;background:red;border-radius:2px;transform:rotate(45deg);transform-origin:50%}.ck.ck-input-color .ck.ck-input-color__remove-color{width:100%;border-bottom:1px solid var(--ck-color-input-border);padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);border-bottom-left-radius:0;border-bottom-right-radius:0}[dir=ltr] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-right-radius:0}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:0;margin-left:var(--ck-spacing-standard)}"},function(e,t,n){var i=n(1);var o=n(117);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-form__row{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.ck.ck-form__row>:not(.ck-label){flex-grow:1}.ck.ck-form__row.ck-table-form__action-row .ck-button-cancel,.ck.ck-form__row.ck-table-form__action-row .ck-button-save{justify-content:center}.ck.ck-form__row{padding:var(--ck-spacing-standard) var(--ck-spacing-large) 0}[dir=ltr] .ck.ck-form__row>:not(.ck-label)+*{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-form__row>:not(.ck-label)+*{margin-right:var(--ck-spacing-large)}.ck.ck-form__row>.ck-label{width:100%;min-width:100%}.ck.ck-form__row.ck-table-form__action-row{margin-top:var(--ck-spacing-large)}.ck.ck-form__row.ck-table-form__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}"},function(e,t,n){var i=n(1);var o=n(119);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-form__header{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:space-between}:root{--ck-form-header-height:38px}.ck.ck-form__header{padding:var(--ck-spacing-small) var(--ck-spacing-large);height:var(--ck-form-header-height);line-height:var(--ck-form-header-height);border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-form__header .ck-form__header__label{font-weight:700}"},function(e,t){e.exports=".ck.ck-form{padding:0 0 var(--ck-spacing-large)}.ck.ck-form:focus{outline:none}.ck.ck-form .ck.ck-input-text{min-width:100%;width:0}.ck.ck-form .ck.ck-dropdown{min-width:100%}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button .ck-button__label{width:100%}"},function(e,t){e.exports='.ck.ck-table-form .ck-form__row.ck-table-form__border-row{flex-wrap:wrap}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view{display:flex;flex-direction:column-reverse}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view .ck.ck-dropdown,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{flex-grow:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{flex-wrap:wrap;align-items:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view{display:flex;flex-direction:column-reverse;align-items:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view .ck.ck-dropdown,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{flex-grow:0}.ck.ck-table-form .ck.ck-labeled-field-view{position:relative}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{position:absolute;left:50%;bottom:calc(-1*var(--ck-table-properties-error-arrow-size));transform:translate(-50%,100%);z-index:1}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{content:"";position:absolute;top:calc(-1*var(--ck-table-properties-error-arrow-size));left:50%;transform:translateX(-50%)}:root{--ck-table-properties-error-arrow-size:6px;--ck-table-properties-min-error-width:150px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style{width:80px;min-width:80px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{width:50px;min-width:50px}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{padding:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view>.ck-label{font-size:10px;text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width{margin:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{align-self:start;display:inline-block;height:var(--ck-ui-component-min-height);line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{border-radius:0}.ck-rounded-corners .ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status,.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{background:var(--ck-color-base-error);color:var(--ck-color-base-background);padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-width:var(--ck-table-properties-min-error-width);text-align:center}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-left:var(--ck-table-properties-error-arrow-size) solid transparent;border-bottom:var(--ck-table-properties-error-arrow-size) solid var(--ck-color-base-error);border-right:var(--ck-table-properties-error-arrow-size) solid transparent;border-top:0 solid transparent}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:ck-table-form-labeled-view-status-appear .15s ease both}.ck.ck-table-form .ck.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}@keyframes ck-table-form-labeled-view-status-appear{0%{opacity:0}to{opacity:1}}'},function(e,t,n){var i=n(1);var o=n(123);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row{flex-wrap:wrap}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{flex-grow:0}.ck.ck-table-cell-properties-form{width:320px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__padding-row{padding:0;width:35%}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{background:none}"},function(e,t,n){var i=n(1);var o=n(125);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=i(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{flex-wrap:wrap;flex-basis:0;align-content:baseline}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items{flex-wrap:nowrap}.ck.ck-table-properties-form{width:320px}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{padding:0}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar{background:none}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items>*{width:40px}"},function(e,t,n){"use strict";n.r(t);var i=n(3);var o=i["a"].Symbol;var r=o;var s=Object.prototype;var a=s.hasOwnProperty;var c=s.toString;var l=r?r.toStringTag:undefined;function d(e){var t=a.call(e,l),n=e[l];try{e[l]=undefined;var i=true}catch(e){}var o=c.call(e);if(i){if(t){e[l]=n}else{delete e[l]}}return o}var u=d;var h=Object.prototype;var f=h.toString;function g(e){return f.call(e)}var m=g;var p="[object Null]",b="[object Undefined]";var w=r?r.toStringTag:undefined;function k(e){if(e==null){return e===undefined?b:p}return w&&w in Object(e)?u(e):m(e)}var _=k;function v(e,t){return function(n){return e(t(n))}}var y=v;var x=y(Object.getPrototypeOf,Object);var C=x;function A(e){return e!=null&&typeof e=="object"}var T=A;var S="[object Object]";var P=Function.prototype,E=Object.prototype;var M=P.toString;var I=E.hasOwnProperty;var N=M.call(Object);function O(e){if(!T(e)||_(e)!=S){return false}var t=C(e);if(t===null){return true}var n=I.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&M.call(n)==N}var R=O;function V(){this.__data__=[];this.size=0}var D=V;function L(e,t){return e===t||e!==e&&t!==t}var z=L;function B(e,t){var n=e.length;while(n--){if(z(e[n][0],t)){return n}}return-1}var j=B;var F=Array.prototype;var H=F.splice;function W(e){var t=this.__data__,n=j(t,e);if(n<0){return false}var i=t.length-1;if(n==i){t.pop()}else{H.call(t,n,1)}--this.size;return true}var U=W;function q(e){var t=this.__data__,n=j(t,e);return n<0?undefined:t[n][1]}var $=q;function G(e){return j(this.__data__,e)>-1}var Y=G;function K(e,t){var n=this.__data__,i=j(n,e);if(i<0){++this.size;n.push([e,t])}else{n[i][1]=t}return this}var Q=K;function J(e){var t=-1,n=e==null?0:e.length;this.clear();while(++t-1&&e%1==0&&e-1&&e%1==0&&e<=tn}var on=nn;var rn="[object Arguments]",sn="[object Array]",an="[object Boolean]",cn="[object Date]",ln="[object Error]",dn="[object Function]",un="[object Map]",hn="[object Number]",fn="[object Object]",gn="[object RegExp]",mn="[object Set]",pn="[object String]",bn="[object WeakMap]";var wn="[object ArrayBuffer]",kn="[object DataView]",_n="[object Float32Array]",vn="[object Float64Array]",yn="[object Int8Array]",xn="[object Int16Array]",Cn="[object Int32Array]",An="[object Uint8Array]",Tn="[object Uint8ClampedArray]",Sn="[object Uint16Array]",Pn="[object Uint32Array]";var En={};En[_n]=En[vn]=En[yn]=En[xn]=En[Cn]=En[An]=En[Tn]=En[Sn]=En[Pn]=true;En[rn]=En[sn]=En[wn]=En[an]=En[kn]=En[cn]=En[ln]=En[dn]=En[un]=En[hn]=En[fn]=En[gn]=En[mn]=En[pn]=En[bn]=false;function Mn(e){return T(e)&&on(e.length)&&!!En[_(e)]}var In=Mn;function Nn(e){return function(t){return e(t)}}var On=Nn;var Rn=n(5);var Vn=Rn["a"]&&Rn["a"].isTypedArray;var Dn=Vn?On(Vn):In;var Ln=Dn;var zn=Object.prototype;var Bn=zn.hasOwnProperty;function jn(e,t){var n=Kt(e),i=!n&&Gt(e),o=!n&&!i&&Object(Qt["a"])(e),r=!n&&!i&&!o&&Ln(e),s=n||i||o||r,a=s?Bt(e.length,String):[],c=a.length;for(var l in e){if((t||Bn.call(e,l))&&!(s&&(l=="length"||o&&(l=="offset"||l=="parent")||r&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||en(l,c)))){a.push(l)}}return a}var Fn=jn;var Hn=Object.prototype;function Wn(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||Hn;return e===n}var Un=Wn;var qn=y(Object.keys,Object);var $n=qn;var Gn=Object.prototype;var Yn=Gn.hasOwnProperty;function Kn(e){if(!Un(e)){return $n(e)}var t=[];for(var n in Object(e)){if(Yn.call(e,n)&&n!="constructor"){t.push(n)}}return t}var Qn=Kn;function Jn(e){return e!=null&&on(e.length)&&!ge(e)}var Zn=Jn;function Xn(e){return Zn(e)?Fn(e):Qn(e)}var ei=Xn;function ti(e,t){return e&&Lt(t,ei(t),e)}var ni=ti;function ii(e){var t=[];if(e!=null){for(var n in Object(e)){t.push(n)}}return t}var oi=ii;var ri=Object.prototype;var si=ri.hasOwnProperty;function ai(e){if(!ce(e)){return oi(e)}var t=Un(e),n=[];for(var i in e){if(!(i=="constructor"&&(t||!si.call(e,i)))){n.push(i)}}return n}var ci=ai;function li(e){return Zn(e)?Fn(e,true):ci(e)}var di=li;function ui(e,t){return e&&Lt(t,di(t),e)}var hi=ui;var fi=n(8);function gi(e,t){var n=-1,i=e.length;t||(t=Array(i));while(++n{this._setToTarget(e,i,t[i],n)})}}function Qr(e){return $r(e,Jr)}function Jr(e){return Yr(e)?e:undefined}function Zr(){return function e(){e.called=true}}var Xr=Zr;class es{constructor(e,t){this.source=e;this.name=t;this.path=[];this.stop=Xr();this.off=Xr()}}const ts=new Array(256).fill().map((e,t)=>("0"+t.toString(16)).slice(-2));function ns(){const e=Math.random()*4294967296>>>0;const t=Math.random()*4294967296>>>0;const n=Math.random()*4294967296>>>0;const i=Math.random()*4294967296>>>0;return"e"+ts[e>>0&255]+ts[e>>8&255]+ts[e>>16&255]+ts[e>>24&255]+ts[t>>0&255]+ts[t>>8&255]+ts[t>>16&255]+ts[t>>24&255]+ts[n>>0&255]+ts[n>>8&255]+ts[n>>16&255]+ts[n>>24&255]+ts[i>>0&255]+ts[i>>8&255]+ts[i>>16&255]+ts[i>>24&255]}const is={get(e){if(typeof e!="number"){return this[e]||this.normal}else{return e}},highest:1e5,high:1e3,normal:0,low:-1e3,lowest:-1e5};var os=is;var rs=n(6);var ss=n(0);const as=Symbol("listeningTo");const cs=Symbol("emitterId");const ls={on(e,t,n={}){this.listenTo(this,e,t,n)},once(e,t,n){let i=false;const o=function(e,...n){if(!i){i=true;e.off();t.call(this,e,...n)}};this.listenTo(this,e,o,n)},off(e,t){this.stopListening(this,e,t)},listenTo(e,t,n,i={}){let o,r;if(!this[as]){this[as]={}}const s=this[as];if(!fs(e)){hs(e)}const a=fs(e);if(!(o=s[a])){o=s[a]={emitter:e,callbacks:{}}}if(!(r=o.callbacks[t])){r=o.callbacks[t]=[]}r.push(n);ps(e,t);const c=bs(e,t);const l=os.get(i.priority);const d={callback:n,priority:l};for(const e of c){let t=false;for(let n=0;n{if(!this._delegations){this._delegations=new Map}e.forEach(e=>{const i=this._delegations.get(e);if(!i){this._delegations.set(e,new Map([[t,n]]))}else{i.set(t,n)}})}}},stopDelegating(e,t){if(!this._delegations){return}if(!e){this._delegations.clear()}else if(!t){this._delegations.delete(e)}else{const n=this._delegations.get(e);if(n){n.delete(t)}}}};var ds=ls;function us(e,t){if(e[as]&&e[as][t]){return e[as][t].emitter}return null}function hs(e,t){if(!e[cs]){e[cs]=t||ns()}}function fs(e){return e[cs]}function gs(e){if(!e._events){Object.defineProperty(e,"_events",{value:{}})}return e._events}function ms(){return{callbacks:[],childEvents:[]}}function ps(e,t){const n=gs(e);if(n[t]){return}let i=t;let o=null;const r=[];while(i!==""){if(n[i]){break}n[i]=ms();r.push(n[i]);if(o){n[i].childEvents.push(o)}o=i;i=i.substr(0,i.lastIndexOf(":"))}if(i!==""){for(const e of r){e.callbacks=n[i].callbacks.slice()}n[i].childEvents.push(o)}}function bs(e,t){const n=gs(e)[t];if(!n){return[]}let i=[n.callbacks];for(let t=0;t-1){return ws(e,t.substr(0,t.lastIndexOf(":")))}else{return null}}return n.callbacks}function ks(e,t,n){for(let[i,o]of e){if(!o){o=t.name}else if(typeof o=="function"){o=o(t.name)}const e=new es(t.source,o);e.path=[...t.path];i.fire(e,...n)}}function _s(e,t,n){const i=bs(e,t);for(const e of i){for(let t=0;t{Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t)).forEach(n=>{if(n in e.prototype){return}const i=Object.getOwnPropertyDescriptor(t,n);i.enumerable=false;Object.defineProperty(e.prototype,n,i)})})}class xs{constructor(e={},t={}){const n=vs(e);if(!n){t=e}this._items=[];this._itemMap=new Map;this._idProperty=t.idProperty||"id";this._bindToExternalToInternalMap=new WeakMap;this._bindToInternalToExternalMap=new WeakMap;this._skippedIndexesFromExternal=[];if(n){for(const t of e){this._items.push(t);this._itemMap.set(this._getItemIdBeforeAdding(t),t)}}}get length(){return this._items.length}get first(){return this._items[0]||null}get last(){return this._items[this.length-1]||null}add(e,t){const n=this._getItemIdBeforeAdding(e);if(t===undefined){t=this._items.length}else if(t>this._items.length||t<0){throw new ss["b"]("collection-add-item-invalid-index",this)}this._items.splice(t,0,e);this._itemMap.set(n,e);this.fire("add",e,t);return this}get(e){let t;if(typeof e=="string"){t=this._itemMap.get(e)}else if(typeof e=="number"){t=this._items[e]}else{throw new ss["b"]("collection-get-invalid-arg: Index or id must be given.",this)}return t||null}has(e){if(typeof e=="string"){return this._itemMap.has(e)}else{const t=this._idProperty;const n=e[t];return this._itemMap.has(n)}}getIndex(e){let t;if(typeof e=="string"){t=this._itemMap.get(e)}else{t=e}return this._items.indexOf(t)}remove(e){let t,n,i;let o=false;const r=this._idProperty;if(typeof e=="string"){n=e;i=this._itemMap.get(n);o=!i;if(i){t=this._items.indexOf(i)}}else if(typeof e=="number"){t=e;i=this._items[t];o=!i;if(i){n=i[r]}}else{i=e;n=i[r];t=this._items.indexOf(i);o=t==-1||!this._itemMap.get(n)}if(o){throw new ss["b"]("collection-remove-404: Item not found.",this)}this._items.splice(t,1);this._itemMap.delete(n);const s=this._bindToInternalToExternalMap.get(i);this._bindToInternalToExternalMap.delete(i);this._bindToExternalToInternalMap.delete(s);this.fire("remove",i,t);return i}map(e,t){return this._items.map(e,t)}find(e,t){return this._items.find(e,t)}filter(e,t){return this._items.filter(e,t)}clear(){if(this._bindToCollection){this.stopListening(this._bindToCollection);this._bindToCollection=null}while(this.length){this.remove(0)}}bindTo(e){if(this._bindToCollection){throw new ss["b"]("collection-bind-to-rebind: The collection cannot be bound more than once.",this)}this._bindToCollection=e;return{as:e=>{this._setUpBindToBinding(t=>new e(t))},using:e=>{if(typeof e=="function"){this._setUpBindToBinding(t=>e(t))}else{this._setUpBindToBinding(t=>t[e])}}}}_setUpBindToBinding(e){const t=this._bindToCollection;const n=(n,i,o)=>{const r=t._bindToCollection==this;const s=t._bindToInternalToExternalMap.get(i);if(r&&s){this._bindToExternalToInternalMap.set(i,s);this._bindToInternalToExternalMap.set(s,i)}else{const n=e(i);if(!n){this._skippedIndexesFromExternal.push(o);return}let r=o;for(const e of this._skippedIndexesFromExternal){if(o>e){r--}}for(const e of t._skippedIndexesFromExternal){if(r>=e){r++}}this._bindToExternalToInternalMap.set(i,n);this._bindToInternalToExternalMap.set(n,i);this.add(n,r);for(let e=0;e{const i=this._bindToExternalToInternalMap.get(t);if(i){this.remove(i)}this._skippedIndexesFromExternal=this._skippedIndexesFromExternal.reduce((e,t)=>{if(nt){e.push(t)}return e},[])})}_getItemIdBeforeAdding(e){const t=this._idProperty;let n;if(t in e){n=e[t];if(typeof n!="string"){throw new ss["b"]("collection-add-invalid-id",this)}if(this.get(n)){throw new ss["b"]("collection-add-item-already-exists",this)}}else{e[t]=n=ns()}return n}[Symbol.iterator](){return this._items[Symbol.iterator]()}}ys(xs,ds);class Cs{constructor(e,t=[],n=[]){this._context=e;this._plugins=new Map;this._availablePlugins=new Map;for(const e of t){if(e.pluginName){this._availablePlugins.set(e.pluginName,e)}}this._contextPlugins=new Map;for(const[e,t]of n){this._contextPlugins.set(e,t);this._contextPlugins.set(t,e);if(e.pluginName){this._availablePlugins.set(e.pluginName,e)}}}*[Symbol.iterator](){for(const e of this._plugins){if(typeof e[0]=="function"){yield e}}}get(e){const t=this._plugins.get(e);if(!t){const t="plugincollection-plugin-not-loaded: The requested plugin is not loaded.";let n=e;if(typeof e=="function"){n=e.pluginName||e.name}throw new ss["b"](t,this._context,{plugin:n})}return t}has(e){return this._plugins.has(e)}init(e,t=[]){const n=this;const i=this._context;const o=new Set;const r=[];const s=g(e);const a=g(t);const c=f(e);if(c){const e="plugincollection-plugin-not-found: Some plugins are not available and could not be loaded.";console.error(Object(ss["a"])(e),{plugins:c});return Promise.reject(new ss["b"](e,i,{plugins:c}))}return Promise.all(s.map(l)).then(()=>d(r,"init")).then(()=>d(r,"afterInit")).then(()=>r);function l(e){if(a.includes(e)){return}if(n._plugins.has(e)||o.has(e)){return}return u(e).catch(t=>{console.error(Object(ss["a"])("plugincollection-load: It was not possible to load the plugin."),{plugin:e});throw t})}function d(e,t){return e.reduce((e,i)=>{if(!i[t]){return e}if(n._contextPlugins.has(i)){return e}return e.then(i[t].bind(i))},Promise.resolve())}function u(e){return new Promise(s=>{o.add(e);if(e.requires){e.requires.forEach(n=>{const o=h(n);if(e.isContextPlugin&&!o.isContextPlugin){throw new ss["b"]("plugincollection-context-required: Context plugin can not require plugin which is not a context plugin",null,{plugin:o.name,requiredBy:e.name})}if(t.includes(o)){throw new ss["b"]("plugincollection-required: Cannot load a plugin because one of its dependencies is listed in"+"the `removePlugins` option.",i,{plugin:o.name,requiredBy:e.name})}l(o)})}const a=n._contextPlugins.get(e)||new e(i);n._add(e,a);r.push(a);s()})}function h(e){if(typeof e=="function"){return e}return n._availablePlugins.get(e)}function f(e){const t=[];for(const n of e){if(!h(n)){t.push(n)}}return t.length?t:null}function g(e){return e.map(e=>h(e)).filter(e=>!!e)}}destroy(){const e=[];for(const[,t]of this){if(typeof t.destroy=="function"&&!this._contextPlugins.has(t)){e.push(t.destroy())}}return Promise.all(e)}_add(e,t){this._plugins.set(e,t);const n=e.pluginName;if(!n){return}if(this._plugins.has(n)){throw new ss["b"]("plugincollection-plugin-name-conflict: Two plugins with the same name were loaded.",null,{pluginName:n,plugin1:this._plugins.get(n).constructor,plugin2:e})}this._plugins.set(n,t)}}ys(Cs,ds);if(!window.CKEDITOR_TRANSLATIONS){window.CKEDITOR_TRANSLATIONS={}}function As(e,t,n){if(!window.CKEDITOR_TRANSLATIONS[e]){window.CKEDITOR_TRANSLATIONS[e]={}}const i=window.CKEDITOR_TRANSLATIONS[e];i.dictionary=i.dictionary||{};i.getPluralForm=n||i.getPluralForm;Object.assign(i.dictionary,t)}function Ts(e,t,n=1){if(typeof n!=="number"){throw new ss["b"]("translation-service-quantity-not-a-number: Expecting `quantity` to be a number.",null,{quantity:n})}const i=Es();if(i===1){e=Object.keys(window.CKEDITOR_TRANSLATIONS)[0]}const o=t.id||t.string;if(i===0||!Ps(e,o)){if(n!==1){return t.plural}return t.string}const r=window.CKEDITOR_TRANSLATIONS[e].dictionary;const s=window.CKEDITOR_TRANSLATIONS[e].getPluralForm||(e=>e===1?0:1);if(typeof r[o]==="string"){return r[o]}const a=Number(s(n));return r[o][a]}function Ss(){window.CKEDITOR_TRANSLATIONS={}}function Ps(e,t){return!!window.CKEDITOR_TRANSLATIONS[e]&&!!window.CKEDITOR_TRANSLATIONS[e].dictionary[t]}function Es(){return Object.keys(window.CKEDITOR_TRANSLATIONS).length}const Ms=["ar","fa","he","ku","ug"];class Is{constructor(e={}){this.uiLanguage=e.uiLanguage||"en";this.contentLanguage=e.contentLanguage||this.uiLanguage;this.uiLanguageDirection=Os(this.uiLanguage);this.contentLanguageDirection=Os(this.contentLanguage);this.t=(e,t)=>this._t(e,t)}get language(){console.warn("locale-deprecated-language-property: "+"The Locale#language property has been deprecated and will be removed in the near future. "+"Please use #uiLanguage and #contentLanguage properties instead.");return this.uiLanguage}_t(e,t=[]){if(!Array.isArray(t)){t=[t]}if(typeof e==="string"){e={string:e}}const n=!!e.plural;const i=n?t[0]:1;const o=Ts(this.uiLanguage,e,i);return Ns(o,t)}}function Ns(e,t){return e.replace(/%(\d+)/g,(e,n)=>ne.destroy())).then(()=>this.plugins.destroy())}_addEditor(e,t){if(this._contextOwner){throw new ss["b"]("context-addEditor-private-context: Cannot add multiple editors to the context which is created by the editor.")}this.editors.add(e);if(t){this._contextOwner=e}}_removeEditor(e){if(this.editors.has(e)){this.editors.remove(e)}if(this._contextOwner===e){return this.destroy()}return Promise.resolve()}_getEditorConfig(){const e={};for(const t of this.config.names()){if(!["plugins","removePlugins","extraPlugins"].includes(t)){e[t]=this.config.get(t)}}return e}static create(e){return new Promise(t=>{const n=new this(e);t(n.initPlugins().then(()=>n))})}}function Vs(e,t){const n=Math.min(e.length,t.length);for(let i=0;ie.data.length){throw new ss["b"]("view-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.",this)}if(n<0||t+n>e.data.length){throw new ss["b"]("view-textproxy-wrong-length: Given length value is incorrect.",this)}this.data=e.data.substring(t,t+n);this.offsetInText=t}get offsetSize(){return this.data.length}get isPartial(){return this.data.length!==this.textNode.data.length}get parent(){return this.textNode.parent}get root(){return this.textNode.root}get document(){return this.textNode.document}is(e){return e==="textProxy"||e==="view:textProxy"}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let n=e.includeSelf?this.textNode:this.parent;while(n!==null){t[e.parentFirst?"push":"unshift"](n);n=n.parent}return t}}function Hs(e){const t=new Map;for(const n in e){t.set(n,e[n])}return t}function Ws(e){if(vs(e)){return new Map(e)}else{return Hs(e)}}class Us{constructor(...e){this._patterns=[];this.add(...e)}add(...e){for(let t of e){if(typeof t=="string"||t instanceof RegExp){t={name:t}}if(t.classes&&(typeof t.classes=="string"||t.classes instanceof RegExp)){t.classes=[t.classes]}this._patterns.push(t)}}match(...e){for(const t of e){for(const e of this._patterns){const n=qs(t,e);if(n){return{element:t,pattern:e,match:n}}}}return null}matchAll(...e){const t=[];for(const n of e){for(const e of this._patterns){const i=qs(n,e);if(i){t.push({element:n,pattern:e,match:i})}}}return t.length>0?t:null}getElementName(){if(this._patterns.length!==1){return null}const e=this._patterns[0];const t=e.name;return typeof e!="function"&&t&&!(t instanceof RegExp)?t:null}}function qs(e,t){if(typeof t=="function"){return t(e)}const n={};if(t.name){n.name=$s(t.name,e.name);if(!n.name){return null}}if(t.attributes){n.attributes=Gs(t.attributes,e);if(!n.attributes){return null}}if(t.classes){n.classes=Ys(t.classes,e);if(!n.classes){return false}}if(t.styles){n.styles=Ks(t.styles,e);if(!n.styles){return false}}return n}function $s(e,t){if(e instanceof RegExp){return e.test(t)}return e===t}function Gs(e,t){const n=[];for(const i in e){const o=e[i];if(t.hasAttribute(i)){const e=t.getAttribute(i);if(o===true){n.push(i)}else if(o instanceof RegExp){if(o.test(e)){n.push(i)}else{return null}}else if(e===o){n.push(i)}else{return null}}else{return null}}return n}function Ys(e,t){const n=[];for(const i of e){if(i instanceof RegExp){const e=t.getClassNames();for(const t of e){if(i.test(t)){n.push(t)}}if(n.length===0){return null}}else if(t.hasClass(i)){n.push(i)}else{return null}}return n}function Ks(e,t){const n=[];for(const i in e){const o=e[i];if(t.hasStyle(i)){const e=t.getStyle(i);if(o instanceof RegExp){if(o.test(e)){n.push(i)}else{return null}}else if(e===o){n.push(i)}else{return null}}else{return null}}return n}var Qs="[object Symbol]";function Js(e){return typeof e=="symbol"||T(e)&&_(e)==Qs}var Zs=Js;var Xs=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ea=/^\w*$/;function ta(e,t){if(Kt(e)){return false}var n=typeof e;if(n=="number"||n=="symbol"||n=="boolean"||e==null||Zs(e)){return true}return ea.test(e)||!Xs.test(e)||t!=null&&e in Object(t)}var na=ta;var ia="Expected a function";function oa(e,t){if(typeof e!="function"||t!=null&&typeof t!="function"){throw new TypeError(ia)}var n=function(){var i=arguments,o=t?t.apply(this,i):i[0],r=n.cache;if(r.has(o)){return r.get(o)}var s=e.apply(this,i);n.cache=r.set(o,s)||r;return s};n.cache=new(oa.Cache||_t);return n}oa.Cache=_t;var ra=oa;var sa=500;function aa(e){var t=ra(e,(function(e){if(n.size===sa){n.clear()}return e}));var n=t.cache;return t}var ca=aa;var la=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;var da=/\\(\\)?/g;var ua=ca((function(e){var t=[];if(e.charCodeAt(0)===46){t.push("")}e.replace(la,(function(e,n,i,o){t.push(i?o.replace(da,"$1"):n||e)}));return t}));var ha=ua;function fa(e,t){var n=-1,i=e==null?0:e.length,o=Array(i);while(++no?0:o+t}n=n>o?o:n;if(n<0){n+=o}o=t>n?0:n-t>>>0;t>>>=0;var r=Array(o);while(++i0){if(++t>=gc){return arguments[0]}}else{t=0}return e.apply(undefined,arguments)}}var wc=bc;var kc=wc(fc);var _c=kc;function vc(e,t){return _c(lc(e,t,oc),e+"")}var yc=vc;function xc(e,t,n){if(!ce(n)){return false}var i=typeof t;if(i=="number"?Zn(n)&&en(t,n.length):i=="string"&&t in n){return z(n[t],e)}return false}var Cc=xc;function Ac(e){return yc((function(t,n){var i=-1,o=n.length,r=o>1?n[o-1]:undefined,s=o>2?n[2]:undefined;r=e.length>3&&typeof r=="function"?(o--,r):undefined;if(s&&Cc(n[0],n[1],s)){r=o<3?undefined:r;o=1}t=Object(t);while(++it===e);return Array.isArray(n)}set(e,t){if(ce(e)){for(const[t,n]of Object.entries(e)){this._styleProcessor.toNormalizedForm(t,n,this._styles)}}else{this._styleProcessor.toNormalizedForm(e,t,this._styles)}}remove(e){const t=Dc(e);za(this._styles,t);delete this._styles[e];this._cleanEmptyObjectsOnPath(t)}getNormalized(e){return this._styleProcessor.getNormalized(e,this._styles)}toString(){if(this.isEmpty){return""}return this._getStylesEntries().map(e=>e.join(":")).sort().join(";")+";"}getAsString(e){if(this.isEmpty){return}if(this._styles[e]&&!ce(this._styles[e])){return this._styles[e]}const t=this._styleProcessor.getReducedForm(e,this._styles);const n=t.find(([t])=>t===e);if(Array.isArray(n)){return n[1]}}getStyleNames(){if(this.isEmpty){return[]}const e=this._getStylesEntries();return e.map(([e])=>e)}clear(){this._styles={}}_getStylesEntries(){const e=[];const t=Object.keys(this._styles);for(const n of t){e.push(...this._styleProcessor.getReducedForm(n,this._styles))}return e}_cleanEmptyObjectsOnPath(e){const t=e.split(".");const n=t.length>1;if(!n){return}const i=t.splice(0,t.length-1).join(".");const o=ja(this._styles,i);if(!o){return}const r=!Array.from(Object.keys(o)).length;if(r){this.remove(i)}}}class Rc{constructor(){this._normalizers=new Map;this._extractors=new Map;this._reducers=new Map;this._consumables=new Map}toNormalizedForm(e,t,n){if(ce(t)){Lc(n,Dc(e),t);return}if(this._normalizers.has(e)){const i=this._normalizers.get(e);const{path:o,value:r}=i(t);Lc(n,o,r)}else{Lc(n,e,t)}}getNormalized(e,t){if(!e){return Pc({},t)}if(t[e]!==undefined){return t[e]}if(this._extractors.has(e)){const n=this._extractors.get(e);if(typeof n==="string"){return ja(t,n)}const i=n(e,t);if(i){return i}}return ja(t,Dc(e))}getReducedForm(e,t){const n=this.getNormalized(e,t);if(n===undefined){return[]}if(this._reducers.has(e)){const t=this._reducers.get(e);return t(n)}return[[e,n]]}getRelatedStyles(e){return this._consumables.get(e)||[]}setNormalizer(e,t){this._normalizers.set(e,t)}setExtractor(e,t){this._extractors.set(e,t)}setReducer(e,t){this._reducers.set(e,t)}setStyleRelation(e,t){this._mapStyleNames(e,t);for(const n of t){this._mapStyleNames(n,[e])}}_mapStyleNames(e,t){if(!this._consumables.has(e)){this._consumables.set(e,[])}this._consumables.get(e).push(...t)}}function Vc(e){let t=null;let n=0;let i=0;let o=null;const r=new Map;if(e===""){return r}if(e.charAt(e.length-1)!=";"){e=e+";"}for(let s=0;s0){yield"class"}if(!this._styles.isEmpty){yield"style"}yield*this._attrs.keys()}*getAttributes(){yield*this._attrs.entries();if(this._classes.size>0){yield["class",this.getAttribute("class")]}if(!this._styles.isEmpty){yield["style",this.getAttribute("style")]}}getAttribute(e){if(e=="class"){if(this._classes.size>0){return[...this._classes].join(" ")}return undefined}if(e=="style"){const e=this._styles.toString();return e==""?undefined:e}return this._attrs.get(e)}hasAttribute(e){if(e=="class"){return this._classes.size>0}if(e=="style"){return!this._styles.isEmpty}return this._attrs.has(e)}isSimilar(e){if(!(e instanceof zc)){return false}if(this===e){return true}if(this.name!=e.name){return false}if(this._attrs.size!==e._attrs.size||this._classes.size!==e._classes.size||this._styles.size!==e._styles.size){return false}for(const[t,n]of this._attrs){if(!e._attrs.has(t)||e._attrs.get(t)!==n){return false}}for(const t of this._classes){if(!e._classes.has(t)){return false}}for(const t of this._styles.getStyleNames()){if(!e._styles.has(t)||e._styles.getAsString(t)!==this._styles.getAsString(t)){return false}}return true}hasClass(...e){for(const t of e){if(!this._classes.has(t)){return false}}return true}getClassNames(){return this._classes.keys()}getStyle(e){return this._styles.getAsString(e)}getNormalizedStyle(e){return this._styles.getNormalized(e)}getStyleNames(){return this._styles.getStyleNames()}hasStyle(...e){for(const t of e){if(!this._styles.has(t)){return false}}return true}findAncestor(...e){const t=new Us(...e);let n=this.parent;while(n){if(t.match(n)){return n}n=n.parent}return null}getCustomProperty(e){return this._customProperties.get(e)}*getCustomProperties(){yield*this._customProperties.entries()}getIdentity(){const e=Array.from(this._classes).sort().join(",");const t=this._styles.toString();const n=Array.from(this._attrs).map(e=>`${e[0]}="${e[1]}"`).sort().join(" ");return this.name+(e==""?"":` class="${e}"`)+(!t?"":` style="${t}"`)+(n==""?"":` ${n}`)}_clone(e=false){const t=[];if(e){for(const n of this.getChildren()){t.push(n._clone(e))}}const n=new this.constructor(this.document,this.name,this._attrs,t);n._classes=new Set(this._classes);n._styles.set(this._styles.getNormalized());n._customProperties=new Map(this._customProperties);n.getFillerOffset=this.getFillerOffset;return n}_appendChild(e){return this._insertChild(this.childCount,e)}_insertChild(e,t){this._fireChange("children",this);let n=0;const i=Fc(this.document,t);for(const t of i){if(t.parent!==null){t._remove()}t.parent=this;t.document=this.document;this._children.splice(e,0,t);e++;n++}return n}_removeChildren(e,t=1){this._fireChange("children",this);for(let n=e;n0){this._classes.clear();return true}return false}if(e=="style"){if(!this._styles.isEmpty){this._styles.clear();return true}return false}return this._attrs.delete(e)}_addClass(e){this._fireChange("attributes",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._classes.add(e))}_removeClass(e){this._fireChange("attributes",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._classes.delete(e))}_setStyle(e,t){this._fireChange("attributes",this);this._styles.set(e,t)}_removeStyle(e){this._fireChange("attributes",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._styles.remove(e))}_setCustomProperty(e,t){this._customProperties.set(e,t)}_removeCustomProperty(e){return this._customProperties.delete(e)}}function Bc(e){e=Ws(e);for(const[t,n]of e){if(n===null){e.delete(t)}else if(typeof n!="string"){e.set(t,String(n))}}return e}function jc(e,t){const n=t.split(/\s+/);e.clear();n.forEach(t=>e.add(t))}function Fc(e,t){if(typeof t=="string"){return[new js(e,t)]}if(!vs(t)){t=[t]}return Array.from(t).map(t=>{if(typeof t=="string"){return new js(e,t)}if(t instanceof Fs){return new js(e,t.data)}return t})}class Hc extends zc{constructor(e,t,n,i){super(e,t,n,i);this.getFillerOffset=Wc}is(e,t=null){if(!t){return e==="containerElement"||e==="view:containerElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element")}}}function Wc(){const e=[...this.getChildren()];const t=e[this.childCount-1];if(t&&t.is("element","br")){return this.childCount}for(const t of e){if(!t.is("uiElement")){return null}}return this.childCount}var Uc=Tc((function(e,t){Lt(t,di(t),e)}));var qc=Uc;const $c=Symbol("observableProperties");const Gc=Symbol("boundObservables");const Yc=Symbol("boundProperties");const Kc={set(e,t){if(ce(e)){Object.keys(e).forEach(t=>{this.set(t,e[t])},this);return}Jc(this);const n=this[$c];if(e in this&&!n.has(e)){throw new ss["b"]("observable-set-cannot-override: Cannot override an existing property.",this)}Object.defineProperty(this,e,{enumerable:true,configurable:true,get(){return n.get(e)},set(t){const i=n.get(e);let o=this.fire("set:"+e,e,t,i);if(o===undefined){o=t}if(i!==o||!n.has(e)){n.set(e,o);this.fire("change:"+e,e,o,i)}}});this[e]=t},bind(...e){if(!e.length||!tl(e)){throw new ss["b"]("observable-bind-wrong-properties: All properties must be strings.",this)}if(new Set(e).size!==e.length){throw new ss["b"]("observable-bind-duplicate-properties: Properties must be unique.",this)}Jc(this);const t=this[Yc];e.forEach(e=>{if(t.has(e)){throw new ss["b"]("observable-bind-rebind: Cannot bind the same property more than once.",this)}});const n=new Map;e.forEach(e=>{const i={property:e,to:[]};t.set(e,i);n.set(e,i)});return{to:Zc,toMany:Xc,_observable:this,_bindProperties:e,_to:[],_bindings:n}},unbind(...e){if(!this[$c]){return}const t=this[Yc];const n=this[Gc];if(e.length){if(!tl(e)){throw new ss["b"]("observable-unbind-wrong-properties: Properties must be strings.",this)}e.forEach(e=>{const i=t.get(e);if(!i){return}let o,r,s,a;i.to.forEach(e=>{o=e[0];r=e[1];s=n.get(o);a=s[r];a.delete(i);if(!a.size){delete s[r]}if(!Object.keys(s).length){n.delete(o);this.stopListening(o,"change")}});t.delete(e)})}else{n.forEach((e,t)=>{this.stopListening(t,"change")});n.clear();t.clear()}},decorate(e){const t=this[e];if(!t){throw new ss["b"]("observablemixin-cannot-decorate-undefined: Cannot decorate an undefined method.",this,{object:this,methodName:e})}this.on(e,(e,n)=>{e.return=t.apply(this,n)});this[e]=function(...t){return this.fire(e,t)}}};qc(Kc,ds);var Qc=Kc;function Jc(e){if(e[$c]){return}Object.defineProperty(e,$c,{value:new Map});Object.defineProperty(e,Gc,{value:new Map});Object.defineProperty(e,Yc,{value:new Map})}function Zc(...e){const t=nl(...e);const n=Array.from(this._bindings.keys());const i=n.length;if(!t.callback&&t.to.length>1){throw new ss["b"]("observable-bind-to-no-callback: Binding multiple observables only possible with callback.",this)}if(i>1&&t.callback){throw new ss["b"]("observable-bind-to-extra-callback: Cannot bind multiple properties and use a callback in one binding.",this)}t.to.forEach(e=>{if(e.properties.length&&e.properties.length!==i){throw new ss["b"]("observable-bind-to-properties-length: The number of properties must match.",this)}if(!e.properties.length){e.properties=this._bindProperties}});this._to=t.to;if(t.callback){this._bindings.get(n[0]).callback=t.callback}sl(this._observable,this._to);ol(this);this._bindProperties.forEach(e=>{rl(this._observable,e)})}function Xc(e,t,n){if(this._bindings.size>1){throw new ss["b"]("observable-bind-to-many-not-one-binding: Cannot bind multiple properties with toMany().",this)}this.to(...el(e,t),n)}function el(e,t){const n=e.map(e=>[e,t]);return Array.prototype.concat.apply([],n)}function tl(e){return e.every(e=>typeof e=="string")}function nl(...e){if(!e.length){throw new ss["b"]("observable-bind-to-parse-error: Invalid argument syntax in `to()`.",null)}const t={to:[]};let n;if(typeof e[e.length-1]=="function"){t.callback=e.pop()}e.forEach(e=>{if(typeof e=="string"){n.properties.push(e)}else if(typeof e=="object"){n={observable:e,properties:[]};t.to.push(n)}else{throw new ss["b"]("observable-bind-to-parse-error: Invalid argument syntax in `to()`.",null)}});return t}function il(e,t,n,i){const o=e[Gc];const r=o.get(n);const s=r||{};if(!s[i]){s[i]=new Set}s[i].add(t);if(!r){o.set(n,s)}}function ol(e){let t;e._bindings.forEach((n,i)=>{e._to.forEach(o=>{t=o.properties[n.callback?0:e._bindProperties.indexOf(i)];n.to.push([o.observable,t]);il(e._observable,n,o.observable,t)})})}function rl(e,t){const n=e[Yc];const i=n.get(t);let o;if(i.callback){o=i.callback.apply(e,i.to.map(e=>e[0][e[1]]))}else{o=i.to[0];o=o[0][o[1]]}if(e.hasOwnProperty(t)){e[t]=o}else{e.set(t,o)}}function sl(e,t){t.forEach(t=>{const n=e[Gc];let i;if(!n.get(t.observable)){e.listenTo(t.observable,"change",(o,r)=>{i=n.get(t.observable)[r];if(i){i.forEach(t=>{rl(e,t.property)})}})}})}class al extends Hc{constructor(e,t,n,i){super(e,t,n,i);this.set("isReadOnly",false);this.set("isFocused",false);this.bind("isReadOnly").to(e);this.bind("isFocused").to(e,"isFocused",t=>t&&e.selection.editableElement==this);this.listenTo(e.selection,"change",()=>{this.isFocused=e.isFocused&&e.selection.editableElement==this})}is(e,t=null){if(!t){return e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element")}}destroy(){this.stopListening()}}ys(al,Qc);const cl=Symbol("rootName");class ll extends al{constructor(e,t){super(e,t);this.rootName="main"}is(e,t=null){if(!t){return e==="rootElement"||e==="view:rootElement"||e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="rootElement"||e==="view:rootElement"||e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element")}}get rootName(){return this.getCustomProperty(cl)}set rootName(e){this._setCustomProperty(cl,e)}set _name(e){this.name=e}}class dl{constructor(e={}){if(!e.boundaries&&!e.startPosition){throw new ss["b"]("view-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.",null)}if(e.direction&&e.direction!="forward"&&e.direction!="backward"){throw new ss["b"]("view-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.",e.startPosition,{direction:e.direction})}this.boundaries=e.boundaries||null;if(e.startPosition){this.position=ul._createAt(e.startPosition)}else{this.position=ul._createAt(e.boundaries[e.direction=="backward"?"end":"start"])}this.direction=e.direction||"forward";this.singleCharacters=!!e.singleCharacters;this.shallow=!!e.shallow;this.ignoreElementEnd=!!e.ignoreElementEnd;this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null;this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null}[Symbol.iterator](){return this}skip(e){let t,n,i;do{i=this.position;({done:t,value:n}=this.next())}while(!t&&e(n));if(!t){this.position=i}}next(){if(this.direction=="forward"){return this._next()}else{return this._previous()}}_next(){let e=this.position.clone();const t=this.position;const n=e.parent;if(n.parent===null&&e.offset===n.childCount){return{done:true}}if(n===this._boundaryEndParent&&e.offset==this.boundaries.end.offset){return{done:true}}let i;if(n instanceof js){if(e.isAtEnd){this.position=ul._createAfter(n);return this._next()}i=n.data[e.offset]}else{i=n.getChild(e.offset)}if(i instanceof zc){if(!this.shallow){e=new ul(i,0)}else{e.offset++}this.position=e;return this._formatReturnValue("elementStart",i,t,e,1)}else if(i instanceof js){if(this.singleCharacters){e=new ul(i,0);this.position=e;return this._next()}else{let n=i.data.length;let o;if(i==this._boundaryEndParent){n=this.boundaries.end.offset;o=new Fs(i,0,n);e=ul._createAfter(o)}else{o=new Fs(i,0,i.data.length);e.offset++}this.position=e;return this._formatReturnValue("text",o,t,e,n)}}else if(typeof i=="string"){let i;if(this.singleCharacters){i=1}else{const t=n===this._boundaryEndParent?this.boundaries.end.offset:n.data.length;i=t-e.offset}const o=new Fs(n,e.offset,i);e.offset+=i;this.position=e;return this._formatReturnValue("text",o,t,e,i)}else{e=ul._createAfter(n);this.position=e;if(this.ignoreElementEnd){return this._next()}else{return this._formatReturnValue("elementEnd",n,t,e)}}}_previous(){let e=this.position.clone();const t=this.position;const n=e.parent;if(n.parent===null&&e.offset===0){return{done:true}}if(n==this._boundaryStartParent&&e.offset==this.boundaries.start.offset){return{done:true}}let i;if(n instanceof js){if(e.isAtStart){this.position=ul._createBefore(n);return this._previous()}i=n.data[e.offset-1]}else{i=n.getChild(e.offset-1)}if(i instanceof zc){if(!this.shallow){e=new ul(i,i.childCount);this.position=e;if(this.ignoreElementEnd){return this._previous()}else{return this._formatReturnValue("elementEnd",i,t,e)}}else{e.offset--;this.position=e;return this._formatReturnValue("elementStart",i,t,e,1)}}else if(i instanceof js){if(this.singleCharacters){e=new ul(i,i.data.length);this.position=e;return this._previous()}else{let n=i.data.length;let o;if(i==this._boundaryStartParent){const t=this.boundaries.start.offset;o=new Fs(i,t,i.data.length-t);n=o.data.length;e=ul._createBefore(o)}else{o=new Fs(i,0,i.data.length);e.offset--}this.position=e;return this._formatReturnValue("text",o,t,e,n)}}else if(typeof i=="string"){let i;if(!this.singleCharacters){const t=n===this._boundaryStartParent?this.boundaries.start.offset:0;i=e.offset-t}else{i=1}e.offset-=i;const o=new Fs(n,e.offset,i);this.position=e;return this._formatReturnValue("text",o,t,e,i)}else{e=ul._createBefore(n);this.position=e;return this._formatReturnValue("elementStart",n,t,e,1)}}_formatReturnValue(e,t,n,i,o){if(t instanceof Fs){if(t.offsetInText+t.data.length==t.textNode.data.length){if(this.direction=="forward"&&!(this.boundaries&&this.boundaries.end.isEqual(this.position))){i=ul._createAfter(t.textNode);this.position=i}else{n=ul._createAfter(t.textNode)}}if(t.offsetInText===0){if(this.direction=="backward"&&!(this.boundaries&&this.boundaries.start.isEqual(this.position))){i=ul._createBefore(t.textNode);this.position=i}else{n=ul._createBefore(t.textNode)}}}return{done:false,value:{type:e,item:t,previousPosition:n,nextPosition:i,length:o}}}}class ul{constructor(e,t){this.parent=e;this.offset=t}get nodeAfter(){if(this.parent.is("text")){return null}return this.parent.getChild(this.offset)||null}get nodeBefore(){if(this.parent.is("text")){return null}return this.parent.getChild(this.offset-1)||null}get isAtStart(){return this.offset===0}get isAtEnd(){const e=this.parent.is("text")?this.parent.data.length:this.parent.childCount;return this.offset===e}get root(){return this.parent.root}get editableElement(){let e=this.parent;while(!(e instanceof al)){if(e.parent){e=e.parent}else{return null}}return e}getShiftedBy(e){const t=ul._createAt(this);const n=t.offset+e;t.offset=n<0?0:n;return t}getLastMatchingPosition(e,t={}){t.startPosition=this;const n=new dl(t);n.skip(e);return n.position}getAncestors(){if(this.parent.is("documentFragment")){return[this.parent]}else{return this.parent.getAncestors({includeSelf:true})}}getCommonAncestor(e){const t=this.getAncestors();const n=e.getAncestors();let i=0;while(t[i]==n[i]&&t[i]){i++}return i===0?null:t[i-1]}is(e){return e==="position"||e==="view:position"}isEqual(e){return this.parent==e.parent&&this.offset==e.offset}isBefore(e){return this.compareWith(e)=="before"}isAfter(e){return this.compareWith(e)=="after"}compareWith(e){if(this.root!==e.root){return"different"}if(this.isEqual(e)){return"same"}const t=this.parent.is("node")?this.parent.getPath():[];const n=e.parent.is("node")?e.parent.getPath():[];t.push(this.offset);n.push(e.offset);const i=Vs(t,n);switch(i){case"prefix":return"before";case"extension":return"after";default:return t[i]0?new this(n,i):new this(i,n)}static _createIn(e){return this._createFromParentsAndOffsets(e,0,e,e.childCount)}static _createOn(e){const t=e.is("textProxy")?e.offsetSize:1;return this._createFromPositionAndShift(ul._createBefore(e),t)}}function fl(e){if(e.item.is("attributeElement")||e.item.is("uiElement")){return true}return false}function gl(e){let t=0;for(const n of e){t++}return t}class ml{constructor(e=null,t,n){this._ranges=[];this._lastRangeBackward=false;this._isFake=false;this._fakeSelectionLabel="";this.setTo(e,t,n)}get isFake(){return this._isFake}get fakeSelectionLabel(){return this._fakeSelectionLabel}get anchor(){if(!this._ranges.length){return null}const e=this._ranges[this._ranges.length-1];const t=this._lastRangeBackward?e.end:e.start;return t.clone()}get focus(){if(!this._ranges.length){return null}const e=this._ranges[this._ranges.length-1];const t=this._lastRangeBackward?e.start:e.end;return t.clone()}get isCollapsed(){return this.rangeCount===1&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}get editableElement(){if(this.anchor){return this.anchor.editableElement}return null}*getRanges(){for(const e of this._ranges){yield e.clone()}}getFirstRange(){let e=null;for(const t of this._ranges){if(!e||t.start.isBefore(e.start)){e=t}}return e?e.clone():null}getLastRange(){let e=null;for(const t of this._ranges){if(!e||t.end.isAfter(e.end)){e=t}}return e?e.clone():null}getFirstPosition(){const e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){const e=this.getLastRange();return e?e.end.clone():null}isEqual(e){if(this.isFake!=e.isFake){return false}if(this.isFake&&this.fakeSelectionLabel!=e.fakeSelectionLabel){return false}if(this.rangeCount!=e.rangeCount){return false}else if(this.rangeCount===0){return true}if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus)){return false}for(const t of this._ranges){let n=false;for(const i of e._ranges){if(t.isEqual(i)){n=true;break}}if(!n){return false}}return true}isSimilar(e){if(this.isBackward!=e.isBackward){return false}const t=gl(this.getRanges());const n=gl(e.getRanges());if(t!=n){return false}if(t==0){return true}for(let t of this.getRanges()){t=t.getTrimmed();let n=false;for(let i of e.getRanges()){i=i.getTrimmed();if(t.start.isEqual(i.start)&&t.end.isEqual(i.end)){n=true;break}}if(!n){return false}}return true}getSelectedElement(){if(this.rangeCount!==1){return null}return this.getFirstRange().getContainedElement()}setTo(e,t,n){if(e===null){this._setRanges([]);this._setFakeOptions(t)}else if(e instanceof ml||e instanceof pl){this._setRanges(e.getRanges(),e.isBackward);this._setFakeOptions({fake:e.isFake,label:e.fakeSelectionLabel})}else if(e instanceof hl){this._setRanges([e],t&&t.backward);this._setFakeOptions(t)}else if(e instanceof ul){this._setRanges([new hl(e)]);this._setFakeOptions(t)}else if(e instanceof Bs){const i=!!n&&!!n.backward;let o;if(t===undefined){throw new ss["b"]("view-selection-setTo-required-second-parameter: "+"selection.setTo requires the second parameter when the first parameter is a node.",this)}else if(t=="in"){o=hl._createIn(e)}else if(t=="on"){o=hl._createOn(e)}else{o=new hl(ul._createAt(e,t))}this._setRanges([o],i);this._setFakeOptions(n)}else if(vs(e)){this._setRanges(e,t&&t.backward);this._setFakeOptions(t)}else{throw new ss["b"]("view-selection-setTo-not-selectable: Cannot set selection to given place.",this)}this.fire("change")}setFocus(e,t){if(this.anchor===null){throw new ss["b"]("view-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.",this)}const n=ul._createAt(e,t);if(n.compareWith(this.focus)=="same"){return}const i=this.anchor;this._ranges.pop();if(n.compareWith(i)=="before"){this._addRange(new hl(n,i),true)}else{this._addRange(new hl(i,n))}this.fire("change")}is(e){return e==="selection"||e==="view:selection"}_setRanges(e,t=false){e=Array.from(e);this._ranges=[];for(const t of e){this._addRange(t)}this._lastRangeBackward=!!t}_setFakeOptions(e={}){this._isFake=!!e.fake;this._fakeSelectionLabel=e.fake?e.label||"":""}_addRange(e,t=false){if(!(e instanceof hl)){throw new ss["b"]("view-selection-add-range-not-range: "+"Selection range set to an object that is not an instance of view.Range",this)}this._pushRange(e);this._lastRangeBackward=!!t}_pushRange(e){for(const t of this._ranges){if(e.isIntersecting(t)){throw new ss["b"]("view-selection-range-intersects: Trying to add a range that intersects with another range from selection.",this,{addedRange:e,intersectingRange:t})}}this._ranges.push(new hl(e.start,e.end))}}ys(ml,ds);class pl{constructor(e=null,t,n){this._selection=new ml;this._selection.delegate("change").to(this);this._selection.setTo(e,t,n)}get isFake(){return this._selection.isFake}get fakeSelectionLabel(){return this._selection.fakeSelectionLabel}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get isCollapsed(){return this._selection.isCollapsed}get rangeCount(){return this._selection.rangeCount}get isBackward(){return this._selection.isBackward}get editableElement(){return this._selection.editableElement}get _ranges(){return this._selection._ranges}*getRanges(){yield*this._selection.getRanges()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getSelectedElement(){return this._selection.getSelectedElement()}isEqual(e){return this._selection.isEqual(e)}isSimilar(e){return this._selection.isSimilar(e)}is(e){return e==="selection"||e=="documentSelection"||e=="view:selection"||e=="view:documentSelection"}_setTo(e,t,n){this._selection.setTo(e,t,n)}_setFocus(e,t){this._selection.setFocus(e,t)}}ys(pl,ds);class bl{constructor(e){this.selection=new pl;this.roots=new xs({idProperty:"rootName"});this.stylesProcessor=e;this.set("isReadOnly",false);this.set("isFocused",false);this.set("isComposing",false);this._postFixers=new Set}getRoot(e="main"){return this.roots.get(e)}registerPostFixer(e){this._postFixers.add(e)}destroy(){this.roots.map(e=>e.destroy());this.stopListening()}_callPostFixers(e){let t=false;do{for(const n of this._postFixers){t=n(e);if(t){break}}}while(t)}}ys(bl,Qc);const wl=10;class kl extends zc{constructor(e,t,n,i){super(e,t,n,i);this.getFillerOffset=_l;this._priority=wl;this._id=null;this._clonesGroup=null}get priority(){return this._priority}get id(){return this._id}getElementsWithSameId(){if(this.id===null){throw new ss["b"]("attribute-element-get-elements-with-same-id-no-id: "+"Cannot get elements with the same id for an attribute element without id.",this)}return new Set(this._clonesGroup)}is(e,t=null){if(!t){return e==="attributeElement"||e==="view:attributeElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="attributeElement"||e==="view:attributeElement"||e==="element"||e==="view:element")}}isSimilar(e){if(this.id!==null||e.id!==null){return this.id===e.id}return super.isSimilar(e)&&this.priority==e.priority}_clone(e){const t=super._clone(e);t._priority=this._priority;t._id=this._id;return t}}kl.DEFAULT_PRIORITY=wl;function _l(){if(vl(this)){return null}let e=this.parent;while(e&&e.is("attributeElement")){if(vl(e)>1){return null}e=e.parent}if(!e||vl(e)>1){return null}return this.childCount}function vl(e){return Array.from(e.getChildren()).filter(e=>!e.is("uiElement")).length}class yl extends zc{constructor(e,t,n,i){super(e,t,n,i);this.getFillerOffset=xl}is(e,t=null){if(!t){return e==="emptyElement"||e==="view:emptyElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="emptyElement"||e==="view:emptyElement"||e==="element"||e==="view:element")}}_insertChild(e,t){if(t&&(t instanceof Bs||Array.from(t).length>0)){throw new ss["b"]("view-emptyelement-cannot-add: Cannot add child nodes to EmptyElement instance.",[this,t])}}}function xl(){return null}const Cl=navigator.userAgent.toLowerCase();const Al={isMac:Sl(Cl),isGecko:Pl(Cl),isSafari:El(Cl),isAndroid:Ml(Cl),features:{isRegExpUnicodePropertySupported:Il()}};var Tl=Al;function Sl(e){return e.indexOf("macintosh")>-1}function Pl(e){return!!e.match(/gecko\/\d+/)}function El(e){return e.indexOf(" applewebkit/")>-1&&e.indexOf("chrome")===-1}function Ml(e){return e.indexOf("android")>-1}function Il(){let e=false;try{e="ć".search(new RegExp("[\\p{L}]","u"))===0}catch(e){}return e}const Nl={"⌘":"ctrl","⇧":"shift","⌥":"alt"};const Ol={ctrl:"⌘",shift:"⇧",alt:"⌥"};const Rl=zl();function Vl(e){let t;if(typeof e=="string"){t=Rl[e.toLowerCase()];if(!t){throw new ss["b"]("keyboard-unknown-key: Unknown key name.",null,{key:e})}}else{t=e.keyCode+(e.altKey?Rl.alt:0)+(e.ctrlKey?Rl.ctrl:0)+(e.shiftKey?Rl.shift:0)}return t}function Dl(e){if(typeof e=="string"){e=Bl(e)}return e.map(e=>typeof e=="string"?Vl(e):e).reduce((e,t)=>t+e,0)}function Ll(e){if(!Tl.isMac){return e}return Bl(e).map(e=>Ol[e.toLowerCase()]||e).reduce((e,t)=>{if(e.slice(-1)in Nl){return e+t}else{return e+"+"+t}})}function zl(){const e={arrowleft:37,arrowup:38,arrowright:39,arrowdown:40,backspace:8,delete:46,enter:13,space:32,esc:27,tab:9,ctrl:1114112,cmd:1114112,shift:2228224,alt:4456448};for(let t=65;t<=90;t++){const n=String.fromCharCode(t);e[n.toLowerCase()]=t}for(let t=48;t<=57;t++){e[t-48]=t}for(let t=112;t<=123;t++){e["f"+(t-111)]=t}return e}function Bl(e){return e.split(/\s*\+\s*/)}class jl extends zc{constructor(e,t,n,i){super(e,t,n,i);this.getFillerOffset=Hl}is(e,t=null){if(!t){return e==="uiElement"||e==="view:uiElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="uiElement"||e==="view:uiElement"||e==="element"||e==="view:element")}}_insertChild(e,t){if(t&&(t instanceof Bs||Array.from(t).length>0)){throw new ss["b"]("view-uielement-cannot-add: Cannot add child nodes to UIElement instance.",this)}}render(e){return this.toDomElement(e)}toDomElement(e){const t=e.createElement(this.name);for(const e of this.getAttributeKeys()){t.setAttribute(e,this.getAttribute(e))}return t}}function Fl(e){e.document.on("keydown",(t,n)=>Wl(t,n,e.domConverter))}function Hl(){return null}function Wl(e,t,n){if(t.keyCode==Rl.arrowright){const e=t.domTarget.ownerDocument.defaultView.getSelection();const i=e.rangeCount==1&&e.getRangeAt(0).collapsed;if(i||t.shiftKey){const t=e.focusNode;const o=e.focusOffset;const r=n.domPositionToView(t,o);if(r===null){return}let s=false;const a=r.getLastMatchingPosition(e=>{if(e.item.is("uiElement")){s=true}if(e.item.is("uiElement")||e.item.is("attributeElement")){return true}return false});if(s){const t=n.viewPositionToDom(a);if(i){e.collapse(t.parent,t.offset)}else{e.extend(t.parent,t.offset)}}}}}class Ul{constructor(e,t){this.document=e;this._children=[];if(t){this._insertChild(0,t)}}[Symbol.iterator](){return this._children[Symbol.iterator]()}get childCount(){return this._children.length}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}is(e){return e==="documentFragment"||e==="view:documentFragment"}_appendChild(e){return this._insertChild(this.childCount,e)}getChild(e){return this._children[e]}getChildIndex(e){return this._children.indexOf(e)}getChildren(){return this._children[Symbol.iterator]()}_insertChild(e,t){this._fireChange("children",this);let n=0;const i=ql(this.document,t);for(const t of i){if(t.parent!==null){t._remove()}t.parent=this;this._children.splice(e,0,t);e++;n++}return n}_removeChildren(e,t=1){this._fireChange("children",this);for(let n=e;n{if(typeof t=="string"){return new js(e,t)}if(t instanceof Fs){return new js(e,t.data)}return t})}class $l{constructor(e){this.document=e;this._cloneGroups=new Map}setSelection(e,t,n){this.document.selection._setTo(e,t,n)}setSelectionFocus(e,t){this.document.selection._setFocus(e,t)}createText(e){return new js(this.document,e)}createAttributeElement(e,t,n={}){const i=new kl(this.document,e,t);if(n.priority){i._priority=n.priority}if(n.id){i._id=n.id}return i}createContainerElement(e,t){return new Hc(this.document,e,t)}createEditableElement(e,t){const n=new al(this.document,e,t);n._document=this.document;return n}createEmptyElement(e,t){return new yl(this.document,e,t)}createUIElement(e,t,n){const i=new jl(this.document,e,t);if(n){i.render=n}return i}setAttribute(e,t,n){n._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,n){if(R(e)&&n===undefined){n=t}n._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,n){n._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}breakAttributes(e){if(e instanceof ul){return this._breakAttributes(e)}else{return this._breakAttributesRange(e)}}breakContainer(e){const t=e.parent;if(!t.is("containerElement")){throw new ss["b"]("view-writer-break-non-container-element: Trying to break an element which is not a container element.",this.document)}if(!t.parent){throw new ss["b"]("view-writer-break-root: Trying to break root element.",this.document)}if(e.isAtStart){return ul._createBefore(t)}else if(!e.isAtEnd){const n=t._clone(false);this.insert(ul._createAfter(t),n);const i=new hl(e,ul._createAt(t,"end"));const o=new ul(n,0);this.move(i,o)}return ul._createAfter(t)}mergeAttributes(e){const t=e.offset;const n=e.parent;if(n.is("text")){return e}if(n.is("attributeElement")&&n.childCount===0){const e=n.parent;const t=n.index;n._remove();this._removeFromClonedElementsGroup(n);return this.mergeAttributes(new ul(e,t))}const i=n.getChild(t-1);const o=n.getChild(t);if(!i||!o){return e}if(i.is("text")&&o.is("text")){return Zl(i,o)}else if(i.is("attributeElement")&&o.is("attributeElement")&&i.isSimilar(o)){const e=i.childCount;i._appendChild(o.getChildren());o._remove();this._removeFromClonedElementsGroup(o);return this.mergeAttributes(new ul(i,e))}return e}mergeContainers(e){const t=e.nodeBefore;const n=e.nodeAfter;if(!t||!n||!t.is("containerElement")||!n.is("containerElement")){throw new ss["b"]("view-writer-merge-containers-invalid-position: "+"Element before and after given position cannot be merged.",this.document)}const i=t.getChild(t.childCount-1);const o=i instanceof js?ul._createAt(i,"end"):ul._createAt(t,"end");this.move(hl._createIn(n),ul._createAt(t,"end"));this.remove(hl._createOn(n));return o}insert(e,t){t=vs(t)?[...t]:[t];Xl(t,this.document);const n=Yl(e);if(!n){throw new ss["b"]("view-writer-invalid-position-container",this.document)}const i=this._breakAttributes(e,true);const o=n._insertChild(i.offset,t);for(const e of t){this._addToClonedElementsGroup(e)}const r=i.getShiftedBy(o);const s=this.mergeAttributes(i);if(o===0){return new hl(s,s)}else{if(!s.isEqual(i)){r.offset--}const e=this.mergeAttributes(r);return new hl(s,e)}}remove(e){const t=e instanceof hl?e:hl._createOn(e);nd(t,this.document);if(t.isCollapsed){return new Ul(this.document)}const{start:n,end:i}=this._breakAttributesRange(t,true);const o=n.parent;const r=i.offset-n.offset;const s=o._removeChildren(n.offset,r);for(const e of s){this._removeFromClonedElementsGroup(e)}const a=this.mergeAttributes(n);t.start=a;t.end=a.clone();return new Ul(this.document,s)}clear(e,t){nd(e,this.document);const n=e.getWalker({direction:"backward",ignoreElementEnd:true});for(const i of n){const n=i.item;let o;if(n.is("element")&&t.isSimilar(n)){o=hl._createOn(n)}else if(!i.nextPosition.isAfter(e.start)&&n.is("textProxy")){const e=n.getAncestors().find(e=>e.is("element")&&t.isSimilar(e));if(e){o=hl._createIn(e)}}if(o){if(o.end.isAfter(e.end)){o.end=e.end}if(o.start.isBefore(e.start)){o.start=e.start}this.remove(o)}}}move(e,t){let n;if(t.isAfter(e.end)){t=this._breakAttributes(t,true);const i=t.parent;const o=i.childCount;e=this._breakAttributesRange(e,true);n=this.remove(e);t.offset+=i.childCount-o}else{n=this.remove(e)}return this.insert(t,n)}wrap(e,t){if(!(t instanceof kl)){throw new ss["b"]("view-writer-wrap-invalid-attribute",this.document)}nd(e,this.document);if(!e.isCollapsed){return this._wrapRange(e,t)}else{let n=e.start;if(n.parent.is("element")&&!Gl(n.parent)){n=n.getLastMatchingPosition(e=>e.item.is("uiElement"))}n=this._wrapPosition(n,t);const i=this.document.selection;if(i.isCollapsed&&i.getFirstPosition().isEqual(e.start)){this.setSelection(n)}return new hl(n)}}unwrap(e,t){if(!(t instanceof kl)){throw new ss["b"]("view-writer-unwrap-invalid-attribute",this.document)}nd(e,this.document);if(e.isCollapsed){return e}const{start:n,end:i}=this._breakAttributesRange(e,true);const o=n.parent;const r=this._unwrapChildren(o,n.offset,i.offset,t);const s=this.mergeAttributes(r.start);if(!s.isEqual(r.start)){r.end.offset--}const a=this.mergeAttributes(r.end);return new hl(s,a)}rename(e,t){const n=new Hc(this.document,e,t.getAttributes());this.insert(ul._createAfter(t),n);this.move(hl._createIn(t),ul._createAt(n,0));this.remove(hl._createOn(t));return n}clearClonedElementsGroup(e){this._cloneGroups.delete(e)}createPositionAt(e,t){return ul._createAt(e,t)}createPositionAfter(e){return ul._createAfter(e)}createPositionBefore(e){return ul._createBefore(e)}createRange(e,t){return new hl(e,t)}createRangeOn(e){return hl._createOn(e)}createRangeIn(e){return hl._createIn(e)}createSelection(e,t,n){return new ml(e,t,n)}_wrapChildren(e,t,n,i){let o=t;const r=[];while(ofalse;e.parent._insertChild(e.offset,n);const i=new hl(e,e.getShiftedBy(1));this.wrap(i,t);const o=new ul(n.parent,n.index);n._remove();const r=o.nodeBefore;const s=o.nodeAfter;if(r instanceof js&&s instanceof js){return Zl(r,s)}return Ql(o)}_wrapAttributeElement(e,t){if(!id(e,t)){return false}if(e.name!==t.name||e.priority!==t.priority){return false}for(const n of e.getAttributeKeys()){if(n==="class"||n==="style"){continue}if(t.hasAttribute(n)&&t.getAttribute(n)!==e.getAttribute(n)){return false}}for(const n of e.getStyleNames()){if(t.hasStyle(n)&&t.getStyle(n)!==e.getStyle(n)){return false}}for(const n of e.getAttributeKeys()){if(n==="class"||n==="style"){continue}if(!t.hasAttribute(n)){this.setAttribute(n,e.getAttribute(n),t)}}for(const n of e.getStyleNames()){if(!t.hasStyle(n)){this.setStyle(n,e.getStyle(n),t)}}for(const n of e.getClassNames()){if(!t.hasClass(n)){this.addClass(n,t)}}return true}_unwrapAttributeElement(e,t){if(!id(e,t)){return false}if(e.name!==t.name||e.priority!==t.priority){return false}for(const n of e.getAttributeKeys()){if(n==="class"||n==="style"){continue}if(!t.hasAttribute(n)||t.getAttribute(n)!==e.getAttribute(n)){return false}}if(!t.hasClass(...e.getClassNames())){return false}for(const n of e.getStyleNames()){if(!t.hasStyle(n)||t.getStyle(n)!==e.getStyle(n)){return false}}for(const n of e.getAttributeKeys()){if(n==="class"||n==="style"){continue}this.removeAttribute(n,t)}this.removeClass(Array.from(e.getClassNames()),t);this.removeStyle(Array.from(e.getStyleNames()),t);return true}_breakAttributesRange(e,t=false){const n=e.start;const i=e.end;nd(e,this.document);if(e.isCollapsed){const n=this._breakAttributes(e.start,t);return new hl(n,n)}const o=this._breakAttributes(i,t);const r=o.parent.childCount;const s=this._breakAttributes(n,t);o.offset+=o.parent.childCount-r;return new hl(s,o)}_breakAttributes(e,t=false){const n=e.offset;const i=e.parent;if(e.parent.is("emptyElement")){throw new ss["b"]("view-writer-cannot-break-empty-element",this.document)}if(e.parent.is("uiElement")){throw new ss["b"]("view-writer-cannot-break-ui-element",this.document)}if(!t&&i.is("text")&&td(i.parent)){return e.clone()}if(td(i)){return e.clone()}if(i.is("text")){return this._breakAttributes(Jl(e),t)}const o=i.childCount;if(n==o){const e=new ul(i.parent,i.index+1);return this._breakAttributes(e,t)}else{if(n===0){const e=new ul(i.parent,i.index);return this._breakAttributes(e,t)}else{const e=i.index+1;const o=i._clone();i.parent._insertChild(e,o);this._addToClonedElementsGroup(o);const r=i.childCount-n;const s=i._removeChildren(n,r);o._appendChild(s);const a=new ul(i.parent,e);return this._breakAttributes(a,t)}}}_addToClonedElementsGroup(e){if(!e.root.is("rootElement")){return}if(e.is("element")){for(const t of e.getChildren()){this._addToClonedElementsGroup(t)}}const t=e.id;if(!t){return}let n=this._cloneGroups.get(t);if(!n){n=new Set;this._cloneGroups.set(t,n)}n.add(e);e._clonesGroup=n}_removeFromClonedElementsGroup(e){if(e.is("element")){for(const t of e.getChildren()){this._removeFromClonedElementsGroup(t)}}const t=e.id;if(!t){return}const n=this._cloneGroups.get(t);if(!n){return}n.delete(e)}}function Gl(e){return Array.from(e.getChildren()).some(e=>!e.is("uiElement"))}function Yl(e){let t=e.parent;while(!td(t)){if(!t){return undefined}t=t.parent}return t}function Kl(e,t){if(e.priorityt.priority){return false}return e.getIdentity()n instanceof e)){throw new ss["b"]("view-writer-insert-invalid-node",t)}if(!n.is("text")){Xl(n.getChildren(),t)}}}const ed=[js,kl,Hc,yl,jl];function td(e){return e&&(e.is("containerElement")||e.is("documentFragment"))}function nd(e,t){const n=Yl(e.start);const i=Yl(e.end);if(!n||!i||n!==i){throw new ss["b"]("view-writer-invalid-range-container",t)}}function id(e,t){return e.id===null&&t.id===null}function od(e){return Object.prototype.toString.call(e)=="[object Text]"}const rd=e=>e.createTextNode(" ");const sd=e=>{const t=e.createElement("br");t.dataset.ckeFiller=true;return t};const ad=7;const cd=(()=>{let e="";for(let t=0;t0){n.push({index:i,type:"insert",values:e.slice(i,r)})}if(o-i>0){n.push({index:i+(r-i),type:"delete",howMany:o-i})}return n}function kd(e,t){const{firstIndex:n,lastIndexOld:i,lastIndexNew:o}=e;if(n===-1){return Array(t).fill("equal")}let r=[];if(n>0){r=r.concat(Array(n).fill("equal"))}if(o-n>0){r=r.concat(Array(o-n).fill("insert"))}if(i-n>0){r=r.concat(Array(i-n).fill("delete"))}if(o200||o>200||i+o>300){return _d.fastDiff(e,t,n,true)}let r,s;if(ol?-1:1;if(d[i+h]){d[i]=d[i+h].slice(0)}if(!d[i]){d[i]=[]}d[i].push(o>l?r:s);let f=Math.max(o,l);let g=f-i;while(gl;g--){u[g]=h(g)}u[l]=h(l);f++}while(u[l]!==c);return d[l].slice(1)}_d.fastDiff=gd;function vd(e,t,n){e.insertBefore(n,e.childNodes[t]||null)}function yd(e){const t=e.parentNode;if(t){t.removeChild(e)}}function xd(e){if(e){if(e.defaultView){return e instanceof e.defaultView.Document}else if(e.ownerDocument&&e.ownerDocument.defaultView){return e instanceof e.ownerDocument.defaultView.Node}}return false}class Cd{constructor(e,t){this.domDocuments=new Set;this.domConverter=e;this.markedAttributes=new Set;this.markedChildren=new Set;this.markedTexts=new Set;this.selection=t;this.isFocused=false;this._inlineFiller=null;this._fakeSelectionContainer=null}markToSync(e,t){if(e==="text"){if(this.domConverter.mapViewToDom(t.parent)){this.markedTexts.add(t)}}else{if(!this.domConverter.mapViewToDom(t)){return}if(e==="attributes"){this.markedAttributes.add(t)}else if(e==="children"){this.markedChildren.add(t)}else{throw new ss["b"]("view-renderer-unknown-type: Unknown type passed to Renderer.markToSync.",this)}}}render(){let e;for(const e of this.markedChildren){this._updateChildrenMappings(e)}if(this._inlineFiller&&!this._isSelectionInInlineFiller()){this._removeInlineFiller()}if(this._inlineFiller){e=this._getInlineFillerPosition()}else if(this._needsInlineFillerAtSelection()){e=this.selection.getFirstPosition();this.markedChildren.add(e.parent)}for(const e of this.markedAttributes){this._updateAttrs(e)}for(const t of this.markedChildren){this._updateChildren(t,{inlineFillerPosition:e})}for(const t of this.markedTexts){if(!this.markedChildren.has(t.parent)&&this.domConverter.mapViewToDom(t.parent)){this._updateText(t,{inlineFillerPosition:e})}}if(e){const t=this.domConverter.viewPositionToDom(e);const n=t.parent.ownerDocument;if(!ld(t.parent)){this._inlineFiller=Td(n,t.parent,t.offset)}else{this._inlineFiller=t.parent}}else{this._inlineFiller=null}this._updateSelection();this._updateFocus();this.markedTexts.clear();this.markedAttributes.clear();this.markedChildren.clear()}_updateChildrenMappings(e){const t=this.domConverter.mapViewToDom(e);if(!t){return}const n=this.domConverter.mapViewToDom(e).childNodes;const i=Array.from(this.domConverter.viewChildrenToDom(e,t.ownerDocument,{withChildren:false}));const o=this._diffNodeLists(n,i);const r=this._findReplaceActions(o,n,i);if(r.indexOf("replace")!==-1){const t={equal:0,insert:0,delete:0};for(const o of r){if(o==="replace"){const o=t.equal+t.insert;const r=t.equal+t.delete;const s=e.getChild(o);if(s&&!s.is("uiElement")){this._updateElementMappings(s,n[r])}yd(i[o]);t.equal++}else{t[o]++}}}}_updateElementMappings(e,t){this.domConverter.unbindDomElement(t);this.domConverter.bindElements(t,e);this.markedChildren.add(e);this.markedAttributes.add(e)}_getInlineFillerPosition(){const e=this.selection.getFirstPosition();if(e.parent.is("text")){return ul._createBefore(this.selection.getFirstPosition().parent)}else{return e}}_isSelectionInInlineFiller(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed){return false}const e=this.selection.getFirstPosition();const t=this.domConverter.viewPositionToDom(e);if(t&&od(t.parent)&&ld(t.parent)){return true}return false}_removeInlineFiller(){const e=this._inlineFiller;if(!ld(e)){throw new ss["b"]("view-renderer-filler-was-lost: The inline filler node was lost.",this)}if(dd(e)){e.parentNode.removeChild(e)}else{e.data=e.data.substr(ad)}this._inlineFiller=null}_needsInlineFillerAtSelection(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed){return false}const e=this.selection.getFirstPosition();const t=e.parent;const n=e.offset;if(!this.domConverter.mapViewToDom(t.root)){return false}if(!t.is("element")){return false}if(!Ad(t)){return false}if(n===t.getFillerOffset()){return false}const i=e.nodeBefore;const o=e.nodeAfter;if(i instanceof js||o instanceof js){return false}return true}_updateText(e,t){const n=this.domConverter.findCorrespondingDomText(e);const i=this.domConverter.viewToDom(e,n.ownerDocument);const o=n.data;let r=i.data;const s=t.inlineFillerPosition;if(s&&s.parent==e.parent&&s.offset==e.index){r=cd+r}if(o!=r){const e=gd(o,r);for(const t of e){if(t.type==="insert"){n.insertData(t.index,t.values.join(""))}else{n.deleteData(t.index,t.howMany)}}}}_updateAttrs(e){const t=this.domConverter.mapViewToDom(e);if(!t){return}const n=Array.from(t.attributes).map(e=>e.name);const i=e.getAttributeKeys();for(const n of i){t.setAttribute(n,e.getAttribute(n))}for(const i of n){if(!e.hasAttribute(i)){t.removeAttribute(i)}}}_updateChildren(e,t){const n=this.domConverter.mapViewToDom(e);if(!n){return}const i=t.inlineFillerPosition;const o=this.domConverter.mapViewToDom(e).childNodes;const r=Array.from(this.domConverter.viewChildrenToDom(e,n.ownerDocument,{bind:true,inlineFillerPosition:i}));if(i&&i.parent===e){Td(n.ownerDocument,r,i.offset)}const s=this._diffNodeLists(o,r);let a=0;const c=new Set;for(const e of s){if(e==="delete"){c.add(o[a]);yd(o[a])}else if(e==="equal"){a++}}a=0;for(const e of s){if(e==="insert"){vd(n,a,r[a]);a++}else if(e==="equal"){this._markDescendantTextToSync(this.domConverter.domToView(r[a]));a++}}for(const e of c){if(!e.parentNode){this.domConverter.unbindDomElement(e)}}}_diffNodeLists(e,t){e=Md(e,this._fakeSelectionContainer);return _d(e,t,Pd.bind(null,this.domConverter))}_findReplaceActions(e,t,n){if(e.indexOf("insert")===-1||e.indexOf("delete")===-1){return e}let i=[];let o=[];let r=[];const s={equal:0,insert:0,delete:0};for(const a of e){if(a==="insert"){r.push(n[s.equal+s.insert])}else if(a==="delete"){o.push(t[s.equal+s.delete])}else{i=i.concat(_d(o,r,Sd).map(e=>e==="equal"?"replace":e));i.push("equal");o=[];r=[]}s[a]++}return i.concat(_d(o,r,Sd).map(e=>e==="equal"?"replace":e))}_markDescendantTextToSync(e){if(!e){return}if(e.is("text")){this.markedTexts.add(e)}else if(e.is("element")){for(const t of e.getChildren()){this._markDescendantTextToSync(t)}}}_updateSelection(){if(this.selection.rangeCount===0){this._removeDomSelection();this._removeFakeSelection();return}const e=this.domConverter.mapViewToDom(this.selection.editableElement);if(!this.isFocused||!e){return}if(this.selection.isFake){this._updateFakeSelection(e)}else{this._removeFakeSelection();this._updateDomSelection(e)}}_updateFakeSelection(e){const t=e.ownerDocument;if(!this._fakeSelectionContainer){this._fakeSelectionContainer=Id(t)}const n=this._fakeSelectionContainer;this.domConverter.bindFakeSelection(n,this.selection);if(!this._fakeSelectionNeedsUpdate(e)){return}if(!n.parentElement||n.parentElement!=e){e.appendChild(n)}n.textContent=this.selection.fakeSelectionLabel||" ";const i=t.getSelection();const o=t.createRange();i.removeAllRanges();o.selectNodeContents(n);i.addRange(o)}_updateDomSelection(e){const t=e.ownerDocument.defaultView.getSelection();if(!this._domSelectionNeedsUpdate(t)){return}const n=this.domConverter.viewPositionToDom(this.selection.anchor);const i=this.domConverter.viewPositionToDom(this.selection.focus);e.focus();t.collapse(n.parent,n.offset);t.extend(i.parent,i.offset);if(Tl.isGecko){Ed(i,t)}}_domSelectionNeedsUpdate(e){if(!this.domConverter.isDomSelectionCorrect(e)){return true}const t=e&&this.domConverter.domSelectionToView(e);if(t&&this.selection.isEqual(t)){return false}if(!this.selection.isCollapsed&&this.selection.isSimilar(t)){return false}return true}_fakeSelectionNeedsUpdate(e){const t=this._fakeSelectionContainer;const n=e.ownerDocument.getSelection();if(!t||t.parentElement!==e){return true}if(n.anchorNode!==t&&!t.contains(n.anchorNode)){return true}return t.textContent!==this.selection.fakeSelectionLabel}_removeDomSelection(){for(const e of this.domDocuments){const t=e.getSelection();if(t.rangeCount){const t=e.activeElement;const n=this.domConverter.mapDomToView(t);if(t&&n){e.getSelection().removeAllRanges()}}}}_removeFakeSelection(){const e=this._fakeSelectionContainer;if(e){e.remove()}}_updateFocus(){if(this.isFocused){const e=this.selection.editableElement;if(e){this.domConverter.focus(e)}}}}ys(Cd,Qc);function Ad(e){if(e.getAttribute("contenteditable")=="false"){return false}const t=e.findAncestor(e=>e.hasAttribute("contenteditable"));return!t||t.getAttribute("contenteditable")=="true"}function Td(e,t,n){const i=t instanceof Array?t:t.childNodes;const o=i[n];if(od(o)){o.data=cd+o.data;return o}else{const o=e.createTextNode(cd);if(Array.isArray(t)){i.splice(n,0,o)}else{vd(t,n,o)}return o}}function Sd(e,t){return xd(e)&&xd(t)&&!od(e)&&!od(t)&&e.tagName.toLowerCase()===t.tagName.toLowerCase()}function Pd(e,t,n){if(t===n){return true}else if(od(t)&&od(n)){return t.data===n.data}else if(e.isBlockFiller(t)&&e.isBlockFiller(n)){return true}return false}function Ed(e,t){const n=e.parent;if(n.nodeType!=Node.ELEMENT_NODE||e.offset!=n.childNodes.length-1){return}const i=n.childNodes[e.offset];if(i&&i.tagName=="BR"){t.addRange(t.getRangeAt(0))}}function Md(e,t){const n=Array.from(e);if(n.length==0||!t){return n}const i=n[n.length-1];if(i==t){n.pop()}return n}function Id(e){const t=e.createElement("div");Object.assign(t.style,{position:"fixed",top:0,left:"-9999px",width:"42px"});t.textContent=" ";return t}var Nd={window:window,document:document};function Od(e){let t=0;while(e.previousSibling){e=e.previousSibling;t++}return t}function Rd(e){const t=[];while(e&&e.nodeType!=Node.DOCUMENT_NODE){t.unshift(e);e=e.parentNode}return t}function Vd(e,t){const n=Rd(e);const i=Rd(t);let o=0;while(n[o]==i[o]&&n[o]){o++}return o===0?null:n[o-1]}const Dd=sd(document);class Ld{constructor(e,t={}){this.document=e;this.blockFillerMode=t.blockFillerMode||"br";this.preElements=["pre"];this.blockElements=["p","div","h1","h2","h3","h4","h5","h6","li","dd","dt","figcaption"];this._blockFiller=this.blockFillerMode=="br"?sd:rd;this._domToViewMapping=new WeakMap;this._viewToDomMapping=new WeakMap;this._fakeSelectionMapping=new WeakMap}bindFakeSelection(e,t){this._fakeSelectionMapping.set(e,new ml(t))}fakeSelectionToView(e){return this._fakeSelectionMapping.get(e)}bindElements(e,t){this._domToViewMapping.set(e,t);this._viewToDomMapping.set(t,e)}unbindDomElement(e){const t=this._domToViewMapping.get(e);if(t){this._domToViewMapping.delete(e);this._viewToDomMapping.delete(t);for(const t of e.childNodes){this.unbindDomElement(t)}}}bindDocumentFragments(e,t){this._domToViewMapping.set(e,t);this._viewToDomMapping.set(t,e)}viewToDom(e,t,n={}){if(e.is("text")){const n=this._processDataFromViewText(e);return t.createTextNode(n)}else{if(this.mapViewToDom(e)){return this.mapViewToDom(e)}let i;if(e.is("documentFragment")){i=t.createDocumentFragment();if(n.bind){this.bindDocumentFragments(i,e)}}else if(e.is("uiElement")){i=e.render(t);if(n.bind){this.bindElements(i,e)}return i}else{if(e.hasAttribute("xmlns")){i=t.createElementNS(e.getAttribute("xmlns"),e.name)}else{i=t.createElement(e.name)}if(n.bind){this.bindElements(i,e)}for(const t of e.getAttributeKeys()){i.setAttribute(t,e.getAttribute(t))}}if(n.withChildren||n.withChildren===undefined){for(const o of this.viewChildrenToDom(e,t,n)){i.appendChild(o)}}return i}}*viewChildrenToDom(e,t,n={}){const i=e.getFillerOffset&&e.getFillerOffset();let o=0;for(const r of e.getChildren()){if(i===o){yield this._blockFiller(t)}yield this.viewToDom(r,t,n);o++}if(i===o){yield this._blockFiller(t)}}viewRangeToDom(e){const t=this.viewPositionToDom(e.start);const n=this.viewPositionToDom(e.end);const i=document.createRange();i.setStart(t.parent,t.offset);i.setEnd(n.parent,n.offset);return i}viewPositionToDom(e){const t=e.parent;if(t.is("text")){const n=this.findCorrespondingDomText(t);if(!n){return null}let i=e.offset;if(ld(n)){i+=ad}return{parent:n,offset:i}}else{let n,i,o;if(e.offset===0){n=this.mapViewToDom(t);if(!n){return null}o=n.childNodes[0]}else{const t=e.nodeBefore;i=t.is("text")?this.findCorrespondingDomText(t):this.mapViewToDom(e.nodeBefore);if(!i){return null}n=i.parentNode;o=i.nextSibling}if(od(o)&&ld(o)){return{parent:o,offset:ad}}const r=i?Od(i)+1:0;return{parent:n,offset:r}}}domToView(e,t={}){if(this.isBlockFiller(e,this.blockFillerMode)){return null}const n=this.getParentUIElement(e,this._domToViewMapping);if(n){return n}if(od(e)){if(dd(e)){return null}else{const t=this._processDataFromDomText(e);return t===""?null:new js(this.document,t)}}else if(this.isComment(e)){return null}else{if(this.mapDomToView(e)){return this.mapDomToView(e)}let n;if(this.isDocumentFragment(e)){n=new Ul(this.document);if(t.bind){this.bindDocumentFragments(e,n)}}else{const i=t.keepOriginalCase?e.tagName:e.tagName.toLowerCase();n=new zc(this.document,i);if(t.bind){this.bindElements(e,n)}const o=e.attributes;for(let e=o.length-1;e>=0;e--){n._setAttribute(o[e].name,o[e].value)}}if(t.withChildren||t.withChildren===undefined){for(const i of this.domChildrenToView(e,t)){n._appendChild(i)}}return n}}*domChildrenToView(e,t={}){for(let n=0;n{const{scrollLeft:t,scrollTop:n}=e;i.push([t,n])});t.focus();Bd(t,e=>{const[t,n]=i.shift();e.scrollLeft=t;e.scrollTop=n});Nd.window.scrollTo(e,n)}}isElement(e){return e&&e.nodeType==Node.ELEMENT_NODE}isDocumentFragment(e){return e&&e.nodeType==Node.DOCUMENT_FRAGMENT_NODE}isComment(e){return e&&e.nodeType==Node.COMMENT_NODE}isBlockFiller(e){if(this.blockFillerMode=="br"){return e.isEqualNode(Dd)}if(e.tagName==="BR"&&Fd(e,this.blockElements)&&e.parentNode.childNodes.length===1){return true}return jd(e,this.blockElements)}isDomSelectionBackward(e){if(e.isCollapsed){return false}const t=document.createRange();t.setStart(e.anchorNode,e.anchorOffset);t.setEnd(e.focusNode,e.focusOffset);const n=t.collapsed;t.detach();return n}getParentUIElement(e){const t=Rd(e);t.pop();while(t.length){const e=t.pop();const n=this._domToViewMapping.get(e);if(n&&n.is("uiElement")){return n}}return null}isDomSelectionCorrect(e){return this._isDomSelectionPositionCorrect(e.anchorNode,e.anchorOffset)&&this._isDomSelectionPositionCorrect(e.focusNode,e.focusOffset)}_isDomSelectionPositionCorrect(e,t){if(od(e)&&ld(e)&&tthis.preElements.includes(e.name))){return t}if(t.charAt(0)==" "){const n=this._getTouchingViewTextNode(e,false);const i=n&&this._nodeEndsWithSpace(n);if(i||!n){t=" "+t.substr(1)}}if(t.charAt(t.length-1)==" "){const n=this._getTouchingViewTextNode(e,true);if(t.charAt(t.length-2)==" "||!n||n.data.charAt(0)==" "){t=t.substr(0,t.length-1)+" "}}return t.replace(/ {2}/g,"  ")}_nodeEndsWithSpace(e){if(e.getAncestors().some(e=>this.preElements.includes(e.name))){return false}const t=this._processDataFromViewText(e);return t.charAt(t.length-1)==" "}_processDataFromDomText(e){let t=e.data;if(zd(e,this.preElements)){return ud(e)}t=t.replace(/[ \n\t\r]{1,}/g," ");const n=this._getTouchingInlineDomNode(e,false);const i=this._getTouchingInlineDomNode(e,true);const o=this._checkShouldLeftTrimDomText(n);const r=this._checkShouldRightTrimDomText(e,i);if(o){t=t.replace(/^ /,"")}if(r){t=t.replace(/ $/,"")}t=ud(new Text(t));t=t.replace(/ \u00A0/g," ");if(/( |\u00A0)\u00A0$/.test(t)||!i||i.data&&i.data.charAt(0)==" "){t=t.replace(/\u00A0$/," ")}if(o){t=t.replace(/^\u00A0/," ")}return t}_checkShouldLeftTrimDomText(e){if(!e){return true}if(Yr(e)){return true}return/[^\S\u00A0]/.test(e.data.charAt(e.data.length-1))}_checkShouldRightTrimDomText(e,t){if(t){return false}return!ld(e)}_getTouchingViewTextNode(e,t){const n=new dl({startPosition:t?ul._createAfter(e):ul._createBefore(e),direction:t?"forward":"backward"});for(const e of n){if(e.item.is("containerElement")){return null}else if(e.item.is("br")){return null}else if(e.item.is("textProxy")){return e.item}}return null}_getTouchingInlineDomNode(e,t){if(!e.parentNode){return null}const n=t?"nextNode":"previousNode";const i=e.ownerDocument;const o=Rd(e)[0];const r=i.createTreeWalker(o,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,{acceptNode(e){if(od(e)){return NodeFilter.FILTER_ACCEPT}if(e.tagName=="BR"){return NodeFilter.FILTER_ACCEPT}return NodeFilter.FILTER_SKIP}});r.currentNode=e;const s=r[n]();if(s!==null){const t=Vd(e,s);if(t&&!zd(e,this.blockElements,t)&&!zd(s,this.blockElements,t)){return s}}return null}}function zd(e,t,n){let i=Rd(e);if(n){i=i.slice(i.indexOf(n)+1)}return i.some(e=>e.tagName&&t.includes(e.tagName.toLowerCase()))}function Bd(e,t){while(e&&e!=Nd.document){t(e);e=e.parentNode}}function jd(e,t){const n=od(e)&&e.data==" ";return n&&Fd(e,t)&&e.parentNode.childNodes.length===1}function Fd(e,t){const n=e.parentNode;return n&&n.tagName&&t.includes(n.tagName.toLowerCase())}function Hd(e){const t=Object.prototype.toString.apply(e);if(t=="[object Window]"){return true}if(t=="[object global]"){return true}return false}const Wd=qc({},ds,{listenTo(e,...t){if(xd(e)||Hd(e)){const n=this._getProxyEmitter(e)||new qd(e);n.attach(...t);e=n}ds.listenTo.call(this,e,...t)},stopListening(e,t,n){if(xd(e)||Hd(e)){const t=this._getProxyEmitter(e);if(!t){return}e=t}ds.stopListening.call(this,e,t,n);if(e instanceof qd){e.detach(t)}},_getProxyEmitter(e){return us(this,$d(e))}});var Ud=Wd;class qd{constructor(e){hs(this,$d(e));this._domNode=e}}qc(qd.prototype,ds,{attach(e,t,n={}){if(this._domListeners&&this._domListeners[e]){return}const i=this._createDomListener(e,!!n.useCapture);this._domNode.addEventListener(e,i,!!n.useCapture);if(!this._domListeners){this._domListeners={}}this._domListeners[e]=i},detach(e){let t;if(this._domListeners[e]&&(!(t=this._events[e])||!t.callbacks.length)){this._domListeners[e].removeListener()}},_createDomListener(e,t){const n=t=>{this.fire(e,t)};n.removeListener=()=>{this._domNode.removeEventListener(e,n,t);delete this._domListeners[e]};return n}});function $d(e){return e["data-ck-expando"]||(e["data-ck-expando"]=ns())}class Gd{constructor(e){this.view=e;this.document=e.document;this.isEnabled=false}enable(){this.isEnabled=true}disable(){this.isEnabled=false}destroy(){this.disable();this.stopListening()}}ys(Gd,Ud);var Yd="__lodash_hash_undefined__";function Kd(e){this.__data__.set(e,Yd);return this}var Qd=Kd;function Jd(e){return this.__data__.has(e)}var Zd=Jd;function Xd(e){var t=-1,n=e==null?0:e.length;this.__data__=new _t;while(++ta)){return false}var l=r.get(e);if(l&&r.get(t)){return l==t}var d=-1,u=true,h=n&su?new eu:undefined;r.set(e,t);r.set(t,e);while(++d{this.listenTo(e,t,(e,t)=>{if(this.isEnabled){this.onDomEvent(t)}},{useCapture:this.useCapture})})}fire(e,t,n){if(this.isEnabled){this.document.fire(e,new Yu(this.view,t,n))}}}class Qu extends Ku{constructor(e){super(e);this.domEventType=["keydown","keyup"]}onDomEvent(e){this.fire(e.type,e,{keyCode:e.keyCode,altKey:e.altKey,ctrlKey:e.ctrlKey||e.metaKey,shiftKey:e.shiftKey,get keystroke(){return Vl(this)}})}}var Ju=function(){return i["a"].Date.now()};var Zu=Ju;var Xu=0/0;var eh=/^\s+|\s+$/g;var th=/^[-+]0x[0-9a-f]+$/i;var nh=/^0b[01]+$/i;var ih=/^0o[0-7]+$/i;var oh=parseInt;function rh(e){if(typeof e=="number"){return e}if(Zs(e)){return Xu}if(ce(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=ce(t)?t+"":t}if(typeof e!="string"){return e===0?e:+e}e=e.replace(eh,"");var n=nh.test(e);return n||ih.test(e)?oh(e.slice(2),n?2:8):th.test(e)?Xu:+e}var sh=rh;var ah="Expected a function";var ch=Math.max,lh=Math.min;function dh(e,t,n){var i,o,r,s,a,c,l=0,d=false,u=false,h=true;if(typeof e!="function"){throw new TypeError(ah)}t=sh(t)||0;if(ce(n)){d=!!n.leading;u="maxWait"in n;r=u?ch(sh(n.maxWait)||0,t):r;h="trailing"in n?!!n.trailing:h}function f(t){var n=i,r=o;i=o=undefined;l=t;s=e.apply(r,n);return s}function g(e){l=e;a=setTimeout(b,t);return d?f(e):s}function m(e){var n=e-c,i=e-l,o=t-n;return u?lh(o,r-i):o}function p(e){var n=e-c,i=e-l;return c===undefined||n>=t||n<0||u&&i>=r}function b(){var e=Zu();if(p(e)){return w(e)}a=setTimeout(b,m(e))}function w(e){a=undefined;if(h&&i){return f(e)}i=o=undefined;return s}function k(){if(a!==undefined){clearTimeout(a)}l=0;i=c=o=a=undefined}function _(){return a===undefined?s:w(Zu())}function v(){var e=Zu(),n=p(e);i=arguments;o=this;c=e;if(n){if(a===undefined){return g(c)}if(u){clearTimeout(a);a=setTimeout(b,t);return f(c)}}if(a===undefined){a=setTimeout(b,t)}return s}v.cancel=k;v.flush=_;return v}var uh=dh;class hh extends Gd{constructor(e){super(e);this._fireSelectionChangeDoneDebounced=uh(e=>this.document.fire("selectionChangeDone",e),200)}observe(){const e=this.document;e.on("keydown",(t,n)=>{const i=e.selection;if(i.isFake&&fh(n.keyCode)&&this.isEnabled){n.preventDefault();this._handleSelectionMove(n.keyCode)}},{priority:"lowest"})}destroy(){super.destroy();this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionMove(e){const t=this.document.selection;const n=new ml(t.getRanges(),{backward:t.isBackward,fake:false});if(e==Rl.arrowleft||e==Rl.arrowup){n.setTo(n.getFirstPosition())}if(e==Rl.arrowright||e==Rl.arrowdown){n.setTo(n.getLastPosition())}const i={oldSelection:t,newSelection:n,domSelection:null};this.document.fire("selectionChange",i);this._fireSelectionChangeDoneDebounced(i)}}function fh(e){return e==Rl.arrowright||e==Rl.arrowleft||e==Rl.arrowup||e==Rl.arrowdown}class gh extends Gd{constructor(e){super(e);this.mutationObserver=e.getObserver(Gu);this.selection=this.document.selection;this.domConverter=e.domConverter;this._documents=new WeakSet;this._fireSelectionChangeDoneDebounced=uh(e=>this.document.fire("selectionChangeDone",e),200);this._clearInfiniteLoopInterval=setInterval(()=>this._clearInfiniteLoop(),1e3);this._loopbackCounter=0}observe(e){const t=e.ownerDocument;if(this._documents.has(t)){return}this.listenTo(t,"selectionchange",()=>{this._handleSelectionChange(t)});this._documents.add(t)}destroy(){super.destroy();clearInterval(this._clearInfiniteLoopInterval);this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionChange(e){if(!this.isEnabled){return}this.mutationObserver.flush();const t=e.defaultView.getSelection();const n=this.domConverter.domSelectionToView(t);if(n.rangeCount==0){this.view.hasDomSelection=false;return}this.view.hasDomSelection=true;if(this.selection.isEqual(n)&&this.domConverter.isDomSelectionCorrect(t)){return}if(++this._loopbackCounter>60){return}if(this.selection.isSimilar(n)){this.view.forceRender()}else{const e={oldSelection:this.selection,newSelection:n,domSelection:t};this.document.fire("selectionChange",e);this._fireSelectionChangeDoneDebounced(e)}}_clearInfiniteLoop(){this._loopbackCounter=0}}class mh extends Ku{constructor(e){super(e);this.domEventType=["focus","blur"];this.useCapture=true;const t=this.document;t.on("focus",()=>{t.isFocused=true;this._renderTimeoutId=setTimeout(()=>e.forceRender(),50)});t.on("blur",(n,i)=>{const o=t.selection.editableElement;if(o===null||o===i.target){t.isFocused=false;e.forceRender()}})}onDomEvent(e){this.fire(e.type,e)}destroy(){if(this._renderTimeoutId){clearTimeout(this._renderTimeoutId)}super.destroy()}}class ph extends Ku{constructor(e){super(e);this.domEventType=["compositionstart","compositionupdate","compositionend"];const t=this.document;t.on("compositionstart",()=>{t.isComposing=true});t.on("compositionend",()=>{t.isComposing=false})}onDomEvent(e){this.fire(e.type,e)}}class bh extends Ku{constructor(e){super(e);this.domEventType=["beforeinput"]}onDomEvent(e){this.fire(e.type,e)}}function wh(e){return Object.prototype.toString.apply(e)=="[object Range]"}function kh(e){const t=e.ownerDocument.defaultView.getComputedStyle(e);return{top:parseInt(t.borderTopWidth,10),right:parseInt(t.borderRightWidth,10),bottom:parseInt(t.borderBottomWidth,10),left:parseInt(t.borderLeftWidth,10)}}const _h=["top","right","bottom","left","width","height"];class vh{constructor(e){const t=wh(e);Object.defineProperty(this,"_source",{value:e._source||e,writable:true,enumerable:false});if(Yr(e)||t){if(t){yh(this,vh.getDomRangeRects(e)[0])}else{yh(this,e.getBoundingClientRect())}}else if(Hd(e)){const{innerWidth:t,innerHeight:n}=e;yh(this,{top:0,right:t,bottom:n,left:0,width:t,height:n})}else{yh(this,e)}}clone(){return new vh(this)}moveTo(e,t){this.top=t;this.right=e+this.width;this.bottom=t+this.height;this.left=e;return this}moveBy(e,t){this.top+=t;this.right+=e;this.left+=e;this.bottom+=t;return this}getIntersection(e){const t={top:Math.max(this.top,e.top),right:Math.min(this.right,e.right),bottom:Math.min(this.bottom,e.bottom),left:Math.max(this.left,e.left)};t.width=t.right-t.left;t.height=t.bottom-t.top;if(t.width<0||t.height<0){return null}else{return new vh(t)}}getIntersectionArea(e){const t=this.getIntersection(e);if(t){return t.getArea()}else{return 0}}getArea(){return this.width*this.height}getVisible(){const e=this._source;let t=this.clone();if(!xh(e)){let n=e.parentNode||e.commonAncestorContainer;while(n&&!xh(n)){const e=new vh(n);const i=t.getIntersection(e);if(i){if(i.getArea()Vh(e,i));const s=Vh(e,i);Sh(i,s,t);if(i.parent!=i){o=i.frameElement;i=i.parent;if(!o){return}}else{i=null}}}function Th(e){const t=Rh(e);Ph(t,()=>new vh(e))}Object.assign(Ch,{scrollViewportToShowTarget:Ah,scrollAncestorsToShowTarget:Th});function Sh(e,t,n){const i=t.clone().moveBy(0,n);const o=t.clone().moveBy(0,-n);const r=new vh(e).excludeScrollbarsAndBorders();const s=[o,i];if(!s.every(e=>r.contains(e))){let{scrollX:s,scrollY:a}=e;if(Mh(o,r)){a-=r.top-t.top+n}else if(Eh(i,r)){a+=t.bottom-r.bottom+n}if(Ih(t,r)){s-=r.left-t.left+n}else if(Nh(t,r)){s+=t.right-r.right+n}e.scrollTo(s,a)}}function Ph(e,t){const n=Oh(e);let i,o;while(e!=n.document.body){o=t();i=new vh(e).excludeScrollbarsAndBorders();if(!i.contains(o)){if(Mh(o,i)){e.scrollTop-=i.top-o.top}else if(Eh(o,i)){e.scrollTop+=o.bottom-i.bottom}if(Ih(o,i)){e.scrollLeft-=i.left-o.left}else if(Nh(o,i)){e.scrollLeft+=o.right-i.right}}e=e.parentNode}}function Eh(e,t){return e.bottom>t.bottom}function Mh(e,t){return e.topt.right}function Oh(e){if(wh(e)){return e.startContainer.ownerDocument.defaultView}else{return e.ownerDocument.defaultView}}function Rh(e){if(wh(e)){let t=e.commonAncestorContainer;if(od(t)){t=t.parentNode}return t}else{return e.parentNode}}function Vh(e,t){const n=Oh(e);const i=new vh(e);if(n===t){return i}else{let e=n;while(e!=t){const t=e.frameElement;const n=new vh(t).excludeScrollbarsAndBorders();i.moveBy(n.left,n.top);e=e.parent}}return i}class Dh{constructor(e){this.document=new bl(e);this.domConverter=new Ld(this.document);this.domRoots=new Map;this.set("isRenderingInProgress",false);this.set("hasDomSelection",false);this._renderer=new Cd(this.domConverter,this.document.selection);this._renderer.bind("isFocused").to(this.document);this._initialDomRootAttributes=new WeakMap;this._observers=new Map;this._ongoingChange=false;this._postFixersInProgress=false;this._renderingDisabled=false;this._hasChangedSinceTheLastRendering=false;this._writer=new $l(this.document);this.addObserver(Gu);this.addObserver(gh);this.addObserver(mh);this.addObserver(Qu);this.addObserver(hh);this.addObserver(ph);if(Tl.isAndroid){this.addObserver(bh)}hd(this);Fl(this);this.on("render",()=>{this._render();this.document.fire("layoutChanged");this._hasChangedSinceTheLastRendering=false});this.listenTo(this.document.selection,"change",()=>{this._hasChangedSinceTheLastRendering=true})}attachDomRoot(e,t="main"){const n=this.document.getRoot(t);n._name=e.tagName.toLowerCase();const i={};for(const{name:t,value:o}of Array.from(e.attributes)){i[t]=o;if(t==="class"){this._writer.addClass(o.split(" "),n)}else{this._writer.setAttribute(t,o,n)}}this._initialDomRootAttributes.set(e,i);const o=()=>{this._writer.setAttribute("contenteditable",!n.isReadOnly,n);if(n.isReadOnly){this._writer.addClass("ck-read-only",n)}else{this._writer.removeClass("ck-read-only",n)}};o();this.domRoots.set(t,e);this.domConverter.bindElements(e,n);this._renderer.markToSync("children",n);this._renderer.markToSync("attributes",n);this._renderer.domDocuments.add(e.ownerDocument);n.on("change:children",(e,t)=>this._renderer.markToSync("children",t));n.on("change:attributes",(e,t)=>this._renderer.markToSync("attributes",t));n.on("change:text",(e,t)=>this._renderer.markToSync("text",t));n.on("change:isReadOnly",()=>this.change(o));n.on("change",()=>{this._hasChangedSinceTheLastRendering=true});for(const n of this._observers.values()){n.observe(e,t)}}detachDomRoot(e){const t=this.domRoots.get(e);Array.from(t.attributes).forEach(({name:e})=>t.removeAttribute(e));const n=this._initialDomRootAttributes.get(t);for(const e in n){t.setAttribute(e,n[e])}this.domRoots.delete(e);this.domConverter.unbindDomElement(t)}getDomRoot(e="main"){return this.domRoots.get(e)}addObserver(e){let t=this._observers.get(e);if(t){return t}t=new e(this);this._observers.set(e,t);for(const[e,n]of this.domRoots){t.observe(n,e)}t.enable();return t}getObserver(e){return this._observers.get(e)}disableObservers(){for(const e of this._observers.values()){e.disable()}}enableObservers(){for(const e of this._observers.values()){e.enable()}}scrollToTheSelection(){const e=this.document.selection.getFirstRange();if(e){Ah({target:this.domConverter.viewRangeToDom(e),viewportOffset:20})}}focus(){if(!this.document.isFocused){const e=this.document.selection.editableElement;if(e){this.domConverter.focus(e);this.forceRender()}else{}}}change(e){if(this.isRenderingInProgress||this._postFixersInProgress){throw new ss["b"]("cannot-change-view-tree: "+"Attempting to make changes to the view when it is in an incorrect state: rendering or post-fixers are in progress. "+"This may cause some unexpected behavior and inconsistency between the DOM and the view.",this)}try{if(this._ongoingChange){return e(this._writer)}this._ongoingChange=true;const t=e(this._writer);this._ongoingChange=false;if(!this._renderingDisabled&&this._hasChangedSinceTheLastRendering){this._postFixersInProgress=true;this.document._callPostFixers(this._writer);this._postFixersInProgress=false;this.fire("render")}return t}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}forceRender(){this._hasChangedSinceTheLastRendering=true;this.change(()=>{})}destroy(){for(const e of this._observers.values()){e.destroy()}this.document.destroy();this.stopListening()}createPositionAt(e,t){return ul._createAt(e,t)}createPositionAfter(e){return ul._createAfter(e)}createPositionBefore(e){return ul._createBefore(e)}createRange(e,t){return new hl(e,t)}createRangeOn(e){return hl._createOn(e)}createRangeIn(e){return hl._createIn(e)}createSelection(e,t,n){return new ml(e,t,n)}_disableRendering(e){this._renderingDisabled=e;if(e==false){this.change(()=>{})}}_render(){this.isRenderingInProgress=true;this.disableObservers();this._renderer.render();this.enableObservers();this.isRenderingInProgress=false}}ys(Dh,Qc);class Lh{constructor(e){this.parent=null;this._attrs=Ws(e)}get index(){let e;if(!this.parent){return null}if((e=this.parent.getChildIndex(this))===null){throw new ss["b"]("model-node-not-found-in-parent: The node's parent does not contain this node.",this)}return e}get startOffset(){let e;if(!this.parent){return null}if((e=this.parent.getChildStartOffset(this))===null){throw new ss["b"]("model-node-not-found-in-parent: The node's parent does not contain this node.",this)}return e}get offsetSize(){return 1}get endOffset(){if(!this.parent){return null}return this.startOffset+this.offsetSize}get nextSibling(){const e=this.index;return e!==null&&this.parent.getChild(e+1)||null}get previousSibling(){const e=this.index;return e!==null&&this.parent.getChild(e-1)||null}get root(){let e=this;while(e.parent){e=e.parent}return e}isAttached(){return this.root.is("rootElement")}getPath(){const e=[];let t=this;while(t.parent){e.unshift(t.startOffset);t=t.parent}return e}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let n=e.includeSelf?this:this.parent;while(n){t[e.parentFirst?"push":"unshift"](n);n=n.parent}return t}getCommonAncestor(e,t={}){const n=this.getAncestors(t);const i=e.getAncestors(t);let o=0;while(n[o]==i[o]&&n[o]){o++}return o===0?null:n[o-1]}isBefore(e){if(this==e){return false}if(this.root!==e.root){return false}const t=this.getPath();const n=e.getPath();const i=Vs(t,n);switch(i){case"prefix":return true;case"extension":return false;default:return t[i]{e[t[0]]=t[1];return e},{})}return e}is(e){return e==="node"||e==="model:node"}_clone(){return new Lh(this._attrs)}_remove(){this.parent._removeChildren(this.index)}_setAttribute(e,t){this._attrs.set(e,t)}_setAttributesTo(e){this._attrs=Ws(e)}_removeAttribute(e){return this._attrs.delete(e)}_clearAttributes(){this._attrs.clear()}}class zh extends Lh{constructor(e,t){super(t);this._data=e||""}get offsetSize(){return this.data.length}get data(){return this._data}is(e){return e==="text"||e==="model:text"||e==="node"||e==="model:node"}toJSON(){const e=super.toJSON();e.data=this.data;return e}_clone(){return new zh(this.data,this.getAttributes())}static fromJSON(e){return new zh(e.data,e.attributes)}}class Bh{constructor(e,t,n){this.textNode=e;if(t<0||t>e.offsetSize){throw new ss["b"]("model-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.",this)}if(n<0||t+n>e.offsetSize){throw new ss["b"]("model-textproxy-wrong-length: Given length value is incorrect.",this)}this.data=e.data.substring(t,t+n);this.offsetInText=t}get startOffset(){return this.textNode.startOffset!==null?this.textNode.startOffset+this.offsetInText:null}get offsetSize(){return this.data.length}get endOffset(){return this.startOffset!==null?this.startOffset+this.offsetSize:null}get isPartial(){return this.offsetSize!==this.textNode.offsetSize}get parent(){return this.textNode.parent}get root(){return this.textNode.root}is(e){return e==="textProxy"||e==="model:textProxy"}getPath(){const e=this.textNode.getPath();if(e.length>0){e[e.length-1]+=this.offsetInText}return e}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let n=e.includeSelf?this:this.parent;while(n){t[e.parentFirst?"push":"unshift"](n);n=n.parent}return t}hasAttribute(e){return this.textNode.hasAttribute(e)}getAttribute(e){return this.textNode.getAttribute(e)}getAttributes(){return this.textNode.getAttributes()}getAttributeKeys(){return this.textNode.getAttributeKeys()}}class jh{constructor(e){this._nodes=[];if(e){this._insertNodes(0,e)}}[Symbol.iterator](){return this._nodes[Symbol.iterator]()}get length(){return this._nodes.length}get maxOffset(){return this._nodes.reduce((e,t)=>e+t.offsetSize,0)}getNode(e){return this._nodes[e]||null}getNodeIndex(e){const t=this._nodes.indexOf(e);return t==-1?null:t}getNodeStartOffset(e){const t=this.getNodeIndex(e);return t===null?null:this._nodes.slice(0,t).reduce((e,t)=>e+t.offsetSize,0)}indexToOffset(e){if(e==this._nodes.length){return this.maxOffset}const t=this._nodes[e];if(!t){throw new ss["b"]("model-nodelist-index-out-of-bounds: Given index cannot be found in the node list.",this)}return this.getNodeStartOffset(t)}offsetToIndex(e){let t=0;for(const n of this._nodes){if(e>=t&&ee.toJSON())}}class Fh extends Lh{constructor(e,t,n){super(t);this.name=e;this._children=new jh;if(n){this._insertChild(0,n)}}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}is(e,t=null){if(!t){return e==="element"||e==="model:element"||e===this.name||e==="model:"+this.name||e==="node"||e==="model:node"}return t===this.name&&(e==="element"||e==="model:element")}getChild(e){return this._children.getNode(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}offsetToIndex(e){return this._children.offsetToIndex(e)}getNodeByPath(e){let t=this;for(const n of e){t=t.getChild(t.offsetToIndex(n))}return t}toJSON(){const e=super.toJSON();e.name=this.name;if(this._children.length>0){e.children=[];for(const t of this._children){e.children.push(t.toJSON())}}return e}_clone(e=false){const t=e?Array.from(this._children).map(e=>e._clone(true)):null;return new Fh(this.name,this.getAttributes(),t)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){const n=Hh(t);for(const e of n){if(e.parent!==null){e._remove()}e.parent=this}this._children._insertNodes(e,n)}_removeChildren(e,t=1){const n=this._children._removeNodes(e,t);for(const e of n){e.parent=null}return n}static fromJSON(e){let t=null;if(e.children){t=[];for(const n of e.children){if(n.name){t.push(Fh.fromJSON(n))}else{t.push(zh.fromJSON(n))}}}return new Fh(e.name,e.attributes,t)}}function Hh(e){if(typeof e=="string"){return[new zh(e)]}if(!vs(e)){e=[e]}return Array.from(e).map(e=>{if(typeof e=="string"){return new zh(e)}if(e instanceof Bh){return new zh(e.data,e.getAttributes())}return e})}class Wh{constructor(e={}){if(!e.boundaries&&!e.startPosition){throw new ss["b"]("model-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.",null)}const t=e.direction||"forward";if(t!="forward"&&t!="backward"){throw new ss["b"]("model-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.",e,{direction:t})}this.direction=t;this.boundaries=e.boundaries||null;if(e.startPosition){this.position=e.startPosition.clone()}else{this.position=qh._createAt(this.boundaries[this.direction=="backward"?"end":"start"])}this.position.stickiness="toNone";this.singleCharacters=!!e.singleCharacters;this.shallow=!!e.shallow;this.ignoreElementEnd=!!e.ignoreElementEnd;this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null;this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null;this._visitedParent=this.position.parent}[Symbol.iterator](){return this}skip(e){let t,n,i,o;do{i=this.position;o=this._visitedParent;({done:t,value:n}=this.next())}while(!t&&e(n));if(!t){this.position=i;this._visitedParent=o}}next(){if(this.direction=="forward"){return this._next()}else{return this._previous()}}_next(){const e=this.position;const t=this.position.clone();const n=this._visitedParent;if(n.parent===null&&t.offset===n.maxOffset){return{done:true}}if(n===this._boundaryEndParent&&t.offset==this.boundaries.end.offset){return{done:true}}const i=t.parent;const o=$h(t,i);const r=o?o:Gh(t,i,o);if(r instanceof Fh){if(!this.shallow){t.path.push(0);this._visitedParent=r}else{t.offset++}this.position=t;return Uh("elementStart",r,e,t,1)}else if(r instanceof zh){let i;if(this.singleCharacters){i=1}else{let e=r.endOffset;if(this._boundaryEndParent==n&&this.boundaries.end.offsete){e=this.boundaries.start.offset}i=t.offset-e}const o=t.offset-r.startOffset;const s=new Bh(r,o-i,i);t.offset-=i;this.position=t;return Uh("text",s,e,t,i)}else{t.path.pop();this.position=t;this._visitedParent=n.parent;return Uh("elementStart",n,e,t,1)}}}function Uh(e,t,n,i,o){return{done:false,value:{type:e,item:t,previousPosition:n,nextPosition:i,length:o}}}class qh{constructor(e,t,n="toNone"){if(!e.is("element")&&!e.is("documentFragment")){throw new ss["b"]("model-position-root-invalid: Position root invalid.",e)}if(!(t instanceof Array)||t.length===0){throw new ss["b"]("model-position-path-incorrect-format: Position path must be an array with at least one item.",e,{path:t})}if(e.is("rootElement")){t=t.slice()}else{t=[...e.getPath(),...t];e=e.root}this.root=e;this.path=t;this.stickiness=n}get offset(){return this.path[this.path.length-1]}set offset(e){this.path[this.path.length-1]=e}get parent(){let e=this.root;for(let t=0;tn.path.length){if(t.offset!==o.maxOffset){return false}t.path=t.path.slice(0,-1);o=o.parent;t.offset++}else{if(n.offset!==0){return false}n.path=n.path.slice(0,-1)}}}is(e){return e==="position"||e==="model:position"}hasSameParentAs(e){if(this.root!==e.root){return false}const t=this.getParentPath();const n=e.getParentPath();return Vs(t,n)=="same"}getTransformedByOperation(e){let t;switch(e.type){case"insert":t=this._getTransformedByInsertOperation(e);break;case"move":case"remove":case"reinsert":t=this._getTransformedByMoveOperation(e);break;case"split":t=this._getTransformedBySplitOperation(e);break;case"merge":t=this._getTransformedByMergeOperation(e);break;default:t=qh._createAt(this);break}return t}_getTransformedByInsertOperation(e){return this._getTransformedByInsertion(e.position,e.howMany)}_getTransformedByMoveOperation(e){return this._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany)}_getTransformedBySplitOperation(e){const t=e.movedRange;const n=t.containsPosition(this)||t.start.isEqual(this)&&this.stickiness=="toNext";if(n){return this._getCombined(e.splitPosition,e.moveTargetPosition)}else{if(e.graveyardPosition){return this._getTransformedByMove(e.graveyardPosition,e.insertionPosition,1)}else{return this._getTransformedByInsertion(e.insertionPosition,1)}}}_getTransformedByMergeOperation(e){const t=e.movedRange;const n=t.containsPosition(this)||t.start.isEqual(this);let i;if(n){i=this._getCombined(e.sourcePosition,e.targetPosition);if(e.sourcePosition.isBefore(e.targetPosition)){i=i._getTransformedByDeletion(e.deletionPosition,1)}}else if(this.isEqual(e.deletionPosition)){i=qh._createAt(e.deletionPosition)}else{i=this._getTransformedByMove(e.deletionPosition,e.graveyardPosition,1)}return i}_getTransformedByDeletion(e,t){const n=qh._createAt(this);if(this.root!=e.root){return n}if(Vs(e.getParentPath(),this.getParentPath())=="same"){if(e.offsetthis.offset){return null}else{n.offset-=t}}}else if(Vs(e.getParentPath(),this.getParentPath())=="prefix"){const i=e.path.length-1;if(e.offset<=this.path[i]){if(e.offset+t>this.path[i]){return null}else{n.path[i]-=t}}}return n}_getTransformedByInsertion(e,t){const n=qh._createAt(this);if(this.root!=e.root){return n}if(Vs(e.getParentPath(),this.getParentPath())=="same"){if(e.offsett+1){const t=i.maxOffset-n.offset;if(t!==0){e.push(new Kh(n,n.getShiftedBy(t)))}n.path=n.path.slice(0,-1);n.offset++;i=i.parent}while(n.path.length<=this.end.path.length){const t=this.end.path[n.path.length-1];const i=t-n.offset;if(i!==0){e.push(new Kh(n,n.getShiftedBy(i)))}n.offset=t;n.path.push(0)}return e}getWalker(e={}){e.boundaries=this;return new Wh(e)}*getItems(e={}){e.boundaries=this;e.ignoreElementEnd=true;const t=new Wh(e);for(const e of t){yield e.item}}*getPositions(e={}){e.boundaries=this;const t=new Wh(e);yield t.position;for(const e of t){yield e.nextPosition}}getTransformedByOperation(e){switch(e.type){case"insert":return this._getTransformedByInsertOperation(e);case"move":case"remove":case"reinsert":return this._getTransformedByMoveOperation(e);case"split":return[this._getTransformedBySplitOperation(e)];case"merge":return[this._getTransformedByMergeOperation(e)]}return[new Kh(this.start,this.end)]}getTransformedByOperations(e){const t=[new Kh(this.start,this.end)];for(const n of e){for(let e=0;e0?new this(n,i):new this(i,n)}static _createIn(e){return new this(qh._createAt(e,0),qh._createAt(e,e.maxOffset))}static _createOn(e){return this._createFromPositionAndShift(qh._createBefore(e),e.offsetSize)}static _createFromRanges(e){if(e.length===0){throw new ss["b"]("range-create-from-ranges-empty-array: At least one range has to be passed.",null)}else if(e.length==1){return e[0].clone()}const t=e[0];e.sort((e,t)=>e.start.isAfter(t.start)?1:-1);const n=e.indexOf(t);const i=new this(t.start,t.end);if(n>0){for(let t=n-1;true;t++){if(e[t].end.isEqual(i.start)){i.start=qh._createAt(e[t].start)}else{break}}}for(let t=n+1;t{if(t.viewPosition){return}const n=this._modelToViewMapping.get(t.modelPosition.parent);t.viewPosition=this._findPositionIn(n,t.modelPosition.offset)},{priority:"low"});this.on("viewToModelPosition",(e,t)=>{if(t.modelPosition){return}const n=this.findMappedViewAncestor(t.viewPosition);const i=this._viewToModelMapping.get(n);const o=this._toModelOffset(t.viewPosition.parent,t.viewPosition.offset,n);t.modelPosition=qh._createAt(i,o)},{priority:"low"})}bindElements(e,t){this._modelToViewMapping.set(e,t);this._viewToModelMapping.set(t,e)}unbindViewElement(e){const t=this.toModelElement(e);this._viewToModelMapping.delete(e);if(this._elementToMarkerNames.has(e)){for(const t of this._elementToMarkerNames.get(e)){this._unboundMarkerNames.add(t)}}if(this._modelToViewMapping.get(t)==e){this._modelToViewMapping.delete(t)}}unbindModelElement(e){const t=this.toViewElement(e);this._modelToViewMapping.delete(e);if(this._viewToModelMapping.get(t)==e){this._viewToModelMapping.delete(t)}}bindElementToMarker(e,t){const n=this._markerNameToElements.get(t)||new Set;n.add(e);const i=this._elementToMarkerNames.get(e)||new Set;i.add(t);this._markerNameToElements.set(t,n);this._elementToMarkerNames.set(e,i)}unbindElementFromMarkerName(e,t){const n=this._markerNameToElements.get(t);if(n){n.delete(e);if(n.size==0){this._markerNameToElements.delete(t)}}const i=this._elementToMarkerNames.get(e);if(i){i.delete(t);if(i.size==0){this._elementToMarkerNames.delete(e)}}}flushUnboundMarkerNames(){const e=Array.from(this._unboundMarkerNames);this._unboundMarkerNames.clear();return e}clearBindings(){this._modelToViewMapping=new WeakMap;this._viewToModelMapping=new WeakMap;this._markerNameToElements=new Map;this._elementToMarkerNames=new Map;this._unboundMarkerNames=new Set}toModelElement(e){return this._viewToModelMapping.get(e)}toViewElement(e){return this._modelToViewMapping.get(e)}toModelRange(e){return new Kh(this.toModelPosition(e.start),this.toModelPosition(e.end))}toViewRange(e){return new hl(this.toViewPosition(e.start),this.toViewPosition(e.end))}toModelPosition(e){const t={viewPosition:e,mapper:this};this.fire("viewToModelPosition",t);return t.modelPosition}toViewPosition(e,t={isPhantom:false}){const n={modelPosition:e,mapper:this,isPhantom:t.isPhantom};this.fire("modelToViewPosition",n);return n.viewPosition}markerNameToElements(e){const t=this._markerNameToElements.get(e);if(!t){return null}const n=new Set;for(const e of t){if(e.is("attributeElement")){for(const t of e.getElementsWithSameId()){n.add(t)}}else{n.add(e)}}return n}registerViewToModelLength(e,t){this._viewToModelLengthCallbacks.set(e,t)}findMappedViewAncestor(e){let t=e.parent;while(!this._viewToModelMapping.has(t)){t=t.parent}return t}_toModelOffset(e,t,n){if(n!=e){const i=this._toModelOffset(e.parent,e.index,n);const o=this._toModelOffset(e,t,e);return i+o}if(e.is("text")){return t}let i=0;for(let n=0;n1?t[0]+":"+t[1]:t[0]}class Xh{constructor(e){this.conversionApi=qc({dispatcher:this},e)}convertChanges(e,t,n){for(const t of e.getMarkersToRemove()){this.convertMarkerRemove(t.name,t.range,n)}for(const t of e.getChanges()){if(t.type=="insert"){this.convertInsert(Kh._createFromPositionAndShift(t.position,t.length),n)}else if(t.type=="remove"){this.convertRemove(t.position,t.length,t.name,n)}else{this.convertAttribute(t.range,t.attributeKey,t.attributeOldValue,t.attributeNewValue,n)}}for(const e of this.conversionApi.mapper.flushUnboundMarkerNames()){const i=t.get(e).getRange();this.convertMarkerRemove(e,i,n);this.convertMarkerAdd(e,i,n)}for(const t of e.getMarkersToAdd()){this.convertMarkerAdd(t.name,t.range,n)}}convertInsert(e,t){this.conversionApi.writer=t;this.conversionApi.consumable=this._createInsertConsumable(e);for(const t of e){const e=t.item;const n=Kh._createFromPositionAndShift(t.previousPosition,t.length);const i={item:e,range:n};this._testAndFire("insert",i);for(const t of e.getAttributeKeys()){i.attributeKey=t;i.attributeOldValue=null;i.attributeNewValue=e.getAttribute(t);this._testAndFire(`attribute:${t}`,i)}}this._clearConversionApi()}convertRemove(e,t,n,i){this.conversionApi.writer=i;this.fire("remove:"+n,{position:e,length:t},this.conversionApi);this._clearConversionApi()}convertAttribute(e,t,n,i,o){this.conversionApi.writer=o;this.conversionApi.consumable=this._createConsumableForRange(e,`attribute:${t}`);for(const o of e){const e=o.item;const r=Kh._createFromPositionAndShift(o.previousPosition,o.length);const s={item:e,range:r,attributeKey:t,attributeOldValue:n,attributeNewValue:i};this._testAndFire(`attribute:${t}`,s)}this._clearConversionApi()}convertSelection(e,t,n){const i=Array.from(t.getMarkersAtPosition(e.getFirstPosition()));this.conversionApi.writer=n;this.conversionApi.consumable=this._createSelectionConsumable(e,i);this.fire("selection",{selection:e},this.conversionApi);if(!e.isCollapsed){return}for(const t of i){const n=t.getRange();if(!ef(e.getFirstPosition(),t,this.conversionApi.mapper)){continue}const i={item:e,markerName:t.name,markerRange:n};if(this.conversionApi.consumable.test(e,"addMarker:"+t.name)){this.fire("addMarker:"+t.name,i,this.conversionApi)}}for(const t of e.getAttributeKeys()){const n={item:e,range:e.getFirstRange(),attributeKey:t,attributeOldValue:null,attributeNewValue:e.getAttribute(t)};if(this.conversionApi.consumable.test(e,"attribute:"+n.attributeKey)){this.fire("attribute:"+n.attributeKey+":$text",n,this.conversionApi)}}this._clearConversionApi()}convertMarkerAdd(e,t,n){if(!t.root.document||t.root.rootName=="$graveyard"){return}this.conversionApi.writer=n;const i="addMarker:"+e;const o=new Jh;o.add(t,i);this.conversionApi.consumable=o;this.fire(i,{markerName:e,markerRange:t},this.conversionApi);if(!o.test(t,i)){return}this.conversionApi.consumable=this._createConsumableForRange(t,i);for(const n of t.getItems()){if(!this.conversionApi.consumable.test(n,i)){continue}const o={item:n,range:Kh._createOn(n),markerName:e,markerRange:t};this.fire(i,o,this.conversionApi)}this._clearConversionApi()}convertMarkerRemove(e,t,n){if(!t.root.document||t.root.rootName=="$graveyard"){return}this.conversionApi.writer=n;this.fire("removeMarker:"+e,{markerName:e,markerRange:t},this.conversionApi);this._clearConversionApi()}_createInsertConsumable(e){const t=new Jh;for(const n of e){const e=n.item;t.add(e,"insert");for(const n of e.getAttributeKeys()){t.add(e,"attribute:"+n)}}return t}_createConsumableForRange(e,t){const n=new Jh;for(const i of e.getItems()){n.add(i,t)}return n}_createSelectionConsumable(e,t){const n=new Jh;n.add(e,"selection");for(const i of t){n.add(e,"addMarker:"+i.name)}for(const t of e.getAttributeKeys()){n.add(e,"attribute:"+t)}return n}_testAndFire(e,t){if(!this.conversionApi.consumable.test(t.item,e)){return}const n=t.item.name||"$text";this.fire(e+":"+n,t,this.conversionApi)}_clearConversionApi(){delete this.conversionApi.writer;delete this.conversionApi.consumable}}ys(Xh,ds);function ef(e,t,n){const i=t.getRange();const o=Array.from(e.getAncestors());o.shift();o.reverse();const r=o.some(e=>{if(i.containsItem(e)){const t=n.toViewElement(e);return!!t.getCustomProperty("addHighlight")}});return!r}class tf{constructor(e,t,n){this._lastRangeBackward=false;this._ranges=[];this._attrs=new Map;if(e){this.setTo(e,t,n)}}get anchor(){if(this._ranges.length>0){const e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.end:e.start}return null}get focus(){if(this._ranges.length>0){const e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.start:e.end}return null}get isCollapsed(){const e=this._ranges.length;if(e===1){return this._ranges[0].isCollapsed}else{return false}}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}isEqual(e){if(this.rangeCount!=e.rangeCount){return false}else if(this.rangeCount===0){return true}if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus)){return false}for(const t of this._ranges){let n=false;for(const i of e._ranges){if(t.isEqual(i)){n=true;break}}if(!n){return false}}return true}*getRanges(){for(const e of this._ranges){yield new Kh(e.start,e.end)}}getFirstRange(){let e=null;for(const t of this._ranges){if(!e||t.start.isBefore(e.start)){e=t}}return e?new Kh(e.start,e.end):null}getLastRange(){let e=null;for(const t of this._ranges){if(!e||t.end.isAfter(e.end)){e=t}}return e?new Kh(e.start,e.end):null}getFirstPosition(){const e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){const e=this.getLastRange();return e?e.end.clone():null}setTo(e,t,n){if(e===null){this._setRanges([])}else if(e instanceof tf){this._setRanges(e.getRanges(),e.isBackward)}else if(e&&typeof e.getRanges=="function"){this._setRanges(e.getRanges(),e.isBackward)}else if(e instanceof Kh){this._setRanges([e],!!t&&!!t.backward)}else if(e instanceof qh){this._setRanges([new Kh(e)])}else if(e instanceof Lh){const i=!!n&&!!n.backward;let o;if(t=="in"){o=Kh._createIn(e)}else if(t=="on"){o=Kh._createOn(e)}else if(t!==undefined){o=new Kh(qh._createAt(e,t))}else{throw new ss["b"]("model-selection-setTo-required-second-parameter: "+"selection.setTo requires the second parameter when the first parameter is a node.",[this,e])}this._setRanges([o],i)}else if(vs(e)){this._setRanges(e,t&&!!t.backward)}else{throw new ss["b"]("model-selection-setTo-not-selectable: Cannot set the selection to the given place.",[this,e])}}_setRanges(e,t=false){e=Array.from(e);const n=e.some(t=>{if(!(t instanceof Kh)){throw new ss["b"]("model-selection-set-ranges-not-range: "+"Selection range set to an object that is not an instance of model.Range.",[this,e])}return this._ranges.every(e=>!e.isEqual(t))});if(e.length===this._ranges.length&&!n){return}this._removeAllRanges();for(const t of e){this._pushRange(t)}this._lastRangeBackward=!!t;this.fire("change:range",{directChange:true})}setFocus(e,t){if(this.anchor===null){throw new ss["b"]("model-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.",[this,e])}const n=qh._createAt(e,t);if(n.compareWith(this.focus)=="same"){return}const i=this.anchor;if(this._ranges.length){this._popRange()}if(n.compareWith(i)=="before"){this._pushRange(new Kh(n,i));this._lastRangeBackward=true}else{this._pushRange(new Kh(i,n));this._lastRangeBackward=false}this.fire("change:range",{directChange:true})}getAttribute(e){return this._attrs.get(e)}getAttributes(){return this._attrs.entries()}getAttributeKeys(){return this._attrs.keys()}hasAttribute(e){return this._attrs.has(e)}removeAttribute(e){if(this.hasAttribute(e)){this._attrs.delete(e);this.fire("change:attribute",{attributeKeys:[e],directChange:true})}}setAttribute(e,t){if(this.getAttribute(e)!==t){this._attrs.set(e,t);this.fire("change:attribute",{attributeKeys:[e],directChange:true})}}getSelectedElement(){if(this.rangeCount!==1){return null}return this.getFirstRange().getContainedElement()}is(e){return e==="selection"||e==="model:selection"}*getSelectedBlocks(){const e=new WeakSet;for(const t of this.getRanges()){const n=rf(t.start,e);if(n&&sf(n,t)){yield n}for(const n of t.getWalker()){const i=n.item;if(n.type=="elementEnd"&&of(i,e,t)){yield i}}const i=rf(t.end,e);if(i&&!t.end.isTouching(qh._createAt(i,0))&&sf(i,t)){yield i}}}containsEntireContent(e=this.anchor.root){const t=qh._createAt(e,0);const n=qh._createAt(e,"end");return t.isTouching(this.getFirstPosition())&&n.isTouching(this.getLastPosition())}_pushRange(e){this._checkRange(e);this._ranges.push(new Kh(e.start,e.end))}_checkRange(e){for(let t=0;t0){this._popRange()}}_popRange(){this._ranges.pop()}}ys(tf,ds);function nf(e,t){if(t.has(e)){return false}t.add(e);return e.root.document.model.schema.isBlock(e)&&e.parent}function of(e,t,n){return nf(e,t)&&sf(e,n)}function rf(e,t){const n=e.parent;const i=n.root.document.model.schema;const o=e.parent.getAncestors({parentFirst:true,includeSelf:true});let r=false;const s=o.find(e=>{if(r){return false}r=i.isLimit(e);return!r&&nf(e,t)});o.forEach(e=>t.add(e));return s}function sf(e,t){const n=af(e);if(!n){return true}const i=t.containsRange(Kh._createOn(n),true);return!i}function af(e){const t=e.root.document.model.schema;let n=e.parent;while(n){if(t.isBlock(n)){return n}n=n.parent}}class cf extends Kh{constructor(e,t){super(e,t);lf.call(this)}detach(){this.stopListening()}is(e){return e==="liveRange"||e==="model:liveRange"||e=="range"||e==="model:range"}toRange(){return new Kh(this.start,this.end)}static fromRange(e){return new cf(e.start,e.end)}}function lf(){this.listenTo(this.root.document.model,"applyOperation",(e,t)=>{const n=t[0];if(!n.isDocumentOperation){return}df.call(this,n)},{priority:"low"})}function df(e){const t=this.getTransformedByOperation(e);const n=Kh._createFromRanges(t);const i=!n.isEqual(this);const o=uf(this,e);let r=null;if(i){if(n.root.rootName=="$graveyard"){if(e.type=="remove"){r=e.sourcePosition}else{r=e.deletionPosition}}const t=this.toRange();this.start=n.start;this.end=n.end;this.fire("change:range",t,{deletionPosition:r})}else if(o){this.fire("change:content",this.toRange(),{deletionPosition:r})}}function uf(e,t){switch(t.type){case"insert":return e.containsPosition(t.position);case"move":case"remove":case"reinsert":case"merge":return e.containsPosition(t.sourcePosition)||e.start.isEqual(t.sourcePosition)||e.containsPosition(t.targetPosition);case"split":return e.containsPosition(t.splitPosition)||e.containsPosition(t.insertionPosition)}return false}ys(cf,ds);const hf="selection:";class ff{constructor(e){this._selection=new gf(e);this._selection.delegate("change:range").to(this);this._selection.delegate("change:attribute").to(this);this._selection.delegate("change:marker").to(this)}get isCollapsed(){return this._selection.isCollapsed}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get rangeCount(){return this._selection.rangeCount}get hasOwnRange(){return this._selection.hasOwnRange}get isBackward(){return this._selection.isBackward}get isGravityOverridden(){return this._selection.isGravityOverridden}get markers(){return this._selection.markers}get _ranges(){return this._selection._ranges}getRanges(){return this._selection.getRanges()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getSelectedBlocks(){return this._selection.getSelectedBlocks()}getSelectedElement(){return this._selection.getSelectedElement()}containsEntireContent(e){return this._selection.containsEntireContent(e)}destroy(){this._selection.destroy()}getAttributeKeys(){return this._selection.getAttributeKeys()}getAttributes(){return this._selection.getAttributes()}getAttribute(e){return this._selection.getAttribute(e)}hasAttribute(e){return this._selection.hasAttribute(e)}refresh(){this._selection._updateMarkers();this._selection._updateAttributes(false)}is(e){return e==="selection"||e=="model:selection"||e=="documentSelection"||e=="model:documentSelection"}_setFocus(e,t){this._selection.setFocus(e,t)}_setTo(e,t,n){this._selection.setTo(e,t,n)}_setAttribute(e,t){this._selection.setAttribute(e,t)}_removeAttribute(e){this._selection.removeAttribute(e)}_getStoredAttributes(){return this._selection._getStoredAttributes()}_overrideGravity(){return this._selection.overrideGravity()}_restoreGravity(e){this._selection.restoreGravity(e)}static _getStoreAttributeKey(e){return hf+e}static _isStoreAttributeKey(e){return e.startsWith(hf)}}ys(ff,ds);class gf extends tf{constructor(e){super();this.markers=new xs({idProperty:"name"});this._model=e.model;this._document=e;this._attributePriority=new Map;this._fixGraveyardRangesData=[];this._hasChangedRange=false;this._overriddenGravityRegister=new Set;this.listenTo(this._model,"applyOperation",(e,t)=>{const n=t[0];if(!n.isDocumentOperation||n.type=="marker"||n.type=="rename"||n.type=="noop"){return}while(this._fixGraveyardRangesData.length){const{liveRange:e,sourcePosition:t}=this._fixGraveyardRangesData.shift();this._fixGraveyardSelection(e,t)}if(this._hasChangedRange){this._hasChangedRange=false;this.fire("change:range",{directChange:false})}},{priority:"lowest"});this.on("change:range",()=>{for(const e of this.getRanges()){if(!this._document._validateSelectionRange(e)){throw new ss["b"]("document-selection-wrong-position: Range from document selection starts or ends at incorrect position.",this,{range:e})}}});this.listenTo(this._model.markers,"update",()=>this._updateMarkers());this.listenTo(this._document,"change",(e,t)=>{pf(this._model,t)})}get isCollapsed(){const e=this._ranges.length;return e===0?this._document._getDefaultRange().isCollapsed:super.isCollapsed}get anchor(){return super.anchor||this._document._getDefaultRange().start}get focus(){return super.focus||this._document._getDefaultRange().end}get rangeCount(){return this._ranges.length?this._ranges.length:1}get hasOwnRange(){return this._ranges.length>0}get isGravityOverridden(){return!!this._overriddenGravityRegister.size}destroy(){for(let e=0;e{this._hasChangedRange=true;if(t.root==this._document.graveyard){this._fixGraveyardRangesData.push({liveRange:t,sourcePosition:i.deletionPosition})}});return t}_updateMarkers(){const e=[];let t=false;for(const t of this._model.markers){const n=t.getRange();for(const i of this.getRanges()){if(n.containsRange(i,!i.isCollapsed)){e.push(t)}}}const n=Array.from(this.markers);for(const n of e){if(!this.markers.has(n)){this.markers.add(n);t=true}}for(const n of Array.from(this.markers)){if(!e.includes(n)){this.markers.remove(n);t=true}}if(t){this.fire("change:marker",{oldMarkers:n,directChange:false})}}_updateAttributes(e){const t=Ws(this._getSurroundingAttributes());const n=Ws(this.getAttributes());if(e){this._attributePriority=new Map;this._attrs=new Map}else{for(const[e,t]of this._attributePriority){if(t=="low"){this._attrs.delete(e);this._attributePriority.delete(e)}}}this._setAttributesTo(t);const i=[];for(const[e,t]of this.getAttributes()){if(!n.has(e)||n.get(e)!==t){i.push(e)}}for(const[e]of n){if(!this.hasAttribute(e)){i.push(e)}}if(i.length>0){this.fire("change:attribute",{attributeKeys:i,directChange:false})}}_setAttribute(e,t,n=true){const i=n?"normal":"low";if(i=="low"&&this._attributePriority.get(e)=="normal"){return false}const o=super.getAttribute(e);if(o===t){return false}this._attrs.set(e,t);this._attributePriority.set(e,i);return true}_removeAttribute(e,t=true){const n=t?"normal":"low";if(n=="low"&&this._attributePriority.get(e)=="normal"){return false}this._attributePriority.set(e,n);if(!super.hasAttribute(e)){return false}this._attrs.delete(e);return true}_setAttributesTo(e){const t=new Set;for(const[t,n]of this.getAttributes()){if(e.get(t)===n){continue}this._removeAttribute(t,false)}for(const[n,i]of e){const e=this._setAttribute(n,i,false);if(e){t.add(n)}}return t}*_getStoredAttributes(){const e=this.getFirstPosition().parent;if(this.isCollapsed&&e.isEmpty){for(const t of e.getAttributeKeys()){if(t.startsWith(hf)){const n=t.substr(hf.length);yield[n,e.getAttribute(t)]}}}}_getSurroundingAttributes(){const e=this.getFirstPosition();const t=this._model.schema;let n=null;if(!this.isCollapsed){const e=this.getFirstRange();for(const i of e){if(i.item.is("element")&&t.isObject(i.item)){break}if(i.type=="text"){n=i.item.getAttributes();break}}}else{const t=e.textNode?e.textNode:e.nodeBefore;const i=e.textNode?e.textNode:e.nodeAfter;if(!this.isGravityOverridden){n=mf(t)}if(!n){n=mf(i)}if(!this.isGravityOverridden&&!n){let e=t;while(e&&!n){e=e.previousSibling;n=mf(e)}}if(!n){let e=i;while(e&&!n){e=e.nextSibling;n=mf(e)}}if(!n){n=this._getStoredAttributes()}}return n}_fixGraveyardSelection(e,t){const n=t.clone();const i=this._model.schema.getNearestSelectionRange(n);const o=this._ranges.indexOf(e);this._ranges.splice(o,1);e.detach();if(i&&!bf(i,this)){const e=this._prepareRange(i);this._ranges.splice(o,0,e)}}}function mf(e){if(e instanceof Bh||e instanceof zh){return e.getAttributes()}return null}function pf(e,t){const n=e.document.differ;for(const i of n.getChanges()){if(i.type!="insert"){continue}const n=i.position.parent;const o=i.length===n.maxOffset;if(o){e.enqueueChange(t,e=>{const t=Array.from(n.getAttributeKeys()).filter(e=>e.startsWith(hf));for(const i of t){e.removeAttribute(i,n)}})}}}function bf(e,t){return!t._ranges.every(t=>!e.isEqual(t))}class wf{constructor(e){this._dispatchers=e}add(e){for(const t of this._dispatchers){e(t)}return this}}var kf=1,_f=4;function vf(e){return Hr(e,kf|_f)}var yf=vf;class xf extends wf{elementToElement(e){return this.add(zf(e))}attributeToElement(e){return this.add(Bf(e))}attributeToAttribute(e){return this.add(jf(e))}markerToElement(e){return this.add(Ff(e))}markerToHighlight(e){return this.add(Hf(e))}}function Cf(){return(e,t,n)=>{if(!n.consumable.consume(t.item,"insert")){return}const i=n.writer;const o=n.mapper.toViewPosition(t.range.start);const r=i.createText(t.item.data);i.insert(o,r)}}function Af(){return(e,t,n)=>{const i=n.mapper.toViewPosition(t.position);const o=t.position.getShiftedBy(t.length);const r=n.mapper.toViewPosition(o,{isPhantom:true});const s=n.writer.createRange(i,r);const a=n.writer.remove(s.getTrimmed());for(const e of n.writer.createRangeIn(a).getItems()){n.mapper.unbindViewElement(e)}}}function Tf(e,t){const n=e.createAttributeElement("span",t.attributes);if(t.classes){n._addClass(t.classes)}if(t.priority){n._priority=t.priority}n._id=t.id;return n}function Sf(){return(e,t,n)=>{const i=t.selection;if(i.isCollapsed){return}if(!n.consumable.consume(i,"selection")){return}const o=[];for(const e of i.getRanges()){const t=n.mapper.toViewRange(e);o.push(t)}n.writer.setSelection(o,{backward:i.isBackward})}}function Pf(){return(e,t,n)=>{const i=t.selection;if(!i.isCollapsed){return}if(!n.consumable.consume(i,"selection")){return}const o=n.writer;const r=i.getFirstPosition();const s=n.mapper.toViewPosition(r);const a=o.breakAttributes(s);o.setSelection(a)}}function Ef(){return(e,t,n)=>{const i=n.writer;const o=i.document.selection;for(const e of o.getRanges()){if(e.isCollapsed){if(e.end.parent.isAttached()){n.writer.mergeAttributes(e.start)}}}i.setSelection(null)}}function Mf(e){return(t,n,i)=>{const o=e(n.attributeOldValue,i.writer);const r=e(n.attributeNewValue,i.writer);if(!o&&!r){return}if(!i.consumable.consume(n.item,t.name)){return}const s=i.writer;const a=s.document.selection;if(n.item instanceof tf||n.item instanceof ff){s.wrap(a.getFirstRange(),r)}else{let e=i.mapper.toViewRange(n.range);if(n.attributeOldValue!==null&&o){e=s.unwrap(e,o)}if(n.attributeNewValue!==null&&r){s.wrap(e,r)}}}}function If(e){return(t,n,i)=>{const o=e(n.item,i.writer);if(!o){return}if(!i.consumable.consume(n.item,"insert")){return}const r=i.mapper.toViewPosition(n.range.start);i.mapper.bindElements(n.item,o);i.writer.insert(r,o)}}function Nf(e){return(t,n,i)=>{n.isOpening=true;const o=e(n,i.writer);n.isOpening=false;const r=e(n,i.writer);if(!o||!r){return}const s=n.markerRange;if(s.isCollapsed&&!i.consumable.consume(s,t.name)){return}for(const e of s){if(!i.consumable.consume(e.item,t.name)){return}}const a=i.mapper;const c=i.writer;c.insert(a.toViewPosition(s.start),o);i.mapper.bindElementToMarker(o,n.markerName);if(!s.isCollapsed){c.insert(a.toViewPosition(s.end),r);i.mapper.bindElementToMarker(r,n.markerName)}t.stop()}}function Of(){return(e,t,n)=>{const i=n.mapper.markerNameToElements(t.markerName);if(!i){return}for(const e of i){n.mapper.unbindElementFromMarkerName(e,t.markerName);n.writer.clear(n.writer.createRangeOn(e),e)}n.writer.clearClonedElementsGroup(t.markerName);e.stop()}}function Rf(e){return(t,n,i)=>{const o=e(n.attributeOldValue,n);const r=e(n.attributeNewValue,n);if(!o&&!r){return}if(!i.consumable.consume(n.item,t.name)){return}const s=i.mapper.toViewElement(n.item);const a=i.writer;if(!s){throw new ss["b"]("conversion-attribute-to-attribute-on-text: "+"Trying to convert text node's attribute with attribute-to-attribute converter.",[n,i])}if(n.attributeOldValue!==null&&o){if(o.key=="class"){const e=Array.isArray(o.value)?o.value:[o.value];for(const t of e){a.removeClass(t,s)}}else if(o.key=="style"){const e=Object.keys(o.value);for(const t of e){a.removeStyle(t,s)}}else{a.removeAttribute(o.key,s)}}if(n.attributeNewValue!==null&&r){if(r.key=="class"){const e=Array.isArray(r.value)?r.value:[r.value];for(const t of e){a.addClass(t,s)}}else if(r.key=="style"){const e=Object.keys(r.value);for(const t of e){a.setStyle(t,r.value[t],s)}}else{a.setAttribute(r.key,r.value,s)}}}}function Vf(e){return(t,n,i)=>{if(!n.item){return}if(!(n.item instanceof tf||n.item instanceof ff)&&!n.item.is("textProxy")){return}const o=Gf(e,n,i);if(!o){return}if(!i.consumable.consume(n.item,t.name)){return}const r=i.writer;const s=Tf(r,o);const a=r.document.selection;if(n.item instanceof tf||n.item instanceof ff){r.wrap(a.getFirstRange(),s,a)}else{const e=i.mapper.toViewRange(n.range);const t=r.wrap(e,s);for(const e of t.getItems()){if(e.is("attributeElement")&&e.isSimilar(s)){i.mapper.bindElementToMarker(e,n.markerName);break}}}}}function Df(e){return(t,n,i)=>{if(!n.item){return}if(!(n.item instanceof Fh)){return}const o=Gf(e,n,i);if(!o){return}if(!i.consumable.test(n.item,t.name)){return}const r=i.mapper.toViewElement(n.item);if(r&&r.getCustomProperty("addHighlight")){i.consumable.consume(n.item,t.name);for(const e of Kh._createIn(n.item)){i.consumable.consume(e.item,t.name)}r.getCustomProperty("addHighlight")(r,o,i.writer);i.mapper.bindElementToMarker(r,n.markerName)}}}function Lf(e){return(t,n,i)=>{if(n.markerRange.isCollapsed){return}const o=Gf(e,n,i);if(!o){return}const r=Tf(i.writer,o);const s=i.mapper.markerNameToElements(n.markerName);if(!s){return}for(const e of s){i.mapper.unbindElementFromMarkerName(e,n.markerName);if(e.is("attributeElement")){i.writer.unwrap(i.writer.createRangeOn(e),r)}else{e.getCustomProperty("removeHighlight")(e,o.id,i.writer)}}i.writer.clearClonedElementsGroup(n.markerName);t.stop()}}function zf(e){e=yf(e);e.view=Wf(e.view,"container");return t=>{t.on("insert:"+e.model,If(e.view),{priority:e.converterPriority||"normal"})}}function Bf(e){e=yf(e);const t=e.model.key?e.model.key:e.model;let n="attribute:"+t;if(e.model.name){n+=":"+e.model.name}if(e.model.values){for(const t of e.model.values){e.view[t]=Wf(e.view[t],"attribute")}}else{e.view=Wf(e.view,"attribute")}const i=qf(e);return t=>{t.on(n,Mf(i),{priority:e.converterPriority||"normal"})}}function jf(e){e=yf(e);const t=e.model.key?e.model.key:e.model;let n="attribute:"+t;if(e.model.name){n+=":"+e.model.name}if(e.model.values){for(const t of e.model.values){e.view[t]=$f(e.view[t])}}else{e.view=$f(e.view)}const i=qf(e);return t=>{t.on(n,Rf(i),{priority:e.converterPriority||"normal"})}}function Ff(e){e=yf(e);e.view=Wf(e.view,"ui");return t=>{t.on("addMarker:"+e.model,Nf(e.view),{priority:e.converterPriority||"normal"});t.on("removeMarker:"+e.model,Of(e.view),{priority:e.converterPriority||"normal"})}}function Hf(e){return t=>{t.on("addMarker:"+e.model,Vf(e.view),{priority:e.converterPriority||"normal"});t.on("addMarker:"+e.model,Df(e.view),{priority:e.converterPriority||"normal"});t.on("removeMarker:"+e.model,Lf(e.view),{priority:e.converterPriority||"normal"})}}function Wf(e,t){if(typeof e=="function"){return e}return(n,i)=>Uf(e,i,t)}function Uf(e,t,n){if(typeof e=="string"){e={name:e}}let i;const o=Object.assign({},e.attributes);if(n=="container"){i=t.createContainerElement(e.name,o)}else if(n=="attribute"){const n={priority:e.priority||kl.DEFAULT_PRIORITY};i=t.createAttributeElement(e.name,o,n)}else{i=t.createUIElement(e.name,o)}if(e.styles){const n=Object.keys(e.styles);for(const o of n){t.setStyle(o,e.styles[o],i)}}if(e.classes){const n=e.classes;if(typeof n=="string"){t.addClass(n,i)}else{for(const e of n){t.addClass(e,i)}}}return i}function qf(e){if(e.model.values){return(t,n)=>{const i=e.view[t];if(i){return i(t,n)}return null}}else{return e.view}}function $f(e){if(typeof e=="string"){return t=>({key:e,value:t})}else if(typeof e=="object"){if(e.value){return()=>e}else{return t=>({key:e.key,value:t})}}else{return e}}function Gf(e,t,n){const i=typeof e=="function"?e(t,n):e;if(!i){return null}if(!i.priority){i.priority=10}if(!i.id){i.id=t.markerName}return i}class Yf extends wf{elementToElement(e){return this.add(Zf(e))}elementToAttribute(e){return this.add(Xf(e))}attributeToAttribute(e){return this.add(eg(e))}elementToMarker(e){return this.add(tg(e))}}function Kf(){return(e,t,n)=>{if(!t.modelRange&&n.consumable.consume(t.viewItem,{name:true})){const{modelRange:e,modelCursor:i}=n.convertChildren(t.viewItem,t.modelCursor);t.modelRange=e;t.modelCursor=i}}}function Qf(){return(e,t,n)=>{if(n.schema.checkChild(t.modelCursor,"$text")){if(n.consumable.consume(t.viewItem)){const e=n.writer.createText(t.viewItem.data);n.writer.insert(e,t.modelCursor);t.modelRange=Kh._createFromPositionAndShift(t.modelCursor,e.offsetSize);t.modelCursor=t.modelRange.end}}}}function Jf(e,t){return(n,i)=>{const o=i.newSelection;const r=new tf;const s=[];for(const e of o.getRanges()){s.push(t.toModelRange(e))}r.setTo(s,{backward:o.isBackward});if(!r.isEqual(e.document.selection)){e.change(e=>{e.setSelection(r)})}}}function Zf(e){e=yf(e);const t=ig(e);const n=ng(e.view);const i=n?"element:"+n:"element";return n=>{n.on(i,t,{priority:e.converterPriority||"normal"})}}function Xf(e){e=yf(e);sg(e);const t=ag(e,false);const n=ng(e.view);const i=n?"element:"+n:"element";return n=>{n.on(i,t,{priority:e.converterPriority||"low"})}}function eg(e){e=yf(e);let t=null;if(typeof e.view=="string"||e.view.key){t=rg(e)}sg(e,t);const n=ag(e,true);return t=>{t.on("element",n,{priority:e.converterPriority||"low"})}}function tg(e){e=yf(e);dg(e);return Zf(e)}function ng(e){if(typeof e=="string"){return e}if(typeof e=="object"&&typeof e.name=="string"){return e.name}return null}function ig(e){const t=e.view?new Us(e.view):null;return(n,i,o)=>{let r={};if(t){const e=t.match(i.viewItem);if(!e){return}r=e.match}r.name=true;const s=og(e.model,i.viewItem,o.writer);if(!s){return}if(!o.consumable.test(i.viewItem,r)){return}const a=o.splitToAllowedParent(s,i.modelCursor);if(!a){return}o.writer.insert(s,a.position);o.convertChildren(i.viewItem,o.writer.createPositionAt(s,0));o.consumable.consume(i.viewItem,r);const c=o.getSplitParts(s);i.modelRange=new Kh(o.writer.createPositionBefore(s),o.writer.createPositionAfter(c[c.length-1]));if(a.cursorParent){i.modelCursor=o.writer.createPositionAt(a.cursorParent,0)}else{i.modelCursor=i.modelRange.end}}}function og(e,t,n){if(e instanceof Function){return e(t,n)}else{return n.createElement(e)}}function rg(e){if(typeof e.view=="string"){e.view={key:e.view}}const t=e.view.key;let n;if(t=="class"||t=="style"){const i=t=="class"?"classes":"styles";n={[i]:e.view.value}}else{const i=typeof e.view.value=="undefined"?/[\s\S]*/:e.view.value;n={attributes:{[t]:i}}}if(e.view.name){n.name=e.view.name}e.view=n;return t}function sg(e,t=null){const n=t===null?true:e=>e.getAttribute(t);const i=typeof e.model!="object"?e.model:e.model.key;const o=typeof e.model!="object"||typeof e.model.value=="undefined"?n:e.model.value;e.model={key:i,value:o}}function ag(e,t){const n=new Us(e.view);return(i,o,r)=>{const s=n.match(o.viewItem);if(!s){return}const a=e.model.key;const c=typeof e.model.value=="function"?e.model.value(o.viewItem):e.model.value;if(c===null){return}if(cg(e.view,o.viewItem)){s.match.name=true}else{delete s.match.name}if(!r.consumable.test(o.viewItem,s.match)){return}if(!o.modelRange){o=Object.assign(o,r.convertChildren(o.viewItem,o.modelCursor))}const l=lg(o.modelRange,{key:a,value:c},t,r);if(l){r.consumable.consume(o.viewItem,s.match)}}}function cg(e,t){const n=typeof e=="function"?e(t):e;if(typeof n=="object"&&!ng(n)){return false}return!n.classes&&!n.attributes&&!n.styles}function lg(e,t,n,i){let o=false;for(const r of Array.from(e.getItems({shallow:n}))){if(i.schema.checkAttribute(r,t.key)){i.writer.setAttribute(t.key,t.value,r);o=true}}return o}function dg(e){const t=e.model;e.model=(e,n)=>{const i=typeof t=="string"?t:t(e);return n.createElement("$marker",{"data-name":i})}}class ug{constructor(e,t){this.model=e;this.view=new Dh(t);this.mapper=new Qh;this.downcastDispatcher=new Xh({mapper:this.mapper});const n=this.model.document;const i=n.selection;const o=this.model.markers;this.listenTo(this.model,"_beforeChanges",()=>{this.view._disableRendering(true)},{priority:"highest"});this.listenTo(this.model,"_afterChanges",()=>{this.view._disableRendering(false)},{priority:"lowest"});this.listenTo(n,"change",()=>{this.view.change(e=>{this.downcastDispatcher.convertChanges(n.differ,o,e);this.downcastDispatcher.convertSelection(i,o,e)})},{priority:"low"});this.listenTo(this.view.document,"selectionChange",Jf(this.model,this.mapper));this.downcastDispatcher.on("insert:$text",Cf(),{priority:"lowest"});this.downcastDispatcher.on("remove",Af(),{priority:"low"});this.downcastDispatcher.on("selection",Ef(),{priority:"low"});this.downcastDispatcher.on("selection",Sf(),{priority:"low"});this.downcastDispatcher.on("selection",Pf(),{priority:"low"});this.view.document.roots.bindTo(this.model.document.roots).using(e=>{if(e.rootName=="$graveyard"){return null}const t=new ll(this.view.document,e.name);t.rootName=e.rootName;this.mapper.bindElements(e,t);return t})}destroy(){this.view.destroy();this.stopListening()}}ys(ug,Qc);class hg{constructor(){this._commands=new Map}add(e,t){this._commands.set(e,t)}get(e){return this._commands.get(e)}execute(e,...t){const n=this.get(e);if(!n){throw new ss["b"]("commandcollection-command-not-found: Command does not exist.",this,{commandName:e})}n.execute(...t)}*names(){yield*this._commands.keys()}*commands(){yield*this._commands.values()}[Symbol.iterator](){return this._commands[Symbol.iterator]()}destroy(){for(const e of this.commands()){e.destroy()}}}class fg{constructor(){this._consumables=new Map}add(e,t){let n;if(e.is("text")||e.is("documentFragment")){this._consumables.set(e,true);return}if(!this._consumables.has(e)){n=new gg(e);this._consumables.set(e,n)}else{n=this._consumables.get(e)}n.add(t)}test(e,t){const n=this._consumables.get(e);if(n===undefined){return null}if(e.is("text")||e.is("documentFragment")){return n}return n.test(t)}consume(e,t){if(this.test(e,t)){if(e.is("text")||e.is("documentFragment")){this._consumables.set(e,false)}else{this._consumables.get(e).consume(t)}return true}return false}revert(e,t){const n=this._consumables.get(e);if(n!==undefined){if(e.is("text")||e.is("documentFragment")){this._consumables.set(e,true)}else{n.revert(t)}}}static consumablesFromElement(e){const t={element:e,name:true,attributes:[],classes:[],styles:[]};const n=e.getAttributeKeys();for(const e of n){if(e=="style"||e=="class"){continue}t.attributes.push(e)}const i=e.getClassNames();for(const e of i){t.classes.push(e)}const o=e.getStyleNames();for(const e of o){t.styles.push(e)}return t}static createFrom(e,t){if(!t){t=new fg(e)}if(e.is("text")){t.add(e);return t}if(e.is("element")){t.add(e,fg.consumablesFromElement(e))}if(e.is("documentFragment")){t.add(e)}for(const n of e.getChildren()){t=fg.createFrom(n,t)}return t}}class gg{constructor(e){this.element=e;this._canConsumeName=null;this._consumables={attributes:new Map,styles:new Map,classes:new Map}}add(e){if(e.name){this._canConsumeName=true}for(const t in this._consumables){if(t in e){this._add(t,e[t])}}}test(e){if(e.name&&!this._canConsumeName){return this._canConsumeName}for(const t in this._consumables){if(t in e){const n=this._test(t,e[t]);if(n!==true){return n}}}return true}consume(e){if(e.name){this._canConsumeName=false}for(const t in this._consumables){if(t in e){this._consume(t,e[t])}}}revert(e){if(e.name){this._canConsumeName=true}for(const t in this._consumables){if(t in e){this._revert(t,e[t])}}}_add(e,t){const n=Kt(t)?t:[t];const i=this._consumables[e];for(const t of n){if(e==="attributes"&&(t==="class"||t==="style")){throw new ss["b"]("viewconsumable-invalid-attribute: Classes and styles should be handled separately.",this)}i.set(t,true);if(e==="styles"){for(const e of this.element.document.stylesProcessor.getRelatedStyles(t)){i.set(e,true)}}}}_test(e,t){const n=Kt(t)?t:[t];const i=this._consumables[e];for(const t of n){if(e==="attributes"&&(t==="class"||t==="style")){const e=t=="class"?"classes":"styles";const n=this._test(e,[...this._consumables[e].keys()]);if(n!==true){return n}}else{const e=i.get(t);if(e===undefined){return null}if(!e){return false}}}return true}_consume(e,t){const n=Kt(t)?t:[t];const i=this._consumables[e];for(const t of n){if(e==="attributes"&&(t==="class"||t==="style")){const e=t=="class"?"classes":"styles";this._consume(e,[...this._consumables[e].keys()])}else{i.set(t,false);if(e=="styles"){for(const e of this.element.document.stylesProcessor.getRelatedStyles(t)){i.set(e,false)}}}}}_revert(e,t){const n=Kt(t)?t:[t];const i=this._consumables[e];for(const t of n){if(e==="attributes"&&(t==="class"||t==="style")){const e=t=="class"?"classes":"styles";this._revert(e,[...this._consumables[e].keys()])}else{const e=i.get(t);if(e===false){i.set(t,true)}}}}}class mg{constructor(){this._sourceDefinitions={};this._attributeProperties={};this.decorate("checkChild");this.decorate("checkAttribute");this.on("checkAttribute",(e,t)=>{t[0]=new pg(t[0])},{priority:"highest"});this.on("checkChild",(e,t)=>{t[0]=new pg(t[0]);t[1]=this.getDefinition(t[1])},{priority:"highest"})}register(e,t){if(this._sourceDefinitions[e]){throw new ss["b"]("schema-cannot-register-item-twice: A single item cannot be registered twice in the schema.",this,{itemName:e})}this._sourceDefinitions[e]=[Object.assign({},t)];this._clearCache()}extend(e,t){if(!this._sourceDefinitions[e]){throw new ss["b"]("schema-cannot-extend-missing-item: Cannot extend an item which was not registered yet.",this,{itemName:e})}this._sourceDefinitions[e].push(Object.assign({},t));this._clearCache()}getDefinitions(){if(!this._compiledDefinitions){this._compile()}return this._compiledDefinitions}getDefinition(e){let t;if(typeof e=="string"){t=e}else if(e.is&&(e.is("text")||e.is("textProxy"))){t="$text"}else{t=e.name}return this.getDefinitions()[t]}isRegistered(e){return!!this.getDefinition(e)}isBlock(e){const t=this.getDefinition(e);return!!(t&&t.isBlock)}isLimit(e){const t=this.getDefinition(e);if(!t){return false}return!!(t.isLimit||t.isObject)}isObject(e){const t=this.getDefinition(e);return!!(t&&t.isObject)}isInline(e){const t=this.getDefinition(e);return!!(t&&t.isInline)}checkChild(e,t){if(!t){return false}return this._checkContextMatch(t,e)}checkAttribute(e,t){const n=this.getDefinition(e.last);if(!n){return false}return n.allowAttributes.includes(t)}checkMerge(e,t=null){if(e instanceof qh){const t=e.nodeBefore;const n=e.nodeAfter;if(!(t instanceof Fh)){throw new ss["b"]("schema-check-merge-no-element-before: The node before the merge position must be an element.",this)}if(!(n instanceof Fh)){throw new ss["b"]("schema-check-merge-no-element-after: The node after the merge position must be an element.",this)}return this.checkMerge(t,n)}for(const n of t.getChildren()){if(!this.checkChild(e,n)){return false}}return true}addChildCheck(e){this.on("checkChild",(t,[n,i])=>{if(!i){return}const o=e(n,i);if(typeof o=="boolean"){t.stop();t.return=o}},{priority:"high"})}addAttributeCheck(e){this.on("checkAttribute",(t,[n,i])=>{const o=e(n,i);if(typeof o=="boolean"){t.stop();t.return=o}},{priority:"high"})}setAttributeProperties(e,t){this._attributeProperties[e]=Object.assign(this.getAttributeProperties(e),t)}getAttributeProperties(e){return this._attributeProperties[e]||{}}getLimitElement(e){let t;if(e instanceof qh){t=e.parent}else{const n=e instanceof Kh?[e]:Array.from(e.getRanges());t=n.reduce((e,t)=>{const n=t.getCommonAncestor();if(!e){return n}return e.getCommonAncestor(n,{includeSelf:true})},null)}while(!this.isLimit(t)){if(t.parent){t=t.parent}else{break}}return t}checkAttributeInSelection(e,t){if(e.isCollapsed){const n=e.getFirstPosition();const i=[...n.getAncestors(),new zh("",e.getAttributes())];return this.checkAttribute(i,t)}else{const n=e.getRanges();for(const e of n){for(const n of e){if(this.checkAttribute(n.item,t)){return true}}}}return false}*getValidRanges(e,t){e=Ig(e);for(const n of e){yield*this._getValidRangesForRange(n,t)}}getNearestSelectionRange(e,t="both"){if(this.checkChild(e,"$text")){return new Kh(e)}let n,i;const o=e.getAncestors().reverse().find(e=>this.isLimit(e))||e.root;if(t=="both"||t=="backward"){n=new Wh({boundaries:Kh._createIn(o),startPosition:e,direction:"backward"})}if(t=="both"||t=="forward"){i=new Wh({boundaries:Kh._createIn(o),startPosition:e})}for(const e of Mg(n,i)){const t=e.walker==n?"elementEnd":"elementStart";const i=e.value;if(i.type==t&&this.isObject(i.item)){return Kh._createOn(i.item)}if(this.checkChild(i.nextPosition,"$text")){return new Kh(i.nextPosition)}}return null}findAllowedParent(e,t){let n=e.parent;while(n){if(this.checkChild(n,t)){return n}if(this.isLimit(n)){return null}n=n.parent}return null}removeDisallowedAttributes(e,t){for(const n of e){if(n.is("text")){Ng(this,n,t)}else{const e=Kh._createIn(n);const i=e.getPositions();for(const e of i){const n=e.nodeBefore||e.parent;Ng(this,n,t)}}}}createContext(e){return new pg(e)}_clearCache(){this._compiledDefinitions=null}_compile(){const e={};const t=this._sourceDefinitions;const n=Object.keys(t);for(const i of n){e[i]=bg(t[i],i)}for(const t of n){wg(e,t)}for(const t of n){kg(e,t)}for(const t of n){_g(e,t);vg(e,t)}for(const t of n){yg(e,t);xg(e,t)}this._compiledDefinitions=e}_checkContextMatch(e,t,n=t.length-1){const i=t.getItem(n);if(e.allowIn.includes(i.name)){if(n==0){return true}else{const e=this.getDefinition(i);return this._checkContextMatch(e,t,n-1)}}else{return false}}*_getValidRangesForRange(e,t){let n=e.start;let i=e.start;for(const o of e.getItems({shallow:true})){if(o.is("element")){yield*this._getValidRangesForRange(Kh._createIn(o),t)}if(!this.checkAttribute(o,t)){if(!n.isEqual(i)){yield new Kh(n,i)}n=qh._createAfter(o)}i=qh._createAfter(o)}if(!n.isEqual(i)){yield new Kh(n,i)}}}ys(mg,Qc);class pg{constructor(e){if(e instanceof pg){return e}if(typeof e=="string"){e=[e]}else if(!Array.isArray(e)){e=e.getAncestors({includeSelf:true})}if(e[0]&&typeof e[0]!="string"&&e[0].is("documentFragment")){e.shift()}this._items=e.map(Eg)}get length(){return this._items.length}get last(){return this._items[this._items.length-1]}[Symbol.iterator](){return this._items[Symbol.iterator]()}push(e){const t=new pg([e]);t._items=[...this._items,...t._items];return t}getItem(e){return this._items[e]}*getNames(){yield*this._items.map(e=>e.name)}endsWith(e){return Array.from(this.getNames()).join(" ").endsWith(e)}startsWith(e){return Array.from(this.getNames()).join(" ").startsWith(e)}}function bg(e,t){const n={name:t,allowIn:[],allowContentOf:[],allowWhere:[],allowAttributes:[],allowAttributesOf:[],inheritTypesFrom:[]};Cg(e,n);Ag(e,n,"allowIn");Ag(e,n,"allowContentOf");Ag(e,n,"allowWhere");Ag(e,n,"allowAttributes");Ag(e,n,"allowAttributesOf");Ag(e,n,"inheritTypesFrom");Tg(e,n);return n}function wg(e,t){for(const n of e[t].allowContentOf){if(e[n]){const i=Sg(e,n);i.forEach(e=>{e.allowIn.push(t)})}}delete e[t].allowContentOf}function kg(e,t){for(const n of e[t].allowWhere){const i=e[n];if(i){const n=i.allowIn;e[t].allowIn.push(...n)}}delete e[t].allowWhere}function _g(e,t){for(const n of e[t].allowAttributesOf){const i=e[n];if(i){const n=i.allowAttributes;e[t].allowAttributes.push(...n)}}delete e[t].allowAttributesOf}function vg(e,t){const n=e[t];for(const t of n.inheritTypesFrom){const i=e[t];if(i){const e=Object.keys(i).filter(e=>e.startsWith("is"));for(const t of e){if(!(t in n)){n[t]=i[t]}}}}delete n.inheritTypesFrom}function yg(e,t){const n=e[t];const i=n.allowIn.filter(t=>e[t]);n.allowIn=Array.from(new Set(i))}function xg(e,t){const n=e[t];n.allowAttributes=Array.from(new Set(n.allowAttributes))}function Cg(e,t){for(const n of e){const e=Object.keys(n).filter(e=>e.startsWith("is"));for(const i of e){t[i]=n[i]}}}function Ag(e,t,n){for(const i of e){if(typeof i[n]=="string"){t[n].push(i[n])}else if(Array.isArray(i[n])){t[n].push(...i[n])}}}function Tg(e,t){for(const n of e){const e=n.inheritAllFrom;if(e){t.allowContentOf.push(e);t.allowWhere.push(e);t.allowAttributesOf.push(e);t.inheritTypesFrom.push(e)}}}function Sg(e,t){const n=e[t];return Pg(e).filter(e=>e.allowIn.includes(n.name))}function Pg(e){return Object.keys(e).map(t=>e[t])}function Eg(e){if(typeof e=="string"){return{name:e,*getAttributeKeys(){},getAttribute(){}}}else{return{name:e.is("element")?e.name:"$text",*getAttributeKeys(){yield*e.getAttributeKeys()},getAttribute(t){return e.getAttribute(t)}}}}function*Mg(e,t){let n=false;while(!n){n=true;if(e){const t=e.next();if(!t.done){n=false;yield{walker:e,value:t.value}}}if(t){const e=t.next();if(!e.done){n=false;yield{walker:t,value:e.value}}}}}function*Ig(e){for(const t of e){yield*t.getMinimalFlatRanges()}}function Ng(e,t,n){for(const i of t.getAttributeKeys()){if(!e.checkAttribute(t,i)){n.removeAttribute(i,t)}}}class Og{constructor(e={}){this._splitParts=new Map;this._modelCursor=null;this.conversionApi=Object.assign({},e);this.conversionApi.convertItem=this._convertItem.bind(this);this.conversionApi.convertChildren=this._convertChildren.bind(this);this.conversionApi.splitToAllowedParent=this._splitToAllowedParent.bind(this);this.conversionApi.getSplitParts=this._getSplitParts.bind(this)}convert(e,t,n=["$root"]){this.fire("viewCleanup",e);this._modelCursor=Vg(n,t);this.conversionApi.writer=t;this.conversionApi.consumable=fg.createFrom(e);this.conversionApi.store={};const{modelRange:i}=this._convertItem(e,this._modelCursor);const o=t.createDocumentFragment();if(i){this._removeEmptyElements();for(const e of Array.from(this._modelCursor.parent.getChildren())){t.append(e,o)}o.markers=Rg(o,t)}this._modelCursor=null;this._splitParts.clear();this.conversionApi.writer=null;this.conversionApi.store=null;return o}_convertItem(e,t){const n=Object.assign({viewItem:e,modelCursor:t,modelRange:null});if(e.is("element")){this.fire("element:"+e.name,n,this.conversionApi)}else if(e.is("text")){this.fire("text",n,this.conversionApi)}else{this.fire("documentFragment",n,this.conversionApi)}if(n.modelRange&&!(n.modelRange instanceof Kh)){throw new ss["b"]("view-conversion-dispatcher-incorrect-result: Incorrect conversion result was dropped.",this)}return{modelRange:n.modelRange,modelCursor:n.modelCursor}}_convertChildren(e,t){const n=new Kh(t);let i=t;for(const t of Array.from(e.getChildren())){const e=this._convertItem(t,i);if(e.modelRange instanceof Kh){n.end=e.modelRange.end;i=e.modelCursor}}return{modelRange:n,modelCursor:i}}_splitToAllowedParent(e,t){const n=this.conversionApi.schema.findAllowedParent(t,e);if(!n){return null}if(n===t.parent){return{position:t}}if(this._modelCursor.parent.getAncestors().includes(n)){return null}const i=this.conversionApi.writer.split(t,n);const o=[];for(const e of i.range.getWalker()){if(e.type=="elementEnd"){o.push(e.item)}else{const t=o.pop();const n=e.item;this._registerSplitPair(t,n)}}return{position:i.position,cursorParent:i.range.end.parent}}_registerSplitPair(e,t){if(!this._splitParts.has(e)){this._splitParts.set(e,[e])}const n=this._splitParts.get(e);this._splitParts.set(t,n);n.push(t)}_getSplitParts(e){let t;if(!this._splitParts.has(e)){t=[e]}else{t=this._splitParts.get(e)}return t}_removeEmptyElements(){let e=false;for(const t of this._splitParts.keys()){if(t.isEmpty){this.conversionApi.writer.remove(t);this._splitParts.delete(t);e=true}}if(e){this._removeEmptyElements()}}}ys(Og,ds);function Rg(e,t){const n=new Set;const i=new Map;const o=Kh._createIn(e).getItems();for(const e of o){if(e.name=="$marker"){n.add(e)}}for(const e of n){const n=e.getAttribute("data-name");const o=t.createPositionBefore(e);if(!i.has(n)){i.set(n,new Kh(o.clone()))}else{i.get(n).end=o.clone()}t.remove(e)}return i}function Vg(e,t){let n;for(const i of new pg(e)){const e={};for(const t of i.getAttributeKeys()){e[t]=i.getAttribute(t)}const o=t.createElement(i.name,e);if(n){t.append(o,n)}n=qh._createAt(o,0)}return n}class Dg{constructor(e,t){this.model=e;this.stylesProcessor=t;this.processor;this.mapper=new Qh;this.downcastDispatcher=new Xh({mapper:this.mapper});this.downcastDispatcher.on("insert:$text",Cf(),{priority:"lowest"});this.upcastDispatcher=new Og({schema:e.schema});this.viewDocument=new bl(t);this._viewWriter=new $l(this.viewDocument);this.upcastDispatcher.on("text",Qf(),{priority:"lowest"});this.upcastDispatcher.on("element",Kf(),{priority:"lowest"});this.upcastDispatcher.on("documentFragment",Kf(),{priority:"lowest"});this.decorate("init");this.on("init",()=>{this.fire("ready")},{priority:"lowest"})}get(e){const{rootName:t="main",trim:n="empty"}=e||{};if(!this._checkIfRootsExists([t])){throw new ss["b"]("datacontroller-get-non-existent-root: Attempting to get data from a non-existing root.",this)}const i=this.model.document.getRoot(t);if(n==="empty"&&!this.model.hasContent(i,{ignoreWhitespaces:true})){return""}return this.stringify(i)}stringify(e){const t=this.toView(e);return this.processor.toData(t)}toView(e){const t=this.viewDocument;const n=this._viewWriter;this.mapper.clearBindings();const i=Kh._createIn(e);const o=new Ul(t);this.mapper.bindElements(e,o);this.downcastDispatcher.convertInsert(i,n);if(!e.is("documentFragment")){const t=Lg(e);for(const[e,i]of t){this.downcastDispatcher.convertMarkerAdd(e,i,n)}}return o}init(e){if(this.model.document.version){throw new ss["b"]("datacontroller-init-document-not-empty: Trying to set initial data to not empty document.",this)}let t={};if(typeof e==="string"){t.main=e}else{t=e}if(!this._checkIfRootsExists(Object.keys(t))){throw new ss["b"]("datacontroller-init-non-existent-root: Attempting to init data on a non-existing root.",this)}this.model.enqueueChange("transparent",e=>{for(const n of Object.keys(t)){const i=this.model.document.getRoot(n);e.insert(this.parse(t[n],i),i,0)}});return Promise.resolve()}set(e){let t={};if(typeof e==="string"){t.main=e}else{t=e}if(!this._checkIfRootsExists(Object.keys(t))){throw new ss["b"]("datacontroller-set-non-existent-root: Attempting to set data on a non-existing root.",this)}this.model.enqueueChange("transparent",e=>{e.setSelection(null);e.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());for(const n of Object.keys(t)){const i=this.model.document.getRoot(n);e.remove(e.createRangeIn(i));e.insert(this.parse(t[n],i),i,0)}})}parse(e,t="$root"){const n=this.processor.toView(e);return this.toModel(n,t)}toModel(e,t="$root"){return this.model.change(n=>this.upcastDispatcher.convert(e,n,t))}addStyleProcessorRules(e){e(this.stylesProcessor)}destroy(){this.stopListening()}_checkIfRootsExists(e){for(const t of e){if(!this.model.document.getRootNames().includes(t)){return false}}return true}}ys(Dg,Qc);function Lg(e){const t=[];const n=e.root.document;if(!n){return[]}const i=Kh._createIn(e);for(const e of n.model.markers){const n=i.getIntersection(e.getRange());if(n){t.push([e.name,n])}}return t}class zg{constructor(e,t){this._helpers=new Map;this._downcast=Array.isArray(e)?e:[e];this._createConversionHelpers({name:"downcast",dispatchers:this._downcast,isDowncast:true});this._upcast=Array.isArray(t)?t:[t];this._createConversionHelpers({name:"upcast",dispatchers:this._upcast,isDowncast:false})}addAlias(e,t){const n=this._downcast.includes(t);const i=this._upcast.includes(t);if(!i&&!n){throw new ss["b"]("conversion-add-alias-dispatcher-not-registered: "+"Trying to register and alias for a dispatcher that nas not been registered.",this)}this._createConversionHelpers({name:e,dispatchers:[t],isDowncast:n})}for(e){if(!this._helpers.has(e)){throw new ss["b"]("conversion-for-unknown-group: Trying to add a converter to an unknown dispatchers group.",this)}return this._helpers.get(e)}elementToElement(e){this.for("downcast").elementToElement(e);for(const{model:t,view:n}of Bg(e)){this.for("upcast").elementToElement({model:t,view:n,converterPriority:e.converterPriority})}}attributeToElement(e){this.for("downcast").attributeToElement(e);for(const{model:t,view:n}of Bg(e)){this.for("upcast").elementToAttribute({view:n,model:t,converterPriority:e.converterPriority})}}attributeToAttribute(e){this.for("downcast").attributeToAttribute(e);for(const{model:t,view:n}of Bg(e)){this.for("upcast").attributeToAttribute({view:n,model:t})}}_createConversionHelpers({name:e,dispatchers:t,isDowncast:n}){if(this._helpers.has(e)){throw new ss["b"]("conversion-group-exists: Trying to register a group name that has already been registered.",this)}const i=n?new xf(t):new Yf(t);this._helpers.set(e,i)}}function*Bg(e){if(e.model.values){for(const t of e.model.values){const n={key:e.model.key,value:t};const i=e.view[t];const o=e.upcastAlso?e.upcastAlso[t]:undefined;yield*jg(n,i,o)}}else{yield*jg(e.model,e.view,e.upcastAlso)}}function*jg(e,t,n){yield{model:e,view:t};if(n){n=Array.isArray(n)?n:[n];for(const t of n){yield{model:e,view:t}}}}class Fg{constructor(e="default"){this.operations=[];this.type=e}get baseVersion(){for(const e of this.operations){if(e.baseVersion!==null){return e.baseVersion}}return null}addOperation(e){e.batch=this;this.operations.push(e);return e}}class Hg{constructor(e){this.baseVersion=e;this.isDocumentOperation=this.baseVersion!==null;this.batch=null}_validate(){}toJSON(){const e=Object.assign({},this);e.__className=this.constructor.className;delete e.batch;delete e.isDocumentOperation;return e}static get className(){return"Operation"}static fromJSON(e){return new this(e.baseVersion)}}class Wg{constructor(e){this.markers=new Map;this._children=new jh;if(e){this._insertChild(0,e)}}[Symbol.iterator](){return this.getChildren()}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}is(e){return e==="documentFragment"||e==="model:documentFragment"}getChild(e){return this._children.getNode(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}getPath(){return[]}getNodeByPath(e){let t=this;for(const n of e){t=t.getChild(t.offsetToIndex(n))}return t}offsetToIndex(e){return this._children.offsetToIndex(e)}toJSON(){const e=[];for(const t of this._children){e.push(t.toJSON())}return e}static fromJSON(e){const t=[];for(const n of e){if(n.name){t.push(Fh.fromJSON(n))}else{t.push(zh.fromJSON(n))}}return new Wg(t)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){const n=Ug(t);for(const e of n){if(e.parent!==null){e._remove()}e.parent=this}this._children._insertNodes(e,n)}_removeChildren(e,t=1){const n=this._children._removeNodes(e,t);for(const e of n){e.parent=null}return n}}function Ug(e){if(typeof e=="string"){return[new zh(e)]}if(!vs(e)){e=[e]}return Array.from(e).map(e=>{if(typeof e=="string"){return new zh(e)}if(e instanceof Bh){return new zh(e.data,e.getAttributes())}return e})}function qg(e,t){t=Kg(t);const n=t.reduce((e,t)=>e+t.offsetSize,0);const i=e.parent;Jg(e);const o=e.index;i._insertChild(o,t);Qg(i,o+t.length);Qg(i,o);return new Kh(e,e.getShiftedBy(n))}function $g(e){if(!e.isFlat){throw new ss["b"]("operation-utils-remove-range-not-flat: "+"Trying to remove a range which starts and ends in different element.",this)}const t=e.start.parent;Jg(e.start);Jg(e.end);const n=t._removeChildren(e.start.index,e.end.index-e.start.index);Qg(t,e.start.index);return n}function Gg(e,t){if(!e.isFlat){throw new ss["b"]("operation-utils-move-range-not-flat: "+"Trying to move a range which starts and ends in different element.",this)}const n=$g(e);t=t._getTransformedByDeletion(e.start,e.end.offset-e.start.offset);return qg(t,n)}function Yg(e,t,n){Jg(e.start);Jg(e.end);for(const i of e.getItems({shallow:true})){const e=i.is("textProxy")?i.textNode:i;if(n!==null){e._setAttribute(t,n)}else{e._removeAttribute(t)}Qg(e.parent,e.index)}Qg(e.end.parent,e.end.index)}function Kg(e){const t=[];if(!(e instanceof Array)){e=[e]}for(let n=0;ne.maxOffset){throw new ss["b"]("move-operation-nodes-do-not-exist: The nodes which should be moved do not exist.",this)}else if(e===t&&n=n&&this.targetPosition.path[e]e._clone(true)));const t=new om(this.position,e,this.baseVersion);t.shouldReceiveAttributes=this.shouldReceiveAttributes;return t}getReversed(){const e=this.position.root.document.graveyard;const t=new qh(e,[0]);return new im(this.position,this.nodes.maxOffset,t,this.baseVersion+1)}_validate(){const e=this.position.parent;if(!e||e.maxOffsete._clone(true)));qg(this.position,e)}toJSON(){const e=super.toJSON();e.position=this.position.toJSON();e.nodes=this.nodes.toJSON();return e}static get className(){return"InsertOperation"}static fromJSON(e,t){const n=[];for(const t of e.nodes){if(t.name){n.push(Fh.fromJSON(t))}else{n.push(zh.fromJSON(t))}}const i=new om(qh.fromJSON(e.position,t),n,e.baseVersion);i.shouldReceiveAttributes=e.shouldReceiveAttributes;return i}}class rm extends Hg{constructor(e,t,n,i,o,r){super(r);this.name=e;this.oldRange=t?t.clone():null;this.newRange=n?n.clone():null;this.affectsData=o;this._markers=i}get type(){return"marker"}clone(){return new rm(this.name,this.oldRange,this.newRange,this._markers,this.affectsData,this.baseVersion)}getReversed(){return new rm(this.name,this.newRange,this.oldRange,this._markers,this.affectsData,this.baseVersion+1)}_execute(){const e=this.newRange?"_set":"_remove";this._markers[e](this.name,this.newRange,true,this.affectsData)}toJSON(){const e=super.toJSON();if(this.oldRange){e.oldRange=this.oldRange.toJSON()}if(this.newRange){e.newRange=this.newRange.toJSON()}delete e._markers;return e}static get className(){return"MarkerOperation"}static fromJSON(e,t){return new rm(e.name,e.oldRange?Kh.fromJSON(e.oldRange,t):null,e.newRange?Kh.fromJSON(e.newRange,t):null,t.model.markers,e.affectsData,e.baseVersion)}}class sm extends Hg{constructor(e,t,n,i){super(i);this.position=e;this.position.stickiness="toNext";this.oldName=t;this.newName=n}get type(){return"rename"}clone(){return new sm(this.position.clone(),this.oldName,this.newName,this.baseVersion)}getReversed(){return new sm(this.position.clone(),this.newName,this.oldName,this.baseVersion+1)}_validate(){const e=this.position.nodeAfter;if(!(e instanceof Fh)){throw new ss["b"]("rename-operation-wrong-position: Given position is invalid or node after it is not an instance of Element.",this)}else if(e.name!==this.oldName){throw new ss["b"]("rename-operation-wrong-name: Element to change has different name than operation's old name.",this)}}_execute(){const e=this.position.nodeAfter;e.name=this.newName}toJSON(){const e=super.toJSON();e.position=this.position.toJSON();return e}static get className(){return"RenameOperation"}static fromJSON(e,t){return new sm(qh.fromJSON(e.position,t),e.oldName,e.newName,e.baseVersion)}}class am extends Hg{constructor(e,t,n,i,o){super(o);this.root=e;this.key=t;this.oldValue=n;this.newValue=i}get type(){if(this.oldValue===null){return"addRootAttribute"}else if(this.newValue===null){return"removeRootAttribute"}else{return"changeRootAttribute"}}clone(){return new am(this.root,this.key,this.oldValue,this.newValue,this.baseVersion)}getReversed(){return new am(this.root,this.key,this.newValue,this.oldValue,this.baseVersion+1)}_validate(){if(this.root!=this.root.root||this.root.is("documentFragment")){throw new ss["b"]("rootattribute-operation-not-a-root: The element to change is not a root element.",this,{root:this.root,key:this.key})}if(this.oldValue!==null&&this.root.getAttribute(this.key)!==this.oldValue){throw new ss["b"]("rootattribute-operation-wrong-old-value: Changed node has different attribute value than operation's "+"old attribute value.",this,{root:this.root,key:this.key})}if(this.oldValue===null&&this.newValue!==null&&this.root.hasAttribute(this.key)){throw new ss["b"]("rootattribute-operation-attribute-exists: The attribute with given key already exists.",this,{root:this.root,key:this.key})}}_execute(){if(this.newValue!==null){this.root._setAttribute(this.key,this.newValue)}else{this.root._removeAttribute(this.key)}}toJSON(){const e=super.toJSON();e.root=this.root.toJSON();return e}static get className(){return"RootAttributeOperation"}static fromJSON(e,t){if(!t.getRoot(e.root)){throw new ss["b"]("rootattribute-operation-fromjson-no-root: Cannot create RootAttributeOperation. Root with specified name does not exist.",this,{rootName:e.root})}return new am(t.getRoot(e.root),e.key,e.oldValue,e.newValue,e.baseVersion)}}class cm extends Hg{constructor(e,t,n,i,o){super(o);this.sourcePosition=e.clone();this.sourcePosition.stickiness="toPrevious";this.howMany=t;this.targetPosition=n.clone();this.targetPosition.stickiness="toNext";this.graveyardPosition=i.clone()}get type(){return"merge"}get deletionPosition(){return new qh(this.sourcePosition.root,this.sourcePosition.path.slice(0,-1))}get movedRange(){const e=this.sourcePosition.getShiftedBy(Number.POSITIVE_INFINITY);return new Kh(this.sourcePosition,e)}clone(){return new this.constructor(this.sourcePosition,this.howMany,this.targetPosition,this.graveyardPosition,this.baseVersion)}getReversed(){const e=this.targetPosition._getTransformedByMergeOperation(this);const t=this.sourcePosition.path.slice(0,-1);const n=new qh(this.sourcePosition.root,t)._getTransformedByMergeOperation(this);const i=new lm(e,this.howMany,this.graveyardPosition,this.baseVersion+1);i.insertionPosition=n;return i}_validate(){const e=this.sourcePosition.parent;const t=this.targetPosition.parent;if(!e.parent){throw new ss["b"]("merge-operation-source-position-invalid: Merge source position is invalid.",this)}else if(!t.parent){throw new ss["b"]("merge-operation-target-position-invalid: Merge target position is invalid.",this)}else if(this.howMany!=e.maxOffset){throw new ss["b"]("merge-operation-how-many-invalid: Merge operation specifies wrong number of nodes to move.",this)}}_execute(){const e=this.sourcePosition.parent;const t=Kh._createIn(e);Gg(t,this.targetPosition);Gg(Kh._createOn(e),this.graveyardPosition)}toJSON(){const e=super.toJSON();e.sourcePosition=e.sourcePosition.toJSON();e.targetPosition=e.targetPosition.toJSON();e.graveyardPosition=e.graveyardPosition.toJSON();return e}static get className(){return"MergeOperation"}static fromJSON(e,t){const n=qh.fromJSON(e.sourcePosition,t);const i=qh.fromJSON(e.targetPosition,t);const o=qh.fromJSON(e.graveyardPosition,t);return new this(n,e.howMany,i,o,e.baseVersion)}}class lm extends Hg{constructor(e,t,n,i){super(i);this.splitPosition=e.clone();this.splitPosition.stickiness="toNext";this.howMany=t;this.insertionPosition=lm.getInsertionPosition(e);this.insertionPosition.stickiness="toNone";this.graveyardPosition=n?n.clone():null;if(this.graveyardPosition){this.graveyardPosition.stickiness="toNext"}}get type(){return"split"}get moveTargetPosition(){const e=this.insertionPosition.path.slice();e.push(0);return new qh(this.insertionPosition.root,e)}get movedRange(){const e=this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);return new Kh(this.splitPosition,e)}clone(){const e=new this.constructor(this.splitPosition,this.howMany,this.graveyardPosition,this.baseVersion);e.insertionPosition=this.insertionPosition;return e}getReversed(){const e=this.splitPosition.root.document.graveyard;const t=new qh(e,[0]);return new cm(this.moveTargetPosition,this.howMany,this.splitPosition,t,this.baseVersion+1)}_validate(){const e=this.splitPosition.parent;const t=this.splitPosition.offset;if(!e||e.maxOffset{for(const t of e.getAttributeKeys()){this.removeAttribute(t,e)}};if(!(e instanceof Kh)){t(e)}else{for(const n of e.getItems()){t(n)}}}move(e,t,n){this._assertWriterUsedCorrectly();if(!(e instanceof Kh)){throw new ss["b"]("writer-move-invalid-range: Invalid range to move.",this)}if(!e.isFlat){throw new ss["b"]("writer-move-range-not-flat: Range to move is not flat.",this)}const i=qh._createAt(t,n);if(i.isEqual(e.start)){return}this._addOperationForAffectedMarkers("move",e);if(!pm(e.root,i.root)){throw new ss["b"]("writer-move-different-document: Range is going to be moved between different documents.",this)}const o=e.root.document?e.root.document.version:null;const r=new im(e.start,e.end.offset-e.start.offset,i,o);this.batch.addOperation(r);this.model.applyOperation(r)}remove(e){this._assertWriterUsedCorrectly();const t=e instanceof Kh?e:Kh._createOn(e);const n=t.getMinimalFlatRanges().reverse();for(const e of n){this._addOperationForAffectedMarkers("move",e);mm(e.start,e.end.offset-e.start.offset,this.batch,this.model)}}merge(e){this._assertWriterUsedCorrectly();const t=e.nodeBefore;const n=e.nodeAfter;this._addOperationForAffectedMarkers("merge",e);if(!(t instanceof Fh)){throw new ss["b"]("writer-merge-no-element-before: Node before merge position must be an element.",this)}if(!(n instanceof Fh)){throw new ss["b"]("writer-merge-no-element-after: Node after merge position must be an element.",this)}if(!e.root.document){this._mergeDetached(e)}else{this._merge(e)}}createPositionFromPath(e,t,n){return this.model.createPositionFromPath(e,t,n)}createPositionAt(e,t){return this.model.createPositionAt(e,t)}createPositionAfter(e){return this.model.createPositionAfter(e)}createPositionBefore(e){return this.model.createPositionBefore(e)}createRange(e,t){return this.model.createRange(e,t)}createRangeIn(e){return this.model.createRangeIn(e)}createRangeOn(e){return this.model.createRangeOn(e)}createSelection(e,t,n){return this.model.createSelection(e,t,n)}_mergeDetached(e){const t=e.nodeBefore;const n=e.nodeAfter;this.move(Kh._createIn(n),qh._createAt(t,"end"));this.remove(n)}_merge(e){const t=qh._createAt(e.nodeBefore,"end");const n=qh._createAt(e.nodeAfter,0);const i=e.root.document.graveyard;const o=new qh(i,[0]);const r=e.root.document.version;const s=new cm(n,e.nodeAfter.maxOffset,t,o,r);this.batch.addOperation(s);this.model.applyOperation(s)}rename(e,t){this._assertWriterUsedCorrectly();if(!(e instanceof Fh)){throw new ss["b"]("writer-rename-not-element-instance: Trying to rename an object which is not an instance of Element.",this)}const n=e.root.document?e.root.document.version:null;const i=new sm(qh._createBefore(e),e.name,t,n);this.batch.addOperation(i);this.model.applyOperation(i)}split(e,t){this._assertWriterUsedCorrectly();let n=e.parent;if(!n.parent){throw new ss["b"]("writer-split-element-no-parent: Element with no parent can not be split.",this)}if(!t){t=n.parent}if(!e.parent.getAncestors({includeSelf:true}).includes(t)){throw new ss["b"]("writer-split-invalid-limit-element: Limit element is not a position ancestor.",this)}let i,o;do{const t=n.root.document?n.root.document.version:null;const r=n.maxOffset-e.offset;const s=new lm(e,r,null,t);this.batch.addOperation(s);this.model.applyOperation(s);if(!i&&!o){i=n;o=e.parent.nextSibling}e=this.createPositionAfter(e.parent);n=e.parent}while(n!==t);return{position:e,range:new Kh(qh._createAt(i,"end"),qh._createAt(o,0))}}wrap(e,t){this._assertWriterUsedCorrectly();if(!e.isFlat){throw new ss["b"]("writer-wrap-range-not-flat: Range to wrap is not flat.",this)}const n=t instanceof Fh?t:new Fh(t);if(n.childCount>0){throw new ss["b"]("writer-wrap-element-not-empty: Element to wrap with is not empty.",this)}if(n.parent!==null){throw new ss["b"]("writer-wrap-element-attached: Element to wrap with is already attached to tree model.",this)}this.insert(n,e.start);const i=new Kh(e.start.getShiftedBy(1),e.end.getShiftedBy(1));this.move(i,qh._createAt(n,0))}unwrap(e){this._assertWriterUsedCorrectly();if(e.parent===null){throw new ss["b"]("writer-unwrap-element-no-parent: Trying to unwrap an element which has no parent.",this)}this.move(Kh._createIn(e),this.createPositionAfter(e));this.remove(e)}addMarker(e,t){this._assertWriterUsedCorrectly();if(!t||typeof t.usingOperation!="boolean"){throw new ss["b"]("writer-addMarker-no-usingOperation: The options.usingOperation parameter is required when adding a new marker.",this)}const n=t.usingOperation;const i=t.range;const o=t.affectsData===undefined?false:t.affectsData;if(this.model.markers.has(e)){throw new ss["b"]("writer-addMarker-marker-exists: Marker with provided name already exists.",this)}if(!i){throw new ss["b"]("writer-addMarker-no-range: Range parameter is required when adding a new marker.",this)}if(!n){return this.model.markers._set(e,i,n,o)}gm(this,e,null,i,o);return this.model.markers.get(e)}updateMarker(e,t){this._assertWriterUsedCorrectly();const n=typeof e=="string"?e:e.name;const i=this.model.markers.get(n);if(!i){throw new ss["b"]("writer-updateMarker-marker-not-exists: Marker with provided name does not exists.",this)}if(!t){this.model.markers._refresh(i);return}const o=typeof t.usingOperation=="boolean";const r=typeof t.affectsData=="boolean";const s=r?t.affectsData:i.affectsData;if(!o&&!t.range&&!r){throw new ss["b"]("writer-updateMarker-wrong-options: One of the options is required - provide range, usingOperations or affectsData.",this)}const a=i.getRange();const c=t.range?t.range:a;if(o&&t.usingOperation!==i.managedUsingOperations){if(t.usingOperation){gm(this,n,null,c,s)}else{gm(this,n,a,null,s);this.model.markers._set(n,c,undefined,s)}return}if(i.managedUsingOperations){gm(this,n,a,c,s)}else{this.model.markers._set(n,c,undefined,s)}}removeMarker(e){this._assertWriterUsedCorrectly();const t=typeof e=="string"?e:e.name;if(!this.model.markers.has(t)){throw new ss["b"]("writer-removeMarker-no-marker: Trying to remove marker which does not exist.",this)}const n=this.model.markers.get(t);if(!n.managedUsingOperations){this.model.markers._remove(t);return}const i=n.getRange();gm(this,t,i,null,n.affectsData)}setSelection(e,t,n){this._assertWriterUsedCorrectly();this.model.document.selection._setTo(e,t,n)}setSelectionFocus(e,t){this._assertWriterUsedCorrectly();this.model.document.selection._setFocus(e,t)}setSelectionAttribute(e,t){this._assertWriterUsedCorrectly();if(typeof e==="string"){this._setSelectionAttribute(e,t)}else{for(const[t,n]of Ws(e)){this._setSelectionAttribute(t,n)}}}removeSelectionAttribute(e){this._assertWriterUsedCorrectly();if(typeof e==="string"){this._removeSelectionAttribute(e)}else{for(const t of e){this._removeSelectionAttribute(t)}}}overrideSelectionGravity(){return this.model.document.selection._overrideGravity()}restoreSelectionGravity(e){this.model.document.selection._restoreGravity(e)}_setSelectionAttribute(e,t){const n=this.model.document.selection;if(n.isCollapsed&&n.anchor.parent.isEmpty){const i=ff._getStoreAttributeKey(e);this.setAttribute(i,t,n.anchor.parent)}n._setAttribute(e,t)}_removeSelectionAttribute(e){const t=this.model.document.selection;if(t.isCollapsed&&t.anchor.parent.isEmpty){const n=ff._getStoreAttributeKey(e);this.removeAttribute(n,t.anchor.parent)}t._removeAttribute(e)}_assertWriterUsedCorrectly(){if(this.model._currentWriter!==this){throw new ss["b"]("writer-incorrect-use: Trying to use a writer outside the change() block.",this)}}_addOperationForAffectedMarkers(e,t){for(const n of this.model.markers){if(!n.managedUsingOperations){continue}const i=n.getRange();let o=false;if(e==="move"){o=t.containsPosition(i.start)||t.start.isEqual(i.start)||t.containsPosition(i.end)||t.end.isEqual(i.end)}else{const e=t.nodeBefore;const n=t.nodeAfter;const r=i.start.parent==e&&i.start.isAtEnd;const s=i.end.parent==n&&i.end.offset==0;const a=i.end.nodeAfter==n;const c=i.start.nodeAfter==n;o=r||s||a||c}if(o){this.updateMarker(n.name,{range:i})}}}}function hm(e,t,n,i){const o=e.model;const r=o.document;let s=i.start;let a;let c;let l;for(const e of i.getWalker({shallow:true})){l=e.item.getAttribute(t);if(a&&c!=l){if(c!=n){d()}s=a}a=e.nextPosition;c=l}if(a instanceof qh&&a!=s&&c!=n){d()}function d(){const i=new Kh(s,a);const l=i.root.document?r.version:null;const d=new tm(i,t,c,n,l);e.batch.addOperation(d);o.applyOperation(d)}}function fm(e,t,n,i){const o=e.model;const r=o.document;const s=i.getAttribute(t);let a,c;if(s!=n){const l=i.root===i;if(l){const e=i.document?r.version:null;c=new am(i,t,s,n,e)}else{a=new Kh(qh._createBefore(i),e.createPositionAfter(i));const o=a.root.document?r.version:null;c=new tm(a,t,s,n,o)}e.batch.addOperation(c);o.applyOperation(c)}}function gm(e,t,n,i,o){const r=e.model;const s=r.document;const a=new rm(t,n,i,r.markers,o,s.version);e.batch.addOperation(a);r.applyOperation(a)}function mm(e,t,n,i){let o;if(e.root.document){const n=i.document;const r=new qh(n.graveyard,[0]);o=new im(e,t,r,n.version)}else{o=new nm(e,t)}n.addOperation(o);i.applyOperation(o)}function pm(e,t){if(e===t){return true}if(e instanceof dm&&t instanceof dm){return true}return false}class bm{constructor(e){this._markerCollection=e;this._changesInElement=new Map;this._elementSnapshots=new Map;this._changedMarkers=new Map;this._changeCount=0;this._cachedChanges=null;this._cachedChangesWithGraveyard=null}get isEmpty(){return this._changesInElement.size==0&&this._changedMarkers.size==0}refreshItem(e){if(this._isInInsertedElement(e.parent)){return}this._markRemove(e.parent,e.startOffset,e.offsetSize);this._markInsert(e.parent,e.startOffset,e.offsetSize);const t=Kh._createOn(e);for(const e of this._markerCollection.getMarkersIntersectingRange(t)){const t=e.getRange();this.bufferMarkerChange(e.name,t,t,e.affectsData)}this._cachedChanges=null}bufferOperation(e){switch(e.type){case"insert":{if(this._isInInsertedElement(e.position.parent)){return}this._markInsert(e.position.parent,e.position.offset,e.nodes.maxOffset);break}case"addAttribute":case"removeAttribute":case"changeAttribute":{for(const t of e.range.getItems({shallow:true})){if(this._isInInsertedElement(t.parent)){continue}this._markAttribute(t)}break}case"remove":case"move":case"reinsert":{if(e.sourcePosition.isEqual(e.targetPosition)||e.sourcePosition.getShiftedBy(e.howMany).isEqual(e.targetPosition)){return}const t=this._isInInsertedElement(e.sourcePosition.parent);const n=this._isInInsertedElement(e.targetPosition.parent);if(!t){this._markRemove(e.sourcePosition.parent,e.sourcePosition.offset,e.howMany)}if(!n){this._markInsert(e.targetPosition.parent,e.getMovedRangeStart().offset,e.howMany)}break}case"rename":{if(this._isInInsertedElement(e.position.parent)){return}this._markRemove(e.position.parent,e.position.offset,1);this._markInsert(e.position.parent,e.position.offset,1);const t=Kh._createFromPositionAndShift(e.position,1);for(const e of this._markerCollection.getMarkersIntersectingRange(t)){const t=e.getRange();this.bufferMarkerChange(e.name,t,t,e.affectsData)}break}case"split":{const t=e.splitPosition.parent;if(!this._isInInsertedElement(t)){this._markRemove(t,e.splitPosition.offset,e.howMany)}if(!this._isInInsertedElement(e.insertionPosition.parent)){this._markInsert(e.insertionPosition.parent,e.insertionPosition.offset,1)}if(e.graveyardPosition){this._markRemove(e.graveyardPosition.parent,e.graveyardPosition.offset,1)}break}case"merge":{const t=e.sourcePosition.parent;if(!this._isInInsertedElement(t.parent)){this._markRemove(t.parent,t.startOffset,1)}const n=e.graveyardPosition.parent;this._markInsert(n,e.graveyardPosition.offset,1);const i=e.targetPosition.parent;if(!this._isInInsertedElement(i)){this._markInsert(i,e.targetPosition.offset,t.maxOffset)}break}}this._cachedChanges=null}bufferMarkerChange(e,t,n,i){const o=this._changedMarkers.get(e);if(!o){this._changedMarkers.set(e,{oldRange:t,newRange:n,affectsData:i})}else{o.newRange=n;o.affectsData=i;if(o.oldRange==null&&o.newRange==null){this._changedMarkers.delete(e)}}}getMarkersToRemove(){const e=[];for(const[t,n]of this._changedMarkers){if(n.oldRange!=null){e.push({name:t,range:n.oldRange})}}return e}getMarkersToAdd(){const e=[];for(const[t,n]of this._changedMarkers){if(n.newRange!=null){e.push({name:t,range:n.newRange})}}return e}getChangedMarkers(){return Array.from(this._changedMarkers).map(e=>({name:e[0],data:{oldRange:e[1].oldRange,newRange:e[1].newRange}}))}hasDataChanges(){for(const[,e]of this._changedMarkers){if(e.affectsData){return true}}return this._changesInElement.size>0}getChanges(e={includeChangesInGraveyard:false}){if(this._cachedChanges){if(e.includeChangesInGraveyard){return this._cachedChangesWithGraveyard.slice()}else{return this._cachedChanges.slice()}}const t=[];for(const e of this._changesInElement.keys()){const n=this._changesInElement.get(e).sort((e,t)=>{if(e.offset===t.offset){if(e.type!=t.type){return e.type=="remove"?-1:1}return 0}return e.offset{if(e.position.root!=t.position.root){return e.position.root.rootNamen.offset){if(i>o){const e={type:"attribute",offset:o,howMany:i-o,count:this._changeCount++};this._handleChange(e,t);t.push(e)}e.nodesToHandle=n.offset-e.offset;e.howMany=e.nodesToHandle}else if(e.offset>=n.offset&&e.offseto){e.nodesToHandle=i-o;e.offset=o}else{e.nodesToHandle=0}}}if(n.type=="remove"){if(e.offsetn.offset){const o={type:"attribute",offset:n.offset,howMany:i-n.offset,count:this._changeCount++};this._handleChange(o,t);t.push(o);e.nodesToHandle=n.offset-e.offset;e.howMany=e.nodesToHandle}}if(n.type=="attribute"){if(e.offset>=n.offset&&i<=o){e.nodesToHandle=0;e.howMany=0;e.offset=0}else if(e.offset<=n.offset&&i>=o){n.howMany=0}}}}e.howMany=e.nodesToHandle;delete e.nodesToHandle}_getInsertDiff(e,t,n){return{type:"insert",position:qh._createAt(e,t),name:n,length:1,changeCount:this._changeCount++}}_getRemoveDiff(e,t,n){return{type:"remove",position:qh._createAt(e,t),name:n,length:1,changeCount:this._changeCount++}}_getAttributesDiff(e,t,n){const i=[];n=new Map(n);for(const[o,r]of t){const t=n.has(o)?n.get(o):null;if(t!==r){i.push({type:"attribute",position:e.start,range:e.clone(),length:1,attributeKey:o,attributeOldValue:r,attributeNewValue:t,changeCount:this._changeCount++})}n.delete(o)}for(const[t,o]of n){i.push({type:"attribute",position:e.start,range:e.clone(),length:1,attributeKey:t,attributeOldValue:null,attributeNewValue:o,changeCount:this._changeCount++})}return i}_isInInsertedElement(e){const t=e.parent;if(!t){return false}const n=this._changesInElement.get(t);const i=e.startOffset;if(n){for(const e of n){if(e.type=="insert"&&i>=e.offset&&ii){for(let t=0;t{const n=t[0];if(n.isDocumentOperation&&n.baseVersion!==this.version){throw new ss["b"]("model-document-applyOperation-wrong-version: Only operations with matching versions can be applied.",this,{operation:n})}},{priority:"highest"});this.listenTo(e,"applyOperation",(e,t)=>{const n=t[0];if(n.isDocumentOperation){this.differ.bufferOperation(n)}},{priority:"high"});this.listenTo(e,"applyOperation",(e,t)=>{const n=t[0];if(n.isDocumentOperation){this.version++;this.history.addOperation(n)}},{priority:"low"});this.listenTo(this.selection,"change",()=>{this._hasSelectionChangedFromTheLastChangeBlock=true});this.listenTo(e.markers,"update",(e,t,n,i)=>{this.differ.bufferMarkerChange(t.name,n,i,t.affectsData);if(n===null){t.on("change",(e,n)=>{this.differ.bufferMarkerChange(t.name,n,t.getRange(),t.affectsData)})}})}get graveyard(){return this.getRoot(Sm)}createRoot(e="$root",t="main"){if(this.roots.get(t)){throw new ss["b"]("model-document-createRoot-name-exists: Root with specified name already exists.",this,{name:t})}const n=new dm(this,e,t);this.roots.add(n);return n}destroy(){this.selection.destroy();this.stopListening()}getRoot(e="main"){return this.roots.get(e)}getRootNames(){return Array.from(this.roots,e=>e.rootName).filter(e=>e!=Sm)}registerPostFixer(e){this._postFixers.add(e)}toJSON(){const e=zs(this);e.selection="[engine.model.DocumentSelection]";e.model="[engine.model.Model]";return e}_handleChangeBlock(e){if(this._hasDocumentChangedFromTheLastChangeBlock()){this._callPostFixers(e);this.selection.refresh();if(this.differ.hasDataChanges()){this.fire("change:data",e.batch)}else{this.fire("change",e.batch)}this.selection.refresh();this.differ.reset()}this._hasSelectionChangedFromTheLastChangeBlock=false}_hasDocumentChangedFromTheLastChangeBlock(){return!this.differ.isEmpty||this._hasSelectionChangedFromTheLastChangeBlock}_getDefaultRoot(){for(const e of this.roots){if(e!==this.graveyard){return e}}return this.graveyard}_getDefaultRange(){const e=this._getDefaultRoot();const t=this.model;const n=t.schema;const i=t.createPositionFromPath(e,[0]);const o=n.getNearestSelectionRange(i);return o||t.createRange(i)}_validateSelectionRange(e){return Em(e.start)&&Em(e.end)}_callPostFixers(e){let t=false;do{for(const n of this._postFixers){this.selection.refresh();t=n(e);if(t){break}}}while(t)}}ys(Pm,ds);function Em(e){const t=e.textNode;if(t){const n=t.data;const i=e.offset-t.startOffset;return!Am(n,i)&&!Tm(n,i)}return true}class Mm{constructor(){this._markers=new Map}[Symbol.iterator](){return this._markers.values()}has(e){return this._markers.has(e)}get(e){return this._markers.get(e)||null}_set(e,t,n=false,i=false){const o=e instanceof Im?e.name:e;const r=this._markers.get(o);if(r){const e=r.getRange();let s=false;if(!e.isEqual(t)){r._attachLiveRange(cf.fromRange(t));s=true}if(n!=r.managedUsingOperations){r._managedUsingOperations=n;s=true}if(typeof i==="boolean"&&i!=r.affectsData){r._affectsData=i;s=true}if(s){this.fire("update:"+o,r,e,t)}return r}const s=cf.fromRange(t);const a=new Im(o,s,n,i);this._markers.set(o,a);this.fire("update:"+o,a,null,t);return a}_remove(e){const t=e instanceof Im?e.name:e;const n=this._markers.get(t);if(n){this._markers.delete(t);this.fire("update:"+t,n,n.getRange(),null);this._destroyMarker(n);return true}return false}_refresh(e){const t=e instanceof Im?e.name:e;const n=this._markers.get(t);if(!n){throw new ss["b"]("markercollection-refresh-marker-not-exists: Marker with provided name does not exists.",this)}const i=n.getRange();this.fire("update:"+t,n,i,i,n.managedUsingOperations,n.affectsData)}*getMarkersAtPosition(e){for(const t of this){if(t.getRange().containsPosition(e)){yield t}}}*getMarkersIntersectingRange(e){for(const t of this){if(t.getRange().getIntersection(e)!==null){yield t}}}destroy(){for(const e of this._markers.values()){this._destroyMarker(e)}this._markers=null;this.stopListening()}*getMarkersGroup(e){for(const t of this._markers.values()){if(t.name.startsWith(e+":")){yield t}}}_destroyMarker(e){e.stopListening();e._detachLiveRange()}}ys(Mm,ds);class Im{constructor(e,t,n,i){this.name=e;this._liveRange=this._attachLiveRange(t);this._managedUsingOperations=n;this._affectsData=i}get managedUsingOperations(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._managedUsingOperations}get affectsData(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._affectsData}getStart(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._liveRange.start.clone()}getEnd(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._liveRange.end.clone()}getRange(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._liveRange.toRange()}is(e){return e==="marker"||e==="model:marker"}_attachLiveRange(e){if(this._liveRange){this._detachLiveRange()}e.delegate("change:range").to(this);e.delegate("change:content").to(this);this._liveRange=e;return e}_detachLiveRange(){this._liveRange.stopDelegating("change:range",this);this._liveRange.stopDelegating("change:content",this);this._liveRange.detach();this._liveRange=null}}ys(Im,ds);class Nm extends Hg{get type(){return"noop"}clone(){return new Nm(this.baseVersion)}getReversed(){return new Nm(this.baseVersion+1)}_execute(){}static get className(){return"NoOperation"}}const Om={};Om[tm.className]=tm;Om[om.className]=om;Om[rm.className]=rm;Om[im.className]=im;Om[Nm.className]=Nm;Om[Hg.className]=Hg;Om[sm.className]=sm;Om[am.className]=am;Om[lm.className]=lm;Om[cm.className]=cm;class Rm{static fromJSON(e,t){return Om[e.__className].fromJSON(e,t)}}class Vm extends qh{constructor(e,t,n="toNone"){super(e,t,n);if(!this.root.is("rootElement")){throw new ss["b"]("model-liveposition-root-not-rootelement: LivePosition's root has to be an instance of RootElement.",e)}Dm.call(this)}detach(){this.stopListening()}is(e){return e==="livePosition"||e==="model:livePosition"||e=="position"||e==="model:position"}toPosition(){return new qh(this.root,this.path.slice(),this.stickiness)}static fromPosition(e,t){return new this(e.root,e.path.slice(),t?t:e.stickiness)}}function Dm(){this.listenTo(this.root.document.model,"applyOperation",(e,t)=>{const n=t[0];if(!n.isDocumentOperation){return}Lm.call(this,n)},{priority:"low"})}function Lm(e){const t=this.getTransformedByOperation(e);if(!this.isEqual(t)){const e=this.toPosition();this.path=t.path;this.root=t.root;this.fire("change",e)}}ys(Vm,ds);function zm(e,t,n,i){return e.change(o=>{let r;if(!n){r=e.document.selection}else if(n instanceof tf||n instanceof ff){r=n}else{r=o.createSelection(n,i)}if(!r.isCollapsed){e.deleteContent(r,{doNotAutoparagraph:true})}const s=new Bm(e,o,r.anchor);let a;if(t.is("documentFragment")){a=t.getChildren()}else{a=[t]}s.handleNodes(a,{isFirst:true,isLast:true});const c=s.getSelectionRange();if(c){if(r instanceof ff){o.setSelection(c)}else{r.setTo(c)}}else{}const l=s.getAffectedRange()||e.createRange(r.anchor);s.destroy();return l})}class Bm{constructor(e,t,n){this.model=e;this.writer=t;this.position=n;this.canMergeWith=new Set([this.position.parent]);this.schema=e.schema;this._filterAttributesOf=[];this._affectedStart=null;this._affectedEnd=null}handleNodes(e,t){e=Array.from(e);for(let n=0;n{if(!n.doNotResetEntireContent&&$m(o,t)){qm(e,t,o);return}const r=i.start;const s=Vm.fromPosition(i.end,"toNext");if(!i.start.isTouching(i.end)){e.remove(i)}if(!n.leaveUnmerged){Fm(e,r,s);o.removeDisallowedAttributes(r.parent.getChildren(),e)}Gm(e,t,r);if(!n.doNotAutoparagraph&&Hm(o,r)){Um(e,r,t)}s.detach()})}function Fm(e,t,n){const i=t.parent;const o=n.parent;if(i==o){return}if(e.model.schema.isLimit(i)||e.model.schema.isLimit(o)){return}if(!Wm(t,n,e.model.schema)){return}t=e.createPositionAfter(i);n=e.createPositionBefore(o);if(!n.isEqual(t)){e.insert(o,t)}e.merge(t);while(n.parent.isEmpty){const t=n.parent;n=e.createPositionBefore(t);e.remove(t)}Fm(e,t,n)}function Hm(e,t){const n=e.checkChild(t,"$text");const i=e.checkChild(t,"paragraph");return!n&&i}function Wm(e,t,n){const i=new Kh(e,t);for(const e of i.getWalker()){if(n.isLimit(e.item)){return false}}return true}function Um(e,t,n){const i=e.createElement("paragraph");e.insert(i,t);Gm(e,n,e.createPositionAt(i,0))}function qm(e,t){const n=e.model.schema.getLimitElement(t);e.remove(e.createRangeIn(n));Um(e,e.createPositionAt(n,0),t)}function $m(e,t){const n=e.getLimitElement(t);if(!t.containsEntireContent(n)){return false}const i=t.getFirstRange();if(i.start.parent==i.end.parent){return false}return e.checkChild(n,"paragraph")}function Gm(e,t,n){if(t instanceof ff){e.setSelection(n)}else{t.setTo(n)}}const Ym=' ,.?!:;"-()';function Km(e,t,n={}){const i=e.schema;const o=n.direction!="backward";const r=n.unit?n.unit:"character";const s=t.focus;const a=new Wh({boundaries:Xm(s,o),singleCharacters:true,direction:o?"forward":"backward"});const c={walker:a,schema:i,isForward:o,unit:r};let l;while(l=a.next()){if(l.done){return}const n=Qm(c,l.value);if(n){if(t instanceof ff){e.change(e=>{e.setSelectionFocus(n)})}else{t.setFocus(n)}return}}}function Qm(e,t){if(t.type=="text"){if(e.unit==="word"){return Zm(e.walker,e.isForward)}return Jm(e.walker,e.unit,e.isForward)}if(t.type==(e.isForward?"elementStart":"elementEnd")){if(e.schema.isObject(t.item)){return qh._createAt(t.item,e.isForward?"after":"before")}if(e.schema.checkChild(t.nextPosition,"$text")){return t.nextPosition}}else{if(e.schema.isLimit(t.item)){e.walker.skip(()=>true);return}if(e.schema.checkChild(t.nextPosition,"$text")){return t.nextPosition}}}function Jm(e,t){const n=e.position.textNode;if(n){const i=n.data;let o=e.position.offset-n.startOffset;while(Am(i,o)||t=="character"&&Tm(i,o)){e.next();o=e.position.offset-n.startOffset}}return e.position}function Zm(e,t){let n=e.position.textNode;if(n){let i=e.position.offset-n.startOffset;while(!ep(n.data,i,t)&&!tp(n,i,t)){e.next();const o=t?e.position.nodeAfter:e.position.nodeBefore;if(o&&o.is("text")){const i=o.data.charAt(t?0:o.data.length-1);if(!Ym.includes(i)){e.next();n=e.position.textNode}}i=e.position.offset-n.startOffset}}return e.position}function Xm(e,t){const n=e.root;const i=qh._createAt(n,t?"end":0);if(t){return new Kh(e,i)}else{return new Kh(i,e)}}function ep(e,t,n){const i=t+(n?0:-1);return Ym.includes(e.charAt(i))}function tp(e,t,n){return t===(n?e.endOffset:0)}function np(e,t){return e.change(e=>{const n=e.createDocumentFragment();const i=t.getFirstRange();if(!i||i.isCollapsed){return n}const o=i.start.root;const r=i.start.getCommonPath(i.end);const s=o.getNodeByPath(r);let a;if(i.start.parent==i.end.parent){a=i}else{a=e.createRange(e.createPositionAt(s,i.start.path[r.length]),e.createPositionAt(s,i.end.path[r.length]+1))}const c=a.end.offset-a.start.offset;for(const t of a.getItems({shallow:true})){if(t.is("textProxy")){e.appendText(t.data,t.getAttributes(),n)}else{e.append(t._clone(true),n)}}if(a!=i){const t=i._getTransformedByMove(a.start,e.createPositionAt(n,0),c)[0];const o=e.createRange(e.createPositionAt(n,0),t.start);const r=e.createRange(t.end,e.createPositionAt(n,"end"));ip(r,e);ip(o,e)}return n})}function ip(e,t){const n=[];Array.from(e.getItems({direction:"backward"})).map(e=>t.createRangeOn(e)).filter(t=>{const n=(t.start.isAfter(e.start)||t.start.isEqual(e.start))&&(t.end.isBefore(e.end)||t.end.isEqual(e.end));return n}).forEach(e=>{n.push(e.start.parent);t.remove(e)});n.forEach(e=>{let n=e;while(n.parent&&n.isEmpty){const e=t.createRangeOn(n);n=n.parent;t.remove(e)}})}function op(e){e.document.registerPostFixer(t=>rp(t,e))}function rp(e,t){const n=t.document.selection;const i=t.schema;const o=[];let r=false;for(const e of n.getRanges()){const t=sp(e,i);if(t){o.push(t);r=true}else{o.push(e)}}if(r){e.setSelection(up(o),{backward:n.isBackward})}}function sp(e,t){if(e.isCollapsed){return ap(e,t)}return cp(e,t)}function ap(e,t){const n=e.start;const i=t.getNearestSelectionRange(n);if(!i){return null}if(!i.isCollapsed){return i}const o=i.start;if(n.isEqual(o)){return null}return new Kh(o)}function cp(e,t){const n=e.start;const i=e.end;const o=t.checkChild(n,"$text");const r=t.checkChild(i,"$text");const s=t.getLimitElement(n);const a=t.getLimitElement(i);if(s===a){if(o&&r){return null}if(dp(n,i,t)){const e=n.nodeAfter&&t.isObject(n.nodeAfter);const o=e?null:t.getNearestSelectionRange(n,"forward");const r=i.nodeBefore&&t.isObject(i.nodeBefore);const s=r?null:t.getNearestSelectionRange(i,"backward");const a=o?o.start:n;const c=s?s.start:i;return new Kh(a,c)}}const c=s&&!s.is("rootElement");const l=a&&!a.is("rootElement");if(c||l){const e=n.nodeAfter&&i.nodeBefore&&n.nodeAfter.parent===i.nodeBefore.parent;const o=c&&(!e||!hp(n.nodeAfter,t));const r=l&&(!e||!hp(i.nodeBefore,t));let d=n;let u=i;if(o){d=qh._createBefore(lp(s,t))}if(r){u=qh._createAfter(lp(a,t))}return new Kh(d,u)}return null}function lp(e,t){let n=e;let i=n;while(t.isLimit(i)&&i.parent){n=i;i=i.parent}return n}function dp(e,t,n){const i=e.nodeAfter&&!n.isLimit(e.nodeAfter)||n.checkChild(e,"$text");const o=t.nodeBefore&&!n.isLimit(t.nodeBefore)||n.checkChild(t,"$text");return i||o}function up(e){const t=[];t.push(e.shift());for(const n of e){const e=t.pop();if(n.isIntersecting(e)){const i=e.start.isAfter(n.start)?n.start:e.start;const o=e.end.isAfter(n.end)?e.end:n.end;const r=new Kh(i,o);t.push(r)}else{t.push(e);t.push(n)}}return t}function hp(e,t){return e&&t.isObject(e)}class fp{constructor(){this.markers=new Mm;this.document=new Pm(this);this.schema=new mg;this._pendingChanges=[];this._currentWriter=null;["insertContent","deleteContent","modifySelection","getSelectedContent","applyOperation"].forEach(e=>this.decorate(e));this.on("applyOperation",(e,t)=>{const n=t[0];n._validate()},{priority:"highest"});this.schema.register("$root",{isLimit:true});this.schema.register("$block",{allowIn:"$root",isBlock:true});this.schema.register("$text",{allowIn:"$block",isInline:true});this.schema.register("$clipboardHolder",{allowContentOf:"$root",isLimit:true});this.schema.extend("$text",{allowIn:"$clipboardHolder"});this.schema.register("$marker");this.schema.addChildCheck((e,t)=>{if(t.name==="$marker"){return true}});op(this)}change(e){try{if(this._pendingChanges.length===0){this._pendingChanges.push({batch:new Fg,callback:e});return this._runPendingChanges()[0]}else{return e(this._currentWriter)}}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}enqueueChange(e,t){try{if(typeof e==="string"){e=new Fg(e)}else if(typeof e=="function"){t=e;e=new Fg}this._pendingChanges.push({batch:e,callback:t});if(this._pendingChanges.length==1){this._runPendingChanges()}}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}applyOperation(e){e._execute()}insertContent(e,t,n){return zm(this,e,t,n)}deleteContent(e,t){jm(this,e,t)}modifySelection(e,t){Km(this,e,t)}getSelectedContent(e){return np(this,e)}hasContent(e,t){const n=e instanceof Fh?Kh._createIn(e):e;if(n.isCollapsed){return false}for(const e of this.markers.getMarkersIntersectingRange(n)){if(e.affectsData){return true}}const{ignoreWhitespaces:i=false}=t||{};for(const e of n.getItems()){if(e.is("textProxy")){if(!i){return true}else if(e.data.search(/\S/)!==-1){return true}}else if(this.schema.isObject(e)){return true}}return false}createPositionFromPath(e,t,n){return new qh(e,t,n)}createPositionAt(e,t){return qh._createAt(e,t)}createPositionAfter(e){return qh._createAfter(e)}createPositionBefore(e){return qh._createBefore(e)}createRange(e,t){return new Kh(e,t)}createRangeIn(e){return Kh._createIn(e)}createRangeOn(e){return Kh._createOn(e)}createSelection(e,t,n){return new tf(e,t,n)}createBatch(e){return new Fg(e)}createOperationFromJSON(e){return Rm.fromJSON(e,this.document)}destroy(){this.document.destroy();this.stopListening()}_runPendingChanges(){const e=[];this.fire("_beforeChanges");while(this._pendingChanges.length){const t=this._pendingChanges[0].batch;this._currentWriter=new um(this,t);const n=this._pendingChanges[0].callback(this._currentWriter);e.push(n);this.document._handleChangeBlock(this._currentWriter);this._pendingChanges.shift();this._currentWriter=null}this.fire("_afterChanges");return e}}ys(fp,Qc);class gp{constructor(){this._listener=Object.create(Ud)}listenTo(e){this._listener.listenTo(e,"keydown",(e,t)=>{this._listener.fire("_keydown:"+Vl(t),t)})}set(e,t,n={}){const i=Dl(e);const o=n.priority;this._listener.listenTo(this._listener,"_keydown:"+i,(e,n)=>{t(n,()=>{n.preventDefault();n.stopPropagation();e.stop()});e.return=true},{priority:o})}press(e){return!!this._listener.fire("_keydown:"+Vl(e),e)}destroy(){this._listener.stopListening()}}class mp extends gp{constructor(e){super();this.editor=e}set(e,t,n={}){if(typeof t=="string"){const e=t;t=(t,n)=>{this.editor.execute(e);n()}}super.set(e,t,n)}}class pp{constructor(e={}){this._context=e.context||new Rs({language:e.language});this._context._addEditor(this,!e.context);const t=Array.from(this.constructor.builtinPlugins||[]);this.config=new Kr(e,this.constructor.defaultConfig);this.config.define("plugins",t);this.config.define(this._context._getEditorConfig());this.plugins=new Cs(this,t,this._context.plugins);this.locale=this._context.locale;this.t=this.locale.t;this.commands=new hg;this.set("state","initializing");this.once("ready",()=>this.state="ready",{priority:"high"});this.once("destroy",()=>this.state="destroyed",{priority:"high"});this.set("isReadOnly",false);this.model=new fp;const n=new Rc;this.data=new Dg(this.model,n);this.editing=new ug(this.model,n);this.editing.view.document.bind("isReadOnly").to(this);this.conversion=new zg([this.editing.downcastDispatcher,this.data.downcastDispatcher],this.data.upcastDispatcher);this.conversion.addAlias("dataDowncast",this.data.downcastDispatcher);this.conversion.addAlias("editingDowncast",this.editing.downcastDispatcher);this.keystrokes=new mp(this);this.keystrokes.listenTo(this.editing.view.document)}initPlugins(){const e=this.config;const t=e.get("plugins");const n=e.get("removePlugins")||[];const i=e.get("extraPlugins")||[];return this.plugins.init(t.concat(i),n)}destroy(){let e=Promise.resolve();if(this.state=="initializing"){e=new Promise(e=>this.once("ready",e))}return e.then(()=>{this.fire("destroy");this.stopListening();this.commands.destroy()}).then(()=>this.plugins.destroy()).then(()=>{this.model.destroy();this.data.destroy();this.editing.destroy();this.keystrokes.destroy()}).then(()=>this._context._removeEditor(this))}execute(...e){try{this.commands.execute(...e)}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}}ys(pp,Qc);const bp={setData(e){this.data.set(e)},getData(e){return this.data.get(e)}};var wp=bp;function kp(e,t){if(e instanceof HTMLTextAreaElement){e.value=t}e.innerHTML=t}const _p={updateSourceElement(){if(!this.sourceElement){throw new ss["b"]("editor-missing-sourceelement: Cannot update the source element of a detached editor.",this)}kp(this.sourceElement,this.data.get())}};var vp=_p;function yp(e){if(!ge(e.updateSourceElement)){throw new ss["b"]("attachtoform-missing-elementapi-interface: Editor passed to attachToForm() must implement ElementApi.",e)}const t=e.sourceElement;if(t&&t.tagName.toLowerCase()==="textarea"&&t.form){let n;const i=t.form;const o=()=>e.updateSourceElement();if(ge(i.submit)){n=i.submit;i.submit=()=>{o();n.apply(i)}}i.addEventListener("submit",o);e.on("destroy",()=>{i.removeEventListener("submit",o);if(n){i.submit=n}})}}class xp{getHtml(e){const t=document.implementation.createHTMLDocument("");const n=t.createElement("div");n.appendChild(e);return n.innerHTML}}class Cp{constructor(e){this._domParser=new DOMParser;this._domConverter=new Ld(e,{blockFillerMode:"nbsp"});this._htmlWriter=new xp}toData(e){const t=this._domConverter.viewToDom(e,document);return this._htmlWriter.getHtml(t)}toView(e){const t=this._toDom(e);return this._domConverter.domToView(t)}_toDom(e){const t=this._domParser.parseFromString(e,"text/html");const n=t.createDocumentFragment();const i=t.body.childNodes;while(i.length>0){n.appendChild(i[0])}return n}}class Ap{constructor(e){this.editor=e;this._components=new Map}*names(){for(const e of this._components.values()){yield e.originalName}}add(e,t){if(this.has(e)){throw new ss["b"]("componentfactory-item-exists: The item already exists in the component factory.",this,{name:e})}this._components.set(Tp(e),{callback:t,originalName:e})}create(e){if(!this.has(e)){throw new ss["b"]("componentfactory-item-missing: The required component is not registered in the factory.",this,{name:e})}return this._components.get(Tp(e)).callback(this.editor.locale)}has(e){return this._components.has(Tp(e))}}function Tp(e){return String(e).toLowerCase()}class Sp{constructor(){this.set("isFocused",false);this.set("focusedElement",null);this._elements=new Set;this._nextEventLoopTimeout=null}add(e){if(this._elements.has(e)){throw new ss["b"]("focusTracker-add-element-already-exist",this)}this.listenTo(e,"focus",()=>this._focus(e),{useCapture:true});this.listenTo(e,"blur",()=>this._blur(),{useCapture:true});this._elements.add(e)}remove(e){if(e===this.focusedElement){this._blur(e)}if(this._elements.has(e)){this.stopListening(e);this._elements.delete(e)}}destroy(){this.stopListening()}_focus(e){clearTimeout(this._nextEventLoopTimeout);this.focusedElement=e;this.isFocused=true}_blur(){clearTimeout(this._nextEventLoopTimeout);this._nextEventLoopTimeout=setTimeout(()=>{this.focusedElement=null;this.isFocused=false},0)}}ys(Sp,Ud);ys(Sp,Qc);class Pp{constructor(e){this.editor=e;this.componentFactory=new Ap(e);this.focusTracker=new Sp;this._editableElementsMap=new Map;this.listenTo(e.editing.view.document,"layoutChanged",()=>this.update())}get element(){return null}update(){this.fire("update")}destroy(){this.stopListening();this.focusTracker.destroy();for(const e of this._editableElementsMap.values()){e.ckeditorInstance=null}this._editableElementsMap=new Map}setEditableElement(e,t){this._editableElementsMap.set(e,t);if(!t.ckeditorInstance){t.ckeditorInstance=this.editor}}getEditableElement(e="main"){return this._editableElementsMap.get(e)}getEditableElementsNames(){return this._editableElementsMap.keys()}get _editableElements(){console.warn("editor-ui-deprecated-editable-elements: "+"The EditorUI#_editableElements property has been deprecated and will be removed in the near future.",{editorUI:this});return this._editableElementsMap}}ys(Pp,ds);function Ep({origin:e,originKeystrokeHandler:t,originFocusTracker:n,toolbar:i,beforeFocus:o,afterBlur:r}){n.add(i.element);t.set("Alt+F10",(e,t)=>{if(n.isFocused&&!i.focusTracker.isFocused){if(o){o()}i.focus();t()}});i.keystrokes.set("Esc",(t,n)=>{if(i.focusTracker.isFocused){e.focus();if(r){r()}n()}})}function Mp(e){if(Array.isArray(e)){return{items:e}}if(!e){return{items:[]}}return Object.assign({items:[]},e)}var Ip=n(16);const Np=new WeakMap;function Op(e){const{view:t,element:n,text:i,isDirectHost:o=true}=e;const r=t.document;if(!Np.has(r)){Np.set(r,new Map);r.registerPostFixer(e=>zp(r,e))}Np.get(r).set(n,{text:i,isDirectHost:o});t.change(e=>zp(r,e))}function Rp(e,t){const n=t.document;e.change(e=>{if(!Np.has(n)){return}const i=Np.get(n);const o=i.get(t);e.removeAttribute("data-placeholder",o.hostElement);Dp(e,o.hostElement);i.delete(t)})}function Vp(e,t){if(!t.hasClass("ck-placeholder")){e.addClass("ck-placeholder",t);return true}return false}function Dp(e,t){if(t.hasClass("ck-placeholder")){e.removeClass("ck-placeholder",t);return true}return false}function Lp(e){if(!e.isAttached()){return false}const t=!Array.from(e.getChildren()).some(e=>!e.is("uiElement"));const n=e.document;if(!n.isFocused&&t){return true}const i=n.selection;const o=i.anchor;if(t&&o&&o.parent!==e){return true}return false}function zp(e,t){const n=Np.get(e);let i=false;for(const[e,o]of n){if(Bp(t,e,o)){i=true}}return i}function Bp(e,t,n){const{text:i,isDirectHost:o}=n;const r=o?t:jp(t);let s=false;if(!r){return false}n.hostElement=r;if(r.getAttribute("data-placeholder")!==i){e.setAttribute("data-placeholder",i,r);s=true}if(Lp(r)){if(Vp(e,r)){s=true}}else if(Dp(e,r)){s=true}return s}function jp(e){if(e.childCount===1){const t=e.getChild(0);if(t.is("element")&&!t.is("uiElement")){return t}}return null}class Fp{constructor(){this._replacedElements=[]}replace(e,t){this._replacedElements.push({element:e,newElement:t});e.style.display="none";if(t){e.parentNode.insertBefore(t,e.nextSibling)}}restore(){this._replacedElements.forEach(({element:e,newElement:t})=>{e.style.display="";if(t){t.remove()}});this._replacedElements=[]}}class Hp extends Pp{constructor(e,t){super(e);this.view=t;this._toolbarConfig=Mp(e.config.get("toolbar"));this._elementReplacer=new Fp}get element(){return this.view.element}init(e){const t=this.editor;const n=this.view;const i=t.editing.view;const o=n.editable;const r=i.document.getRoot();o.name=r.rootName;n.render();const s=o.element;this.setEditableElement(o.name,s);this.focusTracker.add(s);n.editable.bind("isFocused").to(this.focusTracker);i.attachDomRoot(s);if(e){this._elementReplacer.replace(e,this.element)}this._initPlaceholder();this._initToolbar();this.fire("ready")}destroy(){const e=this.view;const t=this.editor.editing.view;this._elementReplacer.restore();t.detachDomRoot(e.editable.name);e.destroy();super.destroy()}_initToolbar(){const e=this.editor;const t=this.view;const n=e.editing.view;t.stickyPanel.bind("isActive").to(this.focusTracker,"isFocused");t.stickyPanel.limiterElement=t.element;if(this._toolbarConfig.viewportTopOffset){t.stickyPanel.viewportTopOffset=this._toolbarConfig.viewportTopOffset}t.toolbar.fillFromConfig(this._toolbarConfig.items,this.componentFactory);Ep({origin:n,originFocusTracker:this.focusTracker,originKeystrokeHandler:e.keystrokes,toolbar:t.toolbar})}_initPlaceholder(){const e=this.editor;const t=e.editing.view;const n=t.document.getRoot();const i=e.sourceElement;const o=e.config.get("placeholder")||i&&i.tagName.toLowerCase()==="textarea"&&i.getAttribute("placeholder");if(o){Op({view:t,element:n,text:o,isDirectHost:false})}}}class Wp extends xs{constructor(e=[]){super(e,{idProperty:"viewUid"});this.on("add",(e,t,n)=>{this._renderViewIntoCollectionParent(t,n)});this.on("remove",(e,t)=>{if(t.element&&this._parentElement){t.element.remove()}});this._parentElement=null}destroy(){this.map(e=>e.destroy())}setParent(e){this._parentElement=e;for(const e of this){this._renderViewIntoCollectionParent(e)}}delegate(...e){if(!e.length||!Up(e)){throw new ss["b"]("ui-viewcollection-delegate-wrong-events: All event names must be strings.",this)}return{to:t=>{for(const n of this){for(const i of e){n.delegate(i).to(t)}}this.on("add",(n,i)=>{for(const n of e){i.delegate(n).to(t)}});this.on("remove",(n,i)=>{for(const n of e){i.stopDelegating(n,t)}})}}}_renderViewIntoCollectionParent(e,t){if(!e.isRendered){e.render()}if(e.element&&this._parentElement){this._parentElement.insertBefore(e.element,this._parentElement.children[t])}}}function Up(e){return e.every(e=>typeof e=="string")}const qp="http://www.w3.org/1999/xhtml";class $p{constructor(e){Object.assign(this,ib(nb(e)));this._isRendered=false;this._revertData=null}render(){const e=this._renderNode({intoFragment:true});this._isRendered=true;return e}apply(e){this._revertData=pb();this._renderNode({node:e,isApplying:true,revertData:this._revertData});return e}revert(e){if(!this._revertData){throw new ss["b"]("ui-template-revert-not-applied: Attempting to revert a template which has not been applied yet.",[this,e])}this._revertTemplateFromNode(e,this._revertData)}*getViews(){function*e(t){if(t.children){for(const n of t.children){if(fb(n)){yield n}else if(gb(n)){yield*e(n)}}}}yield*e(this)}static bind(e,t){return{to(n,i){return new Yp({eventNameOrFunction:n,attribute:n,observable:e,emitter:t,callback:i})},if(n,i,o){return new Kp({observable:e,emitter:t,attribute:n,valueIfTrue:i,callback:o})}}}static extend(e,t){if(e._isRendered){throw new ss["b"]("template-extend-render: Attempting to extend a template which has already been rendered.",[this,e])}ub(e,ib(nb(t)))}_renderNode(e){let t;if(e.node){t=this.tag&&this.text}else{t=this.tag?this.text:!this.text}if(t){throw new ss["b"]('ui-template-wrong-syntax: Node definition must have either "tag" or "text" when rendering a new Node.',this)}if(this.text){return this._renderText(e)}else{return this._renderElement(e)}}_renderElement(e){let t=e.node;if(!t){t=e.node=document.createElementNS(this.ns||qp,this.tag)}this._renderAttributes(e);this._renderElementChildren(e);this._setUpListeners(e);return t}_renderText(e){let t=e.node;if(t){e.revertData.text=t.textContent}else{t=e.node=document.createTextNode("")}if(Qp(this.text)){this._bindToObservable({schema:this.text,updater:Xp(t),data:e})}else{t.textContent=this.text.join("")}return t}_renderAttributes(e){let t,n,i,o;if(!this.attributes){return}const r=e.node;const s=e.revertData;for(t in this.attributes){i=r.getAttribute(t);n=this.attributes[t];if(s){s.attributes[t]=i}o=ce(n[0])&&n[0].ns?n[0].ns:null;if(Qp(n)){const a=o?n[0].value:n;if(s&&bb(t)){a.unshift(i)}this._bindToObservable({schema:a,updater:eb(r,t,o),data:e})}else if(t=="style"&&typeof n[0]!=="string"){this._renderStyleAttribute(n[0],e)}else{if(s&&i&&bb(t)){n.unshift(i)}n=n.map(e=>e?e.value||e:e).reduce((e,t)=>e.concat(t),[]).reduce(lb,"");if(!hb(n)){r.setAttributeNS(o,t,n)}}}}_renderStyleAttribute(e,t){const n=t.node;for(const i in e){const o=e[i];if(Qp(o)){this._bindToObservable({schema:[o],updater:tb(n,i),data:t})}else{n.style[i]=o}}}_renderElementChildren(e){const t=e.node;const n=e.intoFragment?document.createDocumentFragment():t;const i=e.isApplying;let o=0;for(const r of this.children){if(mb(r)){if(!i){r.setParent(t);for(const e of r){n.appendChild(e.element)}}}else if(fb(r)){if(!i){if(!r.isRendered){r.render()}n.appendChild(r.element)}}else if(xd(r)){n.appendChild(r)}else{if(i){const t=e.revertData;const i=pb();t.children.push(i);r._renderNode({node:n.childNodes[o++],isApplying:true,revertData:i})}else{n.appendChild(r.render())}}}if(e.intoFragment){t.appendChild(n)}}_setUpListeners(e){if(!this.eventListeners){return}for(const t in this.eventListeners){const n=this.eventListeners[t].map(n=>{const[i,o]=t.split("@");return n.activateDomEventListener(i,o,e)});if(e.revertData){e.revertData.bindings.push(n)}}}_bindToObservable({schema:e,updater:t,data:n}){const i=n.revertData;Zp(e,t,n);const o=e.filter(e=>!hb(e)).filter(e=>e.observable).map(i=>i.activateAttributeListener(e,t,n));if(i){i.bindings.push(o)}}_revertTemplateFromNode(e,t){for(const e of t.bindings){for(const t of e){t()}}if(t.text){e.textContent=t.text;return}for(const n in t.attributes){const i=t.attributes[n];if(i===null){e.removeAttribute(n)}else{e.setAttribute(n,i)}}for(let n=0;nZp(e,t,n);this.emitter.listenTo(this.observable,"change:"+this.attribute,i);return()=>{this.emitter.stopListening(this.observable,"change:"+this.attribute,i)}}}class Yp extends Gp{activateDomEventListener(e,t,n){const i=(e,n)=>{if(!t||n.target.matches(t)){if(typeof this.eventNameOrFunction=="function"){this.eventNameOrFunction(n)}else{this.observable.fire(this.eventNameOrFunction,n)}}};this.emitter.listenTo(n.node,e,i);return()=>{this.emitter.stopListening(n.node,e,i)}}}class Kp extends Gp{getValue(e){const t=super.getValue(e);return hb(t)?false:this.valueIfTrue||true}}function Qp(e){if(!e){return false}if(e.value){e=e.value}if(Array.isArray(e)){return e.some(Qp)}else if(e instanceof Gp){return true}return false}function Jp(e,t){return e.map(e=>{if(e instanceof Gp){return e.getValue(t)}return e})}function Zp(e,t,{node:n}){let i=Jp(e,n);if(e.length==1&&e[0]instanceof Kp){i=i[0]}else{i=i.reduce(lb,"")}if(hb(i)){t.remove()}else{t.set(i)}}function Xp(e){return{set(t){e.textContent=t},remove(){e.textContent=""}}}function eb(e,t,n){return{set(i){e.setAttributeNS(n,t,i)},remove(){e.removeAttributeNS(n,t)}}}function tb(e,t){return{set(n){e.style[t]=n},remove(){e.style[t]=null}}}function nb(e){const t=$r(e,e=>{if(e&&(e instanceof Gp||gb(e)||fb(e)||mb(e))){return e}});return t}function ib(e){if(typeof e=="string"){e=sb(e)}else if(e.text){ab(e)}if(e.on){e.eventListeners=rb(e.on);delete e.on}if(!e.text){if(e.attributes){ob(e.attributes)}const t=[];if(e.children){if(mb(e.children)){t.push(e.children)}else{for(const n of e.children){if(gb(n)||fb(n)||xd(n)){t.push(n)}else{t.push(new $p(n))}}}}e.children=t}return e}function ob(e){for(const t in e){if(e[t].value){e[t].value=[].concat(e[t].value)}cb(e,t)}}function rb(e){for(const t in e){cb(e,t)}return e}function sb(e){return{text:[e]}}function ab(e){if(!Array.isArray(e.text)){e.text=[e.text]}}function cb(e,t){if(!Array.isArray(e[t])){e[t]=[e[t]]}}function lb(e,t){if(hb(t)){return e}else if(hb(e)){return t}else{return`${e} ${t}`}}function db(e,t){for(const n in t){if(e[n]){e[n].push(...t[n])}else{e[n]=t[n]}}}function ub(e,t){if(t.attributes){if(!e.attributes){e.attributes={}}db(e.attributes,t.attributes)}if(t.eventListeners){if(!e.eventListeners){e.eventListeners={}}db(e.eventListeners,t.eventListeners)}if(t.text){e.text.push(...t.text)}if(t.children&&t.children.length){if(e.children.length!=t.children.length){throw new ss["b"]("ui-template-extend-children-mismatch: The number of children in extended definition does not match.",e)}let n=0;for(const i of t.children){ub(e.children[n++],i)}}}function hb(e){return!e&&e!==0}function fb(e){return e instanceof kb}function gb(e){return e instanceof $p}function mb(e){return e instanceof Wp}function pb(){return{children:[],bindings:[],attributes:{}}}function bb(e){return e=="class"||e=="style"}var wb=n(18);class kb{constructor(e){this.element=null;this.isRendered=false;this.locale=e;this.t=e&&e.t;this._viewCollections=new xs;this._unboundChildren=this.createCollection();this._viewCollections.on("add",(t,n)=>{n.locale=e});this.decorate("render")}get bindTemplate(){if(this._bindTemplate){return this._bindTemplate}return this._bindTemplate=$p.bind(this,this)}createCollection(e){const t=new Wp(e);this._viewCollections.add(t);return t}registerChild(e){if(!vs(e)){e=[e]}for(const t of e){this._unboundChildren.add(t)}}deregisterChild(e){if(!vs(e)){e=[e]}for(const t of e){this._unboundChildren.remove(t)}}setTemplate(e){this.template=new $p(e)}extendTemplate(e){$p.extend(this.template,e)}render(){if(this.isRendered){throw new ss["b"]("ui-view-render-already-rendered: This View has already been rendered.",this)}if(this.template){this.element=this.template.render();this.registerChild(this.template.getViews())}this.isRendered=true}destroy(){this.stopListening();this._viewCollections.map(e=>e.destroy());if(this.template&&this.template._revertData){this.template.revert(this.element)}}}ys(kb,Ud);ys(kb,Qc);var _b="[object String]";function vb(e){return typeof e=="string"||!Kt(e)&&T(e)&&_(e)==_b}var yb=vb;function xb(e,t,n={},i=[]){const o=n&&n.xmlns;const r=o?e.createElementNS(o,t):e.createElement(t);for(const e in n){r.setAttribute(e,n[e])}if(yb(i)||!vs(i)){i=[i]}for(let t of i){if(yb(t)){t=e.createTextNode(t)}r.appendChild(t)}return r}class Cb extends Wp{constructor(e,t=[]){super(t);this.locale=e}attachToDom(){this._bodyCollectionContainer=new $p({tag:"div",attributes:{class:["ck","ck-reset_all","ck-body","ck-rounded-corners"],dir:this.locale.uiLanguageDirection},children:this}).render();let e=document.querySelector(".ck-body-wrapper");if(!e){e=xb(document,"div",{class:"ck-body-wrapper"});document.body.appendChild(e)}e.appendChild(this._bodyCollectionContainer)}detachFromDom(){super.destroy();if(this._bodyCollectionContainer){this._bodyCollectionContainer.remove()}const e=document.querySelector(".ck-body-wrapper");if(e&&e.childElementCount==0){e.remove()}}}var Ab=n(20);class Tb extends kb{constructor(e){super(e);this.body=new Cb(e)}render(){super.render();this.body.attachToDom()}destroy(){this.body.detachFromDom();return super.destroy()}}var Sb=n(22);class Pb extends kb{constructor(e){super(e);this.set("text");this.set("for");this.id=`ck-editor__label_${ns()}`;const t=this.bindTemplate;this.setTemplate({tag:"label",attributes:{class:["ck","ck-label"],id:this.id,for:t.to("for")},children:[{text:t.to("text")}]})}}class Eb extends Tb{constructor(e){super(e);this.top=this.createCollection();this.main=this.createCollection();this._voiceLabelView=this._createVoiceLabel();this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-editor","ck-rounded-corners"],role:"application",dir:e.uiLanguageDirection,lang:e.uiLanguage,"aria-labelledby":this._voiceLabelView.id},children:[this._voiceLabelView,{tag:"div",attributes:{class:["ck","ck-editor__top","ck-reset_all"],role:"presentation"},children:this.top},{tag:"div",attributes:{class:["ck","ck-editor__main"],role:"presentation"},children:this.main}]})}_createVoiceLabel(){const e=this.t;const t=new Pb;t.text=e("Rich Text Editor");t.extendTemplate({attributes:{class:"ck-voice-label"}});return t}}class Mb extends kb{constructor(e,t,n){super(e);this.setTemplate({tag:"div",attributes:{class:["ck","ck-content","ck-editor__editable","ck-rounded-corners"],lang:e.contentLanguage,dir:e.contentLanguageDirection}});this.name=null;this.set("isFocused",false);this._editableElement=n;this._hasExternalElement=!!this._editableElement;this._editingView=t}render(){super.render();if(this._hasExternalElement){this.template.apply(this.element=this._editableElement)}else{this._editableElement=this.element}this.on("change:isFocused",()=>this._updateIsFocusedClasses());this._updateIsFocusedClasses()}destroy(){if(this._hasExternalElement){this.template.revert(this._editableElement)}super.destroy()}_updateIsFocusedClasses(){const e=this._editingView;if(e.isRenderingInProgress){n(this)}else{t(this)}function t(t){e.change(n=>{const i=e.document.getRoot(t.name);n.addClass(t.isFocused?"ck-focused":"ck-blurred",i);n.removeClass(t.isFocused?"ck-blurred":"ck-focused",i)})}function n(i){e.once("change:isRenderingInProgress",(e,o,r)=>{if(!r){t(i)}else{n(i)}})}}}class Ib extends Mb{constructor(e,t,n){super(e,t,n);this.extendTemplate({attributes:{role:"textbox",class:"ck-editor__editable_inline"}})}render(){super.render();const e=this._editingView;const t=this.t;e.change(n=>{const i=e.document.getRoot(this.name);n.setAttribute("aria-label",t("Rich Text Editor, %0",[this.name]),i)})}}function Nb(e){return t=>t+e}var Ob=n(24);const Rb=Nb("px");class Vb extends kb{constructor(e){super(e);const t=this.bindTemplate;this.set("isActive",false);this.set("isSticky",false);this.set("limiterElement",null);this.set("limiterBottomOffset",50);this.set("viewportTopOffset",0);this.set("_marginLeft",null);this.set("_isStickyToTheLimiter",false);this.set("_hasViewportTopOffset",false);this.content=this.createCollection();this._contentPanelPlaceholder=new $p({tag:"div",attributes:{class:["ck","ck-sticky-panel__placeholder"],style:{display:t.to("isSticky",e=>e?"block":"none"),height:t.to("isSticky",e=>e?Rb(this._panelRect.height):null)}}}).render();this._contentPanel=new $p({tag:"div",attributes:{class:["ck","ck-sticky-panel__content",t.if("isSticky","ck-sticky-panel__content_sticky"),t.if("_isStickyToTheLimiter","ck-sticky-panel__content_sticky_bottom-limit")],style:{width:t.to("isSticky",e=>e?Rb(this._contentPanelPlaceholder.getBoundingClientRect().width):null),top:t.to("_hasViewportTopOffset",e=>e?Rb(this.viewportTopOffset):null),bottom:t.to("_isStickyToTheLimiter",e=>e?Rb(this.limiterBottomOffset):null),marginLeft:t.to("_marginLeft")}},children:this.content}).render();this.setTemplate({tag:"div",attributes:{class:["ck","ck-sticky-panel"]},children:[this._contentPanelPlaceholder,this._contentPanel]})}render(){super.render();this._checkIfShouldBeSticky();this.listenTo(Nd.window,"scroll",()=>{this._checkIfShouldBeSticky()});this.listenTo(this,"change:isActive",()=>{this._checkIfShouldBeSticky()})}_checkIfShouldBeSticky(){const e=this._panelRect=this._contentPanel.getBoundingClientRect();let t;if(!this.limiterElement){this.isSticky=false}else{t=this._limiterRect=this.limiterElement.getBoundingClientRect();this.isSticky=this.isActive&&t.top{this[t]();n()})}}}}get first(){return this.focusables.find(Lb)||null}get last(){return this.focusables.filter(Lb).slice(-1)[0]||null}get next(){return this._getFocusableItem(1)}get previous(){return this._getFocusableItem(-1)}get current(){let e=null;if(this.focusTracker.focusedElement===null){return null}this.focusables.find((t,n)=>{const i=t.element===this.focusTracker.focusedElement;if(i){e=n}return i});return e}focusFirst(){this._focus(this.first)}focusLast(){this._focus(this.last)}focusNext(){this._focus(this.next)}focusPrevious(){this._focus(this.previous)}_focus(e){if(e){e.focus()}}_getFocusableItem(e){const t=this.current;const n=this.focusables.length;if(!n){return null}if(t===null){return this[e===1?"first":"last"]}let i=(t+n+e)%n;do{const t=this.focusables.get(i);if(Lb(t)){return t}i=(i+n+e)%n}while(i!==t);return null}}function Lb(e){return!!(e.focus&&Nd.window.getComputedStyle(e.element).display!="none")}class zb extends kb{constructor(e){super(e);this.setTemplate({tag:"span",attributes:{class:["ck","ck-toolbar__separator"]}})}}const Bb=100;class jb{constructor(e,t){if(!jb._observerInstance){jb._createObserver()}this._element=e;this._callback=t;jb._addElementCallback(e,t);jb._observerInstance.observe(e)}destroy(){jb._deleteElementCallback(this._element,this._callback)}static _addElementCallback(e,t){if(!jb._elementCallbacks){jb._elementCallbacks=new Map}let n=jb._elementCallbacks.get(e);if(!n){n=new Set;jb._elementCallbacks.set(e,n)}n.add(t)}static _deleteElementCallback(e,t){const n=jb._getElementCallbacks(e);if(n){n.delete(t);if(!n.size){jb._elementCallbacks.delete(e);jb._observerInstance.unobserve(e)}}if(jb._elementCallbacks&&!jb._elementCallbacks.size){jb._observerInstance=null;jb._elementCallbacks=null}}static _getElementCallbacks(e){if(!jb._elementCallbacks){return null}return jb._elementCallbacks.get(e)}static _createObserver(){let e;if(typeof Nd.window.ResizeObserver==="function"){e=Nd.window.ResizeObserver}else{e=Fb}jb._observerInstance=new e(e=>{for(const t of e){if(!t.target.offsetParent){continue}const e=jb._getElementCallbacks(t.target);if(e){for(const n of e){n(t)}}}})}}jb._observerInstance=null;jb._elementCallbacks=null;class Fb{constructor(e){this._callback=e;this._elements=new Set;this._previousRects=new Map;this._periodicCheckTimeout=null}observe(e){this._elements.add(e);this._checkElementRectsAndExecuteCallback();if(this._elements.size===1){this._startPeriodicCheck()}}unobserve(e){this._elements.delete(e);this._previousRects.delete(e);if(!this._elements.size){this._stopPeriodicCheck()}}_startPeriodicCheck(){const e=()=>{this._checkElementRectsAndExecuteCallback();this._periodicCheckTimeout=setTimeout(e,Bb)};this.listenTo(Nd.window,"resize",()=>{this._checkElementRectsAndExecuteCallback()});this._periodicCheckTimeout=setTimeout(e,Bb)}_stopPeriodicCheck(){clearTimeout(this._periodicCheckTimeout);this.stopListening();this._previousRects.clear()}_checkElementRectsAndExecuteCallback(){const e=[];for(const t of this._elements){if(this._hasRectChanged(t)){e.push({target:t,contentRect:this._previousRects.get(t)})}}if(e.length){this._callback(e)}}_hasRectChanged(e){if(!e.ownerDocument.body.contains(e)){return false}const t=new vh(e);const n=this._previousRects.get(e);const i=!n||!n.isEqual(t);this._previousRects.set(e,t);return i}}ys(Fb,Ud);function Hb(e){return e.bindTemplate.to(t=>{if(t.target===e.element){t.preventDefault()}})}class Wb extends kb{constructor(e){super(e);const t=this.bindTemplate;this.set("isVisible",false);this.set("position","se");this.children=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-dropdown__panel",t.to("position",e=>`ck-dropdown__panel_${e}`),t.if("isVisible","ck-dropdown__panel-visible")]},children:this.children,on:{selectstart:t.to(e=>e.preventDefault())}})}focus(){if(this.children.length){this.children.first.focus()}}focusLast(){if(this.children.length){const e=this.children.last;if(typeof e.focusLast==="function"){e.focusLast()}else{e.focus()}}}}var Ub=n(26);function qb(e){if(!e||!e.parentNode){return null}if(e.offsetParent===Nd.document.body){return null}return e.offsetParent}function $b({element:e,target:t,positions:n,limiter:i,fitInViewport:o}){if(ge(t)){t=t()}if(ge(i)){i=i()}const r=qb(e);const s=new vh(e);const a=new vh(t);let c;let l;if(!i&&!o){[l,c]=Gb(n[0],a,s)}else{const e=i&&new vh(i).getVisible();const t=o&&new vh(Nd.window);const r=Yb(n,{targetRect:a,elementRect:s,limiterRect:e,viewportRect:t});[l,c]=r||Gb(n[0],a,s)}let d=Zb(c);if(r){d=Jb(d,r)}return{left:d.left,top:d.top,name:l}}function Gb(e,t,n){const i=e(t,n);if(!i){return null}const{left:o,top:r,name:s}=i;return[s,n.clone().moveTo(o,r)]}function Yb(e,t){const{elementRect:n,viewportRect:i}=t;const o=n.getArea();const r=Kb(e,t);if(i){const e=r.filter(({viewportIntersectArea:e})=>e===o);const t=Qb(e,o);if(t){return t}}return Qb(r,o)}function Kb(e,{targetRect:t,elementRect:n,limiterRect:i,viewportRect:o}){const r=[];const s=n.getArea();for(const a of e){const e=Gb(a,t,n);if(!e){continue}const[c,l]=e;let d=0;let u=0;if(i){if(o){const e=i.getIntersection(o);if(e){d=e.getIntersectionArea(l)}}else{d=i.getIntersectionArea(l)}}if(o){u=o.getIntersectionArea(l)}const h={positionName:c,positionRect:l,limiterIntersectArea:d,viewportIntersectArea:u};if(d===s){return[h]}r.push(h)}return r}function Qb(e,t){let n=0;let i;let o;for(const{positionName:r,positionRect:s,limiterIntersectArea:a,viewportIntersectArea:c}of e){if(a===t){return[r,s]}const e=c**2+a**2;if(e>n){n=e;i=s;o=r}}return i?[o,i]:null}function Jb({left:e,top:t},n){const i=Zb(new vh(n));const o=kh(n);e-=i.left;t-=i.top;e+=n.scrollLeft;t+=n.scrollTop;e-=o.left;t-=o.top;return{left:e,top:t}}function Zb({left:e,top:t}){const{scrollX:n,scrollY:i}=Nd.window;return{left:e+n,top:t+i}}class Xb extends kb{constructor(e,t,n){super(e);const i=this.bindTemplate;this.buttonView=t;this.panelView=n;this.set("isOpen",false);this.set("isEnabled",true);this.set("class");this.set("id");this.set("panelPosition","auto");this.keystrokes=new gp;this.setTemplate({tag:"div",attributes:{class:["ck","ck-dropdown",i.to("class"),i.if("isEnabled","ck-disabled",e=>!e)],id:i.to("id"),"aria-describedby":i.to("ariaDescribedById")},children:[t,n]});t.extendTemplate({attributes:{class:["ck-dropdown__button"]}})}render(){super.render();this.listenTo(this.buttonView,"open",()=>{this.isOpen=!this.isOpen});this.panelView.bind("isVisible").to(this,"isOpen");this.on("change:isOpen",()=>{if(!this.isOpen){return}if(this.panelPosition==="auto"){this.panelView.position=Xb._getOptimalPosition({element:this.panelView.element,target:this.buttonView.element,fitInViewport:true,positions:this._panelPositions}).name}else{this.panelView.position=this.panelPosition}});this.keystrokes.listenTo(this.element);const e=(e,t)=>{if(this.isOpen){this.buttonView.focus();this.isOpen=false;t()}};this.keystrokes.set("arrowdown",(e,t)=>{if(this.buttonView.isEnabled&&!this.isOpen){this.isOpen=true;t()}});this.keystrokes.set("arrowright",(e,t)=>{if(this.isOpen){t()}});this.keystrokes.set("arrowleft",e);this.keystrokes.set("esc",e)}focus(){this.buttonView.focus()}get _panelPositions(){const{southEast:e,southWest:t,northEast:n,northWest:i}=Xb.defaultPanelPositions;if(this.locale.uiLanguageDirection==="ltr"){return[e,t,n,i]}else{return[t,e,i,n]}}}Xb.defaultPanelPositions={southEast:e=>({top:e.bottom,left:e.left,name:"se"}),southWest:(e,t)=>({top:e.bottom,left:e.left-t.width+e.width,name:"sw"}),northEast:(e,t)=>({top:e.top-t.height,left:e.left,name:"ne"}),northWest:(e,t)=>({top:e.bottom-t.height,left:e.left-t.width+e.width,name:"nw"})};Xb._getOptimalPosition=$b;var ew=n(28);class tw extends kb{constructor(){super();const e=this.bindTemplate;this.set("content","");this.set("viewBox","0 0 20 20");this.set("fillColor","");this.setTemplate({tag:"svg",ns:"http://www.w3.org/2000/svg",attributes:{class:["ck","ck-icon"],viewBox:e.to("viewBox")}})}render(){super.render();this._updateXMLContent();this._colorFillPaths();this.on("change:content",()=>{this._updateXMLContent();this._colorFillPaths()});this.on("change:fillColor",()=>{this._colorFillPaths()})}_updateXMLContent(){if(this.content){const e=(new DOMParser).parseFromString(this.content.trim(),"image/svg+xml");const t=e.querySelector("svg");const n=t.getAttribute("viewBox");if(n){this.viewBox=n}this.element.innerHTML="";while(t.childNodes.length>0){this.element.appendChild(t.childNodes[0])}}}_colorFillPaths(){if(this.fillColor){this.element.querySelectorAll(".ck-icon__fill").forEach(e=>{e.style.fill=this.fillColor})}}}var nw=n(30);class iw extends kb{constructor(e){super(e);this.set("text","");this.set("position","s");const t=this.bindTemplate;this.setTemplate({tag:"span",attributes:{class:["ck","ck-tooltip",t.to("position",e=>"ck-tooltip_"+e),t.if("text","ck-hidden",e=>!e.trim())]},children:[{tag:"span",attributes:{class:["ck","ck-tooltip__text"]},children:[{text:t.to("text")}]}]})}}var ow=n(32);class rw extends kb{constructor(e){super(e);const t=this.bindTemplate;const n=ns();this.set("class");this.set("labelStyle");this.set("icon");this.set("isEnabled",true);this.set("isOn",false);this.set("isVisible",true);this.set("isToggleable",false);this.set("keystroke");this.set("label");this.set("tabindex",-1);this.set("tooltip");this.set("tooltipPosition","s");this.set("type","button");this.set("withText",false);this.set("withKeystroke",false);this.children=this.createCollection();this.tooltipView=this._createTooltipView();this.labelView=this._createLabelView(n);this.iconView=new tw;this.iconView.extendTemplate({attributes:{class:"ck-button__icon"}});this.keystrokeView=this._createKeystrokeView();this.bind("_tooltipString").to(this,"tooltip",this,"label",this,"keystroke",this._getTooltipString.bind(this));this.setTemplate({tag:"button",attributes:{class:["ck","ck-button",t.to("class"),t.if("isEnabled","ck-disabled",e=>!e),t.if("isVisible","ck-hidden",e=>!e),t.to("isOn",e=>e?"ck-on":"ck-off"),t.if("withText","ck-button_with-text"),t.if("withKeystroke","ck-button_with-keystroke")],type:t.to("type",e=>e?e:"button"),tabindex:t.to("tabindex"),"aria-labelledby":`ck-editor__aria-label_${n}`,"aria-disabled":t.if("isEnabled",true,e=>!e),"aria-pressed":t.to("isOn",e=>this.isToggleable?String(e):false)},children:this.children,on:{mousedown:t.to(e=>{e.preventDefault()}),click:t.to(e=>{if(this.isEnabled){this.fire("execute")}else{e.preventDefault()}})}})}render(){super.render();if(this.icon){this.iconView.bind("content").to(this,"icon");this.children.add(this.iconView)}this.children.add(this.tooltipView);this.children.add(this.labelView);if(this.withKeystroke){this.children.add(this.keystrokeView)}}focus(){this.element.focus()}_createTooltipView(){const e=new iw;e.bind("text").to(this,"_tooltipString");e.bind("position").to(this,"tooltipPosition");return e}_createLabelView(e){const t=new kb;const n=this.bindTemplate;t.setTemplate({tag:"span",attributes:{class:["ck","ck-button__label"],style:n.to("labelStyle"),id:`ck-editor__aria-label_${e}`},children:[{text:this.bindTemplate.to("label")}]});return t}_createKeystrokeView(){const e=new kb;e.setTemplate({tag:"span",attributes:{class:["ck","ck-button__keystroke"]},children:[{text:this.bindTemplate.to("keystroke",e=>Ll(e))}]});return e}_getTooltipString(e,t,n){if(e){if(typeof e=="string"){return e}else{if(n){n=Ll(n)}if(e instanceof Function){return e(t,n)}else{return`${t}${n?` (${n})`:""}`}}}return""}}var sw='';class aw extends rw{constructor(e){super(e);this.arrowView=this._createArrowView();this.extendTemplate({attributes:{"aria-haspopup":true}});this.delegate("execute").to(this,"open")}render(){super.render();this.children.add(this.arrowView)}_createArrowView(){const e=new tw;e.content=sw;e.extendTemplate({attributes:{class:"ck-dropdown__arrow"}});return e}}var cw=n(34);class lw extends kb{constructor(){super();this.items=this.createCollection();this.focusTracker=new Sp;this.keystrokes=new gp;this._focusCycler=new Db({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowup",focusNext:"arrowdown"}});this.setTemplate({tag:"ul",attributes:{class:["ck","ck-reset","ck-list"]},children:this.items})}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)});this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}}class dw extends kb{constructor(e){super(e);this.children=this.createCollection();this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__item"]},children:this.children})}focus(){this.children.first.focus()}}class uw extends kb{constructor(e){super(e);this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__separator"]}})}}var hw=n(36);class fw extends rw{constructor(e){super(e);this.isToggleable=true;this.toggleSwitchView=this._createToggleView();this.extendTemplate({attributes:{class:"ck-switchbutton"}})}render(){super.render();this.children.add(this.toggleSwitchView)}_createToggleView(){const e=new kb;e.setTemplate({tag:"span",attributes:{class:["ck","ck-button__toggle"]},children:[{tag:"span",attributes:{class:["ck","ck-button__toggle__inner"]}}]});return e}}function gw({emitter:e,activator:t,callback:n,contextElements:i}){e.listenTo(document,"mousedown",(e,{target:o})=>{if(!t()){return}for(const e of i){if(e.contains(o)){return}}n()})}var mw=n(38);var pw=n(40);function bw(e,t=aw){const n=new t(e);const i=new Wb(e);const o=new Xb(e,n,i);n.bind("isEnabled").to(o);if(n instanceof aw){n.bind("isOn").to(o,"isOpen")}else{n.arrowView.bind("isOn").to(o,"isOpen")}_w(o);return o}function ww(e,t){const n=e.locale;const i=n.t;const o=e.toolbarView=new Tw(n);o.set("ariaLabel",i("Dropdown toolbar"));e.extendTemplate({attributes:{class:["ck-toolbar-dropdown"]}});t.map(e=>o.items.add(e));e.panelView.children.add(o);o.items.delegate("execute").to(e)}function kw(e,t){const n=e.locale;const i=e.listView=new lw(n);i.items.bindTo(t).using(({type:e,model:t})=>{if(e==="separator"){return new uw(n)}else if(e==="button"||e==="switchbutton"){const i=new dw(n);let o;if(e==="button"){o=new rw(n)}else{o=new fw(n)}o.bind(...Object.keys(t)).to(t);o.delegate("execute").to(i);i.children.add(o);return i}});e.panelView.children.add(i);i.items.delegate("execute").to(e)}function _w(e){vw(e);yw(e);xw(e)}function vw(e){e.on("render",()=>{gw({emitter:e,activator:()=>e.isOpen,callback:()=>{e.isOpen=false},contextElements:[e.element]})})}function yw(e){e.on("execute",t=>{if(t.source instanceof fw){return}e.isOpen=false})}function xw(e){e.keystrokes.set("arrowdown",(t,n)=>{if(e.isOpen){e.panelView.focus();n()}});e.keystrokes.set("arrowup",(t,n)=>{if(e.isOpen){e.panelView.focusLast();n()}})}var Cw='';var Aw=n(42);class Tw extends kb{constructor(e,t){super(e);const n=this.bindTemplate;const i=this.t;this.options=t||{};this.set("ariaLabel",i("Editor toolbar"));this.set("maxWidth","auto");this.items=this.createCollection();this.focusTracker=new Sp;this.keystrokes=new gp;this.set("class");this.set("isCompact",false);this.itemsView=new Sw(e);this.children=this.createCollection();this.children.add(this.itemsView);this.focusables=this.createCollection();this._focusCycler=new Db({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:["arrowleft","arrowup"],focusNext:["arrowright","arrowdown"]}});this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar",n.to("class"),n.if("isCompact","ck-toolbar_compact")],role:"toolbar","aria-label":n.to("ariaLabel"),style:{maxWidth:n.to("maxWidth")}},children:this.children,on:{mousedown:Hb(this)}});this._behavior=this.options.shouldGroupWhenFull?new Ew(this):new Pw(this)}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)});this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element);this._behavior.render(this)}destroy(){this._behavior.destroy();return super.destroy()}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}fillFromConfig(e,t){e.map(e=>{if(e=="|"){this.items.add(new zb)}else if(t.has(e)){this.items.add(t.create(e))}else{console.warn(Object(ss["a"])("toolbarview-item-unavailable: The requested toolbar item is unavailable."),{name:e})}})}}class Sw extends kb{constructor(e){super(e);this.children=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar__items"]},children:this.children})}}class Pw{constructor(e){const t=e.bindTemplate;e.set("isVertical",false);e.itemsView.children.bindTo(e.items).using(e=>e);e.focusables.bindTo(e.items).using(e=>e);e.extendTemplate({attributes:{class:[t.if("isVertical","ck-toolbar_vertical")]}})}render(){}destroy(){}}class Ew{constructor(e){this.viewChildren=e.children;this.viewFocusables=e.focusables;this.viewItemsView=e.itemsView;this.viewFocusTracker=e.focusTracker;this.viewLocale=e.locale;this.ungroupedItems=e.createCollection();this.groupedItems=e.createCollection();this.groupedItemsDropdown=this._createGroupedItemsDropdown();this.resizeObserver=null;this.cachedPadding=null;this.shouldUpdateGroupingOnNextResize=false;e.itemsView.children.bindTo(this.ungroupedItems).using(e=>e);this.ungroupedItems.on("add",this._updateFocusCycleableItems.bind(this));this.ungroupedItems.on("remove",this._updateFocusCycleableItems.bind(this));e.children.on("add",this._updateFocusCycleableItems.bind(this));e.children.on("remove",this._updateFocusCycleableItems.bind(this));e.items.on("add",(e,t,n)=>{if(n>this.ungroupedItems.length){this.groupedItems.add(t,n-this.ungroupedItems.length)}else{this.ungroupedItems.add(t,n)}this._updateGrouping()});e.items.on("remove",(e,t,n)=>{if(n>this.ungroupedItems.length){this.groupedItems.remove(t)}else{this.ungroupedItems.remove(t)}this._updateGrouping()});e.extendTemplate({attributes:{class:["ck-toolbar_grouping"]}})}render(e){this.viewElement=e.element;this._enableGroupingOnResize();this._enableGroupingOnMaxWidthChange(e)}destroy(){this.groupedItemsDropdown.destroy();this.resizeObserver.destroy()}_updateGrouping(){if(!this.viewElement.ownerDocument.body.contains(this.viewElement)){return}if(!this.viewElement.offsetParent){this.shouldUpdateGroupingOnNextResize=true;return}let e;while(this._areItemsOverflowing){this._groupLastItem();e=true}if(!e&&this.groupedItems.length){while(this.groupedItems.length&&!this._areItemsOverflowing){this._ungroupFirstItem()}if(this._areItemsOverflowing){this._groupLastItem()}}}get _areItemsOverflowing(){if(!this.ungroupedItems.length){return false}const e=this.viewElement;const t=this.viewLocale.uiLanguageDirection;const n=new vh(e.lastChild);const i=new vh(e);if(!this.cachedPadding){const n=Nd.window.getComputedStyle(e);const i=t==="ltr"?"paddingRight":"paddingLeft";this.cachedPadding=Number.parseInt(n[i])}if(t==="ltr"){return n.right>i.right-this.cachedPadding}else{return n.left{if(!e||e!==t.contentRect.width||this.shouldUpdateGroupingOnNextResize){this.shouldUpdateGroupingOnNextResize=false;this._updateGrouping();e=t.contentRect.width}});this._updateGrouping()}_enableGroupingOnMaxWidthChange(e){e.on("change:maxWidth",()=>{this._updateGrouping()})}_groupLastItem(){if(!this.groupedItems.length){this.viewChildren.add(new zb);this.viewChildren.add(this.groupedItemsDropdown);this.viewFocusTracker.add(this.groupedItemsDropdown.element)}this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last),0)}_ungroupFirstItem(){this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first));if(!this.groupedItems.length){this.viewChildren.remove(this.groupedItemsDropdown);this.viewChildren.remove(this.viewChildren.last);this.viewFocusTracker.remove(this.groupedItemsDropdown.element)}}_createGroupedItemsDropdown(){const e=this.viewLocale;const t=e.t;const n=bw(e);n.class="ck-toolbar__grouped-dropdown";n.panelPosition=e.uiLanguageDirection==="ltr"?"sw":"se";ww(n,[]);n.buttonView.set({label:t("Show more items"),tooltip:true,icon:Cw});n.toolbarView.items.bindTo(this.groupedItems).using(e=>e);return n}_updateFocusCycleableItems(){this.viewFocusables.clear();this.ungroupedItems.map(e=>{this.viewFocusables.add(e)});if(this.groupedItems.length){this.viewFocusables.add(this.groupedItemsDropdown)}}}var Mw=n(44);class Iw extends Eb{constructor(e,t,n={}){super(e);this.stickyPanel=new Vb(e);this.toolbar=new Tw(e,{shouldGroupWhenFull:n.shouldToolbarGroupWhenFull});this.editable=new Ib(e,t)}render(){super.render();this.stickyPanel.content.add(this.toolbar);this.top.add(this.stickyPanel);this.main.add(this.editable)}}function Nw(e){if(e instanceof HTMLTextAreaElement){return e.value}return e.innerHTML}class Ow extends pp{constructor(e,t){super(t);if(Yr(e)){this.sourceElement=e}this.data.processor=new Cp(this.data.viewDocument);this.model.document.createRoot();const n=!this.config.get("toolbar.shouldNotGroupWhenFull");const i=new Iw(this.locale,this.editing.view,{shouldToolbarGroupWhenFull:n});this.ui=new Hp(this,i);yp(this)}destroy(){if(this.sourceElement){this.updateSourceElement()}this.ui.destroy();return super.destroy()}static create(e,t={}){return new Promise(n=>{const i=new this(e,t);n(i.initPlugins().then(()=>i.ui.init(Yr(e)?e:null)).then(()=>{if(!Yr(e)&&t.initialData){throw new ss["b"]("editor-create-initial-data: "+"The config.initialData option cannot be used together with initial data passed in Editor.create().",null)}const n=t.initialData||Rw(e);return i.data.init(n)}).then(()=>i.fire("ready")).then(()=>i))})}}ys(Ow,wp);ys(Ow,vp);function Rw(e){return Yr(e)?Nw(e):e}class Vw{constructor(e){this.editor=e;this.set("isEnabled",true);this._disableStack=new Set}forceDisabled(e){this._disableStack.add(e);if(this._disableStack.size==1){this.on("set:isEnabled",Dw,{priority:"highest"});this.isEnabled=false}}clearForceDisabled(e){this._disableStack.delete(e);if(this._disableStack.size==0){this.off("set:isEnabled",Dw);this.isEnabled=true}}destroy(){this.stopListening()}static get isContextPlugin(){return false}}ys(Vw,Qc);function Dw(e){e.return=false;e.stop()}class Lw{constructor(e){this.editor=e;this.set("value",undefined);this.set("isEnabled",false);this._disableStack=new Set;this.decorate("execute");this.listenTo(this.editor.model.document,"change",()=>{this.refresh()});this.on("execute",e=>{if(!this.isEnabled){e.stop()}},{priority:"high"});this.listenTo(e,"change:isReadOnly",(e,t,n)=>{if(n){this.forceDisabled("readOnlyMode")}else{this.clearForceDisabled("readOnlyMode")}})}refresh(){this.isEnabled=true}forceDisabled(e){this._disableStack.add(e);if(this._disableStack.size==1){this.on("set:isEnabled",zw,{priority:"highest"});this.isEnabled=false}}clearForceDisabled(e){this._disableStack.delete(e);if(this._disableStack.size==0){this.off("set:isEnabled",zw);this.refresh()}}execute(){}destroy(){this.stopListening()}}ys(Lw,Qc);function zw(e){e.return=false;e.stop()}function Bw(e){const t=e.next();if(t.done){return null}return t.value}const jw=["left","right","center","justify"];function Fw(e){return jw.includes(e)}function Hw(e,t){if(t.contentLanguageDirection=="rtl"){return e==="right"}else{return e==="left"}}const Ww="alignment";class Uw extends Lw{refresh(){const e=this.editor;const t=e.locale;const n=Bw(this.editor.model.document.selection.getSelectedBlocks());this.isEnabled=!!n&&this._canBeAligned(n);if(this.isEnabled&&n.hasAttribute("alignment")){this.value=n.getAttribute("alignment")}else{this.value=t.contentLanguageDirection==="rtl"?"right":"left"}}execute(e={}){const t=this.editor;const n=t.locale;const i=t.model;const o=i.document;const r=e.value;i.change(e=>{const t=Array.from(o.selection.getSelectedBlocks()).filter(e=>this._canBeAligned(e));const i=t[0].getAttribute("alignment");const s=Hw(r,n)||i===r||!r;if(s){qw(t,e)}else{$w(t,e,r)}})}_canBeAligned(e){return this.editor.model.schema.checkAttribute(e,Ww)}}function qw(e,t){for(const n of e){t.removeAttribute(Ww,n)}}function $w(e,t,n){for(const i of e){t.setAttribute(Ww,n,i)}}class Gw extends Vw{static get pluginName(){return"AlignmentEditing"}constructor(e){super(e);e.config.define("alignment",{options:[...jw]})}init(){const e=this.editor;const t=e.locale;const n=e.model.schema;const i=e.config.get("alignment.options").filter(Fw);n.extend("$block",{allowAttributes:"alignment"});e.model.schema.setAttributeProperties("alignment",{isFormatting:true});const o=Yw(i.filter(e=>!Hw(e,t)));e.conversion.attributeToAttribute(o);e.commands.add("alignment",new Uw(e))}}function Yw(e){const t={model:{key:"alignment",values:e.slice()},view:{}};for(const n of e){t.view[n]={key:"style",value:{"text-align":n}}}return t}var Kw='';var Qw='';var Jw='';var Zw='';const Xw=new Map([["left",Kw],["right",Qw],["center",Jw],["justify",Zw]]);class ek extends Vw{get localizedOptionTitles(){const e=this.editor.t;return{left:e("Align left"),right:e("Align right"),center:e("Align center"),justify:e("Justify")}}static get pluginName(){return"AlignmentUI"}init(){const e=this.editor;const t=e.ui.componentFactory;const n=e.t;const i=e.config.get("alignment.options");i.filter(Fw).forEach(e=>this._addButton(e));t.add("alignment",e=>{const o=bw(e);const r=i.map(e=>t.create(`alignment:${e}`));ww(o,r);o.buttonView.set({label:n("Text alignment"),tooltip:true});o.toolbarView.isVertical=true;o.toolbarView.ariaLabel=n("Text alignment toolbar");o.extendTemplate({attributes:{class:"ck-alignment-dropdown"}});const s=e.contentLanguageDirection==="rtl"?Qw:Kw;o.buttonView.bind("icon").toMany(r,"isOn",(...e)=>{const t=e.findIndex(e=>e);if(t<0){return s}return r[t].icon});o.bind("isEnabled").toMany(r,"isEnabled",(...e)=>e.some(e=>e));return o})}_addButton(e){const t=this.editor;t.ui.componentFactory.add(`alignment:${e}`,n=>{const i=t.commands.get("alignment");const o=new rw(n);o.set({label:this.localizedOptionTitles[e],icon:Xw.get(e),tooltip:true,isToggleable:true});o.bind("isEnabled").to(i);o.bind("isOn").to(i,"value",t=>t===e);this.listenTo(o,"execute",()=>{t.execute("alignment",{value:e});t.editing.view.focus()});return o})}}class tk extends Vw{static get requires(){return[Gw,ek]}static get pluginName(){return"Alignment"}}class nk{static get pluginName(){return"BlockAutoformatEditing"}constructor(e,t,n){let i;let o=null;if(typeof n=="function"){i=n}else{o=e.commands.get(n);i=()=>{e.execute(n)}}e.model.document.on("change",(n,r)=>{if(o&&!o.isEnabled){return}if(r.type=="transparent"){return}const s=Array.from(e.model.document.differ.getChanges());const a=s[0];if(s.length!=1||a.type!=="insert"||a.name!="$text"||a.length!=1){return}const c=a.position.parent;if(!c.is("paragraph")||c.childCount!==1){return}const l=t.exec(c.getChild(0).data);if(!l){return}e.model.enqueueChange(e=>{const t=e.createPositionAt(c,0);const n=e.createPositionAt(c,l[0].length);const o=new cf(t,n);const r=i({match:l});if(r!==false){e.remove(o)}o.detach()})})}}function ik(e,t){let n=e.start;const i=Array.from(e.getItems()).reduce((e,i)=>{if(!(i.is("text")||i.is("textProxy"))){n=t.createPositionAfter(i);return""}return e+i.data},"");return{text:i,range:t.createRange(n,e.end)}}class ok{static get pluginName(){return"InlineAutoformatEditing"}constructor(e,t,n){let i;let o;let r;let s;if(t instanceof RegExp){i=t}else{r=t}if(typeof n=="string"){o=n}else{s=n}r=r||(e=>{let t;const n=[];const o=[];while((t=i.exec(e))!==null){if(t&&t.length<4){break}let{index:e,1:i,2:r,3:s}=t;const a=i+r+s;e+=t[0].length-a.length;const c=[e,e+i.length];const l=[e+i.length+r.length,e+i.length+r.length+s.length];n.push(c);n.push(l);o.push([e+i.length,e+i.length+r.length])}return{remove:n,format:o}});s=s||((t,n)=>{const i=e.model.schema.getValidRanges(n,o);for(const e of i){t.setAttribute(o,true,e)}t.removeSelectionAttribute(o)});e.model.document.on("change",(t,n)=>{if(n.type=="transparent"){return}const i=e.model;const o=i.document.selection;if(!o.isCollapsed){return}const a=Array.from(i.document.differ.getChanges());const c=a[0];if(a.length!=1||c.type!=="insert"||c.name!="$text"||c.length!=1){return}const l=o.focus;const d=l.parent;const{text:u,range:h}=ik(i.createRange(i.createPositionAt(d,0),l),i);const f=r(u);const g=rk(h.start,f.format,i);const m=rk(h.start,f.remove,i);if(!(g.length&&m.length)){return}i.enqueueChange(e=>{const t=s(e,g);if(t===false){return}for(const t of m.reverse()){e.remove(t)}})})}}function rk(e,t,n){return t.filter(e=>e[0]!==undefined&&e[1]!==undefined).map(t=>n.createRange(e.getShiftedBy(t[0]),e.getShiftedBy(t[1])))}class sk extends Vw{static get pluginName(){return"Autoformat"}afterInit(){this._addListAutoformats();this._addBasicStylesAutoformats();this._addHeadingAutoformats();this._addBlockQuoteAutoformats();this._addCodeBlockAutoformats()}_addListAutoformats(){const e=this.editor.commands;if(e.get("bulletedList")){new nk(this.editor,/^[*-]\s$/,"bulletedList")}if(e.get("numberedList")){new nk(this.editor,/^1[.|)]\s$/,"numberedList")}}_addBasicStylesAutoformats(){const e=this.editor.commands;if(e.get("bold")){const e=ak(this.editor,"bold");new ok(this.editor,/(\*\*)([^*]+)(\*\*)$/g,e);new ok(this.editor,/(__)([^_]+)(__)$/g,e)}if(e.get("italic")){const e=ak(this.editor,"italic");new ok(this.editor,/(?:^|[^*])(\*)([^*_]+)(\*)$/g,e);new ok(this.editor,/(?:^|[^_])(_)([^_]+)(_)$/g,e)}if(e.get("code")){const e=ak(this.editor,"code");new ok(this.editor,/(`)([^`]+)(`)$/g,e)}if(e.get("strikethrough")){const e=ak(this.editor,"strikethrough");new ok(this.editor,/(~~)([^~]+)(~~)$/g,e)}}_addHeadingAutoformats(){const e=this.editor.commands.get("heading");if(e){e.modelElements.filter(e=>e.match(/^heading[1-6]$/)).forEach(t=>{const n=t[7];const i=new RegExp(`^(#{${n}})\\s$`);new nk(this.editor,i,()=>{if(!e.isEnabled){return false}this.editor.execute("heading",{value:t})})})}}_addBlockQuoteAutoformats(){if(this.editor.commands.get("blockQuote")){new nk(this.editor,/^>\s$/,"blockQuote")}}_addCodeBlockAutoformats(){if(this.editor.commands.get("codeBlock")){new nk(this.editor,/^```$/,"codeBlock")}}}function ak(e,t){return(n,i)=>{const o=e.commands.get(t);if(!o.isEnabled){return false}const r=e.model.schema.getValidRanges(i,t);for(const e of r){n.setAttribute(t,true,e)}n.removeSelectionAttribute(t)}}class ck extends Lw{refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(e={}){const t=this.editor.model;const n=t.schema;const i=t.document.selection;const o=Array.from(i.getSelectedBlocks());const r=e.forceValue===undefined?!this.value:e.forceValue;t.change(e=>{if(!r){this._removeQuote(e,o.filter(lk))}else{const t=o.filter(e=>lk(e)||uk(n,e));this._applyQuote(e,t)}})}_getValue(){const e=this.editor.model.document.selection;const t=Bw(e.getSelectedBlocks());return!!(t&&lk(t))}_checkEnabled(){if(this.value){return true}const e=this.editor.model.document.selection;const t=this.editor.model.schema;const n=Bw(e.getSelectedBlocks());if(!n){return false}return uk(t,n)}_removeQuote(e,t){dk(e,t).reverse().forEach(t=>{if(t.start.isAtStart&&t.end.isAtEnd){e.unwrap(t.start.parent);return}if(t.start.isAtStart){const n=e.createPositionBefore(t.start.parent);e.move(t,n);return}if(!t.end.isAtEnd){e.split(t.end)}const n=e.createPositionAfter(t.end.parent);e.move(t,n)})}_applyQuote(e,t){const n=[];dk(e,t).reverse().forEach(t=>{let i=lk(t.start);if(!i){i=e.createElement("blockQuote");e.wrap(t,i)}n.push(i)});n.reverse().reduce((t,n)=>{if(t.nextSibling==n){e.merge(e.createPositionAfter(t));return t}return n})}}function lk(e){return e.parent.name=="blockQuote"?e.parent:null}function dk(e,t){let n;let i=0;const o=[];while(i{if(e.endsWith("blockQuote")&&t.name=="blockQuote"){return false}});e.conversion.elementToElement({model:"blockQuote",view:"blockquote"});e.model.document.registerPostFixer(n=>{const i=e.model.document.differ.getChanges();for(const e of i){if(e.type=="insert"){const i=e.position.nodeAfter;if(!i){continue}if(i.is("blockQuote")&&i.isEmpty){n.remove(i);return true}else if(i.is("blockQuote")&&!t.checkChild(e.position,i)){n.unwrap(i);return true}else if(i.is("element")){const e=n.createRangeIn(i);for(const i of e.getItems()){if(i.is("blockQuote")&&!t.checkChild(n.createPositionBefore(i),i)){n.unwrap(i);return true}}}}else if(e.type=="remove"){const t=e.position.parent;if(t.is("blockQuote")&&t.isEmpty){n.remove(t);return true}}}return false})}afterInit(){const e=this.editor;const t=e.commands.get("blockQuote");this.listenTo(this.editor.editing.view.document,"enter",(e,n)=>{const i=this.editor.model.document;const o=i.selection.getLastPosition().parent;if(i.selection.isCollapsed&&o.isEmpty&&t.value){this.editor.execute("blockQuote");this.editor.editing.view.scrollToTheSelection();n.preventDefault();e.stop()}})}}var fk='';var gk=n(46);class mk extends Vw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("blockQuote",n=>{const i=e.commands.get("blockQuote");const o=new rw(n);o.set({label:t("Block quote"),icon:fk,tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(i,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute("blockQuote");e.editing.view.focus()});return o})}}class pk extends Vw{static get requires(){return[hk,mk]}static get pluginName(){return"BlockQuote"}}class bk extends Lw{constructor(e,t){super(e);this.attributeKey=t}refresh(){const e=this.editor.model;const t=e.document;this.value=this._getValueFromFirstAllowedNode();this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){const t=this.editor.model;const n=t.document;const i=n.selection;const o=e.forceValue===undefined?!this.value:e.forceValue;t.change(e=>{if(i.isCollapsed){if(o){e.setSelectionAttribute(this.attributeKey,true)}else{e.removeSelectionAttribute(this.attributeKey)}}else{const n=t.schema.getValidRanges(i.getRanges(),this.attributeKey);for(const t of n){if(o){e.setAttribute(this.attributeKey,o,t)}else{e.removeAttribute(this.attributeKey,t)}}}})}_getValueFromFirstAllowedNode(){const e=this.editor.model;const t=e.schema;const n=e.document.selection;if(n.isCollapsed){return n.hasAttribute(this.attributeKey)}for(const e of n.getRanges()){for(const n of e.getItems()){if(t.checkAttribute(n,this.attributeKey)){return n.hasAttribute(this.attributeKey)}}}return false}}const wk="bold";class kk extends Vw{static get pluginName(){return"BoldEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:wk});e.model.schema.setAttributeProperties(wk,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:wk,view:"strong",upcastAlso:["b",e=>{const t=e.getStyle("font-weight");if(!t){return null}if(t=="bold"||Number(t)>=600){return{name:true,styles:["font-weight"]}}}]});e.commands.add(wk,new bk(e,wk));e.keystrokes.set("CTRL+B",wk)}}var _k='';const vk="bold";class yk extends Vw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(vk,n=>{const i=e.commands.get(vk);const o=new rw(n);o.set({label:t("Bold"),icon:_k,keystroke:"CTRL+B",tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(i,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(vk);e.editing.view.focus()});return o})}}class xk extends Vw{static get requires(){return[kk,yk]}static get pluginName(){return"Bold"}}const Ck="code";class Ak extends Vw{static get pluginName(){return"CodeEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:Ck});e.model.schema.setAttributeProperties(Ck,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:Ck,view:"code",upcastAlso:{styles:{"word-wrap":"break-word"}}});e.commands.add(Ck,new bk(e,Ck))}}var Tk='';var Sk=n(11);const Pk="code";class Ek extends Vw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(Pk,n=>{const i=e.commands.get(Pk);const o=new rw(n);o.set({label:t("Code"),icon:Tk,tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(i,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(Pk);e.editing.view.focus()});return o})}}class Mk extends Vw{static get requires(){return[Ak,Ek]}static get pluginName(){return"Code"}}function*Ik(e,t){for(const n of t){if(n&&e.getAttributeProperties(n[0]).copyOnEnter){yield n}}}class Nk extends Lw{execute(){const e=this.editor.model;const t=e.document;e.change(n=>{Rk(e,n,t.selection);this.fire("afterExecute",{writer:n})})}refresh(){const e=this.editor.model;const t=e.document;this.isEnabled=Ok(e.schema,t.selection)}}function Ok(e,t){if(t.rangeCount>1){return false}const n=t.anchor;if(!n||!e.checkChild(n,"softBreak")){return false}const i=t.getFirstRange();const o=i.start.parent;const r=i.end.parent;if((Dk(o,e)||Dk(r,e))&&o!==r){return false}return true}function Rk(e,t,n){const i=n.isCollapsed;const o=n.getFirstRange();const r=o.start.parent;const s=o.end.parent;const a=r==s;if(i){const i=Ik(e.schema,n.getAttributes());Vk(e,t,o.end);t.removeSelectionAttribute(n.getAttributeKeys());t.setSelectionAttribute(i)}else{const i=!(o.start.isAtStart&&o.end.isAtEnd);e.deleteContent(n,{leaveUnmerged:i});if(a){Vk(e,t,n.focus)}else{if(i){t.setSelection(s,0)}}}}function Vk(e,t,n){const i=t.createElement("softBreak");e.insertContent(i,n);t.setSelection(i,"after")}function Dk(e,t){if(e.is("rootElement")){return false}return t.isLimit(e)||Dk(e.parent,t)}class Lk extends Gd{constructor(e){super(e);const t=this.document;t.on("keydown",(e,n)=>{if(this.isEnabled&&n.keyCode==Rl.enter){let i;t.once("enter",e=>i=e,{priority:"highest"});t.fire("enter",new Yu(t,n.domEvent,{isSoft:n.shiftKey}));if(i&&i.stop.called){e.stop()}}})}observe(){}}class zk extends Vw{static get pluginName(){return"ShiftEnter"}init(){const e=this.editor;const t=e.model.schema;const n=e.conversion;const i=e.editing.view;const o=i.document;t.register("softBreak",{allowWhere:"$text",isInline:true});n.for("upcast").elementToElement({model:"softBreak",view:"br"});n.for("downcast").elementToElement({model:"softBreak",view:(e,t)=>t.createEmptyElement("br")});i.addObserver(Lk);e.commands.add("shiftEnter",new Nk(e));this.listenTo(o,"enter",(t,n)=>{n.preventDefault();if(!n.isSoft){return}e.execute("shiftEnter");i.scrollToTheSelection()},{priority:"low"})}}function Bk(e){const t=e.t;const n=e.config.get("codeBlock.languages");for(const e of n){if(e.label==="Plain text"){e.label=t("Plain text")}if(e.class===undefined){e.class=`language-${e.language}`}}return n}function jk(e,t,n){const i={};for(const o of e){if(t==="class"){i[o[t].split(" ").shift()]=o[n]}else{i[o[t]]=o[n]}}return i}function Fk(e){return e.data.match(/^(\s*)/)[0]}function Hk(e,t){const n=e.createDocumentFragment();const i=t.split("\n").map(t=>e.createText(t));const o=i[i.length-1];for(const t of i){e.append(t,n);if(t!==o){e.appendElement("softBreak",n)}}return n}function Wk(e){const t=e.document.selection;const n=[];if(t.isCollapsed){n.push(t.anchor)}else{const i=t.getFirstRange().getWalker({ignoreElementEnd:true,direction:"backward"});for(const{item:t}of i){if(t.is("textProxy")&&t.parent.is("codeBlock")){const i=Fk(t.textNode);const{parent:o,startOffset:r}=t.textNode;const s=e.createPositionAt(o,r+i.length);n.push(s)}}}return n}function Uk(e){const t=Bw(e.getSelectedBlocks());return t&&t.is("codeBlock")}class qk extends Lw{refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(e={}){const t=this.editor;const n=t.model;const i=n.document.selection;const o=Bk(t);const r=o[0];const s=Array.from(i.getSelectedBlocks());const a=e.forceValue===undefined?!this.value:e.forceValue;const c=e.language||r.language;n.change(e=>{if(a){this._applyCodeBlock(e,s,c)}else{this._removeCodeBlock(e,s)}})}_getValue(){const e=this.editor.model.document.selection;const t=Bw(e.getSelectedBlocks());const n=!!(t&&t.is("codeBlock"));return n?t.getAttribute("language"):false}_checkEnabled(){if(this.value){return true}const e=this.editor.model.document.selection;const t=this.editor.model.schema;const n=Bw(e.getSelectedBlocks());if(!n){return false}return $k(t,n)}_applyCodeBlock(e,t,n){const i=this.editor.model.schema;const o=t.filter(e=>$k(i,e));for(const t of o){e.rename(t,"codeBlock");e.setAttribute("language",n,t);i.removeDisallowedAttributes([t],e)}o.reverse().forEach((t,n)=>{const i=o[n+1];if(t.previousSibling===i){e.appendElement("softBreak",i);e.merge(e.createPositionBefore(t))}})}_removeCodeBlock(e,t){const n=t.filter(e=>e.is("codeBlock"));for(const t of n){const n=e.createRangeOn(t);for(const t of Array.from(n.getItems()).reverse()){if(t.is("softBreak")&&t.parent.is("codeBlock")){const{position:n}=e.split(e.createPositionBefore(t));e.rename(n.nodeAfter,"paragraph");e.removeAttribute("language",n.nodeAfter);e.remove(t)}}e.rename(t,"paragraph");e.removeAttribute("language",t)}}}function $k(e,t){if(t.is("rootElement")||e.isLimit(t)){return false}return e.checkChild(t.parent,"codeBlock")}class Gk extends Lw{constructor(e){super(e);this._indentSequence=e.config.get("codeBlock.indentSequence")}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor;const t=e.model;t.change(e=>{const n=Wk(t);for(const t of n){e.insertText(this._indentSequence,t)}})}_checkEnabled(){if(!this._indentSequence){return false}return Uk(this.editor.model.document.selection)}}class Yk extends Lw{constructor(e){super(e);this._indentSequence=e.config.get("codeBlock.indentSequence")}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor;const t=e.model;t.change(e=>{const n=Wk(t);for(const t of n){const n=Kk(this.editor.model,t,this._indentSequence);if(n){e.remove(n)}}})}_checkEnabled(){if(!this._indentSequence){return false}const e=this.editor.model;if(!Uk(e.document.selection)){return false}return Wk(e).some(t=>Kk(e,t,this._indentSequence))}}function Kk(e,t,n){const i=Qk(t);if(!i){return null}const o=Fk(i);const r=o.lastIndexOf(n);if(r+n.length!==o.length){return null}if(r===-1){return null}const{parent:s,startOffset:a}=i;return e.createRange(e.createPositionAt(s,a+r),e.createPositionAt(s,a+r+n.length))}function Qk(e){let t=e.parent.getChild(e.index);if(!t||t.is("softBreak")){t=e.nodeBefore}if(!t||t.is("softBreak")){return null}return t}function Jk(e,t,n=false){const i=jk(t,"language","class");const o=jk(t,"language","label");return(t,r,s)=>{const{writer:a,mapper:c,consumable:l}=s;if(!l.consume(r.item,"insert")){return}const d=r.item.getAttribute("language");const u=c.toViewPosition(e.createPositionBefore(r.item));const h={};if(n){h["data-language"]=o[d];h.spellcheck="false"}const f=a.createContainerElement("pre",h);const g=a.createContainerElement("code",{class:i[d]||null});a.insert(a.createPositionAt(f,0),g);a.insert(u,f);c.bindElements(r.item,g)}}function Zk(e){return(t,n,i)=>{if(n.item.parent.name!=="codeBlock"){return}const{writer:o,mapper:r,consumable:s}=i;if(!s.consume(n.item,"insert")){return}const a=r.toViewPosition(e.createPositionBefore(n.item));o.insert(a,o.createText("\n"))}}function Xk(e,t){const n=jk(t,"class","language");const i=t[0].language;return(t,o,r)=>{const s=o.viewItem;const a=s.getChild(0);if(!a||!a.is("code")){return}const{consumable:c,writer:l}=r;if(!c.test(s,{name:true})||!c.test(a,{name:true})){return}const d=l.createElement("codeBlock");const u=[...a.getClassNames()];if(!u.length){u.push("")}for(const e of u){const t=n[e];if(t){l.setAttribute("language",t,d);break}}if(!d.hasAttribute("language")){l.setAttribute("language",i,d)}const h=[...e.createRangeIn(a)].filter(e=>e.type==="text").map(({item:e})=>e.data).join("");const f=Hk(l,h);l.append(f,d);const g=r.splitToAllowedParent(d,o.modelCursor);if(!g){return}l.insert(d,g.position);c.consume(s,{name:true});c.consume(a,{name:true});const m=r.getSplitParts(d);o.modelRange=l.createRange(r.writer.createPositionBefore(d),r.writer.createPositionAfter(m[m.length-1]));if(g.cursorParent){o.modelCursor=l.createPositionAt(g.cursorParent,0)}else{o.modelCursor=o.modelRange.end}}}const e_="paragraph";class t_ extends Vw{static get pluginName(){return"CodeBlockEditing"}static get requires(){return[zk]}constructor(e){super(e);e.config.define("codeBlock",{languages:[{language:"plaintext",label:"Plain text"},{language:"c",label:"C"},{language:"cs",label:"C#"},{language:"cpp",label:"C++"},{language:"css",label:"CSS"},{language:"diff",label:"Diff"},{language:"html",label:"HTML"},{language:"java",label:"Java"},{language:"javascript",label:"JavaScript"},{language:"php",label:"PHP"},{language:"python",label:"Python"},{language:"ruby",label:"Ruby"},{language:"typescript",label:"TypeScript"},{language:"xml",label:"XML"}],indentSequence:"\t"})}init(){const e=this.editor;const t=e.model.schema;const n=e.model;const i=Bk(e);e.commands.add("codeBlock",new qk(e));e.commands.add("indentCodeBlock",new Gk(e));e.commands.add("outdentCodeBlock",new Yk(e));const o=e=>(t,n)=>{const i=this.editor.commands.get(e);if(i.isEnabled){this.editor.execute(e);n()}};e.keystrokes.set("Tab",o("indentCodeBlock"));e.keystrokes.set("Shift+Tab",o("outdentCodeBlock"));t.register("codeBlock",{allowWhere:"$block",isBlock:true,allowAttributes:["language"]});t.extend("$text",{allowIn:"codeBlock"});t.addAttributeCheck(e=>{if(e.endsWith("codeBlock $text")){return false}});e.editing.downcastDispatcher.on("insert:codeBlock",Jk(n,i,true));e.data.downcastDispatcher.on("insert:codeBlock",Jk(n,i));e.data.downcastDispatcher.on("insert:softBreak",Zk(n),{priority:"high"});e.data.upcastDispatcher.on("element:pre",Xk(e.editing.view,i));this.listenTo(e.editing.view.document,"clipboardInput",(e,t)=>{const i=n.document.selection;if(!i.anchor.parent.is("codeBlock")){return}const o=t.dataTransfer.getData("text/plain");n.change(t=>{n.insertContent(Hk(t,o),i);e.stop()})});this.listenTo(n,"getSelectedContent",(e,[i])=>{const o=i.anchor;if(i.isCollapsed||!o.parent.is("codeBlock")||!o.hasSameParentAs(i.focus)){return}n.change(n=>{const r=e.return;if(r.childCount>1||i.containsEntireContent(o.parent)){const t=n.createElement("codeBlock",o.parent.getAttributes());n.append(r,t);const i=n.createDocumentFragment();n.append(t,i);e.return=i}else{const e=r.getChild(0);if(t.checkAttribute(e,"code")){n.setAttribute("code",true,e)}}})})}afterInit(){const e=this.editor;const t=e.commands;const n=t.get("indent");const i=t.get("outdent");if(n){n.registerChildCommand(t.get("indentCodeBlock"))}if(i){i.registerChildCommand(t.get("outdentCodeBlock"))}this.listenTo(e.editing.view.document,"enter",(t,n)=>{const i=e.model.document.selection.getLastPosition().parent;if(!i.is("codeBlock")){return}i_(e,n.isSoft)||o_(e,n.isSoft)||n_(e);n.preventDefault();t.stop()})}}function n_(e){const t=e.model;const n=t.document;const i=n.selection.getLastPosition();const o=i.nodeBefore||i.textNode;let r;if(o&&o.is("text")){r=Fk(o)}e.model.change(t=>{e.execute("shiftEnter");if(r){t.insertText(r,n.selection.anchor)}})}function i_(e,t){const n=e.model;const i=n.document;const o=e.editing.view;const r=i.selection.getLastPosition();const s=r.nodeAfter;if(t||!i.selection.isCollapsed||!r.isAtStart){return false}if(!s||!s.is("softBreak")){return false}e.model.change(t=>{e.execute("enter");const n=i.selection.anchor.parent.previousSibling;t.rename(n,e_);t.setSelection(n,"in");e.model.schema.removeDisallowedAttributes([n],t);t.remove(s)});o.scrollToTheSelection();return true}function o_(e,t){const n=e.model;const i=n.document;const o=e.editing.view;const r=i.selection.getLastPosition();const s=r.nodeBefore;let a;if(t||!i.selection.isCollapsed||!r.isAtEnd||!s){return false}if(s.is("softBreak")){a=n.createRangeOn(s)}else if(s.is("text")&&!s.data.match(/\S/)&&s.previousSibling&&s.previousSibling.is("softBreak")){a=n.createRange(n.createPositionBefore(s.previousSibling),n.createPositionAfter(s))}else{return false}e.model.change(t=>{t.remove(a);e.execute("enter");const n=i.selection.anchor.parent;t.rename(n,e_);e.model.schema.removeDisallowedAttributes([n],t)});o.scrollToTheSelection();return true}class r_{constructor(e,t){if(t){qc(this,t)}if(e){this.set(e)}}}ys(r_,Qc);var s_=n(49);class a_ extends kb{constructor(e){super(e);const t=this.bindTemplate;this.set("icon");this.set("isEnabled",true);this.set("isOn",false);this.set("isToggleable",false);this.set("isVisible",true);this.set("keystroke");this.set("label");this.set("tabindex",-1);this.set("tooltip");this.set("tooltipPosition","s");this.set("type","button");this.set("withText",false);this.children=this.createCollection();this.actionView=this._createActionView();this.arrowView=this._createArrowView();this.keystrokes=new gp;this.focusTracker=new Sp;this.setTemplate({tag:"div",attributes:{class:["ck","ck-splitbutton",t.if("isVisible","ck-hidden",e=>!e),this.arrowView.bindTemplate.if("isOn","ck-splitbutton_open")]},children:this.children})}render(){super.render();this.children.add(this.actionView);this.children.add(this.arrowView);this.focusTracker.add(this.actionView.element);this.focusTracker.add(this.arrowView.element);this.keystrokes.listenTo(this.element);this.keystrokes.set("arrowright",(e,t)=>{if(this.focusTracker.focusedElement===this.actionView.element){this.arrowView.focus();t()}});this.keystrokes.set("arrowleft",(e,t)=>{if(this.focusTracker.focusedElement===this.arrowView.element){this.actionView.focus();t()}})}focus(){this.actionView.focus()}_createActionView(){const e=new rw;e.bind("icon","isEnabled","isOn","isToggleable","keystroke","label","tabindex","tooltip","tooltipPosition","type","withText").to(this);e.extendTemplate({attributes:{class:"ck-splitbutton__action"}});e.delegate("execute").to(this);return e}_createArrowView(){const e=new rw;const t=e.bindTemplate;e.icon=sw;e.extendTemplate({attributes:{class:"ck-splitbutton__arrow","aria-haspopup":true,"aria-expanded":t.to("isOn",e=>String(e))}});e.bind("isEnabled").to(this);e.delegate("execute").to(this,"open");return e}}var c_='';var l_=n(51);class d_ extends Vw{init(){const e=this.editor;const t=e.t;const n=e.ui.componentFactory;const i=Bk(e);const o=i[0];n.add("codeBlock",n=>{const r=e.commands.get("codeBlock");const s=bw(n,a_);const a=s.buttonView;a.set({label:t("Insert code block"),tooltip:true,icon:c_,isToggleable:true});a.bind("isOn").to(r,"value",e=>!!e);a.on("execute",()=>{e.execute("codeBlock",{language:o.language});e.editing.view.focus()});s.on("execute",t=>{e.execute("codeBlock",{language:t.source._codeBlockLanguage,forceValue:true});e.editing.view.focus()});s.class="ck-code-block-dropdown";s.bind("isEnabled").to(r);kw(s,this._getLanguageListItemDefinitions(i));return s})}_getLanguageListItemDefinitions(e){const t=this.editor;const n=t.commands.get("codeBlock");const i=new xs;for(const t of e){const e={type:"button",model:new r_({_codeBlockLanguage:t.language,label:t.label,withText:true})};e.model.bind("isOn").to(n,"value",t=>t===e.model._codeBlockLanguage);i.add(e)}return i}}class u_ extends Vw{static get requires(){return[t_,d_]}static get pluginName(){return"CodeBlock"}}class h_{constructor(e){this.files=f_(e);this._native=e}get types(){return this._native.types}getData(e){return this._native.getData(e)}setData(e,t){this._native.setData(e,t)}}function f_(e){const t=e.files?Array.from(e.files):[];const n=e.items?Array.from(e.items):[];if(t.length){return t}return n.filter(e=>e.kind==="file").map(e=>e.getAsFile())}class g_ extends Ku{constructor(e){super(e);const t=this.document;this.domEventType=["paste","copy","cut","drop","dragover"];this.listenTo(t,"paste",n,{priority:"low"});this.listenTo(t,"drop",n,{priority:"low"});function n(e,n){n.preventDefault();const i=n.dropRange?[n.dropRange]:Array.from(t.selection.getRanges());const o=new es(t,"clipboardInput");t.fire(o,{dataTransfer:n.dataTransfer,targetRanges:i});if(o.stop.called){n.stopPropagation()}}}onDomEvent(e){const t={dataTransfer:new h_(e.clipboardData?e.clipboardData:e.dataTransfer)};if(e.type=="drop"){t.dropRange=m_(this.view,e)}this.fire(e.type,e,t)}}function m_(e,t){const n=t.target.ownerDocument;const i=t.clientX;const o=t.clientY;let r;if(n.caretRangeFromPoint&&n.caretRangeFromPoint(i,o)){r=n.caretRangeFromPoint(i,o)}else if(t.rangeParent){r=n.createRange();r.setStart(t.rangeParent,t.rangeOffset);r.collapse(true)}if(r){return e.domConverter.domRangeToView(r)}else{return e.document.selection.getFirstRange()}}function p_(e){e=e.replace(//g,">").replace(/\n/g,"

    ").replace(/^\s/," ").replace(/\s$/," ").replace(/\s\s/g,"  ");if(e.indexOf("

    ")>-1){e=`

    ${e}

    `}return e}function b_(e){return e.replace(/(\s+)<\/span>/g,(e,t)=>{if(t.length==1){return" "}return t})}const w_=["figcaption","li"];function k_(e){let t="";if(e.is("text")||e.is("textProxy")){t=e.data}else if(e.is("img")&&e.hasAttribute("alt")){t=e.getAttribute("alt")}else{let n=null;for(const i of e.getChildren()){const e=k_(i);if(n&&(n.is("containerElement")||i.is("containerElement"))){if(w_.includes(n.name)||w_.includes(i.name)){t+="\n"}else{t+="\n\n"}}t+=e;n=i}}return t}class __ extends Vw{static get pluginName(){return"Clipboard"}init(){const e=this.editor;const t=e.model.document;const n=e.editing.view;const i=n.document;this._htmlDataProcessor=new Cp(i);n.addObserver(g_);this.listenTo(i,"clipboardInput",t=>{if(e.isReadOnly){t.stop()}},{priority:"highest"});this.listenTo(i,"clipboardInput",(e,t)=>{const i=t.dataTransfer;let o="";if(i.getData("text/html")){o=b_(i.getData("text/html"))}else if(i.getData("text/plain")){o=p_(i.getData("text/plain"))}o=this._htmlDataProcessor.toView(o);const r=new es(this,"inputTransformation");this.fire(r,{content:o,dataTransfer:i});if(r.stop.called){e.stop()}n.scrollToTheSelection()},{priority:"low"});this.listenTo(this,"inputTransformation",(e,t)=>{if(!t.content.isEmpty){const n=this.editor.data;const i=this.editor.model;const o=n.toModel(t.content,"$clipboardHolder");if(o.childCount==0){return}i.insertContent(o);e.stop()}},{priority:"low"});function o(n,o){const r=o.dataTransfer;o.preventDefault();const s=e.data.toView(e.model.getSelectedContent(t.selection));i.fire("clipboardOutput",{dataTransfer:r,content:s,method:n.name})}this.listenTo(i,"copy",o,{priority:"low"});this.listenTo(i,"cut",(t,n)=>{if(e.isReadOnly){n.preventDefault()}else{o(t,n)}},{priority:"low"});this.listenTo(i,"clipboardOutput",(n,i)=>{if(!i.content.isEmpty){i.dataTransfer.setData("text/html",this._htmlDataProcessor.toData(i.content));i.dataTransfer.setData("text/plain",k_(i.content))}if(i.method=="cut"){e.model.deleteContent(t.selection)}},{priority:"low"})}}class v_ extends Lw{execute(){const e=this.editor.model;const t=e.document;e.change(n=>{y_(this.editor.model,n,t.selection,e.schema);this.fire("afterExecute",{writer:n})})}}function y_(e,t,n,i){const o=n.isCollapsed;const r=n.getFirstRange();const s=r.start.parent;const a=r.end.parent;if(i.isLimit(s)||i.isLimit(a)){if(!o&&s==a){e.deleteContent(n)}return}if(o){const e=Ik(t.model.schema,n.getAttributes());x_(t,r.start);t.setSelectionAttribute(e)}else{const i=!(r.start.isAtStart&&r.end.isAtEnd);const o=s==a;e.deleteContent(n,{leaveUnmerged:i});if(i){if(o){x_(t,n.focus)}else{t.setSelection(a,0)}}}}function x_(e,t){e.split(t);e.setSelection(t.parent.nextSibling,0)}class C_ extends Vw{static get pluginName(){return"Enter"}init(){const e=this.editor;const t=e.editing.view;const n=t.document;t.addObserver(Lk);e.commands.add("enter",new v_(e));this.listenTo(n,"enter",(n,i)=>{i.preventDefault();if(i.isSoft){return}e.execute("enter");t.scrollToTheSelection()},{priority:"low"})}}class A_ extends Lw{execute(){const e=this.editor.model;const t=e.schema.getLimitElement(e.document.selection);e.change(e=>{e.setSelection(t,"in")})}}const T_=Dl("Ctrl+A");class S_ extends Vw{static get pluginName(){return"SelectAllEditing"}init(){const e=this.editor;const t=e.editing.view;const n=t.document;e.commands.add("selectAll",new A_(e));this.listenTo(n,"keydown",(t,n)=>{if(Vl(n)===T_){e.execute("selectAll");n.preventDefault()}})}}var P_='';class E_ extends Vw{static get pluginName(){return"SelectAllUI"}init(){const e=this.editor;e.ui.componentFactory.add("selectAll",t=>{const n=e.commands.get("selectAll");const i=new rw(t);const o=t.t;i.set({label:o("Select all"),icon:P_,keystroke:"Ctrl+A",tooltip:true});i.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(i,"execute",()=>{e.execute("selectAll");e.editing.view.focus()});return i})}}class M_ extends Vw{static get requires(){return[S_,E_]}static get pluginName(){return"SelectAll"}}class I_{constructor(e,t=20){this.model=e;this.size=0;this.limit=t;this.isLocked=false;this._changeCallback=(e,t)=>{if(t.type!="transparent"&&t!==this._batch){this._reset(true)}};this._selectionChangeCallback=()=>{this._reset()};this.model.document.on("change",this._changeCallback);this.model.document.selection.on("change:range",this._selectionChangeCallback);this.model.document.selection.on("change:attribute",this._selectionChangeCallback)}get batch(){if(!this._batch){this._batch=this.model.createBatch()}return this._batch}input(e){this.size+=e;if(this.size>=this.limit){this._reset(true)}}lock(){this.isLocked=true}unlock(){this.isLocked=false}destroy(){this.model.document.off("change",this._changeCallback);this.model.document.selection.off("change:range",this._selectionChangeCallback);this.model.document.selection.off("change:attribute",this._selectionChangeCallback)}_reset(e){if(!this.isLocked||e){this._batch=null;this.size=0}}}class N_ extends Lw{constructor(e,t){super(e);this._buffer=new I_(e.model,t);this._batches=new WeakSet}get buffer(){return this._buffer}destroy(){super.destroy();this._buffer.destroy()}execute(e={}){const t=this.editor.model;const n=t.document;const i=e.text||"";const o=i.length;const r=e.range?t.createSelection(e.range):n.selection;const s=e.resultRange;t.enqueueChange(this._buffer.batch,e=>{this._buffer.lock();t.deleteContent(r);if(i){t.insertContent(e.createText(i,n.selection.getAttributes()),r)}if(s){e.setSelection(s)}else if(!r.is("documentSelection")){e.setSelection(r)}this._buffer.unlock();this._buffer.input(o);this._batches.add(this._buffer.batch)})}}function O_(e){let t=null;const n=e.model;const i=e.editing.view;const o=e.commands.get("input");if(Tl.isAndroid){i.document.on("beforeinput",(e,t)=>r(t),{priority:"lowest"})}else{i.document.on("keydown",(e,t)=>r(t),{priority:"lowest"})}i.document.on("compositionstart",s,{priority:"lowest"});i.document.on("compositionend",()=>{t=n.createSelection(n.document.selection)},{priority:"lowest"});function r(e){const r=n.document;const s=i.document.isComposing;const c=t&&t.isEqual(r.selection);t=null;if(!o.isEnabled){return}if(V_(e)||r.selection.isCollapsed){return}if(s&&e.keyCode===229){return}if(!s&&e.keyCode===229&&c){return}a()}function s(){const e=n.document;const t=e.selection.rangeCount===1?e.selection.getFirstRange().isFlat:true;if(e.selection.isCollapsed||t){return}a()}function a(){const e=o.buffer;e.lock();n.enqueueChange(e.batch,()=>{n.deleteContent(n.document.selection)});e.unlock()}}const R_=[Vl("arrowUp"),Vl("arrowRight"),Vl("arrowDown"),Vl("arrowLeft"),9,16,17,18,19,20,27,33,34,35,36,45,91,93,144,145,173,174,175,176,177,178,179,255];for(let e=112;e<=135;e++){R_.push(e)}function V_(e){if(e.ctrlKey){return true}return R_.includes(e.keyCode)}function D_(e,t){const n=[];let i=0;let o;e.forEach(e=>{if(e=="equal"){r();i++}else if(e=="insert"){if(s("insert")){o.values.push(t[i])}else{r();o={type:"insert",index:i,values:[t[i]]}}i++}else{if(s("delete")){o.howMany++}else{r();o={type:"delete",index:i,howMany:1}}}});r();return n;function r(){if(o){n.push(o);o=null}}function s(e){return o&&o.type==e}}function L_(e){if(e.length==0){return false}for(const t of e){if(t.type==="children"&&!z_(t)){return true}}return false}function z_(e){if(e.newChildren.length-e.oldChildren.length!=1){return}const t=_d(e.oldChildren,e.newChildren,B_);const n=D_(t,e.newChildren);if(n.length>1){return}const i=n[0];if(!(!!i.values[0]&&i.values[0].is("text"))){return}return i}function B_(e,t){if(!!e&&e.is("text")&&!!t&&t.is("text")){return e.data===t.data}else{return e===t}}function j_(e){e.editing.view.document.on("mutations",(t,n,i)=>{new F_(e).handle(n,i)})}class F_{constructor(e){this.editor=e;this.editing=this.editor.editing}handle(e,t){if(L_(e)){this._handleContainerChildrenMutations(e,t)}else{for(const n of e){this._handleTextMutation(n,t);this._handleTextNodeInsertion(n)}}}_handleContainerChildrenMutations(e,t){const n=H_(e);if(!n){return}const i=this.editor.editing.view.domConverter;const o=i.mapViewToDom(n);const r=new Ld(this.editor.editing.view.document);const s=this.editor.data.toModel(r.domToView(o)).getChild(0);const a=this.editor.editing.mapper.toModelElement(n);if(!a){return}const c=Array.from(s.getChildren());const l=Array.from(a.getChildren());const d=c[c.length-1];const u=l[l.length-1];if(d&&d.is("softBreak")&&u&&!u.is("softBreak")){c.pop()}const h=this.editor.model.schema;if(!W_(c,h)||!W_(l,h)){return}const f=c.map(e=>e.is("text")?e.data:"@").join("").replace(/\u00A0/g," ");const g=l.map(e=>e.is("text")?e.data:"@").join("").replace(/\u00A0/g," ");if(g===f){return}const m=_d(g,f);const{firstChangeAt:p,insertions:b,deletions:w}=U_(m);let k=null;if(t){k=this.editing.mapper.toModelRange(t.getFirstRange())}const _=f.substr(p,b);const v=this.editor.model.createRange(this.editor.model.createPositionAt(a,p),this.editor.model.createPositionAt(a,p+w));this.editor.execute("input",{text:_,range:v,resultRange:k})}_handleTextMutation(e,t){if(e.type!="text"){return}const n=e.newText.replace(/\u00A0/g," ");const i=e.oldText.replace(/\u00A0/g," ");if(i===n){return}const o=_d(i,n);const{firstChangeAt:r,insertions:s,deletions:a}=U_(o);let c=null;if(t){c=this.editing.mapper.toModelRange(t.getFirstRange())}const l=this.editing.view.createPositionAt(e.node,r);const d=this.editing.mapper.toModelPosition(l);const u=this.editor.model.createRange(d,d.getShiftedBy(a));const h=n.substr(r,s);this.editor.execute("input",{text:h,range:u,resultRange:c})}_handleTextNodeInsertion(e){if(e.type!="children"){return}const t=z_(e);const n=this.editing.view.createPositionAt(e.node,t.index);const i=this.editing.mapper.toModelPosition(n);const o=t.values[0].data;this.editor.execute("input",{text:o.replace(/\u00A0/g," "),range:this.editor.model.createRange(i)})}}function H_(e){const t=e.map(e=>e.node).reduce((e,t)=>e.getCommonAncestor(t,{includeSelf:true}));if(!t){return}return t.getAncestors({includeSelf:true,parentFirst:true}).find(e=>e.is("containerElement")||e.is("rootElement"))}function W_(e,t){return e.every(e=>t.isInline(e))}function U_(e){let t=null;let n=null;for(let i=0;i{this._buffer.lock();const o=i.createSelection(e.selection||n.selection);const r=o.isCollapsed;if(o.isCollapsed){t.modifySelection(o,{direction:this.direction,unit:e.unit})}if(this._shouldEntireContentBeReplacedWithParagraph(e.sequence||1)){this._replaceEntireContentWithParagraph(i);return}if(o.isCollapsed){return}let s=0;o.getFirstRange().getMinimalFlatRanges().forEach(e=>{s+=gl(e.getWalker({singleCharacters:true,ignoreElementEnd:true,shallow:true}))});t.deleteContent(o,{doNotResetEntireContent:r,direction:this.direction});this._buffer.input(s);i.setSelection(o);this._buffer.unlock()})}_shouldEntireContentBeReplacedWithParagraph(e){if(e>1){return false}const t=this.editor.model;const n=t.document;const i=n.selection;const o=t.schema.getLimitElement(i);const r=i.isCollapsed&&i.containsEntireContent(o);if(!r){return false}if(!t.schema.checkChild(o,"paragraph")){return false}const s=o.getChild(0);if(s&&s.name==="paragraph"){return false}return true}_replaceEntireContentWithParagraph(e){const t=this.editor.model;const n=t.document;const i=n.selection;const o=t.schema.getLimitElement(i);const r=e.createElement("paragraph");e.remove(e.createRangeIn(o));e.insert(r,o);e.setSelection(r,0)}}class G_ extends Gd{constructor(e){super(e);const t=e.document;let n=0;t.on("keyup",(e,t)=>{if(t.keyCode==Rl.delete||t.keyCode==Rl.backspace){n=0}});t.on("keydown",(e,t)=>{const o={};if(t.keyCode==Rl.delete){o.direction="forward";o.unit="character"}else if(t.keyCode==Rl.backspace){o.direction="backward";o.unit="codePoint"}else{return}const r=Tl.isMac?t.altKey:t.ctrlKey;o.unit=r?"word":o.unit;o.sequence=++n;i(e,t.domEvent,o)});if(Tl.isAndroid){t.on("beforeinput",(t,n)=>{if(n.domEvent.inputType!="deleteContentBackward"){return}const o={unit:"codepoint",direction:"backward",sequence:1};const r=n.domTarget.ownerDocument.defaultView.getSelection();if(r.anchorNode==r.focusNode&&r.anchorOffset+1!=r.focusOffset){o.selectionToRemove=e.domConverter.domSelectionToView(r)}i(t,n.domEvent,o)})}function i(e,n,i){let o;t.once("delete",e=>o=e,{priority:Number.POSITIVE_INFINITY});t.fire("delete",new Yu(t,n,i));if(o&&o.stop.called){e.stop()}}}observe(){}}class Y_ extends Vw{static get pluginName(){return"Delete"}init(){const e=this.editor;const t=e.editing.view;const n=t.document;t.addObserver(G_);e.commands.add("forwardDelete",new $_(e,"forward"));e.commands.add("delete",new $_(e,"backward"));this.listenTo(n,"delete",(n,i)=>{const o={unit:i.unit,sequence:i.sequence};if(i.selectionToRemove){const t=e.model.createSelection();const n=[];for(const t of i.selectionToRemove.getRanges()){n.push(e.editing.mapper.toModelRange(t))}t.setTo(n);o.selection=t}e.execute(i.direction=="forward"?"forwardDelete":"delete",o);i.preventDefault();t.scrollToTheSelection()});if(Tl.isAndroid){let e=null;this.listenTo(n,"delete",(t,n)=>{const i=n.domTarget.ownerDocument.defaultView.getSelection();e={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}},{priority:"lowest"});this.listenTo(n,"keyup",(t,n)=>{if(e){const t=n.domTarget.ownerDocument.defaultView.getSelection();t.collapse(e.anchorNode,e.anchorOffset);t.extend(e.focusNode,e.focusOffset);e=null}})}}}class K_ extends Vw{static get requires(){return[q_,Y_]}static get pluginName(){return"Typing"}}const Q_=new Map;function J_(e,t,n){let i=Q_.get(e);if(!i){i=new Map;Q_.set(e,i)}i.set(t,n)}function Z_(e,t){const n=Q_.get(e);if(n&&n.has(t)){return n.get(t)}return X_}function X_(e){return[e]}function ev(e,t,n={}){const i=Z_(e.constructor,t.constructor);try{e=e.clone();return i(e,t,n)}catch(e){throw e}}function tv(e,t,n){e=e.slice();t=t.slice();const i=new nv(n.document,n.useRelations,n.forceWeakRemove);i.setOriginalOperations(e);i.setOriginalOperations(t);const o=i.originalOperations;if(e.length==0||t.length==0){return{operationsA:e,operationsB:t,originalOperations:o}}const r=new WeakMap;for(const t of e){r.set(t,0)}const s={nextBaseVersionA:e[e.length-1].baseVersion+1,nextBaseVersionB:t[t.length-1].baseVersion+1,originalOperationsACount:e.length,originalOperationsBCount:t.length};let a=0;while(a{if(e.key===t.key&&e.range.start.hasSameParentAs(t.range.start)){const i=e.range.getDifference(t.range).map(t=>new tm(t,e.key,e.oldValue,e.newValue,0));const o=e.range.getIntersection(t.range);if(o){if(n.aIsStrong){i.push(new tm(o,t.key,t.newValue,e.newValue,0))}}if(i.length==0){return[new Nm(0)]}return i}else{return[e]}});J_(tm,om,(e,t)=>{if(e.range.start.hasSameParentAs(t.position)&&e.range.containsPosition(t.position)){const n=e.range._getTransformedByInsertion(t.position,t.howMany,!t.shouldReceiveAttributes);const i=n.map(t=>new tm(t,e.key,e.oldValue,e.newValue,e.baseVersion));if(t.shouldReceiveAttributes){const n=rv(t,e.key,e.oldValue);if(n){i.unshift(n)}}return i}e.range=e.range._getTransformedByInsertion(t.position,t.howMany,false)[0];return[e]});function rv(e,t,n){const i=e.nodes;const o=i.getNode(0).getAttribute(t);if(o==n){return null}const r=new Kh(e.position,e.position.getShiftedBy(e.howMany));return new tm(r,t,o,n,0)}J_(tm,cm,(e,t)=>{const n=[];if(e.range.start.hasSameParentAs(t.deletionPosition)){if(e.range.containsPosition(t.deletionPosition)||e.range.start.isEqual(t.deletionPosition)){n.push(Kh._createFromPositionAndShift(t.graveyardPosition,1))}}const i=e.range._getTransformedByMergeOperation(t);if(!i.isCollapsed){n.push(i)}return n.map(t=>new tm(t,e.key,e.oldValue,e.newValue,e.baseVersion))});J_(tm,im,(e,t)=>{const n=sv(e.range,t);return n.map(t=>new tm(t,e.key,e.oldValue,e.newValue,e.baseVersion))});function sv(e,t){const n=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);let i=null;let o=[];if(n.containsRange(e,true)){i=e}else if(e.start.hasSameParentAs(n.start)){o=e.getDifference(n);i=e.getIntersection(n)}else{o=[e]}const r=[];for(let e of o){e=e._getTransformedByDeletion(t.sourcePosition,t.howMany);const n=t.getMovedRangeStart();const i=e.start.hasSameParentAs(n);e=e._getTransformedByInsertion(n,t.howMany,i);r.push(...e)}if(i){r.push(i._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany,false)[0])}return r}J_(tm,lm,(e,t)=>{if(e.range.end.isEqual(t.insertionPosition)){if(!t.graveyardPosition){e.range.end.offset++}return[e]}if(e.range.start.hasSameParentAs(t.splitPosition)&&e.range.containsPosition(t.splitPosition)){const n=e.clone();n.range=new Kh(t.moveTargetPosition.clone(),e.range.end._getCombined(t.splitPosition,t.moveTargetPosition));e.range.end=t.splitPosition.clone();e.range.end.stickiness="toPrevious";return[e,n]}e.range=e.range._getTransformedBySplitOperation(t);return[e]});J_(om,tm,(e,t)=>{const n=[e];if(e.shouldReceiveAttributes&&e.position.hasSameParentAs(t.range.start)&&t.range.containsPosition(e.position)){const i=rv(e,t.key,t.newValue);if(i){n.push(i)}}return n});J_(om,om,(e,t,n)=>{if(e.position.isEqual(t.position)&&n.aIsStrong){return[e]}e.position=e.position._getTransformedByInsertOperation(t);return[e]});J_(om,im,(e,t)=>{e.position=e.position._getTransformedByMoveOperation(t);return[e]});J_(om,lm,(e,t)=>{e.position=e.position._getTransformedBySplitOperation(t);return[e]});J_(om,cm,(e,t)=>{e.position=e.position._getTransformedByMergeOperation(t);return[e]});J_(rm,om,(e,t)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedByInsertOperation(t)[0]}if(e.newRange){e.newRange=e.newRange._getTransformedByInsertOperation(t)[0]}return[e]});J_(rm,rm,(e,t,n)=>{if(e.name==t.name){if(n.aIsStrong){e.oldRange=t.newRange?t.newRange.clone():null}else{return[new Nm(0)]}}return[e]});J_(rm,cm,(e,t)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedByMergeOperation(t)}if(e.newRange){e.newRange=e.newRange._getTransformedByMergeOperation(t)}return[e]});J_(rm,im,(e,t,n)=>{if(e.oldRange){e.oldRange=Kh._createFromRanges(e.oldRange._getTransformedByMoveOperation(t))}if(e.newRange){if(n.abRelation){const i=Kh._createFromRanges(e.newRange._getTransformedByMoveOperation(t));if(n.abRelation.side=="left"&&t.targetPosition.isEqual(e.newRange.start)){e.newRange.start.path=n.abRelation.path;e.newRange.end=i.end;return[e]}else if(n.abRelation.side=="right"&&t.targetPosition.isEqual(e.newRange.end)){e.newRange.start=i.start;e.newRange.end.path=n.abRelation.path;return[e]}}e.newRange=Kh._createFromRanges(e.newRange._getTransformedByMoveOperation(t))}return[e]});J_(rm,lm,(e,t,n)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedBySplitOperation(t)}if(e.newRange){if(n.abRelation){const i=e.newRange._getTransformedBySplitOperation(t);if(e.newRange.start.isEqual(t.splitPosition)&&n.abRelation.wasStartBeforeMergedElement){e.newRange.start=qh._createAt(t.insertionPosition)}else if(e.newRange.start.isEqual(t.splitPosition)&&!n.abRelation.wasInLeftElement){e.newRange.start=qh._createAt(t.moveTargetPosition)}if(e.newRange.end.isEqual(t.splitPosition)&&n.abRelation.wasInRightElement){e.newRange.end=qh._createAt(t.moveTargetPosition)}else if(e.newRange.end.isEqual(t.splitPosition)&&n.abRelation.wasEndBeforeMergedElement){e.newRange.end=qh._createAt(t.insertionPosition)}else{e.newRange.end=i.end}return[e]}e.newRange=e.newRange._getTransformedBySplitOperation(t)}return[e]});J_(cm,om,(e,t)=>{if(e.sourcePosition.hasSameParentAs(t.position)){e.howMany+=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByInsertOperation(t);e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t);return[e]});J_(cm,cm,(e,t,n)=>{if(e.sourcePosition.isEqual(t.sourcePosition)&&e.targetPosition.isEqual(t.targetPosition)){if(!n.bWasUndone){return[new Nm(0)]}else{const n=t.graveyardPosition.path.slice();n.push(0);e.sourcePosition=new qh(t.graveyardPosition.root,n);e.howMany=0;return[e]}}if(e.sourcePosition.isEqual(t.sourcePosition)&&!e.targetPosition.isEqual(t.targetPosition)&&!n.bWasUndone&&n.abRelation!="splitAtSource"){const i=e.targetPosition.root.rootName=="$graveyard";const o=t.targetPosition.root.rootName=="$graveyard";const r=i&&!o;const s=o&&!i;const a=s||!r&&n.aIsStrong;if(a){const n=t.targetPosition._getTransformedByMergeOperation(t);const i=e.targetPosition._getTransformedByMergeOperation(t);return[new im(n,e.howMany,i,0)]}else{return[new Nm(0)]}}if(e.sourcePosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByMergeOperation(t);e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);if(!e.graveyardPosition.isEqual(t.graveyardPosition)||!n.aIsStrong){e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)}return[e]});J_(cm,im,(e,t,n)=>{const i=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);if(t.type=="remove"&&!n.bWasUndone&&!n.forceWeakRemove){if(e.deletionPosition.hasSameParentAs(t.sourcePosition)&&i.containsPosition(e.sourcePosition)){return[new Nm(0)]}}if(e.sourcePosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}if(e.sourcePosition.hasSameParentAs(t.sourcePosition)){e.howMany-=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByMoveOperation(t);e.targetPosition=e.targetPosition._getTransformedByMoveOperation(t);if(!e.graveyardPosition.isEqual(t.targetPosition)){e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)}return[e]});J_(cm,lm,(e,t,n)=>{if(t.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedByDeletion(t.graveyardPosition,1);if(e.deletionPosition.isEqual(t.graveyardPosition)){e.howMany=t.howMany}}if(e.targetPosition.isEqual(t.splitPosition)){const i=t.howMany!=0;const o=t.graveyardPosition&&e.deletionPosition.isEqual(t.graveyardPosition);if(i||o||n.abRelation=="mergeTargetNotMoved"){e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t);return[e]}}if(e.sourcePosition.isEqual(t.splitPosition)){if(n.abRelation=="mergeSourceNotMoved"){e.howMany=0;e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]}if(n.abRelation=="mergeSameElement"||e.sourcePosition.offset>0){e.sourcePosition=t.moveTargetPosition.clone();e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]}}if(e.sourcePosition.hasSameParentAs(t.splitPosition)){e.howMany=t.splitPosition.offset}e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t);e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]});J_(im,om,(e,t)=>{const n=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);const i=n._getTransformedByInsertOperation(t,false)[0];e.sourcePosition=i.start;e.howMany=i.end.offset-i.start.offset;if(!e.targetPosition.isEqual(t.position)){e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t)}return[e]});J_(im,im,(e,t,n)=>{const i=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);const o=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);let r=n.aIsStrong;let s=!n.aIsStrong;if(n.abRelation=="insertBefore"||n.baRelation=="insertAfter"){s=true}else if(n.abRelation=="insertAfter"||n.baRelation=="insertBefore"){s=false}let a;if(e.targetPosition.isEqual(t.targetPosition)&&s){a=e.targetPosition._getTransformedByDeletion(t.sourcePosition,t.howMany)}else{a=e.targetPosition._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany)}if(av(e,t)&&av(t,e)){return[t.getReversed()]}const c=i.containsPosition(t.targetPosition);if(c&&i.containsRange(o,true)){i.start=i.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);i.end=i.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);return cv([i],a)}const l=o.containsPosition(e.targetPosition);if(l&&o.containsRange(i,true)){i.start=i.start._getCombined(t.sourcePosition,t.getMovedRangeStart());i.end=i.end._getCombined(t.sourcePosition,t.getMovedRangeStart());return cv([i],a)}const d=Vs(e.sourcePosition.getParentPath(),t.sourcePosition.getParentPath());if(d=="prefix"||d=="extension"){i.start=i.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);i.end=i.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);return cv([i],a)}if(e.type=="remove"&&t.type!="remove"&&!n.aWasUndone&&!n.forceWeakRemove){r=true}else if(e.type!="remove"&&t.type=="remove"&&!n.bWasUndone&&!n.forceWeakRemove){r=false}const u=[];const h=i.getDifference(o);for(const e of h){e.start=e.start._getTransformedByDeletion(t.sourcePosition,t.howMany);e.end=e.end._getTransformedByDeletion(t.sourcePosition,t.howMany);const n=Vs(e.start.getParentPath(),t.getMovedRangeStart().getParentPath())=="same";const i=e._getTransformedByInsertion(t.getMovedRangeStart(),t.howMany,n);u.push(...i)}const f=i.getIntersection(o);if(f!==null&&r){f.start=f.start._getCombined(t.sourcePosition,t.getMovedRangeStart());f.end=f.end._getCombined(t.sourcePosition,t.getMovedRangeStart());if(u.length===0){u.push(f)}else if(u.length==1){if(o.start.isBefore(i.start)||o.start.isEqual(i.start)){u.unshift(f)}else{u.push(f)}}else{u.splice(1,0,f)}}if(u.length===0){return[new Nm(e.baseVersion)]}return cv(u,a)});J_(im,lm,(e,t,n)=>{let i=e.targetPosition.clone();if(!e.targetPosition.isEqual(t.insertionPosition)||!t.graveyardPosition||n.abRelation=="moveTargetAfter"){i=e.targetPosition._getTransformedBySplitOperation(t)}const o=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);if(o.end.isEqual(t.insertionPosition)){if(!t.graveyardPosition){e.howMany++}e.targetPosition=i;return[e]}if(o.start.hasSameParentAs(t.splitPosition)&&o.containsPosition(t.splitPosition)){let e=new Kh(t.splitPosition,o.end);e=e._getTransformedBySplitOperation(t);const n=[new Kh(o.start,t.splitPosition),e];return cv(n,i)}if(e.targetPosition.isEqual(t.splitPosition)&&n.abRelation=="insertAtSource"){i=t.moveTargetPosition}if(e.targetPosition.isEqual(t.insertionPosition)&&n.abRelation=="insertBetween"){i=e.targetPosition}const r=o._getTransformedBySplitOperation(t);const s=[r];if(t.graveyardPosition){const i=o.start.isEqual(t.graveyardPosition)||o.containsPosition(t.graveyardPosition);if(e.howMany>1&&i&&!n.aWasUndone){s.push(Kh._createFromPositionAndShift(t.insertionPosition,1))}}return cv(s,i)});J_(im,cm,(e,t,n)=>{const i=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);if(t.deletionPosition.hasSameParentAs(e.sourcePosition)&&i.containsPosition(t.sourcePosition)){if(e.type=="remove"&&!n.forceWeakRemove){if(!n.aWasUndone){const n=[];let i=t.graveyardPosition.clone();let o=t.targetPosition._getTransformedByMergeOperation(t);if(e.howMany>1){n.push(new im(e.sourcePosition,e.howMany-1,e.targetPosition,0));i=i._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany-1);o=o._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany-1)}const r=t.deletionPosition._getCombined(e.sourcePosition,e.targetPosition);const s=new im(i,1,r,0);const a=s.getMovedRangeStart().path.slice();a.push(0);const c=new qh(s.targetPosition.root,a);o=o._getTransformedByMove(i,r,1);const l=new im(o,t.howMany,c,0);n.push(s);n.push(l);return n}}else{if(e.howMany==1){if(!n.bWasUndone){return[new Nm(0)]}else{e.sourcePosition=t.graveyardPosition.clone();e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);return[e]}}}}const o=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);const r=o._getTransformedByMergeOperation(t);e.sourcePosition=r.start;e.howMany=r.end.offset-r.start.offset;e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);return[e]});J_(sm,om,(e,t)=>{e.position=e.position._getTransformedByInsertOperation(t);return[e]});J_(sm,cm,(e,t)=>{if(e.position.isEqual(t.deletionPosition)){e.position=t.graveyardPosition.clone();e.position.stickiness="toNext";return[e]}e.position=e.position._getTransformedByMergeOperation(t);return[e]});J_(sm,im,(e,t)=>{e.position=e.position._getTransformedByMoveOperation(t);return[e]});J_(sm,sm,(e,t,n)=>{if(e.position.isEqual(t.position)){if(n.aIsStrong){e.oldName=t.newName}else{return[new Nm(0)]}}return[e]});J_(sm,lm,(e,t)=>{const n=e.position.path;const i=t.splitPosition.getParentPath();if(Vs(n,i)=="same"&&!t.graveyardPosition){const t=new sm(e.position.getShiftedBy(1),e.oldName,e.newName,0);return[e,t]}e.position=e.position._getTransformedBySplitOperation(t);return[e]});J_(am,am,(e,t,n)=>{if(e.root===t.root&&e.key===t.key){if(!n.aIsStrong||e.newValue===t.newValue){return[new Nm(0)]}else{e.oldValue=t.newValue}}return[e]});J_(lm,om,(e,t)=>{if(e.splitPosition.hasSameParentAs(t.position)&&e.splitPosition.offset{if(!e.graveyardPosition&&!n.bWasUndone&&e.splitPosition.hasSameParentAs(t.sourcePosition)){const n=t.graveyardPosition.path.slice();n.push(0);const i=new qh(t.graveyardPosition.root,n);const o=lm.getInsertionPosition(new qh(t.graveyardPosition.root,n));const r=new lm(i,0,null,0);r.insertionPosition=o;e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t);e.insertionPosition=lm.getInsertionPosition(e.splitPosition);e.graveyardPosition=r.insertionPosition.clone();e.graveyardPosition.stickiness="toNext";return[r,e]}if(e.splitPosition.hasSameParentAs(t.deletionPosition)&&!e.splitPosition.isAfter(t.deletionPosition)){e.howMany--}if(e.splitPosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t);e.insertionPosition=lm.getInsertionPosition(e.splitPosition);if(e.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)}return[e]});J_(lm,im,(e,t,n)=>{const i=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);if(e.graveyardPosition){const o=i.start.isEqual(e.graveyardPosition)||i.containsPosition(e.graveyardPosition);if(!n.bWasUndone&&o){const n=e.splitPosition._getTransformedByMoveOperation(t);const i=e.graveyardPosition._getTransformedByMoveOperation(t);const o=i.path.slice();o.push(0);const r=new qh(i.root,o);const s=new im(n,e.howMany,r,0);return[s]}e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)}if(e.splitPosition.hasSameParentAs(t.sourcePosition)&&i.containsPosition(e.splitPosition)){const n=t.howMany-(e.splitPosition.offset-t.sourcePosition.offset);e.howMany-=n;if(e.splitPosition.hasSameParentAs(t.targetPosition)&&e.splitPosition.offset{if(e.splitPosition.isEqual(t.splitPosition)){if(!e.graveyardPosition&&!t.graveyardPosition){return[new Nm(0)]}if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition)){return[new Nm(0)]}if(n.abRelation=="splitBefore"){e.howMany=0;e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t);return[e]}}if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition)){const i=e.splitPosition.root.rootName=="$graveyard";const o=t.splitPosition.root.rootName=="$graveyard";const r=i&&!o;const s=o&&!i;const a=s||!r&&n.aIsStrong;if(a){const n=[];if(t.howMany){n.push(new im(t.moveTargetPosition,t.howMany,t.splitPosition,0))}if(e.howMany){n.push(new im(e.splitPosition,e.howMany,e.moveTargetPosition,0))}return n}else{return[new Nm(0)]}}if(e.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t)}if(e.splitPosition.isEqual(t.insertionPosition)&&n.abRelation=="splitBefore"){e.howMany++;return[e]}if(t.splitPosition.isEqual(e.insertionPosition)&&n.baRelation=="splitBefore"){const n=t.insertionPosition.path.slice();n.push(0);const i=new qh(t.insertionPosition.root,n);const o=new im(e.insertionPosition,1,i,0);return[e,o]}if(e.splitPosition.hasSameParentAs(t.splitPosition)&&e.splitPosition.offset0}addBatch(e){const t=this.editor.model.document.selection;const n={ranges:t.hasOwnRange?Array.from(t.getRanges()):[],isBackward:t.isBackward};this._stack.push({batch:e,selection:n});this.refresh()}clearStack(){this._stack=[];this.refresh()}_restoreSelection(e,t,n){const i=this.editor.model;const o=i.document;const r=[];for(const t of e){const e=dv(t,n);const i=e.find(e=>e.start.root!=o.graveyard);if(i){r.push(i)}}if(r.length){i.change(e=>{e.setSelection(r,{backward:t})})}}_undo(e,t){const n=this.editor.model;const i=n.document;this._createdBatches.add(t);const o=e.operations.slice().filter(e=>e.isDocumentOperation);o.reverse();for(const e of o){const o=e.baseVersion+1;const r=Array.from(i.history.getOperations(o));const s=tv([e.getReversed()],r,{useRelations:true,document:this.editor.model.document,padWithNoOps:false,forceWeakRemove:true});const a=s.operationsA;for(const o of a){t.addOperation(o);n.applyOperation(o);i.history.setOperationAsUndone(e,o)}}}}function dv(e,t){const n=e.getTransformedByOperations(t);n.sort((e,t)=>e.start.isBefore(t.start)?-1:1);for(let e=1;et.batch==e):this._stack.length-1;const n=this._stack.splice(t,1)[0];const i=this.editor.model.createBatch("transparent");this.editor.model.enqueueChange(i,()=>{this._undo(n.batch,i);const e=this.editor.model.document.history.getOperations(n.batch.baseVersion);this._restoreSelection(n.selection.ranges,n.selection.isBackward,e);this.fire("revert",n.batch,i)});this.refresh()}}class hv extends lv{execute(){const e=this._stack.pop();const t=this.editor.model.createBatch("transparent");this.editor.model.enqueueChange(t,()=>{const n=e.batch.operations[e.batch.operations.length-1];const i=n.baseVersion+1;const o=this.editor.model.document.history.getOperations(i);this._restoreSelection(e.selection.ranges,e.selection.isBackward,o);this._undo(e.batch,t)});this.refresh()}}class fv extends Vw{static get pluginName(){return"UndoEditing"}constructor(e){super(e);this._batchRegistry=new WeakSet}init(){const e=this.editor;this._undoCommand=new uv(e);this._redoCommand=new hv(e);e.commands.add("undo",this._undoCommand);e.commands.add("redo",this._redoCommand);this.listenTo(e.model,"applyOperation",(e,t)=>{const n=t[0];if(!n.isDocumentOperation){return}const i=n.batch;const o=this._redoCommand._createdBatches.has(i);const r=this._undoCommand._createdBatches.has(i);const s=this._batchRegistry.has(i);if(s||i.type=="transparent"&&!o&&!r){return}else{if(o){this._undoCommand.addBatch(i)}else if(!r){this._undoCommand.addBatch(i);this._redoCommand.clearStack()}}this._batchRegistry.add(i)},{priority:"highest"});this.listenTo(this._undoCommand,"revert",(e,t,n)=>{this._redoCommand.addBatch(n)});e.keystrokes.set("CTRL+Z","undo");e.keystrokes.set("CTRL+Y","redo");e.keystrokes.set("CTRL+SHIFT+Z","redo")}}var gv='';var mv='';class pv extends Vw{init(){const e=this.editor;const t=e.locale;const n=e.t;const i=t.uiLanguageDirection=="ltr"?gv:mv;const o=t.uiLanguageDirection=="ltr"?mv:gv;this._addButton("undo",n("Undo"),"CTRL+Z",i);this._addButton("redo",n("Redo"),"CTRL+Y",o)}_addButton(e,t,n,i){const o=this.editor;o.ui.componentFactory.add(e,r=>{const s=o.commands.get(e);const a=new rw(r);a.set({label:t,icon:i,keystroke:n,tooltip:true});a.bind("isEnabled").to(s,"isEnabled");this.listenTo(a,"execute",()=>{o.execute(e);o.editing.view.focus()});return a})}}class bv extends Vw{static get requires(){return[fv,pv]}static get pluginName(){return"Undo"}}class wv extends Vw{static get requires(){return[__,C_,M_,zk,K_,bv]}static get pluginName(){return"Essentials"}}class kv extends Lw{constructor(e,t){super(e);this.attributeKey=t}refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute(this.attributeKey);this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){const t=this.editor.model;const n=t.document;const i=n.selection;const o=e.value;t.change(e=>{if(i.isCollapsed){if(o){e.setSelectionAttribute(this.attributeKey,o)}else{e.removeSelectionAttribute(this.attributeKey)}}else{const n=t.schema.getValidRanges(i.getRanges(),this.attributeKey);for(const t of n){if(o){e.setAttribute(this.attributeKey,o,t)}else{e.removeAttribute(this.attributeKey,t)}}}})}}var _v='';class vv extends rw{constructor(e){super(e);const t=this.bindTemplate;this.set("color");this.set("hasBorder");this.icon=_v;this.extendTemplate({attributes:{style:{backgroundColor:t.to("color")},class:["ck","ck-color-grid__tile",t.if("hasBorder","ck-color-table__color-tile_bordered")]}})}render(){super.render();this.iconView.fillColor="hsl(0, 0%, 100%)"}}var yv=n(53);class xv extends kb{constructor(e,t){super(e);const n=t&&t.colorDefinitions||[];const i={};if(t&&t.columns){i.gridTemplateColumns=`repeat( ${t.columns}, 1fr)`}this.set("selectedColor");this.items=this.createCollection();this.focusTracker=new Sp;this.keystrokes=new gp;this._focusCycler=new Db({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowleft",focusNext:"arrowright"}});this.items.on("add",(e,t)=>{t.isOn=t.color===this.selectedColor});n.forEach(e=>{const t=new vv;t.set({color:e.color,label:e.label,tooltip:true,hasBorder:e.options.hasBorder});t.on("execute",()=>{this.fire("execute",{value:e.color,hasBorder:e.options.hasBorder,label:e.label})});this.items.add(t)});this.setTemplate({tag:"div",children:this.items,attributes:{class:["ck","ck-color-grid"],style:i}});this.on("change:selectedColor",(e,t,n)=>{for(const e of this.items){e.isOn=e.color===n}})}focus(){if(this.items.length){this.items.first.focus()}}focusLast(){if(this.items.length){this.items.last.focus()}}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)});this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element)}}class Cv extends xs{constructor(e){super(e);this.set("isEmpty",true)}add(e,t){if(this.find(t=>t.color===e.color)){return}super.add(e,t);this.set("isEmpty",false)}remove(e){const t=super.remove(e);if(this.length===0){this.set("isEmpty",true)}return t}hasColor(e){return!!this.find(t=>t.color===e)}}ys(Cv,Qc);var Av='';var Tv=n(55);class Sv extends kb{constructor(e,{colors:t,columns:n,removeButtonLabel:i,documentColorsLabel:o,documentColorsCount:r}){super(e);this.items=this.createCollection();this.colorDefinitions=t;this.focusTracker=new Sp;this.keystrokes=new gp;this.set("selectedColor");this.removeButtonLabel=i;this.columns=n;this.documentColors=new Cv;this.documentColorsCount=r;this._focusCycler=new Db({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowup",focusNext:"arrowdown"}});this._documentColorsLabel=o;this.setTemplate({tag:"div",attributes:{class:["ck","ck-color-table"]},children:this.items});this.items.add(this._removeColorButton())}updateDocumentColors(e,t){const n=e.document;const i=this.documentColorsCount;this.documentColors.clear();for(const o of n.getRootNames()){const r=n.getRoot(o);const s=e.createRangeIn(r);for(const e of s.getItems()){if(e.is("textProxy")&&e.hasAttribute(t)){this._addColorToDocumentColors(e.getAttribute(t));if(this.documentColors.length>=i){return}}}}}updateSelectedColors(){const e=this.documentColorsGrid;const t=this.staticColorsGrid;const n=this.selectedColor;t.selectedColor=n;if(e){e.selectedColor=n}}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.keystrokes.listenTo(this.element)}appendGrids(){if(this.staticColorsGrid){return}this.staticColorsGrid=this._createStaticColorsGrid();this.items.add(this.staticColorsGrid);if(this.documentColorsCount){const e=$p.bind(this.documentColors,this.documentColors);const t=new Pb(this.locale);t.text=this._documentColorsLabel;t.extendTemplate({attributes:{class:["ck","ck-color-grid__label",e.if("isEmpty","ck-hidden")]}});this.items.add(t);this.documentColorsGrid=this._createDocumentColorsGrid();this.items.add(this.documentColorsGrid)}}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}_removeColorButton(){const e=new rw;e.set({withText:true,icon:Av,tooltip:true,label:this.removeButtonLabel});e.class="ck-color-table__remove-color";e.on("execute",()=>{this.fire("execute",{value:null})});return e}_createStaticColorsGrid(){const e=new xv(this.locale,{colorDefinitions:this.colorDefinitions,columns:this.columns});e.delegate("execute").to(this);return e}_createDocumentColorsGrid(){const e=$p.bind(this.documentColors,this.documentColors);const t=new xv(this.locale,{columns:this.columns});t.delegate("execute").to(this);t.extendTemplate({attributes:{class:e.if("isEmpty","ck-hidden")}});t.items.bindTo(this.documentColors).using(e=>{const t=new vv;t.set({color:e.color,hasBorder:e.options&&e.options.hasBorder});if(e.label){t.set({label:e.label,tooltip:true})}t.on("execute",()=>{this.fire("execute",{value:e.color})});return t});this.documentColors.on("change:isEmpty",(e,n,i)=>{if(i){t.selectedColor=null}});return t}_addColorToDocumentColors(e){const t=this.colorDefinitions.find(t=>t.color===e);if(!t){this.documentColors.add({color:e,label:e,options:{hasBorder:false}})}else{this.documentColors.add(Object.assign({},t))}}}const Pv="fontSize";const Ev="fontFamily";const Mv="fontColor";const Iv="fontBackgroundColor";function Nv(e,t){const n={model:{key:e,values:[]},view:{},upcastAlso:{}};for(const e of t){n.model.values.push(e.model);n.view[e.model]=e.view;if(e.upcastAlso){n.upcastAlso[e.model]=e.upcastAlso}}return n}function Ov(e){return t=>Dv(t.getStyle(e))}function Rv(e){return(t,n)=>n.createAttributeElement("span",{style:`${e}:${t}`},{priority:7})}function Vv({dropdownView:e,colors:t,columns:n,removeButtonLabel:i,documentColorsLabel:o,documentColorsCount:r}){const s=e.locale;const a=new Sv(s,{colors:t,columns:n,removeButtonLabel:i,documentColorsLabel:o,documentColorsCount:r});e.colorTableView=a;e.panelView.children.add(a);a.delegate("execute").to(e,"execute");return a}function Dv(e){return e.replace(/\s/g,"")}class Lv extends kv{constructor(e){super(e,Iv)}}class zv extends Vw{static get pluginName(){return"FontBackgroundColorEditing"}constructor(e){super(e);e.config.define(Iv,{colors:[{color:"hsl(0, 0%, 0%)",label:"Black"},{color:"hsl(0, 0%, 30%)",label:"Dim grey"},{color:"hsl(0, 0%, 60%)",label:"Grey"},{color:"hsl(0, 0%, 90%)",label:"Light grey"},{color:"hsl(0, 0%, 100%)",label:"White",hasBorder:true},{color:"hsl(0, 75%, 60%)",label:"Red"},{color:"hsl(30, 75%, 60%)",label:"Orange"},{color:"hsl(60, 75%, 60%)",label:"Yellow"},{color:"hsl(90, 75%, 60%)",label:"Light green"},{color:"hsl(120, 75%, 60%)",label:"Green"},{color:"hsl(150, 75%, 60%)",label:"Aquamarine"},{color:"hsl(180, 75%, 60%)",label:"Turquoise"},{color:"hsl(210, 75%, 60%)",label:"Light blue"},{color:"hsl(240, 75%, 60%)",label:"Blue"},{color:"hsl(270, 75%, 60%)",label:"Purple"}],columns:5});e.conversion.for("upcast").elementToAttribute({view:{name:"span",styles:{"background-color":/[\s\S]+/}},model:{key:Iv,value:Ov("background-color")}});e.conversion.for("downcast").attributeToElement({model:Iv,view:Rv("background-color")});e.commands.add(Iv,new Lv(e));e.model.schema.extend("$text",{allowAttributes:Iv});e.model.schema.setAttributeProperties(Iv,{isFormatting:true,copyOnEnter:true})}}function Bv(e,t){const n=e.t;const i={Black:n("Black"),"Dim grey":n("Dim grey"),Grey:n("Grey"),"Light grey":n("Light grey"),White:n("White"),Red:n("Red"),Orange:n("Orange"),Yellow:n("Yellow"),"Light green":n("Light green"),Green:n("Green"),Aquamarine:n("Aquamarine"),Turquoise:n("Turquoise"),"Light blue":n("Light blue"),Blue:n("Blue"),Purple:n("Purple")};return t.map(e=>{const t=i[e.label];if(t&&t!=e.label){e.label=t}return e})}function jv(e){return e.map(Fv).filter(e=>!!e)}function Fv(e){if(typeof e==="string"){return{model:e,label:e,hasBorder:false,view:{name:"span",styles:{color:e}}}}else{return{model:e.color,label:e.label||e.color,hasBorder:e.hasBorder===undefined?false:e.hasBorder,view:{name:"span",styles:{color:`${e.color}`}}}}}class Hv extends Vw{constructor(e,{commandName:t,icon:n,componentName:i,dropdownLabel:o}){super(e);this.commandName=t;this.componentName=i;this.icon=n;this.dropdownLabel=o;this.columns=e.config.get(`${this.componentName}.columns`);this.colorTableView}init(){const e=this.editor;const t=e.locale;const n=t.t;const i=e.commands.get(this.commandName);const o=jv(e.config.get(this.componentName).colors);const r=Bv(t,o);const s=e.config.get(`${this.componentName}.documentColors`);e.ui.componentFactory.add(this.componentName,t=>{const o=bw(t);this.colorTableView=Vv({dropdownView:o,colors:r.map(e=>({label:e.label,color:e.model,options:{hasBorder:e.hasBorder}})),columns:this.columns,removeButtonLabel:n("Remove color"),documentColorsLabel:s!==0?n("Document colors"):undefined,documentColorsCount:s===undefined?this.columns:s});this.colorTableView.bind("selectedColor").to(i,"value");o.buttonView.set({label:this.dropdownLabel,icon:this.icon,tooltip:true});o.extendTemplate({attributes:{class:"ck-color-ui-dropdown"}});o.bind("isEnabled").to(i);o.on("execute",(t,n)=>{e.execute(this.commandName,n);e.editing.view.focus()});o.on("change:isOpen",(t,n,i)=>{o.colorTableView.appendGrids();if(i){if(s!==0){this.colorTableView.updateDocumentColors(e.model,this.componentName)}this.colorTableView.updateSelectedColors()}});return o})}}var Wv='';class Uv extends Hv{constructor(e){const t=e.locale.t;super(e,{commandName:Iv,componentName:Iv,icon:Wv,dropdownLabel:t("Font Background Color")})}static get pluginName(){return"FontBackgroundColorUI"}}class qv extends Vw{static get requires(){return[zv,Uv]}static get pluginName(){return"FontBackgroundColor"}}class $v extends kv{constructor(e){super(e,Mv)}}class Gv extends Vw{static get pluginName(){return"FontColorEditing"}constructor(e){super(e);e.config.define(Mv,{colors:[{color:"hsl(0, 0%, 0%)",label:"Black"},{color:"hsl(0, 0%, 30%)",label:"Dim grey"},{color:"hsl(0, 0%, 60%)",label:"Grey"},{color:"hsl(0, 0%, 90%)",label:"Light grey"},{color:"hsl(0, 0%, 100%)",label:"White",hasBorder:true},{color:"hsl(0, 75%, 60%)",label:"Red"},{color:"hsl(30, 75%, 60%)",label:"Orange"},{color:"hsl(60, 75%, 60%)",label:"Yellow"},{color:"hsl(90, 75%, 60%)",label:"Light green"},{color:"hsl(120, 75%, 60%)",label:"Green"},{color:"hsl(150, 75%, 60%)",label:"Aquamarine"},{color:"hsl(180, 75%, 60%)",label:"Turquoise"},{color:"hsl(210, 75%, 60%)",label:"Light blue"},{color:"hsl(240, 75%, 60%)",label:"Blue"},{color:"hsl(270, 75%, 60%)",label:"Purple"}],columns:5});e.conversion.for("upcast").elementToAttribute({view:{name:"span",styles:{color:/[\s\S]+/}},model:{key:Mv,value:Ov("color")}});e.conversion.for("downcast").attributeToElement({model:Mv,view:Rv("color")});e.commands.add(Mv,new $v(e));e.model.schema.extend("$text",{allowAttributes:Mv});e.model.schema.setAttributeProperties(Mv,{isFormatting:true,copyOnEnter:true})}}var Yv='';class Kv extends Hv{constructor(e){const t=e.locale.t;super(e,{commandName:Mv,componentName:Mv,icon:Yv,dropdownLabel:t("Font Color")})}static get pluginName(){return"FontColorUI"}}class Qv extends Vw{static get requires(){return[Gv,Kv]}static get pluginName(){return"FontColor"}}class Jv extends kv{constructor(e){super(e,Ev)}}function Zv(e){return e.map(Xv).filter(e=>!!e)}function Xv(e){if(typeof e==="object"){return e}if(e==="default"){return{title:"Default",model:undefined}}if(typeof e!=="string"){return}return ey(e)}function ey(e){const t=e.replace(/"|'/g,"").split(",");const n=t[0];const i=t.map(ty).join(", ");return{title:n,model:n,view:{name:"span",styles:{"font-family":i},priority:7}}}function ty(e){e=e.trim();if(e.indexOf(" ")>0){e=`'${e}'`}return e}class ny extends Vw{static get pluginName(){return"FontFamilyEditing"}constructor(e){super(e);e.config.define(Ev,{options:["default","Arial, Helvetica, sans-serif","Courier New, Courier, monospace","Georgia, serif","Lucida Sans Unicode, Lucida Grande, sans-serif","Tahoma, Geneva, sans-serif","Times New Roman, Times, serif","Trebuchet MS, Helvetica, sans-serif","Verdana, Geneva, sans-serif"],supportAllValues:false})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:Ev});e.model.schema.setAttributeProperties(Ev,{isFormatting:true,copyOnEnter:true});const t=Zv(e.config.get("fontFamily.options")).filter(e=>e.model);const n=Nv(Ev,t);if(e.config.get("fontFamily.supportAllValues")){this._prepareAnyValueConverters()}else{e.conversion.attributeToElement(n)}e.commands.add(Ev,new Jv(e))}_prepareAnyValueConverters(){const e=this.editor;e.conversion.for("downcast").attributeToElement({model:Ev,view:(e,t)=>t.createAttributeElement("span",{style:"font-family:"+e},{priority:7})});e.conversion.for("upcast").attributeToAttribute({model:{key:Ev,value:e=>e.getStyle("font-family")},view:{name:"span",styles:{"font-family":/.*/}}})}}var iy='';class oy extends Vw{init(){const e=this.editor;const t=e.t;const n=this._getLocalizedOptions();const i=e.commands.get(Ev);e.ui.componentFactory.add(Ev,o=>{const r=bw(o);kw(r,ry(n,i));r.buttonView.set({label:t("Font Family"),icon:iy,tooltip:true});r.extendTemplate({attributes:{class:"ck-font-family-dropdown"}});r.bind("isEnabled").to(i);this.listenTo(r,"execute",t=>{e.execute(t.source.commandName,{value:t.source.commandParam});e.editing.view.focus()});return r})}_getLocalizedOptions(){const e=this.editor;const t=e.t;const n=Zv(e.config.get(Ev).options);return n.map(e=>{if(e.title==="Default"){e.title=t("Default")}return e})}}function ry(e,t){const n=new xs;for(const i of e){const e={type:"button",model:new r_({commandName:Ev,commandParam:i.model,label:i.title,withText:true})};e.model.bind("isOn").to(t,"value",e=>{if(e===i.model){return true}if(!e||!i.model){return false}return e.split(",")[0].replace(/'/g,"").toLowerCase()===i.model.toLowerCase()});if(i.view&&i.view.styles){e.model.set("labelStyle",`font-family: ${i.view.styles["font-family"]}`)}n.add(e)}return n}class sy extends Vw{static get requires(){return[ny,oy]}static get pluginName(){return"FontFamily"}}class ay extends kv{constructor(e){super(e,Pv)}}function cy(e){return e.map(e=>dy(e)).filter(e=>!!e)}const ly={get tiny(){return{title:"Tiny",model:"tiny",view:{name:"span",classes:"text-tiny",priority:7}}},get small(){return{title:"Small",model:"small",view:{name:"span",classes:"text-small",priority:7}}},get big(){return{title:"Big",model:"big",view:{name:"span",classes:"text-big",priority:7}}},get huge(){return{title:"Huge",model:"huge",view:{name:"span",classes:"text-huge",priority:7}}}};function dy(e){if(gy(e)){return hy(e)}const t=fy(e);if(t){return hy(t)}if(e==="default"){return{model:undefined,title:"Default"}}if(my(e)){return}return uy(e)}function uy(e){if(typeof e==="number"||typeof e==="string"){e={title:String(e),model:`${parseFloat(e)}px`}}e.view={name:"span",styles:{"font-size":e.model}};return hy(e)}function hy(e){if(!e.view.priority){e.view.priority=7}return e}function fy(e){return ly[e]||ly[e.model]}function gy(e){return typeof e==="object"&&e.title&&e.model&&e.view}function my(e){let t;if(typeof e==="object"){if(!e.model){throw new ss["b"]("font-size-invalid-definition: Provided font size definition is invalid.",null,e)}else{t=parseFloat(e.model)}}else{t=parseFloat(e)}return isNaN(t)}class py extends Vw{static get pluginName(){return"FontSizeEditing"}constructor(e){super(e);e.config.define(Pv,{options:["tiny","small","default","big","huge"],supportAllValues:false})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:Pv});e.model.schema.setAttributeProperties(Pv,{isFormatting:true,copyOnEnter:true});const t=e.config.get("fontSize.supportAllValues");const n=cy(this.editor.config.get("fontSize.options")).filter(e=>e.model);const i=Nv(Pv,n);if(t){this._prepareAnyValueConverters(i)}else{e.conversion.attributeToElement(i)}e.commands.add(Pv,new ay(e))}_prepareAnyValueConverters(e){const t=this.editor;const n=e.model.values.filter(e=>!String(e).match(/[\d.]+[\w%]+/));if(n.length){throw new ss["b"]("font-size-invalid-use-of-named-presets: "+"If config.fontSize.supportAllValues is set to true, you need to use numerical values as font size options.",null,{presets:n})}t.conversion.for("downcast").attributeToElement({model:Pv,view:(e,t)=>{if(!e){return}return t.createAttributeElement("span",{style:"font-size:"+e},{priority:7})}});t.conversion.for("upcast").attributeToAttribute({model:{key:Pv,value:e=>e.getStyle("font-size")},view:{name:"span"}})}}var by='';var wy=n(57);class ky extends Vw{init(){const e=this.editor;const t=e.t;const n=this._getLocalizedOptions();const i=e.commands.get(Pv);e.ui.componentFactory.add(Pv,o=>{const r=bw(o);kw(r,_y(n,i));r.buttonView.set({label:t("Font Size"),icon:by,tooltip:true});r.extendTemplate({attributes:{class:["ck-font-size-dropdown"]}});r.bind("isEnabled").to(i);this.listenTo(r,"execute",t=>{e.execute(t.source.commandName,{value:t.source.commandParam});e.editing.view.focus()});return r})}_getLocalizedOptions(){const e=this.editor;const t=e.t;const n={Default:t("Default"),Tiny:t("Tiny"),Small:t("Small"),Big:t("Big"),Huge:t("Huge")};const i=cy(e.config.get(Pv).options);return i.map(e=>{const t=n[e.title];if(t&&t!=e.title){e=Object.assign({},e,{title:t})}return e})}}function _y(e,t){const n=new xs;for(const i of e){const e={type:"button",model:new r_({commandName:Pv,commandParam:i.model,label:i.title,class:"ck-fontsize-option",withText:true})};if(i.view&&i.view.styles){e.model.set("labelStyle",`font-size:${i.view.styles["font-size"]}`)}if(i.view&&i.view.classes){e.model.set("class",`${e.model.class} ${i.view.classes}`)}e.model.bind("isOn").to(t,"value",e=>e===i.model);n.add(e)}return n}class vy extends Vw{static get requires(){return[py,ky]}static get pluginName(){return"FontSize"}}class yy extends Lw{refresh(){const e=this.editor.model;const t=e.document;const n=Bw(t.selection.getSelectedBlocks());this.value=!!n&&n.is("paragraph");this.isEnabled=!!n&&xy(n,e.schema)}execute(e={}){const t=this.editor.model;const n=t.document;t.change(i=>{const o=(e.selection||n.selection).getSelectedBlocks();for(const e of o){if(!e.is("paragraph")&&xy(e,t.schema)){i.rename(e,"paragraph")}}})}}function xy(e,t){return t.checkChild(e.parent,"paragraph")&&!t.isObject(e)}class Cy extends Lw{execute(e){const t=this.editor.model;if(!t.schema.checkChild(e.position,"paragraph")){return}t.change(n=>{const i=n.createElement("paragraph");t.insertContent(i,e.position);n.setSelection(i,"in")})}}class Ay extends Vw{static get pluginName(){return"Paragraph"}init(){const e=this.editor;const t=e.model;const n=e.data;e.commands.add("paragraph",new yy(e));e.commands.add("insertParagraph",new Cy(e));t.schema.register("paragraph",{inheritAllFrom:"$block"});e.conversion.elementToElement({model:"paragraph",view:"p"});e.conversion.for("upcast").elementToElement({model:(e,t)=>{if(!Ay.paragraphLikeElements.has(e.name)){return null}if(e.isEmpty){return null}return t.createElement("paragraph")},converterPriority:"low"});n.upcastDispatcher.on("element",(e,t,n)=>{if(!n.consumable.test(t.viewItem,{name:t.viewItem.name})){return}if(Sy(t.viewItem,t.modelCursor,n.schema)){Object.assign(t,Ty(t.viewItem,t.modelCursor,n))}},{priority:"low"});n.upcastDispatcher.on("text",(e,t,n)=>{if(t.modelRange){return}if(Sy(t.viewItem,t.modelCursor,n.schema)){Object.assign(t,Ty(t.viewItem,t.modelCursor,n))}},{priority:"lowest"});t.document.registerPostFixer(e=>this._autoparagraphEmptyRoots(e));e.data.on("ready",()=>{t.enqueueChange("transparent",e=>this._autoparagraphEmptyRoots(e))},{priority:"lowest"})}_autoparagraphEmptyRoots(e){const t=this.editor.model;for(const n of t.document.getRootNames()){const i=t.document.getRoot(n);if(i.isEmpty&&i.rootName!="$graveyard"){if(t.schema.checkChild(i,"paragraph")){e.insertElement("paragraph",i);return true}}}}}Ay.paragraphLikeElements=new Set(["blockquote","dd","div","dt","h1","h2","h3","h4","h5","h6","li","p","td"]);function Ty(e,t,n){const i=n.writer.createElement("paragraph");n.writer.insert(i,t);return n.convertItem(e,n.writer.createPositionAt(i,0))}function Sy(e,t,n){const i=n.createContext(t);if(!n.checkChild(i,"paragraph")){return false}if(!n.checkChild(i.push("paragraph"),e)){return false}return true}class Py extends Lw{constructor(e,t){super(e);this.modelElements=t}refresh(){const e=Bw(this.editor.model.document.selection.getSelectedBlocks());this.value=!!e&&this.modelElements.includes(e.name)&&e.name;this.isEnabled=!!e&&this.modelElements.some(t=>Ey(e,t,this.editor.model.schema))}execute(e){const t=this.editor.model;const n=t.document;const i=e.value;t.change(e=>{const o=Array.from(n.selection.getSelectedBlocks()).filter(e=>Ey(e,i,t.schema));for(const t of o){if(!t.is(i)){e.rename(t,i)}}})}}function Ey(e,t,n){return n.checkChild(e.parent,t)&&!n.isObject(e)}const My="paragraph";class Iy extends Vw{static get pluginName(){return"HeadingEditing"}constructor(e){super(e);e.config.define("heading",{options:[{model:"paragraph",title:"Paragraph",class:"ck-heading_paragraph"},{model:"heading1",view:"h2",title:"Heading 1",class:"ck-heading_heading1"},{model:"heading2",view:"h3",title:"Heading 2",class:"ck-heading_heading2"},{model:"heading3",view:"h4",title:"Heading 3",class:"ck-heading_heading3"}]})}static get requires(){return[Ay]}init(){const e=this.editor;const t=e.config.get("heading.options");const n=[];for(const i of t){if(i.model!==My){e.model.schema.register(i.model,{inheritAllFrom:"$block"});e.conversion.elementToElement(i);n.push(i.model)}}this._addDefaultH1Conversion(e);e.commands.add("heading",new Py(e,n))}afterInit(){const e=this.editor;const t=e.commands.get("enter");const n=e.config.get("heading.options");if(t){this.listenTo(t,"afterExecute",(t,i)=>{const o=e.model.document.selection.getFirstPosition().parent;const r=n.some(e=>o.is(e.model));if(r&&!o.is(My)&&o.childCount===0){i.writer.rename(o,My)}})}}_addDefaultH1Conversion(e){e.conversion.for("upcast").elementToElement({model:"heading1",view:"h1",converterPriority:os.get("low")+1})}}function Ny(e){const t=e.t;const n={Paragraph:t("Paragraph"),"Heading 1":t("Heading 1"),"Heading 2":t("Heading 2"),"Heading 3":t("Heading 3"),"Heading 4":t("Heading 4"),"Heading 5":t("Heading 5"),"Heading 6":t("Heading 6")};return e.config.get("heading.options").map(e=>{const t=n[e.title];if(t&&t!=e.title){e.title=t}return e})}var Oy=n(12);class Ry extends Vw{init(){const e=this.editor;const t=e.t;const n=Ny(e);const i=t("Choose heading");const o=t("Heading");e.ui.componentFactory.add("heading",t=>{const r={};const s=new xs;const a=e.commands.get("heading");const c=e.commands.get("paragraph");const l=[a];for(const e of n){const t={type:"button",model:new r_({label:e.title,class:e.class,withText:true})};if(e.model==="paragraph"){t.model.bind("isOn").to(c,"value");t.model.set("commandName","paragraph");l.push(c)}else{t.model.bind("isOn").to(a,"value",t=>t===e.model);t.model.set({commandName:"heading",commandValue:e.model})}s.add(t);r[e.model]=e.title}const d=bw(t);kw(d,s);d.buttonView.set({isOn:false,withText:true,tooltip:o});d.extendTemplate({attributes:{class:["ck-heading-dropdown"]}});d.bind("isEnabled").toMany(l,"isEnabled",(...e)=>e.some(e=>e));d.buttonView.bind("label").to(a,"value",c,"value",(e,t)=>{const n=e||t&&"paragraph";return r[n]?r[n]:i});this.listenTo(d,"execute",t=>{e.execute(t.source.commandName,t.source.commandValue?{value:t.source.commandValue}:undefined);e.editing.view.focus()});return d})}}class Vy extends Vw{static get requires(){return[Iy,Ry]}static get pluginName(){return"Heading"}}class Dy extends Lw{refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute("highlight");this.isEnabled=e.schema.checkAttributeInSelection(t.selection,"highlight")}execute(e={}){const t=this.editor.model;const n=t.document;const i=n.selection;const o=e.value;t.change(e=>{const n=t.schema.getValidRanges(i.getRanges(),"highlight");if(i.isCollapsed){const t=i.getFirstPosition();if(i.hasAttribute("highlight")){const n=e=>e.item.hasAttribute("highlight")&&e.item.getAttribute("highlight")===this.value;const i=t.getLastMatchingPosition(n,{direction:"backward"});const r=t.getLastMatchingPosition(n);const s=e.createRange(i,r);if(!o||this.value===o){e.removeAttribute("highlight",s);e.removeSelectionAttribute("highlight")}else{e.setAttribute("highlight",o,s);e.setSelectionAttribute("highlight",o)}}else if(o){e.setSelectionAttribute("highlight",o)}}else{for(const t of n){if(o){e.setAttribute("highlight",o,t)}else{e.removeAttribute("highlight",t)}}}})}}class Ly extends Vw{static get pluginName(){return"HighlightEditing"}constructor(e){super(e);e.config.define("highlight",{options:[{model:"yellowMarker",class:"marker-yellow",title:"Yellow marker",color:"var(--ck-highlight-marker-yellow)",type:"marker"},{model:"greenMarker",class:"marker-green",title:"Green marker",color:"var(--ck-highlight-marker-green)",type:"marker"},{model:"pinkMarker",class:"marker-pink",title:"Pink marker",color:"var(--ck-highlight-marker-pink)",type:"marker"},{model:"blueMarker",class:"marker-blue",title:"Blue marker",color:"var(--ck-highlight-marker-blue)",type:"marker"},{model:"redPen",class:"pen-red",title:"Red pen",color:"var(--ck-highlight-pen-red)",type:"pen"},{model:"greenPen",class:"pen-green",title:"Green pen",color:"var(--ck-highlight-pen-green)",type:"pen"}]})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:"highlight"});const t=e.config.get("highlight.options");e.conversion.attributeToElement(zy(t));e.commands.add("highlight",new Dy(e))}}function zy(e){const t={model:{key:"highlight",values:[]},view:{}};for(const n of e){t.model.values.push(n.model);t.view[n.model]={name:"mark",classes:n.class}}return t}var By='';var jy='';var Fy=n(60);class Hy extends Vw{get localizedOptionTitles(){const e=this.editor.t;return{"Yellow marker":e("Yellow marker"),"Green marker":e("Green marker"),"Pink marker":e("Pink marker"),"Blue marker":e("Blue marker"),"Red pen":e("Red pen"),"Green pen":e("Green pen")}}static get pluginName(){return"HighlightUI"}init(){const e=this.editor.config.get("highlight.options");for(const t of e){this._addHighlighterButton(t)}this._addRemoveHighlightButton();this._addDropdown(e)}_addRemoveHighlightButton(){const e=this.editor.t;this._addButton("removeHighlight",e("Remove highlight"),Av)}_addHighlighterButton(e){const t=this.editor.commands.get("highlight");this._addButton("highlight:"+e.model,e.title,Uy(e.type),e.model,n);function n(n){n.bind("isEnabled").to(t,"isEnabled");n.bind("isOn").to(t,"value",t=>t===e.model);n.iconView.fillColor=e.color;n.isToggleable=true}}_addButton(e,t,n,i,o=(()=>{})){const r=this.editor;r.ui.componentFactory.add(e,e=>{const s=new rw(e);const a=this.localizedOptionTitles[t]?this.localizedOptionTitles[t]:t;s.set({label:a,icon:n,tooltip:true});s.on("execute",()=>{r.execute("highlight",{value:i});r.editing.view.focus()});o(s);return s})}_addDropdown(e){const t=this.editor;const n=t.t;const i=t.ui.componentFactory;const o=e[0];const r=e.reduce((e,t)=>{e[t.model]=t;return e},{});i.add("highlight",s=>{const a=t.commands.get("highlight");const c=bw(s,a_);const l=c.buttonView;l.set({tooltip:n("Highlight"),lastExecuted:o.model,commandValue:o.model,isToggleable:true});l.bind("icon").to(a,"value",e=>Uy(u(e,"type")));l.bind("color").to(a,"value",e=>u(e,"color"));l.bind("commandValue").to(a,"value",e=>u(e,"model"));l.bind("isOn").to(a,"value",e=>!!e);l.delegate("execute").to(c);const d=e.map(e=>{const t=i.create("highlight:"+e.model);this.listenTo(t,"execute",()=>c.buttonView.set({lastExecuted:e.model}));return t});c.bind("isEnabled").toMany(d,"isEnabled",(...e)=>e.some(e=>e));d.push(new zb);d.push(i.create("removeHighlight"));ww(c,d);Wy(c);c.toolbarView.ariaLabel=n("Text highlight toolbar");l.on("execute",()=>{t.execute("highlight",{value:l.commandValue});t.editing.view.focus()});function u(e,t){const n=!e||e===l.lastExecuted?l.lastExecuted:e;return r[n][t]}return c})}}function Wy(e){const t=e.buttonView.actionView;t.iconView.bind("fillColor").to(e.buttonView,"color")}function Uy(e){return e==="marker"?By:jy}class qy extends Vw{static get requires(){return[Ly,Hy]}static get pluginName(){return"Highlight"}}class $y extends Gd{observe(e){this.listenTo(e,"load",(e,t)=>{const n=t.target;if(n.tagName=="IMG"){this._fireEvents(t)}},{useCapture:true})}_fireEvents(e){if(this.isEnabled){this.document.fire("layoutChanged");this.document.fire("imageLoaded",e)}}}class Gy{constructor(){this._stack=[]}add(e,t){const n=this._stack;const i=n[0];this._insertDescriptor(e);const o=n[0];if(i!==o&&!Yy(i,o)){this.fire("change:top",{oldDescriptor:i,newDescriptor:o,writer:t})}}remove(e,t){const n=this._stack;const i=n[0];this._removeDescriptor(e);const o=n[0];if(i!==o&&!Yy(i,o)){this.fire("change:top",{oldDescriptor:i,newDescriptor:o,writer:t})}}_insertDescriptor(e){const t=this._stack;const n=t.findIndex(t=>t.id===e.id);if(Yy(e,t[n])){return}if(n>-1){t.splice(n,1)}let i=0;while(t[i]&&Ky(t[i],e)){i++}t.splice(i,0,e)}_removeDescriptor(e){const t=this._stack;const n=t.findIndex(t=>t.id===e);if(n>-1){t.splice(n,1)}}}ys(Gy,ds);function Yy(e,t){return e&&t&&e.priority==t.priority&&Qy(e.classes)==Qy(t.classes)}function Ky(e,t){if(e.priority>t.priority){return true}else if(e.priorityQy(t.classes)}function Qy(e){return Array.isArray(e)?e.sort().join(","):e}var Jy=n(62);const Zy=Nb("px");const Xy=Nd.document.body;class ex extends kb{constructor(e){super(e);const t=this.bindTemplate;this.set("top",0);this.set("left",0);this.set("position","arrow_nw");this.set("isVisible",false);this.set("withArrow",true);this.set("class");this.content=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-panel",t.to("position",e=>`ck-balloon-panel_${e}`),t.if("isVisible","ck-balloon-panel_visible"),t.if("withArrow","ck-balloon-panel_with-arrow"),t.to("class")],style:{top:t.to("top",Zy),left:t.to("left",Zy)}},children:this.content})}show(){this.isVisible=true}hide(){this.isVisible=false}attachTo(e){this.show();const t=ex.defaultPositions;const n=Object.assign({},{element:this.element,positions:[t.southArrowNorth,t.southArrowNorthMiddleWest,t.southArrowNorthMiddleEast,t.southArrowNorthWest,t.southArrowNorthEast,t.northArrowSouth,t.northArrowSouthMiddleWest,t.northArrowSouthMiddleEast,t.northArrowSouthWest,t.northArrowSouthEast],limiter:Xy,fitInViewport:true},e);const i=ex._getOptimalPosition(n);const o=parseInt(i.left);const r=parseInt(i.top);const s=i.name;Object.assign(this,{top:r,left:o,position:s})}pin(e){this.unpin();this._pinWhenIsVisibleCallback=()=>{if(this.isVisible){this._startPinning(e)}else{this._stopPinning()}};this._startPinning(e);this.listenTo(this,"change:isVisible",this._pinWhenIsVisibleCallback)}unpin(){if(this._pinWhenIsVisibleCallback){this._stopPinning();this.stopListening(this,"change:isVisible",this._pinWhenIsVisibleCallback);this._pinWhenIsVisibleCallback=null;this.hide()}}_startPinning(e){this.attachTo(e);const t=tx(e.target);const n=e.limiter?tx(e.limiter):Xy;this.listenTo(Nd.document,"scroll",(i,o)=>{const r=o.target;const s=t&&r.contains(t);const a=n&&r.contains(n);if(s||a||!t||!n){this.attachTo(e)}},{useCapture:true});this.listenTo(Nd.window,"resize",()=>{this.attachTo(e)})}_stopPinning(){this.stopListening(Nd.document,"scroll");this.stopListening(Nd.window,"resize")}}function tx(e){if(Yr(e)){return e}if(wh(e)){return e.commonAncestorContainer}if(typeof e=="function"){return tx(e())}return null}ex.arrowHorizontalOffset=25;ex.arrowVerticalOffset=10;ex._getOptimalPosition=$b;ex.defaultPositions={northWestArrowSouthWest:(e,t)=>({top:nx(e,t),left:e.left-ex.arrowHorizontalOffset,name:"arrow_sw"}),northWestArrowSouthMiddleWest:(e,t)=>({top:nx(e,t),left:e.left-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_smw"}),northWestArrowSouth:(e,t)=>({top:nx(e,t),left:e.left-t.width/2,name:"arrow_s"}),northWestArrowSouthMiddleEast:(e,t)=>({top:nx(e,t),left:e.left-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_sme"}),northWestArrowSouthEast:(e,t)=>({top:nx(e,t),left:e.left-t.width+ex.arrowHorizontalOffset,name:"arrow_se"}),northArrowSouthWest:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-ex.arrowHorizontalOffset,name:"arrow_sw"}),northArrowSouthMiddleWest:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_smw"}),northArrowSouth:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width/2,name:"arrow_s"}),northArrowSouthMiddleEast:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_sme"}),northArrowSouthEast:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width+ex.arrowHorizontalOffset,name:"arrow_se"}),northEastArrowSouthWest:(e,t)=>({top:nx(e,t),left:e.right-ex.arrowHorizontalOffset,name:"arrow_sw"}),northEastArrowSouthMiddleWest:(e,t)=>({top:nx(e,t),left:e.right-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_smw"}),northEastArrowSouth:(e,t)=>({top:nx(e,t),left:e.right-t.width/2,name:"arrow_s"}),northEastArrowSouthMiddleEast:(e,t)=>({top:nx(e,t),left:e.right-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_sme"}),northEastArrowSouthEast:(e,t)=>({top:nx(e,t),left:e.right-t.width+ex.arrowHorizontalOffset,name:"arrow_se"}),southWestArrowNorthWest:(e,t)=>({top:ix(e,t),left:e.left-ex.arrowHorizontalOffset,name:"arrow_nw"}),southWestArrowNorthMiddleWest:(e,t)=>({top:ix(e,t),left:e.left-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_nmw"}),southWestArrowNorth:(e,t)=>({top:ix(e,t),left:e.left-t.width/2,name:"arrow_n"}),southWestArrowNorthMiddleEast:(e,t)=>({top:ix(e,t),left:e.left-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_nme"}),southWestArrowNorthEast:(e,t)=>({top:ix(e,t),left:e.left-t.width+ex.arrowHorizontalOffset,name:"arrow_ne"}),southArrowNorthWest:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-ex.arrowHorizontalOffset,name:"arrow_nw"}),southArrowNorthMiddleWest:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_nmw"}),southArrowNorth:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width/2,name:"arrow_n"}),southArrowNorthMiddleEast:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_nme"}),southArrowNorthEast:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width+ex.arrowHorizontalOffset,name:"arrow_ne"}),southEastArrowNorthWest:(e,t)=>({top:ix(e,t),left:e.right-ex.arrowHorizontalOffset,name:"arrow_nw"}),southEastArrowNorthMiddleWest:(e,t)=>({top:ix(e,t),left:e.right-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_nmw"}),southEastArrowNorth:(e,t)=>({top:ix(e,t),left:e.right-t.width/2,name:"arrow_n"}),southEastArrowNorthMiddleEast:(e,t)=>({top:ix(e,t),left:e.right-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_nme"}),southEastArrowNorthEast:(e,t)=>({top:ix(e,t),left:e.right-t.width+ex.arrowHorizontalOffset,name:"arrow_ne"})};function nx(e,t){return e.top-t.height-ex.arrowVerticalOffset}function ix(e){return e.bottom+ex.arrowVerticalOffset}var ox='';const rx="ck-widget";const sx="ck-widget_selected";function ax(e){if(!e.is("element")){return false}return!!e.getCustomProperty("widget")}function cx(e,t,n={}){t.setAttribute("contenteditable","false",e);t.addClass(rx,e);t.setCustomProperty("widget",true,e);e.getFillerOffset=px;if(n.label){dx(e,n.label,t)}if(n.hasSelectionHandle){bx(e,t)}lx(e,t,(e,t,n)=>n.addClass(i(t.classes),e),(e,t,n)=>n.removeClass(i(t.classes),e));return e;function i(e){return Array.isArray(e)?e:[e]}}function lx(e,t,n,i){const o=new Gy;o.on("change:top",(t,o)=>{if(o.oldDescriptor){i(e,o.oldDescriptor,o.writer)}if(o.newDescriptor){n(e,o.newDescriptor,o.writer)}});t.setCustomProperty("addHighlight",(e,t,n)=>o.add(t,n),e);t.setCustomProperty("removeHighlight",(e,t,n)=>o.remove(t,n),e)}function dx(e,t,n){n.setCustomProperty("widgetLabel",t,e)}function ux(e){const t=e.getCustomProperty("widgetLabel");if(!t){return""}return typeof t=="function"?t():t}function hx(e,t){t.addClass(["ck-editor__editable","ck-editor__nested-editable"],e);t.setAttribute("contenteditable",e.isReadOnly?"false":"true",e);e.on("change:isReadOnly",(n,i,o)=>{t.setAttribute("contenteditable",o?"false":"true",e)});e.on("change:isFocused",(n,i,o)=>{if(o){t.addClass("ck-editor__nested-editable_focused",e)}else{t.removeClass("ck-editor__nested-editable_focused",e)}});return e}function fx(e,t){const n=e.getSelectedElement();if(n&&t.schema.isBlock(n)){return t.createPositionAfter(n)}const i=e.getSelectedBlocks().next().value;if(i){if(i.isEmpty){return t.createPositionAt(i,0)}const n=t.createPositionAfter(i);if(e.focus.isTouching(n)){return n}return t.createPositionBefore(i)}return e.focus}function gx(e,t){return(n,i)=>{const{mapper:o,viewPosition:r}=i;const s=o.findMappedViewAncestor(r);if(!t(s)){return}const a=o.toModelElement(s);i.modelPosition=e.createPositionAt(a,r.isAtStart?"before":"after")}}function mx(e,t){const n=new vh(Nd.window);const i=n.getIntersection(e);const o=t.height+ex.arrowVerticalOffset;if(e.top-o>n.top||e.bottom+oe.is("img"))}function Ax(e,t,n){const i=Px(e,n);return t.checkChild(i,"image")}function Tx(e,t){const n=e.getSelectedElement();return n&&t.isObject(n)}function Sx(e){return[...e.focus.getAncestors()].every(e=>!e.is("image"))}function Px(e,t){const n=fx(e,t);const i=n.parent;if(i.isEmpty&&!i.is("$root")){return i.parent}return i}function Ex(){return t=>{t.on("element:figure",e)};function e(e,t,n){if(!n.consumable.test(t.viewItem,{name:true,classes:"image"})){return}const i=Cx(t.viewItem);if(!i||!i.hasAttribute("src")||!n.consumable.test(i,{name:true})){return}const o=n.convertItem(i,t.modelCursor);const r=Bw(o.modelRange.getItems());if(!r){return}n.convertChildren(t.viewItem,n.writer.createPositionAt(r,0));t.modelRange=o.modelRange;t.modelCursor=o.modelCursor}}function Mx(){return t=>{t.on("attribute:srcset:image",e)};function e(e,t,n){if(!n.consumable.consume(t.item,e.name)){return}const i=n.writer;const o=n.mapper.toViewElement(t.item);const r=Cx(o);if(t.attributeNewValue===null){const e=t.attributeOldValue;if(e.data){i.removeAttribute("srcset",r);i.removeAttribute("sizes",r);if(e.width){i.removeAttribute("width",r)}}}else{const e=t.attributeNewValue;if(e.data){i.setAttribute("srcset",e.data,r);i.setAttribute("sizes","100vw",r);if(e.width){i.setAttribute("width",e.width,r)}}}}}function Ix(e){return n=>{n.on(`attribute:${e}:image`,t)};function t(e,t,n){if(!n.consumable.consume(t.item,e.name)){return}const i=n.writer;const o=n.mapper.toViewElement(t.item);const r=Cx(o);if(t.attributeNewValue!==null){i.setAttribute(t.attributeKey,t.attributeNewValue,r)}else{i.removeAttribute(t.attributeKey,r)}}}class Nx extends Lw{refresh(){this.isEnabled=xx(this.editor.model)}execute(e){const t=this.editor.model;t.change(n=>{const i=Array.isArray(e.source)?e.source:[e.source];for(const e of i){yx(n,t,{src:e})}})}}class Ox extends Vw{static get pluginName(){return"ImageEditing"}init(){const e=this.editor;const t=e.model.schema;const n=e.t;const i=e.conversion;e.editing.view.addObserver($y);t.register("image",{isObject:true,isBlock:true,allowWhere:"$block",allowAttributes:["alt","src","srcset"]});i.for("dataDowncast").elementToElement({model:"image",view:(e,t)=>Rx(t)});i.for("editingDowncast").elementToElement({model:"image",view:(e,t)=>wx(Rx(t),t,n("image widget"))});i.for("downcast").add(Ix("src")).add(Ix("alt")).add(Mx());i.for("upcast").elementToElement({view:{name:"img",attributes:{src:true}},model:(e,t)=>t.createElement("image",{src:e.getAttribute("src")})}).attributeToAttribute({view:{name:"img",key:"alt"},model:"alt"}).attributeToAttribute({view:{name:"img",key:"srcset"},model:{key:"srcset",value:e=>{const t={data:e.getAttribute("srcset")};if(e.hasAttribute("width")){t.width=e.getAttribute("width")}return t}}}).add(Ex());e.commands.add("imageInsert",new Nx(e))}}function Rx(e){const t=e.createEmptyElement("img");const n=e.createContainerElement("figure",{class:"image"});e.insert(e.createPositionAt(n,0),t);return n}class Vx extends Ku{constructor(e){super(e);this.domEventType="mousedown"}onDomEvent(e){this.fire(e.type,e)}}function Dx(e,t,n){return e&&ax(e)&&!n.isInline(t)}function Lx(e){return e.closest(".ck-widget__type-around__button")}function zx(e){return e.classList.contains("ck-widget__type-around__button_before")?"before":"after"}function Bx(e,t){const n=e.closest(".ck-widget");return t.mapDomToView(n)}function jx(e){const t=[];if(Fx(e)||Wx(e)){t.push("before")}if(Hx(e)||Ux(e)){t.push("after")}return t}function Fx(e){return!e.previousSibling}function Hx(e){return!e.nextSibling}function Wx(e){return e.previousSibling&&ax(e.previousSibling)}function Ux(e){return e.nextSibling&&ax(e.nextSibling)}var qx='\n';var $x=n(64);const Gx=["before","after"];const Yx=(new DOMParser).parseFromString(qx,"image/svg+xml").firstChild;class Kx extends Vw{static get requires(){return[Ay]}static get pluginName(){return"WidgetTypeAround"}constructor(e){super(e);this._widgetsWithTypeAroundUI=new Set}destroy(){this._widgetsWithTypeAroundUI.clear()}init(){this._enableTypeAroundUIInjection();this._enableDetectionOfTypeAroundWidgets();this._enableInsertingParagraphsOnButtonClick()}_insertParagraph(e,t){const n=this.editor;const i=n.editing.view;const o=n.editing.mapper.toModelElement(e);let r;if(t==="before"){r=n.model.createPositionBefore(o)}else{r=n.model.createPositionAfter(o)}n.execute("insertParagraph",{position:r});i.focus();i.scrollToTheSelection()}_enableTypeAroundUIInjection(){const e=this.editor;const t=e.model.schema;const n=e.locale.t;const i={before:n("Insert paragraph before block"),after:n("Insert paragraph after block")};e.editing.downcastDispatcher.on("insert",(e,n,o)=>{const r=o.mapper.toViewElement(n.item);if(Dx(r,n.item,t)){Qx(o.writer,i,r);this._widgetsWithTypeAroundUI.add(r)}},{priority:"low"})}_enableDetectionOfTypeAroundWidgets(){const e=this.editor;const t=e.editing.view;function n(e){return`ck-widget_can-type-around_${e}`}t.document.registerPostFixer(e=>{for(const t of this._widgetsWithTypeAroundUI){if(!t.isAttached()){this._widgetsWithTypeAroundUI.delete(t)}else{const i=jx(t);e.removeClass(Gx.map(n),t);e.addClass(i.map(n),t)}}})}_enableInsertingParagraphsOnButtonClick(){const e=this.editor;const t=e.editing.view;t.document.on("mousedown",(e,n)=>{const i=Lx(n.domTarget);if(!i){return}const o=zx(i);const r=Bx(i,t.domConverter);this._insertParagraph(r,o);n.preventDefault();e.stop()})}}function Qx(e,t,n){const i=e.createUIElement("div",{class:"ck ck-reset_all ck-widget__type-around"},(function(e){const n=this.toDomElement(e);Jx(n,t);return n}));e.insert(e.createPositionAt(n,"end"),i)}function Jx(e,t){for(const n of Gx){const i=new $p({tag:"div",attributes:{class:["ck","ck-widget__type-around__button",`ck-widget__type-around__button_${n}`],title:t[n]},children:[e.ownerDocument.importNode(Yx,true)]});e.appendChild(i.render())}}var Zx=n(66);class Xx extends Vw{static get pluginName(){return"Widget"}static get requires(){return[Kx]}init(){const e=this.editor.editing.view;const t=e.document;this._previouslySelected=new Set;this.editor.editing.downcastDispatcher.on("selection",(e,t,n)=>{this._clearPreviouslySelectedWidgets(n.writer);const i=n.writer;const o=i.document.selection;const r=o.getSelectedElement();let s=null;for(const e of o.getRanges()){for(const t of e){const e=t.item;if(ax(e)&&!nC(e,s)){i.addClass(sx,e);this._previouslySelected.add(e);s=e;if(e==r){i.setSelection(o.getRanges(),{fake:true,label:ux(r)})}}}}},{priority:"low"});e.addObserver(Vx);this.listenTo(t,"mousedown",(...e)=>this._onMousedown(...e));this.listenTo(t,"keydown",(...e)=>this._onKeydown(...e),{priority:"high"});this.listenTo(t,"delete",(e,t)=>{if(this._handleDelete(t.direction=="forward")){t.preventDefault();e.stop()}},{priority:"high"})}_onMousedown(e,t){const n=this.editor;const i=n.editing.view;const o=i.document;let r=t.target;if(tC(r)){if(Tl.isSafari&&t.domEvent.detail>=3){const e=n.editing.mapper;const i=e.toModelElement(r);this.editor.model.change(e=>{t.preventDefault();e.setSelection(i,"in")})}return}if(!ax(r)){r=r.findAncestor(ax);if(!r){return}}t.preventDefault();if(!o.isFocused){i.focus()}const s=n.editing.mapper.toModelElement(r);this._setSelectionOverElement(s)}_onKeydown(e,t){const n=t.keyCode;const i=this.editor.locale.contentLanguageDirection==="ltr";const o=n==Rl.arrowdown||n==Rl[i?"arrowright":"arrowleft"];let r=false;if(eC(n)){r=this._handleArrowKeys(o)}else if(n===Rl.enter){r=this._handleEnterKey(t.shiftKey)}if(r){t.preventDefault();e.stop()}}_handleDelete(e){if(this.editor.isReadOnly){return}const t=this.editor.model.document;const n=t.selection;if(!n.isCollapsed){return}const i=this._getObjectElementNextToSelection(e);if(i){this.editor.model.change(e=>{let t=n.anchor.parent;while(t.isEmpty){const n=t;t=n.parent;e.remove(n)}this._setSelectionOverElement(i)});return true}}_handleArrowKeys(e){const t=this.editor.model;const n=t.schema;const i=t.document;const o=i.selection;const r=o.getSelectedElement();if(r&&n.isObject(r)){const i=e?o.getLastPosition():o.getFirstPosition();const r=n.getNearestSelectionRange(i,e?"forward":"backward");if(r){t.change(e=>{e.setSelection(r)})}return true}if(!o.isCollapsed){return}const s=this._getObjectElementNextToSelection(e);if(!!s&&n.isObject(s)){this._setSelectionOverElement(s);return true}}_handleEnterKey(e){const t=this.editor.model;const n=t.document.selection;const i=n.getSelectedElement();if(iC(i,t.schema)){t.change(n=>{let o=n.createPositionAt(i,e?"before":"after");const r=n.createElement("paragraph");if(t.schema.isBlock(i.parent)){const e=t.schema.findAllowedParent(o,r);o=n.split(o,e).position}n.insert(r,o);n.setSelection(r,"in")});return true}}_setSelectionOverElement(e){this.editor.model.change(t=>{t.setSelection(t.createRangeOn(e))})}_getObjectElementNextToSelection(e){const t=this.editor.model;const n=t.schema;const i=t.document.selection;const o=t.createSelection(i);t.modifySelection(o,{direction:e?"forward":"backward"});const r=e?o.focus.nodeBefore:o.focus.nodeAfter;if(!!r&&n.isObject(r)){return r}return null}_clearPreviouslySelectedWidgets(e){for(const t of this._previouslySelected){e.removeClass(sx,t)}this._previouslySelected.clear()}}function eC(e){return e==Rl.arrowright||e==Rl.arrowleft||e==Rl.arrowup||e==Rl.arrowdown}function tC(e){while(e){if(e.is("editableElement")&&!e.is("rootElement")){return true}if(ax(e)){return false}e=e.parent}return false}function nC(e,t){if(!t){return false}return Array.from(e.getAncestors()).includes(t)}function iC(e,t){return e&&t.isObject(e)&&!t.isInline(e)}class oC extends Lw{refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=vx(e);if(vx(e)&&e.hasAttribute("alt")){this.value=e.getAttribute("alt")}else{this.value=false}}execute(e){const t=this.editor.model;const n=t.document.selection.getSelectedElement();t.change(t=>{t.setAttribute("alt",e.newValue,n)})}}class rC extends Vw{static get pluginName(){return"ImageTextAlternativeEditing"}init(){this.editor.commands.add("imageTextAlternative",new oC(this.editor))}}var sC=n(68);class aC extends kb{constructor(e,t){super(e);const n=`ck-labeled-field-view-${ns()}`;const i=`ck-labeled-field-view-status-${ns()}`;this.fieldView=t(this,n,i);this.set("label");this.set("isEnabled",true);this.set("errorText",null);this.set("infoText",null);this.set("class");this.labelView=this._createLabelView(n);this.statusView=this._createStatusView(i);this.bind("_statusText").to(this,"errorText",this,"infoText",(e,t)=>e||t);const o=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view",o.to("class"),o.if("isEnabled","ck-disabled",e=>!e)]},children:[this.labelView,this.fieldView,this.statusView]})}_createLabelView(e){const t=new Pb(this.locale);t.for=e;t.bind("text").to(this,"label");return t}_createStatusView(e){const t=new kb(this.locale);const n=this.bindTemplate;t.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view__status",n.if("errorText","ck-labeled-field-view__status_error"),n.if("_statusText","ck-hidden",e=>!e)],id:e,role:n.if("errorText","alert")},children:[{text:n.to("_statusText")}]});return t}focus(){this.fieldView.focus()}}var cC=n(70);class lC extends kb{constructor(e){super(e);this.set("value");this.set("id");this.set("placeholder");this.set("isReadOnly",false);this.set("hasError",false);this.set("ariaDescribedById");const t=this.bindTemplate;this.setTemplate({tag:"input",attributes:{type:"text",class:["ck","ck-input","ck-input-text",t.if("hasError","ck-error")],id:t.to("id"),placeholder:t.to("placeholder"),readonly:t.to("isReadOnly"),"aria-invalid":t.if("hasError",true),"aria-describedby":t.to("ariaDescribedById")},on:{input:t.to("input")}})}render(){super.render();const e=e=>{this.element.value=!e&&e!==0?"":e};e(this.value);this.on("change:value",(t,n,i)=>{e(i)})}select(){this.element.select()}focus(){this.element.focus()}}function dC(e,t,n){const i=new lC(e.locale);i.set({id:t,ariaDescribedById:n});i.bind("isReadOnly").to(e,"isEnabled",e=>!e);i.bind("hasError").to(e,"errorText",e=>!!e);i.on("input",()=>{e.errorText=null});return i}function uC(e,t,n){const i=bw(e.locale);i.set({id:t,ariaDescribedById:n});i.bind("isEnabled").to(e);return i}function hC({view:e}){e.listenTo(e.element,"submit",(t,n)=>{n.preventDefault();e.fire("submit")},{useCapture:true})}var fC='';var gC='';var mC=n(72);class pC extends kb{constructor(e){super(e);const t=this.locale.t;this.focusTracker=new Sp;this.keystrokes=new gp;this.labeledInput=this._createLabeledInputView();this.saveButtonView=this._createButton(t("Save"),fC,"ck-button-save");this.saveButtonView.type="submit";this.cancelButtonView=this._createButton(t("Cancel"),gC,"ck-button-cancel","cancel");this._focusables=new Wp;this._focusCycler=new Db({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this.setTemplate({tag:"form",attributes:{class:["ck","ck-text-alternative-form"],tabindex:"-1"},children:[this.labeledInput,this.saveButtonView,this.cancelButtonView]})}render(){super.render();this.keystrokes.listenTo(this.element);hC({view:this});[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)})}_createButton(e,t,n,i){const o=new rw(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:n}});if(i){o.delegate("execute").to(this,i)}return o}_createLabeledInputView(){const e=this.locale.t;const t=new aC(this.locale,dC);t.label=e("Text alternative");t.fieldView.placeholder=e("Text alternative");return t}}var bC='';var wC='';var kC=n(74);var _C=n(76);const vC=Nb("px");class yC extends Vw{static get pluginName(){return"ContextualBalloon"}constructor(e){super(e);this.positionLimiter=()=>{const e=this.editor.editing.view;const t=e.document;const n=t.selection.editableElement;if(n){return e.domConverter.mapViewToDom(n.root)}return null};this.set("visibleView",null);this.view=new ex(e.locale);e.ui.view.body.add(this.view);e.ui.focusTracker.add(this.view.element);this._viewToStack=new Map;this._idToStack=new Map;this.set("_numberOfStacks",0);this.set("_singleViewMode",false);this._rotatorView=this._createRotatorView();this._fakePanelsView=this._createFakePanelsView()}hasView(e){return Array.from(this._viewToStack.keys()).includes(e)}add(e){if(this.hasView(e.view)){throw new ss["b"]("contextualballoon-add-view-exist: Cannot add configuration of the same view twice.",[this,e])}const t=e.stackId||"main";if(!this._idToStack.has(t)){this._idToStack.set(t,new Map([[e.view,e]]));this._viewToStack.set(e.view,this._idToStack.get(t));this._numberOfStacks=this._idToStack.size;if(!this._visibleStack||e.singleViewMode){this.showStack(t)}return}const n=this._idToStack.get(t);if(e.singleViewMode){this.showStack(t)}n.set(e.view,e);this._viewToStack.set(e.view,n);if(n===this._visibleStack){this._showView(e)}}remove(e){if(!this.hasView(e)){throw new ss["b"]("contextualballoon-remove-view-not-exist: Cannot remove the configuration of a non-existent view.",[this,e])}const t=this._viewToStack.get(e);if(this._singleViewMode&&this.visibleView===e){this._singleViewMode=false}if(this.visibleView===e){if(t.size===1){if(this._idToStack.size>1){this._showNextStack()}else{this.view.hide();this.visibleView=null;this._rotatorView.hideView()}}else{this._showView(Array.from(t.values())[t.size-2])}}if(t.size===1){this._idToStack.delete(this._getStackId(t));this._numberOfStacks=this._idToStack.size}else{t.delete(e)}this._viewToStack.delete(e)}updatePosition(e){if(e){this._visibleStack.get(this.visibleView).position=e}this.view.pin(this._getBalloonPosition());this._fakePanelsView.updatePosition()}showStack(e){this.visibleStack=e;const t=this._idToStack.get(e);if(!t){throw new ss["b"]("contextualballoon-showstack-stack-not-exist: Cannot show a stack that does not exist.",this)}if(this._visibleStack===t){return}this._showView(Array.from(t.values()).pop())}get _visibleStack(){return this._viewToStack.get(this.visibleView)}_getStackId(e){const t=Array.from(this._idToStack.entries()).find(t=>t[1]===e);return t[0]}_showNextStack(){const e=Array.from(this._idToStack.values());let t=e.indexOf(this._visibleStack)+1;if(!e[t]){t=0}this.showStack(this._getStackId(e[t]))}_showPrevStack(){const e=Array.from(this._idToStack.values());let t=e.indexOf(this._visibleStack)-1;if(!e[t]){t=e.length-1}this.showStack(this._getStackId(e[t]))}_createRotatorView(){const e=new xC(this.editor.locale);const t=this.editor.locale.t;this.view.content.add(e);e.bind("isNavigationVisible").to(this,"_numberOfStacks",this,"_singleViewMode",(e,t)=>!t&&e>1);e.on("change:isNavigationVisible",()=>this.updatePosition(),{priority:"low"});e.bind("counter").to(this,"visibleView",this,"_numberOfStacks",(e,n)=>{if(n<2){return""}const i=Array.from(this._idToStack.values()).indexOf(this._visibleStack)+1;return t("%0 of %1",[i,n])});e.buttonNextView.on("execute",()=>{if(e.focusTracker.isFocused){this.editor.editing.view.focus()}this._showNextStack()});e.buttonPrevView.on("execute",()=>{if(e.focusTracker.isFocused){this.editor.editing.view.focus()}this._showPrevStack()});return e}_createFakePanelsView(){const e=new CC(this.editor.locale,this.view);e.bind("numberOfPanels").to(this,"_numberOfStacks",this,"_singleViewMode",(e,t)=>{const n=!t&&e>=2;return n?Math.min(e-1,2):0});e.listenTo(this.view,"change:top",()=>e.updatePosition());e.listenTo(this.view,"change:left",()=>e.updatePosition());this.editor.ui.view.body.add(e);return e}_showView({view:e,balloonClassName:t="",withArrow:n=true,singleViewMode:i=false}){this.view.class=t;this.view.withArrow=n;this._rotatorView.showView(e);this.visibleView=e;this.view.pin(this._getBalloonPosition());this._fakePanelsView.updatePosition();if(i){this._singleViewMode=true}}_getBalloonPosition(){let e=Array.from(this._visibleStack.values()).pop().position;if(e&&!e.limiter){e=Object.assign({},e,{limiter:this.positionLimiter})}return e}}class xC extends kb{constructor(e){super(e);const t=e.t;const n=this.bindTemplate;this.set("isNavigationVisible",true);this.focusTracker=new Sp;this.buttonPrevView=this._createButtonView(t("Previous"),bC);this.buttonNextView=this._createButtonView(t("Next"),wC);this.content=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-rotator"],"z-index":"-1"},children:[{tag:"div",attributes:{class:["ck-balloon-rotator__navigation",n.to("isNavigationVisible",e=>e?"":"ck-hidden")]},children:[this.buttonPrevView,{tag:"span",attributes:{class:["ck-balloon-rotator__counter"]},children:[{text:n.to("counter")}]},this.buttonNextView]},{tag:"div",attributes:{class:"ck-balloon-rotator__content"},children:this.content}]})}render(){super.render();this.focusTracker.add(this.element)}showView(e){this.hideView();this.content.add(e)}hideView(){this.content.clear()}_createButtonView(e,t){const n=new rw(this.locale);n.set({label:e,icon:t,tooltip:true});return n}}class CC extends kb{constructor(e,t){super(e);const n=this.bindTemplate;this.set("top",0);this.set("left",0);this.set("height",0);this.set("width",0);this.set("numberOfPanels",0);this.content=this.createCollection();this._balloonPanelView=t;this.setTemplate({tag:"div",attributes:{class:["ck-fake-panel",n.to("numberOfPanels",e=>e?"":"ck-hidden")],style:{top:n.to("top",vC),left:n.to("left",vC),width:n.to("width",vC),height:n.to("height",vC)}},children:this.content});this.on("change:numberOfPanels",(e,t,n,i)=>{if(n>i){this._addPanels(n-i)}else{this._removePanels(i-n)}this.updatePosition()})}_addPanels(e){while(e--){const e=new kb;e.setTemplate({tag:"div"});this.content.add(e);this.registerChild(e)}}_removePanels(e){while(e--){const e=this.content.last;this.content.remove(e);this.deregisterChild(e);e.destroy()}}updatePosition(){if(this.numberOfPanels){const{top:e,left:t}=this._balloonPanelView;const{width:n,height:i}=new vh(this._balloonPanelView.element);Object.assign(this,{top:e,left:t,width:n,height:i})}}}var AC='';function TC(e){const t=e.plugins.get("ContextualBalloon");if(_x(e.editing.view.document.selection)){const n=SC(e);t.updatePosition(n)}}function SC(e){const t=e.editing.view;const n=ex.defaultPositions;return{target:t.domConverter.viewToDom(t.document.selection.getSelectedElement()),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast]}}class PC extends Vw{static get requires(){return[yC]}static get pluginName(){return"ImageTextAlternativeUI"}init(){this._createButton();this._createForm()}destroy(){super.destroy();this._form.destroy()}_createButton(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("imageTextAlternative",n=>{const i=e.commands.get("imageTextAlternative");const o=new rw(n);o.set({label:t("Change image text alternative"),icon:AC,tooltip:true});o.bind("isEnabled").to(i,"isEnabled");this.listenTo(o,"execute",()=>{this._showForm()});return o})}_createForm(){const e=this.editor;const t=e.editing.view;const n=t.document;this._balloon=this.editor.plugins.get("ContextualBalloon");this._form=new pC(e.locale);this._form.render();this.listenTo(this._form,"submit",()=>{e.execute("imageTextAlternative",{newValue:this._form.labeledInput.fieldView.element.value});this._hideForm(true)});this.listenTo(this._form,"cancel",()=>{this._hideForm(true)});this._form.keystrokes.set("Esc",(e,t)=>{this._hideForm(true);t()});this.listenTo(e.ui,"update",()=>{if(!_x(n.selection)){this._hideForm(true)}else if(this._isVisible){TC(e)}});gw({emitter:this._form,activator:()=>this._isVisible,contextElements:[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible){return}const e=this.editor;const t=e.commands.get("imageTextAlternative");const n=this._form.labeledInput;if(!this._isInBalloon){this._balloon.add({view:this._form,position:SC(e)})}n.fieldView.value=n.fieldView.element.value=t.value||"";this._form.labeledInput.fieldView.select()}_hideForm(e){if(!this._isInBalloon){return}if(this._form.focusTracker.isFocused){this._form.saveButtonView.focus()}this._balloon.remove(this._form);if(e){this.editor.editing.view.focus()}}get _isVisible(){return this._balloon.visibleView===this._form}get _isInBalloon(){return this._balloon.hasView(this._form)}}class EC extends Vw{static get requires(){return[rC,PC]}static get pluginName(){return"ImageTextAlternative"}}var MC=n(78);class IC extends Vw{static get requires(){return[Ox,Xx,EC]}static get pluginName(){return"Image"}}function NC(e,t){return n=>{const i=n.createEditableElement("figcaption");n.setCustomProperty("imageCaption",true,i);Op({view:e,element:i,text:t});return hx(i,n)}}function OC(e){return!!e.getCustomProperty("imageCaption")}function RC(e){for(const t of e.getChildren()){if(!!t&&t.is("caption")){return t}}return null}function VC(e){const t=e.parent;if(e.name=="figcaption"&&t&&t.name=="figure"&&t.hasClass("image")){return{name:true}}return null}class DC extends Vw{static get pluginName(){return"ImageCaptionEditing"}init(){const e=this.editor;const t=e.editing.view;const n=e.model.schema;const i=e.data;const o=e.editing;const r=e.t;n.register("caption",{allowIn:"image",allowContentOf:"$block",isLimit:true});e.model.document.registerPostFixer(e=>this._insertMissingModelCaptionElement(e));e.conversion.for("upcast").elementToElement({view:VC,model:"caption"});const s=e=>e.createContainerElement("figcaption");i.downcastDispatcher.on("insert:caption",LC(s,false));const a=NC(t,r("Enter image caption"));o.downcastDispatcher.on("insert:caption",LC(a));o.downcastDispatcher.on("insert",this._fixCaptionVisibility(e=>e.item),{priority:"high"});o.downcastDispatcher.on("remove",this._fixCaptionVisibility(e=>e.position.parent),{priority:"high"});t.document.registerPostFixer(e=>this._updateCaptionVisibility(e))}_updateCaptionVisibility(e){const t=this.editor.editing.mapper;const n=this._lastSelectedCaption;let i;const o=this.editor.model.document.selection;const r=o.getSelectedElement();if(r&&r.is("image")){const e=RC(r);i=t.toViewElement(e)}const s=o.getFirstPosition();const a=BC(s.parent);if(a){i=t.toViewElement(a)}if(i){if(n){if(n===i){return FC(i,e)}else{jC(n,e);this._lastSelectedCaption=i;return FC(i,e)}}else{this._lastSelectedCaption=i;return FC(i,e)}}else{if(n){const t=jC(n,e);this._lastSelectedCaption=null;return t}else{return false}}}_fixCaptionVisibility(e){return(t,n,i)=>{const o=e(n);const r=BC(o);const s=this.editor.editing.mapper;const a=i.writer;if(r){const e=s.toViewElement(r);if(e){if(r.childCount){a.removeClass("ck-hidden",e)}else{a.addClass("ck-hidden",e)}}}}}_insertMissingModelCaptionElement(e){const t=this.editor.model;const n=t.document.differ.getChanges();const i=[];for(const e of n){if(e.type=="insert"&&e.name!="$text"){const n=e.position.nodeAfter;if(n.is("image")&&!RC(n)){i.push(n)}if(!n.is("image")&&n.childCount){for(const e of t.createRangeIn(n).getItems()){if(e.is("image")&&!RC(e)){i.push(e)}}}}}for(const t of i){e.appendElement("caption",t)}return!!i.length}}function LC(e,t=true){return(n,i,o)=>{const r=i.item;if(!r.childCount&&!t){return}if(vx(r.parent)){if(!o.consumable.consume(i.item,"insert")){return}const t=o.mapper.toViewElement(i.range.start.parent);const n=e(o.writer);const s=o.writer;if(!r.childCount){s.addClass("ck-hidden",n)}zC(n,i.item,t,o)}}}function zC(e,t,n,i){const o=i.writer.createPositionAt(n,"end");i.writer.insert(o,e);i.mapper.bindElements(t,e)}function BC(e){const t=e.getAncestors({includeSelf:true});const n=t.find(e=>e.name=="caption");if(n&&n.parent&&n.parent.name=="image"){return n}return null}function jC(e,t){if(!e.childCount&&!e.hasClass("ck-hidden")){t.addClass("ck-hidden",e);return true}return false}function FC(e,t){if(e.hasClass("ck-hidden")){t.removeClass("ck-hidden",e);return true}return false}var HC=n(80);class WC extends Vw{static get requires(){return[DC]}static get pluginName(){return"ImageCaption"}}class UC{constructor(e){this.set("activeHandlePosition",null);this.set("proposedWidthPercents",null);this.set("proposedWidth",null);this.set("proposedHeight",null);this.set("proposedHandleHostWidth",null);this.set("proposedHandleHostHeight",null);this._options=e;this._referenceCoordinates=null}begin(e,t,n){const i=new vh(t);this.activeHandlePosition=YC(e);this._referenceCoordinates=$C(t,KC(this.activeHandlePosition));this.originalWidth=i.width;this.originalHeight=i.height;this.aspectRatio=i.width/i.height;const o=n.style.width;if(o&&o.match(/^\d+\.?\d*%$/)){this.originalWidthPercents=parseFloat(o)}else{this.originalWidthPercents=qC(n,i)}}update(e){this.proposedWidth=e.width;this.proposedHeight=e.height;this.proposedWidthPercents=e.widthPercents;this.proposedHandleHostWidth=e.handleHostWidth;this.proposedHandleHostHeight=e.handleHostHeight}}ys(UC,Qc);function qC(e,t){const n=e.parentElement;const i=parseFloat(n.ownerDocument.defaultView.getComputedStyle(n).width);return t.width/i*100}function $C(e,t){const n=new vh(e);const i=t.split("-");const o={x:i[1]=="right"?n.right:n.left,y:i[0]=="bottom"?n.bottom:n.top};o.x+=e.ownerDocument.defaultView.scrollX;o.y+=e.ownerDocument.defaultView.scrollY;return o}function GC(e){return`ck-widget__resizer__handle-${e}`}function YC(e){const t=["top-left","top-right","bottom-right","bottom-left"];for(const n of t){if(e.classList.contains(GC(n))){return n}}}function KC(e){const t=e.split("-");const n={top:"bottom",bottom:"top",left:"right",right:"left"};return`${n[t[0]]}-${n[t[1]]}`}class QC{constructor(e){this._options=e;this._domResizerWrapper=null;this._viewResizerWrapper=null;this.set("isEnabled",true);this.decorate("begin");this.decorate("cancel");this.decorate("commit");this.decorate("updateSize");this.on("commit",e=>{if(!this.state.proposedWidth&&!this.state.proposedWidthPercents){this._cleanup();e.stop()}},{priority:"high"})}attach(){const e=this;const t=this._options.viewElement;const n=this._options.editor.editing.view;n.change(n=>{const i=n.createUIElement("div",{class:"ck ck-reset_all ck-widget__resizer"},(function(t){const n=this.toDomElement(t);e._appendHandles(n);e._appendSizeUI(n);e._domResizerWrapper=n;e.on("change:isEnabled",(e,t,i)=>{n.style.display=i?"":"none"});n.style.display=e.isEnabled?"":"none";return n}));n.insert(n.createPositionAt(t,"end"),i);n.addClass("ck-widget_with-resizer",t);this._viewResizerWrapper=i})}begin(e){this.state=new UC(this._options);this._sizeUI.bindToState(this._options,this.state);this._initialViewWidth=this._options.viewElement.getStyle("width");this.state.begin(e,this._getHandleHost(),this._getResizeHost())}updateSize(e){const t=this._proposeNewSize(e);const n=this._options.editor.editing.view;n.change(e=>{const n=this._options.unit||"%";const i=(n==="%"?t.widthPercents:t.width)+n;e.setStyle("width",i,this._options.viewElement)});const i=this._getHandleHost();const o=new vh(i);t.handleHostWidth=Math.round(o.width);t.handleHostHeight=Math.round(o.height);const r=new vh(i);t.width=Math.round(r.width);t.height=Math.round(r.height);this.redraw(o);this.state.update(t)}commit(){const e=this._options.unit||"%";const t=(e==="%"?this.state.proposedWidthPercents:this.state.proposedWidth)+e;this._options.editor.editing.view.change(()=>{this._cleanup();this._options.onCommit(t)})}cancel(){this._cleanup()}destroy(){this.cancel()}redraw(e){const t=this._domResizerWrapper;if(n(t)){this._options.editor.editing.view.change(n=>{const i=t.parentElement;const o=this._getHandleHost();const r=e||new vh(o);n.setStyle("width",r.width+"px",this._viewResizerWrapper);n.setStyle("height",r.height+"px",this._viewResizerWrapper);const s={left:o.offsetLeft,top:o.offsetTop,height:o.offsetHeight,width:o.offsetWidth};if(!i.isSameNode(o)){n.setStyle("left",s.left+"px",this._viewResizerWrapper);n.setStyle("top",s.top+"px",this._viewResizerWrapper);n.setStyle("height",s.height+"px",this._viewResizerWrapper);n.setStyle("width",s.width+"px",this._viewResizerWrapper)}})}function n(e){return e&&e.ownerDocument&&e.ownerDocument.contains(e)}}containsHandle(e){return this._domResizerWrapper.contains(e)}static isResizeHandle(e){return e.classList.contains("ck-widget__resizer__handle")}_cleanup(){this._sizeUI.dismiss();this._sizeUI.isVisible=false;const e=this._options.editor.editing.view;e.change(e=>{e.setStyle("width",this._initialViewWidth,this._options.viewElement)})}_proposeNewSize(e){const t=this.state;const n=XC(e);const i=this._options.isCentered?this._options.isCentered(this):true;const o={x:t._referenceCoordinates.x-(n.x+t.originalWidth),y:n.y-t.originalHeight-t._referenceCoordinates.y};if(i&&t.activeHandlePosition.endsWith("-right")){o.x=n.x-(t._referenceCoordinates.x+t.originalWidth)}if(i){o.x*=2}const r={width:Math.abs(t.originalWidth+o.x),height:Math.abs(t.originalHeight+o.y)};r.dominant=r.width/t.aspectRatio>r.height?"width":"height";r.max=r[r.dominant];const s={width:r.width,height:r.height};if(r.dominant=="width"){s.height=s.width/t.aspectRatio}else{s.width=s.height*t.aspectRatio}return{width:Math.round(s.width),height:Math.round(s.height),widthPercents:Math.min(Math.round(t.originalWidthPercents/t.originalWidth*s.width*100)/100,100)}}_getResizeHost(){const e=this._domResizerWrapper.parentElement;return this._options.getResizeHost(e)}_getHandleHost(){const e=this._domResizerWrapper.parentElement;return this._options.getHandleHost(e)}_appendHandles(e){const t=["top-left","top-right","bottom-right","bottom-left"];for(const n of t){e.appendChild(new $p({tag:"div",attributes:{class:`ck-widget__resizer__handle ${ZC(n)}`}}).render())}}_appendSizeUI(e){const t=new JC;t.render();this._sizeUI=t;e.appendChild(t.element)}}ys(QC,Qc);class JC extends kb{constructor(){super();const e=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-size-view",e.to("activeHandlePosition",e=>e?`ck-orientation-${e}`:"")],style:{display:e.if("isVisible","none",e=>!e)}},children:[{text:e.to("label")}]})}bindToState(e,t){this.bind("isVisible").to(t,"proposedWidth",t,"proposedHeight",(e,t)=>e!==null&&t!==null);this.bind("label").to(t,"proposedHandleHostWidth",t,"proposedHandleHostHeight",t,"proposedWidthPercents",(t,n,i)=>{if(e.unit==="px"){return`${t}×${n}`}else{return`${i}%`}});this.bind("activeHandlePosition").to(t)}dismiss(){this.unbind();this.isVisible=false}}function ZC(e){return`ck-widget__resizer__handle-${e}`}function XC(e){return{x:e.pageX,y:e.pageY}}var eA="Expected a function";function tA(e,t,n){var i=true,o=true;if(typeof e!="function"){throw new TypeError(eA)}if(ce(n)){i="leading"in n?!!n.leading:i;o="trailing"in n?!!n.trailing:o}return uh(e,t,{leading:i,maxWait:t,trailing:o})}var nA=tA;var iA=n(82);class oA extends Vw{static get pluginName(){return"WidgetResize"}init(){this.set("_visibleResizer",null);this.set("_activeResizer",null);this._resizers=new Map;const e=Nd.window.document;this.editor.model.schema.setAttributeProperties("width",{isFormatting:true});this._observer=Object.create(Ud);this._observer.listenTo(e,"mousedown",this._mouseDownListener.bind(this));this._observer.listenTo(e,"mousemove",this._mouseMoveListener.bind(this));this._observer.listenTo(e,"mouseup",this._mouseUpListener.bind(this));const t=()=>{if(this._visibleResizer){this._visibleResizer.redraw()}};const n=nA(t,200);this.on("change:_visibleResizer",t);this.editor.ui.on("update",n);this._observer.listenTo(Nd.window,"resize",n);const i=this.editor.editing.view.document.selection;i.on("change",()=>{const e=i.getSelectedElement();this._visibleResizer=this._getResizerByViewElement(e)||null})}destroy(){this._observer.stopListening();for(const e of this._resizers.values()){e.destroy()}}attachTo(e){const t=new QC(e);const n=this.editor.plugins;t.attach();if(n.has("WidgetToolbarRepository")){const e=n.get("WidgetToolbarRepository");t.on("begin",()=>{e.forceDisabled("resize")},{priority:"lowest"});t.on("cancel",()=>{e.clearForceDisabled("resize")},{priority:"highest"});t.on("commit",()=>{e.clearForceDisabled("resize")},{priority:"highest"})}this._resizers.set(e.viewElement,t);return t}_getResizerByHandle(e){for(const t of this._resizers.values()){if(t.containsHandle(e)){return t}}}_getResizerByViewElement(e){return this._resizers.get(e)}_mouseDownListener(e,t){if(!QC.isResizeHandle(t.target)){return}const n=t.target;this._activeResizer=this._getResizerByHandle(n);if(this._activeResizer){this._activeResizer.begin(n)}}_mouseMoveListener(e,t){if(this._activeResizer){this._activeResizer.updateSize(t)}}_mouseUpListener(){if(this._activeResizer){this._activeResizer.commit();this._activeResizer=null}}}ys(oA,Qc);class rA extends Lw{refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=vx(e);if(!e||!e.hasAttribute("width")){this.value=null}else{this.value={width:e.getAttribute("width"),height:null}}}execute(e){const t=this.editor.model;const n=t.document.selection.getSelectedElement();t.change(t=>{t.setAttribute("width",e.width,n)})}}var sA=n(84);class aA extends Vw{static get requires(){return[oA]}static get pluginName(){return"ImageResize"}init(){const e=this.editor;const t=new rA(e);this._registerSchema();this._registerConverters();e.commands.add("imageResize",t);e.editing.downcastDispatcher.on("insert:image",(n,i,o)=>{const r=o.mapper.toViewElement(i.item);const s=e.plugins.get(oA).attachTo({unit:e.config.get("image.resizeUnit")||"%",modelElement:i.item,viewElement:r,editor:e,getHandleHost(e){return e.querySelector("img")},getResizeHost(e){return e},isCentered(){const e=i.item.getAttribute("imageStyle");return!e||e=="full"||e=="alignCenter"},onCommit(t){e.execute("imageResize",{width:t})}});s.on("updateSize",()=>{if(!r.hasClass("image_resized")){e.editing.view.change(e=>{e.addClass("image_resized",r)})}});s.bind("isEnabled").to(t)},{priority:"low"})}_registerSchema(){this.editor.model.schema.extend("image",{allowAttributes:"width"})}_registerConverters(){const e=this.editor;e.conversion.for("downcast").add(e=>e.on("attribute:width:image",(e,t,n)=>{if(!n.consumable.consume(t.item,e.name)){return}const i=n.writer;const o=n.mapper.toViewElement(t.item);if(t.attributeNewValue!==null){i.setStyle("width",t.attributeNewValue,o);i.addClass("image_resized",o)}else{i.removeStyle("width",o);i.removeClass("image_resized",o)}}));e.conversion.for("upcast").attributeToAttribute({view:{name:"figure",styles:{width:/.+/}},model:{key:"width",value:e=>e.getStyle("width")}})}}class cA extends Lw{constructor(e,t){super(e);this.defaultStyle=false;this.styles=t.reduce((e,t)=>{e[t.name]=t;if(t.isDefault){this.defaultStyle=t.name}return e},{})}refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=vx(e);if(!e){this.value=false}else if(e.hasAttribute("imageStyle")){const t=e.getAttribute("imageStyle");this.value=this.styles[t]?t:false}else{this.value=this.defaultStyle}}execute(e){const t=e.value;const n=this.editor.model;const i=n.document.selection.getSelectedElement();n.change(e=>{if(this.styles[t].isDefault){e.removeAttribute("imageStyle",i)}else{e.setAttribute("imageStyle",t,i)}})}}function lA(e){return(t,n,i)=>{if(!i.consumable.consume(n.item,t.name)){return}const o=uA(n.attributeNewValue,e);const r=uA(n.attributeOldValue,e);const s=i.mapper.toViewElement(n.item);const a=i.writer;if(r){a.removeClass(r.className,s)}if(o){a.addClass(o.className,s)}}}function dA(e){const t=e.filter(e=>!e.isDefault);return(e,n,i)=>{if(!n.modelRange){return}const o=n.viewItem;const r=Bw(n.modelRange.getItems());if(!i.schema.checkAttribute(r,"imageStyle")){return}for(const e of t){if(i.consumable.consume(o,{classes:e.className})){i.writer.setAttribute("imageStyle",e.name,r)}}}}function uA(e,t){for(const n of t){if(n.name===e){return n}}}var hA='';var fA='';var gA='';var mA='';const pA={full:{name:"full",title:"Full size image",icon:hA,isDefault:true},side:{name:"side",title:"Side image",icon:mA,className:"image-style-side"},alignLeft:{name:"alignLeft",title:"Left aligned image",icon:fA,className:"image-style-align-left"},alignCenter:{name:"alignCenter",title:"Centered image",icon:gA,className:"image-style-align-center"},alignRight:{name:"alignRight",title:"Right aligned image",icon:mA,className:"image-style-align-right"}};const bA={full:hA,left:fA,right:mA,center:gA};function wA(e=[]){return e.map(kA)}function kA(e){if(typeof e=="string"){const t=e;if(pA[t]){e=Object.assign({},pA[t])}else{console.warn(Object(ss["a"])("image-style-not-found: There is no such image style of given name."),{name:t});e={name:t}}}else if(pA[e.name]){const t=pA[e.name];const n=Object.assign({},e);for(const i in t){if(!e.hasOwnProperty(i)){n[i]=t[i]}}e=n}if(typeof e.icon=="string"&&bA[e.icon]){e.icon=bA[e.icon]}return e}class _A extends Vw{static get pluginName(){return"ImageStyleEditing"}init(){const e=this.editor;const t=e.model.schema;const n=e.data;const i=e.editing;e.config.define("image.styles",["full","side"]);const o=wA(e.config.get("image.styles"));t.extend("image",{allowAttributes:"imageStyle"});const r=lA(o);i.downcastDispatcher.on("attribute:imageStyle:image",r);n.downcastDispatcher.on("attribute:imageStyle:image",r);n.upcastDispatcher.on("element:figure",dA(o),{priority:"low"});e.commands.add("imageStyle",new cA(e,o))}}var vA=n(86);class yA extends Vw{static get pluginName(){return"ImageStyleUI"}get localizedDefaultStylesTitles(){const e=this.editor.t;return{"Full size image":e("Full size image"),"Side image":e("Side image"),"Left aligned image":e("Left aligned image"),"Centered image":e("Centered image"),"Right aligned image":e("Right aligned image")}}init(){const e=this.editor;const t=e.config.get("image.styles");const n=xA(wA(t),this.localizedDefaultStylesTitles);for(const e of n){this._createButton(e)}}_createButton(e){const t=this.editor;const n=`imageStyle:${e.name}`;t.ui.componentFactory.add(n,n=>{const i=t.commands.get("imageStyle");const o=new rw(n);o.set({label:e.title,icon:e.icon,tooltip:true,isToggleable:true});o.bind("isEnabled").to(i,"isEnabled");o.bind("isOn").to(i,"value",t=>t===e.name);this.listenTo(o,"execute",()=>{t.execute("imageStyle",{value:e.name});t.editing.view.focus()});return o})}}function xA(e,t){for(const n of e){if(t[n.title]){n.title=t[n.title]}}return e}class CA extends Vw{static get requires(){return[_A,yA]}static get pluginName(){return"ImageStyle"}}class AA extends Vw{static get requires(){return[yC]}static get pluginName(){return"WidgetToolbarRepository"}init(){const e=this.editor;if(e.plugins.has("BalloonToolbar")){const t=e.plugins.get("BalloonToolbar");this.listenTo(t,"show",t=>{if(PA(e.editing.view.document.selection)){t.stop()}},{priority:"high"})}this._toolbarDefinitions=new Map;this._balloon=this.editor.plugins.get("ContextualBalloon");this.on("change:isEnabled",()=>{this._updateToolbarsVisibility()});this.listenTo(e.ui,"update",()=>{this._updateToolbarsVisibility()});this.listenTo(e.ui.focusTracker,"change:isFocused",()=>{this._updateToolbarsVisibility()},{priority:"low"})}destroy(){super.destroy();for(const e of this._toolbarDefinitions.values()){e.view.destroy()}}register(e,{ariaLabel:t,items:n,getRelatedElement:i,balloonClassName:o="ck-toolbar-container"}){const r=this.editor;const s=r.t;const a=new Tw(r.locale);a.ariaLabel=t||s("Widget toolbar");if(this._toolbarDefinitions.has(e)){throw new ss["b"]("widget-toolbar-duplicated: Toolbar with the given id was already added.",this,{toolbarId:e})}a.fillFromConfig(n,r.ui.componentFactory);this._toolbarDefinitions.set(e,{view:a,getRelatedElement:i,balloonClassName:o})}_updateToolbarsVisibility(){let e=0;let t=null;let n=null;for(const i of this._toolbarDefinitions.values()){const o=i.getRelatedElement(this.editor.editing.view.document.selection);if(!this.isEnabled||!o){if(this._isToolbarInBalloon(i)){this._hideToolbar(i)}}else if(!this.editor.ui.focusTracker.isFocused){if(this._isToolbarVisible(i)){this._hideToolbar(i)}}else{const r=o.getAncestors().length;if(r>e){e=r;t=o;n=i}}}if(n){this._showToolbar(n,t)}}_hideToolbar(e){this._balloon.remove(e.view);this.stopListening(this._balloon,"change:visibleView")}_showToolbar(e,t){if(this._isToolbarVisible(e)){TA(this.editor,t)}else if(!this._isToolbarInBalloon(e)){this._balloon.add({view:e.view,position:SA(this.editor,t),balloonClassName:e.balloonClassName});this.listenTo(this._balloon,"change:visibleView",()=>{for(const e of this._toolbarDefinitions.values()){if(this._isToolbarVisible(e)){const t=e.getRelatedElement(this.editor.editing.view.document.selection);TA(this.editor,t)}}})}}_isToolbarVisible(e){return this._balloon.visibleView===e.view}_isToolbarInBalloon(e){return this._balloon.hasView(e.view)}}function TA(e,t){const n=e.plugins.get("ContextualBalloon");const i=SA(e,t);n.updatePosition(i)}function SA(e,t){const n=e.editing.view;const i=ex.defaultPositions;return{target:n.domConverter.mapViewToDom(t),positions:[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast,mx]}}function PA(e){const t=e.getSelectedElement();return!!(t&&ax(t))}class EA extends Vw{static get requires(){return[AA]}static get pluginName(){return"ImageToolbar"}afterInit(){const e=this.editor;const t=e.t;const n=e.plugins.get(AA);n.register("image",{ariaLabel:t("Image toolbar"),items:e.config.get("image.toolbar")||[],getRelatedElement:_x})}}class MA extends kb{constructor(e){super(e);this.buttonView=new rw(e);this._fileInputView=new IA(e);this._fileInputView.bind("acceptedType").to(this);this._fileInputView.bind("allowMultipleFiles").to(this);this._fileInputView.delegate("done").to(this);this.setTemplate({tag:"span",attributes:{class:"ck-file-dialog-button"},children:[this.buttonView,this._fileInputView]});this.buttonView.on("execute",()=>{this._fileInputView.open()})}focus(){this.buttonView.focus()}}class IA extends kb{constructor(e){super(e);this.set("acceptedType");this.set("allowMultipleFiles",false);const t=this.bindTemplate;this.setTemplate({tag:"input",attributes:{class:["ck-hidden"],type:"file",tabindex:"-1",accept:t.to("acceptedType"),multiple:t.to("allowMultipleFiles")},on:{change:t.to(()=>{if(this.element&&this.element.files&&this.element.files.length){this.fire("done",this.element.files)}this.element.value=""})}})}open(){this.element.click()}}var NA='';function OA(e){const t=e.map(e=>e.replace("+","\\+"));return new RegExp(`^image\\/(${t.join("|")})$`)}function RA(e){return new Promise((t,n)=>{const i=e.getAttribute("src");fetch(i).then(e=>e.blob()).then(e=>{const n=DA(e,i);const o=n.replace("image/","");const r=`image.${o}`;const s=new File([e],r,{type:n});t(s)}).catch(n)})}function VA(e){if(!e.is("element","img")||!e.getAttribute("src")){return false}return e.getAttribute("src").match(/^data:image\/\w+;base64,/g)||e.getAttribute("src").match(/^blob:/g)}function DA(e,t){if(e.type){return e.type}else if(t.match(/data:(image\/\w+);base64/)){return t.match(/data:(image\/\w+);base64/)[1].toLowerCase()}else{return"image/jpeg"}}class LA extends Vw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("imageUpload",n=>{const i=new MA(n);const o=e.commands.get("imageUpload");const r=e.config.get("image.upload.types");const s=OA(r);i.set({acceptedType:r.map(e=>`image/${e}`).join(","),allowMultipleFiles:true});i.buttonView.set({label:t("Insert image"),icon:NA,tooltip:true});i.buttonView.bind("isEnabled").to(o);i.on("done",(t,n)=>{const i=Array.from(n).filter(e=>s.test(e.type));if(i.length){e.execute("imageUpload",{file:i})}});return i})}}class zA{constructor(e){this.context=e}destroy(){this.stopListening()}static get isContextPlugin(){return true}}ys(zA,Qc);class BA extends zA{static get pluginName(){return"PendingActions"}init(){this.set("hasAny",false);this._actions=new xs({idProperty:"_id"});this._actions.delegate("add","remove").to(this)}add(e){if(typeof e!=="string"){throw new ss["b"]("pendingactions-add-invalid-message: The message must be a string.",this)}const t=Object.create(Qc);t.set("message",e);this._actions.add(t);this.hasAny=true;return t}remove(e){this._actions.remove(e);this.hasAny=!!this._actions.length}get first(){return this._actions.get(0)}[Symbol.iterator](){return this._actions[Symbol.iterator]()}}class jA{constructor(){const e=new window.FileReader;this._reader=e;this._data=undefined;this.set("loaded",0);e.onprogress=e=>{this.loaded=e.loaded}}get error(){return this._reader.error}get data(){return this._data}read(e){const t=this._reader;this.total=e.size;return new Promise((n,i)=>{t.onload=()=>{const e=t.result;this._data=e;n(e)};t.onerror=()=>{i("error")};t.onabort=()=>{i("aborted")};this._reader.readAsDataURL(e)})}abort(){this._reader.abort()}}ys(jA,Qc);class FA extends Vw{static get pluginName(){return"FileRepository"}static get requires(){return[BA]}init(){this.loaders=new xs;this.loaders.on("add",()=>this._updatePendingAction());this.loaders.on("remove",()=>this._updatePendingAction());this._loadersMap=new Map;this._pendingAction=null;this.set("uploaded",0);this.set("uploadTotal",null);this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(e,t)=>t?e/t*100:0)}getLoader(e){return this._loadersMap.get(e)||null}createLoader(e){if(!this.createUploadAdapter){console.warn(Object(ss["a"])("filerepository-no-upload-adapter: Upload adapter is not defined."));return null}const t=new HA(Promise.resolve(e),this.createUploadAdapter);this.loaders.add(t);this._loadersMap.set(e,t);if(e instanceof Promise){t.file.then(e=>{this._loadersMap.set(e,t)}).catch(()=>{})}t.on("change:uploaded",()=>{let e=0;for(const t of this.loaders){e+=t.uploaded}this.uploaded=e});t.on("change:uploadTotal",()=>{let e=0;for(const t of this.loaders){if(t.uploadTotal){e+=t.uploadTotal}}this.uploadTotal=e});return t}destroyLoader(e){const t=e instanceof HA?e:this.getLoader(e);t._destroy();this.loaders.remove(t);this._loadersMap.forEach((e,n)=>{if(e===t){this._loadersMap.delete(n)}})}_updatePendingAction(){const e=this.editor.plugins.get(BA);if(this.loaders.length){if(!this._pendingAction){const t=this.editor.t;const n=e=>`${t("Upload in progress")} ${parseInt(e)}%.`;this._pendingAction=e.add(n(this.uploadedPercent));this._pendingAction.bind("message").to(this,"uploadedPercent",n)}}else{e.remove(this._pendingAction);this._pendingAction=null}}}ys(FA,Qc);class HA{constructor(e,t){this.id=ns();this._filePromiseWrapper=this._createFilePromiseWrapper(e);this._adapter=t(this);this._reader=new jA;this.set("status","idle");this.set("uploaded",0);this.set("uploadTotal",null);this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(e,t)=>t?e/t*100:0);this.set("uploadResponse",null)}get file(){if(!this._filePromiseWrapper){return Promise.resolve(null)}else{return this._filePromiseWrapper.promise.then(e=>this._filePromiseWrapper?e:null)}}get data(){return this._reader.data}read(){if(this.status!="idle"){throw new ss["b"]("filerepository-read-wrong-status: You cannot call read if the status is different than idle.",this)}this.status="reading";return this.file.then(e=>this._reader.read(e)).then(e=>{if(this.status!=="reading"){throw this.status}this.status="idle";return e}).catch(e=>{if(e==="aborted"){this.status="aborted";throw"aborted"}this.status="error";throw this._reader.error?this._reader.error:e})}upload(){if(this.status!="idle"){throw new ss["b"]("filerepository-upload-wrong-status: You cannot call upload if the status is different than idle.",this)}this.status="uploading";return this.file.then(()=>this._adapter.upload()).then(e=>{this.uploadResponse=e;this.status="idle";return e}).catch(e=>{if(this.status==="aborted"){throw"aborted"}this.status="error";throw e})}abort(){const e=this.status;this.status="aborted";if(!this._filePromiseWrapper.isFulfilled){this._filePromiseWrapper.promise.catch(()=>{});this._filePromiseWrapper.rejecter("aborted")}else if(e=="reading"){this._reader.abort()}else if(e=="uploading"&&this._adapter.abort){this._adapter.abort()}this._destroy()}_destroy(){this._filePromiseWrapper=undefined;this._reader=undefined;this._adapter=undefined;this.uploadResponse=undefined}_createFilePromiseWrapper(e){const t={};t.promise=new Promise((n,i)=>{t.rejecter=i;t.isFulfilled=false;e.then(e=>{t.isFulfilled=true;n(e)}).catch(e=>{t.isFulfilled=true;i(e)})});return t}}ys(HA,Qc);var WA='';var UA=n(88);var qA=n(90);var $A=n(92);class GA extends Vw{constructor(e){super(e);this.placeholder="data:image/svg+xml;utf8,"+encodeURIComponent(WA)}init(){const e=this.editor;e.editing.downcastDispatcher.on("attribute:uploadStatus:image",(...e)=>this.uploadStatusChange(...e))}uploadStatusChange(e,t,n){const i=this.editor;const o=t.item;const r=o.getAttribute("uploadId");if(!n.consumable.consume(t.item,e.name)){return}const s=i.plugins.get(FA);const a=r?t.attributeNewValue:null;const c=this.placeholder;const l=i.editing.mapper.toViewElement(o);const d=n.writer;if(a=="reading"){YA(l,d);QA(c,l,d);return}if(a=="uploading"){const e=s.loaders.get(r);YA(l,d);if(!e){QA(c,l,d)}else{JA(l,d);ZA(l,d,e,i.editing.view);rT(l,d,e)}return}if(a=="complete"&&s.loaders.get(r)){eT(l,d,i.editing.view)}XA(l,d);JA(l,d);KA(l,d)}}function YA(e,t){if(!e.hasClass("ck-appear")){t.addClass("ck-appear",e)}}function KA(e,t){t.removeClass("ck-appear",e)}function QA(e,t,n){if(!t.hasClass("ck-image-upload-placeholder")){n.addClass("ck-image-upload-placeholder",t)}const i=Cx(t);if(i.getAttribute("src")!==e){n.setAttribute("src",e,i)}if(!iT(t,"placeholder")){n.insert(n.createPositionAfter(i),nT(n))}}function JA(e,t){if(e.hasClass("ck-image-upload-placeholder")){t.removeClass("ck-image-upload-placeholder",e)}oT(e,t,"placeholder")}function ZA(e,t,n,i){const o=tT(t);t.insert(t.createPositionAt(e,"end"),o);n.on("change:uploadedPercent",(e,t,n)=>{i.change(e=>{e.setStyle("width",n+"%",o)})})}function XA(e,t){oT(e,t,"progressBar")}function eT(e,t,n){const i=t.createUIElement("div",{class:"ck-image-upload-complete-icon"});t.insert(t.createPositionAt(e,"end"),i);setTimeout(()=>{n.change(e=>e.remove(e.createRangeOn(i)))},3e3)}function tT(e){const t=e.createUIElement("div",{class:"ck-progress-bar"});e.setCustomProperty("progressBar",true,t);return t}function nT(e){const t=e.createUIElement("div",{class:"ck-upload-placeholder-loader"});e.setCustomProperty("placeholder",true,t);return t}function iT(e,t){for(const n of e.getChildren()){if(n.getCustomProperty(t)){return n}}}function oT(e,t,n){const i=iT(e,n);if(i){t.remove(t.createRangeOn(i))}}function rT(e,t,n){if(n.data){const i=Cx(e);t.setAttribute("src",n.data,i)}}class sT extends zA{static get pluginName(){return"Notification"}init(){this.on("show:warning",(e,t)=>{window.alert(t.message)},{priority:"lowest"})}showSuccess(e,t={}){this._showNotification({message:e,type:"success",namespace:t.namespace,title:t.title})}showInfo(e,t={}){this._showNotification({message:e,type:"info",namespace:t.namespace,title:t.title})}showWarning(e,t={}){this._showNotification({message:e,type:"warning",namespace:t.namespace,title:t.title})}_showNotification(e){const t=`show:${e.type}`+(e.namespace?`:${e.namespace}`:"");this.fire(t,{message:e.message,type:e.type,title:e.title||""})}}class aT{constructor(e){this.document=e}createDocumentFragment(e){return new Ul(this.document,e)}createElement(e,t,n){return new zc(this.document,e,t,n)}createText(e){return new js(this.document,e)}clone(e,t=false){return e._clone(t)}appendChild(e,t){return t._appendChild(e)}insertChild(e,t,n){return n._insertChild(e,t)}removeChildren(e,t,n){return n._removeChildren(e,t)}remove(e){const t=e.parent;if(t){return this.removeChildren(t.getChildIndex(e),1,t)}return[]}replace(e,t){const n=e.parent;if(n){const i=n.getChildIndex(e);this.removeChildren(i,1,n);this.insertChild(i,t,n);return true}return false}unwrapElement(e){const t=e.parent;if(t){const n=t.getChildIndex(e);this.remove(e);this.insertChild(n,e.getChildren(),t)}}rename(e,t){const n=new zc(this.document,e,t.getAttributes(),t.getChildren());return this.replace(t,n)?n:null}setAttribute(e,t,n){n._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,n){if(R(e)&&n===undefined){n=t}n._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,n){n._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}createPositionAt(e,t){return ul._createAt(e,t)}createPositionAfter(e){return ul._createAfter(e)}createPositionBefore(e){return ul._createBefore(e)}createRange(e,t){return new hl(e,t)}createRangeOn(e){return hl._createOn(e)}createRangeIn(e){return hl._createIn(e)}createSelection(e,t,n){return new ml(e,t,n)}}class cT extends Lw{refresh(){this.isEnabled=xx(this.editor.model)}execute(e){const t=this.editor;const n=t.model;const i=t.plugins.get(FA);n.change(t=>{const o=Array.isArray(e.file)?e.file:[e.file];for(const e of o){lT(t,n,i,e)}})}}function lT(e,t,n,i){const o=n.createLoader(i);if(!o){return}yx(e,t,{uploadId:o.id})}class dT extends Vw{static get requires(){return[FA,sT,__]}static get pluginName(){return"ImageUploadEditing"}constructor(e){super(e);e.config.define("image",{upload:{types:["jpeg","png","gif","bmp","webp","tiff"]}})}init(){const e=this.editor;const t=e.model.document;const n=e.model.schema;const i=e.conversion;const o=e.plugins.get(FA);const r=OA(e.config.get("image.upload.types"));n.extend("image",{allowAttributes:["uploadId","uploadStatus"]});e.commands.add("imageUpload",new cT(e));i.for("upcast").attributeToAttribute({view:{name:"img",key:"uploadId"},model:"uploadId"});this.listenTo(e.editing.view.document,"clipboardInput",(t,n)=>{if(uT(n.dataTransfer)){return}const i=Array.from(n.dataTransfer.files).filter(e=>{if(!e){return false}return r.test(e.type)});const o=n.targetRanges.map(t=>e.editing.mapper.toModelRange(t));e.model.change(n=>{n.setSelection(o);if(i.length){t.stop();e.model.enqueueChange("default",()=>{e.execute("imageUpload",{file:i})})}})});this.listenTo(e.plugins.get(__),"inputTransformation",(t,n)=>{const i=Array.from(e.editing.view.createRangeIn(n.content)).filter(e=>VA(e.item)&&!e.item.getAttribute("uploadProcessed")).map(e=>({promise:RA(e.item),imageElement:e.item}));if(!i.length){return}const r=new aT(e.editing.view.document);for(const e of i){r.setAttribute("uploadProcessed",true,e.imageElement);const t=o.createLoader(e.promise);if(t){r.setAttribute("src","",e.imageElement);r.setAttribute("uploadId",t.id,e.imageElement)}}});e.editing.view.document.on("dragover",(e,t)=>{t.preventDefault()});t.on("change",()=>{const n=t.differ.getChanges({includeChangesInGraveyard:true});for(const t of n){if(t.type=="insert"&&t.name!="$text"){const n=t.position.nodeAfter;const i=t.position.root.rootName=="$graveyard";for(const t of hT(e,n)){const e=t.getAttribute("uploadId");if(!e){continue}const n=o.loaders.get(e);if(!n){continue}if(i){n.abort()}else if(n.status=="idle"){this._readAndUpload(n,t)}}}}})}_readAndUpload(e,t){const n=this.editor;const i=n.model;const o=n.locale.t;const r=n.plugins.get(FA);const s=n.plugins.get(sT);i.enqueueChange("transparent",e=>{e.setAttribute("uploadStatus","reading",t)});return e.read().then(()=>{const o=e.upload();if(Tl.isSafari){const e=n.editing.mapper.toViewElement(t);const i=Cx(e);n.editing.view.once("render",()=>{if(!i.parent){return}const e=n.editing.view.domConverter.mapViewToDom(i.parent);if(!e){return}const t=e.style.display;e.style.display="none";e._ckHack=e.offsetHeight;e.style.display=t})}i.enqueueChange("transparent",e=>{e.setAttribute("uploadStatus","uploading",t)});return o}).then(e=>{i.enqueueChange("transparent",n=>{n.setAttributes({uploadStatus:"complete",src:e.default},t);this._parseAndSetSrcsetAttributeOnImage(e,t,n)});a()}).catch(n=>{if(e.status!=="error"&&e.status!=="aborted"){throw n}if(e.status=="error"&&n){s.showWarning(n,{title:o("Upload failed"),namespace:"upload"})}a();i.enqueueChange("transparent",e=>{e.remove(t)})});function a(){i.enqueueChange("transparent",e=>{e.removeAttribute("uploadId",t);e.removeAttribute("uploadStatus",t)});r.destroyLoader(e)}}_parseAndSetSrcsetAttributeOnImage(e,t,n){let i=0;const o=Object.keys(e).filter(e=>{const t=parseInt(e,10);if(!isNaN(t)){i=Math.max(i,t);return true}}).map(t=>`${e[t]} ${t}w`).join(", ");if(o!=""){n.setAttribute("srcset",{data:o,width:i},t)}}}function uT(e){return Array.from(e.types).includes("text/html")&&e.getData("text/html")!==""}function hT(e,t){return Array.from(e.model.createRangeOn(t)).filter(e=>e.item.is("image")).map(e=>e.item)}class fT extends Vw{static get pluginName(){return"ImageUpload"}static get requires(){return[dT,LA,GA]}}class gT extends Lw{constructor(e){super(e);this._childCommands=[]}refresh(){}execute(...e){const t=this._getFirstEnabledCommand();t.execute(e)}registerChildCommand(e){this._childCommands.push(e);e.on("change:isEnabled",()=>this._checkEnabled());this._checkEnabled()}_checkEnabled(){this.isEnabled=!!this._getFirstEnabledCommand()}_getFirstEnabledCommand(){return this._childCommands.find(e=>e.isEnabled)}}class mT extends Vw{static get pluginName(){return"IndentEditing"}init(){const e=this.editor;e.commands.add("indent",new gT(e));e.commands.add("outdent",new gT(e))}}var pT='';var bT='';class wT extends Vw{static get pluginName(){return"IndentUI"}init(){const e=this.editor;const t=e.locale;const n=e.t;const i=t.uiLanguageDirection=="ltr"?pT:bT;const o=t.uiLanguageDirection=="ltr"?bT:pT;this._defineButton("indent",n("Increase indent"),i);this._defineButton("outdent",n("Decrease indent"),o)}_defineButton(e,t,n){const i=this.editor;i.ui.componentFactory.add(e,o=>{const r=i.commands.get(e);const s=new rw(o);s.set({label:t,icon:n,tooltip:true});s.bind("isOn","isEnabled").to(r,"value","isEnabled");this.listenTo(s,"execute",()=>{i.execute(e);i.editing.view.focus()});return s})}}class kT extends Vw{static get pluginName(){return"Indent"}static get requires(){return[mT,wT]}}const _T="italic";class vT extends Vw{static get pluginName(){return"ItalicEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:_T});e.model.schema.setAttributeProperties(_T,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:_T,view:"i",upcastAlso:["em",{styles:{"font-style":"italic"}}]});e.commands.add(_T,new bk(e,_T));e.keystrokes.set("CTRL+I",_T)}}var yT='';const xT="italic";class CT extends Vw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(xT,n=>{const i=e.commands.get(xT);const o=new rw(n);o.set({label:t("Italic"),icon:yT,keystroke:"CTRL+I",tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(i,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(xT);e.editing.view.focus()});return o})}}class AT extends Vw{static get requires(){return[vT,CT]}static get pluginName(){return"Italic"}}function TT(e,t,n){return n.createRange(ST(e,t,true,n),ST(e,t,false,n))}function ST(e,t,n,i){let o=e.textNode||(n?e.nodeBefore:e.nodeAfter);let r=null;while(o&&o.getAttribute("linkHref")==t){r=o;o=n?o.previousSibling:o.nextSibling}return r?i.createPositionAt(r,n?"before":"after"):e}class PT extends Lw{constructor(e){super(e);this.manualDecorators=new xs}restoreManualDecoratorStates(){for(const e of this.manualDecorators){e.value=this._getDecoratorStateFromModel(e.id)}}refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute("linkHref");for(const e of this.manualDecorators){e.value=this._getDecoratorStateFromModel(e.id)}this.isEnabled=e.schema.checkAttributeInSelection(t.selection,"linkHref")}execute(e,t={}){const n=this.editor.model;const i=n.document.selection;const o=[];const r=[];for(const e in t){if(t[e]){o.push(e)}else{r.push(e)}}n.change(t=>{if(i.isCollapsed){const s=i.getFirstPosition();if(i.hasAttribute("linkHref")){const a=TT(s,i.getAttribute("linkHref"),n);t.setAttribute("linkHref",e,a);o.forEach(e=>{t.setAttribute(e,true,a)});r.forEach(e=>{t.removeAttribute(e,a)});t.setSelection(a)}else if(e!==""){const r=Ws(i.getAttributes());r.set("linkHref",e);o.forEach(e=>{r.set(e,true)});const a=t.createText(e,r);n.insertContent(a,s);t.setSelection(t.createRangeOn(a))}}else{const s=n.schema.getValidRanges(i.getRanges(),"linkHref");for(const n of s){t.setAttribute("linkHref",e,n);o.forEach(e=>{t.setAttribute(e,true,n)});r.forEach(e=>{t.removeAttribute(e,n)})}}})}_getDecoratorStateFromModel(e){const t=this.editor.model.document;return t.selection.getAttribute(e)}}class ET extends Lw{refresh(){this.isEnabled=this.editor.model.document.selection.hasAttribute("linkHref")}execute(){const e=this.editor;const t=this.editor.model;const n=t.document.selection;const i=e.commands.get("link");t.change(e=>{const o=n.isCollapsed?[TT(n.getFirstPosition(),n.getAttribute("linkHref"),t)]:n.getRanges();for(const t of o){e.removeAttribute("linkHref",t);if(i){for(const n of i.manualDecorators){e.removeAttribute(n.id,t)}}}})}}function MT(e,t,n){var i=e.length;n=n===undefined?i:n;return!t&&n>=i?e:Na(e,t,n)}var IT=MT;var NT="\\ud800-\\udfff",OT="\\u0300-\\u036f",RT="\\ufe20-\\ufe2f",VT="\\u20d0-\\u20ff",DT=OT+RT+VT,LT="\\ufe0e\\ufe0f";var zT="\\u200d";var BT=RegExp("["+zT+NT+DT+LT+"]");function jT(e){return BT.test(e)}var FT=jT;function HT(e){return e.split("")}var WT=HT;var UT="\\ud800-\\udfff",qT="\\u0300-\\u036f",$T="\\ufe20-\\ufe2f",GT="\\u20d0-\\u20ff",YT=qT+$T+GT,KT="\\ufe0e\\ufe0f";var QT="["+UT+"]",JT="["+YT+"]",ZT="\\ud83c[\\udffb-\\udfff]",XT="(?:"+JT+"|"+ZT+")",eS="[^"+UT+"]",tS="(?:\\ud83c[\\udde6-\\uddff]){2}",nS="[\\ud800-\\udbff][\\udc00-\\udfff]",iS="\\u200d";var oS=XT+"?",rS="["+KT+"]?",sS="(?:"+iS+"(?:"+[eS,tS,nS].join("|")+")"+rS+oS+")*",aS=rS+oS+sS,cS="(?:"+[eS+JT+"?",JT,tS,nS,QT].join("|")+")";var lS=RegExp(ZT+"(?="+ZT+")|"+cS+aS,"g");function dS(e){return e.match(lS)||[]}var uS=dS;function hS(e){return FT(e)?uS(e):WT(e)}var fS=hS;function gS(e){return function(t){t=va(t);var n=FT(t)?fS(t):undefined;var i=n?n[0]:t.charAt(0);var o=n?IT(n,1).join(""):t.slice(1);return i[e]()+o}}var mS=gS;var pS=mS("toUpperCase");var bS=pS;const wS=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g;const kS=/^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i;function _S(e){return e.is("attributeElement")&&!!e.getCustomProperty("link")}function vS(e,t){const n=t.createAttributeElement("a",{href:e},{priority:5});t.setCustomProperty("link",true,n);return n}function yS(e){e=String(e);return xS(e)?e:"#"}function xS(e){const t=e.replace(wS,"");return t.match(kS)}function CS(e,t){const n={"Open in a new tab":e("Open in a new tab"),Downloadable:e("Downloadable")};t.forEach(e=>{if(e.label&&n[e.label]){e.label=n[e.label]}return e});return t}function AS(e){const t=[];if(e){for(const[n,i]of Object.entries(e)){const e=Object.assign({},i,{id:`link${bS(n)}`});t.push(e)}}return t}class TS{constructor(){this._definitions=new Set}get length(){return this._definitions.size}add(e){if(Array.isArray(e)){e.forEach(e=>this._definitions.add(e))}else{this._definitions.add(e)}}getDispatcher(){return e=>{e.on("attribute:linkHref",(e,t,n)=>{if(!n.consumable.test(t.item,"attribute:linkHref")){return}const i=n.writer;const o=i.document.selection;for(const e of this._definitions){const r=i.createAttributeElement("a",e.attributes,{priority:5});i.setCustomProperty("link",true,r);if(e.callback(t.attributeNewValue)){if(t.item.is("selection")){i.wrap(o.getFirstRange(),r)}else{i.wrap(n.mapper.toViewRange(t.range),r)}}else{i.unwrap(n.mapper.toViewRange(t.range),r)}}},{priority:"high"})}}}class SS{constructor({id:e,label:t,attributes:n,defaultValue:i}){this.id=e;this.set("value");this.defaultValue=i;this.label=t;this.attributes=n}}ys(SS,Qc);function PS({view:e,model:t,emitter:n,attribute:i,locale:o}){const r=new ES(t,n,i);const s=t.document.selection;n.listenTo(e.document,"keydown",(e,t)=>{if(!s.isCollapsed){return}if(t.shiftKey||t.altKey||t.ctrlKey){return}const n=t.keyCode==Rl.arrowright;const i=t.keyCode==Rl.arrowleft;if(!n&&!i){return}const a=s.getFirstPosition();const c=o.contentLanguageDirection;let l;if(c==="ltr"&&n||c==="rtl"&&i){l=r.handleForwardMovement(a,t)}else{l=r.handleBackwardMovement(a,t)}if(l){e.stop()}},{priority:os.get("high")+1})}class ES{constructor(e,t,n){this.model=e;this.attribute=n;this._modelSelection=e.document.selection;this._overrideUid=null;this._isNextGravityRestorationSkipped=false;t.listenTo(this._modelSelection,"change:range",(e,t)=>{if(this._isNextGravityRestorationSkipped){this._isNextGravityRestorationSkipped=false;return}if(!this._isGravityOverridden){return}if(!t.directChange&&MS(this._modelSelection.getFirstPosition(),n)){return}this._restoreGravity()})}handleForwardMovement(e,t){const n=this.attribute;if(this._isGravityOverridden){return}if(e.isAtStart&&this._hasSelectionAttribute){return}if(OS(e,n)&&this._hasSelectionAttribute){this._preventCaretMovement(t);this._removeSelectionAttribute();return true}if(IS(e,n)){this._preventCaretMovement(t);this._overrideGravity();return true}if(NS(e,n)&&this._hasSelectionAttribute){this._preventCaretMovement(t);this._overrideGravity();return true}}handleBackwardMovement(e,t){const n=this.attribute;if(this._isGravityOverridden){if(OS(e,n)&&this._hasSelectionAttribute){this._preventCaretMovement(t);this._restoreGravity();this._removeSelectionAttribute();return true}else{this._preventCaretMovement(t);this._restoreGravity();if(e.isAtStart){this._removeSelectionAttribute()}return true}}else{if(OS(e,n)&&!this._hasSelectionAttribute){this._preventCaretMovement(t);this._setSelectionAttributeFromTheNodeBefore(e);return true}if(e.isAtEnd&&NS(e,n)){if(this._hasSelectionAttribute){if(RS(e,n)){this._skipNextAutomaticGravityRestoration();this._overrideGravity()}return}else{this._preventCaretMovement(t);this._setSelectionAttributeFromTheNodeBefore(e);return true}}if(e.isAtStart){if(this._hasSelectionAttribute){this._removeSelectionAttribute();this._preventCaretMovement(t);return true}return}if(RS(e,n)){this._skipNextAutomaticGravityRestoration();this._overrideGravity()}}}get _isGravityOverridden(){return!!this._overrideUid}get _hasSelectionAttribute(){return this._modelSelection.hasAttribute(this.attribute)}_overrideGravity(){this._overrideUid=this.model.change(e=>e.overrideSelectionGravity())}_restoreGravity(){this.model.change(e=>{e.restoreSelectionGravity(this._overrideUid);this._overrideUid=null})}_preventCaretMovement(e){e.preventDefault()}_removeSelectionAttribute(){this.model.change(e=>{e.removeSelectionAttribute(this.attribute)})}_setSelectionAttributeFromTheNodeBefore(e){const t=this.attribute;this.model.change(n=>{n.setSelectionAttribute(this.attribute,e.nodeBefore.getAttribute(t))})}_skipNextAutomaticGravityRestoration(){this._isNextGravityRestorationSkipped=true}}function MS(e,t){return IS(e,t)||NS(e,t)}function IS(e,t){const{nodeBefore:n,nodeAfter:i}=e;const o=n?n.hasAttribute(t):false;const r=i?i.hasAttribute(t):false;return r&&(!o||n.getAttribute(t)!==i.getAttribute(t))}function NS(e,t){const{nodeBefore:n,nodeAfter:i}=e;const o=n?n.hasAttribute(t):false;const r=i?i.hasAttribute(t):false;return o&&(!r||n.getAttribute(t)!==i.getAttribute(t))}function OS(e,t){const{nodeBefore:n,nodeAfter:i}=e;const o=n?n.hasAttribute(t):false;const r=i?i.hasAttribute(t):false;if(!r||!o){return}return i.getAttribute(t)!==n.getAttribute(t)}function RS(e,t){return MS(e.getShiftedBy(-1),t)}var VS=n(94);const DS="ck-link_selected";const LS="automatic";const zS="manual";const BS=/^(https?:)?\/\//;class jS extends Vw{static get pluginName(){return"LinkEditing"}constructor(e){super(e);e.config.define("link",{addTargetToExternalLinks:false})}init(){const e=this.editor;const t=e.locale;e.model.schema.extend("$text",{allowAttributes:"linkHref"});e.conversion.for("dataDowncast").attributeToElement({model:"linkHref",view:vS});e.conversion.for("editingDowncast").attributeToElement({model:"linkHref",view:(e,t)=>vS(yS(e),t)});e.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{href:true}},model:{key:"linkHref",value:e=>e.getAttribute("href")}});e.commands.add("link",new PT(e));e.commands.add("unlink",new ET(e));const n=CS(e.t,AS(e.config.get("link.decorators")));this._enableAutomaticDecorators(n.filter(e=>e.mode===LS));this._enableManualDecorators(n.filter(e=>e.mode===zS));PS({view:e.editing.view,model:e.model,emitter:this,attribute:"linkHref",locale:t});this._setupLinkHighlight();this._enableInsertContentSelectionAttributesFixer()}_enableAutomaticDecorators(e){const t=this.editor;const n=new TS;if(t.config.get("link.addTargetToExternalLinks")){n.add({id:"linkIsExternal",mode:LS,callback:e=>BS.test(e),attributes:{target:"_blank",rel:"noopener noreferrer"}})}n.add(e);if(n.length){t.conversion.for("downcast").add(n.getDispatcher())}}_enableManualDecorators(e){if(!e.length){return}const t=this.editor;const n=t.commands.get("link");const i=n.manualDecorators;e.forEach(e=>{t.model.schema.extend("$text",{allowAttributes:e.id});i.add(new SS(e));t.conversion.for("downcast").attributeToElement({model:e.id,view:(t,n)=>{if(t){const t=i.get(e.id).attributes;const o=n.createAttributeElement("a",t,{priority:5});n.setCustomProperty("link",true,o);return o}}});t.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:i.get(e.id).attributes},model:{key:e.id}})})}_setupLinkHighlight(){const e=this.editor;const t=e.editing.view;const n=new Set;t.document.registerPostFixer(t=>{const i=e.model.document.selection;let o=false;if(i.hasAttribute("linkHref")){const r=TT(i.getFirstPosition(),i.getAttribute("linkHref"),e.model);const s=e.editing.mapper.toViewRange(r);for(const e of s.getItems()){if(e.is("a")&&!e.hasClass(DS)){t.addClass(DS,e);n.add(e);o=true}}}return o});e.conversion.for("editingDowncast").add(e=>{e.on("insert",i,{priority:"highest"});e.on("remove",i,{priority:"highest"});e.on("attribute",i,{priority:"highest"});e.on("selection",i,{priority:"highest"});function i(){t.change(e=>{for(const t of n.values()){e.removeClass(DS,t);n.delete(t)}})}})}_enableInsertContentSelectionAttributesFixer(){const e=this.editor;const t=e.model;const n=t.document.selection;t.on("insertContent",()=>{const e=n.anchor.nodeBefore;const i=n.anchor.nodeAfter;if(!n.hasAttribute("linkHref")){return}if(!e){return}if(!e.hasAttribute("linkHref")){return}if(i&&i.hasAttribute("linkHref")){return}t.change(e=>{[...t.document.selection.getAttributeKeys()].filter(e=>e.startsWith("link")).forEach(t=>e.removeSelectionAttribute(t))})},{priority:"low"})}}class FS extends Ku{constructor(e){super(e);this.domEventType="click"}onDomEvent(e){this.fire(e.type,e)}}var HS=n(96);class WS extends kb{constructor(e,t){super(e);const n=e.t;this.focusTracker=new Sp;this.keystrokes=new gp;this.urlInputView=this._createUrlInput();this.saveButtonView=this._createButton(n("Save"),fC,"ck-button-save");this.saveButtonView.type="submit";this.cancelButtonView=this._createButton(n("Cancel"),gC,"ck-button-cancel","cancel");this._manualDecoratorSwitches=this._createManualDecoratorSwitches(t);this.children=this._createFormChildren(t.manualDecorators);this._focusables=new Wp;this._focusCycler=new Db({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});const i=["ck","ck-link-form"];if(t.manualDecorators.length){i.push("ck-link-form_layout-vertical")}this.setTemplate({tag:"form",attributes:{class:i,tabindex:"-1"},children:this.children})}getDecoratorSwitchesState(){return Array.from(this._manualDecoratorSwitches).reduce((e,t)=>{e[t.name]=t.isOn;return e},{})}render(){super.render();hC({view:this});const e=[this.urlInputView,...this._manualDecoratorSwitches,this.saveButtonView,this.cancelButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createUrlInput(){const e=this.locale.t;const t=new aC(this.locale,dC);t.label=e("Link URL");t.fieldView.placeholder="https://example.com";return t}_createButton(e,t,n,i){const o=new rw(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:n}});if(i){o.delegate("execute").to(this,i)}return o}_createManualDecoratorSwitches(e){const t=this.createCollection();for(const n of e.manualDecorators){const i=new fw(this.locale);i.set({name:n.id,label:n.label,withText:true});i.bind("isOn").toMany([n,e],"value",(e,t)=>t===undefined&&e===undefined?n.defaultValue:e);i.on("execute",()=>{n.set("value",!i.isOn)});t.add(i)}return t}_createFormChildren(e){const t=this.createCollection();t.add(this.urlInputView);if(e.length){const e=new kb;e.setTemplate({tag:"ul",children:this._manualDecoratorSwitches.map(e=>({tag:"li",children:[e],attributes:{class:["ck","ck-list__item"]}})),attributes:{class:["ck","ck-reset","ck-list"]}});t.add(e)}t.add(this.saveButtonView);t.add(this.cancelButtonView);return t}}var US='';var qS='';var $S=n(98);class GS extends kb{constructor(e){super(e);const t=e.t;this.focusTracker=new Sp;this.keystrokes=new gp;this.previewButtonView=this._createPreviewButton();this.unlinkButtonView=this._createButton(t("Unlink"),US,"unlink");this.editButtonView=this._createButton(t("Edit link"),qS,"edit");this.set("href");this._focusables=new Wp;this._focusCycler=new Db({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this.setTemplate({tag:"div",attributes:{class:["ck","ck-link-actions"],tabindex:"-1"},children:[this.previewButtonView,this.editButtonView,this.unlinkButtonView]})}render(){super.render();const e=[this.previewButtonView,this.editButtonView,this.unlinkButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createButton(e,t,n){const i=new rw(this.locale);i.set({label:e,icon:t,tooltip:true});i.delegate("execute").to(this,n);return i}_createPreviewButton(){const e=new rw(this.locale);const t=this.bindTemplate;const n=this.t;e.set({withText:true,tooltip:n("Open link in new tab")});e.extendTemplate({attributes:{class:["ck","ck-link-actions__preview"],href:t.to("href",e=>e&&yS(e)),target:"_blank",rel:"noopener noreferrer"}});e.bind("label").to(this,"href",e=>e||n("This link has no URL"));e.bind("isEnabled").to(this,"href",e=>!!e);e.template.tag="a";e.template.eventListeners={};return e}}var YS='';const KS="Ctrl+K";class QS extends Vw{static get requires(){return[yC]}static get pluginName(){return"LinkUI"}init(){const e=this.editor;e.editing.view.addObserver(FS);this.actionsView=this._createActionsView();this.formView=this._createFormView();this._balloon=e.plugins.get(yC);this._createToolbarLinkButton();this._enableUserBalloonInteractions()}destroy(){super.destroy();this.formView.destroy()}_createActionsView(){const e=this.editor;const t=new GS(e.locale);const n=e.commands.get("link");const i=e.commands.get("unlink");t.bind("href").to(n,"value");t.editButtonView.bind("isEnabled").to(n);t.unlinkButtonView.bind("isEnabled").to(i);this.listenTo(t,"edit",()=>{this._addFormView()});this.listenTo(t,"unlink",()=>{e.execute("unlink");this._hideUI()});t.keystrokes.set("Esc",(e,t)=>{this._hideUI();t()});t.keystrokes.set(KS,(e,t)=>{this._addFormView();t()});return t}_createFormView(){const e=this.editor;const t=e.commands.get("link");const n=new WS(e.locale,t);n.urlInputView.fieldView.bind("value").to(t,"value");n.urlInputView.bind("isReadOnly").to(t,"isEnabled",e=>!e);n.saveButtonView.bind("isEnabled").to(t);this.listenTo(n,"submit",()=>{e.execute("link",n.urlInputView.fieldView.element.value,n.getDecoratorSwitchesState());this._closeFormView()});this.listenTo(n,"cancel",()=>{this._closeFormView()});n.keystrokes.set("Esc",(e,t)=>{this._closeFormView();t()});return n}_createToolbarLinkButton(){const e=this.editor;const t=e.commands.get("link");const n=e.t;e.keystrokes.set(KS,(e,t)=>{t();this._showUI(true)});e.ui.componentFactory.add("link",e=>{const i=new rw(e);i.isEnabled=true;i.label=n("Link");i.icon=YS;i.keystroke=KS;i.tooltip=true;i.isToggleable=true;i.bind("isEnabled").to(t,"isEnabled");i.bind("isOn").to(t,"value",e=>!!e);this.listenTo(i,"execute",()=>this._showUI(true));return i})}_enableUserBalloonInteractions(){const e=this.editor.editing.view.document;this.listenTo(e,"click",()=>{const e=this._getSelectedLinkElement();if(e){this._showUI()}});this.editor.keystrokes.set("Tab",(e,t)=>{if(this._areActionsVisible&&!this.actionsView.focusTracker.isFocused){this.actionsView.focus();t()}},{priority:"high"});this.editor.keystrokes.set("Esc",(e,t)=>{if(this._isUIVisible){this._hideUI();t()}});gw({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:[this._balloon.view.element],callback:()=>this._hideUI()})}_addActionsView(){if(this._areActionsInPanel){return}this._balloon.add({view:this.actionsView,position:this._getBalloonPositionData()})}_addFormView(){if(this._isFormInPanel){return}const e=this.editor;const t=e.commands.get("link");this._balloon.add({view:this.formView,position:this._getBalloonPositionData()});if(this._balloon.visibleView===this.formView){this.formView.urlInputView.fieldView.select()}this.formView.urlInputView.fieldView.element.value=t.value||""}_closeFormView(){const e=this.editor.commands.get("link");e.restoreManualDecoratorStates();if(e.value!==undefined){this._removeFormView()}else{this._hideUI()}}_removeFormView(){if(this._isFormInPanel){this.formView.saveButtonView.focus();this._balloon.remove(this.formView);this.editor.editing.view.focus()}}_showUI(e=false){if(!this._getSelectedLinkElement()){this._addActionsView();if(e){this._balloon.showStack("main")}this._addFormView()}else{if(this._areActionsVisible){this._addFormView()}else{this._addActionsView()}if(e){this._balloon.showStack("main")}}this._startUpdatingUI()}_hideUI(){if(!this._isUIInPanel){return}const e=this.editor;this.stopListening(e.ui,"update");this.stopListening(this._balloon,"change:visibleView");e.editing.view.focus();this._removeFormView();this._balloon.remove(this.actionsView)}_startUpdatingUI(){const e=this.editor;const t=e.editing.view.document;let n=this._getSelectedLinkElement();let i=r();const o=()=>{const e=this._getSelectedLinkElement();const t=r();if(n&&!e||!n&&t!==i){this._hideUI()}else if(this._isUIVisible){this._balloon.updatePosition(this._getBalloonPositionData())}n=e;i=t};function r(){return t.selection.focus.getAncestors().reverse().find(e=>e.is("element"))}this.listenTo(e.ui,"update",o);this.listenTo(this._balloon,"change:visibleView",o)}get _isFormInPanel(){return this._balloon.hasView(this.formView)}get _areActionsInPanel(){return this._balloon.hasView(this.actionsView)}get _areActionsVisible(){return this._balloon.visibleView===this.actionsView}get _isUIInPanel(){return this._isFormInPanel||this._areActionsInPanel}get _isUIVisible(){const e=this._balloon.visibleView;return e==this.formView||this._areActionsVisible}_getBalloonPositionData(){const e=this.editor.editing.view;const t=e.document;const n=this._getSelectedLinkElement();const i=n?e.domConverter.mapViewToDom(n):e.domConverter.viewRangeToDom(t.selection.getFirstRange());return{target:i}}_getSelectedLinkElement(){const e=this.editor.editing.view;const t=e.document.selection;if(t.isCollapsed){return JS(t.getFirstPosition())}else{const n=t.getFirstRange().getTrimmed();const i=JS(n.start);const o=JS(n.end);if(!i||i!=o){return null}if(e.createRangeIn(i).getTrimmed().isEqual(n)){return i}else{return null}}}}function JS(e){return e.getAncestors().find(e=>_S(e))}class ZS extends Vw{static get requires(){return[jS,QS]}static get pluginName(){return"Link"}}class XS extends Lw{constructor(e,t){super(e);this.type=t}refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(){const e=this.editor.model;const t=e.document;const n=Array.from(t.selection.getSelectedBlocks()).filter(t=>tP(t,e.schema));const i=this.value===true;e.change(e=>{if(i){let t=n[n.length-1].nextSibling;let i=Number.POSITIVE_INFINITY;let o=[];while(t&&t.name=="listItem"&&t.getAttribute("listIndent")!==0){const e=t.getAttribute("listIndent");if(e=n){if(r>o.getAttribute("listIndent")){r=o.getAttribute("listIndent")}if(o.getAttribute("listIndent")==r){e[t?"unshift":"push"](o)}o=o[t?"previousSibling":"nextSibling"]}}}function tP(e,t){return t.checkChild(e.parent,"listItem")&&!t.isObject(e)}class nP extends Lw{constructor(e,t){super(e);this._indentBy=t=="forward"?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor.model;const t=e.document;let n=Array.from(t.selection.getSelectedBlocks());e.change(e=>{const t=n[n.length-1];let i=t.nextSibling;while(i&&i.name=="listItem"&&i.getAttribute("listIndent")>t.getAttribute("listIndent")){n.push(i);i=i.nextSibling}if(this._indentBy<0){n=n.reverse()}for(const t of n){const n=t.getAttribute("listIndent")+this._indentBy;if(n<0){e.rename(t,"paragraph")}else{e.setAttribute("listIndent",n,t)}}})}_checkEnabled(){const e=Bw(this.editor.model.document.selection.getSelectedBlocks());if(!e||!e.is("listItem")){return false}if(this._indentBy>0){const t=e.getAttribute("listIndent");const n=e.getAttribute("listType");let i=e.previousSibling;while(i&&i.is("listItem")&&i.getAttribute("listIndent")>=t){if(i.getAttribute("listIndent")==t){return i.getAttribute("listType")==n}i=i.previousSibling}return false}return true}}function iP(e){const t=e.createContainerElement("li");t.getFillerOffset=dP;return t}function oP(e,t){const n=t.mapper;const i=t.writer;const o=e.getAttribute("listType")=="numbered"?"ol":"ul";const r=iP(i);const s=i.createContainerElement(o,null);i.insert(i.createPositionAt(s,0),r);n.bindElements(e,r);return r}function rP(e,t,n,i){const o=t.parent;const r=n.mapper;const s=n.writer;let a=r.toViewPosition(i.createPositionBefore(e));const c=cP(e.previousSibling,{sameIndent:true,smallerIndent:true,listIndent:e.getAttribute("listIndent")});const l=e.previousSibling;if(c&&c.getAttribute("listIndent")==e.getAttribute("listIndent")){const e=r.toViewElement(c);a=s.breakContainer(s.createPositionAfter(e))}else{if(l&&l.name=="listItem"){a=r.toViewPosition(i.createPositionAt(l,"end"))}else{a=r.toViewPosition(i.createPositionBefore(e))}}a=aP(a);s.insert(a,o);if(l&&l.name=="listItem"){const e=r.toViewElement(l);const n=s.createRange(s.createPositionAt(e,0),a);const i=n.getWalker({ignoreElementEnd:true});for(const e of i){if(e.item.is("li")){const n=s.breakContainer(s.createPositionBefore(e.item));const o=e.item.parent;const r=s.createPositionAt(t,"end");sP(s,r.nodeBefore,r.nodeAfter);s.move(s.createRangeOn(o),r);i.position=n}}}else{const n=o.nextSibling;if(n&&(n.is("ul")||n.is("ol"))){let i=null;for(const t of n.getChildren()){const n=r.toModelElement(t);if(n&&n.getAttribute("listIndent")>e.getAttribute("listIndent")){i=t}else{break}}if(i){s.breakContainer(s.createPositionAfter(i));s.move(s.createRangeOn(i.parent),s.createPositionAt(t,"end"))}}}sP(s,o,o.nextSibling);sP(s,o.previousSibling,o)}function sP(e,t,n){if(!t||!n||t.name!="ul"&&t.name!="ol"){return null}if(t.name!=n.name||t.getAttribute("class")!==n.getAttribute("class")){return null}return e.mergeContainers(e.createPositionAfter(t))}function aP(e){return e.getLastMatchingPosition(e=>e.item.is("uiElement"))}function cP(e,t){const n=!!t.sameIndent;const i=!!t.smallerIndent;const o=t.listIndent;let r=e;while(r&&r.name=="listItem"){const e=r.getAttribute("listIndent");if(n&&o==e||i&&o>e){return r}r=r.previousSibling}return null}function lP(e,t,n,i){e.ui.componentFactory.add(t,o=>{const r=e.commands.get(t);const s=new rw(o);s.set({label:n,icon:i,tooltip:true,isToggleable:true});s.bind("isOn","isEnabled").to(r,"value","isEnabled");s.on("execute",()=>{e.execute(t);e.editing.view.focus()});return s})}function dP(){const e=!this.isEmpty&&(this.getChild(0).name=="ul"||this.getChild(0).name=="ol");if(this.isEmpty||e){return 0}return Wc.call(this)}function uP(e){return(t,n,i)=>{const o=i.consumable;if(!o.test(n.item,"insert")||!o.test(n.item,"attribute:listType")||!o.test(n.item,"attribute:listIndent")){return}o.consume(n.item,"insert");o.consume(n.item,"attribute:listType");o.consume(n.item,"attribute:listIndent");const r=n.item;const s=oP(r,i);rP(r,s,i,e)}}function hP(e){return(t,n,i)=>{const o=i.mapper.toViewPosition(n.position).getLastMatchingPosition(e=>!e.item.is("li"));const r=o.nodeAfter;const s=i.writer;s.breakContainer(s.createPositionBefore(r));s.breakContainer(s.createPositionAfter(r));const a=r.parent;const c=a.previousSibling;const l=s.createRangeOn(a);const d=s.remove(l);if(c&&c.nextSibling){sP(s,c,c.nextSibling)}const u=i.mapper.toModelElement(r);SP(u.getAttribute("listIndent")+1,n.position,l.start,r,i,e);for(const e of s.createRangeIn(d).getItems()){i.mapper.unbindViewElement(e)}t.stop()}}function fP(e,t,n){if(!n.consumable.consume(t.item,"attribute:listType")){return}const i=n.mapper.toViewElement(t.item);const o=n.writer;o.breakContainer(o.createPositionBefore(i));o.breakContainer(o.createPositionAfter(i));const r=i.parent;const s=t.attributeNewValue=="numbered"?"ol":"ul";o.rename(s,r)}function gP(e,t,n){const i=n.mapper.toViewElement(t.item);const o=i.parent;const r=n.writer;sP(r,o,o.nextSibling);sP(r,o.previousSibling,o);for(const e of t.item.getChildren()){n.consumable.consume(e,"insert")}}function mP(e){return(t,n,i)=>{if(!i.consumable.consume(n.item,"attribute:listIndent")){return}const o=i.mapper.toViewElement(n.item);const r=i.writer;r.breakContainer(r.createPositionBefore(o));r.breakContainer(r.createPositionAfter(o));const s=o.parent;const a=s.previousSibling;const c=r.createRangeOn(s);r.remove(c);if(a&&a.nextSibling){sP(r,a,a.nextSibling)}SP(n.attributeOldValue+1,n.range.start,c.start,o,i,e);rP(n.item,o,i,e);for(const e of n.item.getChildren()){i.consumable.consume(e,"insert")}}}function pP(e,t,n){if(t.item.name!="listItem"){let e=n.mapper.toViewPosition(t.range.start);const i=n.writer;const o=[];while(e.parent.name=="ul"||e.parent.name=="ol"){e=i.breakContainer(e);if(e.parent.name!="li"){break}const t=e;const n=i.createPositionAt(e.parent,"end");if(!t.isEqual(n)){const e=i.remove(i.createRange(t,n));o.push(e)}e=i.createPositionAfter(e.parent)}if(o.length>0){for(let t=0;t0){const t=sP(i,n,n.nextSibling);if(t&&t.parent==n){e.offset--}}}sP(i,e.nodeBefore,e.nodeAfter)}}}function bP(e,t,n){const i=n.mapper.toViewPosition(t.position);const o=i.nodeBefore;const r=i.nodeAfter;sP(n.writer,o,r)}function wP(e,t,n){if(n.consumable.consume(t.viewItem,{name:true})){const e=n.writer;const i=e.createElement("listItem");const o=EP(t.viewItem);e.setAttribute("listIndent",o,i);const r=t.viewItem.parent&&t.viewItem.parent.name=="ol"?"numbered":"bulleted";e.setAttribute("listType",r,i);const s=n.splitToAllowedParent(i,t.modelCursor);if(!s){return}e.insert(i,s.position);const a=AP(i,t.viewItem.getChildren(),n);t.modelRange=e.createRange(t.modelCursor,a);if(s.cursorParent){t.modelCursor=e.createPositionAt(s.cursorParent,0)}else{t.modelCursor=t.modelRange.end}}}function kP(e,t,n){if(n.consumable.test(t.viewItem,{name:true})){const e=Array.from(t.viewItem.getChildren());for(const t of e){const e=!(t.is("li")||PP(t));if(e){t._remove()}}}}function _P(e,t,n){if(n.consumable.test(t.viewItem,{name:true})){if(t.viewItem.childCount===0){return}const e=[...t.viewItem.getChildren()];let n=false;let i=true;for(const t of e){if(n&&!PP(t)){t._remove()}if(t.is("text")){if(i){t._data=t.data.replace(/^\s+/,"")}if(!t.nextSibling||PP(t.nextSibling)){t._data=t.data.replace(/\s+$/,"")}}else if(PP(t)){n=true}i=false}}}function vP(e){return(t,n)=>{if(n.isPhantom){return}const i=n.modelPosition.nodeBefore;if(i&&i.is("listItem")){const t=n.mapper.toViewElement(i);const o=t.getAncestors().find(PP);const r=e.createPositionAt(t,0).getWalker();for(const e of r){if(e.type=="elementStart"&&e.item.is("li")){n.viewPosition=e.previousPosition;break}else if(e.type=="elementEnd"&&e.item==o){n.viewPosition=e.nextPosition;break}}}}}function yP(e){return(t,n)=>{const i=n.viewPosition;const o=i.parent;const r=n.mapper;if(o.name=="ul"||o.name=="ol"){if(!i.isAtEnd){const t=r.toModelElement(i.nodeAfter);n.modelPosition=e.createPositionBefore(t)}else{const t=r.toModelElement(i.nodeBefore);const o=r.getModelLength(i.nodeBefore);n.modelPosition=e.createPositionBefore(t).getShiftedBy(o)}t.stop()}else if(o.name=="li"&&i.nodeBefore&&(i.nodeBefore.name=="ul"||i.nodeBefore.name=="ol")){const s=r.toModelElement(o);let a=1;let c=i.nodeBefore;while(c&&PP(c)){a+=r.getModelLength(c);c=c.previousSibling}n.modelPosition=e.createPositionBefore(s).getShiftedBy(a);t.stop()}}}function xP(e,t){const n=e.document.differ.getChanges();const i=new Map;let o=false;for(const i of n){if(i.type=="insert"&&i.name=="listItem"){r(i.position)}else if(i.type=="insert"&&i.name!="listItem"){if(i.name!="$text"){const n=i.position.nodeAfter;if(n.hasAttribute("listIndent")){t.removeAttribute("listIndent",n);o=true}if(n.hasAttribute("listType")){t.removeAttribute("listType",n);o=true}for(const t of Array.from(e.createRangeIn(n)).filter(e=>e.item.is("listItem"))){r(t.previousPosition)}}const n=i.position.getShiftedBy(i.length);r(n)}else if(i.type=="remove"&&i.name=="listItem"){r(i.position)}else if(i.type=="attribute"&&i.attributeKey=="listIndent"){r(i.range.start)}else if(i.type=="attribute"&&i.attributeKey=="listType"){r(i.range.start)}}for(const e of i.values()){s(e);a(e)}return o;function r(e){const t=e.nodeBefore;if(!t||!t.is("listItem")){const t=e.nodeAfter;if(t&&t.is("listItem")){i.set(t,t)}}else{let e=t;if(i.has(e)){return}for(let t=e.previousSibling;t&&t.is("listItem");t=e.previousSibling){e=t;if(i.has(e)){return}}i.set(t,e)}}function s(e){let n=0;let i=null;while(e&&e.is("listItem")){const r=e.getAttribute("listIndent");if(r>n){let s;if(i===null){i=r-n;s=n}else{if(i>r){i=r}s=r-i}t.setAttribute("listIndent",s,e);o=true}else{i=null;n=e.getAttribute("listIndent")+1}e=e.nextSibling}}function a(e){let n=[];let i=null;while(e&&e.is("listItem")){const r=e.getAttribute("listIndent");if(i&&i.getAttribute("listIndent")>r){n=n.slice(0,r+1)}if(r!=0){if(n[r]){const i=n[r];if(e.getAttribute("listType")!=i){t.setAttribute("listType",i,e);o=true}}else{n[r]=e.getAttribute("listType")}}i=e;e=e.nextSibling}}}function CP(e,[t,n]){let i=t.is("documentFragment")?t.getChild(0):t;let o;if(!n){o=this.document.selection}else{o=this.createSelection(n)}if(i&&i.is("listItem")){const e=o.getFirstPosition();let t=null;if(e.parent.is("listItem")){t=e.parent}else if(e.nodeBefore&&e.nodeBefore.is("listItem")){t=e.nodeBefore}if(t){const e=t.getAttribute("listIndent");if(e>0){while(i&&i.is("listItem")){i._setAttribute("listIndent",i.getAttribute("listIndent")+e);i=i.nextSibling}}}}}function AP(e,t,n){const{writer:i,schema:o}=n;let r=i.createPositionAfter(e);for(const s of t){if(s.name=="ul"||s.name=="ol"){r=n.convertItem(s,r).modelCursor}else{const t=n.convertItem(s,i.createPositionAt(e,"end"));const a=t.modelRange.start.nodeAfter;const c=a&&a.is("element")&&!o.checkChild(e,a.name);if(c){if(t.modelCursor.parent.is("listItem")){e=t.modelCursor.parent}else{e=TP(t.modelCursor)}r=i.createPositionAfter(e)}}}return r}function TP(e){const t=new Wh({startPosition:e});let n;do{n=t.next()}while(!n.value.item.is("listItem"));return n.value.item}function SP(e,t,n,i,o,r){const s=cP(t.nodeBefore,{sameIndent:true,smallerIndent:true,listIndent:e,foo:"b"});const a=o.mapper;const c=o.writer;const l=s?s.getAttribute("listIndent"):null;let d;if(!s){d=n}else if(l==e){const e=a.toViewElement(s).parent;d=c.createPositionAfter(e)}else{const e=r.createPositionAt(s,"end");d=a.toViewPosition(e)}d=aP(d);for(const e of[...i.getChildren()]){if(PP(e)){d=c.move(c.createRangeOn(e),d).end;sP(c,e,e.nextSibling);sP(c,e.previousSibling,e)}}}function PP(e){return e.is("ol")||e.is("ul")}function EP(e){let t=0;let n=e.parent;while(n){if(n.is("li")){t++}else{const e=n.previousSibling;if(e&&e.is("li")){t++}}n=n.parent}return t}class MP extends Vw{static get pluginName(){return"ListEditing"}static get requires(){return[Ay]}init(){const e=this.editor;e.model.schema.register("listItem",{inheritAllFrom:"$block",allowAttributes:["listType","listIndent"]});const t=e.data;const n=e.editing;e.model.document.registerPostFixer(t=>xP(e.model,t));n.mapper.registerViewToModelLength("li",IP);t.mapper.registerViewToModelLength("li",IP);n.mapper.on("modelToViewPosition",vP(n.view));n.mapper.on("viewToModelPosition",yP(e.model));t.mapper.on("modelToViewPosition",vP(n.view));e.conversion.for("editingDowncast").add(t=>{t.on("insert",pP,{priority:"high"});t.on("insert:listItem",uP(e.model));t.on("attribute:listType:listItem",fP,{priority:"high"});t.on("attribute:listType:listItem",gP,{priority:"low"});t.on("attribute:listIndent:listItem",mP(e.model));t.on("remove:listItem",hP(e.model));t.on("remove",bP,{priority:"low"})});e.conversion.for("dataDowncast").add(t=>{t.on("insert",pP,{priority:"high"});t.on("insert:listItem",uP(e.model))});e.conversion.for("upcast").add(e=>{e.on("element:ul",kP,{priority:"high"});e.on("element:ol",kP,{priority:"high"});e.on("element:li",_P,{priority:"high"});e.on("element:li",wP)});e.model.on("insertContent",CP,{priority:"high"});e.commands.add("numberedList",new XS(e,"numbered"));e.commands.add("bulletedList",new XS(e,"bulleted"));e.commands.add("indentList",new nP(e,"forward"));e.commands.add("outdentList",new nP(e,"backward"));const i=n.view.document;this.listenTo(i,"enter",(e,t)=>{const n=this.editor.model.document;const i=n.selection.getLastPosition().parent;if(n.selection.isCollapsed&&i.name=="listItem"&&i.isEmpty){this.editor.execute("outdentList");t.preventDefault();e.stop()}});this.listenTo(i,"delete",(e,t)=>{if(t.direction!=="backward"){return}const n=this.editor.model.document.selection;if(!n.isCollapsed){return}const i=n.getFirstPosition();if(!i.isAtStart){return}const o=i.parent;if(o.name!=="listItem"){return}const r=o.previousSibling&&o.previousSibling.name==="listItem";if(r){return}this.editor.execute("outdentList");t.preventDefault();e.stop()},{priority:"high"});const o=e=>(t,n)=>{const i=this.editor.commands.get(e);if(i.isEnabled){this.editor.execute(e);n()}};e.keystrokes.set("Tab",o("indentList"));e.keystrokes.set("Shift+Tab",o("outdentList"))}afterInit(){const e=this.editor.commands;const t=e.get("indent");const n=e.get("outdent");if(t){t.registerChildCommand(e.get("indentList"))}if(n){n.registerChildCommand(e.get("outdentList"))}}}function IP(e){let t=1;for(const n of e.getChildren()){if(n.name=="ul"||n.name=="ol"){for(const e of n.getChildren()){t+=IP(e)}}}return t}var NP='';var OP='';class RP extends Vw{init(){const e=this.editor.t;lP(this.editor,"numberedList",e("Numbered List"),NP);lP(this.editor,"bulletedList",e("Bulleted List"),OP)}}class VP extends Vw{static get requires(){return[MP,RP]}static get pluginName(){return"List"}}function DP(e,t){return e=>{e.on("attribute:url:media",n)};function n(n,i,o){if(!o.consumable.consume(i.item,n.name)){return}const r=i.attributeNewValue;const s=o.writer;const a=o.mapper.toViewElement(i.item);const c=[...a.getChildren()].find(e=>e.getCustomProperty("media-content"));s.remove(c);const l=e.getMediaViewElement(s,r,t);s.insert(s.createPositionAt(a,0),l)}}function LP(e,t,n){t.setCustomProperty("media",true,e);return cx(e,t,{label:n})}function zP(e){const t=e.getSelectedElement();if(t&&BP(t)){return t}return null}function BP(e){return!!e.getCustomProperty("media")&&ax(e)}function jP(e,t,n,i){const o=e.createContainerElement("figure",{class:"media"});o.getFillerOffset=WP;e.insert(e.createPositionAt(o,0),t.getMediaViewElement(e,n,i));return o}function FP(e){const t=e.getSelectedElement();if(t&&t.is("media")){return t}return null}function HP(e,t,n){e.change(i=>{const o=i.createElement("media",{url:t});e.insertContent(o,n);i.setSelection(o,"on")})}function WP(){return null}class UP extends Lw{refresh(){const e=this.editor.model;const t=e.document.selection;const n=e.schema;const i=t.getFirstPosition();const o=FP(t);let r=i.parent;if(r!=r.root){r=r.parent}this.value=o?o.getAttribute("url"):null;this.isEnabled=n.checkChild(r,"media")}execute(e){const t=this.editor.model;const n=t.document.selection;const i=FP(n);if(i){t.change(t=>{t.setAttribute("url",e,i)})}else{const i=fx(n,t);HP(t,e,i)}}}var qP='';const $P="0 0 64 42";class GP{constructor(e,t){const n=t.providers;const i=t.extraProviders||[];const o=new Set(t.removeProviders);const r=n.concat(i).filter(e=>{const t=e.name;if(!t){console.warn(Object(ss["a"])("media-embed-no-provider-name: The configured media provider has no name and cannot be used."),{provider:e});return false}return!o.has(t)});this.locale=e;this.providerDefinitions=r}hasMedia(e){return!!this._getMedia(e)}getMediaViewElement(e,t,n){return this._getMedia(t).getViewElement(e,n)}_getMedia(e){if(!e){return new YP(this.locale)}e=e.trim();for(const t of this.providerDefinitions){const n=t.html;let i=t.url;if(!Array.isArray(i)){i=[i]}for(const t of i){const i=this._getUrlMatches(e,t);if(i){return new YP(this.locale,e,i,n)}}}return null}_getUrlMatches(e,t){let n=e.match(t);if(n){return n}let i=e.replace(/^https?:\/\//,"");n=i.match(t);if(n){return n}i=i.replace(/^www\./,"");n=i.match(t);if(n){return n}return null}}class YP{constructor(e,t,n,i){this.url=this._getValidUrl(t);this._t=e.t;this._match=n;this._previewRenderer=i}getViewElement(e,t){const n={};let i;if(t.renderForEditingView||t.renderMediaPreview&&this.url&&this._previewRenderer){if(this.url){n["data-oembed-url"]=this.url}if(t.renderForEditingView){n.class="ck-media__wrapper"}const o=this._getPreviewHtml(t);i=e.createUIElement("div",n,(function(e){const t=this.toDomElement(e);t.innerHTML=o;return t}))}else{if(this.url){n.url=this.url}i=e.createEmptyElement("oembed",n)}e.setCustomProperty("media-content",true,i);return i}_getPreviewHtml(e){if(this._previewRenderer){return this._previewRenderer(this._match)}else{if(this.url&&e.renderForEditingView){return this._getPlaceholderHtml()}return""}}_getPlaceholderHtml(){const e=new iw;const t=new tw;e.text=this._t("Open media in new tab");t.content=qP;t.viewBox=$P;const n=new $p({tag:"div",attributes:{class:"ck ck-reset_all ck-media__placeholder"},children:[{tag:"div",attributes:{class:"ck-media__placeholder__icon"},children:[t]},{tag:"a",attributes:{class:"ck-media__placeholder__url",target:"_blank",rel:"noopener noreferrer",href:this.url},children:[{tag:"span",attributes:{class:"ck-media__placeholder__url__text"},children:[this.url]},e]}]}).render();return n.outerHTML}_getValidUrl(e){if(!e){return null}if(e.match(/^https?/)){return e}return"https://"+e}}var KP=n(100);class QP extends Vw{static get pluginName(){return"MediaEmbedEditing"}constructor(e){super(e);e.config.define("mediaEmbed",{providers:[{name:"dailymotion",url:/^dailymotion\.com\/video\/(\w+)/,html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"spotify",url:[/^open\.spotify\.com\/(artist\/\w+)/,/^open\.spotify\.com\/(album\/\w+)/,/^open\.spotify\.com\/(track\/\w+)/],html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"youtube",url:[/^(?:m\.)?youtube\.com\/watch\?v=([\w-]+)/,/^(?:m\.)?youtube\.com\/v\/([\w-]+)/,/^youtube\.com\/embed\/([\w-]+)/,/^youtu\.be\/([\w-]+)/],html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"vimeo",url:[/^vimeo\.com\/(\d+)/,/^vimeo\.com\/[^/]+\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/album\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/channels\/[^/]+\/(\d+)/,/^vimeo\.com\/groups\/[^/]+\/videos\/(\d+)/,/^vimeo\.com\/ondemand\/[^/]+\/(\d+)/,/^player\.vimeo\.com\/video\/(\d+)/],html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"instagram",url:/^instagram\.com\/p\/(\w+)/},{name:"twitter",url:/^twitter\.com/},{name:"googleMaps",url:/^google\.com\/maps/},{name:"flickr",url:/^flickr\.com/},{name:"facebook",url:/^facebook\.com/}]});this.registry=new GP(e.locale,e.config.get("mediaEmbed"))}init(){const e=this.editor;const t=e.model.schema;const n=e.t;const i=e.conversion;const o=e.config.get("mediaEmbed.previewsInData");const r=this.registry;e.commands.add("mediaEmbed",new UP(e));t.register("media",{isObject:true,isBlock:true,allowWhere:"$block",allowAttributes:["url"]});i.for("dataDowncast").elementToElement({model:"media",view:(e,t)=>{const n=e.getAttribute("url");return jP(t,r,n,{renderMediaPreview:n&&o})}});i.for("dataDowncast").add(DP(r,{renderMediaPreview:o}));i.for("editingDowncast").elementToElement({model:"media",view:(e,t)=>{const i=e.getAttribute("url");const o=jP(t,r,i,{renderForEditingView:true});return LP(o,t,n("media widget"))}});i.for("editingDowncast").add(DP(r,{renderForEditingView:true}));i.for("upcast").elementToElement({view:{name:"oembed",attributes:{url:true}},model:(e,t)=>{const n=e.getAttribute("url");if(r.hasMedia(n)){return t.createElement("media",{url:n})}}}).elementToElement({view:{name:"div",attributes:{"data-oembed-url":true}},model:(e,t)=>{const n=e.getAttribute("data-oembed-url");if(r.hasMedia(n)){return t.createElement("media",{url:n})}}})}}const JP=/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w.-]+)+[\w\-._~:/?#[\]@!$&'()*+,;=]+$/;class ZP extends Vw{static get requires(){return[__,bv]}static get pluginName(){return"AutoMediaEmbed"}constructor(e){super(e);this._timeoutId=null;this._positionToInsert=null}init(){const e=this.editor;const t=e.model.document;this.listenTo(e.plugins.get(__),"inputTransformation",()=>{const e=t.selection.getFirstRange();const n=Vm.fromPosition(e.start);n.stickiness="toPrevious";const i=Vm.fromPosition(e.end);i.stickiness="toNext";t.once("change:data",()=>{this._embedMediaBetweenPositions(n,i);n.detach();i.detach()},{priority:"high"})});e.commands.get("undo").on("execute",()=>{if(this._timeoutId){Nd.window.clearTimeout(this._timeoutId);this._positionToInsert.detach();this._timeoutId=null;this._positionToInsert=null}},{priority:"high"})}_embedMediaBetweenPositions(e,t){const n=this.editor;const i=n.plugins.get(QP).registry;const o=new cf(e,t);const r=o.getWalker({ignoreElementEnd:true});let s="";for(const e of r){if(e.item.is("textProxy")){s+=e.item.data}}s=s.trim();if(!s.match(JP)){o.detach();return}if(!i.hasMedia(s)){o.detach();return}const a=n.commands.get("mediaEmbed");if(!a.isEnabled){o.detach();return}this._positionToInsert=Vm.fromPosition(e);this._timeoutId=Nd.window.setTimeout(()=>{n.model.change(e=>{this._timeoutId=null;e.remove(o);o.detach();let t;if(this._positionToInsert.root.rootName!=="$graveyard"){t=this._positionToInsert}HP(n.model,s,t);this._positionToInsert.detach();this._positionToInsert=null})},100)}}var XP=n(102);class eE extends kb{constructor(e,t){super(t);const n=t.t;this.focusTracker=new Sp;this.keystrokes=new gp;this.urlInputView=this._createUrlInput();this.saveButtonView=this._createButton(n("Save"),fC,"ck-button-save");this.saveButtonView.type="submit";this.cancelButtonView=this._createButton(n("Cancel"),gC,"ck-button-cancel","cancel");this._focusables=new Wp;this._focusCycler=new Db({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this._validators=e;this.setTemplate({tag:"form",attributes:{class:["ck","ck-media-form"],tabindex:"-1"},children:[this.urlInputView,this.saveButtonView,this.cancelButtonView]})}render(){super.render();hC({view:this});const e=[this.urlInputView,this.saveButtonView,this.cancelButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element);const t=e=>e.stopPropagation();this.keystrokes.set("arrowright",t);this.keystrokes.set("arrowleft",t);this.keystrokes.set("arrowup",t);this.keystrokes.set("arrowdown",t);this.listenTo(this.urlInputView.element,"selectstart",(e,t)=>{t.stopPropagation()},{priority:"high"})}focus(){this._focusCycler.focusFirst()}get url(){return this.urlInputView.fieldView.element.value.trim()}set url(e){this.urlInputView.fieldView.element.value=e.trim()}isValid(){this.resetFormStatus();for(const e of this._validators){const t=e(this);if(t){this.urlInputView.errorText=t;return false}}return true}resetFormStatus(){this.urlInputView.errorText=null;this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){const e=this.locale.t;const t=new aC(this.locale,dC);const n=t.fieldView;this._urlInputViewInfoDefault=e("Paste the media URL in the input.");this._urlInputViewInfoTip=e("Tip: Paste the URL into the content to embed faster.");t.label=e("Media URL");t.infoText=this._urlInputViewInfoDefault;n.placeholder="https://example.com";n.on("input",()=>{t.infoText=n.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault});return t}_createButton(e,t,n,i){const o=new rw(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:n}});if(i){o.delegate("execute").to(this,i)}return o}}var tE='\n';class nE extends Vw{static get requires(){return[QP]}static get pluginName(){return"MediaEmbedUI"}init(){const e=this.editor;const t=e.commands.get("mediaEmbed");const n=e.plugins.get(QP).registry;e.ui.componentFactory.add("mediaEmbed",i=>{const o=bw(i);const r=new eE(iE(e.t,n),e.locale);this._setUpDropdown(o,r,t,e);this._setUpForm(o,r,t);return o})}_setUpDropdown(e,t,n){const i=this.editor;const o=i.t;const r=e.buttonView;e.bind("isEnabled").to(n);e.panelView.children.add(t);r.set({label:o("Insert media"),icon:tE,tooltip:true});r.on("open",()=>{t.url=n.value||"";t.urlInputView.fieldView.select();t.focus()},{priority:"low"});e.on("submit",()=>{if(t.isValid()){i.execute("mediaEmbed",t.url);s()}});e.on("change:isOpen",()=>t.resetFormStatus());e.on("cancel",()=>s());function s(){i.editing.view.focus();e.isOpen=false}}_setUpForm(e,t,n){t.delegate("submit","cancel").to(e);t.urlInputView.bind("value").to(n,"value");t.urlInputView.bind("isReadOnly").to(n,"isEnabled",e=>!e);t.saveButtonView.bind("isEnabled").to(n)}}function iE(e,t){return[t=>{if(!t.url.length){return e("The URL must not be empty.")}},n=>{if(!t.hasMedia(n.url)){return e("This media URL is not supported.")}}]}var oE=n(104);class rE extends Vw{static get requires(){return[QP,nE,ZP,Xx]}static get pluginName(){return"MediaEmbed"}}function sE(e,t){for(const n of e.getChildren()){if(n.is("b")&&n.getStyle("font-weight")==="normal"){const i=e.getChildIndex(n);t.remove(n);t.insertChild(i,n.getChildren(),e)}}}function aE(e,t){if(!e.childCount){return}const n=new aT(e.document);const i=lE(e,n);if(!i.length){return}let o=null;let r=1;i.forEach((e,s)=>{const a=mE(i[s-1],e);const c=a?null:i[s-1];const l=bE(c,e);if(a){o=null;r=1}if(!o||l!==0){const i=dE(e,t);if(!o){o=uE(i,e.element,n)}else if(e.indent>r){const e=o.getChild(o.childCount-1);const t=e.getChild(e.childCount-1);o=uE(i,t,n);r+=1}else if(e.indent[\s]*?)[\r\n]+(\s*<\/span>)/g,"$1$2").replace(/<\/span>/g,"").replace(/ <\//g," <\/o:p>/g," ").replace(/( |\u00A0)<\/o:p>/g,"").replace(/>(\s*[\r\n]\s*)<")}function yE(e){e.querySelectorAll("span[style*=spacerun]").forEach(e=>{const t=e.innerText.length||0;e.innerHTML=Array(t+1).join("  ").substr(0,t)})}function xE(e){return e.replace(/(\s+)<\/span>/g,(e,t)=>t.length===1?" ":Array(t.length+1).join("  ").substr(0,t.length))}function CE(e,t){const n=new DOMParser;e=e.replace(/ + + + + CKEditor 5 ClassicEditor build + + + + + + +
    +
    +

    CKEditor 5 logoCKEditor 5

    + +
    +
    +
    +
    +
    +

    CKEditor 5 online builder demo - ClassicEditor build

    +
    +
    +
    +
    +
    +

    Bilingual Personality Disorder

    +
    +
    One language, one person.
    +
    +

    + This may be the first time you hear about this made-up disorder but + it actually isn’t so far from the truth. Even the studies that were conducted almost half a century show that + the language you speak has more effects on you than you realise. +

    +

    + One of the very first experiments conducted on this topic dates back to 1964. + In the experiment + designed by linguist Ervin-Tripp who is an authority expert in psycholinguistic and sociolinguistic studies, + adults who are bilingual in English in French were showed series of pictures and were asked to create 3-minute stories. + In the end participants emphasized drastically different dynamics for stories in English and French. +

    +

    + Another ground-breaking experiment which included bilingual Japanese women married to American men in San Francisco were + asked to complete sentences. The goal of the experiment was to investigate whether or not human feelings and thoughts + are expressed differently in different language mindsets. + is a sample from the the experiment: +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    EnglishJapanese
    Real friends shouldBe very frankHelp each other
    I will probably becomeA teacherA housewife
    When there is a conflict with familyI do what I wantIt's a time of great unhappiness
    +

    + More recent studies show, the language a person speaks affects + their cognition, behaviour, emotions and hence their personality. + This shouldn’t come as a surprise + since we already know that different regions + of the brain become more active depending on the person’s activity at hand. Since structure, information and especially + the culture of languages varies substantially and the language a person speaks is an essential element of daily life. +

    +
    +
    + +
    +
    +

    CKEditor 5 + – Rich text editor of tomorrow, available today +

    +

    Copyright © 2003-2020, + CKSource + – Frederico Knabben. All rights reserved. +

    +
    + + + \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/styles.css b/public/js/ckedit5/20.0.0/styles.css new file mode 100644 index 0000000..e73a875 --- /dev/null +++ b/public/js/ckedit5/20.0.0/styles.css @@ -0,0 +1,456 @@ +/** + * @license Copyright (c) 2014-2020, CKSource - Frederico Knabben. All rights reserved. + * This file is licensed under the terms of the MIT License (see LICENSE.md). + */ + + :root { + --ck-sample-base-spacing: 2em; + --ck-sample-color-white: #fff; + --ck-sample-color-green: #279863; + --ck-sample-color-blue: #1a9aef; + --ck-sample-container-width: 1285px; + --ck-sample-sidebar-width: 350px; + --ck-sample-editor-min-height: 400px; +} + +/* --------- EDITOR STYLES ---------------------------------------------------------------------------------------- */ + +.editor__editable, +/* Classic build. */ +main .ck-editor[role='application'] .ck.ck-content, +/* Decoupled document build. */ +.ck.editor__editable[role='textbox'], +.ck.ck-editor__editable[role='textbox'], +/* Inline & Balloon build. */ +.ck.editor[role='textbox'] { + width: 100%; + background: #fff; + font-size: 1em; + line-height: 1.6em; + min-height: var(--ck-sample-editor-min-height); + padding: 1.5em 2em; +} + +.ck.ck-editor__editable { + background: #fff; + border: 1px solid hsl(0, 0%, 70%); + width: 100%; +} + +.ck.ck-editor { + /* To enable toolbar wrapping. */ + width: 100%; + overflow-x: hidden; +} + +/* Because of sidebar `position: relative`, Edge is overriding the outline of a focused editor. */ +.ck.ck-editor__editable { + position: relative; + z-index: 10; +} + +/* --------- DECOUPLED (DOCUMENT) BUILD. ---------------------------------------------*/ +body[data-editor='DecoupledDocumentEditor'] .document-editor__toolbar { + width: 100%; +} + +body[ data-editor='DecoupledDocumentEditor'] .collaboration-demo__editable, +body[ data-editor='DecoupledDocumentEditor'] .row-editor .editor { + width: 18.5cm; + height: 100%; + min-height: 26.25cm; + padding: 1.75cm 1.5cm; + margin: 2.5rem; + border: 1px hsl( 0, 0%, 82.7% ) solid; + background-color: var(--ck-sample-color-white); + box-shadow: 0 0 5px hsla( 0, 0%, 0%, .1 ); +} + +body[ data-editor='DecoupledDocumentEditor'] .row-editor { + display: flex; + position: relative; + justify-content: center; + overflow-y: auto; + background-color: #f2f2f2; + border: 1px solid hsl(0, 0%, 77%); +} + +body[data-editor='DecoupledDocumentEditor'] .sidebar { + background: transparent; + border: 0; + box-shadow: none; +} + +/* --------- COMMENTS & TRACK CHANGES FEATURE ---------------------------------------------------------------------- */ +.sidebar { + padding: 0 15px; + position: relative; + min-width: var(--ck-sample-sidebar-width); + max-width: var(--ck-sample-sidebar-width); + font-size: 20px; + border: 1px solid hsl(0, 0%, 77%); + background: hsl(0, 0%, 98%); + border-left: 0; + overflow: hidden; + min-height: 100%; + flex-grow: 1; +} + +/* Do not inherit styles related to the editable editor content. See line 25.*/ +.sidebar .ck-content[role='textbox'], +.ck.ck-annotation-wrapper .ck-content[role='textbox'] { + min-height: unset; + width: unset; + padding: 0; + background: transparent; +} + +.sidebar.narrow { + min-width: 60px; + flex-grow: 0; +} + +.sidebar.hidden { + display: none !important; +} + +#sidebar-display-toggle { + position: absolute; + z-index: 1; + width: 30px; + height: 30px; + text-align: center; + left: 15px; + top: 30px; + border: 0; + padding: 0; + color: hsl( 0, 0%, 50% ); + transition: 250ms ease color; + background-color: transparent; +} + +#sidebar-display-toggle:hover { + color: hsl( 0, 0%, 30% ); + cursor: pointer; +} + +#sidebar-display-toggle:focus, +#sidebar-display-toggle:active { + outline: none; + border: 1px solid #a9d29d; +} + +#sidebar-display-toggle svg { + fill: currentColor; +} + +/* --------- COLLABORATION FEATURES (USERS) ------------------------------------------------------------------------ */ +.row-presence { + width: 100%; + border: 1px solid hsl(0, 0%, 77%); + border-bottom: 0; + background: hsl(0, 0%, 98%); + padding: var(--ck-spacing-small); + + /* Make `border-bottom` as `box-shadow` to not overlap with the editor border. */ + box-shadow: 0 1px 0 0 hsl(0, 0%, 77%); + + /* Make `z-index` bigger than `.editor` to properly display tooltips. */ + z-index: 20; +} + +.ck.ck-presence-list { + flex: 1; + padding: 1.25rem .75rem; +} + +.presence .ck.ck-presence-list__counter { + order: 2; + margin-left: var(--ck-spacing-large) +} + +/* --------- REAL TIME COLLABORATION FEATURES (SHARE TOPBAR CONTAINER) --------------------------------------------- */ +.collaboration-demo__row { + display: flex; + position: relative; + justify-content: center; + overflow-y: auto; + background-color: #f2f2f2; + border: 1px solid hsl(0, 0%, 77%); +} + +body[ data-editor='InlineEditor'] .collaboration-demo__row { + border: 0; +} + +.collaboration-demo__container { + max-width: var(--ck-sample-container-width); + margin: 0 auto; + padding: 1.25rem; +} + +.presence, .collaboration-demo__row { + transition: .2s opacity; +} + +.collaboration-demo__topbar { + background: #fff; + border: 1px solid var(--ck-color-toolbar-border); + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 0; + border-radius: 4px 4px 0 0; +} + +.collaboration-demo__topbar .btn { + margin-right: 1em; + outline-offset: 2px; + outline-width: 2px; + background-color: var( --ck-sample-color-blue ); +} + +.collaboration-demo__topbar .btn:focus, +.collaboration-demo__topbar .btn:hover { + border-color: var( --ck-sample-color-blue ); +} + +.collaboration-demo__share { + display: flex; + align-items: center; + padding: 1.25rem .75rem +} + +.collaboration-demo__share-description p { + margin: 0; + font-weight: bold; + font-size: 0.9em; +} + +.collaboration-demo__share input { + height: auto; + font-size: 0.9em; + min-width: 220px; + margin: 0 10px; + border-radius: 4px; + border: 1px solid var(--ck-color-toolbar-border) +} + +.collaboration-demo__share button, +.collaboration-demo__share input { + height: 40px; + padding: 5px 10px; +} + +.collaboration-demo__share button { + position: relative; +} + +.collaboration-demo__share button:focus { + outline: none; +} + +.collaboration-demo__share button[data-tooltip]::before, +.collaboration-demo__share button[data-tooltip]::after { + position: absolute; + visibility: hidden; + opacity: 0; + pointer-events: none; + transition: all .15s cubic-bezier(.5,1,.25,1); + z-index: 1; +} + +.collaboration-demo__share button[data-tooltip]::before { + content: attr(data-tooltip); + padding: 5px 15px; + border-radius: 3px; + background: #111; + color: #fff; + text-align: center; + font-size: 11px; + top: 100%; + left: 50%; + margin-top: 5px; + transform: translateX(-50%); +} + +.collaboration-demo__share button[data-tooltip]::after { + content: ''; + border: 5px solid transparent; + width: 0; + font-size: 0; + line-height: 0; + top: 100%; + left: 50%; + transform: translateX(-50%); + border-bottom: 5px solid #111; + border-top: none; +} + +.collaboration-demo__share button[data-tooltip]:hover:before, +.collaboration-demo__share button[data-tooltip]:hover:after { + visibility: visible; + opacity: 1; +} + +.collaboration-demo--ready { + overflow: visible; + height: auto; +} + +.collaboration-demo--ready .presence, +.collaboration-demo--ready .collaboration-demo__row { + opacity: 1; +} + +/* --------- SAMPLE GENERIC STYLES (not related to CKEditor) ------------------------------------------------------- */ +body, html { + padding: 0; + margin: 0; + + font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; + line-height: 1.5; +} + +body { + height: 100%; + color: #2D3A4A; +} + +body * { + box-sizing: border-box; +} + +a { + color: #38A5EE; +} + +header .centered { + display: flex; + flex-flow: row nowrap; + justify-content: space-between; + align-items: center; + min-height: 8em; +} + +header h1 a { + font-size: 20px; + display: flex; + align-items: center; + color: #2D3A4A; + text-decoration: none; +} + +header h1 img { + display: block; + height: 64px; +} + +header nav ul { + margin: 0; + padding: 0; + list-style-type: none; +} + +header nav ul li { + display: inline-block; +} + +header nav ul li + li { + margin-left: 1em; +} + +header nav ul li a { + font-weight: bold; + text-decoration: none; + color: #2D3A4A; +} + +header nav ul li a:hover { + text-decoration: underline; +} + +main .message { + padding: 0 0 var(--ck-sample-base-spacing); + background: var(--ck-sample-color-green); + color: var(--ck-sample-color-white); +} + +main .message::after { + content: ""; + z-index: -1; + display: block; + height: 10em; + width: 100%; + background: var(--ck-sample-color-green); + position: absolute; + left: 0; +} + +main .message h2 { + position: relative; + padding-top: 1em; + font-size: 2em; +} + +.centered { + /* Hide overlapping comments. */ + overflow: hidden; + max-width: var(--ck-sample-container-width); + margin: 0 auto; + padding: 0 var(--ck-sample-base-spacing); +} + +.row { + display: flex; + position: relative; +} + +.btn { + cursor: pointer; + padding: 8px 16px; + font-size: 1rem; + user-select: none; + border-radius: 4px; + transition: color .2s ease-in-out,background-color .2s ease-in-out,border-color .2s ease-in-out,opacity .2s ease-in-out; + background-color: var(--ck-sample-color-button-blue); + border-color: var(--ck-sample-color-button-blue); + color: var(--ck-sample-color-white); + display: inline-block; +} + +.btn--tiny { + padding: 6px 12px; + font-size: .8rem; +} + +footer { + margin: calc(2*var(--ck-sample-base-spacing)) var(--ck-sample-base-spacing); + font-size: .8em; + text-align: center; + color: rgba(0,0,0,.4); +} + +/* --------- RWD --------------------------------------------------------------------------------------------------- */ +@media screen and ( max-width: 800px ) { + :root { + --ck-sample-base-spacing: 1em; + } + + header h1 { + width: 100%; + } + + header h1 img { + height: 40px; + } + + header nav ul { + text-align: right; + } + + main .message h2 { + font-size: 1.5em; + } +} diff --git a/public/js/ckedit5/20.0.0/translations/af.js b/public/js/ckedit5/20.0.0/translations/af.js new file mode 100644 index 0000000..f397775 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/af.js @@ -0,0 +1 @@ +(function(d){ const l = d['af'] = d['af'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"Align center":"Belyn in die middel","Align left":"Belyn links","Align right":"Belyn regs","Block quote":"Blok-aanhaling",Bold:"Vetgedruk",Cancel:"Kanselleer",Code:"Kode",Italic:"Skuinsgedruk",Justify:"Belyn beide kante","Remove color":"",Save:"Berg","Text alignment":"Teksbelyning","Text alignment toolbar":"",Underline:"Onderstreep"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/ar.js b/public/js/ckedit5/20.0.0/translations/ar.js new file mode 100644 index 0000000..3d0d165 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/ar.js @@ -0,0 +1 @@ +(function(d){ const l = d['ar'] = d['ar'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"محاذاة في المنتصف","Align left":"محاذاة لليسار","Align right":"محاذاة لليمين","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Big:"كبير",Black:"","Block quote":"اقتباس",Blue:"","Blue marker":"تحديد ازرق",Bold:"عريض",Border:"","Bulleted List":"قائمة نقطية",Cancel:"إلغاء","Cell properties":"","Center table":"","Centered image":"صورة بالوسط","Change image text alternative":"غير النص البديل للصورة","Choose heading":"اختر عنوان",Code:"شفرة برمجية",Color:"","Color picker":"",Column:"عمود",Dashed:"",Default:"افتراضي","Delete column":"حذف العمود","Delete row":"حذف الصف","Dim grey":"",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"تحرير الرابط","Editor toolbar":"","Enter image caption":"ادخل عنوان الصورة","Font Background Color":"","Font Color":"","Font Family":"نوع الخط","Font Size":"حجم الخط","Full size image":"صورة بحجم كامل",Green:"","Green marker":"تحديد اخضر","Green pen":"قلم اخضر",Grey:"",Groove:"","Header column":"عمود عنوان","Header row":"صف عنوان",Heading:"عنوان","Heading 1":"عنوان 1","Heading 2":"عنوان 2","Heading 3":"عنوان 3","Heading 4":"","Heading 5":"","Heading 6":"",Height:"",Highlight:"تحديد","Horizontal text alignment toolbar":"",Huge:"ضخم","Image toolbar":"","image widget":"عنصر الصورة","Insert column left":"","Insert column right":"","Insert image":"ادراج صورة","Insert row above":"ادراج صف قبل","Insert row below":"ادراج صف بعد","Insert table":"إدراج جدول",Inset:"",Italic:"مائل",Justify:"ضبط","Justify cell text":"","Left aligned image":"صورة بمحاذاة لليسار","Light blue":"","Light green":"","Light grey":"",Link:"رابط","Link URL":"رابط عنوان","Merge cell down":"دمج الخلايا للأسفل","Merge cell left":"دمج الخلايا لليسار","Merge cell right":"دمج الخلايا لليمين","Merge cell up":"دمج الخلايا للأعلى","Merge cells":"دمج الخلايا",Next:"",None:"","Numbered List":"قائمة رقمية","Open in a new tab":"","Open link in new tab":"فتح الرابط في تبويب جديد",Orange:"",Outset:"",Padding:"",Paragraph:"فقرة","Pink marker":"تحديد وردي",Previous:"",Purple:"",Red:"","Red pen":"تحديد احمر",Redo:"إعادة","Remove color":"","Remove highlight":"إزالة التحديد","Rich Text Editor":"معالج نصوص","Rich Text Editor, %0":"معالج نصوص، 0%",Ridge:"","Right aligned image":"صورة بمحاذاة لليمين",Row:"صف",Save:"حفظ","Select column":"","Select row":"","Show more items":"","Side image":"صورة جانبية",Small:"صغير",Solid:"","Split cell horizontally":"فصل الخلايا بشكل افقي","Split cell vertically":"فصل الخلايا بشكل عمودي",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"محاذاة النص","Text alignment toolbar":"","Text alternative":"النص البديل","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"لا يحتوي هذا الرابط على عنوان",Tiny:"ضئيل",Turquoise:"",Underline:"تحته خط",Undo:"تراجع",Unlink:"إلغاء الرابط","Upload failed":"فشل الرفع","Upload in progress":"جاري الرفع","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:"","Yellow marker":"تحديد اصفر"} );l.getPluralForm=function(n){return n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/ast.js b/public/js/ckedit5/20.0.0/translations/ast.js new file mode 100644 index 0000000..6c69324 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/ast.js @@ -0,0 +1 @@ +(function(d){ const l = d['ast'] = d['ast'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Bold:"Negrina","Bulleted List":"Llista con viñetes",Cancel:"Encaboxar","Centered image":"","Change image text alternative":"",Code:"","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"","Full size image":"Imaxen a tamañu completu",Green:"",Grey:"","Image toolbar":"","image widget":"complementu d'imaxen","Insert image":"",Italic:"Cursiva","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"Enllazar","Link URL":"URL del enllaz",Next:"","Numbered List":"Llista numberada","Open in a new tab":"","Open link in new tab":"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Refacer","Remove color":"","Rich Text Editor":"Editor de testu arriquecíu","Rich Text Editor, %0":"Editor de testu arriquecíu, %0","Right aligned image":"",Save:"Guardar","Show more items":"","Side image":"Imaxen llateral","Text alternative":"","This link has no URL":"",Turquoise:"",Underline:"",Undo:"Desfacer",Unlink:"Desenllazar","Upload failed":"",White:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/az.js b/public/js/ckedit5/20.0.0/translations/az.js new file mode 100644 index 0000000..1fcd314 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/az.js @@ -0,0 +1 @@ +(function(d){ const l = d['az'] = d['az'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%1-dən %0","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Mərkəzə düzləndir","Align left":"Soldan düzləndir","Align right":"Sağdan düzləndir","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Akvamarin",Background:"Fon",Big:"Böyük",Black:"Qara","Block quote":"Sitat bloku",Blue:"Mavi","Blue marker":"Mavi marker",Bold:"Yarıqalın",Border:"Sərhəd","Bulleted List":"Markerlənmiş siyahı",Cancel:"İmtina et","Cell properties":"","Center table":"","Centered image":"Mərkəzə düzləndir","Change image text alternative":"Alternativ mətni redaktə et","Choose heading":"Başlıqı seç",Code:"Kod",Color:"Rəng","Color picker":"",Column:"Sütun",Dashed:"","Decrease indent":"Boş yeri kiçilt",Default:"Default","Delete column":"Sütunları sil","Delete row":"Sətirləri sil","Dim grey":"Tünd boz",Dimensions:"Ölçülər","Document colors":"Rənglər",Dotted:"",Double:"",Downloadable:"Yüklənə bilər","Dropdown toolbar":"Açılan paneli","Edit link":"Linki redaktə et","Editor toolbar":"Redaktorun paneli","Enter image caption":"Şəkil başlığı daxil edin","Font Background Color":"Şrift Fonunun Rəngi","Font Color":"Şrift Rəngi","Font Family":"Şrift ailəsi","Font Size":"Şrift ölçüsü","Full size image":"Tam ölçülü şəkili",Green:"Yaşıl","Green marker":"Yaşıl marker","Green pen":"Yaşıl qələm",Grey:"Boz",Groove:"","Header column":"Başlıqlı sütun","Header row":"Başlıqlı sətir",Heading:"Başlıq","Heading 1":"Başlıq 1","Heading 2":"Başlıq 2","Heading 3":"Başlıq 3","Heading 4":"Başlıq 4","Heading 5":"Başlıq 5","Heading 6":"Başlıq 6",Height:"Hündürlük",Highlight:"Vurğulamaq","Horizontal text alignment toolbar":"",Huge:"Nəhəng","Image toolbar":"Şəkil paneli","image widget":"Şəkil vidgetı","Increase indent":"Boş yeri böyüt","Insert code block":"Kod blokunu əlavə et","Insert column left":"Sola sütun əlavə et","Insert column right":"Sağa sütun əlavə et","Insert image":"Şəkili əlavə et","Insert media":"Media əlavə ed","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Aşağıya sətir əlavə et","Insert row below":"Yuxarıya sətir əlavə et","Insert table":"Cədvəli əlavə et",Inset:"",Italic:"Maili",Justify:"Eninə görə","Justify cell text":"","Left aligned image":"Soldan düzləndir","Light blue":"Açıq mavi","Light green":"Açıq yaşıl","Light grey":"Açıq boz",Link:"Əlaqələndir","Link URL":"Linkin URL","Media URL":"Media URL","media widget":"media vidgeti","Merge cell down":"Xanaları aşağı birləşdir","Merge cell left":"Xanaları sola birləşdir","Merge cell right":"Xanaları sağa birləşdir","Merge cell up":"Xanaları yuxarı birləşdir","Merge cells":"Xanaları birləşdir",Next:"Növbəti",None:"","Numbered List":"Nömrələnmiş siyahı","Open in a new tab":"Yeni pəncərədə aç","Open link in new tab":"Linki yeni pəncərədə aç",Orange:"Narıncı",Outset:"",Padding:"",Paragraph:"Abzas","Paste the media URL in the input.":"Media URL-ni xanaya əlavə edin","Pink marker":"Çəhrayı marker","Plain text":"Sadə mətn",Previous:"Əvvəlki",Purple:"Bənövşəyi",Red:"Qırmızı","Red pen":"Qırmızı qələm",Redo:"Təkrar et","Remove color":"Rəngi ləğv et","Remove highlight":"Vurgulanı sil","Rich Text Editor":"Rich Text Redaktoru","Rich Text Editor, %0":"Rich Text Redaktoru, %0",Ridge:"","Right aligned image":"Sağdan düzləndir",Row:"Sətir",Save:"Yadda saxla","Select column":"","Select row":"","Show more items":"Daha çox əşyanı göstərin","Side image":"Yan şəkil",Small:"Kiçik",Solid:"","Split cell horizontally":"Xanaları üfüqi böl","Split cell vertically":"Xanaları şaquli böl",Style:"","Table alignment toolbar":"","Table cell text alignment":"Cədvəl hüceyrəsi mətninin uyğunlaşdırılması","Table properties":"Cədvəl xüsusiyyətləri","Table toolbar":"Cədvəl paneli","Text alignment":"Mətn düzləndirməsi","Text alignment toolbar":"Mətnin düzləndirmə paneli","Text alternative":"Alternativ mətn","Text highlight toolbar":"Vurğulamaq paneli","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL boş olmamalıdır.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Bu linkdə URL yoxdur","This media URL is not supported.":"Bu media URL dəstəklənmir.",Tiny:"Miniatür","Tip: Paste the URL into the content to embed faster.":"Məsləhət: Sürətli qoşma üçün URL-i kontentə əlavə edin",Turquoise:"Firuzəyi",Underline:"Altdan xətt",Undo:"İmtina et",Unlink:"Linki sil","Upload failed":"Şəkili serverə yüklə","Upload in progress":"Yüklənir","Vertical text alignment toolbar":"",White:"Ağ","Widget toolbar":"Vidgetin paneli",Width:"Eni",Yellow:"Sarı","Yellow marker":"Sarı marker"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/bg.js b/public/js/ckedit5/20.0.0/translations/bg.js new file mode 100644 index 0000000..47ad15c --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/bg.js @@ -0,0 +1 @@ +(function(d){ const l = d['bg'] = d['bg'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"Block quote":"Цитат",Bold:"Удебелен",Cancel:"Отказ","Choose heading":"",Code:"",Heading:"","Heading 1":"","Heading 2":"","Heading 3":"","Heading 4":"","Heading 5":"","Heading 6":"",Italic:"Курсив",Paragraph:"Параграф","Remove color":"",Save:"Запазване",Underline:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/ca.js b/public/js/ckedit5/20.0.0/translations/ca.js new file mode 100644 index 0000000..6272bb5 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/ca.js @@ -0,0 +1 @@ +(function(d){ const l = d['ca'] = d['ca'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"Align center":"Alineació centre","Align left":"Alineació esquerra","Align right":"Alineació dreta",Big:"Gran","Block quote":"Cita de bloc","Blue marker":"Marcador blau",Bold:"Negreta",Cancel:"Cancel·lar","Choose heading":"Escull capçalera",Code:"Codi",Default:"Predeterminada","Document colors":"","Font Background Color":"","Font Color":"","Font Family":"Font","Font Size":"Mida de la font","Green marker":"Marcador verd","Green pen":"Bolígraf verd",Heading:"Capçalera","Heading 1":"Capçalera 1","Heading 2":"Capçalera 2","Heading 3":"Capçalera 3","Heading 4":"","Heading 5":"","Heading 6":"",Highlight:"Destacat",Huge:"Molt gran",Italic:"Cursiva",Justify:"Justificar",Paragraph:"Pàrraf","Pink marker":"Marcador rosa","Red pen":"Marcador vermell","Remove color":"","Remove highlight":"Esborrar destacat",Save:"Desar",Small:"Peita","Text alignment":"Alineació text","Text alignment toolbar":"","Text highlight toolbar":"",Tiny:"Molt petita",Underline:"Subrallat","Yellow marker":"Marcador groc"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/cs.js b/public/js/ckedit5/20.0.0/translations/cs.js new file mode 100644 index 0000000..fbad2a2 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/cs.js @@ -0,0 +1 @@ +(function(d){ const l = d['cs'] = d['cs'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 z %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Zarovnat na střed","Align left":"Zarovnat vlevo","Align right":"Zarovnat vpravo","Align table to the left":"","Align table to the right":"",Alignment:"Zarovnání",Aquamarine:"Akvamarínová",Background:"Pozadí",Big:"Velké",Black:"Černá","Block quote":"Citace",Blue:"Modrá","Blue marker":"Modrý fix",Bold:"Tučné",Border:"Okraj","Bulleted List":"Odrážky",Cancel:"Zrušit","Cell properties":"Vlastnosti buňky","Center table":"","Centered image":"Obrázek zarovnaný na střed","Change image text alternative":"Změnit alternativní text obrázku","Choose heading":"Zvolte nadpis",Code:"Kódový blok",Color:"Barva","Color picker":"",Column:"Sloupec",Dashed:"","Decrease indent":"Zmenšit odsazení",Default:"Výchozí","Delete column":"Smazat sloupec","Delete row":"Smazat řádek","Dim grey":"Tmavě šedá",Dimensions:"Rozměry","Document colors":"Barvy dokumentu",Dotted:"",Double:"",Downloadable:"Ke stažení","Dropdown toolbar":"Rozbalovací panel nástrojů","Edit link":"Upravit odkaz","Editor toolbar":"Panel nástrojů editoru","Enter image caption":"Zadejte popis obrázku","Font Background Color":"Barva pozadí písma","Font Color":"Barva písma","Font Family":"Typ písma","Font Size":"Velikost písma","Full size image":"Obrázek v plné velikosti",Green:"Zelená","Green marker":"Zelený fix","Green pen":"Zelené pero",Grey:"Šedá",Groove:"","Header column":"Sloupec záhlaví","Header row":"Řádek záhlaví",Heading:"Nadpis","Heading 1":"Nadpis 1","Heading 2":"Nadpis 2","Heading 3":"Nadpis 3","Heading 4":"Nadpis 4","Heading 5":"Nadpis 5","Heading 6":"Nadpis 6",Height:"Výška",Highlight:"Zvýraznění","Horizontal text alignment toolbar":"",Huge:"Obrovské","Image toolbar":"Panel nástrojů obrázku","image widget":"ovládací prvek obrázku","Increase indent":"Zvětšit odsazení","Insert code block":"Vložit blok zdrojového kódu","Insert column left":"Vložit sloupec vlevo","Insert column right":"Vložit sloupec vpravo","Insert image":"Vložit obrázek","Insert media":"Vložit média","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Vložit řádek před","Insert row below":"Vložit řádek pod","Insert table":"Vložit tabulku",Inset:"",Italic:"Kurzíva",Justify:"Zarovnat do bloku","Justify cell text":"","Left aligned image":"Obrázek zarovnaný vlevo","Light blue":"Světle modrá","Light green":"Světle zelená","Light grey":"Světle šedá",Link:"Odkaz","Link URL":"URL odkazu","Media URL":"URL adresa","media widget":"ovládací prvek médií","Merge cell down":"Sloučit s buňkou pod","Merge cell left":"Sloučit s buňkou vlevo","Merge cell right":"Sloučit s buňkou vpravo","Merge cell up":"Sloučit s buňkou nad","Merge cells":"Sloučit buňky",Next:"Další",None:"","Numbered List":"Číslování","Open in a new tab":"Otevřít v nové kartě","Open link in new tab":"Otevřít odkaz v nové kartě",Orange:"Oranžová",Outset:"",Padding:"",Paragraph:"Odstavec","Paste the media URL in the input.":"Vložte URL média do vstupního pole.","Pink marker":"Růžový fix","Plain text":"Prostý text",Previous:"Předchozí",Purple:"Fialová",Red:"Červená","Red pen":"Červený fix",Redo:"Znovu","Remove color":"Odstranit barvu","Remove highlight":"Odstranit zvýraznění","Rich Text Editor":"Textový editor","Rich Text Editor, %0":"Textový editor, %0",Ridge:"","Right aligned image":"Obrázek zarovnaný vpravo",Row:"Řádek",Save:"Uložit","Select all":"Vybrat vše","Select column":"Vybrat sloupec","Select row":"Vybrat řádek","Show more items":"Zobrazit další položky","Side image":"Postranní obrázek",Small:"Malé",Solid:"","Split cell horizontally":"Rozdělit buňky horizontálně","Split cell vertically":"Rozdělit buňky vertikálně",Style:"Styl","Table alignment toolbar":"","Table cell text alignment":"Zarovnání textu buňky tabulky","Table properties":"Vlastnosti tabulky","Table toolbar":"Panel nástrojů tabulky","Text alignment":"Zarovnání textu","Text alignment toolbar":"Panel nástrojů zarovnání textu","Text alternative":"Alternativní text","Text highlight toolbar":"Panel nástrojů zvýraznění textu","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL adresa musí být vyplněna.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Tento odkaz nemá žádnou URL","This media URL is not supported.":"Tato adresa bohužel není podporována.",Tiny:"Drobné","Tip: Paste the URL into the content to embed faster.":"Rada: Vložte URL přímo do editoru pro rychlejší vnoření.",Turquoise:"Tyrkysová",Underline:"Podtržené",Undo:"Zpět",Unlink:"Odstranit odkaz","Upload failed":"Nahrání selhalo","Upload in progress":"Probíhá nahrávání","Vertical text alignment toolbar":"",White:"Bílá","Widget toolbar":"Panel nástrojů ovládacího prvku",Width:"Šířka",Yellow:"Žlutá","Yellow marker":"Žlutý fix"} );l.getPluralForm=function(n){return (n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/da.js b/public/js/ckedit5/20.0.0/translations/da.js new file mode 100644 index 0000000..fd39cc5 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/da.js @@ -0,0 +1 @@ +(function(d){ const l = d['da'] = d['da'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 af %1","Align cell text to the bottom":"Justér tekstcelle til bunden","Align cell text to the center":"Justér tekstcelle centreret","Align cell text to the left":"Justér tekstcelle til venstre","Align cell text to the middle":"Justér tekstcelle til midten","Align cell text to the right":"Justér tekstcelle til højre","Align cell text to the top":"Justér tekstcelle til top","Align center":"Justér center","Align left":"Justér venstre","Align right":"Justér højre","Align table to the left":"Justér tabel til venstre","Align table to the right":"Justér tabel til højre",Alignment:"Justering",Aquamarine:"Marineblå",Background:"Baggrund",Big:"Stor",Black:"Sort","Block quote":"Blot citat",Blue:"Blå","Blue marker":"Blå markør",Bold:"Fed",Border:"Ramme","Bulleted List":"Punktopstilling",Cancel:"Annullér","Cell properties":"Celleegenskaber","Center table":"Centrér tabel","Centered image":"Centreret billede","Change image text alternative":"Skift alternativ billedtekst","Choose heading":"Vælg overskrift",Code:"Kode",Color:"Farve","Color picker":"",Column:"Kolonne",Dashed:"Stiplet (streg)","Decrease indent":"Formindsk indrykning",Default:"Standard","Delete column":"Slet kolonne","Delete row":"Slet række","Dim grey":"Dunkel grå",Dimensions:"Dimensioner","Document colors":"Dokumentfarve",Dotted:"Stiplet (prik)",Double:"Dobbel",Downloadable:"Kan downloades","Dropdown toolbar":"Dropdown værktøjslinje","Edit link":"Redigér link","Editor toolbar":"Editor værktøjslinje","Enter image caption":"Indtast billedoverskrift","Font Background Color":"Skrift baggrundsfarve","Font Color":"Skriftfarve","Font Family":"Skriftfamilie","Font Size":"Skriftstørrelse","Full size image":"Fuld billedstørrelse",Green:"Grøn","Green marker":"Grøn markør","Green pen":"Grøn pen",Grey:"Grå",Groove:"Not","Header column":"Headerkolonne","Header row":"Headerrække",Heading:"Overskrift","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"Overskrift 4","Heading 5":"Overskrift 5","Heading 6":"Overskrift 6",Height:"Højde",Highlight:"Fremhæv","Horizontal text alignment toolbar":"Horisontal tekstjustering værktøjslinje",Huge:"Kæmpe","Image toolbar":"Billedværktøjslinje","image widget":"billed widget","Increase indent":"Forøg indrykning","Insert code block":"Indsæt kodeblok","Insert column left":"Indsæt kolonne venstre","Insert column right":"Indsæt kolonne højre","Insert image":"Indsæt billede","Insert media":"Indsæt medie","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Indsæt header over","Insert row below":"Indsæt header under","Insert table":"Indsæt tabel",Inset:"Forsænket",Italic:"Kursiv",Justify:"Justér","Justify cell text":"Justér tekstcelle","Left aligned image":"Venstrestillet billede","Light blue":"Lys blå","Light green":"Lys grøn","Light grey":"Lys grå",Link:"Link","Link URL":"Link URL","Media URL":"Medie URL","media widget":"mediewidget","Merge cell down":"Flet celler ned","Merge cell left":"Flet celler venstre","Merge cell right":"Flet celler højre","Merge cell up":"Flet celler op","Merge cells":"Flet celler",Next:"Næste",None:"Ingen","Numbered List":"Opstilling med tal","Open in a new tab":"Åben i ny fane","Open link in new tab":"Åben link i ny fane",Orange:"Orange",Outset:"Fra starten",Padding:"Fyld",Paragraph:"Afsnit","Paste the media URL in the input.":"Indsæt medie URLen i feltet.","Pink marker":"Lyserød markør","Plain text":"Plain tekst",Previous:"Forrige",Purple:"Lilla",Red:"Rød","Red pen":"Rød pen",Redo:"Gentag","Remove color":"Fjern farve","Remove highlight":"Fjern fremhævning","Rich Text Editor":"Wysiwyg editor","Rich Text Editor, %0":"Wysiwyg editor, %0",Ridge:"Kam","Right aligned image":"Højrestillet billede",Row:"Række",Save:"Gem","Select column":"","Select row":"","Show more items":"Vis flere emner","Side image":"Sidebillede",Small:"Lille",Solid:"Massiv","Split cell horizontally":"Del celle horisontalt","Split cell vertically":"Del celle vertikalt",Style:"Stil","Table alignment toolbar":"Tabeljustering værktøjslinje","Table cell text alignment":"Tabelcelle tekstjustering","Table properties":"Tabelegenskaber","Table toolbar":"Tabel værktøjslinje","Text alignment":"Tekstjustering","Text alignment toolbar":"Tekstjustering værktøjslinje","Text alternative":"Alternativ tekst","Text highlight toolbar":"Tekstfremhævning værktøjslinje","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Farven er ugyldig. Prøv \"#FF0000\" eller \"rgb(255,0,0)\" eller \"red\".","The URL must not be empty.":"URLen kan ikke være tom.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Værdien er ugyldig. Prøv \"10px\" eller \"2em\" eller ganske enkelt \"2\".","This link has no URL":"Dette link har ingen URL","This media URL is not supported.":"Denne medie URL understøttes ikke.",Tiny:"Lillebitte","Tip: Paste the URL into the content to embed faster.":"Tip: Indsæt URLen i indholdet for at indlejre hurtigere.",Turquoise:"Turkis",Underline:"Understreget",Undo:"Fortryd",Unlink:"Fjern link","Upload failed":"Upload fejlede","Upload in progress":"Upload i gang","Vertical text alignment toolbar":"Vertikal tekstjustering værktøjslinje",White:"Hvid","Widget toolbar":"Widget værktøjslinje",Width:"Bredde",Yellow:"Gyl","Yellow marker":"Gul markør"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/de-ch.js b/public/js/ckedit5/20.0.0/translations/de-ch.js new file mode 100644 index 0000000..f4371e9 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/de-ch.js @@ -0,0 +1 @@ +(function(d){ const l = d['de-ch'] = d['de-ch'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Black:"","Block quote":"Blockzitat",Blue:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Spalte",Dashed:"","Delete column":"Spalte löschen","Delete row":"Zeile löschen","Dim grey":"",Dimensions:"",Dotted:"",Double:"","Dropdown toolbar":"","Editor toolbar":"",Green:"",Grey:"",Groove:"","Header column":"Kopfspalte","Header row":"Kopfspalte",Height:"","Horizontal text alignment toolbar":"","Insert column left":"","Insert column right":"","Insert row above":"Zeile oben einfügen","Insert row below":"Zeile unten einfügen","Insert table":"Tabelle einfügen",Inset:"","Justify cell text":"","Light blue":"","Light green":"","Light grey":"","Merge cell down":"Zelle unten verbinden","Merge cell left":"Zelle links verbinden","Merge cell right":"Zele rechts verbinden","Merge cell up":"Zelle oben verbinden","Merge cells":"Zellen verbinden",Next:"",None:"",Orange:"",Outset:"",Padding:"",Previous:"",Purple:"",Red:"",Redo:"Wiederherstellen","Rich Text Editor":"Rich-Text-Edito","Rich Text Editor, %0":"Rich-Text-Editor, %0",Ridge:"",Row:"Zeile","Select column":"","Select row":"","Show more items":"",Solid:"","Split cell horizontally":"Zelle horizontal teilen","Split cell vertically":"Zelle vertikal teilen",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"",Turquoise:"",Undo:"Rückgängig","Upload in progress":"Upload läuft","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/el.js b/public/js/ckedit5/20.0.0/translations/el.js new file mode 100644 index 0000000..1296f47 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/el.js @@ -0,0 +1 @@ +(function(d){ const l = d['el'] = d['el'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"Περιοχή παράθεσης",Blue:"",Bold:"Έντονη","Bulleted List":"Λίστα κουκκίδων",Cancel:"Ακύρωση","Centered image":"","Change image text alternative":"Αλλαγή εναλλακτικού κείμενου","Choose heading":"Επιλέξτε κεφαλίδα",Code:"","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"Λεζάντα","Full size image":"Εικόνα πλήρης μεγέθους",Green:"",Grey:"",Heading:"Κεφαλίδα","Heading 1":"Κεφαλίδα 1","Heading 2":"Κεφαλίδα 2","Heading 3":"Κεφαλίδα 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"","Insert image":"Εισαγωγή εικόνας",Italic:"Πλάγια","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"Σύνδεσμος","Link URL":"Διεύθυνση συνδέσμου",Next:"","Numbered List":"Αριθμημένη λίστα","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"Παράγραφος",Previous:"",Purple:"",Red:"",Redo:"Επανάληψη","Remove color":"","Rich Text Editor":"Επεξεργαστής Πλούσιου Κειμένου","Rich Text Editor, %0":"Επεξεργαστής Πλούσιου Κειμένου, 0%","Right aligned image":"",Save:"Αποθήκευση","Show more items":"","Side image":"","Text alternative":"Εναλλακτικό κείμενο","This link has no URL":"",Turquoise:"",Underline:"",Undo:"Αναίρεση",Unlink:"Αφαίρεση συνδέσμου","Upload failed":"",White:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/en-au.js b/public/js/ckedit5/20.0.0/translations/en-au.js new file mode 100644 index 0000000..0c97ee9 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/en-au.js @@ -0,0 +1 @@ +(function(d){ const l = d['en-au'] = d['en-au'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 of %1","Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align center":"Align centre","Align left":"Align left","Align right":"Align right","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment",Aquamarine:"Aquamarine",Background:"Background",Big:"Big",Black:"Black","Block quote":"Block quote",Blue:"Blue","Blue marker":"Blue marker",Bold:"Bold",Border:"Border","Bulleted List":"Bulleted List",Cancel:"Cancel","Cell properties":"Cell properties","Center table":"Centre table","Centered image":"Centred image","Change image text alternative":"Change image text alternative","Choose heading":"Choose heading",Code:"Code",Color:"Colour","Color picker":"Colour picker",Column:"Column",Dashed:"Dashed","Decrease indent":"Decrease indent",Default:"Default","Delete column":"Delete column","Delete row":"Delete row","Dim grey":"Dim grey",Dimensions:"Dimensions","Document colors":"Document colours",Dotted:"Dotted",Double:"Double",Downloadable:"Downloadable","Dropdown toolbar":"Dropdown toolbar","Edit link":"Edit link","Editor toolbar":"Editor toolbar","Enter image caption":"Enter image caption","Font Background Color":"Font Background Colour","Font Color":"Font Colour","Font Family":"Font Family","Font Size":"Font Size","Full size image":"Full size image",Green:"Green","Green marker":"Green marker","Green pen":"Green pen",Grey:"Grey",Groove:"Groove","Header column":"Header column","Header row":"Header row",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Height:"Height",Highlight:"Highlight","Horizontal text alignment toolbar":"Horizontal text alignment toolbar",Huge:"Huge","Image toolbar":"Image toolbar","image widget":"image widget","Increase indent":"Increase indent","Insert code block":"Insert code block","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert image":"Insert image","Insert media":"Insert media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table",Inset:"Inset",Italic:"Italic",Justify:"Justify","Justify cell text":"Justify cell text","Left aligned image":"Left aligned image","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Link:"Link","Link URL":"Link URL","Media URL":"Media URL","media widget":"media widget","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells",Next:"Next",None:"None","Numbered List":"Numbered List","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab",Orange:"Orange",Outset:"Outset",Padding:"Padding",Paragraph:"Paragraph","Paste the media URL in the input.":"Paste the media URL in the input.","Pink marker":"Pink marker","Plain text":"Plain text",Previous:"Previous",Purple:"Purple",Red:"Red","Red pen":"Red pen",Redo:"Redo","Remove color":"Remove colour","Remove highlight":"Remove highlight","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Ridge:"Ridge","Right aligned image":"Right aligned image",Row:"Row",Save:"Save","Select all":"Select all","Select column":"Select column","Select row":"Select row","Show more items":"Show more items","Side image":"Side image",Small:"Small",Solid:"Solid","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Style:"Style","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar","Text alignment":"Text alignment","Text alignment toolbar":"Text alignment toolbar","Text alternative":"Text alternative","Text highlight toolbar":"Text highlight toolbar","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"The colour is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".","The URL must not be empty.":"The URL must not be empty.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".","This link has no URL":"This link has no URL","This media URL is not supported.":"This media URL is not supported.",Tiny:"Tiny","Tip: Paste the URL into the content to embed faster.":"Tip: Paste the URL into the content to embed faster.",Turquoise:"Turquoise",Underline:"Underline",Undo:"Undo",Unlink:"Unlink","Upload failed":"Upload failed","Upload in progress":"Upload in progress","Vertical text alignment toolbar":"Vertical text alignment toolbar",White:"White","Widget toolbar":"Widget toolbar",Width:"Width",Yellow:"Yellow","Yellow marker":"Yellow marker"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/en-gb.js b/public/js/ckedit5/20.0.0/translations/en-gb.js new file mode 100644 index 0000000..2fe4f97 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/en-gb.js @@ -0,0 +1 @@ +(function(d){ const l = d['en-gb'] = d['en-gb'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 of %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Align center","Align left":"Align left","Align right":"Align right","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Aquamarine",Background:"",Big:"Big",Black:"Black","Block quote":"Block quote",Blue:"Blue","Blue marker":"Blue marker",Bold:"Bold",Border:"","Bulleted List":"Bulleted List",Cancel:"Cancel","Cell properties":"","Center table":"","Centered image":"Centred image","Change image text alternative":"Change image text alternative","Choose heading":"Choose heading",Code:"Code",Color:"","Color picker":"",Column:"Column",Dashed:"","Decrease indent":"Decrease indent",Default:"Default","Delete column":"Delete column","Delete row":"Delete row","Dim grey":"Dim grey",Dimensions:"","Document colors":"Document colours",Dotted:"",Double:"",Downloadable:"Downloadable","Dropdown toolbar":"","Edit link":"Edit link","Editor toolbar":"","Enter image caption":"Enter image caption","Font Background Color":"Font Background Colour","Font Color":"Font Colour","Font Family":"Font Family","Font Size":"Font Size","Full size image":"Full size image",Green:"Green","Green marker":"Green marker","Green pen":"Green pen",Grey:"Grey",Groove:"","Header column":"Header column","Header row":"Header row",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Height:"",Highlight:"Highlight","Horizontal text alignment toolbar":"",Huge:"Huge","Image toolbar":"","image widget":"Image widget","Increase indent":"Increase indent","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert image":"Insert image","Insert media":"Insert media","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table",Inset:"",Italic:"Italic",Justify:"Justify","Justify cell text":"","Left aligned image":"Left aligned image","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Link:"Link","Link URL":"Link URL","Media URL":"Media URL","media widget":"Media widget","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells",Next:"Next",None:"","Numbered List":"Numbered List","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab",Orange:"Orange",Outset:"",Padding:"",Paragraph:"Paragraph","Paste the media URL in the input.":"Paste the media URL in the input.","Pink marker":"Pink marker",Previous:"Previous",Purple:"Purple",Red:"Red","Red pen":"Red pen",Redo:"Redo","Remove color":"Remove colour","Remove highlight":"Remove highlight","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Ridge:"","Right aligned image":"Right aligned image",Row:"Row",Save:"Save","Select column":"","Select row":"","Show more items":"","Side image":"Side image",Small:"Small",Solid:"","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Text alignment","Text alignment toolbar":"","Text alternative":"Text alternative","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"The URL must not be empty.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"This link has no URL","This media URL is not supported.":"This media URL is not supported.",Tiny:"Tiny","Tip: Paste the URL into the content to embed faster.":"Tip: Paste the URL into the content to embed faster.",Turquoise:"Turquoise",Underline:"Underline",Undo:"Undo",Unlink:"Unlink","Upload failed":"Upload failed","Upload in progress":"Upload in progress","Vertical text alignment toolbar":"",White:"White",Width:"",Yellow:"Yellow","Yellow marker":"Yellow marker"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/en.js b/public/js/ckedit5/20.0.0/translations/en.js new file mode 100644 index 0000000..3d08d62 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/en.js @@ -0,0 +1 @@ +(function(d){ const l = d['en'] = d['en'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 of %1","Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align center":"Align center","Align left":"Align left","Align right":"Align right","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment",Aquamarine:"Aquamarine",Background:"Background",Big:"Big",Black:"Black","Block quote":"Block quote",Blue:"Blue","Blue marker":"Blue marker",Bold:"Bold",Border:"Border","Bulleted List":"Bulleted List",Cancel:"Cancel","Cell properties":"Cell properties","Center table":"Center table","Centered image":"Centered image","Change image text alternative":"Change image text alternative","Choose heading":"Choose heading",Code:"Code",Color:"Color","Color picker":"Color picker",Column:"Column",Dashed:"Dashed","Decrease indent":"Decrease indent",Default:"Default","Delete column":"Delete column","Delete row":"Delete row","Dim grey":"Dim grey",Dimensions:"Dimensions","Document colors":"Document colors",Dotted:"Dotted",Double:"Double",Downloadable:"Downloadable","Dropdown toolbar":"Dropdown toolbar","Edit link":"Edit link","Editor toolbar":"Editor toolbar","Enter image caption":"Enter image caption","Font Background Color":"Font Background Color","Font Color":"Font Color","Font Family":"Font Family","Font Size":"Font Size","Full size image":"Full size image",Green:"Green","Green marker":"Green marker","Green pen":"Green pen",Grey:"Grey",Groove:"Groove","Header column":"Header column","Header row":"Header row",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Height:"Height",Highlight:"Highlight","Horizontal text alignment toolbar":"Horizontal text alignment toolbar",Huge:"Huge","Image toolbar":"Image toolbar","image widget":"image widget","Increase indent":"Increase indent","Insert code block":"Insert code block","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert image":"Insert image","Insert media":"Insert media","Insert paragraph after block":"Insert paragraph after block","Insert paragraph before block":"Insert paragraph before block","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table",Inset:"Inset",Italic:"Italic",Justify:"Justify","Justify cell text":"Justify cell text","Left aligned image":"Left aligned image","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Link:"Link","Link URL":"Link URL","Media URL":"Media URL","media widget":"media widget","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells",Next:"Next",None:"None","Numbered List":"Numbered List","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab",Orange:"Orange",Outset:"Outset",Padding:"Padding",Paragraph:"Paragraph","Paste the media URL in the input.":"Paste the media URL in the input.","Pink marker":"Pink marker","Plain text":"Plain text",Previous:"Previous",Purple:"Purple",Red:"Red","Red pen":"Red pen",Redo:"Redo","Remove color":"Remove color","Remove highlight":"Remove highlight","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Ridge:"Ridge","Right aligned image":"Right aligned image",Row:"Row",Save:"Save","Select all":"Select all","Select column":"Select column","Select row":"Select row","Show more items":"Show more items","Side image":"Side image",Small:"Small",Solid:"Solid","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Style:"Style","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar","Text alignment":"Text alignment","Text alignment toolbar":"Text alignment toolbar","Text alternative":"Text alternative","Text highlight toolbar":"Text highlight toolbar","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".","The URL must not be empty.":"The URL must not be empty.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".","This link has no URL":"This link has no URL","This media URL is not supported.":"This media URL is not supported.",Tiny:"Tiny","Tip: Paste the URL into the content to embed faster.":"Tip: Paste the URL into the content to embed faster.",Turquoise:"Turquoise",Underline:"Underline",Undo:"Undo",Unlink:"Unlink","Upload failed":"Upload failed","Upload in progress":"Upload in progress","Vertical text alignment toolbar":"Vertical text alignment toolbar",White:"White","Widget toolbar":"Widget toolbar",Width:"Width",Yellow:"Yellow","Yellow marker":"Yellow marker"} );})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/eo.js b/public/js/ckedit5/20.0.0/translations/eo.js new file mode 100644 index 0000000..0bec280 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/eo.js @@ -0,0 +1 @@ +(function(d){ const l = d['eo'] = d['eo'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Bold:"grasa","Bulleted List":"Bula Listo",Cancel:"Nuligi","Centered image":"","Change image text alternative":"Ŝanĝu la alternativan tekston de la bildo","Choose heading":"Elektu ĉapon",Code:"","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"Skribu klarigon pri la bildo","Full size image":"Bildo kun reala dimensio",Green:"",Grey:"",Heading:"Ĉapo","Heading 1":"Ĉapo 1","Heading 2":"Ĉapo 2","Heading 3":"Ĉapo 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"bilda fenestraĵo","Insert image":"Enmetu bildon",Italic:"kursiva","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"Ligilo","Link URL":"URL de la ligilo",Next:"","Numbered List":"Numerita Listo","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"Paragrafo",Previous:"",Purple:"",Red:"",Redo:"Refari","Remove color":"","Rich Text Editor":"Redaktilo de Riĉa Teksto","Rich Text Editor, %0":"Redaktilo de Riĉa Teksto, %0","Right aligned image":"",Save:"Konservi","Show more items":"","Side image":"Flanka biildo","Text alternative":"Alternativa teksto","This link has no URL":"",Turquoise:"",Underline:"",Undo:"Malfari",Unlink:"Malligi","Upload failed":"",White:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/es.js b/public/js/ckedit5/20.0.0/translations/es.js new file mode 100644 index 0000000..dce0082 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/es.js @@ -0,0 +1 @@ +(function(d){ const l = d['es'] = d['es'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 de %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Centrar","Align left":"Alinear a la izquierda","Align right":"Alinear a la derecha","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Aguamarina",Background:"",Big:"Grande",Black:"Negro","Block quote":"Entrecomillado",Blue:"Azul","Blue marker":"Marcador azul",Bold:"Negrita",Border:"","Bulleted List":"Lista de puntos",Cancel:"Cancelar","Cell properties":"","Center table":"","Centered image":"Imagen centrada","Change image text alternative":"Cambiar el texto alternativo de la imagen","Choose heading":"Elegir Encabezado",Code:"Código",Color:"","Color picker":"",Column:"Columna",Dashed:"","Decrease indent":"Disminuir sangría",Default:"Por defecto","Delete column":"Eliminar columna","Delete row":"Eliminar fila","Dim grey":"Gris Oscuro",Dimensions:"","Document colors":"Colores del documento",Dotted:"",Double:"",Downloadable:"Descargable","Dropdown toolbar":"Barra de herramientas desplegable","Edit link":"Editar enlace","Editor toolbar":"Barra de herramientas de edición","Enter image caption":"Introducir título de la imagen","Font Background Color":"Color de Fondo","Font Color":"Color de Fuente","Font Family":"Fuente","Font Size":"Tamaño de fuente","Full size image":"Imagen a tamaño completo",Green:"Verde","Green marker":"Marcador verde","Green pen":"Texto verde",Grey:"Gris",Groove:"","Header column":"Columna de encabezado","Header row":"Fila de encabezado",Heading:"Encabezado","Heading 1":"Encabezado 1","Heading 2":"Encabezado 2","Heading 3":"Encabezado 3","Heading 4":"Encabezado 4","Heading 5":"Encabezado 5","Heading 6":"Encabezado 6",Height:"",Highlight:"Resaltar","Horizontal text alignment toolbar":"",Huge:"Enorme","Image toolbar":"Barra de herramientas de imagen","image widget":"Widget de imagen","Increase indent":"Aumentar sangría","Insert code block":"Insertar bloque de código","Insert column left":"Insertar columna izquierda","Insert column right":"Insertar columna derecha","Insert image":"Insertar imagen","Insert media":"Insertar contenido multimedia","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Insertar fila encima","Insert row below":"Insertar fila debajo","Insert table":"Insertar tabla",Inset:"",Italic:"Cursiva",Justify:"Justificar","Justify cell text":"","Left aligned image":"Imagen alineada a la izquierda","Light blue":"Azul Claro","Light green":"Verde Claro","Light grey":"Gris Claro",Link:"Enlace","Link URL":"URL del enlace","Media URL":"URL del contenido multimedia","media widget":"Widget de contenido multimedia","Merge cell down":"Combinar celda inferior","Merge cell left":"Combinar celda izquierda","Merge cell right":"Combinar celda derecha","Merge cell up":"Combinar celda superior","Merge cells":"Combinar celdas",Next:"Siguiente",None:"","Numbered List":"Lista numerada","Open in a new tab":"Abrir en una pestaña nueva ","Open link in new tab":"Abrir enlace en una pestaña nueva",Orange:"Anaranjado",Outset:"",Padding:"",Paragraph:"Párrafo","Paste the media URL in the input.":"Pega la URL del contenido multimedia","Pink marker":"Marcador rosa","Plain text":"Texto plano",Previous:"Anterior",Purple:"Morado",Red:"Rojo","Red pen":"Texto rojo",Redo:"Rehacer","Remove color":"Remover color","Remove highlight":"Quitar resaltado","Rich Text Editor":"Editor de Texto Enriquecido","Rich Text Editor, %0":"Editor de Texto Enriquecido, %0",Ridge:"","Right aligned image":"Imagen alineada a la derecha",Row:"Fila",Save:"Guardar","Select column":"","Select row":"","Show more items":"Mostrar más elementos","Side image":"Imagen lateral",Small:"Pequeño",Solid:"","Split cell horizontally":"Dividir celdas horizontalmente","Split cell vertically":"Dividir celdas verticalmente",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Barra de herramientas de tabla","Text alignment":"Alineación del texto","Text alignment toolbar":"Barra de herramientas de alineación del texto","Text alternative":"Texto alternativo","Text highlight toolbar":"Barra de herramientas de resaltado de texto","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"La URL no debe estar vacía","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Este enlace no tiene URL","This media URL is not supported.":"La URL de este contenido multimedia no está soportada",Tiny:"Minúsculo","Tip: Paste the URL into the content to embed faster.":"Tip: pega la URL dentro del contenido para embeber más rápido",Turquoise:"Turquesa",Underline:"Subrayado",Undo:"Deshacer",Unlink:"Quitar enlace","Upload failed":"Fallo en la subida","Upload in progress":"Subida en progreso","Vertical text alignment toolbar":"",White:"Blanco","Widget toolbar":"Barra de herramientas del widget",Width:"",Yellow:"Amarillo","Yellow marker":"Marcador amarillo"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/et.js b/public/js/ckedit5/20.0.0/translations/et.js new file mode 100644 index 0000000..b7dbcfb --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/et.js @@ -0,0 +1 @@ +(function(d){ const l = d['et'] = d['et'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 / %1","Align cell text to the bottom":"Lahtri tekst all","Align cell text to the center":"Lahtri tekst keskel","Align cell text to the left":"Lahtri tekst vasakul","Align cell text to the middle":"Lahtri tekst kõrguse järgi keskel","Align cell text to the right":"Lahtri tekst paremal","Align cell text to the top":"Lahtri tekst üleval","Align center":"Keskjoondus","Align left":"Vasakjoondus","Align right":"Paremjoondus","Align table to the left":"Tabel joondatud vasakule","Align table to the right":"Tabel joondatud paremale",Alignment:"Joondus",Aquamarine:"Akvamariin",Background:"Taust",Big:"Suur",Black:"Must","Block quote":"Tsitaat",Blue:"Sinine","Blue marker":"Sinine marker",Bold:"Rasvane",Border:"Ääris","Bulleted List":"Punktidega loetelu",Cancel:"Loobu","Cell properties":"Lahtri omadused","Center table":"Tabel joondatud keskele","Centered image":"Keskele joondatud pilt","Change image text alternative":"Muuda pildi asenduskirjeldust","Choose heading":"Vali pealkiri",Code:"Kood",Color:"Värvus","Color picker":"Värvi valija",Column:"Veerg",Dashed:"Kriipsjoon","Decrease indent":"Vähenda taanet",Default:"Vaikimisi","Delete column":"Kustuta veerg","Delete row":"Kustuta rida","Dim grey":"Tumehall",Dimensions:"Mõõtmed","Document colors":"Dokumendi värvid",Dotted:"Punktiir",Double:"Topelt",Downloadable:"Allalaaditav","Dropdown toolbar":"Avatav tööriistariba","Edit link":"Muuda linki","Editor toolbar":"Redaktori tööriistariba","Enter image caption":"Sisesta pildi pealkiri","Font Background Color":"Kirja tausta värvus","Font Color":"Fondi värvus","Font Family":"Kirjastiil","Font Size":"Teksti suurus","Full size image":"Täissuuruses pilt",Green:"Roheline","Green marker":"Roheline marker","Green pen":"Roheline pliiats",Grey:"Hall",Groove:"Kraav","Header column":"Päise veerg","Header row":"Päise rida",Heading:"Pealkiri","Heading 1":"Pealkiri 1","Heading 2":"Pealkiri 2","Heading 3":"Pealkiri 3","Heading 4":"Pealkiri 4","Heading 5":"Pealkiri 5","Heading 6":"Pealkiri 6",Height:"Kõrgus",Highlight:"Tõsta esile","Horizontal text alignment toolbar":"Teksti rõhtpaigutuse tööriistariba",Huge:"Ülisuur","Image toolbar":"Piltide tööriistariba","image widget":"pildi vidin","Increase indent":"Suurenda taanet","Insert code block":"Sisesta koodiplokk","Insert column left":"Sisesta veerg vasakule","Insert column right":"Sisesta veerg paremale","Insert image":"Siseta pilt","Insert media":"Sisesta meedia","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Sisesta rida ülespoole","Insert row below":"Sisesta rida allapoole","Insert table":"Sisesta tabel",Inset:"Süvik",Italic:"Kaldkiri",Justify:"Rööpjoondus","Justify cell text":"Lahtri tekst rööpjoondatud","Left aligned image":"Vasakule joondatud pilt","Light blue":"Helesinine","Light green":"Heleroheline","Light grey":"Helehall",Link:"Link","Link URL":"Lingi URL","Media URL":"Meedia URL","media widget":"meedia vidin","Merge cell down":"Liida alumise lahtriga","Merge cell left":"Liida vasakul oleva lahtriga","Merge cell right":"Liida paremal oleva lahtriga","Merge cell up":"Liida ülemise lahtriga","Merge cells":"Liida lahtrid",Next:"Järgmine",None:"Puudub","Numbered List":"Nummerdatud loetelu","Open in a new tab":"Ava uuel kaardil","Open link in new tab":"Ava link uuel vahekaardil",Orange:"Oranž",Outset:"Küngas",Padding:"Vahe sisuni",Paragraph:"Lõik","Paste the media URL in the input.":"Aseta meedia URL sisendi lahtrisse.","Pink marker":"Roosa marker","Plain text":"Lihtsalt tekst",Previous:"Eelmine",Purple:"Lilla",Red:"Punane","Red pen":"Punane pliiats",Redo:"Tee uuesti","Remove color":"Eemalda värv","Remove highlight":"Eemalda esiletõstmine","Rich Text Editor":"Tekstiredaktor","Rich Text Editor, %0":"Tekstiredaktor, %0",Ridge:"Vall","Right aligned image":"Paremale joondatud pilt",Row:"Rida",Save:"Salvesta","Select all":"Vali kõik","Select column":"Vali veerg","Select row":"Vali rida","Show more items":"Näita veel","Side image":"Pilt küljel",Small:"Väike",Solid:"Pidev","Split cell horizontally":"Jaga lahter horisontaalselt","Split cell vertically":"Jaga lahter vertikaalselt",Style:"Stiil","Table alignment toolbar":"Tabeli paigutuse tööriistariba","Table cell text alignment":"Teksti paigutus lahtris","Table properties":"Tabeli omadused","Table toolbar":"Tabelite tööriistariba","Text alignment":"Teksti joondamine","Text alignment toolbar":"Teksti joonduse tööriistariba","Text alternative":"Asenduskirjeldus","Text highlight toolbar":"Teksti markeerimise tööriistariba","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Värvus ei sobi. Proovi \"#FF0000\" või \"rgb(255,0,0)\" või \"red\".","The URL must not be empty.":"URL-i lahter ei tohi olla tühi.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Väärtus ei sobi. Proovi \"10px\", \"2em\" või lihtsalt \"2\".","This link has no URL":"Sellel lingil puudub URL","This media URL is not supported.":"See meedia URL pole toetatud.",Tiny:"Imepisike","Tip: Paste the URL into the content to embed faster.":"Vihje: asetades meedia URLi otse sisusse saab selle lisada kiiremini.",Turquoise:"Türkiis",Underline:"Allajoonitud",Undo:"Võta tagasi",Unlink:"Eemalda link","Upload failed":"Üleslaadimine ebaõnnestus","Upload in progress":"Üleslaadimine pooleli","Vertical text alignment toolbar":"Teksti püstpaigutuse tööriistariba",White:"Valge","Widget toolbar":"Vidinate tööriistariba",Width:"Laius",Yellow:"Kollane","Yellow marker":"Kollane marker"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/eu.js b/public/js/ckedit5/20.0.0/translations/eu.js new file mode 100644 index 0000000..f037d63 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/eu.js @@ -0,0 +1 @@ +(function(d){ const l = d['eu'] = d['eu'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"Aipua",Blue:"",Bold:"Lodia","Bulleted List":"Buletdun zerrenda",Cancel:"Utzi","Centered image":"Zentratutako irudia","Change image text alternative":"Aldatu irudiaren ordezko testua","Choose heading":"Aukeratu izenburua",Code:"Kodea","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"Sartu irudiaren epigrafea","Full size image":"Tamaina osoko irudia",Green:"",Grey:"",Heading:"Izenburua","Heading 1":"Izenburua 1","Heading 2":"Izenburua 2","Heading 3":"Izenburua 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"irudi widgeta","Insert image":"Txertatu irudia",Italic:"Etzana","Left aligned image":"Ezkerrean lerrokatutako irudia","Light blue":"","Light green":"","Light grey":"",Link:"Esteka","Link URL":"Estekaren URLa",Next:"","Numbered List":"Zenbakidun zerrenda","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"Paragrafoa",Previous:"",Purple:"",Red:"",Redo:"Berregin","Remove color":"","Rich Text Editor":"Testu aberastuaren editorea","Rich Text Editor, %0":"Testu aberastuaren editorea, %0","Right aligned image":"Eskuinean lerrokatutako irudia",Save:"Gorde","Show more items":"","Side image":"Alboko irudia","Text alternative":"Ordezko testua","This link has no URL":"",Turquoise:"",Underline:"Azpimarra",Undo:"Desegin",Unlink:"Desestekatu","Upload failed":"Kargatzeak huts egin du",White:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/fa.js b/public/js/ckedit5/20.0.0/translations/fa.js new file mode 100644 index 0000000..c62dbb2 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/fa.js @@ -0,0 +1 @@ +(function(d){ const l = d['fa'] = d['fa'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"0% از 1%","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"تراز وسط","Align left":"تراز چپ","Align right":"تراز راست","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"زمرد کبود",Background:"",Big:"بزرگ",Black:"سیاه","Block quote":" بلوک نقل قول",Blue:"آبی","Blue marker":"نشانگر آبی",Bold:"درشت",Border:"","Bulleted List":"لیست نشانه‌دار",Cancel:"لغو","Cell properties":"","Center table":"","Centered image":"تصویر در وسط","Change image text alternative":"تغییر متن جایگزین تصویر","Choose heading":"انتخاب عنوان",Code:"کد",Color:"","Color picker":"",Column:"ستون",Dashed:"","Decrease indent":"کاهش تورفتگی",Default:"پیش فرض","Delete column":"حذف ستون","Delete row":"حذف سطر","Dim grey":"خاکستری تیره",Dimensions:"","Document colors":"رنگ اسناد",Dotted:"",Double:"",Downloadable:"قابل بارگیری","Dropdown toolbar":"نوارابزار کشویی","Edit link":"ویرایش پیوند","Editor toolbar":"نوارابزار ویرایشگر","Enter image caption":"عنوان تصویر را وارد کنید","Font Background Color":"رنگ پس زمینه فونت","Font Color":"رنگ فونت","Font Family":"خانواده فونت","Font Size":"اندازه فونت","Full size image":"تصویر در اندازه کامل",Green:"سبز","Green marker":"نشانگر سبز","Green pen":"قلم سبز",Grey:"خاکستری",Groove:"","Header column":"ستون سربرگ","Header row":"سطر سربرگ",Heading:"عنوان","Heading 1":"عنوان 1","Heading 2":"عنوان 2","Heading 3":"عنوان 3","Heading 4":"عنوان 4","Heading 5":"عنوان 5","Heading 6":"عنوان 6",Height:"",Highlight:"برجسته","Horizontal text alignment toolbar":"",Huge:"بسیار بزرگ","Image toolbar":"نوارابزار تصویر","image widget":"ابزاره تصویر","Increase indent":"افزایش تورفتگی","Insert column left":"درج ستون در سمت چپ","Insert column right":"درج ستون در سمت راست","Insert image":"قرار دادن تصویر","Insert media":"وارد کردن رسانه","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"درج سطر در بالا","Insert row below":"درج سطر در پایین","Insert table":"درج جدول",Inset:"",Italic:"کج",Justify:"هم تراز کردن","Justify cell text":"","Left aligned image":"تصویر تراز شده چپ","Light blue":"آبی روشن","Light green":"سبز روشن","Light grey":"خاکستری روشن",Link:"پیوند","Link URL":"نشانی اینترنتی پیوند","Media URL":"آدرس اینترنتی رسانه","media widget":"ویجت رسانه","Merge cell down":"ادغام سلول پایین","Merge cell left":"ادغام سلول چپ","Merge cell right":"ادغام سلول راست","Merge cell up":"ادغام سلول بالا","Merge cells":"ادغام سلول ها",Next:"بعدی",None:"","Numbered List":"لیست عددی","Open in a new tab":"بازکردن در برگه جدید","Open link in new tab":"باز کردن پیوند در برگه جدید",Orange:"نارنجی",Outset:"",Padding:"",Paragraph:"پاراگراف","Paste the media URL in the input.":"آدرس رسانه را در ورودی قرار دهید","Pink marker":"نشانگر صورتی",Previous:"قبلی",Purple:"بنفش",Red:"قرمز","Red pen":"قلم قرمز",Redo:"باز انجام","Remove color":"حذف رنگ","Remove highlight":"حذف برجسته","Rich Text Editor":"ویرایشگر متن غنی","Rich Text Editor, %0":"ویرایشگر متن غنی، %0",Ridge:"","Right aligned image":"تصویر تراز شده راست",Row:"سطر",Save:"ذخیره","Select all":"انتخاب همه","Select column":"","Select row":"","Show more items":"","Side image":"تصویر جانبی",Small:"کوچک",Solid:"","Split cell horizontally":"تقسیم افقی سلول","Split cell vertically":"تقسیم عمودی سلول",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"نوارابزار جدول","Text alignment":"تراز متن","Text alignment toolbar":"نوارابزار تراز متن","Text alternative":"متن جایگزین","Text highlight toolbar":"نوارابزار برجستگی متن","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"آدرس اینترنتی URL نباید خالی باشد.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"این پیوند نشانی اینترنتی ندارد","This media URL is not supported.":"این آدرس اینترنتی رسانه پشتیبانی نمی‌شود",Tiny:"بسیار کوچک","Tip: Paste the URL into the content to embed faster.":"نکته : آدرس را در محتوا قراردهید تا سریع تر جاسازی شود",Turquoise:"فیروزه ای",Underline:"خط زیر",Undo:"بازگردانی",Unlink:"لغو پیوند","Upload failed":"آپلود ناموفق بود","Upload in progress":"آپلود در حال انجام","Vertical text alignment toolbar":"",White:"سفید","Widget toolbar":"نوار ابزارک ها",Width:"",Yellow:"زرد","Yellow marker":"نشانگر زرد"} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/fi.js b/public/js/ckedit5/20.0.0/translations/fi.js new file mode 100644 index 0000000..9c61cb6 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/fi.js @@ -0,0 +1 @@ +(function(d){ const l = d['fi'] = d['fi'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Tasaa keskelle","Align left":"Tasaa vasemmalle","Align right":"Tasaa oikealle","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Akvamariini",Background:"",Big:"Suuri",Black:"Musta","Block quote":"Lainaus",Blue:"Sininen","Blue marker":"",Bold:"Lihavointi",Border:"","Bulleted List":"Lista",Cancel:"Peruuta","Cell properties":"","Center table":"","Centered image":"Keskitetty kuva","Change image text alternative":"Vaihda kuvan vaihtoehtoinen teksti","Choose heading":"Valitse otsikko",Code:"Koodi",Color:"","Color picker":"",Column:"Sarake",Dashed:"","Decrease indent":"Vähennä sisennystä",Default:"Oletus","Delete column":"Poista sarake","Delete row":"Poista rivi","Dim grey":"",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"Muokkaa linkkiä","Editor toolbar":"","Enter image caption":"Syötä kuvateksti","Font Background Color":"Fontin taustaväri","Font Color":"Fontin väri","Font Family":"Fonttiperhe","Font Size":"Fontin koko","Full size image":"Täysikokoinen kuva",Green:"Vihreä","Green marker":"","Green pen":"",Grey:"Harmaa",Groove:"","Header column":"Otsikkosarake","Header row":"Otsikkorivi",Heading:"Otsikkotyyli","Heading 1":"Otsikko 1","Heading 2":"Otsikko 2","Heading 3":"Otsikko 3","Heading 4":"Otsikko 4","Heading 5":"Otsikko 5","Heading 6":"Otsikko 6",Height:"",Highlight:"Korosta","Horizontal text alignment toolbar":"",Huge:"Hyvin suuri","Image toolbar":"","image widget":"Kuvavimpain","Increase indent":"Lisää sisennystä","Insert column left":"Lisää sarake vasemmalle","Insert column right":"Lisää sarake oikealle","Insert image":"Lisää kuva","Insert media":"","Insert row above":"Lisää rivi ylle","Insert row below":"Lisää rivi alle","Insert table":"Lisää taulukko",Inset:"",Italic:"Kursivointi",Justify:"Tasaa molemmat reunat","Justify cell text":"","Left aligned image":"Vasemmalle tasattu kuva","Light blue":"Vaaleansininen","Light green":"Vaaleanvihreä","Light grey":"Vaaleanharmaa",Link:"Linkki","Link URL":"Linkin osoite","Media URL":"","media widget":"","Merge cell down":"Yhdistä solu alas","Merge cell left":"Yhdistä solu vasemmalle","Merge cell right":"Yhdistä solu oikealle","Merge cell up":"Yhdistä solu ylös","Merge cells":"Yhdistä tai jaa soluja",Next:"",None:"","Numbered List":"Numeroitu lista","Open in a new tab":"","Open link in new tab":"Avaa linkki uudessa välilehdessä",Orange:"Oranssi",Outset:"",Padding:"",Paragraph:"Kappale","Paste the media URL in the input.":"","Pink marker":"",Previous:"",Purple:"Purppura",Red:"Punainen","Red pen":"",Redo:"Tee uudelleen","Remove color":"Poista väri","Remove highlight":"Poista korostus","Rich Text Editor":"Rikas tekstieditori","Rich Text Editor, %0":"Rikas tekstieditori, %0",Ridge:"","Right aligned image":"Oikealle tasattu kuva",Row:"Rivi",Save:"Tallenna","Select column":"","Select row":"","Show more items":"","Side image":"Pieni kuva",Small:"Pieni",Solid:"","Split cell horizontally":"Jaa solu vaakasuunnassa","Split cell vertically":"Jaa solu pystysuunnassa",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Tekstin tasaus","Text alignment toolbar":"","Text alternative":"Vaihtoehtoinen teksti","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL-osoite ei voi olla tyhjä.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Linkillä ei ole URL-osoitetta","This media URL is not supported.":"",Tiny:"Hyvin pieni","Tip: Paste the URL into the content to embed faster.":"",Turquoise:"Turkoosi",Underline:"Alleviivaus",Undo:"Peru",Unlink:"Poista linkki","Upload failed":"Lataus epäonnistui","Upload in progress":"Lähetys käynnissä","Vertical text alignment toolbar":"",White:"Valkoinen",Width:"",Yellow:"Keltainen","Yellow marker":""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/fr.js b/public/js/ckedit5/20.0.0/translations/fr.js new file mode 100644 index 0000000..7168238 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/fr.js @@ -0,0 +1 @@ +(function(d){ const l = d['fr'] = d['fr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 sur %1","Align cell text to the bottom":"Aligner le texte en bas","Align cell text to the center":"Aligner la cellule au centre","Align cell text to the left":"Aligner la cellule à gauche","Align cell text to the middle":"Aligner le texte au milieu","Align cell text to the right":"Aligner la cellule à droite","Align cell text to the top":"Aligner le texte en haut","Align center":"Centrer","Align left":"Aligner à gauche","Align right":"Aligner à droite","Align table to the left":"Aligner le tableau à gauche","Align table to the right":"Aligner le tableau à droite",Alignment:"Alignement",Aquamarine:"Bleu vert",Background:"Fond",Big:"Grand",Black:"Noir","Block quote":"Citation",Blue:"Bleu","Blue marker":"Marqueur bleu",Bold:"Gras",Border:"Bordure","Bulleted List":"Liste à puces",Cancel:"Annuler","Cell properties":"Propriétés de la cellule","Center table":"Centrer le tableau ","Centered image":"Image centrée","Change image text alternative":"Changer le texte alternatif à l’image","Choose heading":"Choisir l'en-tête",Code:"Code",Color:"Couleur","Color picker":"",Column:"Colonne",Dashed:"Tirets","Decrease indent":"Diminuer le retrait",Default:"Par défaut","Delete column":"Supprimer la colonne","Delete row":"Supprimer la ligne","Dim grey":"Gris pâle",Dimensions:"Dimensions","Document colors":"Couleurs du document",Dotted:"Pointillés",Double:"Double",Downloadable:"Fichier téléchargeable","Dropdown toolbar":"Barre d'outils dans un menu déroulant","Edit link":"Modifier le lien","Editor toolbar":"Barre d'outils de l'éditeur","Enter image caption":"Saisir la légende de l’image","Font Background Color":"Couleur d'arrière-plan","Font Color":"Couleur de police","Font Family":"Police","Font Size":"Taille de police","Full size image":"Image taille réelle",Green:"Vert","Green marker":"Marqueur vert","Green pen":"Crayon vert",Grey:"Gris",Groove:"Rainuré","Header column":"Colonne d'entête","Header row":"Ligne d'entête",Heading:"En-tête","Heading 1":"Titre 1","Heading 2":"Titre 2","Heading 3":"Titre 3","Heading 4":"Titre 4","Heading 5":"Titre 5","Heading 6":"Titre 6",Height:"Hauteur",Highlight:"Surlignage","Horizontal text alignment toolbar":"Barre d'outils pour modifier l'alignement horizontal du texte",Huge:"Enorme","Image toolbar":"Barre d'outils des images","image widget":"Objet image","Increase indent":"Augmenter le retrait","Insert code block":"Insérer un bloque de code","Insert column left":"Insérer une colonne à gauche","Insert column right":"Insérer une colonne à droite","Insert image":"Insérer une image","Insert media":"Insérer un média","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Insérer une ligne au-dessus","Insert row below":"Insérer une ligne en-dessous","Insert table":"Insérer un tableau",Inset:"Relief intérieur",Italic:"Italique",Justify:"Justifier","Justify cell text":"Justifier le contenu de la cellule","Left aligned image":"Image alignée à gauche","Light blue":"Bleu clair","Light green":"Vert clair","Light grey":"Gris clair",Link:"Lien","Link URL":"URL du lien","Media URL":"URL de média","media widget":"widget média","Merge cell down":"Fusionner la cellule en-dessous","Merge cell left":"Fusionner la cellule à gauche","Merge cell right":"Fusionner la cellule à droite","Merge cell up":"Fusionner la cellule au-dessus","Merge cells":"Fusionner les cellules",Next:"Suivant",None:"Aucun","Numbered List":"Liste numérotée","Open in a new tab":"Ouvrir dans un nouvel onglet","Open link in new tab":"Ouvrir le lien dans un nouvel onglet",Orange:"Orange",Outset:"Relief extérieur",Padding:"Remplissage pour aérer le texte",Paragraph:"Paragraphe","Paste the media URL in the input.":"Coller l'URL du média","Pink marker":"Marqueur rose","Plain text":"Texte brute",Previous:"Précedent",Purple:"Violet",Red:"Rouge","Red pen":"Crayon rouge",Redo:"Restaurer","Remove color":"Enlever la couleur","Remove highlight":"Enlever le surlignage","Rich Text Editor":"Éditeur de texte enrichi","Rich Text Editor, %0":"Éditeur de texte enrichi, %0",Ridge:"Relief","Right aligned image":"Image alignée à droite",Row:"Ligne",Save:"Enregistrer","Select column":"","Select row":"","Show more items":"Montrer plus d'éléments","Side image":"Image latérale",Small:"Petit",Solid:"Continu","Split cell horizontally":"Scinder la cellule horizontalement","Split cell vertically":"Scinder la cellule verticalement",Style:"Style","Table alignment toolbar":"Barre d'outils pour modifier l'alignement du tableau","Table cell text alignment":"Alignement du texte de la cellule","Table properties":"Propriétés du tableau","Table toolbar":"Barre d'outils des tableaux","Text alignment":"Alignement du texte","Text alignment toolbar":"Barre d'outils d'alignement du texte","Text alternative":"Texte alternatif","Text highlight toolbar":"Barre d'outils du surlignage","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"La couleur est invalide. Essayez \"#FF0000\" ou \"rgb(255,0,0)\" ou \"red\".","The URL must not be empty.":"L'URL ne doit pas être vide.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"La valeur est invalide. Essayez \"10px\" ou \"2em\" ou simplement \"2\".","This link has no URL":"Ce lien n'a pas d'URL","This media URL is not supported.":"Cette URL de média n'est pas supportée.",Tiny:"Minuscule","Tip: Paste the URL into the content to embed faster.":"Astuce : Copier l'URL du média dans le contenu pour l'insérer plus rapidement",Turquoise:"Turquoise",Underline:"Souligné",Undo:"Annuler",Unlink:"Supprimer le lien","Upload failed":"Échec de l'envoi","Upload in progress":"Téléchargement en cours","Vertical text alignment toolbar":"Barre d'outils pour modifier l'alignement vertical du texte",White:"Blanc","Widget toolbar":"Barre d'outils du widget",Width:"Largeur",Yellow:"Jaune","Yellow marker":"Marqueur jaune"} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/gl.js b/public/js/ckedit5/20.0.0/translations/gl.js new file mode 100644 index 0000000..f3fa532 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/gl.js @@ -0,0 +1 @@ +(function(d){ const l = d['gl'] = d['gl'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 de %1","Align cell text to the bottom":"Aliñar o texto da cela á base","Align cell text to the center":"Aliñar o texto da cela ao centro","Align cell text to the left":"Aliñar o texto da cela á esquerda","Align cell text to the middle":"Aliñar o texto da cela ao medio","Align cell text to the right":"Aliña o texto da cela á dereita","Align cell text to the top":"Aliñar o texto da cela á parte superior","Align center":"Centrar horizontalmente","Align left":"Aliñar á esquerda","Align right":"Aliñar á dereita","Align table to the left":"Aliñar a táboa á esquerda","Align table to the right":"Aliñar a táboa á dereita",Alignment:"Aliñamento",Aquamarine:"Augamariña",Background:"Fondo",Big:"Grande",Black:"Negro","Block quote":"Cita de bloque",Blue:"Azul","Blue marker":"Marcador azul",Bold:"Negra",Border:"Bordo","Bulleted List":"Lista viñeteada",Cancel:"Cancelar","Cell properties":"Propiedades da cela","Center table":"Centrar a táboa","Centered image":"Imaxe centrada horizontalmente","Change image text alternative":"Cambiar o texto alternativo da imaxe","Choose heading":"Escolla o título",Code:"Código",Color:"Cor","Color picker":"Selector de cores",Column:"Columna",Dashed:"Raiado","Decrease indent":"Reducir sangrado",Default:"Predeterminada","Delete column":"Eliminar columna","Delete row":"Eliminar fila","Dim grey":"Gris fume",Dimensions:"Dimensións","Document colors":"Cores do documento",Dotted:"Punteado",Double:"Dobre",Downloadable:"Descargábel","Dropdown toolbar":"Barra de ferramentas despregábel","Edit link":"Editar a ligazón","Editor toolbar":"Barra de ferramentas do editor","Enter image caption":"Introduza o título da imaxe","Font Background Color":"Cor do fondo da letra","Font Color":"Cor da letra","Font Family":"Familia tipográfica","Font Size":"Tamaño da letra","Full size image":"Imaxe a tamaño completo",Green:"Verde","Green marker":"Marcador verde","Green pen":"Pluma verde",Grey:"Gris",Groove:"Rañura","Header column":"Cabeceira de columna","Header row":"Cabeceira de fila",Heading:"Título","Heading 1":"Título 1","Heading 2":"Título 2","Heading 3":"Título 3","Heading 4":"Título 4","Heading 5":"Título 5","Heading 6":"Título 6",Height:"Alto",Highlight:"Resaltado","Horizontal text alignment toolbar":"Barra de ferramentas de aliñamento de texto horizontal",Huge:"Enorme","Image toolbar":"Barra de ferramentas de imaxe","image widget":"Trebello de imaxe","Increase indent":"Aumentar sangrado","Insert code block":"Inserir bloque de código","Insert column left":"Inserir columna á esquerda","Insert column right":"Inserir columna á dereita","Insert image":"Inserir imaxe","Insert media":"Inserir elemento multimedia","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Inserir fila enriba","Insert row below":"Inserir fila embaixo","Insert table":"Inserir táboa",Inset:"Inserción",Italic:"Itálica",Justify:"Xustificado","Justify cell text":"Xustificar o texto da cela","Left aligned image":"Imaxe aliñada á esquerda","Light blue":"Azul claro","Light green":"Verde claro","Light grey":"Gris claro",Link:"Ligar","Link URL":"URL de ligazón","Media URL":"URL multimedia","media widget":"trebello multimedia","Merge cell down":"Combinar cela cara abaixo","Merge cell left":"Combinar cela cara a esquerda","Merge cell right":"Combinar cela cara a dereita","Merge cell up":"Combinar cela cara arriba","Merge cells":"Combinar celas",Next:"Seguinte",None:"Ningún","Numbered List":"Lista numerada","Open in a new tab":"Abrir nunha nova lapela","Open link in new tab":"Abrir a ligazón nunha nova lapela",Orange:"Laranxa",Outset:"Inicio",Padding:"Recheo",Paragraph:"Parágrafo","Paste the media URL in the input.":"Pegue o URL do medio na entrada.","Pink marker":"Marcador rosa","Plain text":"Texto simple",Previous:"Anterior",Purple:"Púrpura",Red:"Vermello","Red pen":"Pluma vermella",Redo:"Refacer","Remove color":"Retirar a cor","Remove highlight":"Retirar o resaltado","Rich Text Editor":"Editor de texto mellorado","Rich Text Editor, %0":"Editor de texto mellorado, %0",Ridge:"Crista","Right aligned image":"Imaxe aliñada á dereita",Row:"Fila",Save:"Gardar","Select all":"Seleccionar todo","Select column":"Seleccionar columna","Select row":"Seleccionar fila","Show more items":"Amosar máis elementos","Side image":"Lado da imaxe",Small:"Pequena",Solid:"Sólido","Split cell horizontally":"Dividir cela en horizontal","Split cell vertically":"Dividir cela en vertical",Style:"Estilo","Table alignment toolbar":"Barra de ferramentas de aliñamento da táboa","Table cell text alignment":"Aliñamento do texto das celas da táboa","Table properties":"Propiedades da táboa","Table toolbar":"Barra de ferramentas de táboas","Text alignment":"Aliñamento do texto","Text alignment toolbar":"Barra de ferramentas de aliñamento de textos","Text alternative":"Texto alternativo","Text highlight toolbar":"Barra de ferramentas para resaltar texto","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"A cor non é válida. Probe «#FF0000» ou «rgb(255,0,0)» ou «vermello».","The URL must not be empty.":"O URL non debe estar baleiro.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"O valor non é válido. Probe «10px» ou «2em» ou simplemente «2».","This link has no URL":"Esta ligazón non ten URL","This media URL is not supported.":"Este URL multimedia non é compatible.",Tiny:"Diminuta","Tip: Paste the URL into the content to embed faster.":"Consello: Pegue o URL no contido para incrustalo máis rápido.",Turquoise:"Turquesa",Underline:"Subliñado",Undo:"Desfacer",Unlink:"Desligar","Upload failed":"Fallou o envío","Upload in progress":"Envío en proceso","Vertical text alignment toolbar":"Barra de ferramentas de aliñamento de texto vertical",White:"Branco","Widget toolbar":"Barra de ferramentas de trebellos",Width:"Largo",Yellow:"Amarelo","Yellow marker":"Marcador marelo"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/gu.js b/public/js/ckedit5/20.0.0/translations/gu.js new file mode 100644 index 0000000..6dc9286 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/gu.js @@ -0,0 +1 @@ +(function(d){ const l = d['gu'] = d['gu'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"Block quote":" વિચાર ટાંકો",Bold:"ઘાટુ - બોલ્ડ્",Code:"",Italic:"ત્રાંસુ - ઇટલિક્",Underline:"નીચે લિટી - અન્ડરલાઇન્"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/he.js b/public/js/ckedit5/20.0.0/translations/he.js new file mode 100644 index 0000000..045764a --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/he.js @@ -0,0 +1 @@ +(function(d){ const l = d['he'] = d['he'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"0% מתוך %1","Align center":"יישור באמצע","Align left":"יישור לשמאל","Align right":"יישור לימין",Aquamarine:"",Big:"",Black:"","Block quote":"בלוק ציטוט",Blue:"","Blue marker":"סימון כחול",Bold:"מודגש","Bulleted List":"רשימה מנוקדת",Cancel:"ביטול","Centered image":"תמונה ממרוכזת","Change image text alternative":"שינוי טקסט אלטרנטיבי לתמונה","Choose heading":"בחר סוג כותרת",Code:"קוד",Default:"ברירת מחדל","Dim grey":"","Document colors":"",Downloadable:"","Dropdown toolbar":"סרגל כלים נפתח","Edit link":"עריכת קישור","Editor toolbar":"סרגל הכלים","Enter image caption":"הזן כותרת תמונה","Font Background Color":"","Font Color":"","Font Family":"","Font Size":"גודל טקסט","Full size image":"תמונה בפריסה מלאה",Green:"","Green marker":"סימון ירוק","Green pen":"עט ירוק",Grey:"",Heading:"כותרת","Heading 1":"כותרת 1","Heading 2":"כותרת 2","Heading 3":"כותרת 3","Heading 4":"כותרת 4","Heading 5":"כותרת 5","Heading 6":"כותרת 6",Highlight:"הדגשה",Huge:"","Image toolbar":"סרגל תמונה","image widget":"תמונה","Insert image":"הוספת תמונה","Insert paragraph after block":"","Insert paragraph before block":"",Italic:"נטוי",Justify:"מרכוז גבולות","Left aligned image":"תמונה מיושרת לשמאל","Light blue":"","Light green":"","Light grey":"",Link:"קישור","Link URL":"קישור כתובת אתר",Next:"הבא","Numbered List":"רשימה ממוספרת","Open in a new tab":"","Open link in new tab":"פתח קישור בכרטיסייה חדשה",Orange:"",Paragraph:"פיסקה","Pink marker":"סימון וורוד",Previous:"הקודם",Purple:"",Red:"","Red pen":"עט אדום",Redo:"ביצוע מחדש","Remove color":"","Remove highlight":"הסר הדגשה","Rich Text Editor":"עורך טקסט עשיר","Rich Text Editor, %0":"עורך טקסט עשיר, %0","Right aligned image":"תמונה מיושרת לימין",Save:"שמירה","Show more items":"הצד פריטים נוספים","Side image":"תמונת צד",Small:"","Text alignment":"יישור טקסט","Text alignment toolbar":"סרגל כלים יישור טקסט","Text alternative":"טקסט אלטרנטיבי","Text highlight toolbar":"סרגל הדגשת טקסט","This link has no URL":"לקישור זה אין כתובת אתר",Tiny:"",Turquoise:"",Underline:"קו תחתון",Undo:"ביטול",Unlink:"ביטול קישור","Upload failed":"העלאה נכשלה","Upload in progress":"העלאה מתבצעת",White:"","Widget toolbar":"סרגל יישומון",Yellow:"","Yellow marker":"סימון צהוב"} );l.getPluralForm=function(n){return (n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/hr.js b/public/js/ckedit5/20.0.0/translations/hr.js new file mode 100644 index 0000000..5873e0f --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/hr.js @@ -0,0 +1 @@ +(function(d){ const l = d['hr'] = d['hr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 od %1","Align cell text to the bottom":"Tekst ćelije poravnaj prema dolje","Align cell text to the center":"Tekst ćelije poravnaj u sredinu","Align cell text to the left":"Tekst ćelije poravnaj lijevo","Align cell text to the middle":"Tekst ćelije poravnaj u sredinu","Align cell text to the right":"Tekst ćelije poravnaj udesno","Align cell text to the top":"Tekst ćelije poravnaj prema gore","Align center":"Poravnaj po sredini","Align left":"Poravnaj ulijevo","Align right":"Poravnaj udesno","Align table to the left":"Poravnaj tablicu ulijevo","Align table to the right":"Poravnaj tablicu udesno",Alignment:"Poravnanje",Aquamarine:"Akvamarin",Background:"Pozadina",Big:"Veliki",Black:"Crna","Block quote":"Blok citat",Blue:"Plava","Blue marker":"Plavi marker",Bold:"Podebljano",Border:"Granica","Bulleted List":"Obična lista",Cancel:"Poništi","Cell properties":"Svojstva ćelije","Center table":"Centriraj tablicu","Centered image":"Centrirana slika","Change image text alternative":"Promijeni alternativni tekst slike","Choose heading":"Odaberite naslov",Code:"Kod",Color:"Boja","Color picker":"Birač boje",Column:"Kolona",Dashed:"Crtičasta","Decrease indent":"Umanji uvlačenje",Default:"Podrazumijevano","Delete column":"Obriši kolonu","Delete row":"Obriši red","Dim grey":"Tamnosiva",Dimensions:"Dimenzije","Document colors":"Boje dokumenta",Dotted:"Točkasta",Double:"Dvostruka",Downloadable:"Moguće preuzeti","Dropdown toolbar":"Traka padajućeg izbornika","Edit link":"Uredi vezu","Editor toolbar":"Traka uređivača","Enter image caption":"Unesite naslov slike","Font Background Color":"Pozadinska Boja Fonta","Font Color":"Boja Fonta","Font Family":"Obitelj fonta","Font Size":"Veličina fonta","Full size image":"Slika pune veličine",Green:"Zelena","Green marker":"Zeleni marker","Green pen":"Zeleno pero",Grey:"Siva",Groove:"","Header column":"Kolona zaglavlja","Header row":"Red zaglavlja",Heading:"Naslov","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6",Height:"Visina",Highlight:"Istakni","Horizontal text alignment toolbar":"Alatna traka za horizontalno poravnanje teksta",Huge:"Ogroman","Image toolbar":"Traka za slike","image widget":"Slika widget","Increase indent":"Povećaj uvlačenje","Insert code block":"Umetni blok koda","Insert column left":"Umetni stupac lijevo","Insert column right":"Umetni stupac desno","Insert image":"Umetni sliku","Insert media":"Ubaci medij","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Ubaci red iznad","Insert row below":"Ubaci red ispod","Insert table":"Ubaci tablicu",Inset:"",Italic:"Ukošeno",Justify:"Razvuci","Justify cell text":"Razvuci tekst ćelije","Left aligned image":"Lijevo poravnata slika","Light blue":"Svijetloplava","Light green":"Svijetlozelena","Light grey":"Svijetlosiva",Link:"Veza","Link URL":"URL veze","Media URL":"URL medija","media widget":"dodatak za medije","Merge cell down":"Spoji ćelije prema dolje","Merge cell left":"Spoji ćelije prema lijevo","Merge cell right":"Spoji ćelije prema desno","Merge cell up":"Spoji ćelije prema gore","Merge cells":"Spoji ćelije",Next:"Sljedeći",None:"Nikakva","Numbered List":"Brojčana lista","Open in a new tab":"Otvori u novoj kartici","Open link in new tab":"Otvori vezu u novoj kartici",Orange:"Narančasta",Outset:"",Padding:"Podstava",Paragraph:"Paragraf","Paste the media URL in the input.":"Zalijepi URL medija u ulaz.","Pink marker":"Rozi marker","Plain text":"Običan tekst",Previous:"Prethodni",Purple:"Ljubičasta",Red:"Crvena","Red pen":"Crveno pero",Redo:"Ponovi","Remove color":"Ukloni boju","Remove highlight":"Ukloni isticanje","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Ridge:"Greben","Right aligned image":"Slika poravnata desno",Row:"Red",Save:"Snimi","Select all":"Odaberi sve","Select column":"Odaberi stupac","Select row":"Odaberi redak","Show more items":"Prikaži više stavaka","Side image":"Slika sa strane",Small:"Mali",Solid:"Neprekidna","Split cell horizontally":"Razdvoji ćeliju vodoravno","Split cell vertically":"Razdvoji ćeliju okomito",Style:"Stil","Table alignment toolbar":"Alatna traka za poravnanje tablice","Table cell text alignment":"Poravnanje teksta ćelije tablice","Table properties":"Svojstva tablice","Table toolbar":"Traka za tablice","Text alignment":"Poravnanje teksta","Text alignment toolbar":"Traka za poravnanje","Text alternative":"Alternativni tekst","Text highlight toolbar":"Traka za isticanje teksta","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Neispravna boja. Pokušajte \"#FF0000\" ili \"rgb(255,0,0)\" ili \"red\".","The URL must not be empty.":"URL ne smije biti prazan.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Neispravna vrijednost. Pokušajte \"10px\" ili \"2em\" ili jednostavno \"2\".","This link has no URL":"Ova veza nema URL","This media URL is not supported.":"URL nije podržan.",Tiny:"Sićušan","Tip: Paste the URL into the content to embed faster.":"Natuknica: Za brže ugrađivanje zalijepite URL u sadržaj.",Turquoise:"Tirkizna",Underline:"Podcrtavanje",Undo:"Poništi",Unlink:"Ukloni vezu","Upload failed":"Slanje nije uspjelo","Upload in progress":"Slanje u tijeku","Vertical text alignment toolbar":"Alatna traka za vertikalno poravnanje teksta",White:"Bijela","Widget toolbar":"Traka sa spravicama",Width:"Širina",Yellow:"Žuta","Yellow marker":"Žuti marker"} );l.getPluralForm=function(n){return n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/hu.js b/public/js/ckedit5/20.0.0/translations/hu.js new file mode 100644 index 0000000..947d356 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/hu.js @@ -0,0 +1 @@ +(function(d){ const l = d['hu'] = d['hu'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 / %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Középre igazítás","Align left":"Balra igazítás","Align right":"Jobbra igazítás","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Kékeszöld",Background:"",Big:"Nagy",Black:"Fekete","Block quote":"Idézet",Blue:"Kék","Blue marker":"Kék kiemelő",Bold:"Félkövér",Border:"","Bulleted List":"Pontozott lista",Cancel:"Mégsem","Cell properties":"","Center table":"","Centered image":"Középre igazított kép","Change image text alternative":"Helyettesítő szöveg módosítása","Choose heading":"Stílus megadása",Code:"Forráskód",Color:"","Color picker":"",Column:"Oszlop",Dashed:"","Decrease indent":"Behúzás csökkentése",Default:"Alapértelmezett","Delete column":"Oszlop törlése","Delete row":"Sor törlése","Dim grey":"Halvány szürke",Dimensions:"","Document colors":"Dokumentum színek",Dotted:"",Double:"",Downloadable:"Letölthető","Dropdown toolbar":"Lenyíló eszköztár","Edit link":"Link szerkesztése","Editor toolbar":"Szerkesztő eszköztár","Enter image caption":"Képaláírás megadása","Font Background Color":"Betű háttérszín","Font Color":"Betűszín","Font Family":"Betűtípus","Font Size":"Betűméret","Full size image":"Teljes méretű kép",Green:"Zöld","Green marker":"Zöld kiemelő","Green pen":"Zöld toll",Grey:"Szürke",Groove:"","Header column":"Oszlop fejléc","Header row":"Sor fejléc",Heading:"Stílusok","Heading 1":"Címsor 1","Heading 2":"Címsor 2","Heading 3":"Címsor 3","Heading 4":"Címsor 4","Heading 5":"Címsor 5","Heading 6":"Címsor 6",Height:"",Highlight:"Kiemelés","Horizontal text alignment toolbar":"",Huge:"Hatalmas","Image toolbar":"Kép eszköztár","image widget":"képmodul","Increase indent":"Behúzás növelése","Insert code block":"Kód blokk beszúrása","Insert column left":"Oszlop beszúrása balra","Insert column right":"Oszlop beszúrása jobbra","Insert image":"Kép beszúrása","Insert media":"Média beszúrása","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Sor beszúrása fölé","Insert row below":"Sor beszúrása alá","Insert table":"Táblázat beszúrása",Inset:"",Italic:"Dőlt",Justify:"Sorkizárt","Justify cell text":"","Left aligned image":"Balra igazított kép","Light blue":"Világoskék","Light green":"Világoszöld","Light grey":"Világosszürke",Link:"Link","Link URL":"URL link","Media URL":"Média URL","media widget":"Média widget","Merge cell down":"Cellák egyesítése lefelé","Merge cell left":"Cellák egyesítése balra","Merge cell right":"Cellák egyesítése jobbra","Merge cell up":"Cellák egyesítése felfelé","Merge cells":"Cellaegyesítés",Next:"Következő",None:"","Numbered List":"Számozott lista","Open in a new tab":"Megnyitás új lapon","Open link in new tab":"Link megnyitása új ablakban",Orange:"Narancs",Outset:"",Padding:"",Paragraph:"Bekezdés","Paste the media URL in the input.":"Illessze be a média URL-jét.","Pink marker":"Rózsaszín kiemelő","Plain text":"Egyszerű szöveg",Previous:"Előző",Purple:"Lila",Red:"Piros","Red pen":"Piros toll",Redo:"Újra","Remove color":"Szín eltávolítása","Remove highlight":"Kiemelés eltávolítása","Rich Text Editor":"Bővített szövegszerkesztő","Rich Text Editor, %0":"Bővített szövegszerkesztő, %0",Ridge:"","Right aligned image":"Jobbra igazított kép",Row:"Sor",Save:"Mentés","Select all":"Mindet kijelöl","Select column":"","Select row":"","Show more items":"További elemek","Side image":"Oldalsó kép",Small:"Kicsi",Solid:"","Split cell horizontally":"Cella felosztása vízszintesen","Split cell vertically":"Cella felosztása függőlegesen",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Táblázat eszköztár","Text alignment":"Szöveg igazítása","Text alignment toolbar":"Szöveg igazítás eszköztár","Text alternative":"Helyettesítő szöveg","Text highlight toolbar":"Szöveg kiemelés eszköztár","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"Az URL nem lehet üres.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"A link nem tartalmaz URL-t","This media URL is not supported.":"Ez a média URL típus nem támogatott.",Tiny:"Apró","Tip: Paste the URL into the content to embed faster.":"Tipp: Illessze be a média URL-jét a tartalomba.",Turquoise:"Türkiz",Underline:"Aláhúzott",Undo:"Visszavonás",Unlink:"Link eltávolítása","Upload failed":"A feltöltés nem sikerült","Upload in progress":"A feltöltés folyamatban","Vertical text alignment toolbar":"",White:"Fehér","Widget toolbar":"Widget eszköztár",Width:"",Yellow:"Sárga","Yellow marker":"Sárga kiemelő"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/id.js b/public/js/ckedit5/20.0.0/translations/id.js new file mode 100644 index 0000000..ff7eb49 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/id.js @@ -0,0 +1 @@ +(function(d){ const l = d['id'] = d['id'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 dari %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Rata tengah","Align left":"Rata kiri","Align right":"Rata kanan","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Biru laut",Background:"",Big:"Besar",Black:"Hitam","Block quote":"Kutipan",Blue:"Biru","Blue marker":"Marka biru",Bold:"Tebal",Border:"","Bulleted List":"Daftar Tak Berangka",Cancel:"Batal","Cell properties":"","Center table":"","Centered image":"Gambar rata tengah","Change image text alternative":"Ganti alternatif teks gambar","Choose heading":"Pilih tajuk",Code:"Kode",Color:"","Color picker":"",Column:"Kolom",Dashed:"","Decrease indent":"Kurangi indentasi",Default:"Bawaan","Delete column":"Hapus kolom","Delete row":"Hapus baris","Dim grey":"Kelabu gelap",Dimensions:"","Document colors":"Warna dokumen",Dotted:"",Double:"",Downloadable:"Dapat diunduh","Dropdown toolbar":"Alat dropdown","Edit link":"Sunting tautan","Editor toolbar":"Alat editor","Enter image caption":"Tambahkan deskripsi gambar","Font Background Color":"Warna Latar Huruf","Font Color":"Warna Huruf","Font Family":"Jenis Huruf","Font Size":"Ukuran Huruf","Full size image":"Gambar ukuran penuh",Green:"Hijau","Green marker":"Marka hijau","Green pen":"Pena hijau",Grey:"Kelabu",Groove:"","Header column":"Kolom tajuk","Header row":"Baris tajuk",Heading:"Tajuk","Heading 1":"Tajuk 1","Heading 2":"Tajuk 2","Heading 3":"Tajuk 3","Heading 4":"Tajuk 4","Heading 5":"Tajuk 5","Heading 6":"Tajuk 6",Height:"",Highlight:"Tanda","Horizontal text alignment toolbar":"",Huge:"Sangat Besar","Image toolbar":"Alat gambar","image widget":"widget gambar","Increase indent":"Tambah indentasi","Insert code block":"Sisipkan blok kode","Insert column left":"Sisipkan kolom ke kiri","Insert column right":"Sisipkan kolom ke kanan","Insert image":"Sisipkan gambar","Insert media":"Sisipkan media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Sisipkan baris ke atas","Insert row below":"Sisipkan baris ke bawah","Insert table":"Sisipkan tabel",Inset:"",Italic:"Miring",Justify:"Rata kanan-kiri","Justify cell text":"","Left aligned image":"Gambar rata kiri","Light blue":"Biru terang","Light green":"Hijau terang","Light grey":"Kelabu terang",Link:"Tautan","Link URL":"URL tautan","Media URL":"URL Media","media widget":"widget media","Merge cell down":"Gabungkan sel ke bawah","Merge cell left":"Gabungkan sel ke kiri","Merge cell right":"Gabungkan sel ke kanan","Merge cell up":"Gabungkan sel ke atas","Merge cells":"Gabungkan sel",Next:"Berikutnya",None:"","Numbered List":"Daftar Berangka","Open in a new tab":"Buka di tab baru","Open link in new tab":"Buka tautan di tab baru",Orange:"Jingga",Outset:"",Padding:"",Paragraph:"Paragraf","Paste the media URL in the input.":"Tempelkan URL ke dalam bidang masukan.","Pink marker":"Marka merah jambu","Plain text":"Teks mentah",Previous:"Sebelumnya",Purple:"Ungu",Red:"Merah","Red pen":"Pena merah",Redo:"Lakukan lagi","Remove color":"Hapus warna","Remove highlight":"Hapus tanda","Rich Text Editor":"Editor Teks Kaya","Rich Text Editor, %0":"Editor Teks Kaya, %0",Ridge:"","Right aligned image":"Gambar rata kanan",Row:"Baris",Save:"Simpan","Select column":"","Select row":"","Show more items":"","Side image":"Gambar sisi",Small:"Kecil",Solid:"","Split cell horizontally":"Bagikan sel secara horizontal","Split cell vertically":"Bagikan sel secara vertikal",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Alat tabel","Text alignment":"Perataan teks","Text alignment toolbar":"Alat perataan teks","Text alternative":"Alternatif teks","Text highlight toolbar":"Alat penanda teks","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL tidak boleh kosong.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Tautan ini tidak memiliki URL","This media URL is not supported.":"URL media ini tidak didukung.",Tiny:"Sangat Kecil","Tip: Paste the URL into the content to embed faster.":"Tip: Tempelkan URL ke bagian konten untuk sisip cepat.",Turquoise:"Turkish",Underline:"Garis bawah",Undo:"Batal",Unlink:"Hapus tautan","Upload failed":"Gagal mengunggah","Upload in progress":"Sedang mengunggah","Vertical text alignment toolbar":"",White:"Putih","Widget toolbar":"Alat widget",Width:"",Yellow:"Kuning","Yellow marker":"Marka kuning"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/it.js b/public/js/ckedit5/20.0.0/translations/it.js new file mode 100644 index 0000000..f3680c9 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/it.js @@ -0,0 +1 @@ +(function(d){ const l = d['it'] = d['it'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 di %1","Align cell text to the bottom":"Allinea il testo della cella in basso","Align cell text to the center":"Allinea il testo della cella al centro","Align cell text to the left":"Allinea il testo della cella a sinistra","Align cell text to the middle":"Allinea il testo della cella in mezzo","Align cell text to the right":"Allinea il testo della cella a destra","Align cell text to the top":"Allinea il testo della cella in alto","Align center":"Allinea al centro","Align left":"Allinea a sinistra","Align right":"Allinea a destra","Align table to the left":"Allinea tabella a sinistra","Align table to the right":"Allinea tabella a destra",Alignment:"Allineamento",Aquamarine:"Aquamarina",Background:"Sfondo",Big:"Grandi",Black:"Nero","Block quote":"Blocco citazione",Blue:"Blu","Blue marker":"Contrassegno blu",Bold:"Grassetto",Border:"Bordo","Bulleted List":"Elenco puntato",Cancel:"Annulla","Cell properties":"Proprietà cella","Center table":"Allinea tabella al centro","Centered image":"Immagine centrata","Change image text alternative":"Cambia testo alternativo dell'immagine","Choose heading":"Seleziona intestazione",Code:"Codice",Color:"Colore","Color picker":"Selezione colore",Column:"Colonna",Dashed:"Tratteggiato","Decrease indent":"Riduci rientro",Default:"Predefinito","Delete column":"Elimina colonna","Delete row":"Elimina riga","Dim grey":"Grigio tenue",Dimensions:"Dimensioni","Document colors":"Colori del docmento",Dotted:"Punteggiato",Double:"Doppio",Downloadable:"Scaricabile","Dropdown toolbar":"Barra degli strumenti del menu a discesa","Edit link":"Modifica collegamento","Editor toolbar":"Barra degli strumenti dell'editor","Enter image caption":"inserire didascalia dell'immagine","Font Background Color":"Colore di sfondo caratteri","Font Color":"Colore caratteri","Font Family":"Tipo di caratteri","Font Size":"Dimensione caratteri","Full size image":"Immagine a dimensione intera",Green:"Verde","Green marker":"Contrassegno verde","Green pen":"Penna verde",Grey:"Grigio",Groove:"Scanalatura","Header column":"Intestazione colonna","Header row":"Riga d'intestazione",Heading:"Intestazione","Heading 1":"Intestazione 1","Heading 2":"Intestazione 2","Heading 3":"Intestazione 3","Heading 4":"Intestazione 4","Heading 5":"Intestazione 5","Heading 6":"Intestazione 6",Height:"Altezza",Highlight:"Evidenzia","Horizontal text alignment toolbar":"Barra degli strumenti dell'allineamento orizzontale del testo",Huge:"Grandissimi","Image toolbar":"Barra degli strumenti dell'immagine","image widget":"Widget immagine","Increase indent":"Aumenta rientro","Insert code block":"Inserisci blocco di codice","Insert column left":"Inserisci colonna a sinistra","Insert column right":"Inserisci colonna a destra","Insert image":"Inserisci immagine","Insert media":"Inserisci media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Inserisci riga sopra","Insert row below":"Inserisci riga sotto","Insert table":"Inserisci tabella",Inset:"Incassato",Italic:"Corsivo",Justify:"Giustifica","Justify cell text":"Testo della cella giustificato","Left aligned image":"Immagine allineata a sinistra","Light blue":"Azzurro","Light green":"Verde chiaro","Light grey":"Grigio chiaro",Link:"Collegamento","Link URL":"URL del collegamento","Media URL":"URL media","media widget":"widget media","Merge cell down":"Unisci cella sotto","Merge cell left":"Unisci cella a sinistra","Merge cell right":"Unisci cella a destra","Merge cell up":"Unisci cella sopra","Merge cells":"Unisci celle",Next:"Avanti",None:"Nessuno","Numbered List":"Elenco numerato","Open in a new tab":"Apri in una nuova scheda","Open link in new tab":"Apri collegamento in nuova scheda",Orange:"Arancio",Outset:"Rialzato",Padding:"Spaziatura interna",Paragraph:"Paragrafo","Paste the media URL in the input.":"Incolla l'URL del file multimediale nell'input.","Pink marker":"Contrassegno rosa","Plain text":"Testo semplice",Previous:"Indietro",Purple:"Porpora",Red:"Rosso","Red pen":"Penna rossa",Redo:"Ripristina","Remove color":"Rimuovi colore","Remove highlight":"Rimuovi evidenziazione","Rich Text Editor":"Editor di testo formattato","Rich Text Editor, %0":"Editor di testo formattato, %0",Ridge:"Rilievo","Right aligned image":"Immagine allineata a destra",Row:"Riga",Save:"Salva","Select all":"Seleziona tutto","Select column":"Seleziona colonna","Select row":"Seleziona riga","Show more items":"Mostra più elementi","Side image":"Immagine laterale",Small:"Piccoli",Solid:"Solido","Split cell horizontally":"Dividi cella orizzontalmente","Split cell vertically":"Dividi cella verticalmente",Style:"Stile","Table alignment toolbar":"Barra degli strumenti dell'allineamento della tabella","Table cell text alignment":"Allineamento del testo nella cella della tabella","Table properties":"Proprietà tabella","Table toolbar":"Barra degli strumenti della tabella","Text alignment":"Allineamento del testo","Text alignment toolbar":"Barra degli strumenti dell'allineamento","Text alternative":"Testo alternativo","Text highlight toolbar":"Barra degli strumenti dell'evidenziazione del testo","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Il colore non è valido. Provare \"#FF0000\" o \"rgb(255,0,0)\" o \"red\".","The URL must not be empty.":"L'URL non può essere vuoto.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Il valore non è valido. Provare \"10px\" o \"2em\" o semplicemente \"2\".","This link has no URL":"Questo collegamento non ha un URL","This media URL is not supported.":"Questo URL di file multimediali non è supportato.",Tiny:"Piccolissimi","Tip: Paste the URL into the content to embed faster.":"Consiglio: incolla l'URL nel contenuto per un'incorporazione più veloce.",Turquoise:"Turchese",Underline:"Sottolineato",Undo:"Annulla",Unlink:"Elimina collegamento","Upload failed":"Caricamento fallito","Upload in progress":"Caricamento in corso","Vertical text alignment toolbar":"Barra degli strumenti dell'allineamento verticale del testo",White:"Bianco","Widget toolbar":"Barra degli strumenti del widget",Width:"Larghezza",Yellow:"Giallo","Yellow marker":"Contrassegno giallo"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/ja.js b/public/js/ckedit5/20.0.0/translations/ja.js new file mode 100644 index 0000000..0b80493 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/ja.js @@ -0,0 +1 @@ +(function(d){ const l = d['ja'] = d['ja'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"中央揃え","Align left":"左揃え","Align right":"右揃え","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Black:"","Block quote":"ブロッククオート(引用)",Blue:"","Blue marker":"青のマーカー",Bold:"ボールド",Border:"","Bulleted List":"箇条書きリスト",Cancel:"キャンセル","Cell properties":"","Center table":"","Centered image":"中央寄せ画像","Change image text alternative":"画像の代替テキストを変更","Choose heading":"見出しを選択",Code:"コード",Color:"","Color picker":"",Column:"列",Dashed:"","Decrease indent":"インデントの削除","Delete column":"列を削除","Delete row":"行を削除","Dim grey":"",Dimensions:"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"リンクを編集","Editor toolbar":"","Enter image caption":"画像の注釈を入力","Full size image":"フルサイズ画像",Green:"","Green marker":"緑のマーカー","Green pen":"緑のペン",Grey:"",Groove:"","Header column":"見出し列","Header row":"見出し行",Heading:"見出し","Heading 1":"見出し1","Heading 2":"見出し2","Heading 3":"見出し3 ","Heading 4":"","Heading 5":"","Heading 6":"",Height:"",Highlight:"ハイライト","Horizontal text alignment toolbar":"","Image toolbar":"画像","image widget":"画像ウィジェット","Increase indent":"インデントの追加","Insert code block":"コードブロックの挿入","Insert column left":"","Insert column right":"","Insert image":"画像挿入","Insert media":"メディアの挿入","Insert row above":"上に行を挿入","Insert row below":"下に行を挿入","Insert table":"表の挿入",Inset:"",Italic:"イタリック",Justify:"両端揃え","Justify cell text":"","Left aligned image":"左寄せ画像","Light blue":"","Light green":"","Light grey":"",Link:"リンク","Link URL":"リンクURL","Media URL":"メディアURL","media widget":"メディアウィジェット","Merge cell down":"下のセルと結合","Merge cell left":"左のセルと結合","Merge cell right":"右のセルと結合","Merge cell up":"上のセルと結合","Merge cells":"セルを結合",Next:"",None:"","Numbered List":"番号付きリスト","Open in a new tab":"","Open link in new tab":"新しいタブでリンクを開く",Orange:"",Outset:"",Padding:"",Paragraph:"パラグラフ","Paste the media URL in the input.":"URLを入力欄にコピー","Pink marker":"ピンクのマーカー","Plain text":"プレインテキスト",Previous:"",Purple:"",Red:"","Red pen":"赤のマーカー",Redo:"やり直し","Remove color":"","Remove highlight":"ハイライトの削除","Rich Text Editor":"リッチテキストエディター","Rich Text Editor, %0":"リッチテキストエディター, %0",Ridge:"","Right aligned image":"右寄せ画像",Row:"行",Save:"保存","Select column":"","Select row":"","Show more items":"","Side image":"サイドイメージ",Solid:"","Split cell horizontally":"縦にセルを分離","Split cell vertically":"横にセルを分離",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"文字揃え","Text alignment toolbar":"テキストの整列","Text alternative":"代替テキスト","Text highlight toolbar":"テキストのハイライト","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"空のURLは許可されていません。","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"リンクにURLが設定されていません","This media URL is not supported.":"このメディアのURLはサポートされていません。","Tip: Paste the URL into the content to embed faster.":"",Turquoise:"",Underline:"アンダーライン",Undo:"元に戻す",Unlink:"リンク解除","Upload failed":"アップロード失敗","Upload in progress":"アップロード中","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:"","Yellow marker":"黄色のマーカー"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/km.js b/public/js/ckedit5/20.0.0/translations/km.js new file mode 100644 index 0000000..d21a5a0 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/km.js @@ -0,0 +1 @@ +(function(d){ const l = d['km'] = d['km'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"ប្លុក​ពាក្យ​សម្រង់",Blue:"",Bold:"ដិត","Bulleted List":"បញ្ជី​ជា​ចំណុច",Cancel:"បោះបង់","Centered image":"","Change image text alternative":"","Choose heading":"ជ្រើសរើស​ក្បាលអត្ថបទ",Code:"","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"បញ្ចូល​ពាក្យ​ពណ៌នា​រូបភាព","Full size image":"រូបភាព​ពេញ​ទំហំ",Green:"",Grey:"",Heading:"ក្បាលអត្ថបទ","Heading 1":"ក្បាលអត្ថបទ 1","Heading 2":"ក្បាលអត្ថបទ 2","Heading 3":"ក្បាលអត្ថបទ 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"វិដជិត​រូបភាព","Insert image":"បញ្ចូល​រូបភាព",Italic:"ទ្រេត","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"តំណ","Link URL":"URL តំណ",Next:"","Numbered List":"បញ្ជី​ជា​លេខ","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"កថាខណ្ឌ",Previous:"",Purple:"",Red:"",Redo:"ធ្វើ​វិញ","Remove color":"","Rich Text Editor":"កម្មវិធី​កែសម្រួល​អត្ថបទ​សម្បូរបែប","Rich Text Editor, %0":"កម្មវិធី​កែសម្រួល​អត្ថបទ​សម្បូរបែប, %0","Right aligned image":"",Save:"រក្សាទុ","Show more items":"","Side image":"រូបភាព​នៅ​ខាង","Text alternative":"","This link has no URL":"",Turquoise:"",Underline:"គូស​បន្ទាត់​ក្រោម",Undo:"លែង​ធ្វើ​វិញ",Unlink:"ផ្ដាច់​តំណ","Upload failed":"អាប់ឡូត​មិនបាន",White:"",Yellow:""} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/kn.js b/public/js/ckedit5/20.0.0/translations/kn.js new file mode 100644 index 0000000..6f5e78a --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/kn.js @@ -0,0 +1 @@ +(function(d){ const l = d['kn'] = d['kn'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"‍‍‍‍ಗುರುತಿಸಲಾದ ‍‍ಉಲ್ಲೇಖ",Blue:"",Bold:"‍‍ದಪ್ಪ","Bulleted List":"‍‍ಬುಲೆಟ್ ಪಟ್ಟಿ",Cancel:"ರದ್ದುಮಾಡು","Centered image":"","Change image text alternative":"‍ಚಿತ್ರದ ಬದಲಿ ಪಠ್ಯ ಬದಲಾಯಿಸು","Choose heading":"ಶೀರ್ಷಿಕೆ ಆಯ್ಕೆಮಾಡು",Code:"","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"‍ಚಿತ್ರದ ಶೀರ್ಷಿಕೆ ಸೇರಿಸು","Full size image":"‍ಪೂರ್ಣ ‍‍ಅಳತೆಯ ಚಿತ್ರ",Green:"",Grey:"",Heading:"ಶೀರ್ಷಿಕೆ","Heading 1":"ಶೀರ್ಷಿಕೆ 1","Heading 2":"ಶೀರ್ಷಿಕೆ 2","Heading 3":"ಶೀರ್ಷಿಕೆ 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"‍ಚಿತ್ರ ವಿಜೆಟ್","Insert image":"",Italic:"‍ಇಟಾಲಿಕ್","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"‍ಕೊಂಡಿ","Link URL":"‍ಕೊಂಡಿ ಸಂಪರ್ಕಿಸು",Next:"","Numbered List":"‍ಸಂಖ್ಯೆಯ ಪಟ್ಟಿ‍","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"ಪ್ಯಾರಾಗ್ರಾಫ್",Previous:"",Purple:"",Red:"",Redo:"‍ಮತ್ತೆ ಮಾಡು","Remove color":"","Rich Text Editor":"‍ಸಮೃದ್ಧ ಪಠ್ಯ ಸಂಪಾದಕ‍‍","Rich Text Editor, %0":"‍ಸಮೃದ್ಧ ಪಠ್ಯ ಸಂಪಾದಕ‍, %0","Right aligned image":"",Save:"ಉಳಿಸು","Show more items":"","Side image":"‍ಪಕ್ಕದ ಚಿತ್ರ","Text alternative":"‍ಪಠ್ಯದ ಬದಲಿ","This link has no URL":"",Turquoise:"",Underline:"",Undo:"‍‍ರದ್ದು",Unlink:"‍ಕೊಂಡಿ ತೆಗೆ","Upload failed":"",White:"",Yellow:""} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/ko.js b/public/js/ckedit5/20.0.0/translations/ko.js new file mode 100644 index 0000000..219c921 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/ko.js @@ -0,0 +1 @@ +(function(d){ const l = d['ko'] = d['ko'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"가운데 맞춤","Align left":"왼쪽 맞춤","Align right":"오른쪽 맞춤","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"연한 청록색",Background:"",Big:"큰",Black:"검정","Block quote":"인용 단락",Blue:"파랑",Bold:"굵게",Border:"","Bulleted List":"글머리기호",Cancel:"취소","Cell properties":"","Center table":"","Centered image":"가운데 정렬","Change image text alternative":"대체 텍스트 변경","Choose heading":"제목 선택",Code:"소스",Color:"","Color picker":"",Column:"",Dashed:"","Decrease indent":"내어쓰기",Default:"기본","Delete column":"","Delete row":"","Dim grey":"진한 회색",Dimensions:"","Document colors":"문서 색상들",Dotted:"",Double:"",Downloadable:"다운로드 가능","Dropdown toolbar":"드롭다운 툴바","Edit link":"링크 편집","Editor toolbar":"에디터 툴바","Enter image caption":"이미지 설명을 입력하세요","Font Background Color":"글자 배경색","Font Color":"글자 색상","Font Family":"글꼴","Font Size":"글자 크기","Full size image":"문서 너비",Green:"초록",Grey:"회색",Groove:"","Header column":"","Header row":"",Heading:"제목","Heading 1":"제목1","Heading 2":"제목2","Heading 3":"제목3","Heading 4":"제목4","Heading 5":"제목5","Heading 6":"제목6",Height:"","Horizontal text alignment toolbar":"",Huge:"매우 큰","Image toolbar":"이미지 툴바","image widget":"이미지 위젯","Increase indent":"들여쓰기","Insert column left":"","Insert column right":"","Insert image":"이미지 삽입","Insert media":"미디어 삽입","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"","Insert row below":"","Insert table":"테이블 삽입",Inset:"",Italic:"기울임꼴",Justify:"양쪽 맞춤","Justify cell text":"","Left aligned image":"왼쪽 정렬","Light blue":"연한 파랑","Light green":"밝은 초록","Light grey":"밝은 회색",Link:"링크","Link URL":"링크 주소","Media URL":"미디어 URL","media widget":"미디어 위젯","Merge cell down":"","Merge cell left":"","Merge cell right":"","Merge cell up":"","Merge cells":"",Next:"다음",None:"","Numbered List":"번호매기기","Open in a new tab":"새 탭에서 열기","Open link in new tab":"새 탭에서 링크 열기",Orange:"주황",Outset:"",Padding:"",Paragraph:"문단","Paste the media URL in the input.":"미디어 URL을 입력해주세요.",Previous:"이전",Purple:"보라",Red:"빨강",Redo:"다시 실행","Remove color":"색상 지우기","Rich Text Editor":"","Rich Text Editor, %0":"",Ridge:"","Right aligned image":"오른쪽 정렬",Row:"",Save:"저장","Select all":"전체 선택","Select column":"","Select row":"","Show more items":"더보기","Side image":"내부 우측 정렬",Small:"작은",Solid:"","Split cell horizontally":"","Split cell vertically":"",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"텍스트 정렬","Text alignment toolbar":"텍스트 정렬 툴바","Text alternative":"대체 텍스트","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL이 비어있습니다.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"이 링크에는 URL이 없습니다.","This media URL is not supported.":"이 URL은 지원되지 않습니다.",Tiny:"매우 작은","Tip: Paste the URL into the content to embed faster.":"Tip: URL을 복사 후 붙여넣기하면 더 빠릅니다.",Turquoise:"청록색",Underline:"밑줄",Undo:"실행 취소",Unlink:"링크 삭제","Upload failed":"업로드 실패","Upload in progress":"업로드 진행 중","Vertical text alignment toolbar":"",White:"흰색","Widget toolbar":"위젯 툴바",Width:"",Yellow:"노랑"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/ku.js b/public/js/ckedit5/20.0.0/translations/ku.js new file mode 100644 index 0000000..f99bc2f --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/ku.js @@ -0,0 +1 @@ +(function(d){ const l = d['ku'] = d['ku'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 لە %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"بەهێڵکردنی ناورەڕاست","Align left":"بەهێڵکردنی چەپ","Align right":"بەهێڵکردنی ڕاست","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"شینی دەریایی",Background:"",Big:"گەورە",Black:"ڕەش","Block quote":"وتەی وەرگیراو",Blue:"شین","Blue marker":"نیشانەکەری شین",Bold:"قەڵەو",Border:"","Bulleted List":"لیستەی خاڵەیی",Cancel:"هەڵوەشاندنەوە","Cell properties":"","Center table":"","Centered image":"ناوەڕاستکراوی وێنە","Change image text alternative":"گۆڕینی جێگروەی تێکیسی وێنە","Choose heading":"سەرنووسە هەڵبژێرە",Code:"کۆد",Color:"","Color picker":"",Column:"ستوون",Dashed:"","Decrease indent":"کەمکردنەوەی بۆشایی",Default:"بنچینە","Delete column":"سڕینەوەی ستوون","Delete row":"سڕینەوەی ڕیز","Dim grey":"ڕەساسی تاریک",Dimensions:"","Document colors":"ڕەنگەکانی دۆکومێنت",Dotted:"",Double:"",Downloadable:"Downloadable","Dropdown toolbar":"تووڵامرازی لیستەیی","Edit link":"دەستکاری بەستەر","Editor toolbar":"تووڵامرازی دەسکاریکەر","Enter image caption":"سەردێڕی وێنە دابنێ","Font Background Color":"ڕەنگی پاشبنەمای فۆنت","Font Color":"ڕەنگی فۆنت","Font Family":"فۆنتی خێزانی","Font Size":"قەبارەی فۆنت","Full size image":"پڕ بەقەبارەی وێنە",Green:"سەوز","Green marker":"نیشانەکەری سەوز","Green pen":"پێنووسی سەوز",Grey:"ڕەساسی",Groove:"","Header column":"ستوونی دەسپێک","Header row":"ڕیزی دەسپێک",Heading:"سەرنووسە","Heading 1":"سەرنووسەی 1","Heading 2":"سەرنووسەی 2","Heading 3":"سەرنووسەی 3","Heading 4":"سەرنووسەی 4","Heading 5":"سەرنووسەی 5","Heading 6":"سەرنووسەی 6",Height:"",Highlight:"بەرچاوکردن","Horizontal text alignment toolbar":"",Huge:"زۆر گەورە","Image toolbar":"تووڵامرازی وێنە","image widget":"وێدجیتی وێنە","Increase indent":"زیادکردنی بۆشایی","Insert code block":"دانانی خشتەی کۆد","Insert column left":"دانانی ستوون لە چەپ","Insert column right":"دانانی ستوون لە ڕاست","Insert image":"وێنە دابنێ","Insert media":"مێدیا دابنێ","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"دانانی ڕیز لە سەرەوە","Insert row below":"دانانی ڕیز لە ژێرەوە","Insert table":"خشتە دابنێ",Inset:"",Italic:"لار",Justify:"هاوستوونی","Justify cell text":"","Left aligned image":"ڕیزکردنی وێنە بۆ لای چەپ","Light blue":"شینی ڕووناک","Light green":"سەوزی ڕووناک","Light grey":"ڕەساسی ڕووناک",Link:"بەستەر","Link URL":"ناونیشانی بەستەر","Media URL":"بەستەری مێدیا","media widget":"ویدجێتتی مێدیا","Merge cell down":"تێکەڵکردنی خانەکان بەرەو ژێرەوە","Merge cell left":"تێکەڵکردنی خانەکان بەرەو چەپ","Merge cell right":"تێکەڵکردنی خانەکان بەرەو ڕاست","Merge cell up":"تێکەڵکردنی خانەکان بەرەو سەر","Merge cells":"تێکەڵکردنی خانەکان",Next:"دواتر",None:"","Numbered List":"لیستەی ژمارەیی","Open in a new tab":"کردنەوەی لە پەنجەرەیەکی نوێ","Open link in new tab":"کردنەوەی بەستەرەکە لە پەڕەیەکی نوێ",Orange:"پرتەقاڵی",Outset:"",Padding:"",Paragraph:"پەراگراف","Paste the media URL in the input.":"بەستەری مێدیاکە لە خانەکە بلکێنە.","Pink marker":"نیشانەکەری پەمەیی","Plain text":"تێکستی سادە",Previous:"پێشتر",Purple:"مۆر",Red:"سور","Red pen":"پێنووسی سۆر",Redo:"هەلگەڕاندنەوە","Remove color":"لابردنی ڕەنگ","Remove highlight":"لابردنی بەرچاوکەر","Rich Text Editor":"سەرنوسەری دەقی بەپیت","Rich Text Editor, %0":"سەرنوسەری دەقی بەپیت, %0",Ridge:"","Right aligned image":"ڕیزکردنی وێنە بۆ لای ڕاست",Row:"ڕیز",Save:"پاشکەوتکردن","Select column":"","Select row":"","Show more items":"بڕگەی زیاتر نیشانبدە","Side image":"لای وێنە",Small:"بچوک",Solid:"","Split cell horizontally":"بەشکردنی خانەکان بە ئاسۆیی","Split cell vertically":"بەشکردنی خانەکان بە ئەستوونی",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"تووڵامرازی خشتە","Text alignment":"ڕیززکردنی تێکست","Text alignment toolbar":"تووڵامرازی ڕیززکردنی تێکست","Text alternative":"جێگرەوەی تێکست","Text highlight toolbar":"تووڵامرازی نیشانکردنی تێکست","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"پێویستە بەستەر بەتاڵ نەبێت.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"ئەم بەستەرە ناونیشانی نیە","This media URL is not supported.":"ئەم بەستەری مێدیایە پاڵپشتی ناکرێت.",Tiny:"گچکە","Tip: Paste the URL into the content to embed faster.":"Tip: Paste the URL into the content to embed faster.",Turquoise:"شینی ئاسمانی",Underline:"ژێرهێڵ",Undo:"وەک خۆی لێ بکەوە",Unlink:"لابردنی بەستەر","Upload failed":"بارکردنەکە سەرنەکەووت","Upload in progress":"بارکردنەکە لە جێبەجێکردن دایە","Vertical text alignment toolbar":"",White:"سپی","Widget toolbar":"تووڵامرازی ویدجێت",Width:"",Yellow:"زەرد","Yellow marker":"نیشانەکەری زەرد"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/lt.js b/public/js/ckedit5/20.0.0/translations/lt.js new file mode 100644 index 0000000..74ad5bd --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/lt.js @@ -0,0 +1 @@ +(function(d){ const l = d['lt'] = d['lt'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Centruoti","Align left":"Lygiuoti į kairę","Align right":"Lygiuoti į dešinę","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Aquamarine",Background:"",Big:"Didelis",Black:"Juoda","Block quote":"Citata",Blue:"Mėlyna","Blue marker":"Mėlynas žymeklis",Bold:"Paryškintas",Border:"","Bulleted List":"Sąrašas",Cancel:"Atšaukti","Cell properties":"","Center table":"","Centered image":"Vaizdas centre","Change image text alternative":"Pakeisti vaizdo alternatyvųjį tekstą","Choose heading":"Pasirinkite antraštę",Code:"Kodas",Color:"","Color picker":"",Column:"Stulpelis",Dashed:"","Decrease indent":"Sumažinti atitraukimą",Default:"Numatyta","Delete column":"Ištrinti stulpelį","Delete row":"Ištrinti eilutę","Dim grey":"Pilkšva",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"Keisti nuorodą","Editor toolbar":"","Enter image caption":"Įveskite vaizdo antraštę","Font Background Color":"Šrifto fono spalva","Font Color":"Šrifto spalva","Font Family":"Šrifto šeima","Font Size":"Šrifto dydis","Full size image":"Pilno dydžio vaizdas",Green:"Žalia","Green marker":"Žalias žymeklis","Green pen":"Žalias žymeklis",Grey:"Pilka",Groove:"","Header column":"Antraštės stulpelis","Header row":"Antraštės eilutė",Heading:"Antraštė","Heading 1":"Antraštė 1","Heading 2":"Antraštė 2","Heading 3":"Antraštė 3","Heading 4":"Antraštė 4","Heading 5":"Antraštė 5","Heading 6":"Antraštė 6",Height:"",Highlight:"Pažymėti žymekliu","Horizontal text alignment toolbar":"",Huge:"Milžiniškas","Image toolbar":"","image widget":"vaizdų valdiklis","Increase indent":"Padidinti atitraukimą","Insert column left":"Įterpti stulpelį kairėje","Insert column right":"Įterpti stulpelį dešinėje","Insert image":"Įterpti vaizdą","Insert media":"Įterpkite media","Insert row above":"Įterpti eilutę aukščiau","Insert row below":"Įterpti eilutę žemiau","Insert table":"Įterpti lentelę",Inset:"",Italic:"Kursyvas",Justify:"Lygiuoti per visą plotį","Justify cell text":"","Left aligned image":"Vaizdas kairėje","Light blue":"Šviesiai mėlyna","Light green":"Šviesiai žalia","Light grey":"Šviesiai pilka",Link:"Pridėti nuorodą","Link URL":"Nuorodos URL","Media URL":"Media URL","media widget":"media valdiklis","Merge cell down":"Prijungti langelį apačioje","Merge cell left":"Prijungti langelį kairėje","Merge cell right":"Prijungti langelį dešinėje","Merge cell up":"Prijungti langelį viršuje","Merge cells":"Sujungti langelius",Next:"",None:"","Numbered List":"Numeruotas rąrašas","Open in a new tab":"","Open link in new tab":"Atidaryti nuorodą naujame skirtuke",Orange:"Oranžinė",Outset:"",Padding:"",Paragraph:"Paragrafas","Paste the media URL in the input.":"Įklijuokite media URL adresą į įvedimo lauką.","Pink marker":"Rožinis žymeklis",Previous:"",Purple:"Violetinė",Red:"Raudona","Red pen":"Raudonas žymeklis",Redo:"Pirmyn","Remove color":"Pašalinti spalvą","Remove highlight":"Panaikinti pažymėjimą","Rich Text Editor":"Raiškiojo teksto redaktorius","Rich Text Editor, %0":"Raiškiojo teksto redaktorius, %0",Ridge:"","Right aligned image":"Vaizdas dešinėje",Row:"Eilutė",Save:"Išsaugoti","Select column":"","Select row":"","Show more items":"","Side image":"Vaizdas šone",Small:"Mažas",Solid:"","Split cell horizontally":"Padalinti langelį horizontaliai","Split cell vertically":"Padalinti langelį vertikaliai",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Teksto lygiavimas","Text alignment toolbar":"","Text alternative":"Alternatyvusis tekstas","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL negali būti tuščias.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Ši nuorda neturi URL","This media URL is not supported.":"Šis media URL yra nepalaikomas.",Tiny:"Mažytis","Tip: Paste the URL into the content to embed faster.":"Patarimas: norėdami greičiau įterpti media tiesiog įklijuokite URL į turinį.",Turquoise:"Turkio",Underline:"Pabrauktas",Undo:"Atgal",Unlink:"Pašalinti nuorodą","Upload failed":"Įkelti nepavyko","Upload in progress":"Įkelima","Vertical text alignment toolbar":"",White:"Balta",Width:"",Yellow:"Geltona","Yellow marker":"Geltonas žymeklis"} );l.getPluralForm=function(n){return (n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/lv.js b/public/js/ckedit5/20.0.0/translations/lv.js new file mode 100644 index 0000000..3ff5216 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/lv.js @@ -0,0 +1 @@ +(function(d){ const l = d['lv'] = d['lv'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 no %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Centrēt","Align left":"Pa kreisi","Align right":"Pa labi","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Akvamarīns",Background:"",Big:"Liels",Black:"Melns","Block quote":"Citāts",Blue:"Zils","Blue marker":"Zils marķieris",Bold:"Trekns",Border:"","Bulleted List":"Nenumurēts Saraksts",Cancel:"Atcelt","Cell properties":"","Center table":"","Centered image":"Centrēts attēls","Change image text alternative":"Mainīt attēla alternatīvo tekstu","Choose heading":"Izvēlēties virsrakstu",Code:"Kods",Color:"","Color picker":"",Column:"Kolonna",Dashed:"","Decrease indent":"Samazināt atkāpi",Default:"Noklusējuma","Delete column":"Dzēst kolonnu","Delete row":"Dzēst rindu","Dim grey":"Blāvi pelēks",Dimensions:"","Document colors":"Krāsas dokumentā",Dotted:"",Double:"",Downloadable:"Lejupielādējams","Dropdown toolbar":"Papildus izvēlnes rīkjosla","Edit link":"Labot Saiti","Editor toolbar":"Redaktora rīkjosla","Enter image caption":"Ievadiet attēla parakstu","Font Background Color":"Fonta fona krāsa","Font Color":"Fonta krāsa","Font Family":"Fonts","Font Size":"Fonta Lielums","Full size image":"Pilna izmēra attēls",Green:"Zaļš","Green marker":"Zaļš marķieris","Green pen":"Zaļa pildspalva",Grey:"Pelēks",Groove:"","Header column":"Šī kolonna ir galvene","Header row":"Šī rinda ir galvene",Heading:"Virsraksts","Heading 1":"Virsraksts 1","Heading 2":"Virsraksts 2","Heading 3":"Virsraksts 3","Heading 4":"Virsraksts 4","Heading 5":"Virsraksts 5","Heading 6":"Virsraksts 6",Height:"",Highlight:"Izcelt","Horizontal text alignment toolbar":"",Huge:"Milzīgs","Image toolbar":"Attēlu rīkjosla","image widget":"attēla sīkrīks","Increase indent":"Palielināt atkāpi","Insert code block":"Ievietot koda bloku","Insert column left":"Ievietot kolonnu pa kreisi","Insert column right":"Ievietot kolonnu pa labi","Insert image":"Ievietot attēlu","Insert media":"Ievietot mediju","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Ievietot rindu virs","Insert row below":"Ievietot rindu zem","Insert table":"Ievietot tabulu",Inset:"",Italic:"Kursīvs",Justify:"Izlīdzināt abas malas","Justify cell text":"","Left aligned image":"Pa kreisi līdzināts attēls","Light blue":"Gaiši zils","Light green":"Gaiši zaļš","Light grey":"Gaiši pelēks",Link:"Saite","Link URL":"Saites URL","Media URL":"Medija URL","media widget":"medija sīkrīks","Merge cell down":"Apvienot šūnas uz leju","Merge cell left":"Apvienot šūnas pa kreisi","Merge cell right":"Apvienot šūnas pa labi","Merge cell up":"Apvienot šūnas uz augšu","Merge cells":"Apvienot šūnas",Next:"Nākamā",None:"","Numbered List":"Numurēts Saraksts","Open in a new tab":"Atvērt jaunā cilnē","Open link in new tab":"Atvērt saiti jaunā cilnē",Orange:"Oranžs",Outset:"",Padding:"",Paragraph:"Pagrāfs","Paste the media URL in the input.":"Ielīmējiet medija URL teksta laukā.","Pink marker":"Rozā marķieris","Plain text":"Vienkāršs teksts",Previous:"Iepriekšējā",Purple:"Violets",Red:"Sarkans","Red pen":"Sarkana pildspalva",Redo:"Uz priekšu","Remove color":"Noņemt krāsu","Remove highlight":"Noņemt izcēlumu","Rich Text Editor":"Bagātinātais Teksta Redaktors","Rich Text Editor, %0":"Bagātinātais Teksta Redaktors, %0",Ridge:"","Right aligned image":"Pa labi līdzināts attēls",Row:"Rinda",Save:"Saglabāt","Select column":"","Select row":"","Show more items":"Parādīt vairāk vienumus","Side image":"Sānā novietots attēls",Small:"Mazs",Solid:"","Split cell horizontally":"Atdalīt šūnu horizontāli","Split cell vertically":"Atdalīt šūnu vertikāli",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Tabulas rīkjosla","Text alignment":"Teksta izlīdzināšana","Text alignment toolbar":"Teksta līdzināšanas rīkjosla","Text alternative":"Alternatīvais teksts","Text highlight toolbar":"Teksta izcēluma rīkjosla","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL ir jābūt ievadītam.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Saitei nav norādīts URL","This media URL is not supported.":"Šis medija URL netiek atbalstīts.",Tiny:"Ļoti mazs","Tip: Paste the URL into the content to embed faster.":"Padoms: Ielīmējiet adresi saturā, lai iegultu",Turquoise:"Tirkīza",Underline:"Pasvītrots",Undo:"Atsaukt",Unlink:"Noņemt Saiti","Upload failed":"Augšupielāde neizdevusies","Upload in progress":"Notiek augšupielāde","Vertical text alignment toolbar":"",White:"Balts","Widget toolbar":"Sīkrīku rīkjosla",Width:"",Yellow:"Dzeltens","Yellow marker":"Dzeltens marķieris"} );l.getPluralForm=function(n){return (n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/nb.js b/public/js/ckedit5/20.0.0/translations/nb.js new file mode 100644 index 0000000..27d3a63 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/nb.js @@ -0,0 +1 @@ +(function(d){ const l = d['nb'] = d['nb'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Midstill","Align left":"Venstrejuster","Align right":"Høyrejuster","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Big:"Stor",Black:"","Block quote":"Blokksitat",Blue:"","Blue marker":"Blå uthevingsfarge",Bold:"Fet",Border:"","Bulleted List":"Punktmerket liste",Cancel:"Avbryt","Cell properties":"","Center table":"","Centered image":"Midtstilt bilde","Change image text alternative":"Endre tekstalternativ for bilde","Choose heading":"Velg overskrift",Code:"Kode",Color:"","Color picker":"",Column:"Kolonne",Dashed:"",Default:"Standard","Delete column":"Slett kolonne","Delete row":"Slett rad","Dim grey":"",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"Rediger lenke","Editor toolbar":"","Enter image caption":"Skriv inn bildetekst","Font Background Color":"","Font Color":"","Font Family":"Skrifttype","Font Size":"Skriftstørrelse","Full size image":"Bilde i full størrelse",Green:"","Green marker":"Grønn uthevingsfarge","Green pen":"Grønn penn",Grey:"",Groove:"","Header column":"Overskriftkolonne","Header row":"Overskriftrad",Heading:"Overskrift","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"","Heading 5":"","Heading 6":"",Height:"",Highlight:"Utheving","Horizontal text alignment toolbar":"",Huge:"Veldig stor","Image toolbar":"","image widget":"Bilde-widget","Insert column left":"","Insert column right":"","Insert image":"Sett inn bilde","Insert row above":"Sett inn rad over","Insert row below":"Sett inn rad under","Insert table":"Sett inn tabell",Inset:"",Italic:"Kursiv",Justify:"Blokkjuster","Justify cell text":"","Left aligned image":"Venstrejustert bilde","Light blue":"","Light green":"","Light grey":"",Link:"Lenke","Link URL":"URL for lenke","Merge cell down":"Slå sammen celle ned","Merge cell left":"Slå sammen celle til venstre","Merge cell right":"Slå sammen celle til høyre","Merge cell up":"Slå sammen celle opp","Merge cells":"Slå sammen celler",Next:"",None:"","Numbered List":"Nummerert liste","Open in a new tab":"","Open link in new tab":"Åpne lenke i ny fane",Orange:"",Outset:"",Padding:"",Paragraph:"Avsnitt","Pink marker":"Rosa uthevingsfarge",Previous:"",Purple:"",Red:"","Red pen":"Rød penn",Redo:"Gjør om","Remove color":"","Remove highlight":"Fjern uthevingsfarge","Rich Text Editor":"Rikteksteditor","Rich Text Editor, %0":"Rikteksteditor, %0",Ridge:"","Right aligned image":"Høyrejustert bilde",Row:"Rad",Save:"Lagre","Select column":"","Select row":"","Show more items":"","Side image":"Sidebilde",Small:"Liten",Solid:"","Split cell horizontally":"Del celle horisontalt","Split cell vertically":"Del celle vertikalt",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Tekstjustering","Text alignment toolbar":"","Text alternative":"Tekstalternativ for bilde","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Denne lenken har ingen URL",Tiny:"Veldig liten",Turquoise:"",Underline:"Understreking",Undo:"Angre",Unlink:"Fjern lenke","Upload failed":"Opplasting feilet","Upload in progress":"Opplasting pågår","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:"","Yellow marker":"Gul uthevingsfarge"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/ne.js b/public/js/ckedit5/20.0.0/translations/ne.js new file mode 100644 index 0000000..6b3cdfa --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/ne.js @@ -0,0 +1 @@ +(function(d){ const l = d['ne'] = d['ne'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"०% मध्ये १%","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"केन्द्र पङ्क्तिबद्ध गर्नुहोस्","Align left":"बायाँ पङ्क्तिबद्ध गर्नुहोस्","Align right":"दायाँ पङ्क्तिबद्ध गर्नुहोस्","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"अव्कवामरिन",Background:"",Big:"ठूलो",Black:"कालो","Block quote":"ब्लक उद्धरण",Blue:"निलो","Blue marker":"नीलो मार्कर",Bold:"बोल्ड",Border:"","Bulleted List":"गोली चिन्ह अङ्कित सूची",Cancel:"रद्द गर्नुहोस्","Cell properties":"","Center table":"","Centered image":"केन्द्रित तस्वीर","Change image text alternative":"तस्वीर पाठ विकल्प परिवर्तन गर्नुहोस्","Choose heading":"शीर्षक छनौट गर्नुहोस्",Code:"कोड",Color:"","Color picker":"",Column:"स्तम्भ",Dashed:"","Decrease indent":"इन्डेन्ट घटाउन",Default:"पूर्वनिर्धारित","Delete column":"स्तम्भ मेटाउनुहोस्","Delete row":"पङ्क्ति मेटाउनुहोस्","Dim grey":"धमिलो खैरो",Dimensions:"","Document colors":"कागजात रंग",Dotted:"",Double:"",Downloadable:"डाउनलोड योग्य","Dropdown toolbar":"","Edit link":"लिङ्क सम्पादन गर्नुहोस्","Editor toolbar":"","Enter image caption":"तस्वीर क्याप्शन प्रविष्ट गर्नुहोस्","Font Background Color":"पृष्ठभूमिको फन्ट रंग","Font Color":"फन्ट रंग","Font Family":"फन्ट परिवार","Font Size":"फन्ट आकार","Full size image":"पूर्ण आकार तस्वीर",Green:"हरियो","Green marker":"हरियो मार्कर","Green pen":"हरियो कलम",Grey:"खैरो",Groove:"","Header column":"हेडर स्तम्भ","Header row":"हेडर पङ्क्ति",Heading:"शीर्षक","Heading 1":"शीर्षक-एक","Heading 2":"शीर्षक २","Heading 3":"शीर्षक ३","Heading 4":"शीर्षक ४","Heading 5":"शीर्षक ५","Heading 6":"शीर्षक ६",Height:"",Highlight:"हाइलाइट","Horizontal text alignment toolbar":"",Huge:"विशाल","Image toolbar":"","image widget":"तस्वीर विजेट","Increase indent":"इन्डेन्ट बढाउन","Insert column left":"बायाँ स्तम्भ सम्मिलित गर्न","Insert column right":"दायाँ स्तम्भ सम्मिलित गर्न","Insert image":"तस्वीर सम्मिलित गर्नुहोस्","Insert media":"मिडिया सम्मिलित गर्नुहोस्।","Insert row above":"माथि पंक्ति सम्मिलित गर्नुहोस्","Insert row below":"तल पंक्ति सम्मिलित गर्नुहोस्","Insert table":"तालिका सम्मिलित गर्नुहोस्",Inset:"",Italic:"इटालिक",Justify:"जस्टिफाइ गर्नुहोस्","Justify cell text":"","Left aligned image":"बायाँ पङ्क्ति तस्वीर","Light blue":"हल्का निलो","Light green":"हल्का हरियो","Light grey":"हल्का खैरो",Link:"लिङ्क","Link URL":"लिङ्क यूआरएल","Media URL":"मिडिया यूआरएल","media widget":"मिडिया विजेट","Merge cell down":"कक्ष तल मर्ज गर्नुहोस्","Merge cell left":"सेल बायाँ मर्ज गर्नुहोस्","Merge cell right":"दायाँ कक्ष मर्ज गर्नुहोस्","Merge cell up":"कक्ष माथि मर्ज गर्नुहोस्","Merge cells":"कक्ष मर्ज गर्नुहोस्",Next:"अर्को",None:"","Numbered List":"सूचीबद्ध सूची","Open in a new tab":"नयाँ ट्याबमा खोल्न","Open link in new tab":"नयाँ ट्याबमा लिङ्क खोल्नुहोस्",Orange:"सुन्तला रंग",Outset:"",Padding:"",Paragraph:"अनुच्छेद","Paste the media URL in the input.":"इनपुटमा मिडिया यूआरएल पेस्ट गर्नुहोस्।","Pink marker":"गुलाबी मार्कर",Previous:"अघिल्लो",Purple:"बैंगनी रंग",Red:"रातो","Red pen":"रातो कलम",Redo:"रिडु","Remove color":"रंग हटाउन","Remove highlight":"हाइलाइट हटाउनुहोस्","Rich Text Editor":"धनी पाठ सम्पादक","Rich Text Editor, %0":"धनी पाठ सम्पादक, %0",Ridge:"","Right aligned image":"दायाँ पङ्क्तिबद्ध तस्वीर",Row:"पङ्क्ति",Save:"सुरक्षित गर्नुहोस्","Select column":"","Select row":"","Show more items":"","Side image":"साइड तस्वीर",Small:"सानो",Solid:"","Split cell horizontally":"क्षैतिज कक्ष विभाजित गर्नुहोस्","Split cell vertically":"ठाडो कक्ष विभाजित गर्नुहोस्",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"पाठ संरेखण","Text alignment toolbar":"","Text alternative":"पाठ विकल्प","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"यूआरएल खाली हुनु हुँदैन।","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"यो लिङ्कसँग यूआरएल छैन","This media URL is not supported.":"यो मिडिया यूआरएल समर्थित छैन।",Tiny:"सानो","Tip: Paste the URL into the content to embed faster.":"सुझाव:छिटो इम्बेड गर्न यूआरएल सामग्रीमा पेस्ट गर्नुहोस्।",Turquoise:"त्रकोइस",Underline:"रेखांकन",Undo:"पूर्ववत",Unlink:"अनलिङ्क गर्नुहोस्","Upload failed":"अपलोड असफल भयो","Upload in progress":"अपलोड हुदैछ","Vertical text alignment toolbar":"",White:"सेतो",Width:"",Yellow:"पहेंलो","Yellow marker":"पहेंलो मार्कर"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/nl.js b/public/js/ckedit5/20.0.0/translations/nl.js new file mode 100644 index 0000000..13836c0 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/nl.js @@ -0,0 +1 @@ +(function(d){ const l = d['nl'] = d['nl'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"0% van 1%","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Midden uitlijnen","Align left":"Links uitlijnen","Align right":"Rechts uitlijnen","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Aquamarijn",Background:"",Big:"Groot",Black:"Zwart","Block quote":"Blok citaat",Blue:"Blauw","Blue marker":"Blauwe marker",Bold:"Vet",Border:"","Bulleted List":"Ongenummerde lijst",Cancel:"Annuleren","Cell properties":"","Center table":"","Centered image":"Gecentreerde afbeelding","Change image text alternative":"Verander alt-tekst van de afbeelding","Choose heading":"Kies kop",Code:"Code",Color:"","Color picker":"",Column:"Kolom",Dashed:"","Decrease indent":"Minder inspringen",Default:"Standaard","Delete column":"Verwijder kolom","Delete row":"Verwijder rij","Dim grey":"Gedimd grijs",Dimensions:"","Document colors":"Document kleur",Dotted:"",Double:"",Downloadable:"Downloadbaar","Dropdown toolbar":"Drop-down werkbalk","Edit link":"Bewerk link","Editor toolbar":"Editor welkbalk","Enter image caption":"Typ een afbeeldingsbijschrift","Font Background Color":"Tekst achtergrondkleur","Font Color":"Tekstkleur","Font Family":"Lettertype","Font Size":"Lettergrootte","Full size image":"Afbeelding op volledige grootte",Green:"Groen","Green marker":"Groene marker","Green pen":"Groene pen",Grey:"Grijs",Groove:"","Header column":"Titel kolom","Header row":"Titel rij",Heading:"Koppen","Heading 1":"Kop 1","Heading 2":"Kop 2","Heading 3":"Kop 3","Heading 4":"Kop 4","Heading 5":"Kop 5","Heading 6":"Kop 6",Height:"",Highlight:"Markeren","Horizontal text alignment toolbar":"",Huge:"Zeer groot","Image toolbar":"Afbeeldingswerkbalk","image widget":"afbeeldingswidget","Increase indent":"Inspringen","Insert code block":"Codeblok invoegen","Insert column left":"Kolom links invoegen","Insert column right":"Kolom rechts invoegen","Insert image":"Afbeelding toevoegen","Insert media":"Voer media in","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Rij hierboven invoegen","Insert row below":"Rij hieronder invoegen","Insert table":"Tabel invoegen",Inset:"",Italic:"Cursief",Justify:"Volledig uitlijnen","Justify cell text":"","Left aligned image":"Links uitgelijnde afbeelding","Light blue":"Lichtblauw","Light green":"Lichtgroen","Light grey":"Lichtgrijs",Link:"Link","Link URL":"Link URL","Media URL":"Media URL","media widget":"media widget","Merge cell down":"Cel hieronder samenvoegen","Merge cell left":"Cel hiervoor samenvoegen","Merge cell right":"Cel hierna samenvoegen","Merge cell up":"Cel hierboven samenvoegen","Merge cells":"Cellen samenvoegen",Next:"Volgende",None:"","Numbered List":"Genummerde lijst","Open in a new tab":"Open een nieuw tabblad","Open link in new tab":"Open link in nieuw tabblad",Orange:"Oranje",Outset:"",Padding:"",Paragraph:"Paragraaf","Paste the media URL in the input.":"Plak de media URL in het invoerveld.","Pink marker":"Roze marker","Plain text":"",Previous:"Vorige",Purple:"Paars",Red:"Rood","Red pen":"Rode pen",Redo:"Opnieuw","Remove color":"Verwijder kleur","Remove highlight":"Verwijder markering","Rich Text Editor":"Tekstbewerker","Rich Text Editor, %0":"Tekstbewerker, 0%",Ridge:"","Right aligned image":"Rechts uitgelijnde afbeelding",Row:"Rij",Save:"Opslaan","Select column":"","Select row":"","Show more items":"Meer items weergeven","Side image":"Afbeelding naast tekst",Small:"Klein",Solid:"","Split cell horizontally":"Splits cel horizontaal","Split cell vertically":"Splits cel verticaal",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Tabel werkbalk","Text alignment":"Tekst uitlijning","Text alignment toolbar":"Tekst uitlijning werkbalk","Text alternative":"Alt-tekst","Text highlight toolbar":"Tekst markering werkbalk","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"De URL mag niet leeg zijn.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Deze link heeft geen URL","This media URL is not supported.":"Deze media URL wordt niet ondersteund.",Tiny:"Zeer klein","Tip: Paste the URL into the content to embed faster.":"Tip: plak de URL in de inhoud om deze sneller in te laten sluiten.",Turquoise:"Turquoise",Underline:"Onderlijnen",Undo:"Ongedaan maken",Unlink:"Verwijder link","Upload failed":"Uploaden afbeelding mislukt","Upload in progress":"Bezig met uploaden","Vertical text alignment toolbar":"",White:"Wit","Widget toolbar":"Widget werkbalk",Width:"",Yellow:"Geel","Yellow marker":"Gele marker"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/no.js b/public/js/ckedit5/20.0.0/translations/no.js new file mode 100644 index 0000000..df724f2 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/no.js @@ -0,0 +1 @@ +(function(d){ const l = d['no'] = d['no'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 av %1","Align cell text to the bottom":"Juster celletekst til bunn ","Align cell text to the center":"Juster celletekst til midten ","Align cell text to the left":"Juster celletekst til venstre ","Align cell text to the middle":"Juster celletekst til midten","Align cell text to the right":"Juster celletekst til høyre ","Align cell text to the top":"Juster celletekst til topp","Align center":"Midtstill","Align left":"Venstrejuster","Align right":"Høyrejuster","Align table to the left":"Juster tabell til venstre ","Align table to the right":"Juster tabell til høyre ",Alignment:"Justering",Aquamarine:"Akvamarin",Background:"Bakgrunn ",Big:"Stor",Black:"Svart","Block quote":"Blokksitat",Blue:"Blå","Blue marker":"Blå utheving",Bold:"Fet",Border:"Kantlinje ","Bulleted List":"Punktliste",Cancel:"Avbryt","Cell properties":"Celleegenskaper ","Center table":"Sentrer tabell ","Centered image":"Midtstilt bilde","Change image text alternative":"Endre tekstalternativ til bildet","Choose heading":"Velg overskrift",Code:"Kode",Color:"Farge","Color picker":"Fargevalg ",Column:"Kolonne",Dashed:"Stiplet","Decrease indent":"Reduser innrykk",Default:"Standard","Delete column":"Slett kolonne","Delete row":"Slett rad","Dim grey":"Svak grå",Dimensions:"Dimensjoner","Document colors":"Dokumentfarger",Dotted:"Stiplede",Double:"Dobbel ",Downloadable:"Nedlastbar","Dropdown toolbar":"Verktøylinje for nedtrekksliste","Edit link":"Rediger lenke","Editor toolbar":"Verktøylinje for redigeringsverktøy","Enter image caption":"Skriv inn bildetekst","Font Background Color":"Uthevingsfarge for tekst","Font Color":"Skriftfarge","Font Family":"Skrifttypefamilie","Font Size":"Skriftstørrelse","Full size image":"Bilde i full størrelse",Green:"Grønn","Green marker":"Grønn utheving","Green pen":"Grønn penn",Grey:"Grå",Groove:"Grov","Header column":"Overskriftkolonne","Header row":"Overskriftrad",Heading:"Overskrift","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"Overskrift 4","Heading 5":"Overskrift 5","Heading 6":"Overskrift 6",Height:"Høyde",Highlight:"Utheving","Horizontal text alignment toolbar":"Verktøylinje for justering av tekst horisontalt ",Huge:"Veldig stor","Image toolbar":"Verktøylinje for bilde","image widget":"Bilde-widget","Increase indent":"Øk innrykk","Insert code block":"Sett inn kodeblokk","Insert column left":"Sett inn kolonne til venstre","Insert column right":"Sett inn kolonne til høyre","Insert image":"Sett inn bilde","Insert media":"Sett inn media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Sett inn rad over","Insert row below":"Sett inn rad under","Insert table":"Sett inn tabell",Inset:"Innover",Italic:"Kursiv",Justify:"Blokkjuster","Justify cell text":"Rett celletekst ","Left aligned image":"Venstrejustert bilde","Light blue":"Lyseblå","Light green":"Lysegrønn","Light grey":"Lysegrå",Link:"Lenke","Link URL":"Lenke-URL","Media URL":"Media-URL","media widget":"media-widget","Merge cell down":"Slå sammen celle under","Merge cell left":"Slå sammen celle til venstre","Merge cell right":"Slå sammen celle til høyre","Merge cell up":"Slå sammen celle over","Merge cells":"Slå sammen celler",Next:"Neste",None:"Ingen","Numbered List":"Nummerert liste","Open in a new tab":"Åpne i ny fane","Open link in new tab":"Åpne lenke i ny fane",Orange:"Oransje",Outset:"Utover",Padding:"Fylling",Paragraph:"Avsnitt","Paste the media URL in the input.":"Lim inn media URL ","Pink marker":"Rosa utheving","Plain text":"Ren tekst",Previous:"Forrige",Purple:"Lilla",Red:"Rød","Red pen":"Rød penn",Redo:"Gjør om","Remove color":"Fjern farge","Remove highlight":"Fjern utheving","Rich Text Editor":"Tekstredigeringsverktøy for rik tekst","Rich Text Editor, %0":"Tekstredigeringsverktøy for rik tekst, %0",Ridge:"Kjede","Right aligned image":"Høyrejustert bilde",Row:"Rad",Save:"Lagre","Select all":"Velg alt ","Select column":"Velg kolonne ","Select row":"Velg rad","Show more items":"Vis flere elementer","Side image":"Sidestilt bilde",Small:"Liten",Solid:"Hel","Split cell horizontally":"Del opp celle horisontalt","Split cell vertically":"Del opp celle vertikalt",Style:"Stil ","Table alignment toolbar":"Verktøylinje for justering av tabell ","Table cell text alignment":"Celle tekstjustering ","Table properties":"Egenskaper for tabell","Table toolbar":"Tabell verktøylinje ","Text alignment":"Tekstjustering","Text alignment toolbar":"Verktøylinje for tekstjustering","Text alternative":"Tekstalternativ","Text highlight toolbar":"Verktøylinje for tekstutheving","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Ugyldig farge ","The URL must not be empty.":"URL-en kan ikke være tom.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Ugyldig verdi ","This link has no URL":"Denne lenken mangler en URL","This media URL is not supported.":"Denne media-URL-en er ikke støttet.",Tiny:"Veldig liten","Tip: Paste the URL into the content to embed faster.":"Tips: lim inn URL i innhold for bedre hastighet ",Turquoise:"Turkis",Underline:"Understreket",Undo:"Angre",Unlink:"Fjern lenke","Upload failed":"Kunne ikke laste opp","Upload in progress":"Laster opp fil","Vertical text alignment toolbar":"Verktøylinje for justering av tekst vertikalt ",White:"Hvit","Widget toolbar":"Widget verktøylinje ",Width:"Bredde",Yellow:"Gul","Yellow marker":"Gul utheving"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/oc.js b/public/js/ckedit5/20.0.0/translations/oc.js new file mode 100644 index 0000000..336045b --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/oc.js @@ -0,0 +1 @@ +(function(d){ const l = d['oc'] = d['oc'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {Bold:"Gras",Cancel:"Anullar",Code:"",Italic:"Italica","Remove color":"",Save:"Enregistrar",Underline:""} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/pl.js b/public/js/ckedit5/20.0.0/translations/pl.js new file mode 100644 index 0000000..e4a7ee5 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/pl.js @@ -0,0 +1 @@ +(function(d){ const l = d['pl'] = d['pl'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 z %1","Align cell text to the bottom":"Wyrównaj tekst w komórce do dołu","Align cell text to the center":"Wyrównaj tekst w komórce do środka","Align cell text to the left":"Wyrównaj tekst w komórce do lewej","Align cell text to the middle":"Wyrównaj tekst w komórce do środka","Align cell text to the right":"Wyrównaj tekst w komórce do prawej","Align cell text to the top":"Wyrównaj tekst w komórce do góry","Align center":"Wyrównaj do środka","Align left":"Wyrównaj do lewej","Align right":"Wyrównaj do prawej","Align table to the left":"Wyrównaj tabelę do lewej","Align table to the right":"Wyrównaj tabelę do prawej",Alignment:"Wyrównanie",Aquamarine:"Akwamaryna",Background:"Tło",Big:"Duży",Black:"Czarny","Block quote":"Cytat blokowy",Blue:"Niebieski","Blue marker":"Niebieski marker",Bold:"Pogrubienie",Border:"Obramowanie","Bulleted List":"Lista wypunktowana",Cancel:"Anuluj","Cell properties":"Właściwości komórki","Center table":"Wyrównaj tabelę do środka","Centered image":"Obraz wyrównany do środka","Change image text alternative":"Zmień tekst zastępczy obrazka","Choose heading":"Wybierz nagłówek",Code:"Kod",Color:"Kolor","Color picker":"",Column:"Kolumna",Dashed:"Kreskowane","Decrease indent":"Zmniejsz wcięcie",Default:"Domyślny","Delete column":"Usuń kolumnę","Delete row":"Usuń wiersz","Dim grey":"Ciemnoszary",Dimensions:"Wymiary","Document colors":"Kolory dokumentu",Dotted:"Kropkowane",Double:"Podwójne",Downloadable:"Do pobrania","Dropdown toolbar":"Rozwijany pasek narzędzi","Edit link":"Edytuj odnośnik","Editor toolbar":"Pasek narzędzi edytora","Enter image caption":"Wstaw tytuł obrazka","Font Background Color":"Kolor tła czcionki","Font Color":"Kolor czcionki","Font Family":"Czcionka","Font Size":"Rozmiar czcionki","Full size image":"Obraz w pełnym rozmiarze",Green:"Zielony","Green marker":"Zielony marker","Green pen":"Zielony długopis",Grey:"Szary",Groove:"Wklęsłe","Header column":"Kolumna nagłówka","Header row":"Wiersz nagłówka",Heading:"Nagłówek","Heading 1":"Nagłówek 1","Heading 2":"Nagłówek 2","Heading 3":"Nagłówek 3","Heading 4":"Nagłówek 4","Heading 5":"Nagłówek 5","Heading 6":"Nagłówek 6",Height:"Wysokość",Highlight:"Podświetlenie","Horizontal text alignment toolbar":"Pasek narzędzi wyrównania tekstu w poziomie",Huge:"Bardzo duży","Image toolbar":"Pasek narzędzi obrazka","image widget":"Obraz","Increase indent":"Zwiększ wcięcie","Insert code block":"Wstaw blok kodu","Insert column left":"Wstaw kolumnę z lewej","Insert column right":"Wstaw kolumnę z prawej","Insert image":"Wstaw obraz","Insert media":"Wstaw media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Wstaw wiersz ponad","Insert row below":"Wstaw wiersz poniżej","Insert table":"Wstaw tabelę",Inset:"Zapadnięte",Italic:"Kursywa",Justify:"Wyrównaj obustronnie","Justify cell text":"Wyjustuj tekst komórki","Left aligned image":"Obraz wyrównany do lewej","Light blue":"Jasnoniebieski","Light green":"Jasnozielony","Light grey":"Jasnoszary",Link:"Wstaw odnośnik","Link URL":"Adres URL","Media URL":"Adres URL","media widget":"widget osadzenia mediów","Merge cell down":"Scal komórkę w dół","Merge cell left":"Scal komórkę w lewo","Merge cell right":"Scal komórkę w prawo","Merge cell up":"Scal komórkę w górę","Merge cells":"Scal komórki",Next:"Następny",None:"Brak","Numbered List":"Lista numerowana","Open in a new tab":"Otwórz w nowej zakładce","Open link in new tab":"Otwórz odnośnik w nowym oknie",Orange:"Pomarańczowy",Outset:"Wysunięte",Padding:"Dopełnienie",Paragraph:"Akapit","Paste the media URL in the input.":"Wklej adres URL mediów do pola.","Pink marker":"Różowy marker","Plain text":"Zwykły tekst",Previous:"Poprzedni",Purple:"Purpurowy",Red:"Czerwony","Red pen":"Czerwony długopis",Redo:"Ponów","Remove color":"Usuń kolor","Remove highlight":"Usuń podświetlenie","Rich Text Editor":"Edytor tekstu sformatowanego","Rich Text Editor, %0":"Edytor tekstu sformatowanego, %0",Ridge:"Wypukłe","Right aligned image":"Obraz wyrównany do prawej",Row:"Wiersz",Save:"Zapisz","Select all":"Zaznacz wszystko","Select column":"","Select row":"","Show more items":"Pokaż więcej","Side image":"Obraz dosunięty do brzegu, oblewany tekstem",Small:"Mały",Solid:"Ciągłe","Split cell horizontally":"Podziel komórkę poziomo","Split cell vertically":"Podziel komórkę pionowo",Style:"Styl","Table alignment toolbar":"Pasek narzędzi wyrównania tabeli","Table cell text alignment":"Wyrównanie tekstu komórki tabeli","Table properties":"Właściwości tabeli","Table toolbar":"Pasek narzędzi tabel","Text alignment":"Wyrównanie tekstu","Text alignment toolbar":"Pasek narzędzi wyrównania tekstu","Text alternative":"Tekst zastępczy obrazka","Text highlight toolbar":"Pasek narzędzi podświetleń","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Kolor jest niepoprawny. Spróbuj wpisać \"#FF0000\", \"rgb(255,0,0)\" lub \"red\".","The URL must not be empty.":"Adres URL nie może być pusty.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Wartość jest niepoprawna. Spróbuj wpisać \"10px\", \"2em\" lub po prostu \"2\".","This link has no URL":"Nie podano adresu URL odnośnika","This media URL is not supported.":"Ten rodzaj adresu URL nie jest obsługiwany.",Tiny:"Bardzo mały","Tip: Paste the URL into the content to embed faster.":"Wskazówka: Wklej URL do treści edytora, by łatwiej osadzić media.",Turquoise:"Turkusowy",Underline:"Podkreślenie",Undo:"Cofnij",Unlink:"Usuń odnośnik","Upload failed":"Przesyłanie obrazu nie powiodło się","Upload in progress":"Trwa przesyłanie","Vertical text alignment toolbar":"Pasek narzędzi wyrównania tekstu w pionie",White:"Biały","Widget toolbar":"Pasek widgetów",Width:"Szerokość",Yellow:"Żółty","Yellow marker":"Żółty marker"} );l.getPluralForm=function(n){return (n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/pt-br.js b/public/js/ckedit5/20.0.0/translations/pt-br.js new file mode 100644 index 0000000..7d3caee --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/pt-br.js @@ -0,0 +1 @@ +(function(d){ const l = d['pt-br'] = d['pt-br'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 de %1","Align cell text to the bottom":"Alinhar texto da célula para baixo","Align cell text to the center":"Alinhar texto da célula centralizado","Align cell text to the left":"Alinhar texto da célula para a esquerda","Align cell text to the middle":"Alinhar texto da célula para o meio","Align cell text to the right":"Alinhar texto da célula para a direita","Align cell text to the top":"Alinhar texto da célula para o topo","Align center":"Centralizar","Align left":"Alinhar à esquerda","Align right":"Alinhar à direita","Align table to the left":"Alinhar tabela para esquerda","Align table to the right":"Alinhar tabela para direita",Alignment:"Alinhamento",Aquamarine:"Água-marinha",Background:"Cor de fundo",Big:"Grande",Black:"Preto","Block quote":"Bloco de citação",Blue:"Azul","Blue marker":"Marcador azul",Bold:"Negrito",Border:"Borda","Bulleted List":"Lista com marcadores",Cancel:"Cancelar","Cell properties":"Propriedades da célula","Center table":"Centralizar tabela","Centered image":"Imagem centralizada","Change image text alternative":"Alterar texto alternativo da imagem","Choose heading":"Escolha o título",Code:"Código",Color:"Cor","Color picker":"Seletor de cor",Column:"Coluna",Dashed:"Tracejada","Decrease indent":"Diminuir indentação",Default:"Padrão","Delete column":"Excluir coluna","Delete row":"Excluir linha","Dim grey":"Cinza escuro",Dimensions:"Dimensões","Document colors":"Cores do documento",Dotted:"Pontilhada",Double:"Dupla",Downloadable:"Pode ser baixado","Dropdown toolbar":"Barra de Ferramentas da Lista Suspensa","Edit link":"Editar link","Editor toolbar":"Ferramentas do Editor","Enter image caption":"Inserir legenda da imagem","Font Background Color":"Cor de Fundo","Font Color":"Cor da Fonte","Font Family":"Fonte","Font Size":"Tamanho da fonte","Full size image":"Imagem completa",Green:"Verde","Green marker":"Marcador verde","Green pen":"Caneta verde",Grey:"Cinza",Groove:"Ranhura","Header column":"Coluna de cabeçalho","Header row":"Linha de cabeçalho",Heading:"Titulo","Heading 1":"Título 1","Heading 2":"Título 2","Heading 3":"Título 3","Heading 4":"Título 4","Heading 5":"Título 5","Heading 6":"Título 6",Height:"Altura",Highlight:"Realce","Horizontal text alignment toolbar":"Ferramentas de alinhamento horizontal do texto",Huge:"Gigante","Image toolbar":"Ferramentas de Imagem","image widget":"Ferramenta de imagem","Increase indent":"Aumentar indentação","Insert code block":"Inserir bloco de código","Insert column left":"Inserir coluna à esquerda","Insert column right":"Inserir coluna à direita","Insert image":"Inserir imagem","Insert media":"Inserir mídia","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Inserir linha acima","Insert row below":"Inserir linha abaixo","Insert table":"Inserir tabela",Inset:"Baixo relevo",Italic:"Itálico",Justify:"Justificar","Justify cell text":"Justificar texto da célula","Left aligned image":"Imagem alinhada à esquerda","Light blue":"Azul claro","Light green":"Verde claro","Light grey":"Cinza claro",Link:"Link","Link URL":"URL","Media URL":"URL da mídia","media widget":"Ferramenta de mídia","Merge cell down":"Mesclar abaixo","Merge cell left":"Mesclar à esquerda","Merge cell right":"Mesclar à direita","Merge cell up":"Mesclar acima","Merge cells":"Mesclar células",Next:"Próximo",None:"Sem borda","Numbered List":"Lista numerada","Open in a new tab":"Abrir em nova aba","Open link in new tab":"Abrir link em nova aba",Orange:"Laranja",Outset:"Alto relevo",Padding:"Margem interna",Paragraph:"Parágrafo","Paste the media URL in the input.":"Cole o endereço da mídia no campo.","Pink marker":"Marcador rosa","Plain text":"Texto plano",Previous:"Anterior",Purple:"Púrpura",Red:"Vermelho","Red pen":"Caneta vermelha",Redo:"Refazer","Remove color":"Remover cor","Remove highlight":"Remover realce","Rich Text Editor":"Editor de Formatação","Rich Text Editor, %0":"Editor de Formatação, %0",Ridge:"Crista","Right aligned image":"Imagem alinhada à direita",Row:"Linha",Save:"Salvar","Select all":"Selecionar tudo","Select column":"Selecionar coluna","Select row":"Selecionar linha","Show more items":"Exibir mais itens","Side image":"Imagem lateral",Small:"Pequeno",Solid:"Sólida","Split cell horizontally":"Dividir horizontalmente","Split cell vertically":"Dividir verticalmente",Style:"Estilo","Table alignment toolbar":"Ferramentas de alinhamento da tabela","Table cell text alignment":"Alinhamento do texto na célula","Table properties":"Propriedades da tabela","Table toolbar":"Ferramentas de Tabela","Text alignment":"Alinhamento do texto","Text alignment toolbar":"Ferramentas de alinhamento de texto","Text alternative":"Texto alternativo","Text highlight toolbar":"Ferramentas de realce","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Cor inválida. Tente \"#FF0000\" ou \"rgb(255,0,0)\" ou \"red\"","The URL must not be empty.":"A URL não pode ficar em branco.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Valor inválido. Tente \"10px\" ou \"2em\" ou apenas \"2\"","This link has no URL":"Este link não possui uma URL","This media URL is not supported.":"A URL desta mídia não é suportada.",Tiny:"Minúsculo","Tip: Paste the URL into the content to embed faster.":"Cole o endereço dentro do conteúdo para embutir mais rapidamente.",Turquoise:"Turquesa",Underline:"Sublinhado",Undo:"Desfazer",Unlink:"Remover link","Upload failed":"Falha ao subir arquivo","Upload in progress":"Enviando dados","Vertical text alignment toolbar":"Ferramentas de alinhamento vertical do texto",White:"Branco","Widget toolbar":"Ferramentas de Widgets",Width:"Largura",Yellow:"Amarelo","Yellow marker":"Marcador amarelo"} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/pt.js b/public/js/ckedit5/20.0.0/translations/pt.js new file mode 100644 index 0000000..5b5d7ad --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/pt.js @@ -0,0 +1 @@ +(function(d){ const l = d['pt'] = d['pt'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align center":"Alinhar ao centro","Align left":"Alinhar à esquerda","Align right":"Alinhar à direita",Aquamarine:"",Big:"",Black:"",Blue:"",Bold:"Negrito","Bulleted List":"Lista não ordenada",Cancel:"Cancelar","Centered image":"Imagem centrada","Change image text alternative":"","Choose heading":"",Code:"Código",Default:"Padrão","Dim grey":"","Document colors":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"Indicar legenda da imagem","Font Background Color":"","Font Color":"","Font Family":"","Font Size":"","Full size image":"Imagem em tamanho completo",Green:"",Grey:"",Heading:"Cabeçalho","Heading 1":"Cabeçalho 1","Heading 2":"Cabeçalho 2","Heading 3":"Cabeçalho 3","Heading 4":"","Heading 5":"","Heading 6":"",Huge:"","Image toolbar":"","image widget":"módulo de imagem","Insert image":"Inserir imagem",Italic:"Itálico",Justify:"Justificar","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"Hiperligação","Link URL":"URL da ligação",Next:"","Numbered List":"Lista ordenada","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"Parágrafo",Previous:"",Purple:"",Red:"",Redo:"Refazer","Remove color":"","Rich Text Editor":"Editor de texto avançado","Rich Text Editor, %0":"Editor de texto avançado, %0","Right aligned image":"",Save:"Guardar","Show more items":"","Side image":"Imagem lateral",Small:"","Text alignment":"Alinhamento de texto","Text alignment toolbar":"Ferramentas de alinhamento de texto","Text alternative":"Texto alternativo","This link has no URL":"",Tiny:"",Turquoise:"",Underline:"",Undo:"Desfazer",Unlink:"Desligar","Upload failed":"Falha ao carregar",White:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/ro.js b/public/js/ckedit5/20.0.0/translations/ro.js new file mode 100644 index 0000000..d980a2d --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/ro.js @@ -0,0 +1 @@ +(function(d){ const l = d['ro'] = d['ro'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 din %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Aliniază la centru","Align left":"Aliniază la stânga","Align right":"Aliniază la dreapta","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Acvamarin",Background:"",Big:"Mare",Black:"Negru","Block quote":"Bloc citat",Blue:"Albastru","Blue marker":"Evidențiator albastru",Bold:"Îngroșat",Border:"","Bulleted List":"Listă cu puncte",Cancel:"Anulare","Cell properties":"","Center table":"","Centered image":"Imagine aliniată pe centru","Change image text alternative":"Schimbă textul alternativ al imaginii","Choose heading":"Alege titlu",Code:"Cod",Color:"","Color picker":"",Column:"Coloană",Dashed:"","Decrease indent":"Micșorează indent",Default:"Implicită","Delete column":"Șterge coloană","Delete row":"Șterge rând","Dim grey":"Gri slab",Dimensions:"","Document colors":"Culorile din document",Dotted:"",Double:"",Downloadable:"Descărcabil","Dropdown toolbar":"Bară listă opțiuni","Edit link":"Modifică link","Editor toolbar":"Bară editor","Enter image caption":"Introdu titlul descriptiv al imaginii","Font Background Color":"Culoarea de fundal a fontului","Font Color":"Culoare font","Font Family":"Familie font","Font Size":"Dimensiune font","Full size image":"Imagine mărime completă",Green:"Verde","Green marker":"Evidențiator verde","Green pen":"Pix verde",Grey:"Gri",Groove:"","Header column":"Antet coloană","Header row":"Rând antet",Heading:"Titlu","Heading 1":"Titlu 1","Heading 2":"Titlu 2","Heading 3":"Titlu 3","Heading 4":"Titlu 4","Heading 5":"Titlu 5","Heading 6":"Titlu 6",Height:"",Highlight:"Evidențiere text","Horizontal text alignment toolbar":"",Huge:"Foarte mare","Image toolbar":"Bară imagine","image widget":"widget imagine","Increase indent":"Mărește indent","Insert column left":"Inserează coloană la stânga","Insert column right":"Inserează coloană la dreapta","Insert image":"Inserează imagine","Insert media":"Inserează media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Inserează rând deasupra","Insert row below":"Inserează rând dedesubt","Insert table":"Inserează tabel",Inset:"",Italic:"Cursiv",Justify:"Aliniază stânga-dreapta","Justify cell text":"","Left aligned image":"Imagine aliniată la stânga","Light blue":"Albastru deschis","Light green":"Verde deschis","Light grey":"Gri deschis",Link:"Link","Link URL":"Link URL","Media URL":"Media URL","media widget":"widget media","Merge cell down":"Îmbină celula în jos","Merge cell left":"Îmbină celula la stânga","Merge cell right":"Îmbină celula la dreapta","Merge cell up":"Îmbină celula în sus","Merge cells":"Îmbină celulele",Next:"Înainte",None:"","Numbered List":"Listă numerotată","Open in a new tab":"Deschide în tab nou","Open link in new tab":"Deschide link în tab nou",Orange:"Portocaliu",Outset:"",Padding:"",Paragraph:"Paragraf","Paste the media URL in the input.":"Adaugă URL-ul media in input.","Pink marker":"Evidențiator roz",Previous:"Înapoi",Purple:"Violet",Red:"Roșu","Red pen":"Pix roșu",Redo:"Revenire","Remove color":"Șterge culoare","Remove highlight":"Șterge evidențiere text","Rich Text Editor":"Editor de text","Rich Text Editor, %0":"Editor de text, %0",Ridge:"","Right aligned image":"Imagine aliniată la dreapta",Row:"Rând",Save:"Salvare","Select column":"","Select row":"","Show more items":"","Side image":"Imagine laterală",Small:"Mică",Solid:"","Split cell horizontally":"Scindează celula pe orizontală","Split cell vertically":"Scindează celula pe verticală",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Bară tabel","Text alignment":"Aliniere text","Text alignment toolbar":"Bara aliniere text","Text alternative":"Text alternativ","Text highlight toolbar":"Bară evidențiere text","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL-ul nu trebuie să fie gol.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Acest link nu are niciun URL","This media URL is not supported.":"Acest URL media nu este suportat.",Tiny:"Foarte mică","Tip: Paste the URL into the content to embed faster.":"Sugestie: adaugă URL-ul în conținut pentru a fi adăugat mai rapid.",Turquoise:"Turcoaz",Underline:"Subliniat",Undo:"Anulare",Unlink:"Șterge link","Upload failed":"Încărcare eșuată","Upload in progress":"Încărcare în curs","Vertical text alignment toolbar":"",White:"Alb","Widget toolbar":"Bară widget",Width:"",Yellow:"Galben","Yellow marker":"Evidențiator galben"} );l.getPluralForm=function(n){return (n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/ru.js b/public/js/ckedit5/20.0.0/translations/ru.js new file mode 100644 index 0000000..6a6fe48 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/ru.js @@ -0,0 +1 @@ +(function(d){ const l = d['ru'] = d['ru'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 из %1","Align cell text to the bottom":"Выровнять текст ячейки по нижнему краю","Align cell text to the center":"Выровнять текст по центру","Align cell text to the left":"Выровнять текст по левому краю","Align cell text to the middle":"Выровнять текст ячейки по центру","Align cell text to the right":"Выровнять текст по правому краю","Align cell text to the top":"Выровнять текст ячейки по верхнему краю","Align center":"Выравнивание по центру","Align left":"Выравнивание по левому краю","Align right":"Выравнивание по правому краю","Align table to the left":"Выровнять таблицу по левому краю","Align table to the right":"Выровнять таблицу по правому краю",Alignment:"Выравнивание",Aquamarine:"Аквамариновый",Background:"Фон",Big:"Крупный",Black:"Чёрный","Block quote":"Цитата",Blue:"Синий","Blue marker":"Выделение синим маркером",Bold:"Жирный",Border:"Граница","Bulleted List":"Маркированный список",Cancel:"Отмена","Cell properties":"Свойства ячейки","Center table":"Выровнять таблицу по центру","Centered image":"Выравнивание по центру","Change image text alternative":"Редактировать альтернативный текст","Choose heading":"Выбор стиля",Code:"Исходный код",Color:"Цвет","Color picker":"Выбор цвета",Column:"Столбец",Dashed:"Пунктирная","Decrease indent":"Уменьшить отступ",Default:"По умолчанию","Delete column":"Удалить столбец","Delete row":"Удалить строку","Dim grey":"Тёмно-серый",Dimensions:"Размеры","Document colors":"Цвет страницы",Dotted:"Точечная",Double:"Двойная",Downloadable:"Загружаемые","Dropdown toolbar":"Выпадающая панель инструментов","Edit link":"Редактировать ссылку","Editor toolbar":"Панель инструментов редактора","Enter image caption":"Подпись к изображению","Font Background Color":"Цвет фона","Font Color":"Цвет шрифта","Font Family":"Семейство шрифтов","Font Size":"Размер шрифта","Full size image":"Оригинальный размер изображения",Green:"Зелёный","Green marker":"Выделение зелёным маркером","Green pen":"Зеленый цвет текста",Grey:"Серый",Groove:"Желобчатая","Header column":"Столбец заголовков","Header row":"Строка заголовков",Heading:"Стиль","Heading 1":"Заголовок 1","Heading 2":"Заголовок 2","Heading 3":"Заголовок 3","Heading 4":"Заголовок 4","Heading 5":"Заголовок 5","Heading 6":"Заголовок 6",Height:"Высота",Highlight:"Выделить","Horizontal text alignment toolbar":"Панель инструментов горизонтального выравнивания текста",Huge:"Очень крупный","Image toolbar":"Панель инструментов изображения","image widget":"Виджет изображений","Increase indent":"Увеличить отступ","Insert code block":"Вставить код","Insert column left":"Вставить столбец слева","Insert column right":"Вставить столбец справа","Insert image":"Вставить изображение","Insert media":"Вставить медиа","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Вставить строку выше","Insert row below":"Вставить строку ниже","Insert table":"Вставить таблицу",Inset:"Вдавленная",Italic:"Курсив",Justify:"Выравнивание по ширине","Justify cell text":"Выровнять текст по ширине","Left aligned image":"Выравнивание по левому краю","Light blue":"Голубой","Light green":"Салатовый","Light grey":"Светло-серый",Link:"Ссылка","Link URL":"Ссылка URL","Media URL":"URL медиа","media widget":"медиа-виджет","Merge cell down":"Объединить с ячейкой снизу","Merge cell left":"Объединить с ячейкой слева","Merge cell right":"Объединить с ячейкой справа","Merge cell up":"Объединить с ячейкой сверху","Merge cells":"Объединить ячейки",Next:"Следующий",None:"Нет","Numbered List":"Нумерованный список","Open in a new tab":"Открыть в новой вкладке","Open link in new tab":"Открыть ссылку в новой вкладке",Orange:"Оранжевый",Outset:"Выпуклая",Padding:"Отступ",Paragraph:"Параграф","Paste the media URL in the input.":"Вставьте URL медиа в поле ввода.","Pink marker":"Выделение розовым маркером","Plain text":"Простой текст",Previous:"Предыдущий",Purple:"Фиолетовый",Red:"Красный","Red pen":"Красный цвет текста",Redo:"Повторить","Remove color":"Убрать цвет","Remove highlight":"Убрать выделение","Rich Text Editor":"Редактор","Rich Text Editor, %0":"Редактор, %0",Ridge:"Ребристая","Right aligned image":"Выравнивание по правому краю",Row:"Строка",Save:"Сохранить","Select all":"Выбрать все","Select column":"Выбрать столбец","Select row":"Выбрать строку","Show more items":"Другие инструменты","Side image":"Боковое изображение",Small:"Мелкий",Solid:"Сплошная","Split cell horizontally":"Разделить ячейку горизонтально","Split cell vertically":"Разделить ячейку вертикально",Style:"Стиль","Table alignment toolbar":"Панель инструментов выравнивания таблицы","Table cell text alignment":"Выравнивание текста в ячейке таблицы","Table properties":"Свойства таблицы","Table toolbar":"Панель инструментов таблицы","Text alignment":"Выравнивание текста","Text alignment toolbar":"Выравнивание","Text alternative":"Альтернативный текст","Text highlight toolbar":"Панель инструментов выделения текста","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Неверный цвет. Попробуйте \"#FF0000\" или \"rgb(255,0,0)\" или \"red\".","The URL must not be empty.":"URL не должен быть пустым.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Неверное значение. Попробуйте \"10px\" или \"2em\" или просто \"2\".","This link has no URL":"Для этой ссылки не установлен адрес URL","This media URL is not supported.":"Этот URL медиа не поддерживается.",Tiny:"Очень мелкий","Tip: Paste the URL into the content to embed faster.":"Подсказка: Вставьте URL в контент для быстрого включения.",Turquoise:"Бирюзовый",Underline:"Подчеркнутый",Undo:"Отменить",Unlink:"Убрать ссылку","Upload failed":"Загрузка не выполнена","Upload in progress":"Идёт загрузка","Vertical text alignment toolbar":"Панель инструментов вертикального выравнивания текста",White:"Белый","Widget toolbar":"Панель инструментов виджета",Width:"Ширина",Yellow:"Жёлтый","Yellow marker":"Выделение жёлтым маркером"} );l.getPluralForm=function(n){return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/si.js b/public/js/ckedit5/20.0.0/translations/si.js new file mode 100644 index 0000000..d0416a0 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/si.js @@ -0,0 +1 @@ +(function(d){ const l = d['si'] = d['si'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {Bold:"තදකුරු","Bulleted List":"බුලටිත ලැයිස්තුව","Centered image":"","Change image text alternative":"",Code:"","Enter image caption":"","Full size image":"","Image toolbar":"","image widget":"","Insert image":"පින්තූරය ඇතුල් කරන්න",Italic:"ඇලකුරු","Left aligned image":"","Numbered List":"අංකිත ලැයිස්තුව",Redo:"නැවත කරන්න","Right aligned image":"","Side image":"","Text alternative":"",Underline:"",Undo:"අහෝසි කරන්න","Upload failed":"උඩුගත කිරීම අසාර්ථක විය"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/sk.js b/public/js/ckedit5/20.0.0/translations/sk.js new file mode 100644 index 0000000..8f4bef9 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/sk.js @@ -0,0 +1 @@ +(function(d){ const l = d['sk'] = d['sk'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 z %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Zarovnať na stred","Align left":"Zarovnať vľavo","Align right":"Zarovnať vpravo","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Akvamarínová",Background:"",Big:"Veľké",Black:"Čierna","Block quote":"Citát",Blue:"Modrá","Blue marker":"Modrý zvýrazňovač",Bold:"Tučné",Border:"","Bulleted List":"Zoznam s odrážkami",Cancel:"Zrušiť","Cell properties":"","Center table":"","Centered image":"Zarovnať na stred","Change image text alternative":"Zmeňte alternatívny text obrázka","Choose heading":"Vyberte nadpis",Code:"Kód",Color:"","Color picker":"",Column:"Stĺpec",Dashed:"","Decrease indent":"Zmenšiť odsadenie",Default:"Predvolené","Delete column":"Odstrániť stĺpec","Delete row":"Odstrániť riadok","Dim grey":"Tmavosivá",Dimensions:"","Document colors":"Farby dokumentu",Dotted:"",Double:"",Downloadable:"Na stiahnutie","Dropdown toolbar":"Panel nástrojov roletového menu","Edit link":"Upraviť odkaz","Editor toolbar":"Panel nástrojov editora","Enter image caption":"Vložte popis obrázka","Font Background Color":"Farba zvýraznenia textu","Font Color":"Farba písma","Font Family":"Názov písma","Font Size":"Veľkosť písma","Full size image":"Obrázok v plnej veľkosti",Green:"Zelená","Green marker":"Zelený zvýrazňovač","Green pen":"Zelené pero",Grey:"Sivá",Groove:"","Header column":"Stĺpec hlavičky","Header row":"Riadok hlavičky",Heading:"Nadpis","Heading 1":"Nadpis 1","Heading 2":"Nadpis 2","Heading 3":"Nadpis 3","Heading 4":"Nadpis 4","Heading 5":"Nadpis 5","Heading 6":"Nadpis 6",Height:"",Highlight:"Zvýraznenie","Horizontal text alignment toolbar":"",Huge:"Veľmi veľké","Image toolbar":"Panel nástrojov obrázka","image widget":"widget obrázka","Increase indent":"Zväčšiť odsadenie","Insert code block":"Vložte blok kódu","Insert column left":"Vložiť stĺpec vľavo","Insert column right":"Vložiť stĺpec vpravo","Insert image":"Vložiť obrázok","Insert media":"Vložiť média","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Vložiť riadok nad","Insert row below":"Vložiť riadok pod","Insert table":"Vložiť tabuľku",Inset:"",Italic:"Kurzíva",Justify:"Do bloku","Justify cell text":"","Left aligned image":"Zarovnať vľavo","Light blue":"Bledomodrá","Light green":"Bledozelená","Light grey":"Bledosivá",Link:"Odkaz","Link URL":"URL adresa","Media URL":"URL média","media widget":"Nástroj pre médiá","Merge cell down":"Zlúčiť bunku dole","Merge cell left":"Zlúčiť bunku vľavo","Merge cell right":"Zlúčiť bunku vpravo","Merge cell up":"Zlúčiť bunku hore","Merge cells":"Zlúčiť bunky",Next:"Ďalšie",None:"","Numbered List":"Číslovaný zoznam","Open in a new tab":"Otvoriť v novej záložke","Open link in new tab":"Otvoriť odkaz v novom okne",Orange:"Oranžová",Outset:"",Padding:"",Paragraph:"Paragraf","Paste the media URL in the input.":"Vložte URL média.","Pink marker":"Ružový zvýrazňovač","Plain text":"Čistý text",Previous:"Predchádzajúce",Purple:"Fialová",Red:"Červená","Red pen":"Červené pero",Redo:"Znova","Remove color":"Zrušiť farbu","Remove highlight":"Odstrániť zvýraznenie","Rich Text Editor":"Editor s formátovaním","Rich Text Editor, %0":"Editor s formátovaním, %0",Ridge:"","Right aligned image":"Zarovnať vpravo",Row:"Riadok",Save:"Uložiť","Select column":"","Select row":"","Show more items":"","Side image":"Bočný obrázok",Small:"Malé",Solid:"","Split cell horizontally":"Rozdeliť bunku vodorovne","Split cell vertically":"Rozdeliť bunku zvislo",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Panel nástrojov tabuľky","Text alignment":"Zarovnanie textu","Text alignment toolbar":"Panel nástrojov zarovnania textu","Text alternative":"Alternatívny text","Text highlight toolbar":"Panel nástrojov zvýraznenia textu","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"Musíte zadať URL.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Tento odkaz nemá nastavenú URL adresu","This media URL is not supported.":"URL média nie je podporovaná.",Tiny:"Veľmi malé","Tip: Paste the URL into the content to embed faster.":"Tip: URL adresu média vložte do obsahu.",Turquoise:"Tyrkysová",Underline:"Podčiarknuté",Undo:"Späť",Unlink:"Zrušiť odkaz","Upload failed":"Nahrávanie zlyhalo","Upload in progress":"Prebieha nahrávanie","Vertical text alignment toolbar":"",White:"Biela","Widget toolbar":"Panel nástrojov ovládacieho prvku",Width:"",Yellow:"Žltá","Yellow marker":"Žltý zvýrazňovač"} );l.getPluralForm=function(n){return (n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/sl.js b/public/js/ckedit5/20.0.0/translations/sl.js new file mode 100644 index 0000000..777233c --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/sl.js @@ -0,0 +1 @@ +(function(d){ const l = d['sl'] = d['sl'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align center":"Sredinska poravnava","Align left":"Poravnava levo","Align right":"Poravnava desno",Aquamarine:"Akvamarin",Big:"Veliko",Black:"Črna","Block quote":"Blokiraj citat",Blue:"Modra",Bold:"Krepko",Cancel:"Prekliči","Choose heading":"Izberi naslov",Code:"Koda",Default:"Privzeto","Dim grey":"Temno siva","Document colors":"Barve dokumenta","Dropdown toolbar":"","Editor toolbar":"","Font Background Color":"Barva ozadja pisave","Font Color":"Barva pisave","Font Family":"Vrsta oz. tip pisave","Font Size":"Velikost pisave",Green:"Zelena",Grey:"Siva",Heading:"Naslov","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"","Heading 4":"","Heading 5":"","Heading 6":"",Huge:"Ogromno",Italic:"Poševno",Justify:"Postavi na sredino","Light blue":"Svetlo modra","Light green":"Svetlo zelena","Light grey":"Svetlo siva",Next:"",Orange:"Oranžna",Paragraph:"Odstavek",Previous:"",Purple:"Vijolična",Red:"Rdeča","Remove color":"Odstrani barvo","Rich Text Editor":"","Rich Text Editor, %0":"",Save:"Shrani","Show more items":"",Small:"Majhna","Text alignment":"Poravnava besedila","Text alignment toolbar":"Orodna vrstica besedila",Tiny:"Drobna",Turquoise:"Turkizna",Underline:"Podčrtaj",White:"Bela",Yellow:"Rumena"} );l.getPluralForm=function(n){return (n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/sq.js b/public/js/ckedit5/20.0.0/translations/sq.js new file mode 100644 index 0000000..f37d5fe --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/sq.js @@ -0,0 +1 @@ +(function(d){ const l = d['sq'] = d['sq'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Radhit në mes","Align left":"Radhit majtas","Align right":"Radhit djathtas","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Big:"I madh",Black:"","Block quote":"Thonjëzat",Blue:"","Blue marker":"Shënuesi kaltër",Bold:"Trash",Border:"","Bulleted List":"Listë me Pika",Cancel:"Anulo","Cell properties":"","Center table":"","Centered image":"Foto e vendosur në mes","Change image text alternative":"Ndrysho tekstin zgjedhor të fotos","Choose heading":"Përzgjidh nëntitullin",Code:"Kod",Color:"","Color picker":"",Column:"Kolona",Dashed:"",Default:"Parazgjedhur","Delete column":"Gris kolonën","Delete row":"Grish rreshtin","Dim grey":"",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"Redakto nyjën","Editor toolbar":"","Enter image caption":"Shto përshkrimin e fotos","Font Background Color":"","Font Color":"","Font Family":"Familja e fontit","Font Size":"Madhësia tekstit","Full size image":"Foto me madhësi të plotë",Green:"","Green marker":"Shënuesi gjelbër","Green pen":"Lapsi gjelbër",Grey:"",Groove:"","Header column":"Kolona e kokës","Header row":"Rreshti i kokës",Heading:"Nëntitulli","Heading 1":"Nëntitulli 1","Heading 2":"Nëntitulli 2","Heading 3":"Nëntitulli 3","Heading 4":"","Heading 5":"","Heading 6":"",Height:"",Highlight:"Ngjyrimi","Horizontal text alignment toolbar":"",Huge:"I stërmadh","Image toolbar":"","image widget":"Vegla e fotos","Insert column left":"","Insert column right":"","Insert image":"Shto Foto","Insert media":"Shto Medie","Insert row above":"Shto rresht sipër","Insert row below":"Shto rresht poshtë","Insert table":"Shto tabelë",Inset:"",Italic:"Pjerrtë",Justify:"Plotësim","Justify cell text":"","Left aligned image":"Foto e vendosur majtas","Light blue":"","Light green":"","Light grey":"",Link:"Shto nyjën","Link URL":"Nyja e URL-së","Media URL":"URL e Medies","media widget":"Vegla e medies","Merge cell down":"Bashko kutizat poshtë","Merge cell left":"Bashko kutizat majtas","Merge cell right":"Bashko kutizat djathtas","Merge cell up":"Bashko kutizat sipër","Merge cells":"Bashko kutizat",Next:"",None:"","Numbered List":"Listë me Numra","Open in a new tab":"","Open link in new tab":"Hap nyjën në faqe të re",Orange:"",Outset:"",Padding:"",Paragraph:"Paragrafi","Paste the media URL in the input.":"","Pink marker":"Shënuesi rozë",Previous:"",Purple:"",Red:"","Red pen":"Lapsi kuq",Redo:"Ribëj","Remove color":"","Remove highlight":"Largo ngjyrimet","Rich Text Editor":"Redaktues i Tekstit të Pasur","Rich Text Editor, %0":"Redaktues i Tekstit të Pasur, %0",Ridge:"","Right aligned image":"Foto e vendosur djathtas",Row:"Rreshti",Save:"Ruaj","Select column":"","Select row":"","Show more items":"","Side image":"Foto anësore",Small:"I vogël",Solid:"","Split cell horizontally":"Ndaj kutizat horizontalisht","Split cell vertically":"Ndajë kutizat vertikalisht",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Radhitja e tekstit","Text alignment toolbar":"","Text alternative":"Teksti zgjedhor","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL nuk duhet të jetë e zbrazët.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Kjo nyje nuk ka URL","This media URL is not supported.":"URL e medies nuk mbështetet.",Tiny:"I vocërr","Tip: Paste the URL into the content to embed faster.":"",Turquoise:"",Underline:"Nënvizuar",Undo:"Rikthe",Unlink:"Largo nyjën","Upload failed":"Ngarkimi dështoi","Upload in progress":"Duke ngarkuar","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:"","Yellow marker":"Shënuesi verdh"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/sr-latn.js b/public/js/ckedit5/20.0.0/translations/sr-latn.js new file mode 100644 index 0000000..0135b2d --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/sr-latn.js @@ -0,0 +1 @@ +(function(d){ const l = d['sr-latn'] = d['sr-latn'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 of %1","Align cell text to the bottom":"Poravnajte tekst ćelije prema dole","Align cell text to the center":"Poravnajte tekst ćelije u sredinu","Align cell text to the left":"Poravnajte tekst ćelije levo","Align cell text to the middle":"Poravnajte tekst ćelije u sredinu","Align cell text to the right":"Poravnajte tekst ćelije desno","Align cell text to the top":"Poravnajte tekst ćelije prema gore","Align center":"Centralno ravnanje","Align left":"Levo ravnanje","Align right":"Desno ravnanje","Align table to the left":"Poravnajte tabelu na levu stranu","Align table to the right":"Poravnajte tabelu na desnu stranu",Alignment:"Poravnanje",Aquamarine:"Zelenkastoplava",Background:"Pozadina",Big:"Veliko",Black:"Crna","Block quote":"Citat",Blue:"Plava","Blue marker":"Plavi marker",Bold:"Podebljano",Border:"Granica","Bulleted List":"Lista sa tačkama",Cancel:"Odustani","Cell properties":"Svojstva ćelije","Center table":"Centar tabele","Centered image":"Slika u sredini","Change image text alternative":"Izmena alternativnog teksta","Choose heading":"Odredi stil",Code:"Kod",Color:"Boja","Color picker":"Birač boja",Column:"Kolona",Dashed:"Razbijeno","Decrease indent":"Smanji uvlačenje",Default:"Оsnovni","Delete column":"Briši kolonu","Delete row":"Briši red","Dim grey":"Bledo siva",Dimensions:"Dimenzija","Document colors":"Boje dokumenta",Dotted:"Sa tačkama",Double:"Dvostruki",Downloadable:"Moguće preuzimanje","Dropdown toolbar":"Padajuća traka sa alatkama","Edit link":"Ispravi link","Editor toolbar":"Uređivač traka sa alatkama","Enter image caption":"Odredi tekst ispod slike","Font Background Color":"Boja pozadine slova","Font Color":"Boja slova","Font Family":"Font","Font Size":"Veličina fonta","Full size image":"Slika u punoj veličini",Green:"Zelena","Green marker":"Zeleni marker","Green pen":"Zelena olovka",Grey:"Siva",Groove:"Kolosek","Header column":"Kolona za zaglavlje","Header row":"Red za zaglavlje",Heading:"Stilovi","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6",Height:"Visina",Highlight:"Isticanje","Horizontal text alignment toolbar":"Horizontalna traka sa alatkama za poravnavanje teksta",Huge:"Ogromno","Image toolbar":"Slika traka sa alatkama","image widget":"modul sa slikom","Increase indent":"Povećaj uclačenje","Insert code block":"Dodaj blok koda","Insert column left":"Dodaj kolonu levo","Insert column right":"Dodaj kolonu desno","Insert image":"Dodaj sliku","Insert media":"Dodaj media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Dodaj red iznad","Insert row below":"Dodaj red ispod","Insert table":"Dodaj tabelu",Inset:"Prilog",Italic:"Kurziv",Justify:"Obostrano ravnanje","Justify cell text":"Opravdajte tekst ćelije","Left aligned image":"Leva slika","Light blue":"Svetloplava","Light green":"Svetlo zelena","Light grey":"Svetlo siva",Link:"Link","Link URL":"URL link","Media URL":"Media URL","media widget":"Media widget","Merge cell down":"Spoj ćelije na dole","Merge cell left":"Spoj ćelije na levo","Merge cell right":"Spoj ćelije na desno","Merge cell up":"Spoj ćelije na gore","Merge cells":"Spoj ćelije",Next:"Sledeći",None:"Nijedan","Numbered List":"Lista sa brojevima","Open in a new tab":"Otvori u novoj kartici","Open link in new tab":"Otvori link u novom prozoru",Orange:"Narandžasta",Outset:"Početak",Padding:"Postavljanje",Paragraph:"Pasus","Paste the media URL in the input.":" Nalepi medijski URL u polje za unos.","Pink marker":"Roza marker","Plain text":"Običan tekst",Previous:"Prethodni",Purple:"Ljubičasta",Red:"Crvena","Red pen":"Crvena olovka",Redo:"Ponovo","Remove color":"Otkloni boju","Remove highlight":"Ukloni isticanje","Rich Text Editor":"Prošireni uređivač teksta","Rich Text Editor, %0":"Prošireni uređivač teksta, %0",Ridge:"Greben","Right aligned image":"Desna slika",Row:"Red",Save:"Sačuvaj","Select all":"Označi sve","Select column":"Odaberi kolonu","Select row":"Odaberi red","Show more items":"Prikaži još stavki","Side image":"Bočna slika",Small:"Malo",Solid:"Čvrst","Split cell horizontally":"Deli ćelije vodoravno","Split cell vertically":"Deli ćelije uspravno",Style:"Stil","Table alignment toolbar":"Traka sa alatkama za poravnavanje tabele","Table cell text alignment":"Poravnaj tekst u tabeli","Table properties":"Svojstva tabele","Table toolbar":"Tabela traka sa alatkama","Text alignment":"Ravnanje teksta","Text alignment toolbar":"Alatke za ravnanje teksta","Text alternative":"Alternativni tekst","Text highlight toolbar":"Alatke za markiranje teksta","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Boja je nevažeća. Pokušajte sa \"# FF0000\" ili \"rgb (255,0,0)\" ili \"crvena\".","The URL must not be empty.":"URL ne sme biti prazan.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Vrednost je nevažeća. Pokušajte sa „10pk“ ili „2em“ ili jednostavno „2“.","This link has no URL":"Link ne sadrži URL","This media URL is not supported.":"Ovaj media URL tip nije podržan.",Tiny:"Sitno","Tip: Paste the URL into the content to embed faster.":"Savet: Zalepite URL u sadržaj da bi ste ga brže ugradili.",Turquoise:"Tirkizna",Underline:"Podvučen",Undo:"Povlačenje",Unlink:"Оtkloni link","Upload failed":"Postavljanje neuspešno","Upload in progress":"Postavljanje u toku","Vertical text alignment toolbar":"Vertikalna traka sa alatkama za poravnavanje teksta",White:"Bela","Widget toolbar":"Видгет трака са алаткама",Width:"Širina",Yellow:"Žuta","Yellow marker":"Žuti marker"} );l.getPluralForm=function(n){return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/sr.js b/public/js/ckedit5/20.0.0/translations/sr.js new file mode 100644 index 0000000..9f284eb --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/sr.js @@ -0,0 +1 @@ +(function(d){ const l = d['sr'] = d['sr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 of %1","Align cell text to the bottom":"Поравнајте текст ћелије према доле","Align cell text to the center":"Поравнајте текст ћелије у средину","Align cell text to the left":"Поравнајте текст ћелије лево","Align cell text to the middle":"Поравнајте текст ћелије у средину","Align cell text to the right":"Поравнајте текст ћелије десно","Align cell text to the top":"Поравнајте текст ћелије према горе","Align center":"Централно равнанје","Align left":"Лево равнање","Align right":"Десно равнање","Align table to the left":"Поравнајте табелу на леву страну","Align table to the right":"Поравнајте табелу на десну страну",Alignment:"Поравнање",Aquamarine:"Зеленкастоплава",Background:"Позадина",Big:"Велико",Black:"Црна","Block quote":"Цитат",Blue:"Плава","Blue marker":"Плави маркер",Bold:"Подебљано",Border:"Граница","Bulleted List":"Листа са тачкама",Cancel:"Одустани","Cell properties":"Својства ћелије","Center table":"Центар табеле","Centered image":"Слика у средини","Change image text alternative":"Измена алтернативног текста","Choose heading":"Одреди стил",Code:"Код",Color:"Боја","Color picker":"Бирач боја",Column:"Колона",Dashed:"Разбијено","Decrease indent":"Смањи увлачење",Default:"Основни","Delete column":"Бриши колону","Delete row":"Бриши ред","Dim grey":"Бледо сива",Dimensions:"Димензија","Document colors":"Боје документа",Dotted:"Са тачкама",Double:"Двоструко",Downloadable:"Могуће преузимање","Dropdown toolbar":"Падајућа трака са алаткама","Edit link":"Исправи линк","Editor toolbar":"Уређивач трака са алаткама","Enter image caption":"Одреди текст испод слике","Font Background Color":"Боја позадине слова","Font Color":"Боја слова","Font Family":"Фонт","Font Size":"Величина фонта","Full size image":"Слика у пуној величини",Green:"Зелена","Green marker":"Зелени маркер","Green pen":"Зелена оловка",Grey:"Сива",Groove:"Колосек","Header column":"Колона за заглавље","Header row":"Ред за заглавлје",Heading:"Стилови","Heading 1":"Наслов 1","Heading 2":"Наслов 2","Heading 3":"Наслов 3","Heading 4":"Наслов 4","Heading 5":"Наслов 5","Heading 6":"Наслов 6",Height:"Висина",Highlight:"Истицање","Horizontal text alignment toolbar":"Хоризонтална трака са алаткама за поравнање текста",Huge:"Огромно","Image toolbar":"Слика трака са алтакама","image widget":"модул са сликом","Increase indent":"Повећај увлачење","Insert code block":"Додај блок кода","Insert column left":"Додај колону лево","Insert column right":"Додај колону десно","Insert image":"Додај слику","Insert media":"Додај медиа","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Додај ред изнад","Insert row below":"Додај ред испод","Insert table":"Додај табелу",Inset:"Прилог",Italic:"Курзив",Justify:"Обострано равнање","Justify cell text":"Оправдајте текст ћелије","Left aligned image":"Лева слика","Light blue":"Светлоплава","Light green":"Светлозелена","Light grey":"Светло сива",Link:"Линк","Link URL":"УРЛ линк","Media URL":"Mедиа УРЛ","media widget":"Медиа wидгет","Merge cell down":"Спој ћелије на доле","Merge cell left":"Cпој ћелије на лево","Merge cell right":"Спој ћелије на десно","Merge cell up":"Спој ћелије на горе","Merge cells":"Спој ћелије",Next:"Следећи",None:"Ниједан","Numbered List":"Листа са бројевима","Open in a new tab":"Отвори у новој картици","Open link in new tab":"Отвори линк у новом прозору",Orange:"Нараџаста",Outset:"Почетак",Padding:"Постављање",Paragraph:"Пасус","Paste the media URL in the input.":"Налепи медијски УРЛ у поље за унос","Pink marker":"Роза маркер","Plain text":"Обичан текст",Previous:"Претходни",Purple:"Љубичаста",Red:"Црвена","Red pen":"Црвена оловка",Redo:"Поново","Remove color":"Отклони боју","Remove highlight":"Уклони истицање","Rich Text Editor":"Проширен уређивач текста","Rich Text Editor, %0":"Проширени уређивач текста, %0",Ridge:"Гребен","Right aligned image":"Десна слика",Row:"Ред",Save:"Сачувај","Select all":"Означи све.","Select column":"Изабери колону","Select row":"Изабери ред","Show more items":"Прикажи још ставки","Side image":"Бочна слика",Small:"Мало",Solid:"Чврст","Split cell horizontally":"Дели ћелије водоравно","Split cell vertically":"Дели ћелије усправно",Style:"Стил","Table alignment toolbar":"Трака са алаткама за поравнање табеле","Table cell text alignment":"Поравнај тексту табели","Table properties":"Својства табеле","Table toolbar":"Табела трака са алаткама","Text alignment":"Равнање текста","Text alignment toolbar":"Алатке за равнање текста","Text alternative":"Алтернативни текст","Text highlight toolbar":"Алатке за маркирање текста","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Боја је неважећа. Покушајте са \"#FF0000\" или \"rgb(255,0,0)\" или \"црвена\".","The URL must not be empty.":"УРЛ не сме бити празан.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Вредност је неважећа. Покушајте са \"10px\" или \"2em\" или једноставно \"2\".","This link has no URL":"Линк не садржи УРЛ","This media URL is not supported.":"Овај медиа УРЛ тип није подржан.",Tiny:"Ситно","Tip: Paste the URL into the content to embed faster.":"Савет: Залепите УРЛ у садржај да би сте га брже уградили.",Turquoise:"Тиркизна",Underline:"Подвучен",Undo:"Повлачење",Unlink:"Отклони линк","Upload failed":"Постављање неуспешно","Upload in progress":"Постављање у току","Vertical text alignment toolbar":"Вертикална трака са алаткама за поравнање текста",White:"Бела","Widget toolbar":"Widget traka sa alatkama",Width:"Ширина",Yellow:"Жута","Yellow marker":"Жути маркер"} );l.getPluralForm=function(n){return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/sv.js b/public/js/ckedit5/20.0.0/translations/sv.js new file mode 100644 index 0000000..c84d898 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/sv.js @@ -0,0 +1 @@ +(function(d){ const l = d['sv'] = d['sv'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Centrera","Align left":"Vänsterjustera","Align right":"Högerjustera","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Big:"Stor",Black:"","Block quote":"Blockcitat",Blue:"","Blue marker":"Blå markering",Bold:"Fet",Border:"","Bulleted List":"Punktlista",Cancel:"Avbryt","Cell properties":"","Center table":"","Centered image":"Centrerad bild","Change image text alternative":"Ändra bildens alternativa text","Choose heading":"Välj rubrik",Code:"Kod",Color:"","Color picker":"",Column:"Kolumn",Dashed:"",Default:"Standard","Delete column":"Ta bort kolumn","Delete row":"Ta bort rad","Dim grey":"",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"Redigera länk","Editor toolbar":"","Enter image caption":"Fyll i bildtext","Font Background Color":"","Font Color":"","Font Family":"Typsnitt","Font Size":"Teckenstorlek","Full size image":"Bild i full storlek",Green:"","Green marker":"Grön markering","Green pen":"Grön penna",Grey:"",Groove:"","Header column":"","Header row":"",Heading:"Rubrik","Heading 1":"Rubrik 1","Heading 2":"Rubrik 2","Heading 3":"Rubrik 3","Heading 4":"Rubrik 4","Heading 5":"Rubrik 5","Heading 6":"Rubrik 6",Height:"",Highlight:"Markera","Horizontal text alignment toolbar":"",Huge:"Enorm","Image toolbar":"","image widget":"image widget","Insert column left":"","Insert column right":"","Insert image":"Infoga bild","Insert media":"Lägg in media","Insert row above":"","Insert row below":"","Insert table":"Lägg in tabell",Inset:"",Italic:"Kursiv",Justify:"Justera till marginaler","Justify cell text":"","Left aligned image":"Vänsterjusterad bild","Light blue":"","Light green":"","Light grey":"",Link:"Länk","Link URL":"Länkens URL","Media URL":"","media widget":"","Merge cell down":"","Merge cell left":"","Merge cell right":"","Merge cell up":"","Merge cells":"",Next:"",None:"","Numbered List":"Numrerad lista","Open in a new tab":"","Open link in new tab":"Öppna länk i ny flik",Orange:"",Outset:"",Padding:"",Paragraph:"Paragraf","Paste the media URL in the input.":"","Pink marker":"Rosa markering",Previous:"",Purple:"",Red:"","Red pen":"Röd penna",Redo:"Gör om","Remove color":"","Remove highlight":"Ta bort markering","Rich Text Editor":"Rich Text-editor","Rich Text Editor, %0":"Rich Text-editor, %0",Ridge:"","Right aligned image":"Högerjusterad bild",Row:"Rad",Save:"Spara","Select column":"","Select row":"","Show more items":"","Side image":"Kantbild",Small:"Liten",Solid:"","Split cell horizontally":"","Split cell vertically":"",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Textjustering","Text alignment toolbar":"","Text alternative":"Alternativ text","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Denna länk saknar URL","This media URL is not supported.":"",Tiny:"Mycket liten","Tip: Paste the URL into the content to embed faster.":"",Turquoise:"",Underline:"Understrykning",Undo:"Ångra",Unlink:"Ta bort länk","Upload failed":"Uppladdning misslyckades","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:"","Yellow marker":"Gul markering"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/th.js b/public/js/ckedit5/20.0.0/translations/th.js new file mode 100644 index 0000000..202b568 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/th.js @@ -0,0 +1 @@ +(function(d){ const l = d['th'] = d['th'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"พลอยสีฟ้า",Background:"",Big:"ใหญ่",Black:"สีดำ","Block quote":"คำพูดบล็อก",Blue:"สีน้ำเงิน",Border:"",Cancel:"ยกเลิก","Cell properties":"","Center table":"","Centered image":"จัดแนวรูปกึ่งกลาง","Change image text alternative":"เปลี่ยนข้อความเมื่อไม่พบรูป","Choose heading":"เลือกขนาดหัวข้อ",Color:"","Color picker":"",Column:"คอลัมน์",Dashed:"","Decrease indent":"ลดการเยื้อง",Default:"ค่าเริ่มต้น","Delete column":"ลบคอลัมน์","Delete row":"ลบแถว","Dim grey":"สีเทาเข้ม",Dimensions:"","Document colors":"สีเอกสาร",Dotted:"",Double:"","Dropdown toolbar":"","Editor toolbar":"","Enter image caption":"ระบุคำอธิบายภาพ","Font Background Color":"สีพื้นหลังข้อความ","Font Color":"สีข้อความ","Font Family":"แบบอักษร","Font Size":"ขนาดข้อความ","Full size image":"รูปขนาดเต็ม",Green:"สีเขียว",Grey:"สีเทา",Groove:"","Header column":"หัวข้อคอลัมน์","Header row":"ส่วนหัวแถว",Heading:"หัวข้อ","Heading 1":"หัวข้อขนาด 1","Heading 2":"","Heading 3":"","Heading 4":"","Heading 5":"","Heading 6":"",Height:"","Horizontal text alignment toolbar":"",Huge:"ใหญ่มาก","Image toolbar":"เครื่องมือรูปภาพ","image widget":"วิดเจ็ตรูปภาพ","Increase indent":"เพิ่มการเยื้อง","Insert code block":"เพิ่มโค้ดบล็อก","Insert column left":"แทรกคอลัมน์ทางซ้าย","Insert column right":"แทรกคอลัมน์ทางขวา","Insert image":"แทรกรูป","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"แทรกส่วนหัวด้านบน","Insert row below":"แทรกส่วนหัวด้านล่าง","Insert table":"แทรกตาราง",Inset:"","Justify cell text":"","Left aligned image":"จัดแนวภาพซ้าย","Light blue":"สีฟ้า","Light green":"สีเขียวอ่อน","Light grey":"สีเทาอ่อน","Merge cell down":"ผสานเซลล์ด้านล่าง","Merge cell left":"ผสานเซลล์ด้านซ้าย","Merge cell right":"ผสานเซลล์ด้านขวา","Merge cell up":"ผสานเซลล์ด้านบน","Merge cells":"ผสานเซลล์",Next:"",None:"",Orange:"สีส้ม",Outset:"",Padding:"",Paragraph:"ย่อหน้า","Plain text":"ข้อความธรรมดา",Previous:"",Purple:"สีม่วง",Red:"สีแดง",Redo:"ทำซ้ำ","Remove color":"ลบสี","Rich Text Editor":"","Rich Text Editor, %0":"",Ridge:"","Right aligned image":"จัดแนวภาพขวา",Row:"แถว",Save:"บันทึก","Select column":"","Select row":"","Show more items":"","Side image":"รูปด้านข้าง",Small:"เล็ก",Solid:"","Split cell horizontally":"แยกเซลล์แนวนอน","Split cell vertically":"แยกเซลล์แนวตั้ง",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"เครื่องมือตาราง","Text alternative":"ข้อความเมื่อไม่พบรูป","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"",Tiny:"เล็กมาก",Turquoise:"สีเขียวขุ่น",Undo:"ย้อนกลับ","Upload failed":"อัปโหลดไม่สำเร็จ","Upload in progress":"กำลังดำเนินการอัปโหลด","Vertical text alignment toolbar":"",White:"สีขาว","Widget toolbar":"แถมเครื่องมือวิดเจ็ต",Width:"",Yellow:"สีเหลือง"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/tr.js b/public/js/ckedit5/20.0.0/translations/tr.js new file mode 100644 index 0000000..658f5c0 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/tr.js @@ -0,0 +1 @@ +(function(d){ const l = d['tr'] = d['tr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0/%1","Align cell text to the bottom":"Hücre içindeki metni alta hizala","Align cell text to the center":"Hücre içindeki metnini ortaya hizalama","Align cell text to the left":"Hücre içindeki metnini sola hizala","Align cell text to the middle":"Hücre içindeki metni ortaya hizala","Align cell text to the right":"Hücre içindeki metnini sağa hizala","Align cell text to the top":"Hücre içindeki metni üste hizala","Align center":"Ortala","Align left":"Sola hizala","Align right":"Sağa hizala","Align table to the left":"Tabloyu sola hizala","Align table to the right":"Tabloyu sağa hizala",Alignment:"Hizalama",Aquamarine:"Su Yeşili",Background:"Arkaplan",Big:"Büyük",Black:"Siyah","Block quote":"Alıntı",Blue:"Mavi","Blue marker":"Mavi işaretleyici",Bold:"Kalın",Border:"Kenar","Bulleted List":"Simgeli Liste",Cancel:"İptal","Cell properties":"Hücre özellikleri","Center table":"Tabloyu ortala","Centered image":"Ortalanmış görsel","Change image text alternative":"Görsel alternatif yazısını değiştir","Choose heading":"Başlık tipi seç",Code:"Kod",Color:"Renk","Color picker":"Renk seçici",Column:"Kolon",Dashed:"Kesik çizgili","Decrease indent":"Girintiyi azalt",Default:"Varsayılan","Delete column":"Kolonu sil","Delete row":"Satırı sil","Dim grey":"Koyu Gri",Dimensions:"Ölçüler","Document colors":"Belge Rengi",Dotted:"Noktalı",Double:"Çift",Downloadable:"İndirilebilir","Dropdown toolbar":"Açılır araç çubuğu","Edit link":"Bağlantıyı değiştir","Editor toolbar":"Düzenleme araç çubuğu","Enter image caption":"Resim açıklaması gir","Font Background Color":"Yazı Tipi Arkaplan Rengi","Font Color":"Yazı Tipi Rengi","Font Family":"Yazı Tipi Ailesi","Font Size":"Yazı Boyutu","Full size image":"Tam Boyut Görsel",Green:"Yeşil","Green marker":"Yeşil işaretleyici","Green pen":"Yeşik kalem",Grey:"Gri",Groove:"Yiv","Header column":"Başlık kolonu","Header row":"Başlık satırı",Heading:"Başlık","Heading 1":"1. Seviye Başlık","Heading 2":"2. Seviye Başlık","Heading 3":"3. Seviye Başlık","Heading 4":"4. Seviye Başlık","Heading 5":"5. Seviye Başlık","Heading 6":"6. Seviye Başlık",Height:"Yükseklik",Highlight:"Vurgu","Horizontal text alignment toolbar":"Yatay metin hizalama araç çubuğu",Huge:"Çok Büyük","Image toolbar":"Resim araç çubuğu","image widget":"resim aracı","Increase indent":"Girintiyi arttır","Insert code block":"Kod bloğu ekle","Insert column left":"Sola kolon ekle","Insert column right":"Sağa kolon ekle","Insert image":"Görsel Ekle","Insert media":"Medya Ekle","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Üste satır ekle","Insert row below":"Alta satır ekle","Insert table":"Tablo Ekle",Inset:"İçe",Italic:"İtalik",Justify:"İki yana yasla","Justify cell text":"Hücre içindeki metini iki yana yasla","Left aligned image":"Sola hizalı görsel","Light blue":"Açık Mavi","Light green":"Açık Yeşil","Light grey":"Açık Gri",Link:"Bağlantı","Link URL":"Bağlantı Adresi","Media URL":"Medya URL'si","media widget":"medya aracı","Merge cell down":"Aşağıya doğru birleştir","Merge cell left":"Sola doğru birleştir","Merge cell right":"Sağa doğru birleştir","Merge cell up":"Yukarı doğru birleştir","Merge cells":"Hücreleri birleştir",Next:"Sonraki",None:"Yok","Numbered List":"Numaralı Liste","Open in a new tab":"Yeni sekmede aç","Open link in new tab":"Yeni sekmede aç",Orange:"Turuncu",Outset:"Dışarıya",Padding:"İç boşluk",Paragraph:"Paragraf","Paste the media URL in the input.":"Medya URL'siini metin kutusuna yapıştırınız.","Pink marker":"Pembe işaretleyici","Plain text":"Düz metin",Previous:"Önceki",Purple:"Mor",Red:"Kırmızı","Red pen":"Kırmızı kalem",Redo:"Tekrar yap","Remove color":"Rengi Sil","Remove highlight":"Vurgulamayı temizle","Rich Text Editor":"Zengin İçerik Editörü","Rich Text Editor, %0":"Zengin İçerik Editörü, %0",Ridge:"Yükselti","Right aligned image":"Sağa hizalı görsel",Row:"Satır",Save:"Kaydet","Select all":"Hepsini seç","Select column":"Kolon seç","Select row":"Satır seç","Show more items":"Daha fazla öğe göster","Side image":"Yan Görsel",Small:"Küçük",Solid:"Dolu","Split cell horizontally":"Hücreyi yatay böl","Split cell vertically":"Hücreyi dikey böl",Style:"Stil","Table alignment toolbar":"Tablo hizalama araç çubuğu","Table cell text alignment":"Tablo hücresi metin hizalaması","Table properties":"Tablo özellikleri","Table toolbar":"Tablo araç çubuğu","Text alignment":"Yazı hizalama","Text alignment toolbar":"Yazı Hizlama Araç Çubuğu","Text alternative":"Yazı alternatifi","Text highlight toolbar":"Yazı Vurgulama Araç Çubuğu","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Geçersiz renk. \"#FF0000\" veya \"rgb(255,0,0)\" veya \"red\" deneyin.","The URL must not be empty.":"URL boş olamaz.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Geçersiz değer. \"10px\" veya \"2em\" veya sadece \"2\" deneyin.","This link has no URL":"Bağlantı adresi yok","This media URL is not supported.":"Desteklenmeyen Medya URL'si.",Tiny:"Çok Küçük","Tip: Paste the URL into the content to embed faster.":"İpucu: İçeriği daha hızlı yerleştirmek için URL'yi yapıştırın.",Turquoise:"Turkuaz",Underline:"Altı Çizgili",Undo:"Geri al",Unlink:"Bağlantıyı kaldır","Upload failed":"Yükleme başarsız","Upload in progress":"Yükleme işlemi devam ediyor","Vertical text alignment toolbar":"Dikey metin hizalama araç çubuğu",White:"Beyaz","Widget toolbar":"Bileşen araç çubuğu",Width:"Genişlik",Yellow:"Sarı","Yellow marker":"Sarı işaretleyici"} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/tt.js b/public/js/ckedit5/20.0.0/translations/tt.js new file mode 100644 index 0000000..696daa4 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/tt.js @@ -0,0 +1 @@ +(function(d){ const l = d['tt'] = d['tt'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {Bold:"Калын",Cancel:"",Code:"Код",Italic:"",Redo:"Кабатла","Remove color":"",Save:"Сакла",Underline:"",Undo:""} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/ug.js b/public/js/ckedit5/20.0.0/translations/ug.js new file mode 100644 index 0000000..e835294 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/ug.js @@ -0,0 +1 @@ +(function(d){ const l = d['ug'] = d['ug'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"قىسمەن قوللىنىش",Blue:"",Bold:"توم","Bulleted List":"بەلگە جەدىۋېلى",Cancel:"قالدۇرۇش","Centered image":"ئوتتۇردىكى رەسىم","Change image text alternative":"رەسىملىك تېكىست تاللىغۇچنى ئۆزگەرتىش","Choose heading":"تېما تاللاش",Code:"كودى","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"رەسىمنىڭ تېمىسىنى كىرگۈزۈڭ","Full size image":"ئەسلى چوڭلۇقتىكى رەسىم",Green:"",Grey:"",Heading:"تېما","Heading 1":"تېما 1","Heading 2":"تېما 2","Heading 3":"تېما 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"رەسىمچىك","Insert image":"رەسىم قىستۇرۇش",Italic:"يانتۇ","Left aligned image":"سولغا توغۇرلانغان رەسىم","Light blue":"","Light green":"","Light grey":"",Link:"ئۇلاش","Link URL":"ئۇلاش ئادىرسى",Next:"","Numbered List":"نومۇر جەدىۋېلى","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"بۆلەك",Previous:"",Purple:"",Red:"",Redo:"قايتا قىلىش","Remove color":"","Rich Text Editor":"تېكىست تەھرىرلىگۈچ","Rich Text Editor, %0":"تېكىست تەھرىرلىگۈچ، 0%","Right aligned image":"ئوڭغا توغۇرلانغان رەسىم",Save:"ساقلاش","Show more items":"","Side image":"يان رەسىم","Text alternative":"تېكىست ئاملاشتۇرۇش","This link has no URL":"",Turquoise:"",Underline:"ئاستى سىزىق",Undo:"قالدۇرۇش",Unlink:"ئۈزۈش","Upload failed":"چىقىرىش مەغلۇپ بولدى",White:"",Yellow:""} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/uk.js b/public/js/ckedit5/20.0.0/translations/uk.js new file mode 100644 index 0000000..ee680f9 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/uk.js @@ -0,0 +1 @@ +(function(d){ const l = d['uk'] = d['uk'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 із %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"По центру","Align left":"По лівому краю","Align right":"По правому краю","Align table to the left":"","Align table to the right":"",Alignment:"Вирівнювання",Aquamarine:"Аквамариновий",Background:"Фон",Big:"Великий",Black:"Чорний","Block quote":"Цитата",Blue:"Синій","Blue marker":"Синій маркер",Bold:"Жирний",Border:"Межа","Bulleted List":"Маркерний список",Cancel:"Відміна","Cell properties":"Властивості комірок","Center table":"","Centered image":"Зображення по центру","Change image text alternative":"Змінити текстову альтернативу зображення","Choose heading":"Оберіть заголовок",Code:"Код",Color:"Колір","Color picker":"",Column:"Стовпець",Dashed:"","Decrease indent":"Зменшити відступ",Default:"За замовчуванням","Delete column":"Видалити стовпець","Delete row":"Видалити рядок","Dim grey":"Темно-сірий",Dimensions:"Розміри","Document colors":"Кольори документу",Dotted:"Пунктирною",Double:"",Downloadable:"Завантажувальне","Dropdown toolbar":"Випадаюча панель інструментів","Edit link":"Редагувати посилання","Editor toolbar":"Панель інструментів редактора","Enter image caption":"Введіть підпис зображення","Font Background Color":"Колір тла шрифту","Font Color":"Колір шрифту","Font Family":"Сімейство шрифтів","Font Size":"Розмір шрифту","Full size image":"Повний розмір зображення",Green:"Зелений","Green marker":"Зелений маркер","Green pen":"Зелений маркер",Grey:"Сірий",Groove:"","Header column":"Заголовок стовпця","Header row":"Заголовок рядка",Heading:"Заголовок","Heading 1":"Заголовок 1","Heading 2":"Заголовок 2","Heading 3":"Заголовок 3","Heading 4":"Заголовок 4","Heading 5":"Заголовок 5","Heading 6":"Заголовок 6",Height:"Висота",Highlight:"Виділення","Horizontal text alignment toolbar":"Панель інструментів вирівнювання горизонтального тексту",Huge:"Величезний","Image toolbar":"Панелі інструментів зображення","image widget":"Віджет зображення","Increase indent":"Збільшити відступ","Insert code block":"Вставте блок коду","Insert column left":"Вставити стовпець зліва","Insert column right":"Вставити стовпець справа","Insert image":"Вставити зображення","Insert media":"Вставити медіа","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Вставити рядок знизу","Insert row below":"Вставити рядок зверху","Insert table":"Вставити таблицю",Inset:"",Italic:"Курсив",Justify:"По ширині","Justify cell text":"","Left aligned image":"Зображення ліворуч","Light blue":"Світло-синій","Light green":"Світло-зелений","Light grey":"Світло-сірий",Link:"Посилання","Link URL":"URL посилання","Media URL":"Медіа URL","media widget":"медіа віджет","Merge cell down":"Поєднати комірки внизу","Merge cell left":"Поєднати комірки ліворуч","Merge cell right":"Поєднати комірки праворуч","Merge cell up":"Поєднати комірки вгору","Merge cells":"Поєднати комірки",Next:"Наступний",None:"Не вказано","Numbered List":"Нумерований список","Open in a new tab":"Вікрити у новій вкладці","Open link in new tab":"Відкрити посилання у новій вкладці",Orange:"Помаранчевий",Outset:"",Padding:"Заповнення",Paragraph:"Параграф","Paste the media URL in the input.":"Вставте URL на медіа в інпут.","Pink marker":"Рожевий маркер","Plain text":"Простий текст",Previous:"Попередній",Purple:"Фіолетовий",Red:"Червоний","Red pen":"Червоний маркер",Redo:"Повтор","Remove color":"Видалити колір","Remove highlight":"Видалити виділення","Rich Text Editor":"Розширений текстовий редактор","Rich Text Editor, %0":"Розширений текстовий редактор, %0",Ridge:"","Right aligned image":"Зображення праворуч",Row:"Рядок",Save:"Зберегти","Select all":"Вибрати все","Select column":"","Select row":"","Show more items":"Показати більше","Side image":"Бокове зображення",Small:"Маленький",Solid:"Суцільний","Split cell horizontally":"Розділити комірки горизонтально","Split cell vertically":"Розділити комірки вертикально",Style:"Стиль","Table alignment toolbar":"Панель інструментів вирівнювання таблиці","Table cell text alignment":"Вирівнювання тексту комірки","Table properties":"Властивості таблиці","Table toolbar":"Панель інструментів таблиці","Text alignment":"Вирівнювання тексту","Text alignment toolbar":"Панель інструментів вирівнювання тексту","Text alternative":"Текстова альтернатива","Text highlight toolbar":"Панель виділення тексту","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Колір недійсний. Спробуйте \"#FF0000\" або \"rgb(255,0,0)\" або \"red\"","The URL must not be empty.":"URL не повинен бути порожнім.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Значення недійсне. Спробуйте \"10px\" або \"2em\" або просто \"2\"","This link has no URL":"Це посилання не має URL","This media URL is not supported.":"Даний медіа URL не підтримується.",Tiny:"Крихітний","Tip: Paste the URL into the content to embed faster.":"Вставте URL у вміст для швидкого перекладу.",Turquoise:"Бірюзовий",Underline:"Підкреслений",Undo:"Відміна",Unlink:"Видалити посилання","Upload failed":"Завантаження не вдалось","Upload in progress":"Виконується завантаження","Vertical text alignment toolbar":"Панель інструментів вертикального вирівнювання тексту",White:"Білий","Widget toolbar":"Панель інструментів віджетів",Width:"Ширина",Yellow:"Жовтий","Yellow marker":"Жовтий маркер"} );l.getPluralForm=function(n){return (n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/vi.js b/public/js/ckedit5/20.0.0/translations/vi.js new file mode 100644 index 0000000..c27c275 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/vi.js @@ -0,0 +1 @@ +(function(d){ const l = d['vi'] = d['vi'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 đến %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Canh giữa","Align left":"Canh trái","Align right":"Canh phải","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Xanh ngọc biển",Background:"",Big:"Lớn",Black:"Đen","Block quote":"Trích dẫn",Blue:"Xanh biển","Blue marker":"Bút xanh dương",Bold:"Đậm",Border:"","Bulleted List":"Danh sách đánh ký hiệu",Cancel:"Hủy","Cell properties":"","Center table":"","Centered image":"Ảnh canh giữa","Change image text alternative":"Đổi chữ alt của ảnh","Choose heading":"Chọn tiêu đề",Code:"Code",Color:"","Color picker":"",Column:"Cột",Dashed:"","Decrease indent":"Giảm lề",Default:"Mặc định","Delete column":"Xoá cột","Delete row":"Xoá hàng","Dim grey":"Xám mờ",Dimensions:"","Document colors":"Màu văn bản",Dotted:"",Double:"",Downloadable:"Có thể tải về","Dropdown toolbar":"Thanh công cụ danh mục","Edit link":"Sửa liên kết","Editor toolbar":"Thanh công cụ biên tập","Enter image caption":"Nhập mô tả ảnh","Font Background Color":"Màu nền chữ","Font Color":"Màu chữ","Font Family":"Họ chữ","Font Size":"Cỡ chữ","Full size image":"Ảnh đầy đủ",Green:"Xanh lá","Green marker":"Bút xanh lá","Green pen":"Mực xanh",Grey:"Xám",Groove:"","Header column":"Tiêu đề cột","Header row":"Tiêu đề hàng",Heading:"Tiêu đề","Heading 1":"Tiêu đề 1","Heading 2":"Tiêu đề 2","Heading 3":"Tiêu đề 3","Heading 4":"Tiêu đề 4","Heading 5":"Tiêu đề 5","Heading 6":"Tiêu đề 6",Height:"",Highlight:"Làm nổi","Horizontal text alignment toolbar":"",Huge:"Khổng lồ","Image toolbar":"Thanh công cụ hình ảnh","image widget":"tiện ích ảnh","Increase indent":"Tăng lề","Insert column left":"Thêm cột vào bên trái","Insert column right":"Thêm cột vào bên phải","Insert image":"Chèn ảnh","Insert media":"Chèn đa phương tiện","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Thêm hàng phía trên","Insert row below":"Thêm hàng ở dưới","Insert table":"Tạo bảng",Inset:"",Italic:"Nghiêng",Justify:"Canh đều","Justify cell text":"","Left aligned image":"Ảnh canh trái","Light blue":"Xanh dương","Light green":"Xanh lá nhạt","Light grey":"Xám nhạt",Link:"Chèn liên kết","Link URL":"Đường dẫn liên kết","Media URL":"Đường dẫn đa phương tiện","media widget":"tiện ích đa phương tiện","Merge cell down":"Sát nhập ô xuống dưới","Merge cell left":"Sát nhập ô qua trái","Merge cell right":"Sát nhập ô qua phải","Merge cell up":"Sát nhập ô lên trên","Merge cells":"Sát nhập ô",Next:"Tiếp theo",None:"","Numbered List":"Danh sách đánh số","Open in a new tab":"Mở trên tab mới","Open link in new tab":"Mở liên kết",Orange:"Cam",Outset:"",Padding:"",Paragraph:"Đoạn văn","Paste the media URL in the input.":"Dán đường dẫn đa phương tiện vào trường","Pink marker":"Bút hồng",Previous:"Quay lại",Purple:"Tím",Red:"Đỏ","Red pen":"Mực đỏ",Redo:"Tiếp tục","Remove color":"Xóa màu","Remove highlight":"Xóa làm nổi","Rich Text Editor":"Trình soạn thảo văn bản","Rich Text Editor, %0":"Trình soạn thảo văn bản, %0",Ridge:"","Right aligned image":"Ảnh canh phải",Row:"Hàng",Save:"Lưu","Select column":"","Select row":"","Show more items":"Xem thêm","Side image":"Ảnh một bên",Small:"Nhỏ",Solid:"","Split cell horizontally":"Tách ô theo chiều ngang","Split cell vertically":"Tách ô theo chiều dọc",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Thanh công cụ bảng","Text alignment":"Căn chỉnh văn bản","Text alignment toolbar":"Thanh công cụ canh chữ","Text alternative":"Chữ alt","Text highlight toolbar":"Thanh công cụ làm nổi chữ","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"Đường dẫn không được để trống","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Liên kết không có đường dẫn","This media URL is not supported.":"Đường dẫn đa phương tiện không hỗ trợ",Tiny:"Bé","Tip: Paste the URL into the content to embed faster.":"Mẹo: Dán đường dẫn vào nội dung để nhúng ngay",Turquoise:"Xanh ngọc bích",Underline:"Gạch dưới",Undo:"Hoàn tác",Unlink:"Bỏ liên kết","Upload failed":"Tải thất bại","Upload in progress":"Đang tải lên","Vertical text alignment toolbar":"",White:"Trắng","Widget toolbar":"Thanh công cụ tiện ích",Width:"",Yellow:"Vàng","Yellow marker":"Bút vàng"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/zh-cn.js b/public/js/ckedit5/20.0.0/translations/zh-cn.js new file mode 100644 index 0000000..534dcc7 --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/zh-cn.js @@ -0,0 +1 @@ +(function(d){ const l = d['zh-cn'] = d['zh-cn'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"第 %0 步,共 %1 步","Align cell text to the bottom":"使单元格文本对齐到底部","Align cell text to the center":"使单元格文本水平居中","Align cell text to the left":"使单元格文本左对齐","Align cell text to the middle":"使单元格文本垂直居中","Align cell text to the right":"使单元格文本右对齐","Align cell text to the top":"使单元格文本对齐到顶部","Align center":"居中","Align left":"左对齐","Align right":"右对齐","Align table to the left":"使表格左对齐","Align table to the right":"使表格右对齐",Alignment:"对齐",Aquamarine:"海蓝色",Background:"背景",Big:"大",Black:"黑色","Block quote":"块引用",Blue:"蓝色","Blue marker":"蓝色标记",Bold:"加粗",Border:"边框","Bulleted List":"项目列表",Cancel:"取消","Cell properties":"单元格属性","Center table":"表格居中","Centered image":"图片居中","Change image text alternative":"更改图片替换文本","Choose heading":"标题类型",Code:"代码",Color:"颜色","Color picker":"",Column:"列",Dashed:"虚线","Decrease indent":"减少缩进",Default:"默认","Delete column":"删除本列","Delete row":"删除本行","Dim grey":"暗灰色",Dimensions:"尺寸","Document colors":"文档中的颜色",Dotted:"点状虚线",Double:"双线",Downloadable:"可下载","Dropdown toolbar":"下拉工具栏","Edit link":"修改链接","Editor toolbar":"编辑器工具栏","Enter image caption":"输入图片标题","Font Background Color":"字体背景色","Font Color":"字体颜色","Font Family":"字体","Font Size":"字体大小","Full size image":"图片通栏显示",Green:"绿色","Green marker":"绿色标记","Green pen":"绿色笔",Grey:"灰色",Groove:"凹槽边框","Header column":"标题列","Header row":"标题行",Heading:"标题","Heading 1":"标题 1","Heading 2":"标题 2","Heading 3":"标题 3","Heading 4":"标题 4","Heading 5":"标题 5","Heading 6":"标题 6",Height:"高度",Highlight:"高亮","Horizontal text alignment toolbar":"水平文本对齐工具栏",Huge:"极大","Image toolbar":"图片工具栏","image widget":"图像小部件","Increase indent":"增加缩进","Insert code block":"插入代码块","Insert column left":"左侧插入列","Insert column right":"右侧插入列","Insert image":"插入图像","Insert media":"插入媒体","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"在上面插入一行","Insert row below":"在下面插入一行","Insert table":"插入表格",Inset:"凹边框",Italic:"倾斜",Justify:"两端对齐","Justify cell text":"对齐单元格文本","Left aligned image":"图片左侧对齐","Light blue":"浅蓝色","Light green":"浅绿色","Light grey":"浅灰色",Link:"超链接","Link URL":"链接网址","Media URL":"媒体URL","media widget":"媒体小部件","Merge cell down":"向下合并单元格","Merge cell left":"向左合并单元格","Merge cell right":"向右合并单元格","Merge cell up":"向上合并单元格","Merge cells":"合并单元格",Next:"下一步",None:"无","Numbered List":"编号列表","Open in a new tab":"在新标签页中打开","Open link in new tab":"在新标签页中打开链接",Orange:"橙色",Outset:"凸边框",Padding:"内边距",Paragraph:"段落","Paste the media URL in the input.":"在输入中粘贴媒体URL","Pink marker":"粉色标记","Plain text":"纯文本",Previous:"上一步",Purple:"紫色",Red:"红色","Red pen":"红色笔",Redo:"重做","Remove color":"移除颜色","Remove highlight":"清除高亮","Rich Text Editor":"富文本编辑器","Rich Text Editor, %0":"富文本编辑器, %0",Ridge:"垄状边框","Right aligned image":"图片右侧对齐",Row:"行",Save:"保存","Select column":"","Select row":"","Show more items":"显示更多","Side image":"图片侧边显示",Small:"小",Solid:"实线","Split cell horizontally":"水平分割单元格","Split cell vertically":"垂直拆分单元格",Style:"样式","Table alignment toolbar":"表格对齐工具栏","Table cell text alignment":"表格单元格中的文本水平对齐","Table properties":"表格属性","Table toolbar":"表格工具栏","Text alignment":"对齐","Text alignment toolbar":"对齐工具栏","Text alternative":"替换文本","Text highlight toolbar":"文本高亮工具栏","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"颜色无效。尝试使用\"#FF0000\"、\"rgb(255,0,0)\"或者\"red\"。","The URL must not be empty.":"URL不可以为空。","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"无效值。尝试使用“10px”、“2ex”或者只写“2”。","This link has no URL":"此链接没有设置网址","This media URL is not supported.":"不支持此媒体URL。",Tiny:"极小","Tip: Paste the URL into the content to embed faster.":"提示:将URL粘贴到内容中可更快地嵌入",Turquoise:"青色",Underline:"下划线",Undo:"撤销",Unlink:"取消超链接","Upload failed":"上传失败","Upload in progress":"正在上传","Vertical text alignment toolbar":"垂直文本对齐工具栏",White:"白色","Widget toolbar":"小部件工具栏",Width:"宽度",Yellow:"黄色","Yellow marker":"黄色标记"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0/translations/zh.js b/public/js/ckedit5/20.0.0/translations/zh.js new file mode 100644 index 0000000..395838e --- /dev/null +++ b/public/js/ckedit5/20.0.0/translations/zh.js @@ -0,0 +1 @@ +(function(d){ const l = d['zh'] = d['zh'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0/%1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"置中對齊","Align left":"靠左對齊","Align right":"靠右對齊","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"淺綠色",Background:"",Big:"大",Black:"黑色","Block quote":"段落引用",Blue:"藍色","Blue marker":"藍色標記",Bold:"粗體",Border:"","Bulleted List":"符號清單",Cancel:"取消","Cell properties":"","Center table":"","Centered image":"置中圖片","Change image text alternative":"修改圖片的替代文字","Choose heading":"選取標題",Code:"代碼",Color:"","Color picker":"",Column:"欄",Dashed:"","Decrease indent":"減少縮排",Default:"預設","Delete column":"刪除欄","Delete row":"刪除列","Dim grey":"淡灰色",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"可下載","Dropdown toolbar":"","Edit link":"編輯連結","Editor toolbar":"","Enter image caption":"輸入圖片說明","Font Background Color":"前景顏色","Font Color":"字體顏色","Font Family":"字型","Font Size":"字體大小","Full size image":"完整尺寸圖片",Green:"綠色","Green marker":"綠色標記","Green pen":"綠色筆",Grey:"灰色",Groove:"","Header column":"標題欄","Header row":"標題列",Heading:"標題","Heading 1":"標題 1","Heading 2":"標題 2","Heading 3":"標題 3","Heading 4":"標題 4","Heading 5":"標題 5","Heading 6":"標題 6",Height:"",Highlight:"高亮","Horizontal text alignment toolbar":"",Huge:"特大","Image toolbar":"","image widget":"圖片小工具","Increase indent":"增加縮排","Insert column left":"插入左方欄","Insert column right":"插入右方欄","Insert image":"插入圖片","Insert media":"插入影音","Insert row above":"插入上方列","Insert row below":"插入下方列","Insert table":"插入表格",Inset:"",Italic:"斜體",Justify:"左右對齊","Justify cell text":"","Left aligned image":"向左對齊圖片","Light blue":"亮藍色","Light green":"亮綠色","Light grey":"亮灰色",Link:"連結","Link URL":"連結˙ URL","Media URL":"影音URL","media widget":"影音小工具","Merge cell down":"合併下方儲存格","Merge cell left":"合併左方儲存格","Merge cell right":"合併右方儲存格","Merge cell up":"合併上方儲存格","Merge cells":"合併儲存格",Next:"下一",None:"","Numbered List":"有序清單","Open in a new tab":"在新視窗開啟","Open link in new tab":"在新視窗開啟連結",Orange:"橘色",Outset:"",Padding:"",Paragraph:"段落","Paste the media URL in the input.":"在輸入框貼上影音URL。","Pink marker":"粉色標記",Previous:"上一",Purple:"紫色",Red:"紅色","Red pen":"紅色筆",Redo:"重做","Remove color":"移除顏色","Remove highlight":"清除高亮","Rich Text Editor":"豐富文字編輯器","Rich Text Editor, %0":"豐富文字編輯器,%0",Ridge:"","Right aligned image":"向右對齊圖片",Row:"列",Save:"儲存","Select column":"","Select row":"","Show more items":"","Side image":"側邊圖片",Small:"小",Solid:"","Split cell horizontally":"水平分割儲存格","Split cell vertically":"垂直分割儲存格",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"文字對齊","Text alignment toolbar":"","Text alternative":"替代文字","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL不能空白。","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"連結沒有URL","This media URL is not supported.":"影音URL不支援。",Tiny:"特小","Tip: Paste the URL into the content to embed faster.":"提示:在內容貼上URL更快崁入。",Turquoise:"藍綠色",Underline:"底線",Undo:"取消",Unlink:"移除連結","Upload failed":"上傳失敗","Upload in progress":"正在上傳","Vertical text alignment toolbar":"",White:"白色",Width:"",Yellow:"黃色","Yellow marker":"黃色標記"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/ckeditor.js b/public/js/ckedit5/20.0.0_/ckeditor.js new file mode 100644 index 0000000..44a25db --- /dev/null +++ b/public/js/ckedit5/20.0.0_/ckeditor.js @@ -0,0 +1,7 @@ +/*! + * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md. + */ +(function(e){const t=e["de"]=e["de"]||{};t.dictionary=Object.assign(t.dictionary||{},{"%0 of %1":"%0 von %1","Align cell text to the bottom":"Zellentext unten ausrichten","Align cell text to the center":"Zellentext zentriert ausrichten","Align cell text to the left":"Zellentext linksbündig ausrichten","Align cell text to the middle":"Zellentext mittig ausrichten","Align cell text to the right":"Zellentext rechtsbündig ausrichten","Align cell text to the top":"Zellentext oben ausrichten","Align center":"Zentriert","Align left":"Linksbündig","Align right":"Rechtsbündig","Align table to the left":"Tabelle links ausrichten","Align table to the right":"Tabelle rechts ausrichten",Alignment:"Ausrichtung","Almost equal to":"Gerundet",Angle:"Winkel-Zeichen","Approximately equal to":"Ungefähr gleich",Aquamarine:"Aquamarinblau","Asterisk operator":"Hodge-Stern-Operator","Austral sign":"Austral-Zeichen","back with leftwards arrow above":"„Back“ darüber Pfeil nach links",Background:"Hintergrund",Big:"Groß","Bitcoin sign":"Bitcoin-Zeichen",Black:"Schwarz","Block quote":"Blockzitat",Blue:"Blau","Blue marker":"Blauer Marker",Bold:"Fett",Border:"Rahmen","Bulleted List":"Aufzählungsliste",Cancel:"Abbrechen","Cedi sign":"Cedi-Zeichen","Cell properties":"Zelleneigenschaften","Cent sign":"Cent-Zeichen","Center table":"Tabelle zentrieren","Centered image":"zentriertes Bild","Change image text alternative":"Alternativ Text ändern","Character categories":"Zeichenkategorien","Choose heading":"Überschrift auswählen",Code:"Code","Colon sign":"Colón-Zeichen",Color:"Farbe","Color picker":"Farbwähler",Column:"Spalte","Contains as member":"Enthält als Element","Copyright sign":"Copyright-Zeichen","Cruzeiro sign":"Cruzeiro-Zeichen","Currency sign":"Währungssymbol",Dashed:"Gestrichelt","Decrease indent":"Einzug verkleinern",Default:"Standard","Degree sign":"Grad-Zeichen","Delete column":"Spalte löschen","Delete row":"Zeile löschen","Dim grey":"Dunkelgrau",Dimensions:"Größe","Division sign":"Geteilt-Zeichen","Document colors":"Dokumentfarben","Dollar sign":"Dollar-Zeichen","Dong sign":"Đồng-Zeichen",Dotted:"Gepunktet",Double:"Doppelt","Double dagger":"Zweibalkenkreuz","Double exclamation mark":"Doppeltes Ausrufezeichen","Double low-9 quotation mark":"Doppelte Anführungszeichen links unten","Double question mark":"Doppeltes Fragezeichen",Downloadable:"Herunterladbar","downwards arrow to bar":"Pfeil nach unten zum Querstrich","downwards dashed arrow":"Gestrichelter Pfeil nach unten","downwards double arrow":"Doppelpfeil nach unten","Drachma sign":"Drachme-Zeichen","Dropdown toolbar":"Dropdown-Liste Werkzeugleiste","Edit link":"Link bearbeiten","Editor toolbar":"Editor Werkzeugleiste","Element of":"Element von","Em dash":"Geviertstrich","Empty set":"Leere Menge","En dash":"Halbgeviertstrich","end with leftwards arrow above":"„End“ darüber Pfeil nach links","Enter image caption":"Bildunterschrift eingeben","Euro sign":"Euro-Zeichen","Euro-currency sign":"Euro-Währungszeichen","Exclamation question mark":"Ruf-Frage-Zeichen","Font Background Color":"Hintergrundfarbe","Font Color":"Schriftfarbe","Font Family":"Schriftart","Font Size":"Schriftgröße","For all":"Allquantor","Fraction slash":"Schrägstrich","French franc sign":"Französischer Franc-Zeichen","Full size image":"Bild in voller Größe","German penny sign":"Pfennig-Zeichen","Greater-than or equal to":"Größer als oder gleich","Greater-than sign":"Größer-als-Zeichen",Green:"Grün","Green marker":"Grüner Marker","Green pen":"Grüne Schriftfarbe",Grey:"Grau",Groove:"Eingeritzt","Guarani sign":"Guaraní-Zeichen","Header column":"Kopfspalte","Header row":"Kopfzeile",Heading:"Überschrift","Heading 1":"Überschrift 1","Heading 2":"Überschrift 2","Heading 3":"Überschrift 3","Heading 4":"Überschrift 4","Heading 5":"Überschrift 5","Heading 6":"Überschrift 6",Height:"Höhe",Highlight:"Texthervorhebung","Horizontal ellipsis":"Auslassungspunkte","Horizontal line":"Horizontale Linie","Horizontal text alignment toolbar":"Werkzeugleiste für die horizontale Zellentext-Ausrichtung","Hryvnia sign":"Hrywnja-Zeichen",Huge:"Sehr groß","Identical to":"Identisch mit","Image toolbar":"Bild Werkzeugleiste","image widget":"Bild-Steuerelement","Increase indent":"Einzug vergrößern","Indian rupee sign":"Indische Rupie-Zeichen",Infinity:"Unendlich-Zeichen","Insert code block":"Block einfügen","Insert column left":"Spalte links einfügen","Insert column right":"Spalte rechts einfügen","Insert image":"Bild einfügen","Insert media":"Medium einfügen","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Zeile oben einfügen","Insert row below":"Zeile unten einfügen","Insert table":"Tabelle einfügen",Inset:"Eingelassen",Integral:"Integral-Zeichen",Intersection:"Schnitt","Inverted exclamation mark":"Umgekehrtes Ausrufezeichen","Inverted question mark":"Umgekehrtes Fragezeichen",Italic:"Kursiv",Justify:"Blocksatz","Justify cell text":"Zellentext als Blocksatz ausrichten","Kip sign":"Kip-Zeichen","Latin capital letter a with breve":"Lateinischer Großbuchstabe a mit Breve","Latin capital letter a with macron":"Lateinischer Großbuchstabe a mit Makron","Latin capital letter a with ogonek":"Lateinischer Großbuchstabe a mit Ogonek","Latin capital letter c with acute":"Lateinischer Großbuchstabe c mit Akut","Latin capital letter c with caron":"Lateinischer Großbuchstabe c mit Hatschek","Latin capital letter c with circumflex":"Lateinischer Großbuchstabe c mit Zirkumflex","Latin capital letter c with dot above":"Lateinischer Großbuchstabe c mit Punkt darüber","Latin capital letter d with caron":"Lateinischer Großbuchstabe d mit Hatschek","Latin capital letter d with stroke":"Lateinischer Großbuchstabe d mit Querstrich","Latin capital letter e with breve":"Lateinischer Großbuchstabe e mit Breve","Latin capital letter e with caron":"Lateinischer Großbuchstabe e mit Hatschek","Latin capital letter e with dot above":"Lateinischer Großbuchstabe e mit Punkt darüber","Latin capital letter e with macron":"Lateinischer Großbuchstabe e mit Makron","Latin capital letter e with ogonek":"Lateinischer Großbuchstabe e mit Ogonek","Latin capital letter eng":"Lateinischer Großbuchstabe Eng","Latin capital letter g with breve":"Lateinischer Großbuchstabe g mit Breve","Latin capital letter g with cedilla":"Lateinischer Großbuchstabe g mit Cedille","Latin capital letter g with circumflex":"Lateinischer Großbuchstabe g mit Zirkumflex","Latin capital letter g with dot above":"Lateinischer Großbuchstabe g mit Punkt darüber","Latin capital letter h with circumflex":"Lateinischer Großbuchstabe h mit Zirkumflex","Latin capital letter h with stroke":"Lateinischer Großbuchstabe h mit Querstrich","Latin capital letter i with breve":"Lateinischer Großbuchstabe i mit Breve","Latin capital letter i with dot above":"Lateinischer Großbuchstabe i mit Punkt darüber","Latin capital letter i with macron":"Lateinischer Großbuchstabe i mit Makron","Latin capital letter i with ogonek":"Lateinischer Großbuchstabe i mit Ogonek","Latin capital letter i with tilde":"Lateinischer Großbuchstabe i mit Tilde","Latin capital letter j with circumflex":"Lateinischer Großbuchstabe j mit Zirkumflex","Latin capital letter k with cedilla":"Lateinischer Großbuchstabe k mit Cedille","Latin capital letter l with acute":"Lateinischer Großbuchstabe l mit Akut","Latin capital letter l with caron":"Lateinischer Großbuchstabe l mit Hatschek","Latin capital letter l with cedilla":"Lateinischer Großbuchstabe l mit Cedille","Latin capital letter l with middle dot":"Lateinischer Großbuchstabe l mit Mittelpunkt","Latin capital letter l with stroke":"Lateinischer Großbuchstabe l mit Querstrich","Latin capital letter n with acute":"Lateinischer Großbuchstabe n mit Akut","Latin capital letter n with caron":"Lateinischer Großbuchstabe n mit Hatschek","Latin capital letter n with cedilla":"Lateinischer Großbuchstabe n mit Cedille","Latin capital letter o with breve":"Lateinischer Großbuchstabe o mit Breve","Latin capital letter o with double acute":"Lateinischer Großbuchstabe o mit doppeltem Akut","Latin capital letter o with macron":"Lateinischer Großbuchstabe o mit Makron","Latin capital letter r with acute":"Lateinischer Großbuchstabe r mit Akut","Latin capital letter r with caron":"Lateinischer Großbuchstabe r mit Hatschek","Latin capital letter r with cedilla":"Lateinischer Großbuchstabe r mit Cedille","Latin capital letter s with acute":"Lateinischer Großbuchstabe s mit Akut","Latin capital letter s with caron":"Lateinischer Großbuchstabe s mit Hatschek","Latin capital letter s with cedilla":"Lateinischer Großbuchstabe s mit Cedille","Latin capital letter s with circumflex":"Lateinischer Großbuchstabe s mit Zirkumflex","Latin capital letter t with caron":"Lateinischer Großbuchstabe t mit Hatschek","Latin capital letter t with cedilla":"Lateinischer Großbuchstabe t mit Cedille","Latin capital letter t with stroke":"Lateinischer Großbuchstabe t mit Querstrich","Latin capital letter u with breve":"Lateinischer Großbuchstabe u mit Breve","Latin capital letter u with double acute":"Lateinischer Großbuchstabe u mit doppeltem Akut","Latin capital letter u with macron":"Lateinischer Großbuchstabe u mit Makron","Latin capital letter u with ogonek":"Lateinischer Großbuchstabe u mit Ogonek","Latin capital letter u with ring above":"Lateinischer Großbuchstabe u mit Kroužek darüber","Latin capital letter u with tilde":"Lateinischer Großbuchstabe u mit Tilde","Latin capital letter w with circumflex":"Lateinischer Großbuchstabe w mit Zirkumflex","Latin capital letter y with circumflex":"Lateinischer Großbuchstabe y mit Zirkumflex","Latin capital letter y with diaeresis":"Lateinischer Großbuchstabe y mit Trema","Latin capital letter z with acute":"Lateinischer Großbuchstabe z mit Akut","Latin capital letter z with caron":"Lateinischer Großbuchstabe z mit Hatschek","Latin capital letter z with dot above":"Lateinischer Großbuchstabe z mit Punkt darüber","Latin capital ligature ij":"Große lateinische Ligatur ij","Latin capital ligature oe":"Große lateinische Ligatur oe","Latin small letter a with breve":"Lateinischer Kleinbuchstabe a mit Breve","Latin small letter a with macron":"Lateinischer Kleinbuchstabe a mit Makron","Latin small letter a with ogonek":"Lateinischer Kleinbuchstabe a mit Ogonek","Latin small letter c with acute":"Lateinischer Kleinbuchstabe c mit Akut","Latin small letter c with caron":"Lateinischer Kleinbuchstabe c mit Hatschek","Latin small letter c with circumflex":"Lateinischer Kleinbuchstabe c mit Zirkumflex","Latin small letter c with dot above":"Lateinischer Kleinbuchstabe c mit Punkt darüber","Latin small letter d with caron":"Lateinischer Kleinbuchstabe d mit Hatschek","Latin small letter d with stroke":"Lateinischer Kleinbuchstabe d mit Querstrich","Latin small letter dotless i":"Lateinischer Kleinbuchstabe i ohne Punkt","Latin small letter e with breve":"Lateinischer Kleinbuchstabe e mit Breve","Latin small letter e with caron":"Lateinischer Kleinbuchstabe e mit Hatschek","Latin small letter e with dot above":"Lateinischer Kleinbuchstabe e mit Punkt darüber","Latin small letter e with macron":"Lateinischer Kleinbuchstabe e mit Makron","Latin small letter e with ogonek":"Lateinischer Kleinbuchstabe e mit Ogonek","Latin small letter eng":"Lateinischer Kleinbuchstabe Eng","Latin small letter f with hook":"Lateinischer Kleinbuchstabe f mit Haken","Latin small letter g with breve":"Lateinischer Kleinbuchstabe g mit Breve","Latin small letter g with cedilla":"Lateinischer Kleinbuchstabe g mit Cedille","Latin small letter g with circumflex":"Lateinischer Kleinbuchstabe g mit Zirkumflex","Latin small letter g with dot above":"Lateinischer Kleinbuchstabe g mit Punkt darüber","Latin small letter h with circumflex":"Lateinischer Kleinbuchstabe h mit Zirkumflex","Latin small letter h with stroke":"Lateinischer Kleinbuchstabe h mit Querstrich","Latin small letter i with breve":"Lateinischer Kleinbuchstabe i mit Breve","Latin small letter i with macron":"Lateinischer Kleinbuchstabe i mit Makron","Latin small letter i with ogonek":"Lateinischer Kleinbuchstabe i mit Ogonek","Latin small letter i with tilde":"Lateinischer Kleinbuchstabe i mit Tilde","Latin small letter j with circumflex":"Lateinischer Kleinbuchstabe j mit Zirkumflex","Latin small letter k with cedilla":"Lateinischer Kleinbuchstabe k mit Cedille","Latin small letter kra":"Lateinischer Kleinbuchstabe Kra","Latin small letter l with acute":"Lateinischer Kleinbuchstabe l mit Akut","Latin small letter l with caron":"Lateinischer Kleinbuchstabe l mit Hatschek","Latin small letter l with cedilla":"Lateinischer Kleinbuchstabe l mit Cedille","Latin small letter l with middle dot":"Lateinischer Kleinbuchstabe l mit Mittelpunkt","Latin small letter l with stroke":"Lateinischer Kleinbuchstabe l mit Querstrich","Latin small letter long s":"Lateinischer Kleinbuchstabe langes s","Latin small letter n preceded by apostrophe":"Lateinischer Kleinbuchstabe n mit vorangestelltem Apostroph","Latin small letter n with acute":"Lateinischer Kleinbuchstabe n mit Akut","Latin small letter n with caron":"Lateinischer Kleinbuchstabe n mit Hatschek","Latin small letter n with cedilla":"Lateinischer Kleinbuchstabe n mit Cedille","Latin small letter o with breve":"Lateinischer Kleinbuchstabe o mit Breve","Latin small letter o with double acute":"Lateinischer Kleinbuchstabe o mit doppeltem Akut","Latin small letter o with macron":"Lateinischer Kleinbuchstabe o mit Makron","Latin small letter r with acute":"Lateinischer Kleinbuchstabe r mit Akut","Latin small letter r with caron":"Lateinischer Kleinbuchstabe r mit Hatschek","Latin small letter r with cedilla":"Lateinischer Kleinbuchstabe r mit Cedille","Latin small letter s with acute":"Lateinischer Kleinbuchstabe s mit Akut","Latin small letter s with caron":"Lateinischer Kleinbuchstabe s mit Hatschek","Latin small letter s with cedilla":"Lateinischer Kleinbuchstabe s mit Cedille","Latin small letter s with circumflex":"Lateinischer Kleinbuchstabe s mit Zirkumflex","Latin small letter t with caron":"Lateinischer Kleinbuchstabe t mit Hatschek","Latin small letter t with cedilla":"Lateinischer Kleinbuchstabe t mit Cedille","Latin small letter t with stroke":"Lateinischer Kleinbuchstabe t mit Querstrich","Latin small letter u with breve":"Lateinischer Kleinbuchstabe u mit Breve","Latin small letter u with double acute":"Lateinischer Kleinbuchstabe u mit doppeltem Akut","Latin small letter u with macron":"Lateinischer Kleinbuchstabe u mit Makron","Latin small letter u with ogonek":"Lateinischer Kleinbuchstabe u mit Ogonek","Latin small letter u with ring above":"Lateinischer Kleinbuchstabe u mit Kroužek darüber","Latin small letter u with tilde":"Lateinischer Kleinbuchstabe u mit Tilde","Latin small letter w with circumflex":"Lateinischer Kleinbuchstabe w mit Zirkumflex","Latin small letter y with circumflex":"Lateinischer Kleinbuchstabe y mit Zirkumflex","Latin small letter z with acute":"Lateinischer Kleinbuchstabe z mit Akut","Latin small letter z with caron":"Lateinischer Kleinbuchstabe z mit Hatschek","Latin small letter z with dot above":"Lateinischer Kleinbuchstabe z mit Punkt darüber","Latin small ligature ij":"Kleine lateinische Ligatur ij","Latin small ligature oe":"Kleine lateinische Ligatur oe","Left aligned image":"linksbündiges Bild","Left double quotation mark":"Doppelte Anführungszeichen links","Left single quotation mark":"Einfache Anführungszeichen links","Left-pointing double angle quotation mark":"Doppelte Guillemets nach links","leftwards arrow to bar":"Pfeil nach links zum Querstrich","leftwards dashed arrow":"Gestrichelter Pfeil nach links","leftwards double arrow":"Doppelpfeil nach links","Less-than or equal to":"Kleiner als oder gleich","Less-than sign":"Kleiner-als-Zeichen","Light blue":"Hellblau","Light green":"Hellgrün","Light grey":"Hellgrau",Link:"Link","Link URL":"Link Adresse","Lira sign":"Lira-Zeichen","Livre tournois sign":"Livre tournois-Zeichen","Logical and":"Logisches und","Logical or":"Logisches oder",Macron:"Makron","Manat sign":"Manat-Zeichen","Media URL":"Medien-Url","media widget":"Medien-Widget","Merge cell down":"Zelle unten verbinden","Merge cell left":"Zelle links verbinden","Merge cell right":"Zelle rechts verbinden","Merge cell up":"Zelle verbinden","Merge cells":"Zellen verbinden","Mill sign":"Mill-Zeichen","Minus sign":"Minus-Zeichen","Multiplication sign":"Mal-Zeichen","N-ary product":"Produkt-Zeichen","N-ary summation":"Summen-Zeichen",Nabla:"Nabla","Naira sign":"Naira-Zeichen","New sheqel sign":"Schekel-Zeichen",Next:"Nächste",None:"Kein Rahmen","Nordic mark sign":"Nordische Mark-Zeichen","Not an element of":"Kein Element von","Not equal to":"Ungleich","Not sign":"Negations-Zeichen","Numbered List":"Nummerierte Liste","on with exclamation mark with left right arrow above":"„On“ mit Ausrufezeichen darüber Pfeil nach links und rechts","Open in a new tab":"In neuem Tab öffnen","Open link in new tab":"Link im neuen Tab öffnen",Orange:"Orange",Outset:"Geprägt",Overline:"Überstrich",Padding:"Innenabstand","Page break":"Seitenumbruch",Paragraph:"Absatz","Paragraph sign":"Absatz-Zeichen","Partial differential":"Partielle Ableitung","Paste the media URL in the input.":"Medien-URL in das Eingabefeld einfügen.","Per mille sign":"Promille-Zeichen","Per ten thousand sign":"Pro-Zehntausend-Zeichen","Peseta sign":"Peseta-Zeichen","Peso sign":"Philippinischer Peso-Zeichen","Pink marker":"Pinker Marker","Plain text":"Nur Text","Plus-minus sign":"Plus-Minus-Zeichen","Pound sign":"Pfund-Zeichen",Previous:"vorherige","Proportional to":"Proportional zu",Purple:"Violett","Question exclamation mark":"Frage-Ruf-Zeichen",Red:"Rot","Red pen":"Rote Schriftfarbe",Redo:"Wiederherstellen","Registered sign":"Registered-Trade-Mark-Zeichen","Remove color":"Farbe entfernen","Remove Format":"Formatierung entfernen","Remove highlight":"Texthervorhebung entfernen","Reversed paragraph sign":"Umgedrehtes Absatz-Zeichen","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich-Text-Editor, %0",Ridge:"Hervorgehoben","Right aligned image":"rechtsbündiges Bild","Right double quotation mark":"Doppelte Anführungszeichen rechts","Right single quotation mark":"Einfache Anführungszeichen rechts","Right-pointing double angle quotation mark":"Doppelte Guillemets nach rechts","rightwards arrow to bar":"Pfeil nach rechts zum Querstrich","rightwards dashed arrow":"Gestrichelter Pfeil nach rechts","rightwards double arrow":"Doppelpfeil nach rechts",Row:"Zeile","Ruble sign":"Rubel-Zeichen","Rupee sign":"Rupie-Zeichen",Save:"Speichern","Section sign":"Paragraphen-Zeichen","Select all":"Alles auswählen","Select column":"Spalte auswählen","Select row":"Zeile auswählen","Show more items":"Mehr anzeigen","Side image":"Seitenbild","Single left-pointing angle quotation mark":"Einfache Guillemets nach links","Single low-9 quotation mark":"Einfache Anführungszeichen links unten","Single right-pointing angle quotation mark":"Einfache Guillemets nach rechts",Small:"Klein",Solid:"Durchgezogen","soon with rightwards arrow above":"„Soon“ darüber Pfeil nach rechts","Special characters":"Sonderzeichen","Spesmilo sign":"Spesmilo-Zeichen","Split cell horizontally":"Zelle horizontal teilen","Split cell vertically":"Zelle vertikal teilen","Square root":"Wurzel-Zeichen",Strikethrough:"Durchgestrichen",Style:"Rahmenart","Table alignment toolbar":"Werkzeugleiste für die Tabellen-Ausrichtung","Table cell text alignment":"Ausrichtung des Zellentextes","Table properties":"Tabelleneigenschaften","Table toolbar":"Tabelle Werkzeugleiste","Tenge sign":"Tenge-Zeichen","Text alignment":"Textausrichtung","Text alignment toolbar":"Text-Ausrichtung Toolbar","Text alternative":"Textalternative","Text highlight toolbar":"Text hervorheben Werkzeugleiste",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"Die Farbe ist ungültig. Probieren Sie „#FF0000“ oder „rgb(255,0,0)“ oder „red“.","The URL must not be empty.":"Die Url darf nicht leer sein",'The value is invalid. Try "10px" or "2em" or simply "2".':"Der Wert ist ungültig. Probieren Sie „10px“ oder „2em“ oder „2“.","There exists":"Existenzquantor","This link has no URL":"Dieser Link hat keine Adresse","This media URL is not supported.":"Diese Medien-Url wird nicht unterstützt","Tilde operator":"Tilde-Operator",Tiny:"Sehr klein","Tip: Paste the URL into the content to embed faster.":"Tipp: Zum schnelleren Einbetten können Sie die Medien-URL in den Inhalt einfügen.","top with upwards arrow above":"„Top“ darüber Pfeil nach oben","Trade mark sign":"Unregistered-Trade-Mark-Zeichen","Tugrik sign":"Tugrik-Zeichen","Turkish lira sign":"Türkische Lira-Zeichen",Turquoise:"Türkis","Two dot leader":"Doppel-Punktlinie","Type or paste your content here.":"Hier Inhalt einfügen.","Type your title":"Titel eingeben",Underline:"Unterstrichen",Undo:"Rückgängig",Union:"Vereinigung",Unlink:"Link entfernen","up down arrow with base":"Unterstrichener Pfeil nach oben und unten","Upload failed":"Hochladen fehlgeschlagen","Upload in progress":"Upload läuft","upwards arrow to bar":"Pfeil nach oben zum Querstrich","upwards dashed arrow":"Gestrichelter Pfeil nach oben","upwards double arrow":"Doppelpfeil nach oben","Vertical text alignment toolbar":"Werkzeugleiste für die vertikale Zellentext-Ausrichtung","Vulgar fraction one half":"Gemeiner Bruch ein Halb","Vulgar fraction one quarter":"Gemeiner Bruch ein Viertel","Vulgar fraction three quarters":"Gemeiner Bruch drei Viertel",White:"Weiß","Widget toolbar":"Widget Werkzeugleiste",Width:"Breite","Won sign":"Won-Zeichen",Yellow:"Gelb","Yellow marker":"Gelber Marker","Yen sign":"Yen-Zeichen"});t.getPluralForm=function(e){return e!=1}})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));(function e(t,i){if(typeof exports==="object"&&typeof module==="object")module.exports=i();else if(typeof define==="function"&&define.amd)define([],i);else if(typeof exports==="object")exports["ClassicEditor"]=i();else t["ClassicEditor"]=i()})(window,(function(){return function(e){var t={};function i(n){if(t[n]){return t[n].exports}var o=t[n]={i:n,l:false,exports:{}};e[n].call(o.exports,o,o.exports,i);o.l=true;return o.exports}i.m=e;i.c=t;i.d=function(e,t,n){if(!i.o(e,t)){Object.defineProperty(e,t,{enumerable:true,get:n})}};i.r=function(e){if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(e,"__esModule",{value:true})};i.t=function(e,t){if(t&1)e=i(e);if(t&8)return e;if(t&4&&typeof e==="object"&&e&&e.__esModule)return e;var n=Object.create(null);i.r(n);Object.defineProperty(n,"default",{enumerable:true,value:e});if(t&2&&typeof e!="string")for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n};i.n=function(e){var t=e&&e.__esModule?function t(){return e["default"]}:function t(){return e};i.d(t,"a",t);return t};i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};i.p="";return i(i.s=140)}([function(e,t,i){"use strict";i.d(t,"b",(function(){return o}));i.d(t,"a",(function(){return r}));const n="https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html";class o extends Error{constructor(e,t,i){e=r(e);if(i){e+=" "+JSON.stringify(i)}super(e);this.name="CKEditorError";this.context=t;this.data=i}is(e){return e==="CKEditorError"}static rethrowUnexpectedError(e,t){if(e.is&&e.is("CKEditorError")){throw e}const i=new o(e.message,t);i.stack=e.stack;throw i}}function r(e){const t=e.match(/^([^:]+):/);if(!t){return e}return e+` Read more: ${n}#error-${t[1]}\n`}},function(e,t,i){"use strict";var n=function e(){var t;return function e(){if(typeof t==="undefined"){t=Boolean(window&&document&&document.all&&!window.atob)}return t}}();var o=function e(){var t={};return function e(i){if(typeof t[i]==="undefined"){var n=document.querySelector(i);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement){try{n=n.contentDocument.head}catch(e){n=null}}t[i]=n}return t[i]}}();var r=[];function s(e){var t=-1;for(var i=0;i:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-editor__editable_inline.ck-blurred ::selection{background:var(--ck-color-editable-blur-selection)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-base-foreground)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-base-foreground)}"},function(e,t,i){var n=i(1);var o=i(24);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-label{display:block}.ck.ck-voice-label{display:none}.ck.ck-label{font-weight:700}"},function(e,t,i){var n=i(1);var o=i(26);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-sticky-panel .ck-sticky-panel__content_sticky{z-index:var(--ck-z-modal);position:fixed;top:0}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{top:auto;position:absolute}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{box-shadow:var(--ck-drop-shadow),0 0;border-width:0 1px 1px;border-top-left-radius:0;border-top-right-radius:0}"},function(e,t,i){var n=i(1);var o=i(28);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-dropdown{display:inline-block;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on .ck-tooltip{display:none}.ck.ck-dropdown .ck-dropdown__panel{-webkit-backface-visibility:hidden;display:none;z-index:var(--ck-z-modal);position:absolute}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{top:100%;bottom:auto}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}:root{--ck-dropdown-arrow-size:calc(0.5*var(--ck-icon-size))}.ck.ck-dropdown{font-size:inherit}.ck.ck-dropdown .ck-dropdown__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{width:7em;overflow:hidden;text-overflow:ellipsis}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-dropdown__button_label-width_auto .ck-button__label{width:auto}.ck.ck-dropdown__panel{border-radius:0}.ck-rounded-corners .ck.ck-dropdown__panel,.ck.ck-dropdown__panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-dropdown__panel{box-shadow:var(--ck-drop-shadow),0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);bottom:0;min-width:100%}.ck.ck-dropdown__panel.ck-dropdown__panel_se{border-top-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_sw{border-top-right-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_ne{border-bottom-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_nw{border-bottom-right-radius:0}"},function(e,t,i){var n=i(1);var o=i(30);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-icon{vertical-align:middle}:root{--ck-icon-size:calc(var(--ck-line-height-base)*var(--ck-font-size-normal))}.ck.ck-icon{width:var(--ck-icon-size);height:var(--ck-icon-size);font-size:.8333350694em;will-change:transform}.ck.ck-icon,.ck.ck-icon *{color:inherit;cursor:inherit}.ck.ck-icon :not([fill]){fill:currentColor}"},function(e,t,i){var n=i(1);var o=i(32);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck.ck-tooltip,.ck.ck-tooltip .ck-tooltip__text:after{position:absolute;pointer-events:none;-webkit-backface-visibility:hidden}.ck.ck-tooltip{visibility:hidden;opacity:0;display:none;z-index:var(--ck-z-modal)}.ck.ck-tooltip .ck-tooltip__text{display:inline-block}.ck.ck-tooltip .ck-tooltip__text:after{content:"";width:0;height:0}:root{--ck-tooltip-arrow-size:5px}.ck.ck-tooltip{left:50%;top:0;transition:opacity .2s ease-in-out .2s}.ck.ck-tooltip .ck-tooltip__text{border-radius:0}.ck-rounded-corners .ck.ck-tooltip .ck-tooltip__text,.ck.ck-tooltip .ck-tooltip__text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-tooltip .ck-tooltip__text{font-size:.9em;line-height:1.5;color:var(--ck-color-tooltip-text);padding:var(--ck-spacing-small) var(--ck-spacing-medium);background:var(--ck-color-tooltip-background);position:relative;left:-50%}.ck.ck-tooltip .ck-tooltip__text:after{transition:opacity .2s ease-in-out .2s;border-style:solid;left:50%}.ck.ck-tooltip.ck-tooltip_s{bottom:calc(-1*var(--ck-tooltip-arrow-size));transform:translateY(100%)}.ck.ck-tooltip.ck-tooltip_s .ck-tooltip__text:after{top:calc(-1*var(--ck-tooltip-arrow-size));transform:translateX(-50%);border-left-color:transparent;border-bottom-color:var(--ck-color-tooltip-background);border-right-color:transparent;border-top-color:transparent;border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:var(--ck-tooltip-arrow-size);border-right-width:var(--ck-tooltip-arrow-size);border-top-width:0}.ck.ck-tooltip.ck-tooltip_n{top:calc(-1*var(--ck-tooltip-arrow-size));transform:translateY(-100%)}.ck.ck-tooltip.ck-tooltip_n .ck-tooltip__text:after{bottom:calc(-1*var(--ck-tooltip-arrow-size));transform:translateX(-50%);border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent;border-top-color:var(--ck-color-tooltip-background);border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:0;border-right-width:var(--ck-tooltip-arrow-size);border-top-width:var(--ck-tooltip-arrow-size)}'},function(e,t,i){var n=i(1);var o=i(34);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-button,a.ck.ck-button{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:block}@media (hover:none){.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:none}}.ck.ck-button,a.ck.ck-button{position:relative;display:inline-flex;align-items:center;justify-content:left}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{display:none}.ck.ck-button.ck-button_with-text .ck-button__label,a.ck.ck-button.ck-button_with-text .ck-button__label{display:inline-block}.ck.ck-button:not(.ck-button_with-text),a.ck.ck-button:not(.ck-button_with-text){justify-content:center}.ck.ck-button:hover .ck-tooltip,a.ck.ck-button:hover .ck-tooltip{visibility:visible;opacity:1}.ck.ck-button:focus:not(:hover) .ck-tooltip,a.ck.ck-button:focus:not(:hover) .ck-tooltip{display:none}.ck.ck-button,a.ck.ck-button{background:var(--ck-color-button-default-background)}.ck.ck-button:not(.ck-disabled):hover,a.ck.ck-button:not(.ck-disabled):hover{background:var(--ck-color-button-default-hover-background)}.ck.ck-button:not(.ck-disabled):active,a.ck.ck-button:not(.ck-disabled):active{background:var(--ck-color-button-default-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-default-active-shadow)}.ck.ck-button.ck-disabled,a.ck.ck-button.ck-disabled{background:var(--ck-color-button-default-disabled-background)}.ck.ck-button,a.ck.ck-button{border-radius:0}.ck-rounded-corners .ck.ck-button,.ck-rounded-corners a.ck.ck-button,.ck.ck-button.ck-rounded-corners,a.ck.ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-button,a.ck.ck-button{white-space:nowrap;cursor:default;vertical-align:middle;padding:var(--ck-spacing-tiny);text-align:center;min-width:var(--ck-ui-component-min-height);min-height:var(--ck-ui-component-min-height);line-height:1;font-size:inherit;border:1px solid transparent;transition:box-shadow .2s ease-in-out,border .2s ease-in-out;-webkit-appearance:none}.ck.ck-button:active,.ck.ck-button:focus,a.ck.ck-button:active,a.ck.ck-button:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0}.ck.ck-button .ck-button__icon use,.ck.ck-button .ck-button__icon use *,a.ck.ck-button .ck-button__icon use,a.ck.ck-button .ck-button__icon use *{color:inherit}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{font-size:inherit;font-weight:inherit;color:inherit;cursor:inherit;vertical-align:middle}[dir=ltr] .ck.ck-button .ck-button__label,[dir=ltr] a.ck.ck-button .ck-button__label{text-align:left}[dir=rtl] .ck.ck-button .ck-button__label,[dir=rtl] a.ck.ck-button .ck-button__label{text-align:right}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{color:inherit}[dir=ltr] .ck.ck-button .ck-button__keystroke,[dir=ltr] a.ck.ck-button .ck-button__keystroke{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-button .ck-button__keystroke,[dir=rtl] a.ck.ck-button .ck-button__keystroke{margin-right:var(--ck-spacing-large)}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{font-weight:700;opacity:.7}.ck.ck-button.ck-disabled:active,.ck.ck-button.ck-disabled:focus,a.ck.ck-button.ck-disabled:active,a.ck.ck-button.ck-disabled:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-button.ck-disabled .ck-button__icon,a.ck.ck-button.ck-disabled .ck-button__icon{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__label,a.ck.ck-button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__keystroke,a.ck.ck-button.ck-disabled .ck-button__keystroke{opacity:.3}.ck.ck-button.ck-button_with-text,a.ck.ck-button.ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=ltr] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-left:calc(-1*var(--ck-spacing-small));margin-right:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=rtl] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-right:calc(-1*var(--ck-spacing-small));margin-left:var(--ck-spacing-small)}.ck.ck-button.ck-button_with-keystroke .ck-button__label,a.ck.ck-button.ck-button_with-keystroke .ck-button__label{flex-grow:1}.ck.ck-button.ck-on,a.ck.ck-button.ck-on{background:var(--ck-color-button-on-background)}.ck.ck-button.ck-on:not(.ck-disabled):hover,a.ck.ck-button.ck-on:not(.ck-disabled):hover{background:var(--ck-color-button-on-hover-background)}.ck.ck-button.ck-on:not(.ck-disabled):active,a.ck.ck-button.ck-on:not(.ck-disabled):active{background:var(--ck-color-button-on-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-on-active-shadow)}.ck.ck-button.ck-on.ck-disabled,a.ck.ck-button.ck-on.ck-disabled{background:var(--ck-color-button-on-disabled-background)}.ck.ck-button.ck-button-save,a.ck.ck-button.ck-button-save{color:var(--ck-color-button-save)}.ck.ck-button.ck-button-cancel,a.ck.ck-button.ck-button-cancel{color:var(--ck-color-button-cancel)}.ck.ck-button-action,a.ck.ck-button-action{background:var(--ck-color-button-action-background)}.ck.ck-button-action:not(.ck-disabled):hover,a.ck.ck-button-action:not(.ck-disabled):hover{background:var(--ck-color-button-action-hover-background)}.ck.ck-button-action:not(.ck-disabled):active,a.ck.ck-button-action:not(.ck-disabled):active{background:var(--ck-color-button-action-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-action-active-shadow)}.ck.ck-button-action.ck-disabled,a.ck.ck-button-action.ck-disabled{background:var(--ck-color-button-action-disabled-background)}.ck.ck-button-action,a.ck.ck-button-action{color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}"},function(e,t,i){var n=i(1);var o=i(36);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-list{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{position:relative;z-index:var(--ck-z-default)}.ck.ck-list{border-radius:0}.ck-rounded-corners .ck.ck-list,.ck.ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-list{list-style-type:none;background:var(--ck-color-list-background)}.ck.ck-list__item{cursor:default;min-width:12em}.ck.ck-list__item .ck-button{min-height:unset;width:100%;text-align:left;border-radius:0;padding:calc(0.2*var(--ck-line-height-base)*var(--ck-font-size-base)) calc(0.4*var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item .ck-button .ck-button__label{line-height:calc(1.2*var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item .ck-button:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item .ck-button.ck-on:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item .ck-button.ck-on:focus:not(.ck-disabled){border-color:var(--ck-color-base-background)}.ck.ck-list__item .ck-button:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item .ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item .ck-switchbutton.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck.ck-list__separator{height:1px;width:100%;background:var(--ck-color-base-border)}"},function(e,t,i){var n=i(1);var o=i(38);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}:root{--ck-switch-button-toggle-width:2.6153846154em;--ck-switch-button-toggle-inner-size:1.0769230769em;--ck-switch-button-toggle-spacing:1px;--ck-switch-button-translation:calc(var(--ck-switch-button-toggle-width) - var(--ck-switch-button-toggle-inner-size) - 2*var(--ck-switch-button-toggle-spacing))}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__label{margin-right:calc(2*var(--ck-spacing-large))}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__label{margin-left:calc(2*var(--ck-spacing-large))}.ck.ck-button.ck-switchbutton .ck-button__toggle{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle.ck-rounded-corners{border-radius:var(--ck-border-radius)}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-left:auto}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle{transition:background .4s ease;width:var(--ck-switch-button-toggle-width);background:var(--ck-color-switch-button-off-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:calc(0.5*var(--ck-border-radius))}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{margin:var(--ck-switch-button-toggle-spacing);width:var(--ck-switch-button-toggle-inner-size);height:var(--ck-switch-button-toggle-inner-size);background:var(--ck-color-switch-button-inner-background);transition:all .3s ease}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{box-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(var(--ck-switch-button-translation))}[dir=rtl] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(calc(-1*var(--ck-switch-button-translation)))}"},function(e,t,i){var n=i(1);var o=i(40);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-toolbar-dropdown .ck.ck-toolbar .ck.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar-dropdown .ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}"},function(e,t,i){var n=i(1);var o=i(42);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-dropdown .ck-dropdown__panel .ck-list{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list,.ck.ck-dropdown .ck-dropdown__panel .ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}"},function(e,t,i){var n=i(1);var o=i(44);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-toolbar{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-flow:row nowrap;align-items:center}.ck.ck-toolbar>.ck-toolbar__items{display:flex;flex-flow:row wrap;align-items:center;flex-grow:1}.ck.ck-toolbar .ck.ck-toolbar__separator{display:inline-block}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-toolbar,.ck.ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-toolbar{background:var(--ck-color-toolbar-background);padding:0 var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border)}.ck.ck-toolbar .ck.ck-toolbar__separator{align-self:stretch;width:1px;min-width:1px;margin-top:0;margin-bottom:0;background:var(--ck-color-toolbar-border)}.ck.ck-toolbar>.ck-toolbar__items>*{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small);margin-right:var(--ck-spacing-small)}.ck.ck-toolbar>.ck-toolbar__items:empty+.ck.ck-toolbar__separator{display:none}.ck.ck-toolbar>.ck-toolbar__items>*,.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{width:100%;margin:0;border-radius:0;border:0}.ck.ck-toolbar.ck-toolbar_compact{padding:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*{margin:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>:not(:first-child):not(:last-child){border-radius:0}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck{margin-right:0}.ck.ck-toolbar[dir=rtl]:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-left:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_compact>.ck-toolbar__items>.ck:first-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_compact>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__separator,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl].ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=rtl] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr]>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-right:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_compact>.ck-toolbar__items>.ck:first-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_compact>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar[dir=ltr]>.ck.ck-toolbar__separator,[dir=ltr] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-right:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr].ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=ltr] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-right:var(--ck-spacing-small)}"},function(e,t,i){var n=i(1);var o=i(46);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-editor{position:relative}.ck.ck-editor .ck-editor__top .ck-sticky-panel .ck-toolbar{z-index:var(--ck-z-modal)}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-bottom-width:0}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar{border-bottom-width:1px;border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:0}.ck.ck-editor__main>.ck-editor__editable{background:var(--ck-color-base-background);border-radius:0}.ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,.ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-editor__main>.ck-editor__editable:not(.ck-focused){border-color:var(--ck-color-base-border)}"},function(e,t,i){var n=i(1);var o=i(48);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content blockquote{overflow:hidden;padding-right:1.5em;padding-left:1.5em;margin-left:0;margin-right:0;font-style:italic;border-left:5px solid #ccc}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}"},function(e,t){e.exports=".ck-content code{background-color:hsla(0,0%,78%,.3);padding:.15em;border-radius:2px}"},function(e,t,i){var n=i(1);var o=i(51);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-splitbutton{font-size:inherit}.ck.ck-splitbutton .ck-splitbutton__action:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button .ck-tooltip{display:none}:root{--ck-color-split-button-hover-background:#ebebeb;--ck-color-split-button-hover-border:#b3b3b3}[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__action{border-top-right-radius:unset;border-bottom-right-radius:unset}[dir=rtl] .ck.ck-splitbutton>.ck-splitbutton__action{border-top-left-radius:unset;border-bottom-left-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow{min-width:unset}[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-radius:0}.ck-rounded-corners [dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow,[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:unset;border-bottom-left-radius:unset}[dir=rtl] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-top-right-radius:unset;border-bottom-right-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow svg{width:var(--ck-dropdown-arrow-size)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover),.ck.ck-splitbutton:hover>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover){background:var(--ck-color-split-button-hover-background)}[dir=ltr] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled),[dir=ltr] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled){border-left-color:var(--ck-color-split-button-hover-border)}[dir=rtl] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled),[dir=rtl] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled){border-right-color:var(--ck-color-split-button-hover-border)}.ck.ck-splitbutton.ck-splitbutton_open{border-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__action{border-bottom-left-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__arrow{border-bottom-right-radius:0}"},function(e,t,i){var n=i(1);var o=i(53);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content pre{padding:1em;color:#353535;background:hsla(0,0%,78%,.3);border:1px solid #c4c4c4;border-radius:2px;text-align:left;direction:ltr;tab-size:4;white-space:pre-wrap;font-style:normal;min-width:200px}.ck-content pre code{background:unset;padding:0;border-radius:0}.ck.ck-editor__editable pre{position:relative}.ck.ck-editor__editable pre[data-language]:after{content:attr(data-language);position:absolute}:root{--ck-color-code-block-label-background:#757575}.ck.ck-editor__editable pre[data-language]:after{top:-1px;right:10px;background:var(--ck-color-code-block-label-background);font-size:10px;font-family:var(--ck-font-face);line-height:16px;padding:var(--ck-spacing-tiny) var(--ck-spacing-medium);color:#fff;white-space:nowrap}.ck.ck-code-block-dropdown .ck-dropdown__panel{max-height:250px;overflow-y:auto;overflow-x:hidden}"},function(e,t,i){var n=i(1);var o=i(55);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-color-grid{display:grid}:root{--ck-color-grid-tile-size:24px;--ck-color-color-grid-check-icon:#000}.ck.ck-color-grid{grid-gap:5px;padding:8px}.ck.ck-color-grid__tile{width:var(--ck-color-grid-tile-size);height:var(--ck-color-grid-tile-size);min-width:var(--ck-color-grid-tile-size);min-height:var(--ck-color-grid-tile-size);padding:0;transition:box-shadow .2s ease;border:0}.ck.ck-color-grid__tile.ck-disabled{cursor:unset;transition:unset}.ck.ck-color-grid__tile.ck-color-table__color-tile_bordered{box-shadow:0 0 0 1px var(--ck-color-base-border)}.ck.ck-color-grid__tile .ck.ck-icon{display:none;color:var(--ck-color-color-grid-check-icon)}.ck.ck-color-grid__tile.ck-on{box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-base-text)}.ck.ck-color-grid__tile.ck-on .ck.ck-icon{display:block}.ck.ck-color-grid__tile.ck-on,.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){border:0}.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-color-grid__label{padding:0 var(--ck-spacing-standard)}"},function(e,t,i){var n=i(1);var o=i(57);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-button.ck-color-table__remove-color{display:flex;align-items:center;width:100%}label.ck.ck-color-grid__label{font-weight:unset}.ck .ck-button.ck-color-table__remove-color{padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck .ck-button.ck-color-table__remove-color:not(:focus){border-bottom:1px solid var(--ck-color-base-border)}[dir=ltr] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-left:var(--ck-spacing-standard)}"},function(e,t,i){var n=i(1);var o=i(59);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .text-tiny{font-size:.7em}.ck-content .text-small{font-size:.85em}.ck-content .text-big{font-size:1.4em}.ck-content .text-huge{font-size:1.8em}"},function(e,t){e.exports=".ck.ck-heading_heading1{font-size:20px}.ck.ck-heading_heading2{font-size:17px}.ck.ck-heading_heading3{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}"},function(e,t,i){var n=i(1);var o=i(62);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-highlight-marker-yellow:#fdfd77;--ck-highlight-marker-green:#62f962;--ck-highlight-marker-pink:#fc7899;--ck-highlight-marker-blue:#72ccfd;--ck-highlight-pen-red:#e71313;--ck-highlight-pen-green:#128a00}.ck-content .marker-yellow{background-color:var(--ck-highlight-marker-yellow)}.ck-content .marker-green{background-color:var(--ck-highlight-marker-green)}.ck-content .marker-pink{background-color:var(--ck-highlight-marker-pink)}.ck-content .marker-blue{background-color:var(--ck-highlight-marker-blue)}.ck-content .pen-red{color:var(--ck-highlight-pen-red);background-color:transparent}.ck-content .pen-green{color:var(--ck-highlight-pen-green);background-color:transparent}"},function(e,t,i){var n=i(1);var o=i(64);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=':root{--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{display:none;position:absolute;z-index:var(--ck-z-modal)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{content:"";position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}:root{--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px}.ck.ck-balloon-panel{border-radius:0}.ck-rounded-corners .ck.ck-balloon-panel,.ck.ck-balloon-panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-balloon-panel{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{width:0;height:0;border-style:solid}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:var(--ck-balloon-arrow-height);border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:0}.ck.ck-balloon-panel[class*=arrow_n]:before{border-bottom-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-color:transparent;border-right-color:transparent;border-top-color:transparent}.ck.ck-balloon-panel[class*=arrow_n]:after{border-bottom-color:var(--ck-color-panel-background);margin-top:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:0;border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-top-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent}.ck.ck-balloon-panel[class*=arrow_s]:after{border-top-color:var(--ck-color-panel-background);margin-bottom:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before{left:50%;margin-left:calc(-1*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before{left:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before{right:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before{left:50%;margin-left:calc(-1*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before{left:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before{right:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:before{right:25%;margin-right:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:before{left:25%;margin-left:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:before{right:25%;margin-right:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:before{left:25%;margin-left:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}'},function(e,t,i){var n=i(1);var o=i(66);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-editor__editable .ck-horizontal-line{display:flow-root}.ck-content hr{border:solid #5e5e5e;border-width:1px 0 0;margin:0}.ck-editor__editable .ck-horizontal-line{padding:5px 0}"},function(e,t,i){var n=i(1);var o=i(68);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck .ck-widget .ck-widget__type-around__button{display:block;position:absolute;overflow:hidden;z-index:var(--ck-z-default)}.ck .ck-widget .ck-widget__type-around__button svg{position:absolute;top:50%;left:50%;z-index:calc(var(--ck-z-default) + 2)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_before{top:calc(-0.5*var(--ck-widget-outline-thickness));left:min(10%,30px);transform:translateY(-50%)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_after{bottom:calc(-0.5*var(--ck-widget-outline-thickness));right:min(10%,30px);transform:translateY(50%)}.ck .ck-widget:not(.ck-widget_can-type-around_after)>.ck-widget__type-around>.ck-widget__type-around__button_after,.ck .ck-widget:not(.ck-widget_can-type-around_before)>.ck-widget__type-around>.ck-widget__type-around__button_before{display:none}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{content:"";display:block;position:absolute;top:1px;left:1px;z-index:calc(var(--ck-z-default) + 1)}.ck.ck-editor__editable.ck-read-only .ck-widget__type-around,.ck.ck-editor__editable.ck-restricted-editing_mode_restricted .ck-widget__type-around{display:none}:root{--ck-widget-type-around-button-size:20px;--ck-color-widget-type-around-button-active:var(--ck-color-focus-border);--ck-color-widget-type-around-button-hover:var(--ck-color-widget-hover-border);--ck-color-widget-type-around-button-blurred-editable:var(--ck-color-widget-blurred-border);--ck-color-widget-type-around-button-radar-start-alpha:0;--ck-color-widget-type-around-button-radar-end-alpha:.3;--ck-color-widget-type-around-button-icon:var(--ck-color-base-background)}.ck .ck-widget .ck-widget__type-around__button{width:var(--ck-widget-type-around-button-size);height:var(--ck-widget-type-around-button-size);background:var(--ck-color-widget-type-around-button);border-radius:100px;pointer-events:none;opacity:0;transition:opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget .ck-widget__type-around__button svg{width:10px;height:8px;transform:translate(-50%,-50%);transition:transform .5s ease;margin-top:1px}.ck .ck-widget .ck-widget__type-around__button svg *{stroke-dasharray:10;stroke-dashoffset:0;fill:none;stroke:var(--ck-color-widget-type-around-button-icon);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.ck .ck-widget .ck-widget__type-around__button svg line{stroke-dasharray:7}.ck .ck-widget .ck-widget__type-around__button:hover{animation:ck-widget-type-around-button-sonar 1s ease infinite}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline{animation:ck-widget-type-around-arrow-dash 2s linear}.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:ck-widget-type-around-arrow-tip-dash 2s linear}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{pointer-events:auto;opacity:1}.ck .ck-widget:not(.ck-widget_selected)>.ck-widget__type-around>.ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button-hover)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover{background:var(--ck-color-widget-type-around-button-active)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{width:calc(var(--ck-widget-type-around-button-size) - 2px);height:calc(var(--ck-widget-type-around-button-size) - 2px);border-radius:100px;background:linear-gradient(135deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.3))}.ck .ck-widget.ck-widget_with-selection-handle>.ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:20px}.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{pointer-events:none;opacity:0}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover){background:var(--ck-color-widget-type-around-button-blurred-editable)}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover) svg *{stroke:#999}@keyframes ck-widget-type-around-arrow-dash{0%{stroke-dashoffset:10}20%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-arrow-tip-dash{0%,20%{stroke-dashoffset:7}40%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-button-sonar{0%{box-shadow:0 0 0 0 hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}50%{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-end-alpha))}to{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}}'},function(e,t,i){var n=i(1);var o=i(70);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-color-resizer:var(--ck-color-focus-border);--ck-resizer-size:10px;--ck-resizer-border-width:1px;--ck-resizer-border-radius:2px;--ck-resizer-offset:calc(var(--ck-resizer-size)/-2 - 2px);--ck-resizer-tooltip-offset:10px;--ck-color-resizer-tooltip-background:#262626;--ck-color-resizer-tooltip-text:#f2f2f2}.ck .ck-widget,.ck .ck-widget.ck-widget_with-selection-handle{position:relative}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{position:absolute}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{display:block}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle:hover .ck-widget__selection-handle{visibility:visible}.ck .ck-size-view{background:var(--ck-color-resizer-tooltip-background);color:var(--ck-color-resizer-tooltip-text);border:1px solid var(--ck-color-resizer-tooltip-text);border-radius:var(--ck-resizer-border-radius);font-size:var(--ck-font-size-tiny);display:block;padding:var(--ck-spacing-small)}.ck .ck-size-view.ck-orientation-bottom-left,.ck .ck-size-view.ck-orientation-bottom-right,.ck .ck-size-view.ck-orientation-top-left,.ck .ck-size-view.ck-orientation-top-right{position:absolute}.ck .ck-size-view.ck-orientation-top-left{top:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-top-right{top:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-right{bottom:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-left{bottom:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}:root{--ck-widget-outline-thickness:3px;--ck-widget-handler-icon-size:16px;--ck-widget-handler-animation-duration:200ms;--ck-widget-handler-animation-curve:ease;--ck-color-widget-blurred-border:#dedede;--ck-color-widget-hover-border:#ffc83d;--ck-color-widget-editable-focus-background:var(--ck-color-base-background);--ck-color-widget-drag-handler-icon-color:var(--ck-color-base-background)}.ck .ck-widget{outline-width:var(--ck-widget-outline-thickness);outline-style:solid;outline-color:transparent;transition:outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_selected,.ck .ck-widget.ck-widget_selected:hover{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border)}.ck .ck-widget:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-editor__nested-editable{border:1px solid transparent}.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0;background-color:var(--ck-color-widget-editable-focus-background)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{padding:4px;box-sizing:border-box;background-color:transparent;opacity:0;transition:background-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),visibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0;transform:translateY(-100%);left:calc(0px - var(--ck-widget-outline-thickness))}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{width:var(--ck-widget-handler-icon-size);height:var(--ck-widget-handler-icon-size);color:var(--ck-color-widget-drag-handler-icon-color)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:0;transition:opacity .3s var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle:hover .ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-widget-hover-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover .ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-focus-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:1}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{left:auto;right:calc(0px - var(--ck-widget-outline-thickness))}.ck.ck-editor__editable.ck-read-only .ck-widget{transition:none}.ck.ck-editor__editable.ck-read-only .ck-widget:not(.ck-widget_selected){--ck-widget-outline-thickness:0px}.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover{outline-color:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle .ck-widget__selection-handle:hover,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable>.ck-widget.ck-widget_with-selection-handle:first-child,.ck.ck-editor__editable blockquote>.ck-widget.ck-widget_with-selection-handle:first-child{margin-top:calc(1em + var(--ck-widget-handler-icon-size))}"},function(e,t,i){var n=i(1);var o=i(72);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-labeled-field-view .ck-labeled-field-view__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-field-view .ck-labeled-field-view__status_error{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view>.ck.ck-label{width:100%;text-overflow:ellipsis;overflow:hidden}"},function(e,t,i){var n=i(1);var o=i(74);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-input-text-width:18em}.ck.ck-input-text{border-radius:0}.ck-rounded-corners .ck.ck-input-text,.ck.ck-input-text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-text{box-shadow:var(--ck-inner-shadow),0 0;background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);min-width:var(--ck-input-text-width);min-height:var(--ck-ui-component-min-height);transition:box-shadow .2s ease-in-out,border .2s ease-in-out}.ck.ck-input-text:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text[readonly]{border:1px solid var(--ck-color-input-disabled-border);background:var(--ck-color-input-disabled-background);color:var(--ck-color-input-disabled-text)}.ck.ck-input-text[readonly]:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text.ck-error{border-color:var(--ck-color-input-error-border);animation:ck-text-input-shake .3s ease both}.ck.ck-input-text.ck-error:focus{box-shadow:var(--ck-focus-error-outer-shadow),var(--ck-inner-shadow)}@keyframes ck-text-input-shake{20%{transform:translateX(-2px)}40%{transform:translateX(2px)}60%{transform:translateX(-1px)}80%{transform:translateX(1px)}}"},function(e,t,i){var n=i(1);var o=i(76);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-text-alternative-form{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-text-alternative-form .ck-labeled-field-view{display:inline-block}.ck.ck-text-alternative-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-text-alternative-form{flex-wrap:wrap}.ck.ck-text-alternative-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-text-alternative-form .ck-button{flex-basis:50%}}.ck.ck-text-alternative-form{padding:var(--ck-spacing-standard)}.ck.ck-text-alternative-form:focus{outline:none}[dir=ltr] .ck.ck-text-alternative-form>:not(:first-child),[dir=rtl] .ck.ck-text-alternative-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-text-alternative-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-text-alternative-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-text-alternative-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-text-alternative-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-text-alternative-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-text-alternative-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-text-alternative-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-text-alternative-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(e,t,i){var n=i(1);var o=i(78);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-balloon-rotator__navigation{display:flex;align-items:center;justify-content:center}.ck .ck-balloon-rotator__content .ck-toolbar{justify-content:center}.ck .ck-balloon-rotator__navigation{background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation>*{margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{box-shadow:none}"},function(e,t,i){var n=i(1);var o=i(80);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-fake-panel{position:absolute;z-index:calc(var(--ck-z-modal) - 1)}.ck .ck-fake-panel div{position:absolute}.ck .ck-fake-panel div:first-child{z-index:2}.ck .ck-fake-panel div:nth-child(2){z-index:1}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);width:100%;height:100%}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical)}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*2)}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*3)}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}"},function(e,t,i){var n=i(1);var o=i(82);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .image{display:table;clear:both;text-align:center;margin:1em auto}.ck-content .image>img{display:block;margin:0 auto;max-width:100%;min-width:50px}"},function(e,t,i){var n=i(1);var o=i(84);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .image>figcaption{display:table-caption;caption-side:bottom;word-break:break-word;color:#333;background-color:#f7f7f7;padding:.6em;font-size:.75em;outline-offset:-1px}"},function(e,t,i){var n=i(1);var o=i(86);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-widget_with-resizer{position:relative}.ck .ck-widget__resizer{display:none;position:absolute;pointer-events:none;left:0;top:0;outline:1px solid var(--ck-color-resizer)}.ck-focused .ck-widget_with-resizer.ck-widget_selected>.ck-widget__resizer{display:block}.ck .ck-widget__resizer__handle{position:absolute;pointer-events:all;width:var(--ck-resizer-size);height:var(--ck-resizer-size);background:var(--ck-color-focus-border);border:var(--ck-resizer-border-width) solid #fff;border-radius:var(--ck-resizer-border-radius)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{top:var(--ck-resizer-offset);left:var(--ck-resizer-offset);cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{top:var(--ck-resizer-offset);right:var(--ck-resizer-offset);cursor:nesw-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{bottom:var(--ck-resizer-offset);right:var(--ck-resizer-offset);cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{bottom:var(--ck-resizer-offset);left:var(--ck-resizer-offset);cursor:nesw-resize}"},function(e,t,i){var n=i(1);var o=i(88);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .image.image_resized{max-width:100%;display:block;box-sizing:border-box}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}"},function(e,t,i){var n=i(1);var o=i(90);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-image-style-spacing:1.5em}.ck-content .image-style-align-center,.ck-content .image-style-align-left,.ck-content .image-style-align-right,.ck-content .image-style-side{max-width:50%}.ck-content .image-style-side{float:right;margin-left:var(--ck-image-style-spacing)}.ck-content .image-style-align-left{float:left;margin-right:var(--ck-image-style-spacing)}.ck-content .image-style-align-center{margin-left:auto;margin-right:auto}.ck-content .image-style-align-right{float:right;margin-left:var(--ck-image-style-spacing)}"},function(e,t,i){var n=i(1);var o=i(92);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-editor__editable .image{position:relative}.ck.ck-editor__editable .image .ck-progress-bar{position:absolute;top:0;left:0}.ck.ck-editor__editable .image.ck-appear{animation:fadeIn .7s}.ck.ck-editor__editable .image .ck-progress-bar{height:2px;width:0;background:var(--ck-color-upload-bar-background);transition:width .1s}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}"},function(e,t,i){var n=i(1);var o=i(94);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-image-upload-complete-icon{display:block;position:absolute;top:10px;right:10px;border-radius:50%}.ck-image-upload-complete-icon:after{content:"";position:absolute}:root{--ck-color-image-upload-icon:#fff;--ck-color-image-upload-icon-background:#008a00;--ck-image-upload-icon-size:20px;--ck-image-upload-icon-width:2px}.ck-image-upload-complete-icon{width:var(--ck-image-upload-icon-size);height:var(--ck-image-upload-icon-size);opacity:0;background:var(--ck-color-image-upload-icon-background);animation-name:ck-upload-complete-icon-show,ck-upload-complete-icon-hide;animation-fill-mode:forwards,forwards;animation-duration:.5s,.5s;font-size:var(--ck-image-upload-icon-size);animation-delay:0ms,3s}.ck-image-upload-complete-icon:after{left:25%;top:50%;opacity:0;height:0;width:0;transform:scaleX(-1) rotate(135deg);transform-origin:left top;border-top:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);border-right:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);animation-name:ck-upload-complete-icon-check;animation-duration:.5s;animation-delay:.5s;animation-fill-mode:forwards;box-sizing:border-box}@keyframes ck-upload-complete-icon-show{0%{opacity:0}to{opacity:1}}@keyframes ck-upload-complete-icon-hide{0%{opacity:1}to{opacity:0}}@keyframes ck-upload-complete-icon-check{0%{opacity:1;width:0;height:0}33%{width:.3em;height:0}to{opacity:1;width:.3em;height:.45em}}'},function(e,t,i){var n=i(1);var o=i(96);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck .ck-upload-placeholder-loader{position:absolute;display:flex;align-items:center;justify-content:center;top:0;left:0}.ck .ck-upload-placeholder-loader:before{content:"";position:relative}:root{--ck-color-upload-placeholder-loader:#b3b3b3;--ck-upload-placeholder-loader-size:32px}.ck .ck-image-upload-placeholder{width:100%;margin:0}.ck .ck-upload-placeholder-loader{width:100%;height:100%}.ck .ck-upload-placeholder-loader:before{width:var(--ck-upload-placeholder-loader-size);height:var(--ck-upload-placeholder-loader-size);border-radius:50%;border-top:3px solid var(--ck-color-upload-placeholder-loader);border-right:2px solid transparent;animation:ck-upload-placeholder-loader 1s linear infinite}@keyframes ck-upload-placeholder-loader{to{transform:rotate(1turn)}}'},function(e,t,i){var n=i(1);var o=i(98);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-link_selected{background:var(--ck-color-link-selected-background)}"},function(e,t,i){var n=i(1);var o=i(100);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-link-form{display:flex}.ck.ck-link-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-link-form{flex-wrap:wrap}.ck.ck-link-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-link-form .ck-button{flex-basis:50%}}.ck.ck-link-form_layout-vertical{display:block}.ck.ck-link-form{padding:var(--ck-spacing-standard)}.ck.ck-link-form:focus{outline:none}[dir=ltr] .ck.ck-link-form>:not(:first-child),[dir=rtl] .ck.ck-link-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-link-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-link-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}.ck.ck-link-form_layout-vertical{padding:0;min-width:var(--ck-input-text-width)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) var(--ck-spacing-small)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-link-form_layout-vertical .ck-button{padding:var(--ck-spacing-standard);margin:0;border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border);width:50%}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-link-form_layout-vertical .ck.ck-list{margin-left:0}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton{border:0;width:100%}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton:hover{background:none}"},function(e,t,i){var n=i(1);var o=i(102);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-link-actions{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-link-actions .ck-link-actions__preview{display:inline-block}.ck.ck-link-actions .ck-link-actions__preview .ck-button__label{overflow:hidden}@media screen and (max-width:600px){.ck.ck-link-actions{flex-wrap:wrap}.ck.ck-link-actions .ck-link-actions__preview{flex-basis:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){flex-basis:50%}}.ck.ck-link-actions{padding:var(--ck-spacing-standard)}.ck.ck-link-actions .ck-button.ck-link-actions__preview{padding-left:0;padding-right:0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{padding:0 var(--ck-spacing-medium);color:var(--ck-color-link-default);text-overflow:ellipsis;cursor:pointer;max-width:var(--ck-input-text-width);min-width:3em;text-align:center}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label:hover{text-decoration:underline}.ck.ck-link-actions .ck-button.ck-link-actions__preview,.ck.ck-link-actions .ck-button.ck-link-actions__preview:active,.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus,.ck.ck-link-actions .ck-button.ck-link-actions__preview:hover{background:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:active{box-shadow:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus .ck-button__label{text-decoration:underline}.ck.ck-link-actions:focus{outline:none}[dir=ltr] .ck.ck-link-actions .ck-button:not(:first-child),[dir=rtl] .ck.ck-link-actions .ck-button:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-actions{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-link-actions .ck-button.ck-link-actions__preview{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{min-width:0;max-width:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(module,__webpack_exports__,__webpack_require__){"use strict";var md5;var _unused_webpack_default_export=md5;(function(){var HxOverrides=function(){};HxOverrides.__name__=true;HxOverrides.dateStr=function(e){var t=e.getMonth()+1;var i=e.getDate();var n=e.getHours();var o=e.getMinutes();var r=e.getSeconds();return e.getFullYear()+"-"+(t<10?"0"+t:""+t)+"-"+(i<10?"0"+i:""+i)+" "+(n<10?"0"+n:""+n)+":"+(o<10?"0"+o:""+o)+":"+(r<10?"0"+r:""+r)};HxOverrides.strDate=function(e){switch(e.length){case 8:var t=e.split(":");var i=new Date;i.setTime(0);i.setUTCHours(t[0]);i.setUTCMinutes(t[1]);i.setUTCSeconds(t[2]);return i;case 10:var t=e.split("-");return new Date(t[0],t[1]-1,t[2],0,0,0);case 19:var t=e.split(" ");var n=t[0].split("-");var o=t[1].split(":");return new Date(n[0],n[1]-1,n[2],o[0],o[1],o[2]);default:throw"Invalid date format : "+e}};HxOverrides.cca=function(e,t){var i=e.charCodeAt(t);if(i!=i)return undefined;return i};HxOverrides.substr=function(e,t,i){if(t!=null&&t!=0&&i!=null&&i<0)return"";if(i==null)i=e.length;if(t<0){t=e.length+t;if(t<0)t=0}else if(i<0)i=e.length+i-t;return e.substr(t,i)};HxOverrides.remove=function(e,t){var i=0;var n=e.length;while(i>>32-t},str2blks:function(e){var t=(e.length+8>>6)+1;var i=new Array;var n=0,o=t*16;while(n>2]|=HxOverrides.cca(e,r)<<(e.length*8+r)%4*8;r++}i[r>>2]|=128<<(e.length*8+r)%4*8;var s=e.length*8;var a=t*16-2;i[a]=s&255;i[a]|=(s>>>8&255)<<8;i[a]|=(s>>>16&255)<<16;i[a]|=(s>>>24&255)<<24;return i},rhex:function(e){var t="";var i="0123456789abcdef";var n=0;while(n<4){var o=n++;t+=i.charAt(e>>o*8+4&15)+i.charAt(e>>o*8&15)}return t},addme:function(e,t){var i=(e&65535)+(t&65535);var n=(e>>16)+(t>>16)+(i>>16);return n<<16|i&65535},bitAND:function(e,t){var i=e&1&(t&1);var n=e>>>1&t>>>1;return n<<1|i},bitXOR:function(e,t){var i=e&1^t&1;var n=e>>>1^t>>>1;return n<<1|i},bitOR:function(e,t){var i=e&1|t&1;var n=e>>>1|t>>>1;return n<<1|i},__class__:haxe.Md5};haxe.Timer=function(e){var t=this;this.id=window.setInterval((function(){t.run()}),e)};haxe.Timer.__name__=true;haxe.Timer.delay=function(e,t){var i=new haxe.Timer(t);i.run=function(){i.stop();e()};return i};haxe.Timer.measure=function(e,t){var i=haxe.Timer.stamp();var n=e();haxe.Log.trace(haxe.Timer.stamp()-i+"s",t);return n};haxe.Timer.stamp=function(){return(new Date).getTime()/1e3};haxe.Timer.prototype={run:function(){},stop:function(){if(this.id==null)return;window.clearInterval(this.id);this.id=null},__class__:haxe.Timer};var js=js||{};js.Boot=function(){};js.Boot.__name__=true;js.Boot.__unhtml=function(e){return e.split("&").join("&").split("<").join("<").split(">").join(">")};js.Boot.__trace=function(e,t){var i=t!=null?t.fileName+":"+t.lineNumber+": ":"";i+=js.Boot.__string_rec(e,"");var n;if(typeof document!="undefined"&&(n=document.getElementById("haxe:trace"))!=null)n.innerHTML+=js.Boot.__unhtml(i)+"
    ";else if(typeof console!="undefined"&&console.log!=null)console.log(i)};js.Boot.__clear_trace=function(){var e=document.getElementById("haxe:trace");if(e!=null)e.innerHTML=""};js.Boot.isClass=function(e){return e.__name__};js.Boot.isEnum=function(e){return e.__ename__};js.Boot.getClass=function(e){return e.__class__};js.Boot.__string_rec=function(e,t){if(e==null)return"null";if(t.length>=5)return"<...>";var i=typeof e;if(i=="function"&&(e.__name__||e.__ename__))i="object";switch(i){case"object":if(e instanceof Array){if(e.__enum__){if(e.length==2)return e[0];var n=e[0]+"(";t+="\t";var o=2,r=e.length;while(o0?",":"")+js.Boot.__string_rec(e[l],t)}n+="]";return n}var c;try{c=e.toString}catch(e){return"???"}if(c!=null&&c!=Object.toString){var d=e.toString();if(d!="[object Object]")return d}var u=null;var n="{\n";t+="\t";var h=e.hasOwnProperty!=null;for(var u in e){if(h&&!e.hasOwnProperty(u)){continue}if(u=="prototype"||u=="__class__"||u=="__super__"||u=="__interfaces__"||u=="__properties__"){continue}if(n.length!=2)n+=", \n";n+=t+u+" : "+js.Boot.__string_rec(e[u],t)}t=t.substring(1);n+="\n"+t+"}";return n;case"function":return"";case"string":return e;default:return String(e)}};js.Boot.__interfLoop=function(e,t){if(e==null)return false;if(e==t)return true;var i=e.__interfaces__;if(i!=null){var n=0,o=i.length;while(n>>32-t},str2blks:function(e){var t=(e.length+8>>6)+1;var i=new Array;var n=0,o=t*16;while(n>2]|=HxOverrides.cca(e,r)<<(e.length*8+r)%4*8;r++}i[r>>2]|=128<<(e.length*8+r)%4*8;var s=e.length*8;var a=t*16-2;i[a]=s&255;i[a]|=(s>>>8&255)<<8;i[a]|=(s>>>16&255)<<16;i[a]|=(s>>>24&255)<<24;return i},rhex:function(e){var t="";var i="0123456789abcdef";var n=0;while(n<4){var o=n++;t+=i.charAt(e>>o*8+4&15)+i.charAt(e>>o*8&15)}return t},addme:function(e,t){var i=(e&65535)+(t&65535);var n=(e>>16)+(t>>16)+(i>>16);return n<<16|i&65535},bitAND:function(e,t){var i=e&1&(t&1);var n=e>>>1&t>>>1;return n<<1|i},bitXOR:function(e,t){var i=e&1^t&1;var n=e>>>1^t>>>1;return n<<1|i},bitOR:function(e,t){var i=e&1|t&1;var n=e>>>1|t>>>1;return n<<1|i},__class__:haxe.Md5};haxe.Timer=function(e){var t=this;this.id=window.setInterval((function(){t.run()}),e)};haxe.Timer.__name__=true;haxe.Timer.delay=function(e,t){var i=new haxe.Timer(t);i.run=function(){i.stop();e()};return i};haxe.Timer.measure=function(e,t){var i=haxe.Timer.stamp();var n=e();haxe.Log.trace(haxe.Timer.stamp()-i+"s",t);return n};haxe.Timer.stamp=function(){return(new Date).getTime()/1e3};haxe.Timer.prototype={run:function(){},stop:function(){if(this.id==null)return;window.clearInterval(this.id);this.id=null},__class__:haxe.Timer};var js=js||{};js.Boot=function(){};js.Boot.__name__=true;js.Boot.__unhtml=function(e){return e.split("&").join("&").split("<").join("<").split(">").join(">")};js.Boot.__trace=function(e,t){var i=t!=null?t.fileName+":"+t.lineNumber+": ":"";i+=js.Boot.__string_rec(e,"");var n;if(typeof document!="undefined"&&(n=document.getElementById("haxe:trace"))!=null)n.innerHTML+=js.Boot.__unhtml(i)+"
    ";else if(typeof console!="undefined"&&console.log!=null)console.log(i)};js.Boot.__clear_trace=function(){var e=document.getElementById("haxe:trace");if(e!=null)e.innerHTML=""};js.Boot.isClass=function(e){return e.__name__};js.Boot.isEnum=function(e){return e.__ename__};js.Boot.getClass=function(e){return e.__class__};js.Boot.__string_rec=function(e,t){if(e==null)return"null";if(t.length>=5)return"<...>";var i=typeof e;if(i=="function"&&(e.__name__||e.__ename__))i="object";switch(i){case"object":if(e instanceof Array){if(e.__enum__){if(e.length==2)return e[0];var n=e[0]+"(";t+="\t";var o=2,r=e.length;while(o0?",":"")+js.Boot.__string_rec(e[l],t)}n+="]";return n}var c;try{c=e.toString}catch(e){return"???"}if(c!=null&&c!=Object.toString){var d=e.toString();if(d!="[object Object]")return d}var u=null;var n="{\n";t+="\t";var h=e.hasOwnProperty!=null;for(var u in e){if(h&&!e.hasOwnProperty(u)){continue}if(u=="prototype"||u=="__class__"||u=="__super__"||u=="__interfaces__"||u=="__properties__"){continue}if(n.length!=2)n+=", \n";n+=t+u+" : "+js.Boot.__string_rec(e[u],t)}t=t.substring(1);n+="\n"+t+"}";return n;case"function":return"";case"string":return e;default:return String(e)}};js.Boot.__interfLoop=function(e,t){if(e==null)return false;if(e==t)return true;var i=e.__interfaces__;if(i!=null){var n=0,o=i.length;while(ndiv:first-child,.wrs_content_container.wrs_modal_desktop>div:first-child,.wrs_content_container.wrs_modal_ios>div:first-child{flex-grow:1}.wrs_modal_wrapper.wrs_modal_android{margin:auto;display:flex;flex-direction:column;height:100%;width:100%}.wrs_content_container.wrs_modal_desktop,.wrs_content_container.wrs_modal_ios{width:100%;flex-grow:1;display:flex;flex-direction:column}.wrs_modal_wrapper.wrs_modal_ios{margin:auto;display:flex;flex-direction:column;height:100%;width:100%}.wrs_virtual_keyboard{height:100%;width:100%;top:0;left:50%;transform:translate(-50%)}@media (orientation:portrait){.wrs_modal_dialogContainer.wrs_modal_mobile{width:100vmin;height:100vmin;margin:auto;border-width:0}.wrs_modal_wrapper.wrs_modal_mobile{width:100vmin;height:100vmin;margin:auto}}@media (orientation:landscape){.wrs_modal_dialogContainer.wrs_modal_mobile{width:100vmin;height:100vmin;margin:auto;border-width:0}.wrs_modal_wrapper.wrs_modal_mobile{width:100vmin;height:100vmin;margin:auto}}.wrs_modal_dialogContainer.wrs_modal_badStock,.wrs_modal_wrapper.wrs_modal_badStock{width:100%;height:280px;margin:0 auto;border-width:0}.wrs_noselect{-khtml-user-select:none}.wrs_bottom_right_resizer,.wrs_noselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.wrs_bottom_right_resizer{width:10px;height:10px;color:#778e9a;position:absolute;right:4px;bottom:8px;cursor:se-resize}.wrs_bottom_left_resizer{width:15px;height:15px;color:#778e9a;position:absolute;left:0;top:0;cursor:se-resize}.wrs_modal_controls{height:42px;margin:3px 0;overflow:hidden;line-height:normal}.wrs_modal_links{margin:10px auto 0;font-family:arial,sans-serif;padding:6px;display:inline;float:right;text-align:right}.wrs_modal_links>a{text-decoration:none;color:#778e9a;font-size:16px}.wrs_modal_button_cancel,.wrs_modal_button_cancel:active,.wrs_modal_button_cancel:focus,.wrs_modal_button_cancel:hover,.wrs_modal_button_cancel:visited{min-width:80px;font-size:14px;border-radius:3px;border:1px solid #778e9a;padding:6px 8px;margin:10px auto 0 5px;cursor:pointer;font-family:arial,sans-serif;background-color:#ddd;height:32px}.wrs_modal_button_accept,.wrs_modal_button_accept:active,.wrs_modal_button_accept:focus,.wrs_modal_button_accept:hover,.wrs_modal_button_accept:visited{min-width:80px;font-size:14px;border-radius:3px;border:1px solid #778e9a;padding:6px 8px;margin:10px 5px 0 auto;color:#fff;background:#778e9a;cursor:pointer;font-family:arial,sans-serif;height:32px}.wrs_editor_vertical_bar{height:20px;float:right;background:none;width:20px;cursor:pointer}.wrs_modal_buttons_container{display:inline;float:left}.wrs_modal_buttons_container.wrs_modalAndroid{padding-left:6px}.wrs_modal_buttons_container.wrs_modalDesktop{padding-left:0}.wrs_modal_buttons_container>button{line-height:normal;background-image:none}.wrs_modal_wrapper{margin:6px;display:flex;flex-direction:column}.wrs_modal_wrapper.wrs_modal_desktop.wrs_minimized{display:none}@media only screen and (max-device-width:480px) and (orientation:portrait){#wrs_modal_wrapper{width:140%}}.wrs_popupmessage_overlay_envolture{display:none;width:100%}.wrs_popupmessage_overlay{position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);z-index:4;cursor:pointer}.wrs_popupmessage_panel{top:50%;left:50%;transform:translate(-50%,-50%);position:absolute;background:#fff;max-width:500px;width:75%;border-radius:2px;padding:20px;font-family:sans-serif;font-size:15px;text-align:left;color:#2e2e2e;z-index:5;max-height:75%;overflow:auto}.wrs_popupmessage_button_area{margin:10px 0 0}.wrs_panelContainer *{border:0}.wrs_button_cancel,.wrs_button_cancel:active,.wrs_button_cancel:focus,.wrs_button_cancel:hover,.wrs_button_cancel:visited{min-width:80px;font-size:14px;border-radius:3px;border:1px solid #778e9a;padding:6px 8px;margin:10px auto 0 5px;cursor:pointer;font-family:arial,sans-serif;background-color:#ddd;background-image:none;height:32px}.wrs_button_accept,.wrs_button_accept:active,.wrs_button_accept:focus,.wrs_button_accept:hover,.wrs_button_accept:visited{min-width:80px;font-size:14px;border-radius:3px;border:1px solid #778e9a;padding:6px 8px;margin:10px 5px 0 auto;color:#fff;background:#778e9a;cursor:pointer;font-family:arial,sans-serif;height:32px}.wrs_editor button{box-shadow:none}.wrs_editor .wrs_header button{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.wrs_modal_overlay.wrs_modal_desktop.wrs_stack.wrs_overlay_active{display:block}.wrs_toolbar tr:focus,.wrs_toolbar tr:hover{background:none}.wrs_modal_rtl .wrs_modal_button_cancel{margin-right:5px;margin-left:0}.wrs_modal_rtl .wrs_modal_button_accept{margin-right:0;margin-left:5px}.wrs_modal_rtl .wrs_button_cancel{margin-right:5px;margin-left:0}.wrs_modal_rtl .wrs_button_accept{margin-right:0;margin-left:5px}"},function(e,t,i){var n=i(1);var o=i(107);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-media__wrapper .ck-media__placeholder{display:flex;flex-direction:column;align-items:center}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-tooltip{display:block}@media (hover:none){.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-tooltip{display:none}}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url{max-width:100%;position:relative}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url:hover .ck-tooltip{visibility:visible;opacity:1}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-media__placeholder__url__text{overflow:hidden;display:block}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="google.com/maps"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck-media__placeholder__icon *{display:none}.ck-editor__editable:not(.ck-read-only) .ck-media__wrapper>:not(.ck-media__placeholder),.ck-editor__editable:not(.ck-read-only) .ck-widget:not(.ck-widget_selected) .ck-media__placeholder{pointer-events:none}:root{--ck-media-embed-placeholder-icon-size:3em;--ck-color-media-embed-placeholder-url-text:#757575;--ck-color-media-embed-placeholder-url-text-hover:var(--ck-color-base-text)}.ck-media__wrapper{margin:0 auto}.ck-media__wrapper .ck-media__placeholder{padding:calc(3*var(--ck-spacing-standard));background:var(--ck-color-base-foreground)}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon{min-width:var(--ck-media-embed-placeholder-icon-size);height:var(--ck-media-embed-placeholder-icon-size);margin-bottom:var(--ck-spacing-large);background-position:50%;background-size:cover}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon .ck-icon{width:100%;height:100%}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text{color:var(--ck-color-media-embed-placeholder-url-text);white-space:nowrap;text-align:center;font-style:italic;text-overflow:ellipsis}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:var(--ck-color-media-embed-placeholder-url-text-hover);cursor:pointer;text-decoration:underline}.ck-media__wrapper[data-oembed-url*="open.spotify.com"]{max-width:300px;max-height:380px}.ck-media__wrapper[data-oembed-url*="google.com/maps"] .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAuMzc4IiBoZWlnaHQ9IjI1NC4xNjciIHZpZXdCb3g9IjAgMCA2Ni4yNDYgNjcuMjQ4Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcyLjUzMSAtMjE4LjQ1NSkgc2NhbGUoLjk4MDEyKSI+PHJlY3Qgcnk9IjUuMjM4IiByeD0iNS4yMzgiIHk9IjIzMS4zOTkiIHg9IjE3Ni4wMzEiIGhlaWdodD0iNjAuMDk5IiB3aWR0aD0iNjAuMDk5IiBmaWxsPSIjMzRhNjY4IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0yMDYuNDc3IDI2MC45bC0yOC45ODcgMjguOTg3YTUuMjE4IDUuMjE4IDAgMDAzLjc4IDEuNjFoNDkuNjIxYzEuNjk0IDAgMy4xOS0uNzk4IDQuMTQ2LTIuMDM3eiIgZmlsbD0iIzVjODhjNSIvPjxwYXRoIGQ9Ik0yMjYuNzQyIDIyMi45ODhjLTkuMjY2IDAtMTYuNzc3IDcuMTctMTYuNzc3IDE2LjAxNC4wMDcgMi43NjIuNjYzIDUuNDc0IDIuMDkzIDcuODc1LjQzLjcwMy44MyAxLjQwOCAxLjE5IDIuMTA3LjMzMy41MDIuNjUgMS4wMDUuOTUgMS41MDguMzQzLjQ3Ny42NzMuOTU3Ljk4OCAxLjQ0IDEuMzEgMS43NjkgMi41IDMuNTAyIDMuNjM3IDUuMTY4Ljc5MyAxLjI3NSAxLjY4MyAyLjY0IDIuNDY2IDMuOTkgMi4zNjMgNC4wOTQgNC4wMDcgOC4wOTIgNC42IDEzLjkxNHYuMDEyYy4xODIuNDEyLjUxNi42NjYuODc5LjY2Ny40MDMtLjAwMS43NjgtLjMxNC45My0uNzk5LjYwMy01Ljc1NiAyLjIzOC05LjcyOSA0LjU4NS0xMy43OTQuNzgyLTEuMzUgMS42NzMtMi43MTUgMi40NjUtMy45OSAxLjEzNy0xLjY2NiAyLjMyOC0zLjQgMy42MzgtNS4xNjkuMzE1LS40ODIuNjQ1LS45NjIuOTg4LTEuNDM5LjMtLjUwMy42MTctMS4wMDYuOTUtMS41MDguMzU5LS43Ljc2LTEuNDA0IDEuMTktMi4xMDcgMS40MjYtMi40MDIgMi01LjExNCAyLjAwNC03Ljg3NSAwLTguODQ0LTcuNTExLTE2LjAxNC0xNi43NzYtMTYuMDE0eiIgZmlsbD0iI2RkNGIzZSIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48ZWxsaXBzZSByeT0iNS41NjQiIHJ4PSI1LjgyOCIgY3k9IjIzOS4wMDIiIGN4PSIyMjYuNzQyIiBmaWxsPSIjODAyZDI3IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0xOTAuMzAxIDIzNy4yODNjLTQuNjcgMC04LjQ1NyAzLjg1My04LjQ1NyA4LjYwNnMzLjc4NiA4LjYwNyA4LjQ1NyA4LjYwN2MzLjA0MyAwIDQuODA2LS45NTggNi4zMzctMi41MTYgMS41My0xLjU1NyAyLjA4Ny0zLjkxMyAyLjA4Ny02LjI5IDAtLjM2Mi0uMDIzLS43MjItLjA2NC0xLjA3OWgtOC4yNTd2My4wNDNoNC44NWMtLjE5Ny43NTktLjUzMSAxLjQ1LTEuMDU4IDEuOTg2LS45NDIuOTU4LTIuMDI4IDEuNTQ4LTMuOTAxIDEuNTQ4LTIuODc2IDAtNS4yMDgtMi4zNzItNS4yMDgtNS4yOTkgMC0yLjkyNiAyLjMzMi01LjI5OSA1LjIwOC01LjI5OSAxLjM5OSAwIDIuNjE4LjQwNyAzLjU4NCAxLjI5M2wyLjM4MS0yLjM4YzAtLjAwMi0uMDAzLS4wMDQtLjAwNC0uMDA1LTEuNTg4LTEuNTI0LTMuNjItMi4yMTUtNS45NTUtMi4yMTV6bTQuNDMgNS42NmwuMDAzLjAwNnYtLjAwM3oiIGZpbGw9IiNmZmYiIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTIxNS4xODQgMjUxLjkyOWwtNy45OCA3Ljk3OSAyOC40NzcgMjguNDc1YTUuMjMzIDUuMjMzIDAgMDAuNDQ5LTIuMTIzdi0zMS4xNjVjLS40NjkuNjc1LS45MzQgMS4zNDktMS4zODIgMi4wMDUtLjc5MiAxLjI3NS0xLjY4MiAyLjY0LTIuNDY1IDMuOTktMi4zNDcgNC4wNjUtMy45ODIgOC4wMzgtNC41ODUgMTMuNzk0LS4xNjIuNDg1LS41MjcuNzk4LS45My43OTktLjM2My0uMDAxLS42OTctLjI1NS0uODc5LS42Njd2LS4wMTJjLS41OTMtNS44MjItMi4yMzctOS44Mi00LjYtMTMuOTE0LS43ODMtMS4zNS0xLjY3My0yLjcxNS0yLjQ2Ni0zLjk5LTEuMTM3LTEuNjY2LTIuMzI3LTMuNC0zLjYzNy01LjE2OWwtLjAwMi0uMDAzeiIgZmlsbD0iI2MzYzNjMyIvPjxwYXRoIGQ9Ik0yMTIuOTgzIDI0OC40OTVsLTM2Ljk1MiAzNi45NTN2LjgxMmE1LjIyNyA1LjIyNyAwIDAwNS4yMzggNS4yMzhoMS4wMTVsMzUuNjY2LTM1LjY2NmExMzYuMjc1IDEzNi4yNzUgMCAwMC0yLjc2NC0zLjkgMzcuNTc1IDM3LjU3NSAwIDAwLS45ODktMS40NCAzNS4xMjcgMzUuMTI3IDAgMDAtLjk1LTEuNTA4Yy0uMDgzLS4xNjItLjE3Ni0uMzI2LS4yNjQtLjQ4OXoiIGZpbGw9IiNmZGRjNGYiIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTIxMS45OTggMjYxLjA4M2wtNi4xNTIgNi4xNTEgMjQuMjY0IDI0LjI2NGguNzgxYTUuMjI3IDUuMjI3IDAgMDA1LjIzOS01LjIzOHYtMS4wNDV6IiBmaWxsPSIjZmZmIiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjwvZz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder{background:#4268b3}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05NjcuNDg0IDBINTYuNTE3QzI1LjMwNCAwIDAgMjUuMzA0IDAgNTYuNTE3djkxMC45NjZDMCA5OTguNjk0IDI1LjI5NyAxMDI0IDU2LjUyMiAxMDI0SDU0N1Y2MjhINDE0VjQ3M2gxMzNWMzU5LjAyOWMwLTEzMi4yNjIgODAuNzczLTIwNC4yODIgMTk4Ljc1Ni0yMDQuMjgyIDU2LjUxMyAwIDEwNS4wODYgNC4yMDggMTE5LjI0NCA2LjA4OVYyOTlsLTgxLjYxNi4wMzdjLTYzLjk5MyAwLTc2LjM4NCAzMC40OTItNzYuMzg0IDc1LjIzNlY0NzNoMTUzLjQ4N2wtMTkuOTg2IDE1NUg3MDd2Mzk2aDI2MC40ODRjMzEuMjEzIDAgNTYuNTE2LTI1LjMwMyA1Ni41MTYtNTYuNTE2VjU2LjUxNUMxMDI0IDI1LjMwMyA5OTguNjk3IDAgOTY3LjQ4NCAwIiBmaWxsPSIjRkZGRkZFIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__url__text{color:#cdf}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder{background:linear-gradient(-135deg,#1400c7,#b800b1,#f50000)}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTA0IiBoZWlnaHQ9IjUwNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik0wIC4xNTloNTAzLjg0MVY1MDMuOTRIMHoiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjYSIvPjwvbWFzaz48cGF0aCBkPSJNMjUxLjkyMS4xNTljLTY4LjQxOCAwLTc2Ljk5Ny4yOS0xMDMuODY3IDEuNTE2LTI2LjgxNCAxLjIyMy00NS4xMjcgNS40ODItNjEuMTUxIDExLjcxLTE2LjU2NiA2LjQzNy0zMC42MTUgMTUuMDUxLTQ0LjYyMSAyOS4wNTYtMTQuMDA1IDE0LjAwNi0yMi42MTkgMjguMDU1LTI5LjA1NiA0NC42MjEtNi4yMjggMTYuMDI0LTEwLjQ4NyAzNC4zMzctMTEuNzEgNjEuMTUxQy4yOSAxNzUuMDgzIDAgMTgzLjY2MiAwIDI1Mi4wOGMwIDY4LjQxNy4yOSA3Ni45OTYgMS41MTYgMTAzLjg2NiAxLjIyMyAyNi44MTQgNS40ODIgNDUuMTI3IDExLjcxIDYxLjE1MSA2LjQzNyAxNi41NjYgMTUuMDUxIDMwLjYxNSAyOS4wNTYgNDQuNjIxIDE0LjAwNiAxNC4wMDUgMjguMDU1IDIyLjYxOSA0NC42MjEgMjkuMDU3IDE2LjAyNCA2LjIyNyAzNC4zMzcgMTAuNDg2IDYxLjE1MSAxMS43MDkgMjYuODcgMS4yMjYgMzUuNDQ5IDEuNTE2IDEwMy44NjcgMS41MTYgNjguNDE3IDAgNzYuOTk2LS4yOSAxMDMuODY2LTEuNTE2IDI2LjgxNC0xLjIyMyA0NS4xMjctNS40ODIgNjEuMTUxLTExLjcwOSAxNi41NjYtNi40MzggMzAuNjE1LTE1LjA1MiA0NC42MjEtMjkuMDU3IDE0LjAwNS0xNC4wMDYgMjIuNjE5LTI4LjA1NSAyOS4wNTctNDQuNjIxIDYuMjI3LTE2LjAyNCAxMC40ODYtMzQuMzM3IDExLjcwOS02MS4xNTEgMS4yMjYtMjYuODcgMS41MTYtMzUuNDQ5IDEuNTE2LTEwMy44NjYgMC02OC40MTgtLjI5LTc2Ljk5Ny0xLjUxNi0xMDMuODY3LTEuMjIzLTI2LjgxNC01LjQ4Mi00NS4xMjctMTEuNzA5LTYxLjE1MS02LjQzOC0xNi41NjYtMTUuMDUyLTMwLjYxNS0yOS4wNTctNDQuNjIxLTE0LjAwNi0xNC4wMDUtMjguMDU1LTIyLjYxOS00NC42MjEtMjkuMDU2LTE2LjAyNC02LjIyOC0zNC4zMzctMTAuNDg3LTYxLjE1MS0xMS43MUMzMjguOTE3LjQ0OSAzMjAuMzM4LjE1OSAyNTEuOTIxLjE1OXptMCA0NS4zOTFjNjcuMjY1IDAgNzUuMjMzLjI1NyAxMDEuNzk3IDEuNDY5IDI0LjU2MiAxLjEyIDM3LjkwMSA1LjIyNCA0Ni43NzggOC42NzQgMTEuNzU5IDQuNTcgMjAuMTUxIDEwLjAyOSAyOC45NjYgMTguODQ1IDguODE2IDguODE1IDE0LjI3NSAxNy4yMDcgMTguODQ1IDI4Ljk2NiAzLjQ1IDguODc3IDcuNTU0IDIyLjIxNiA4LjY3NCA0Ni43NzggMS4yMTIgMjYuNTY0IDEuNDY5IDM0LjUzMiAxLjQ2OSAxMDEuNzk4IDAgNjcuMjY1LS4yNTcgNzUuMjMzLTEuNDY5IDEwMS43OTctMS4xMiAyNC41NjItNS4yMjQgMzcuOTAxLTguNjc0IDQ2Ljc3OC00LjU3IDExLjc1OS0xMC4wMjkgMjAuMTUxLTE4Ljg0NSAyOC45NjYtOC44MTUgOC44MTYtMTcuMjA3IDE0LjI3NS0yOC45NjYgMTguODQ1LTguODc3IDMuNDUtMjIuMjE2IDcuNTU0LTQ2Ljc3OCA4LjY3NC0yNi41NiAxLjIxMi0zNC41MjcgMS40NjktMTAxLjc5NyAxLjQ2OS02Ny4yNzEgMC03NS4yMzctLjI1Ny0xMDEuNzk4LTEuNDY5LTI0LjU2Mi0xLjEyLTM3LjkwMS01LjIyNC00Ni43NzgtOC42NzQtMTEuNzU5LTQuNTctMjAuMTUxLTEwLjAyOS0yOC45NjYtMTguODQ1LTguODE1LTguODE1LTE0LjI3NS0xNy4yMDctMTguODQ1LTI4Ljk2Ni0zLjQ1LTguODc3LTcuNTU0LTIyLjIxNi04LjY3NC00Ni43NzgtMS4yMTItMjYuNTY0LTEuNDY5LTM0LjUzMi0xLjQ2OS0xMDEuNzk3IDAtNjcuMjY2LjI1Ny03NS4yMzQgMS40NjktMTAxLjc5OCAxLjEyLTI0LjU2MiA1LjIyNC0zNy45MDEgOC42NzQtNDYuNzc4IDQuNTctMTEuNzU5IDEwLjAyOS0yMC4xNTEgMTguODQ1LTI4Ljk2NiA4LjgxNS04LjgxNiAxNy4yMDctMTQuMjc1IDI4Ljk2Ni0xOC44NDUgOC44NzctMy40NSAyMi4yMTYtNy41NTQgNDYuNzc4LTguNjc0IDI2LjU2NC0xLjIxMiAzNC41MzItMS40NjkgMTAxLjc5OC0xLjQ2OXoiIGZpbGw9IiNGRkYiIG1hc2s9InVybCgjYikiLz48cGF0aCBkPSJNMjUxLjkyMSAzMzYuMDUzYy00Ni4zNzggMC04My45NzQtMzcuNTk2LTgzLjk3NC04My45NzMgMC00Ni4zNzggMzcuNTk2LTgzLjk3NCA4My45NzQtODMuOTc0IDQ2LjM3NyAwIDgzLjk3MyAzNy41OTYgODMuOTczIDgzLjk3NCAwIDQ2LjM3Ny0zNy41OTYgODMuOTczLTgzLjk3MyA4My45NzN6bTAtMjEzLjMzOGMtNzEuNDQ3IDAtMTI5LjM2NSA1Ny45MTgtMTI5LjM2NSAxMjkuMzY1IDAgNzEuNDQ2IDU3LjkxOCAxMjkuMzY0IDEyOS4zNjUgMTI5LjM2NCA3MS40NDYgMCAxMjkuMzY0LTU3LjkxOCAxMjkuMzY0LTEyOS4zNjQgMC03MS40NDctNTcuOTE4LTEyOS4zNjUtMTI5LjM2NC0xMjkuMzY1ek00MTYuNjI3IDExNy42MDRjMCAxNi42OTYtMTMuNTM1IDMwLjIzLTMwLjIzMSAzMC4yMy0xNi42OTUgMC0zMC4yMy0xMy41MzQtMzAuMjMtMzAuMjMgMC0xNi42OTYgMTMuNTM1LTMwLjIzMSAzMC4yMy0zMC4yMzEgMTYuNjk2IDAgMzAuMjMxIDEzLjUzNSAzMC4yMzEgMzAuMjMxIiBmaWxsPSIjRkZGIi8+PC9nPjwvc3ZnPg==)}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__url__text{color:#ffe0fe}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder{background:linear-gradient(90deg,#71c6f4,#0d70a5)}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDAwIj48cGF0aCBkPSJNNDAwIDIwMGMwIDExMC41LTg5LjUgMjAwLTIwMCAyMDBTMCAzMTAuNSAwIDIwMCA4OS41IDAgMjAwIDBzMjAwIDg5LjUgMjAwIDIwMHpNMTYzLjQgMzA1LjVjODguNyAwIDEzNy4yLTczLjUgMTM3LjItMTM3LjIgMC0yLjEgMC00LjItLjEtNi4yIDkuNC02LjggMTcuNi0xNS4zIDI0LjEtMjUtOC42IDMuOC0xNy45IDYuNC0yNy43IDcuNiAxMC02IDE3LjYtMTUuNCAyMS4yLTI2LjctOS4zIDUuNS0xOS42IDkuNS0zMC42IDExLjctOC44LTkuNC0yMS4zLTE1LjItMzUuMi0xNS4yLTI2LjYgMC00OC4yIDIxLjYtNDguMiA0OC4yIDAgMy44LjQgNy41IDEuMyAxMS00MC4xLTItNzUuNi0yMS4yLTk5LjQtNTAuNC00LjEgNy4xLTYuNSAxNS40LTYuNSAyNC4yIDAgMTYuNyA4LjUgMzEuNSAyMS41IDQwLjEtNy45LS4yLTE1LjMtMi40LTIxLjgtNnYuNmMwIDIzLjQgMTYuNiA0Mi44IDM4LjcgNDcuMy00IDEuMS04LjMgMS43LTEyLjcgMS43LTMuMSAwLTYuMS0uMy05LjEtLjkgNi4xIDE5LjIgMjMuOSAzMy4xIDQ1IDMzLjUtMTYuNSAxMi45LTM3LjMgMjAuNi01OS45IDIwLjYtMy45IDAtNy43LS4yLTExLjUtLjcgMjEuMSAxMy44IDQ2LjUgMjEuOCA3My43IDIxLjgiIGZpbGw9IiNmZmYiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__url__text{color:#b8e6ff}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}'},function(e,t,i){var n=i(1);var o=i(109);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-media-form{display:flex;align-items:flex-start;flex-direction:row;flex-wrap:nowrap}.ck.ck-media-form .ck-labeled-field-view{display:inline-block}.ck.ck-media-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-media-form{flex-wrap:wrap}.ck.ck-media-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-media-form .ck-button{flex-basis:50%}}.ck.ck-media-form{padding:var(--ck-spacing-standard)}.ck.ck-media-form:focus{outline:none}[dir=ltr] .ck.ck-media-form>:not(:first-child),[dir=rtl] .ck.ck-media-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-media-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-media-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-media-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-media-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-media-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-media-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-media-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-media-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-media-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(e,t,i){var n=i(1);var o=i(111);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .media{clear:both;margin:1em 0;display:block;min-width:15em}"},function(e,t,i){var n=i(1);var o=i(113);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-content .page-break{position:relative;clear:both;padding:5px 0;display:flex;align-items:center;justify-content:center}.ck-content .page-break:after{content:"";position:absolute;border-bottom:2px dashed #c4c4c4;width:100%}.ck-content .page-break__label{position:relative;z-index:1;padding:.3em .6em;display:block;text-transform:uppercase;border:1px solid #c4c4c4;border-radius:2px;font-family:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;font-size:.75em;font-weight:700;color:#333;background:#fff;box-shadow:2px 2px 1px rgba(0,0,0,.15);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media print{.ck-content .page-break{padding:0}.ck-content .page-break:after{display:none}}'},function(e,t,i){var n=i(1);var o=i(115);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-form__header{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:space-between}:root{--ck-form-header-height:38px}.ck.ck-form__header{padding:var(--ck-spacing-small) var(--ck-spacing-large);height:var(--ck-form-header-height);line-height:var(--ck-form-header-height);border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-form__header .ck-form__header__label{font-weight:700}"},function(e,t,i){var n=i(1);var o=i(117);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-character-grid .ck-character-grid__tiles{display:grid;grid-template-columns:repeat(10,1fr)}:root{--ck-character-grid-tile-size:24px}.ck.ck-character-grid{overflow-y:auto;overflow-x:hidden;width:350px;max-height:200px}.ck.ck-character-grid .ck-character-grid__tiles{margin:var(--ck-spacing-standard) var(--ck-spacing-large);grid-gap:var(--ck-spacing-standard)}.ck.ck-character-grid .ck-character-grid__tile{width:var(--ck-character-grid-tile-size);height:var(--ck-character-grid-tile-size);min-width:var(--ck-character-grid-tile-size);min-height:var(--ck-character-grid-tile-size);font-size:1.2em;padding:0;transition:box-shadow .2s ease;border:0}.ck.ck-character-grid .ck-character-grid__tile:focus:not(.ck-disabled),.ck.ck-character-grid .ck-character-grid__tile:hover:not(.ck-disabled){border:0;box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-character-grid .ck-character-grid__tile .ck-button__label{line-height:var(--ck-character-grid-tile-size);width:100%;text-align:center}"},function(e,t,i){var n=i(1);var o=i(119);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-character-info{display:flex;justify-content:space-between;padding:var(--ck-spacing-small) var(--ck-spacing-large);border-top:1px solid var(--ck-color-base-border)}.ck.ck-character-info>*{text-transform:uppercase;font-size:var(--ck-font-size-small)}.ck.ck-character-info .ck-character-info__name{max-width:280px;text-overflow:ellipsis;overflow:hidden}.ck.ck-character-info .ck-character-info__code{opacity:.6}"},function(e,t,i){var n=i(1);var o=i(121);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-special-characters-navigation>.ck-label{max-width:160px;text-overflow:ellipsis;overflow:hidden}.ck.ck-special-characters-navigation>.ck-dropdown .ck-dropdown__panel{max-height:250px;overflow-y:auto;overflow-x:hidden}"},function(e,t,i){var n=i(1);var o=i(123);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-color-table-focused-cell-background:rgba(158,207,250,0.3)}.ck-widget.table td.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table td.ck-editor__nested-editable:focus,.ck-widget.table th.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table th.ck-editor__nested-editable:focus{background:var(--ck-color-table-focused-cell-background);border-style:none;outline:1px solid var(--ck-color-focus-border);outline-offset:-1px}"},function(e,t,i){var n=i(1);var o=i(125);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-insert-table-dropdown__grid{display:flex;flex-direction:row;flex-wrap:wrap}:root{--ck-insert-table-dropdown-padding:10px;--ck-insert-table-dropdown-box-height:11px;--ck-insert-table-dropdown-box-width:12px;--ck-insert-table-dropdown-box-margin:1px}.ck .ck-insert-table-dropdown__grid{width:calc(var(--ck-insert-table-dropdown-box-width)*10 + var(--ck-insert-table-dropdown-box-margin)*20 + var(--ck-insert-table-dropdown-padding)*2);padding:var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0}.ck .ck-insert-table-dropdown__label{text-align:center}.ck .ck-insert-table-dropdown-grid-box{width:var(--ck-insert-table-dropdown-box-width);height:var(--ck-insert-table-dropdown-box-height);margin:var(--ck-insert-table-dropdown-box-margin);border:1px solid var(--ck-color-base-border);border-radius:1px}.ck .ck-insert-table-dropdown-grid-box.ck-on{border-color:var(--ck-color-focus-border);background:var(--ck-color-focus-outer-shadow)}"},function(e,t,i){var n=i(1);var o=i(127);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=':root{--ck-table-selected-cell-background:rgba(158,207,250,0.3)}.ck.ck-editor__editable .table table td.ck-editor__editable_selected,.ck.ck-editor__editable .table table th.ck-editor__editable_selected{position:relative;caret-color:transparent;outline:unset;box-shadow:unset}.ck.ck-editor__editable .table table td.ck-editor__editable_selected:after,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:after{content:"";pointer-events:none;background-color:var(--ck-table-selected-cell-background);position:absolute;top:0;left:0;right:0;bottom:0}.ck.ck-editor__editable .table table td.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table td.ck-editor__editable_selected:focus,.ck.ck-editor__editable .table table th.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:focus{background-color:transparent}.ck.ck-editor__editable .table table td.ck-editor__editable_selected .ck-widget_selected,.ck.ck-editor__editable .table table th.ck-editor__editable_selected .ck-widget_selected{outline:unset}'},function(e,t,i){var n=i(1);var o=i(129);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .table{margin:1em auto;display:table}.ck-content .table table{border-collapse:collapse;border-spacing:0;width:100%;height:100%;border:1px double #b3b3b3}.ck-content .table table td,.ck-content .table table th{min-width:2em;padding:.4em;border:1px solid #bfbfbf}.ck-content .table table th{font-weight:700;background:hsla(0,0%,0%,5%)}.ck-content[dir=rtl] .table th{text-align:right}.ck-content[dir=ltr] .table th{text-align:left}"},function(e,t,i){var n=i(1);var o=i(131);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-input-color{width:100%;display:flex}.ck.ck-input-color>input.ck.ck-input-text{min-width:auto;flex-grow:1}.ck.ck-input-color>input.ck.ck-input-text:active,.ck.ck-input-color>input.ck.ck-input-text:focus{z-index:var(--ck-z-default)}.ck.ck-input-color>div.ck.ck-dropdown{min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown>.ck-input-color__button .ck-dropdown__arrow{display:none}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview{position:relative;overflow:hidden}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{position:absolute;display:block}[dir=ltr] .ck.ck-input-color>.ck.ck-input-text{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .ck.ck-input-color>.ck.ck-input-text{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{padding:0}[dir=ltr] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}[dir=rtl] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-1px}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button.ck-disabled{background:var(--ck-color-input-disabled-background)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview{border-radius:0}.ck-rounded-corners .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview,.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview{width:20px;height:20px;border:1px solid var(--ck-color-input-border)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{top:-30%;left:50%;height:150%;width:8%;background:red;border-radius:2px;transform:rotate(45deg);transform-origin:50%}.ck.ck-input-color .ck.ck-input-color__remove-color{width:100%;border-bottom:1px solid var(--ck-color-input-border);padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);border-bottom-left-radius:0;border-bottom-right-radius:0}[dir=ltr] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-right-radius:0}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:0;margin-left:var(--ck-spacing-standard)}"},function(e,t,i){var n=i(1);var o=i(133);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-form__row{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.ck.ck-form__row>:not(.ck-label){flex-grow:1}.ck.ck-form__row.ck-table-form__action-row .ck-button-cancel,.ck.ck-form__row.ck-table-form__action-row .ck-button-save{justify-content:center}.ck.ck-form__row{padding:var(--ck-spacing-standard) var(--ck-spacing-large) 0}[dir=ltr] .ck.ck-form__row>:not(.ck-label)+*{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-form__row>:not(.ck-label)+*{margin-right:var(--ck-spacing-large)}.ck.ck-form__row>.ck-label{width:100%;min-width:100%}.ck.ck-form__row.ck-table-form__action-row{margin-top:var(--ck-spacing-large)}.ck.ck-form__row.ck-table-form__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}"},function(e,t){e.exports=".ck.ck-form{padding:0 0 var(--ck-spacing-large)}.ck.ck-form:focus{outline:none}.ck.ck-form .ck.ck-input-text{min-width:100%;width:0}.ck.ck-form .ck.ck-dropdown{min-width:100%}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button .ck-button__label{width:100%}"},function(e,t){e.exports='.ck.ck-table-form .ck-form__row.ck-table-form__border-row{flex-wrap:wrap}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view{display:flex;flex-direction:column-reverse}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view .ck.ck-dropdown,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{flex-grow:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{flex-wrap:wrap;align-items:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view{display:flex;flex-direction:column-reverse;align-items:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view .ck.ck-dropdown,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{flex-grow:0}.ck.ck-table-form .ck.ck-labeled-field-view{position:relative}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{position:absolute;left:50%;bottom:calc(-1*var(--ck-table-properties-error-arrow-size));transform:translate(-50%,100%);z-index:1}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{content:"";position:absolute;top:calc(-1*var(--ck-table-properties-error-arrow-size));left:50%;transform:translateX(-50%)}:root{--ck-table-properties-error-arrow-size:6px;--ck-table-properties-min-error-width:150px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style{width:80px;min-width:80px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{width:50px;min-width:50px}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{padding:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view>.ck-label{font-size:10px;text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width{margin:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{align-self:start;display:inline-block;height:var(--ck-ui-component-min-height);line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{border-radius:0}.ck-rounded-corners .ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status,.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{background:var(--ck-color-base-error);color:var(--ck-color-base-background);padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-width:var(--ck-table-properties-min-error-width);text-align:center}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-left:var(--ck-table-properties-error-arrow-size) solid transparent;border-bottom:var(--ck-table-properties-error-arrow-size) solid var(--ck-color-base-error);border-right:var(--ck-table-properties-error-arrow-size) solid transparent;border-top:0 solid transparent}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:ck-table-form-labeled-view-status-appear .15s ease both}.ck.ck-table-form .ck.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}@keyframes ck-table-form-labeled-view-status-appear{0%{opacity:0}to{opacity:1}}'},function(e,t,i){var n=i(1);var o=i(137);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row{flex-wrap:wrap}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{flex-grow:0}.ck.ck-table-cell-properties-form{width:320px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__padding-row{padding:0;width:35%}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{background:none}"},function(e,t,i){var n=i(1);var o=i(139);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{flex-wrap:wrap;flex-basis:0;align-content:baseline}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items{flex-wrap:nowrap}.ck.ck-table-properties-form{width:320px}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{padding:0}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar{background:none}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items>*{width:40px}"},function(e,t,i){"use strict";i.r(t);var n=i(3);var o=n["a"].Symbol;var r=o;var s=Object.prototype;var a=s.hasOwnProperty;var l=s.toString;var c=r?r.toStringTag:undefined;function d(e){var t=a.call(e,c),i=e[c];try{e[c]=undefined;var n=true}catch(e){}var o=l.call(e);if(n){if(t){e[c]=i}else{delete e[c]}}return o}var u=d;var h=Object.prototype;var f=h.toString;function m(e){return f.call(e)}var g=m;var p="[object Null]",b="[object Undefined]";var w=r?r.toStringTag:undefined;function _(e){if(e==null){return e===undefined?b:p}return w&&w in Object(e)?u(e):g(e)}var k=_;function v(e,t){return function(i){return e(t(i))}}var y=v;var x=y(Object.getPrototypeOf,Object);var A=x;function C(e){return e!=null&&typeof e=="object"}var T=C;var E="[object Object]";var P=Function.prototype,M=Object.prototype;var S=P.toString;var I=M.hasOwnProperty;var L=S.call(Object);function N(e){if(!T(e)||k(e)!=E){return false}var t=A(e);if(t===null){return true}var i=I.call(t,"constructor")&&t.constructor;return typeof i=="function"&&i instanceof i&&S.call(i)==L}var O=N;function R(){this.__data__=[];this.size=0}var z=R;function D(e,t){return e===t||e!==e&&t!==t}var j=D;function B(e,t){var i=e.length;while(i--){if(j(e[i][0],t)){return i}}return-1}var V=B;var F=Array.prototype;var H=F.splice;function W(e){var t=this.__data__,i=V(t,e);if(i<0){return false}var n=t.length-1;if(i==n){t.pop()}else{H.call(t,i,1)}--this.size;return true}var U=W;function q(e){var t=this.__data__,i=V(t,e);return i<0?undefined:t[i][1]}var $=q;function G(e){return V(this.__data__,e)>-1}var Y=G;function K(e,t){var i=this.__data__,n=V(i,e);if(n<0){++this.size;i.push([e,t])}else{i[n][1]=t}return this}var J=K;function Q(e){var t=-1,i=e==null?0:e.length;this.clear();while(++t-1&&e%1==0&&e-1&&e%1==0&&e<=ti}var ni=ii;var oi="[object Arguments]",ri="[object Array]",si="[object Boolean]",ai="[object Date]",li="[object Error]",ci="[object Function]",di="[object Map]",ui="[object Number]",hi="[object Object]",fi="[object RegExp]",mi="[object Set]",gi="[object String]",pi="[object WeakMap]";var bi="[object ArrayBuffer]",wi="[object DataView]",_i="[object Float32Array]",ki="[object Float64Array]",vi="[object Int8Array]",yi="[object Int16Array]",xi="[object Int32Array]",Ai="[object Uint8Array]",Ci="[object Uint8ClampedArray]",Ti="[object Uint16Array]",Ei="[object Uint32Array]";var Pi={};Pi[_i]=Pi[ki]=Pi[vi]=Pi[yi]=Pi[xi]=Pi[Ai]=Pi[Ci]=Pi[Ti]=Pi[Ei]=true;Pi[oi]=Pi[ri]=Pi[bi]=Pi[si]=Pi[wi]=Pi[ai]=Pi[li]=Pi[ci]=Pi[di]=Pi[ui]=Pi[hi]=Pi[fi]=Pi[mi]=Pi[gi]=Pi[pi]=false;function Mi(e){return T(e)&&ni(e.length)&&!!Pi[k(e)]}var Si=Mi;function Ii(e){return function(t){return e(t)}}var Li=Ii;var Ni=i(5);var Oi=Ni["a"]&&Ni["a"].isTypedArray;var Ri=Oi?Li(Oi):Si;var zi=Ri;var Di=Object.prototype;var ji=Di.hasOwnProperty;function Bi(e,t){var i=Kt(e),n=!i&&Gt(e),o=!i&&!n&&Object(Jt["a"])(e),r=!i&&!n&&!o&&zi(e),s=i||n||o||r,a=s?Bt(e.length,String):[],l=a.length;for(var c in e){if((t||ji.call(e,c))&&!(s&&(c=="length"||o&&(c=="offset"||c=="parent")||r&&(c=="buffer"||c=="byteLength"||c=="byteOffset")||ei(c,l)))){a.push(c)}}return a}var Vi=Bi;var Fi=Object.prototype;function Hi(e){var t=e&&e.constructor,i=typeof t=="function"&&t.prototype||Fi;return e===i}var Wi=Hi;var Ui=y(Object.keys,Object);var qi=Ui;var $i=Object.prototype;var Gi=$i.hasOwnProperty;function Yi(e){if(!Wi(e)){return qi(e)}var t=[];for(var i in Object(e)){if(Gi.call(e,i)&&i!="constructor"){t.push(i)}}return t}var Ki=Yi;function Ji(e){return e!=null&&ni(e.length)&&!me(e)}var Qi=Ji;function Zi(e){return Qi(e)?Vi(e):Ki(e)}var Xi=Zi;function en(e,t){return e&&Dt(t,Xi(t),e)}var tn=en;function nn(e){var t=[];if(e!=null){for(var i in Object(e)){t.push(i)}}return t}var on=nn;var rn=Object.prototype;var sn=rn.hasOwnProperty;function an(e){if(!le(e)){return on(e)}var t=Wi(e),i=[];for(var n in e){if(!(n=="constructor"&&(t||!sn.call(e,n)))){i.push(n)}}return i}var ln=an;function cn(e){return Qi(e)?Vi(e,true):ln(e)}var dn=cn;function un(e,t){return e&&Dt(t,dn(t),e)}var hn=un;var fn=i(8);function mn(e,t){var i=-1,n=e.length;t||(t=Array(n));while(++i{this._setToTarget(e,n,t[n],i)})}}function Jr(e){return $r(e,Qr)}function Qr(e){return Yr(e)?e:undefined}function Zr(){return function e(){e.called=true}}var Xr=Zr;class es{constructor(e,t){this.source=e;this.name=t;this.path=[];this.stop=Xr();this.off=Xr()}}const ts=new Array(256).fill().map((e,t)=>("0"+t.toString(16)).slice(-2));function is(){const e=Math.random()*4294967296>>>0;const t=Math.random()*4294967296>>>0;const i=Math.random()*4294967296>>>0;const n=Math.random()*4294967296>>>0;return"e"+ts[e>>0&255]+ts[e>>8&255]+ts[e>>16&255]+ts[e>>24&255]+ts[t>>0&255]+ts[t>>8&255]+ts[t>>16&255]+ts[t>>24&255]+ts[i>>0&255]+ts[i>>8&255]+ts[i>>16&255]+ts[i>>24&255]+ts[n>>0&255]+ts[n>>8&255]+ts[n>>16&255]+ts[n>>24&255]}const ns={get(e){if(typeof e!="number"){return this[e]||this.normal}else{return e}},highest:1e5,high:1e3,normal:0,low:-1e3,lowest:-1e5};var os=ns;var rs=i(6);var ss=i(0);const as=Symbol("listeningTo");const ls=Symbol("emitterId");const cs={on(e,t,i={}){this.listenTo(this,e,t,i)},once(e,t,i){let n=false;const o=function(e,...i){if(!n){n=true;e.off();t.call(this,e,...i)}};this.listenTo(this,e,o,i)},off(e,t){this.stopListening(this,e,t)},listenTo(e,t,i,n={}){let o,r;if(!this[as]){this[as]={}}const s=this[as];if(!fs(e)){hs(e)}const a=fs(e);if(!(o=s[a])){o=s[a]={emitter:e,callbacks:{}}}if(!(r=o.callbacks[t])){r=o.callbacks[t]=[]}r.push(i);ps(e,t);const l=bs(e,t);const c=os.get(n.priority);const d={callback:i,priority:c};for(const e of l){let t=false;for(let i=0;i{if(!this._delegations){this._delegations=new Map}e.forEach(e=>{const n=this._delegations.get(e);if(!n){this._delegations.set(e,new Map([[t,i]]))}else{n.set(t,i)}})}}},stopDelegating(e,t){if(!this._delegations){return}if(!e){this._delegations.clear()}else if(!t){this._delegations.delete(e)}else{const i=this._delegations.get(e);if(i){i.delete(t)}}}};var ds=cs;function us(e,t){if(e[as]&&e[as][t]){return e[as][t].emitter}return null}function hs(e,t){if(!e[ls]){e[ls]=t||is()}}function fs(e){return e[ls]}function ms(e){if(!e._events){Object.defineProperty(e,"_events",{value:{}})}return e._events}function gs(){return{callbacks:[],childEvents:[]}}function ps(e,t){const i=ms(e);if(i[t]){return}let n=t;let o=null;const r=[];while(n!==""){if(i[n]){break}i[n]=gs();r.push(i[n]);if(o){i[n].childEvents.push(o)}o=n;n=n.substr(0,n.lastIndexOf(":"))}if(n!==""){for(const e of r){e.callbacks=i[n].callbacks.slice()}i[n].childEvents.push(o)}}function bs(e,t){const i=ms(e)[t];if(!i){return[]}let n=[i.callbacks];for(let t=0;t-1){return ws(e,t.substr(0,t.lastIndexOf(":")))}else{return null}}return i.callbacks}function _s(e,t,i){for(let[n,o]of e){if(!o){o=t.name}else if(typeof o=="function"){o=o(t.name)}const e=new es(t.source,o);e.path=[...t.path];n.fire(e,...i)}}function ks(e,t,i){const n=bs(e,t);for(const e of n){for(let t=0;t{Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t)).forEach(i=>{if(i in e.prototype){return}const n=Object.getOwnPropertyDescriptor(t,i);n.enumerable=false;Object.defineProperty(e.prototype,i,n)})})}class xs{constructor(e={},t={}){const i=vs(e);if(!i){t=e}this._items=[];this._itemMap=new Map;this._idProperty=t.idProperty||"id";this._bindToExternalToInternalMap=new WeakMap;this._bindToInternalToExternalMap=new WeakMap;this._skippedIndexesFromExternal=[];if(i){for(const t of e){this._items.push(t);this._itemMap.set(this._getItemIdBeforeAdding(t),t)}}}get length(){return this._items.length}get first(){return this._items[0]||null}get last(){return this._items[this.length-1]||null}add(e,t){const i=this._getItemIdBeforeAdding(e);if(t===undefined){t=this._items.length}else if(t>this._items.length||t<0){throw new ss["b"]("collection-add-item-invalid-index",this)}this._items.splice(t,0,e);this._itemMap.set(i,e);this.fire("add",e,t);return this}get(e){let t;if(typeof e=="string"){t=this._itemMap.get(e)}else if(typeof e=="number"){t=this._items[e]}else{throw new ss["b"]("collection-get-invalid-arg: Index or id must be given.",this)}return t||null}has(e){if(typeof e=="string"){return this._itemMap.has(e)}else{const t=this._idProperty;const i=e[t];return this._itemMap.has(i)}}getIndex(e){let t;if(typeof e=="string"){t=this._itemMap.get(e)}else{t=e}return this._items.indexOf(t)}remove(e){let t,i,n;let o=false;const r=this._idProperty;if(typeof e=="string"){i=e;n=this._itemMap.get(i);o=!n;if(n){t=this._items.indexOf(n)}}else if(typeof e=="number"){t=e;n=this._items[t];o=!n;if(n){i=n[r]}}else{n=e;i=n[r];t=this._items.indexOf(n);o=t==-1||!this._itemMap.get(i)}if(o){throw new ss["b"]("collection-remove-404: Item not found.",this)}this._items.splice(t,1);this._itemMap.delete(i);const s=this._bindToInternalToExternalMap.get(n);this._bindToInternalToExternalMap.delete(n);this._bindToExternalToInternalMap.delete(s);this.fire("remove",n,t);return n}map(e,t){return this._items.map(e,t)}find(e,t){return this._items.find(e,t)}filter(e,t){return this._items.filter(e,t)}clear(){if(this._bindToCollection){this.stopListening(this._bindToCollection);this._bindToCollection=null}while(this.length){this.remove(0)}}bindTo(e){if(this._bindToCollection){throw new ss["b"]("collection-bind-to-rebind: The collection cannot be bound more than once.",this)}this._bindToCollection=e;return{as:e=>{this._setUpBindToBinding(t=>new e(t))},using:e=>{if(typeof e=="function"){this._setUpBindToBinding(t=>e(t))}else{this._setUpBindToBinding(t=>t[e])}}}}_setUpBindToBinding(e){const t=this._bindToCollection;const i=(i,n,o)=>{const r=t._bindToCollection==this;const s=t._bindToInternalToExternalMap.get(n);if(r&&s){this._bindToExternalToInternalMap.set(n,s);this._bindToInternalToExternalMap.set(s,n)}else{const i=e(n);if(!i){this._skippedIndexesFromExternal.push(o);return}let r=o;for(const e of this._skippedIndexesFromExternal){if(o>e){r--}}for(const e of t._skippedIndexesFromExternal){if(r>=e){r++}}this._bindToExternalToInternalMap.set(n,i);this._bindToInternalToExternalMap.set(i,n);this.add(i,r);for(let e=0;e{const n=this._bindToExternalToInternalMap.get(t);if(n){this.remove(n)}this._skippedIndexesFromExternal=this._skippedIndexesFromExternal.reduce((e,t)=>{if(it){e.push(t)}return e},[])})}_getItemIdBeforeAdding(e){const t=this._idProperty;let i;if(t in e){i=e[t];if(typeof i!="string"){throw new ss["b"]("collection-add-invalid-id",this)}if(this.get(i)){throw new ss["b"]("collection-add-item-already-exists",this)}}else{e[t]=i=is()}return i}[Symbol.iterator](){return this._items[Symbol.iterator]()}}ys(xs,ds);class As{constructor(e,t=[],i=[]){this._context=e;this._plugins=new Map;this._availablePlugins=new Map;for(const e of t){if(e.pluginName){this._availablePlugins.set(e.pluginName,e)}}this._contextPlugins=new Map;for(const[e,t]of i){this._contextPlugins.set(e,t);this._contextPlugins.set(t,e);if(e.pluginName){this._availablePlugins.set(e.pluginName,e)}}}*[Symbol.iterator](){for(const e of this._plugins){if(typeof e[0]=="function"){yield e}}}get(e){const t=this._plugins.get(e);if(!t){const t="plugincollection-plugin-not-loaded: The requested plugin is not loaded.";let i=e;if(typeof e=="function"){i=e.pluginName||e.name}throw new ss["b"](t,this._context,{plugin:i})}return t}has(e){return this._plugins.has(e)}init(e,t=[]){const i=this;const n=this._context;const o=new Set;const r=[];const s=m(e);const a=m(t);const l=f(e);if(l){const e="plugincollection-plugin-not-found: Some plugins are not available and could not be loaded.";console.error(Object(ss["a"])(e),{plugins:l});return Promise.reject(new ss["b"](e,n,{plugins:l}))}return Promise.all(s.map(c)).then(()=>d(r,"init")).then(()=>d(r,"afterInit")).then(()=>r);function c(e){if(a.includes(e)){return}if(i._plugins.has(e)||o.has(e)){return}return u(e).catch(t=>{console.error(Object(ss["a"])("plugincollection-load: It was not possible to load the plugin."),{plugin:e});throw t})}function d(e,t){return e.reduce((e,n)=>{if(!n[t]){return e}if(i._contextPlugins.has(n)){return e}return e.then(n[t].bind(n))},Promise.resolve())}function u(e){return new Promise(s=>{o.add(e);if(e.requires){e.requires.forEach(i=>{const o=h(i);if(e.isContextPlugin&&!o.isContextPlugin){throw new ss["b"]("plugincollection-context-required: Context plugin can not require plugin which is not a context plugin",null,{plugin:o.name,requiredBy:e.name})}if(t.includes(o)){throw new ss["b"]("plugincollection-required: Cannot load a plugin because one of its dependencies is listed in"+"the `removePlugins` option.",n,{plugin:o.name,requiredBy:e.name})}c(o)})}const a=i._contextPlugins.get(e)||new e(n);i._add(e,a);r.push(a);s()})}function h(e){if(typeof e=="function"){return e}return i._availablePlugins.get(e)}function f(e){const t=[];for(const i of e){if(!h(i)){t.push(i)}}return t.length?t:null}function m(e){return e.map(e=>h(e)).filter(e=>!!e)}}destroy(){const e=[];for(const[,t]of this){if(typeof t.destroy=="function"&&!this._contextPlugins.has(t)){e.push(t.destroy())}}return Promise.all(e)}_add(e,t){this._plugins.set(e,t);const i=e.pluginName;if(!i){return}if(this._plugins.has(i)){throw new ss["b"]("plugincollection-plugin-name-conflict: Two plugins with the same name were loaded.",null,{pluginName:i,plugin1:this._plugins.get(i).constructor,plugin2:e})}this._plugins.set(i,t)}}ys(As,ds);if(!window.CKEDITOR_TRANSLATIONS){window.CKEDITOR_TRANSLATIONS={}}function Cs(e,t,i){if(!window.CKEDITOR_TRANSLATIONS[e]){window.CKEDITOR_TRANSLATIONS[e]={}}const n=window.CKEDITOR_TRANSLATIONS[e];n.dictionary=n.dictionary||{};n.getPluralForm=i||n.getPluralForm;Object.assign(n.dictionary,t)}function Ts(e,t,i=1){if(typeof i!=="number"){throw new ss["b"]("translation-service-quantity-not-a-number: Expecting `quantity` to be a number.",null,{quantity:i})}const n=Ms();if(n===1){e=Object.keys(window.CKEDITOR_TRANSLATIONS)[0]}const o=t.id||t.string;if(n===0||!Ps(e,o)){if(i!==1){return t.plural}return t.string}const r=window.CKEDITOR_TRANSLATIONS[e].dictionary;const s=window.CKEDITOR_TRANSLATIONS[e].getPluralForm||(e=>e===1?0:1);if(typeof r[o]==="string"){return r[o]}const a=Number(s(i));return r[o][a]}function Es(){window.CKEDITOR_TRANSLATIONS={}}function Ps(e,t){return!!window.CKEDITOR_TRANSLATIONS[e]&&!!window.CKEDITOR_TRANSLATIONS[e].dictionary[t]}function Ms(){return Object.keys(window.CKEDITOR_TRANSLATIONS).length}const Ss=["ar","fa","he","ku","ug"];class Is{constructor(e={}){this.uiLanguage=e.uiLanguage||"en";this.contentLanguage=e.contentLanguage||this.uiLanguage;this.uiLanguageDirection=Ns(this.uiLanguage);this.contentLanguageDirection=Ns(this.contentLanguage);this.t=(e,t)=>this._t(e,t)}get language(){console.warn("locale-deprecated-language-property: "+"The Locale#language property has been deprecated and will be removed in the near future. "+"Please use #uiLanguage and #contentLanguage properties instead.");return this.uiLanguage}_t(e,t=[]){if(!Array.isArray(t)){t=[t]}if(typeof e==="string"){e={string:e}}const i=!!e.plural;const n=i?t[0]:1;const o=Ts(this.uiLanguage,e,n);return Ls(o,t)}}function Ls(e,t){return e.replace(/%(\d+)/g,(e,i)=>ie.destroy())).then(()=>this.plugins.destroy())}_addEditor(e,t){if(this._contextOwner){throw new ss["b"]("context-addEditor-private-context: Cannot add multiple editors to the context which is created by the editor.")}this.editors.add(e);if(t){this._contextOwner=e}}_removeEditor(e){if(this.editors.has(e)){this.editors.remove(e)}if(this._contextOwner===e){return this.destroy()}return Promise.resolve()}_getEditorConfig(){const e={};for(const t of this.config.names()){if(!["plugins","removePlugins","extraPlugins"].includes(t)){e[t]=this.config.get(t)}}return e}static create(e){return new Promise(t=>{const i=new this(e);t(i.initPlugins().then(()=>i))})}}function Rs(e,t){const i=Math.min(e.length,t.length);for(let n=0;ne.data.length){throw new ss["b"]("view-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.",this)}if(i<0||t+i>e.data.length){throw new ss["b"]("view-textproxy-wrong-length: Given length value is incorrect.",this)}this.data=e.data.substring(t,t+i);this.offsetInText=t}get offsetSize(){return this.data.length}get isPartial(){return this.data.length!==this.textNode.data.length}get parent(){return this.textNode.parent}get root(){return this.textNode.root}get document(){return this.textNode.document}is(e){return e==="textProxy"||e==="view:textProxy"}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let i=e.includeSelf?this.textNode:this.parent;while(i!==null){t[e.parentFirst?"push":"unshift"](i);i=i.parent}return t}}function Hs(e){const t=new Map;for(const i in e){t.set(i,e[i])}return t}function Ws(e){if(vs(e)){return new Map(e)}else{return Hs(e)}}class Us{constructor(...e){this._patterns=[];this.add(...e)}add(...e){for(let t of e){if(typeof t=="string"||t instanceof RegExp){t={name:t}}if(t.classes&&(typeof t.classes=="string"||t.classes instanceof RegExp)){t.classes=[t.classes]}this._patterns.push(t)}}match(...e){for(const t of e){for(const e of this._patterns){const i=qs(t,e);if(i){return{element:t,pattern:e,match:i}}}}return null}matchAll(...e){const t=[];for(const i of e){for(const e of this._patterns){const n=qs(i,e);if(n){t.push({element:i,pattern:e,match:n})}}}return t.length>0?t:null}getElementName(){if(this._patterns.length!==1){return null}const e=this._patterns[0];const t=e.name;return typeof e!="function"&&t&&!(t instanceof RegExp)?t:null}}function qs(e,t){if(typeof t=="function"){return t(e)}const i={};if(t.name){i.name=$s(t.name,e.name);if(!i.name){return null}}if(t.attributes){i.attributes=Gs(t.attributes,e);if(!i.attributes){return null}}if(t.classes){i.classes=Ys(t.classes,e);if(!i.classes){return false}}if(t.styles){i.styles=Ks(t.styles,e);if(!i.styles){return false}}return i}function $s(e,t){if(e instanceof RegExp){return e.test(t)}return e===t}function Gs(e,t){const i=[];for(const n in e){const o=e[n];if(t.hasAttribute(n)){const e=t.getAttribute(n);if(o===true){i.push(n)}else if(o instanceof RegExp){if(o.test(e)){i.push(n)}else{return null}}else if(e===o){i.push(n)}else{return null}}else{return null}}return i}function Ys(e,t){const i=[];for(const n of e){if(n instanceof RegExp){const e=t.getClassNames();for(const t of e){if(n.test(t)){i.push(t)}}if(i.length===0){return null}}else if(t.hasClass(n)){i.push(n)}else{return null}}return i}function Ks(e,t){const i=[];for(const n in e){const o=e[n];if(t.hasStyle(n)){const e=t.getStyle(n);if(o instanceof RegExp){if(o.test(e)){i.push(n)}else{return null}}else if(e===o){i.push(n)}else{return null}}else{return null}}return i}var Js="[object Symbol]";function Qs(e){return typeof e=="symbol"||T(e)&&k(e)==Js}var Zs=Qs;var Xs=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ea=/^\w*$/;function ta(e,t){if(Kt(e)){return false}var i=typeof e;if(i=="number"||i=="symbol"||i=="boolean"||e==null||Zs(e)){return true}return ea.test(e)||!Xs.test(e)||t!=null&&e in Object(t)}var ia=ta;var na="Expected a function";function oa(e,t){if(typeof e!="function"||t!=null&&typeof t!="function"){throw new TypeError(na)}var i=function(){var n=arguments,o=t?t.apply(this,n):n[0],r=i.cache;if(r.has(o)){return r.get(o)}var s=e.apply(this,n);i.cache=r.set(o,s)||r;return s};i.cache=new(oa.Cache||kt);return i}oa.Cache=kt;var ra=oa;var sa=500;function aa(e){var t=ra(e,(function(e){if(i.size===sa){i.clear()}return e}));var i=t.cache;return t}var la=aa;var ca=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;var da=/\\(\\)?/g;var ua=la((function(e){var t=[];if(e.charCodeAt(0)===46){t.push("")}e.replace(ca,(function(e,i,n,o){t.push(n?o.replace(da,"$1"):i||e)}));return t}));var ha=ua;function fa(e,t){var i=-1,n=e==null?0:e.length,o=Array(n);while(++io?0:o+t}i=i>o?o:i;if(i<0){i+=o}o=t>i?0:i-t>>>0;t>>>=0;var r=Array(o);while(++n0){if(++t>=ml){return arguments[0]}}else{t=0}return e.apply(undefined,arguments)}}var wl=bl;var _l=wl(fl);var kl=_l;function vl(e,t){return kl(cl(e,t,ol),e+"")}var yl=vl;function xl(e,t,i){if(!le(i)){return false}var n=typeof t;if(n=="number"?Qi(i)&&ei(t,i.length):n=="string"&&t in i){return j(i[t],e)}return false}var Al=xl;function Cl(e){return yl((function(t,i){var n=-1,o=i.length,r=o>1?i[o-1]:undefined,s=o>2?i[2]:undefined;r=e.length>3&&typeof r=="function"?(o--,r):undefined;if(s&&Al(i[0],i[1],s)){r=o<3?undefined:r;o=1}t=Object(t);while(++nt===e);return Array.isArray(i)}set(e,t){if(le(e)){for(const[t,i]of Object.entries(e)){this._styleProcessor.toNormalizedForm(t,i,this._styles)}}else{this._styleProcessor.toNormalizedForm(e,t,this._styles)}}remove(e){const t=zl(e);ja(this._styles,t);delete this._styles[e];this._cleanEmptyObjectsOnPath(t)}getNormalized(e){return this._styleProcessor.getNormalized(e,this._styles)}toString(){if(this.isEmpty){return""}return this._getStylesEntries().map(e=>e.join(":")).sort().join(";")+";"}getAsString(e){if(this.isEmpty){return}if(this._styles[e]&&!le(this._styles[e])){return this._styles[e]}const t=this._styleProcessor.getReducedForm(e,this._styles);const i=t.find(([t])=>t===e);if(Array.isArray(i)){return i[1]}}getStyleNames(){if(this.isEmpty){return[]}const e=this._getStylesEntries();return e.map(([e])=>e)}clear(){this._styles={}}_getStylesEntries(){const e=[];const t=Object.keys(this._styles);for(const i of t){e.push(...this._styleProcessor.getReducedForm(i,this._styles))}return e}_cleanEmptyObjectsOnPath(e){const t=e.split(".");const i=t.length>1;if(!i){return}const n=t.splice(0,t.length-1).join(".");const o=Va(this._styles,n);if(!o){return}const r=!Array.from(Object.keys(o)).length;if(r){this.remove(n)}}}class Ol{constructor(){this._normalizers=new Map;this._extractors=new Map;this._reducers=new Map;this._consumables=new Map}toNormalizedForm(e,t,i){if(le(t)){Dl(i,zl(e),t);return}if(this._normalizers.has(e)){const n=this._normalizers.get(e);const{path:o,value:r}=n(t);Dl(i,o,r)}else{Dl(i,e,t)}}getNormalized(e,t){if(!e){return Pl({},t)}if(t[e]!==undefined){return t[e]}if(this._extractors.has(e)){const i=this._extractors.get(e);if(typeof i==="string"){return Va(t,i)}const n=i(e,t);if(n){return n}}return Va(t,zl(e))}getReducedForm(e,t){const i=this.getNormalized(e,t);if(i===undefined){return[]}if(this._reducers.has(e)){const t=this._reducers.get(e);return t(i)}return[[e,i]]}getRelatedStyles(e){return this._consumables.get(e)||[]}setNormalizer(e,t){this._normalizers.set(e,t)}setExtractor(e,t){this._extractors.set(e,t)}setReducer(e,t){this._reducers.set(e,t)}setStyleRelation(e,t){this._mapStyleNames(e,t);for(const i of t){this._mapStyleNames(i,[e])}}_mapStyleNames(e,t){if(!this._consumables.has(e)){this._consumables.set(e,[])}this._consumables.get(e).push(...t)}}function Rl(e){let t=null;let i=0;let n=0;let o=null;const r=new Map;if(e===""){return r}if(e.charAt(e.length-1)!=";"){e=e+";"}for(let s=0;s0){yield"class"}if(!this._styles.isEmpty){yield"style"}yield*this._attrs.keys()}*getAttributes(){yield*this._attrs.entries();if(this._classes.size>0){yield["class",this.getAttribute("class")]}if(!this._styles.isEmpty){yield["style",this.getAttribute("style")]}}getAttribute(e){if(e=="class"){if(this._classes.size>0){return[...this._classes].join(" ")}return undefined}if(e=="style"){const e=this._styles.toString();return e==""?undefined:e}return this._attrs.get(e)}hasAttribute(e){if(e=="class"){return this._classes.size>0}if(e=="style"){return!this._styles.isEmpty}return this._attrs.has(e)}isSimilar(e){if(!(e instanceof jl)){return false}if(this===e){return true}if(this.name!=e.name){return false}if(this._attrs.size!==e._attrs.size||this._classes.size!==e._classes.size||this._styles.size!==e._styles.size){return false}for(const[t,i]of this._attrs){if(!e._attrs.has(t)||e._attrs.get(t)!==i){return false}}for(const t of this._classes){if(!e._classes.has(t)){return false}}for(const t of this._styles.getStyleNames()){if(!e._styles.has(t)||e._styles.getAsString(t)!==this._styles.getAsString(t)){return false}}return true}hasClass(...e){for(const t of e){if(!this._classes.has(t)){return false}}return true}getClassNames(){return this._classes.keys()}getStyle(e){return this._styles.getAsString(e)}getNormalizedStyle(e){return this._styles.getNormalized(e)}getStyleNames(){return this._styles.getStyleNames()}hasStyle(...e){for(const t of e){if(!this._styles.has(t)){return false}}return true}findAncestor(...e){const t=new Us(...e);let i=this.parent;while(i){if(t.match(i)){return i}i=i.parent}return null}getCustomProperty(e){return this._customProperties.get(e)}*getCustomProperties(){yield*this._customProperties.entries()}getIdentity(){const e=Array.from(this._classes).sort().join(",");const t=this._styles.toString();const i=Array.from(this._attrs).map(e=>`${e[0]}="${e[1]}"`).sort().join(" ");return this.name+(e==""?"":` class="${e}"`)+(!t?"":` style="${t}"`)+(i==""?"":` ${i}`)}_clone(e=false){const t=[];if(e){for(const i of this.getChildren()){t.push(i._clone(e))}}const i=new this.constructor(this.document,this.name,this._attrs,t);i._classes=new Set(this._classes);i._styles.set(this._styles.getNormalized());i._customProperties=new Map(this._customProperties);i.getFillerOffset=this.getFillerOffset;return i}_appendChild(e){return this._insertChild(this.childCount,e)}_insertChild(e,t){this._fireChange("children",this);let i=0;const n=Fl(this.document,t);for(const t of n){if(t.parent!==null){t._remove()}t.parent=this;t.document=this.document;this._children.splice(e,0,t);e++;i++}return i}_removeChildren(e,t=1){this._fireChange("children",this);for(let i=e;i0){this._classes.clear();return true}return false}if(e=="style"){if(!this._styles.isEmpty){this._styles.clear();return true}return false}return this._attrs.delete(e)}_addClass(e){this._fireChange("attributes",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._classes.add(e))}_removeClass(e){this._fireChange("attributes",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._classes.delete(e))}_setStyle(e,t){this._fireChange("attributes",this);this._styles.set(e,t)}_removeStyle(e){this._fireChange("attributes",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._styles.remove(e))}_setCustomProperty(e,t){this._customProperties.set(e,t)}_removeCustomProperty(e){return this._customProperties.delete(e)}}function Bl(e){e=Ws(e);for(const[t,i]of e){if(i===null){e.delete(t)}else if(typeof i!="string"){e.set(t,String(i))}}return e}function Vl(e,t){const i=t.split(/\s+/);e.clear();i.forEach(t=>e.add(t))}function Fl(e,t){if(typeof t=="string"){return[new Vs(e,t)]}if(!vs(t)){t=[t]}return Array.from(t).map(t=>{if(typeof t=="string"){return new Vs(e,t)}if(t instanceof Fs){return new Vs(e,t.data)}return t})}class Hl extends jl{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=Wl}is(e,t=null){if(!t){return e==="containerElement"||e==="view:containerElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element")}}}function Wl(){const e=[...this.getChildren()];const t=e[this.childCount-1];if(t&&t.is("element","br")){return this.childCount}for(const t of e){if(!t.is("uiElement")){return null}}return this.childCount}var Ul=Tl((function(e,t){Dt(t,dn(t),e)}));var ql=Ul;const $l=Symbol("observableProperties");const Gl=Symbol("boundObservables");const Yl=Symbol("boundProperties");const Kl={set(e,t){if(le(e)){Object.keys(e).forEach(t=>{this.set(t,e[t])},this);return}Ql(this);const i=this[$l];if(e in this&&!i.has(e)){throw new ss["b"]("observable-set-cannot-override: Cannot override an existing property.",this)}Object.defineProperty(this,e,{enumerable:true,configurable:true,get(){return i.get(e)},set(t){const n=i.get(e);let o=this.fire("set:"+e,e,t,n);if(o===undefined){o=t}if(n!==o||!i.has(e)){i.set(e,o);this.fire("change:"+e,e,o,n)}}});this[e]=t},bind(...e){if(!e.length||!tc(e)){throw new ss["b"]("observable-bind-wrong-properties: All properties must be strings.",this)}if(new Set(e).size!==e.length){throw new ss["b"]("observable-bind-duplicate-properties: Properties must be unique.",this)}Ql(this);const t=this[Yl];e.forEach(e=>{if(t.has(e)){throw new ss["b"]("observable-bind-rebind: Cannot bind the same property more than once.",this)}});const i=new Map;e.forEach(e=>{const n={property:e,to:[]};t.set(e,n);i.set(e,n)});return{to:Zl,toMany:Xl,_observable:this,_bindProperties:e,_to:[],_bindings:i}},unbind(...e){if(!this[$l]){return}const t=this[Yl];const i=this[Gl];if(e.length){if(!tc(e)){throw new ss["b"]("observable-unbind-wrong-properties: Properties must be strings.",this)}e.forEach(e=>{const n=t.get(e);if(!n){return}let o,r,s,a;n.to.forEach(e=>{o=e[0];r=e[1];s=i.get(o);a=s[r];a.delete(n);if(!a.size){delete s[r]}if(!Object.keys(s).length){i.delete(o);this.stopListening(o,"change")}});t.delete(e)})}else{i.forEach((e,t)=>{this.stopListening(t,"change")});i.clear();t.clear()}},decorate(e){const t=this[e];if(!t){throw new ss["b"]("observablemixin-cannot-decorate-undefined: Cannot decorate an undefined method.",this,{object:this,methodName:e})}this.on(e,(e,i)=>{e.return=t.apply(this,i)});this[e]=function(...t){return this.fire(e,t)}}};ql(Kl,ds);var Jl=Kl;function Ql(e){if(e[$l]){return}Object.defineProperty(e,$l,{value:new Map});Object.defineProperty(e,Gl,{value:new Map});Object.defineProperty(e,Yl,{value:new Map})}function Zl(...e){const t=ic(...e);const i=Array.from(this._bindings.keys());const n=i.length;if(!t.callback&&t.to.length>1){throw new ss["b"]("observable-bind-to-no-callback: Binding multiple observables only possible with callback.",this)}if(n>1&&t.callback){throw new ss["b"]("observable-bind-to-extra-callback: Cannot bind multiple properties and use a callback in one binding.",this)}t.to.forEach(e=>{if(e.properties.length&&e.properties.length!==n){throw new ss["b"]("observable-bind-to-properties-length: The number of properties must match.",this)}if(!e.properties.length){e.properties=this._bindProperties}});this._to=t.to;if(t.callback){this._bindings.get(i[0]).callback=t.callback}sc(this._observable,this._to);oc(this);this._bindProperties.forEach(e=>{rc(this._observable,e)})}function Xl(e,t,i){if(this._bindings.size>1){throw new ss["b"]("observable-bind-to-many-not-one-binding: Cannot bind multiple properties with toMany().",this)}this.to(...ec(e,t),i)}function ec(e,t){const i=e.map(e=>[e,t]);return Array.prototype.concat.apply([],i)}function tc(e){return e.every(e=>typeof e=="string")}function ic(...e){if(!e.length){throw new ss["b"]("observable-bind-to-parse-error: Invalid argument syntax in `to()`.",null)}const t={to:[]};let i;if(typeof e[e.length-1]=="function"){t.callback=e.pop()}e.forEach(e=>{if(typeof e=="string"){i.properties.push(e)}else if(typeof e=="object"){i={observable:e,properties:[]};t.to.push(i)}else{throw new ss["b"]("observable-bind-to-parse-error: Invalid argument syntax in `to()`.",null)}});return t}function nc(e,t,i,n){const o=e[Gl];const r=o.get(i);const s=r||{};if(!s[n]){s[n]=new Set}s[n].add(t);if(!r){o.set(i,s)}}function oc(e){let t;e._bindings.forEach((i,n)=>{e._to.forEach(o=>{t=o.properties[i.callback?0:e._bindProperties.indexOf(n)];i.to.push([o.observable,t]);nc(e._observable,i,o.observable,t)})})}function rc(e,t){const i=e[Yl];const n=i.get(t);let o;if(n.callback){o=n.callback.apply(e,n.to.map(e=>e[0][e[1]]))}else{o=n.to[0];o=o[0][o[1]]}if(e.hasOwnProperty(t)){e[t]=o}else{e.set(t,o)}}function sc(e,t){t.forEach(t=>{const i=e[Gl];let n;if(!i.get(t.observable)){e.listenTo(t.observable,"change",(o,r)=>{n=i.get(t.observable)[r];if(n){n.forEach(t=>{rc(e,t.property)})}})}})}class ac extends Hl{constructor(e,t,i,n){super(e,t,i,n);this.set("isReadOnly",false);this.set("isFocused",false);this.bind("isReadOnly").to(e);this.bind("isFocused").to(e,"isFocused",t=>t&&e.selection.editableElement==this);this.listenTo(e.selection,"change",()=>{this.isFocused=e.isFocused&&e.selection.editableElement==this})}is(e,t=null){if(!t){return e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element")}}destroy(){this.stopListening()}}ys(ac,Jl);const lc=Symbol("rootName");class cc extends ac{constructor(e,t){super(e,t);this.rootName="main"}is(e,t=null){if(!t){return e==="rootElement"||e==="view:rootElement"||e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="rootElement"||e==="view:rootElement"||e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element")}}get rootName(){return this.getCustomProperty(lc)}set rootName(e){this._setCustomProperty(lc,e)}set _name(e){this.name=e}}class dc{constructor(e={}){if(!e.boundaries&&!e.startPosition){throw new ss["b"]("view-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.",null)}if(e.direction&&e.direction!="forward"&&e.direction!="backward"){throw new ss["b"]("view-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.",e.startPosition,{direction:e.direction})}this.boundaries=e.boundaries||null;if(e.startPosition){this.position=uc._createAt(e.startPosition)}else{this.position=uc._createAt(e.boundaries[e.direction=="backward"?"end":"start"])}this.direction=e.direction||"forward";this.singleCharacters=!!e.singleCharacters;this.shallow=!!e.shallow;this.ignoreElementEnd=!!e.ignoreElementEnd;this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null;this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null}[Symbol.iterator](){return this}skip(e){let t,i,n;do{n=this.position;({done:t,value:i}=this.next())}while(!t&&e(i));if(!t){this.position=n}}next(){if(this.direction=="forward"){return this._next()}else{return this._previous()}}_next(){let e=this.position.clone();const t=this.position;const i=e.parent;if(i.parent===null&&e.offset===i.childCount){return{done:true}}if(i===this._boundaryEndParent&&e.offset==this.boundaries.end.offset){return{done:true}}let n;if(i instanceof Vs){if(e.isAtEnd){this.position=uc._createAfter(i);return this._next()}n=i.data[e.offset]}else{n=i.getChild(e.offset)}if(n instanceof jl){if(!this.shallow){e=new uc(n,0)}else{e.offset++}this.position=e;return this._formatReturnValue("elementStart",n,t,e,1)}else if(n instanceof Vs){if(this.singleCharacters){e=new uc(n,0);this.position=e;return this._next()}else{let i=n.data.length;let o;if(n==this._boundaryEndParent){i=this.boundaries.end.offset;o=new Fs(n,0,i);e=uc._createAfter(o)}else{o=new Fs(n,0,n.data.length);e.offset++}this.position=e;return this._formatReturnValue("text",o,t,e,i)}}else if(typeof n=="string"){let n;if(this.singleCharacters){n=1}else{const t=i===this._boundaryEndParent?this.boundaries.end.offset:i.data.length;n=t-e.offset}const o=new Fs(i,e.offset,n);e.offset+=n;this.position=e;return this._formatReturnValue("text",o,t,e,n)}else{e=uc._createAfter(i);this.position=e;if(this.ignoreElementEnd){return this._next()}else{return this._formatReturnValue("elementEnd",i,t,e)}}}_previous(){let e=this.position.clone();const t=this.position;const i=e.parent;if(i.parent===null&&e.offset===0){return{done:true}}if(i==this._boundaryStartParent&&e.offset==this.boundaries.start.offset){return{done:true}}let n;if(i instanceof Vs){if(e.isAtStart){this.position=uc._createBefore(i);return this._previous()}n=i.data[e.offset-1]}else{n=i.getChild(e.offset-1)}if(n instanceof jl){if(!this.shallow){e=new uc(n,n.childCount);this.position=e;if(this.ignoreElementEnd){return this._previous()}else{return this._formatReturnValue("elementEnd",n,t,e)}}else{e.offset--;this.position=e;return this._formatReturnValue("elementStart",n,t,e,1)}}else if(n instanceof Vs){if(this.singleCharacters){e=new uc(n,n.data.length);this.position=e;return this._previous()}else{let i=n.data.length;let o;if(n==this._boundaryStartParent){const t=this.boundaries.start.offset;o=new Fs(n,t,n.data.length-t);i=o.data.length;e=uc._createBefore(o)}else{o=new Fs(n,0,n.data.length);e.offset--}this.position=e;return this._formatReturnValue("text",o,t,e,i)}}else if(typeof n=="string"){let n;if(!this.singleCharacters){const t=i===this._boundaryStartParent?this.boundaries.start.offset:0;n=e.offset-t}else{n=1}e.offset-=n;const o=new Fs(i,e.offset,n);this.position=e;return this._formatReturnValue("text",o,t,e,n)}else{e=uc._createBefore(i);this.position=e;return this._formatReturnValue("elementStart",i,t,e,1)}}_formatReturnValue(e,t,i,n,o){if(t instanceof Fs){if(t.offsetInText+t.data.length==t.textNode.data.length){if(this.direction=="forward"&&!(this.boundaries&&this.boundaries.end.isEqual(this.position))){n=uc._createAfter(t.textNode);this.position=n}else{i=uc._createAfter(t.textNode)}}if(t.offsetInText===0){if(this.direction=="backward"&&!(this.boundaries&&this.boundaries.start.isEqual(this.position))){n=uc._createBefore(t.textNode);this.position=n}else{i=uc._createBefore(t.textNode)}}}return{done:false,value:{type:e,item:t,previousPosition:i,nextPosition:n,length:o}}}}class uc{constructor(e,t){this.parent=e;this.offset=t}get nodeAfter(){if(this.parent.is("text")){return null}return this.parent.getChild(this.offset)||null}get nodeBefore(){if(this.parent.is("text")){return null}return this.parent.getChild(this.offset-1)||null}get isAtStart(){return this.offset===0}get isAtEnd(){const e=this.parent.is("text")?this.parent.data.length:this.parent.childCount;return this.offset===e}get root(){return this.parent.root}get editableElement(){let e=this.parent;while(!(e instanceof ac)){if(e.parent){e=e.parent}else{return null}}return e}getShiftedBy(e){const t=uc._createAt(this);const i=t.offset+e;t.offset=i<0?0:i;return t}getLastMatchingPosition(e,t={}){t.startPosition=this;const i=new dc(t);i.skip(e);return i.position}getAncestors(){if(this.parent.is("documentFragment")){return[this.parent]}else{return this.parent.getAncestors({includeSelf:true})}}getCommonAncestor(e){const t=this.getAncestors();const i=e.getAncestors();let n=0;while(t[n]==i[n]&&t[n]){n++}return n===0?null:t[n-1]}is(e){return e==="position"||e==="view:position"}isEqual(e){return this.parent==e.parent&&this.offset==e.offset}isBefore(e){return this.compareWith(e)=="before"}isAfter(e){return this.compareWith(e)=="after"}compareWith(e){if(this.root!==e.root){return"different"}if(this.isEqual(e)){return"same"}const t=this.parent.is("node")?this.parent.getPath():[];const i=e.parent.is("node")?e.parent.getPath():[];t.push(this.offset);i.push(e.offset);const n=Rs(t,i);switch(n){case"prefix":return"before";case"extension":return"after";default:return t[n]0?new this(i,n):new this(n,i)}static _createIn(e){return this._createFromParentsAndOffsets(e,0,e,e.childCount)}static _createOn(e){const t=e.is("textProxy")?e.offsetSize:1;return this._createFromPositionAndShift(uc._createBefore(e),t)}}function fc(e){if(e.item.is("attributeElement")||e.item.is("uiElement")){return true}return false}function mc(e){let t=0;for(const i of e){t++}return t}class gc{constructor(e=null,t,i){this._ranges=[];this._lastRangeBackward=false;this._isFake=false;this._fakeSelectionLabel="";this.setTo(e,t,i)}get isFake(){return this._isFake}get fakeSelectionLabel(){return this._fakeSelectionLabel}get anchor(){if(!this._ranges.length){return null}const e=this._ranges[this._ranges.length-1];const t=this._lastRangeBackward?e.end:e.start;return t.clone()}get focus(){if(!this._ranges.length){return null}const e=this._ranges[this._ranges.length-1];const t=this._lastRangeBackward?e.start:e.end;return t.clone()}get isCollapsed(){return this.rangeCount===1&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}get editableElement(){if(this.anchor){return this.anchor.editableElement}return null}*getRanges(){for(const e of this._ranges){yield e.clone()}}getFirstRange(){let e=null;for(const t of this._ranges){if(!e||t.start.isBefore(e.start)){e=t}}return e?e.clone():null}getLastRange(){let e=null;for(const t of this._ranges){if(!e||t.end.isAfter(e.end)){e=t}}return e?e.clone():null}getFirstPosition(){const e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){const e=this.getLastRange();return e?e.end.clone():null}isEqual(e){if(this.isFake!=e.isFake){return false}if(this.isFake&&this.fakeSelectionLabel!=e.fakeSelectionLabel){return false}if(this.rangeCount!=e.rangeCount){return false}else if(this.rangeCount===0){return true}if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus)){return false}for(const t of this._ranges){let i=false;for(const n of e._ranges){if(t.isEqual(n)){i=true;break}}if(!i){return false}}return true}isSimilar(e){if(this.isBackward!=e.isBackward){return false}const t=mc(this.getRanges());const i=mc(e.getRanges());if(t!=i){return false}if(t==0){return true}for(let t of this.getRanges()){t=t.getTrimmed();let i=false;for(let n of e.getRanges()){n=n.getTrimmed();if(t.start.isEqual(n.start)&&t.end.isEqual(n.end)){i=true;break}}if(!i){return false}}return true}getSelectedElement(){if(this.rangeCount!==1){return null}return this.getFirstRange().getContainedElement()}setTo(e,t,i){if(e===null){this._setRanges([]);this._setFakeOptions(t)}else if(e instanceof gc||e instanceof pc){this._setRanges(e.getRanges(),e.isBackward);this._setFakeOptions({fake:e.isFake,label:e.fakeSelectionLabel})}else if(e instanceof hc){this._setRanges([e],t&&t.backward);this._setFakeOptions(t)}else if(e instanceof uc){this._setRanges([new hc(e)]);this._setFakeOptions(t)}else if(e instanceof Bs){const n=!!i&&!!i.backward;let o;if(t===undefined){throw new ss["b"]("view-selection-setTo-required-second-parameter: "+"selection.setTo requires the second parameter when the first parameter is a node.",this)}else if(t=="in"){o=hc._createIn(e)}else if(t=="on"){o=hc._createOn(e)}else{o=new hc(uc._createAt(e,t))}this._setRanges([o],n);this._setFakeOptions(i)}else if(vs(e)){this._setRanges(e,t&&t.backward);this._setFakeOptions(t)}else{throw new ss["b"]("view-selection-setTo-not-selectable: Cannot set selection to given place.",this)}this.fire("change")}setFocus(e,t){if(this.anchor===null){throw new ss["b"]("view-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.",this)}const i=uc._createAt(e,t);if(i.compareWith(this.focus)=="same"){return}const n=this.anchor;this._ranges.pop();if(i.compareWith(n)=="before"){this._addRange(new hc(i,n),true)}else{this._addRange(new hc(n,i))}this.fire("change")}is(e){return e==="selection"||e==="view:selection"}_setRanges(e,t=false){e=Array.from(e);this._ranges=[];for(const t of e){this._addRange(t)}this._lastRangeBackward=!!t}_setFakeOptions(e={}){this._isFake=!!e.fake;this._fakeSelectionLabel=e.fake?e.label||"":""}_addRange(e,t=false){if(!(e instanceof hc)){throw new ss["b"]("view-selection-add-range-not-range: "+"Selection range set to an object that is not an instance of view.Range",this)}this._pushRange(e);this._lastRangeBackward=!!t}_pushRange(e){for(const t of this._ranges){if(e.isIntersecting(t)){throw new ss["b"]("view-selection-range-intersects: Trying to add a range that intersects with another range from selection.",this,{addedRange:e,intersectingRange:t})}}this._ranges.push(new hc(e.start,e.end))}}ys(gc,ds);class pc{constructor(e=null,t,i){this._selection=new gc;this._selection.delegate("change").to(this);this._selection.setTo(e,t,i)}get isFake(){return this._selection.isFake}get fakeSelectionLabel(){return this._selection.fakeSelectionLabel}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get isCollapsed(){return this._selection.isCollapsed}get rangeCount(){return this._selection.rangeCount}get isBackward(){return this._selection.isBackward}get editableElement(){return this._selection.editableElement}get _ranges(){return this._selection._ranges}*getRanges(){yield*this._selection.getRanges()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getSelectedElement(){return this._selection.getSelectedElement()}isEqual(e){return this._selection.isEqual(e)}isSimilar(e){return this._selection.isSimilar(e)}is(e){return e==="selection"||e=="documentSelection"||e=="view:selection"||e=="view:documentSelection"}_setTo(e,t,i){this._selection.setTo(e,t,i)}_setFocus(e,t){this._selection.setFocus(e,t)}}ys(pc,ds);class bc{constructor(e){this.selection=new pc;this.roots=new xs({idProperty:"rootName"});this.stylesProcessor=e;this.set("isReadOnly",false);this.set("isFocused",false);this.set("isComposing",false);this._postFixers=new Set}getRoot(e="main"){return this.roots.get(e)}registerPostFixer(e){this._postFixers.add(e)}destroy(){this.roots.map(e=>e.destroy());this.stopListening()}_callPostFixers(e){let t=false;do{for(const i of this._postFixers){t=i(e);if(t){break}}}while(t)}}ys(bc,Jl);const wc=10;class _c extends jl{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=kc;this._priority=wc;this._id=null;this._clonesGroup=null}get priority(){return this._priority}get id(){return this._id}getElementsWithSameId(){if(this.id===null){throw new ss["b"]("attribute-element-get-elements-with-same-id-no-id: "+"Cannot get elements with the same id for an attribute element without id.",this)}return new Set(this._clonesGroup)}is(e,t=null){if(!t){return e==="attributeElement"||e==="view:attributeElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="attributeElement"||e==="view:attributeElement"||e==="element"||e==="view:element")}}isSimilar(e){if(this.id!==null||e.id!==null){return this.id===e.id}return super.isSimilar(e)&&this.priority==e.priority}_clone(e){const t=super._clone(e);t._priority=this._priority;t._id=this._id;return t}}_c.DEFAULT_PRIORITY=wc;function kc(){if(vc(this)){return null}let e=this.parent;while(e&&e.is("attributeElement")){if(vc(e)>1){return null}e=e.parent}if(!e||vc(e)>1){return null}return this.childCount}function vc(e){return Array.from(e.getChildren()).filter(e=>!e.is("uiElement")).length}class yc extends jl{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=xc}is(e,t=null){if(!t){return e==="emptyElement"||e==="view:emptyElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="emptyElement"||e==="view:emptyElement"||e==="element"||e==="view:element")}}_insertChild(e,t){if(t&&(t instanceof Bs||Array.from(t).length>0)){throw new ss["b"]("view-emptyelement-cannot-add: Cannot add child nodes to EmptyElement instance.",[this,t])}}}function xc(){return null}const Ac=navigator.userAgent.toLowerCase();const Cc={isMac:Ec(Ac),isGecko:Pc(Ac),isSafari:Mc(Ac),isAndroid:Sc(Ac),features:{isRegExpUnicodePropertySupported:Ic()}};var Tc=Cc;function Ec(e){return e.indexOf("macintosh")>-1}function Pc(e){return!!e.match(/gecko\/\d+/)}function Mc(e){return e.indexOf(" applewebkit/")>-1&&e.indexOf("chrome")===-1}function Sc(e){return e.indexOf("android")>-1}function Ic(){let e=false;try{e="ć".search(new RegExp("[\\p{L}]","u"))===0}catch(e){}return e}const Lc={"⌘":"ctrl","⇧":"shift","⌥":"alt"};const Nc={ctrl:"⌘",shift:"⇧",alt:"⌥"};const Oc=jc();function Rc(e){let t;if(typeof e=="string"){t=Oc[e.toLowerCase()];if(!t){throw new ss["b"]("keyboard-unknown-key: Unknown key name.",null,{key:e})}}else{t=e.keyCode+(e.altKey?Oc.alt:0)+(e.ctrlKey?Oc.ctrl:0)+(e.shiftKey?Oc.shift:0)}return t}function zc(e){if(typeof e=="string"){e=Bc(e)}return e.map(e=>typeof e=="string"?Rc(e):e).reduce((e,t)=>t+e,0)}function Dc(e){if(!Tc.isMac){return e}return Bc(e).map(e=>Nc[e.toLowerCase()]||e).reduce((e,t)=>{if(e.slice(-1)in Lc){return e+t}else{return e+"+"+t}})}function jc(){const e={arrowleft:37,arrowup:38,arrowright:39,arrowdown:40,backspace:8,delete:46,enter:13,space:32,esc:27,tab:9,ctrl:1114112,cmd:1114112,shift:2228224,alt:4456448};for(let t=65;t<=90;t++){const i=String.fromCharCode(t);e[i.toLowerCase()]=t}for(let t=48;t<=57;t++){e[t-48]=t}for(let t=112;t<=123;t++){e["f"+(t-111)]=t}return e}function Bc(e){return e.split(/\s*\+\s*/)}class Vc extends jl{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=Hc}is(e,t=null){if(!t){return e==="uiElement"||e==="view:uiElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="uiElement"||e==="view:uiElement"||e==="element"||e==="view:element")}}_insertChild(e,t){if(t&&(t instanceof Bs||Array.from(t).length>0)){throw new ss["b"]("view-uielement-cannot-add: Cannot add child nodes to UIElement instance.",this)}}render(e){return this.toDomElement(e)}toDomElement(e){const t=e.createElement(this.name);for(const e of this.getAttributeKeys()){t.setAttribute(e,this.getAttribute(e))}return t}}function Fc(e){e.document.on("keydown",(t,i)=>Wc(t,i,e.domConverter))}function Hc(){return null}function Wc(e,t,i){if(t.keyCode==Oc.arrowright){const e=t.domTarget.ownerDocument.defaultView.getSelection();const n=e.rangeCount==1&&e.getRangeAt(0).collapsed;if(n||t.shiftKey){const t=e.focusNode;const o=e.focusOffset;const r=i.domPositionToView(t,o);if(r===null){return}let s=false;const a=r.getLastMatchingPosition(e=>{if(e.item.is("uiElement")){s=true}if(e.item.is("uiElement")||e.item.is("attributeElement")){return true}return false});if(s){const t=i.viewPositionToDom(a);if(n){e.collapse(t.parent,t.offset)}else{e.extend(t.parent,t.offset)}}}}}class Uc{constructor(e,t){this.document=e;this._children=[];if(t){this._insertChild(0,t)}}[Symbol.iterator](){return this._children[Symbol.iterator]()}get childCount(){return this._children.length}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}is(e){return e==="documentFragment"||e==="view:documentFragment"}_appendChild(e){return this._insertChild(this.childCount,e)}getChild(e){return this._children[e]}getChildIndex(e){return this._children.indexOf(e)}getChildren(){return this._children[Symbol.iterator]()}_insertChild(e,t){this._fireChange("children",this);let i=0;const n=qc(this.document,t);for(const t of n){if(t.parent!==null){t._remove()}t.parent=this;this._children.splice(e,0,t);e++;i++}return i}_removeChildren(e,t=1){this._fireChange("children",this);for(let i=e;i{if(typeof t=="string"){return new Vs(e,t)}if(t instanceof Fs){return new Vs(e,t.data)}return t})}class $c{constructor(e){this.document=e;this._cloneGroups=new Map}setSelection(e,t,i){this.document.selection._setTo(e,t,i)}setSelectionFocus(e,t){this.document.selection._setFocus(e,t)}createText(e){return new Vs(this.document,e)}createAttributeElement(e,t,i={}){const n=new _c(this.document,e,t);if(i.priority){n._priority=i.priority}if(i.id){n._id=i.id}return n}createContainerElement(e,t){return new Hl(this.document,e,t)}createEditableElement(e,t){const i=new ac(this.document,e,t);i._document=this.document;return i}createEmptyElement(e,t){return new yc(this.document,e,t)}createUIElement(e,t,i){const n=new Vc(this.document,e,t);if(i){n.render=i}return n}setAttribute(e,t,i){i._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,i){if(O(e)&&i===undefined){i=t}i._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,i){i._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}breakAttributes(e){if(e instanceof uc){return this._breakAttributes(e)}else{return this._breakAttributesRange(e)}}breakContainer(e){const t=e.parent;if(!t.is("containerElement")){throw new ss["b"]("view-writer-break-non-container-element: Trying to break an element which is not a container element.",this.document)}if(!t.parent){throw new ss["b"]("view-writer-break-root: Trying to break root element.",this.document)}if(e.isAtStart){return uc._createBefore(t)}else if(!e.isAtEnd){const i=t._clone(false);this.insert(uc._createAfter(t),i);const n=new hc(e,uc._createAt(t,"end"));const o=new uc(i,0);this.move(n,o)}return uc._createAfter(t)}mergeAttributes(e){const t=e.offset;const i=e.parent;if(i.is("text")){return e}if(i.is("attributeElement")&&i.childCount===0){const e=i.parent;const t=i.index;i._remove();this._removeFromClonedElementsGroup(i);return this.mergeAttributes(new uc(e,t))}const n=i.getChild(t-1);const o=i.getChild(t);if(!n||!o){return e}if(n.is("text")&&o.is("text")){return Zc(n,o)}else if(n.is("attributeElement")&&o.is("attributeElement")&&n.isSimilar(o)){const e=n.childCount;n._appendChild(o.getChildren());o._remove();this._removeFromClonedElementsGroup(o);return this.mergeAttributes(new uc(n,e))}return e}mergeContainers(e){const t=e.nodeBefore;const i=e.nodeAfter;if(!t||!i||!t.is("containerElement")||!i.is("containerElement")){throw new ss["b"]("view-writer-merge-containers-invalid-position: "+"Element before and after given position cannot be merged.",this.document)}const n=t.getChild(t.childCount-1);const o=n instanceof Vs?uc._createAt(n,"end"):uc._createAt(t,"end");this.move(hc._createIn(i),uc._createAt(t,"end"));this.remove(hc._createOn(i));return o}insert(e,t){t=vs(t)?[...t]:[t];Xc(t,this.document);const i=Yc(e);if(!i){throw new ss["b"]("view-writer-invalid-position-container",this.document)}const n=this._breakAttributes(e,true);const o=i._insertChild(n.offset,t);for(const e of t){this._addToClonedElementsGroup(e)}const r=n.getShiftedBy(o);const s=this.mergeAttributes(n);if(o===0){return new hc(s,s)}else{if(!s.isEqual(n)){r.offset--}const e=this.mergeAttributes(r);return new hc(s,e)}}remove(e){const t=e instanceof hc?e:hc._createOn(e);id(t,this.document);if(t.isCollapsed){return new Uc(this.document)}const{start:i,end:n}=this._breakAttributesRange(t,true);const o=i.parent;const r=n.offset-i.offset;const s=o._removeChildren(i.offset,r);for(const e of s){this._removeFromClonedElementsGroup(e)}const a=this.mergeAttributes(i);t.start=a;t.end=a.clone();return new Uc(this.document,s)}clear(e,t){id(e,this.document);const i=e.getWalker({direction:"backward",ignoreElementEnd:true});for(const n of i){const i=n.item;let o;if(i.is("element")&&t.isSimilar(i)){o=hc._createOn(i)}else if(!n.nextPosition.isAfter(e.start)&&i.is("textProxy")){const e=i.getAncestors().find(e=>e.is("element")&&t.isSimilar(e));if(e){o=hc._createIn(e)}}if(o){if(o.end.isAfter(e.end)){o.end=e.end}if(o.start.isBefore(e.start)){o.start=e.start}this.remove(o)}}}move(e,t){let i;if(t.isAfter(e.end)){t=this._breakAttributes(t,true);const n=t.parent;const o=n.childCount;e=this._breakAttributesRange(e,true);i=this.remove(e);t.offset+=n.childCount-o}else{i=this.remove(e)}return this.insert(t,i)}wrap(e,t){if(!(t instanceof _c)){throw new ss["b"]("view-writer-wrap-invalid-attribute",this.document)}id(e,this.document);if(!e.isCollapsed){return this._wrapRange(e,t)}else{let i=e.start;if(i.parent.is("element")&&!Gc(i.parent)){i=i.getLastMatchingPosition(e=>e.item.is("uiElement"))}i=this._wrapPosition(i,t);const n=this.document.selection;if(n.isCollapsed&&n.getFirstPosition().isEqual(e.start)){this.setSelection(i)}return new hc(i)}}unwrap(e,t){if(!(t instanceof _c)){throw new ss["b"]("view-writer-unwrap-invalid-attribute",this.document)}id(e,this.document);if(e.isCollapsed){return e}const{start:i,end:n}=this._breakAttributesRange(e,true);const o=i.parent;const r=this._unwrapChildren(o,i.offset,n.offset,t);const s=this.mergeAttributes(r.start);if(!s.isEqual(r.start)){r.end.offset--}const a=this.mergeAttributes(r.end);return new hc(s,a)}rename(e,t){const i=new Hl(this.document,e,t.getAttributes());this.insert(uc._createAfter(t),i);this.move(hc._createIn(t),uc._createAt(i,0));this.remove(hc._createOn(t));return i}clearClonedElementsGroup(e){this._cloneGroups.delete(e)}createPositionAt(e,t){return uc._createAt(e,t)}createPositionAfter(e){return uc._createAfter(e)}createPositionBefore(e){return uc._createBefore(e)}createRange(e,t){return new hc(e,t)}createRangeOn(e){return hc._createOn(e)}createRangeIn(e){return hc._createIn(e)}createSelection(e,t,i){return new gc(e,t,i)}_wrapChildren(e,t,i,n){let o=t;const r=[];while(ofalse;e.parent._insertChild(e.offset,i);const n=new hc(e,e.getShiftedBy(1));this.wrap(n,t);const o=new uc(i.parent,i.index);i._remove();const r=o.nodeBefore;const s=o.nodeAfter;if(r instanceof Vs&&s instanceof Vs){return Zc(r,s)}return Jc(o)}_wrapAttributeElement(e,t){if(!nd(e,t)){return false}if(e.name!==t.name||e.priority!==t.priority){return false}for(const i of e.getAttributeKeys()){if(i==="class"||i==="style"){continue}if(t.hasAttribute(i)&&t.getAttribute(i)!==e.getAttribute(i)){return false}}for(const i of e.getStyleNames()){if(t.hasStyle(i)&&t.getStyle(i)!==e.getStyle(i)){return false}}for(const i of e.getAttributeKeys()){if(i==="class"||i==="style"){continue}if(!t.hasAttribute(i)){this.setAttribute(i,e.getAttribute(i),t)}}for(const i of e.getStyleNames()){if(!t.hasStyle(i)){this.setStyle(i,e.getStyle(i),t)}}for(const i of e.getClassNames()){if(!t.hasClass(i)){this.addClass(i,t)}}return true}_unwrapAttributeElement(e,t){if(!nd(e,t)){return false}if(e.name!==t.name||e.priority!==t.priority){return false}for(const i of e.getAttributeKeys()){if(i==="class"||i==="style"){continue}if(!t.hasAttribute(i)||t.getAttribute(i)!==e.getAttribute(i)){return false}}if(!t.hasClass(...e.getClassNames())){return false}for(const i of e.getStyleNames()){if(!t.hasStyle(i)||t.getStyle(i)!==e.getStyle(i)){return false}}for(const i of e.getAttributeKeys()){if(i==="class"||i==="style"){continue}this.removeAttribute(i,t)}this.removeClass(Array.from(e.getClassNames()),t);this.removeStyle(Array.from(e.getStyleNames()),t);return true}_breakAttributesRange(e,t=false){const i=e.start;const n=e.end;id(e,this.document);if(e.isCollapsed){const i=this._breakAttributes(e.start,t);return new hc(i,i)}const o=this._breakAttributes(n,t);const r=o.parent.childCount;const s=this._breakAttributes(i,t);o.offset+=o.parent.childCount-r;return new hc(s,o)}_breakAttributes(e,t=false){const i=e.offset;const n=e.parent;if(e.parent.is("emptyElement")){throw new ss["b"]("view-writer-cannot-break-empty-element",this.document)}if(e.parent.is("uiElement")){throw new ss["b"]("view-writer-cannot-break-ui-element",this.document)}if(!t&&n.is("text")&&td(n.parent)){return e.clone()}if(td(n)){return e.clone()}if(n.is("text")){return this._breakAttributes(Qc(e),t)}const o=n.childCount;if(i==o){const e=new uc(n.parent,n.index+1);return this._breakAttributes(e,t)}else{if(i===0){const e=new uc(n.parent,n.index);return this._breakAttributes(e,t)}else{const e=n.index+1;const o=n._clone();n.parent._insertChild(e,o);this._addToClonedElementsGroup(o);const r=n.childCount-i;const s=n._removeChildren(i,r);o._appendChild(s);const a=new uc(n.parent,e);return this._breakAttributes(a,t)}}}_addToClonedElementsGroup(e){if(!e.root.is("rootElement")){return}if(e.is("element")){for(const t of e.getChildren()){this._addToClonedElementsGroup(t)}}const t=e.id;if(!t){return}let i=this._cloneGroups.get(t);if(!i){i=new Set;this._cloneGroups.set(t,i)}i.add(e);e._clonesGroup=i}_removeFromClonedElementsGroup(e){if(e.is("element")){for(const t of e.getChildren()){this._removeFromClonedElementsGroup(t)}}const t=e.id;if(!t){return}const i=this._cloneGroups.get(t);if(!i){return}i.delete(e)}}function Gc(e){return Array.from(e.getChildren()).some(e=>!e.is("uiElement"))}function Yc(e){let t=e.parent;while(!td(t)){if(!t){return undefined}t=t.parent}return t}function Kc(e,t){if(e.priorityt.priority){return false}return e.getIdentity()i instanceof e)){throw new ss["b"]("view-writer-insert-invalid-node",t)}if(!i.is("text")){Xc(i.getChildren(),t)}}}const ed=[Vs,_c,Hl,yc,Vc];function td(e){return e&&(e.is("containerElement")||e.is("documentFragment"))}function id(e,t){const i=Yc(e.start);const n=Yc(e.end);if(!i||!n||i!==n){throw new ss["b"]("view-writer-invalid-range-container",t)}}function nd(e,t){return e.id===null&&t.id===null}function od(e){return Object.prototype.toString.call(e)=="[object Text]"}const rd=e=>e.createTextNode(" ");const sd=e=>{const t=e.createElement("br");t.dataset.ckeFiller=true;return t};const ad=7;const ld=(()=>{let e="";for(let t=0;t0){i.push({index:n,type:"insert",values:e.slice(n,r)})}if(o-n>0){i.push({index:n+(r-n),type:"delete",howMany:o-n})}return i}function _d(e,t){const{firstIndex:i,lastIndexOld:n,lastIndexNew:o}=e;if(i===-1){return Array(t).fill("equal")}let r=[];if(i>0){r=r.concat(Array(i).fill("equal"))}if(o-i>0){r=r.concat(Array(o-i).fill("insert"))}if(n-i>0){r=r.concat(Array(n-i).fill("delete"))}if(o200||o>200||n+o>300){return kd.fastDiff(e,t,i,true)}let r,s;if(oc?-1:1;if(d[n+h]){d[n]=d[n+h].slice(0)}if(!d[n]){d[n]=[]}d[n].push(o>c?r:s);let f=Math.max(o,c);let m=f-n;while(mc;m--){u[m]=h(m)}u[c]=h(c);f++}while(u[c]!==l);return d[c].slice(1)}kd.fastDiff=md;function vd(e,t,i){e.insertBefore(i,e.childNodes[t]||null)}function yd(e){const t=e.parentNode;if(t){t.removeChild(e)}}function xd(e){if(e){if(e.defaultView){return e instanceof e.defaultView.Document}else if(e.ownerDocument&&e.ownerDocument.defaultView){return e instanceof e.ownerDocument.defaultView.Node}}return false}class Ad{constructor(e,t){this.domDocuments=new Set;this.domConverter=e;this.markedAttributes=new Set;this.markedChildren=new Set;this.markedTexts=new Set;this.selection=t;this.isFocused=false;this._inlineFiller=null;this._fakeSelectionContainer=null}markToSync(e,t){if(e==="text"){if(this.domConverter.mapViewToDom(t.parent)){this.markedTexts.add(t)}}else{if(!this.domConverter.mapViewToDom(t)){return}if(e==="attributes"){this.markedAttributes.add(t)}else if(e==="children"){this.markedChildren.add(t)}else{throw new ss["b"]("view-renderer-unknown-type: Unknown type passed to Renderer.markToSync.",this)}}}render(){let e;for(const e of this.markedChildren){this._updateChildrenMappings(e)}if(this._inlineFiller&&!this._isSelectionInInlineFiller()){this._removeInlineFiller()}if(this._inlineFiller){e=this._getInlineFillerPosition()}else if(this._needsInlineFillerAtSelection()){e=this.selection.getFirstPosition();this.markedChildren.add(e.parent)}for(const e of this.markedAttributes){this._updateAttrs(e)}for(const t of this.markedChildren){this._updateChildren(t,{inlineFillerPosition:e})}for(const t of this.markedTexts){if(!this.markedChildren.has(t.parent)&&this.domConverter.mapViewToDom(t.parent)){this._updateText(t,{inlineFillerPosition:e})}}if(e){const t=this.domConverter.viewPositionToDom(e);const i=t.parent.ownerDocument;if(!cd(t.parent)){this._inlineFiller=Td(i,t.parent,t.offset)}else{this._inlineFiller=t.parent}}else{this._inlineFiller=null}this._updateSelection();this._updateFocus();this.markedTexts.clear();this.markedAttributes.clear();this.markedChildren.clear()}_updateChildrenMappings(e){const t=this.domConverter.mapViewToDom(e);if(!t){return}const i=this.domConverter.mapViewToDom(e).childNodes;const n=Array.from(this.domConverter.viewChildrenToDom(e,t.ownerDocument,{withChildren:false}));const o=this._diffNodeLists(i,n);const r=this._findReplaceActions(o,i,n);if(r.indexOf("replace")!==-1){const t={equal:0,insert:0,delete:0};for(const o of r){if(o==="replace"){const o=t.equal+t.insert;const r=t.equal+t.delete;const s=e.getChild(o);if(s&&!s.is("uiElement")){this._updateElementMappings(s,i[r])}yd(n[o]);t.equal++}else{t[o]++}}}}_updateElementMappings(e,t){this.domConverter.unbindDomElement(t);this.domConverter.bindElements(t,e);this.markedChildren.add(e);this.markedAttributes.add(e)}_getInlineFillerPosition(){const e=this.selection.getFirstPosition();if(e.parent.is("text")){return uc._createBefore(this.selection.getFirstPosition().parent)}else{return e}}_isSelectionInInlineFiller(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed){return false}const e=this.selection.getFirstPosition();const t=this.domConverter.viewPositionToDom(e);if(t&&od(t.parent)&&cd(t.parent)){return true}return false}_removeInlineFiller(){const e=this._inlineFiller;if(!cd(e)){throw new ss["b"]("view-renderer-filler-was-lost: The inline filler node was lost.",this)}if(dd(e)){e.parentNode.removeChild(e)}else{e.data=e.data.substr(ad)}this._inlineFiller=null}_needsInlineFillerAtSelection(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed){return false}const e=this.selection.getFirstPosition();const t=e.parent;const i=e.offset;if(!this.domConverter.mapViewToDom(t.root)){return false}if(!t.is("element")){return false}if(!Cd(t)){return false}if(i===t.getFillerOffset()){return false}const n=e.nodeBefore;const o=e.nodeAfter;if(n instanceof Vs||o instanceof Vs){return false}return true}_updateText(e,t){const i=this.domConverter.findCorrespondingDomText(e);const n=this.domConverter.viewToDom(e,i.ownerDocument);const o=i.data;let r=n.data;const s=t.inlineFillerPosition;if(s&&s.parent==e.parent&&s.offset==e.index){r=ld+r}if(o!=r){const e=md(o,r);for(const t of e){if(t.type==="insert"){i.insertData(t.index,t.values.join(""))}else{i.deleteData(t.index,t.howMany)}}}}_updateAttrs(e){const t=this.domConverter.mapViewToDom(e);if(!t){return}const i=Array.from(t.attributes).map(e=>e.name);const n=e.getAttributeKeys();for(const i of n){t.setAttribute(i,e.getAttribute(i))}for(const n of i){if(!e.hasAttribute(n)){t.removeAttribute(n)}}}_updateChildren(e,t){const i=this.domConverter.mapViewToDom(e);if(!i){return}const n=t.inlineFillerPosition;const o=this.domConverter.mapViewToDom(e).childNodes;const r=Array.from(this.domConverter.viewChildrenToDom(e,i.ownerDocument,{bind:true,inlineFillerPosition:n}));if(n&&n.parent===e){Td(i.ownerDocument,r,n.offset)}const s=this._diffNodeLists(o,r);let a=0;const l=new Set;for(const e of s){if(e==="delete"){l.add(o[a]);yd(o[a])}else if(e==="equal"){a++}}a=0;for(const e of s){if(e==="insert"){vd(i,a,r[a]);a++}else if(e==="equal"){this._markDescendantTextToSync(this.domConverter.domToView(r[a]));a++}}for(const e of l){if(!e.parentNode){this.domConverter.unbindDomElement(e)}}}_diffNodeLists(e,t){e=Sd(e,this._fakeSelectionContainer);return kd(e,t,Pd.bind(null,this.domConverter))}_findReplaceActions(e,t,i){if(e.indexOf("insert")===-1||e.indexOf("delete")===-1){return e}let n=[];let o=[];let r=[];const s={equal:0,insert:0,delete:0};for(const a of e){if(a==="insert"){r.push(i[s.equal+s.insert])}else if(a==="delete"){o.push(t[s.equal+s.delete])}else{n=n.concat(kd(o,r,Ed).map(e=>e==="equal"?"replace":e));n.push("equal");o=[];r=[]}s[a]++}return n.concat(kd(o,r,Ed).map(e=>e==="equal"?"replace":e))}_markDescendantTextToSync(e){if(!e){return}if(e.is("text")){this.markedTexts.add(e)}else if(e.is("element")){for(const t of e.getChildren()){this._markDescendantTextToSync(t)}}}_updateSelection(){if(this.selection.rangeCount===0){this._removeDomSelection();this._removeFakeSelection();return}const e=this.domConverter.mapViewToDom(this.selection.editableElement);if(!this.isFocused||!e){return}if(this.selection.isFake){this._updateFakeSelection(e)}else{this._removeFakeSelection();this._updateDomSelection(e)}}_updateFakeSelection(e){const t=e.ownerDocument;if(!this._fakeSelectionContainer){this._fakeSelectionContainer=Id(t)}const i=this._fakeSelectionContainer;this.domConverter.bindFakeSelection(i,this.selection);if(!this._fakeSelectionNeedsUpdate(e)){return}if(!i.parentElement||i.parentElement!=e){e.appendChild(i)}i.textContent=this.selection.fakeSelectionLabel||" ";const n=t.getSelection();const o=t.createRange();n.removeAllRanges();o.selectNodeContents(i);n.addRange(o)}_updateDomSelection(e){const t=e.ownerDocument.defaultView.getSelection();if(!this._domSelectionNeedsUpdate(t)){return}const i=this.domConverter.viewPositionToDom(this.selection.anchor);const n=this.domConverter.viewPositionToDom(this.selection.focus);e.focus();t.collapse(i.parent,i.offset);t.extend(n.parent,n.offset);if(Tc.isGecko){Md(n,t)}}_domSelectionNeedsUpdate(e){if(!this.domConverter.isDomSelectionCorrect(e)){return true}const t=e&&this.domConverter.domSelectionToView(e);if(t&&this.selection.isEqual(t)){return false}if(!this.selection.isCollapsed&&this.selection.isSimilar(t)){return false}return true}_fakeSelectionNeedsUpdate(e){const t=this._fakeSelectionContainer;const i=e.ownerDocument.getSelection();if(!t||t.parentElement!==e){return true}if(i.anchorNode!==t&&!t.contains(i.anchorNode)){return true}return t.textContent!==this.selection.fakeSelectionLabel}_removeDomSelection(){for(const e of this.domDocuments){const t=e.getSelection();if(t.rangeCount){const t=e.activeElement;const i=this.domConverter.mapDomToView(t);if(t&&i){e.getSelection().removeAllRanges()}}}}_removeFakeSelection(){const e=this._fakeSelectionContainer;if(e){e.remove()}}_updateFocus(){if(this.isFocused){const e=this.selection.editableElement;if(e){this.domConverter.focus(e)}}}}ys(Ad,Jl);function Cd(e){if(e.getAttribute("contenteditable")=="false"){return false}const t=e.findAncestor(e=>e.hasAttribute("contenteditable"));return!t||t.getAttribute("contenteditable")=="true"}function Td(e,t,i){const n=t instanceof Array?t:t.childNodes;const o=n[i];if(od(o)){o.data=ld+o.data;return o}else{const o=e.createTextNode(ld);if(Array.isArray(t)){n.splice(i,0,o)}else{vd(t,i,o)}return o}}function Ed(e,t){return xd(e)&&xd(t)&&!od(e)&&!od(t)&&e.tagName.toLowerCase()===t.tagName.toLowerCase()}function Pd(e,t,i){if(t===i){return true}else if(od(t)&&od(i)){return t.data===i.data}else if(e.isBlockFiller(t)&&e.isBlockFiller(i)){return true}return false}function Md(e,t){const i=e.parent;if(i.nodeType!=Node.ELEMENT_NODE||e.offset!=i.childNodes.length-1){return}const n=i.childNodes[e.offset];if(n&&n.tagName=="BR"){t.addRange(t.getRangeAt(0))}}function Sd(e,t){const i=Array.from(e);if(i.length==0||!t){return i}const n=i[i.length-1];if(n==t){i.pop()}return i}function Id(e){const t=e.createElement("div");Object.assign(t.style,{position:"fixed",top:0,left:"-9999px",width:"42px"});t.textContent=" ";return t}var Ld={window:window,document:document};function Nd(e){let t=0;while(e.previousSibling){e=e.previousSibling;t++}return t}function Od(e){const t=[];while(e&&e.nodeType!=Node.DOCUMENT_NODE){t.unshift(e);e=e.parentNode}return t}function Rd(e,t){const i=Od(e);const n=Od(t);let o=0;while(i[o]==n[o]&&i[o]){o++}return o===0?null:i[o-1]}const zd=sd(document);class Dd{constructor(e,t={}){this.document=e;this.blockFillerMode=t.blockFillerMode||"br";this.preElements=["pre"];this.blockElements=["p","div","h1","h2","h3","h4","h5","h6","li","dd","dt","figcaption"];this._blockFiller=this.blockFillerMode=="br"?sd:rd;this._domToViewMapping=new WeakMap;this._viewToDomMapping=new WeakMap;this._fakeSelectionMapping=new WeakMap}bindFakeSelection(e,t){this._fakeSelectionMapping.set(e,new gc(t))}fakeSelectionToView(e){return this._fakeSelectionMapping.get(e)}bindElements(e,t){this._domToViewMapping.set(e,t);this._viewToDomMapping.set(t,e)}unbindDomElement(e){const t=this._domToViewMapping.get(e);if(t){this._domToViewMapping.delete(e);this._viewToDomMapping.delete(t);for(const t of e.childNodes){this.unbindDomElement(t)}}}bindDocumentFragments(e,t){this._domToViewMapping.set(e,t);this._viewToDomMapping.set(t,e)}viewToDom(e,t,i={}){if(e.is("text")){const i=this._processDataFromViewText(e);return t.createTextNode(i)}else{if(this.mapViewToDom(e)){return this.mapViewToDom(e)}let n;if(e.is("documentFragment")){n=t.createDocumentFragment();if(i.bind){this.bindDocumentFragments(n,e)}}else if(e.is("uiElement")){n=e.render(t);if(i.bind){this.bindElements(n,e)}return n}else{if(e.hasAttribute("xmlns")){n=t.createElementNS(e.getAttribute("xmlns"),e.name)}else{n=t.createElement(e.name)}if(i.bind){this.bindElements(n,e)}for(const t of e.getAttributeKeys()){n.setAttribute(t,e.getAttribute(t))}}if(i.withChildren||i.withChildren===undefined){for(const o of this.viewChildrenToDom(e,t,i)){n.appendChild(o)}}return n}}*viewChildrenToDom(e,t,i={}){const n=e.getFillerOffset&&e.getFillerOffset();let o=0;for(const r of e.getChildren()){if(n===o){yield this._blockFiller(t)}yield this.viewToDom(r,t,i);o++}if(n===o){yield this._blockFiller(t)}}viewRangeToDom(e){const t=this.viewPositionToDom(e.start);const i=this.viewPositionToDom(e.end);const n=document.createRange();n.setStart(t.parent,t.offset);n.setEnd(i.parent,i.offset);return n}viewPositionToDom(e){const t=e.parent;if(t.is("text")){const i=this.findCorrespondingDomText(t);if(!i){return null}let n=e.offset;if(cd(i)){n+=ad}return{parent:i,offset:n}}else{let i,n,o;if(e.offset===0){i=this.mapViewToDom(t);if(!i){return null}o=i.childNodes[0]}else{const t=e.nodeBefore;n=t.is("text")?this.findCorrespondingDomText(t):this.mapViewToDom(e.nodeBefore);if(!n){return null}i=n.parentNode;o=n.nextSibling}if(od(o)&&cd(o)){return{parent:o,offset:ad}}const r=n?Nd(n)+1:0;return{parent:i,offset:r}}}domToView(e,t={}){if(this.isBlockFiller(e,this.blockFillerMode)){return null}const i=this.getParentUIElement(e,this._domToViewMapping);if(i){return i}if(od(e)){if(dd(e)){return null}else{const t=this._processDataFromDomText(e);return t===""?null:new Vs(this.document,t)}}else if(this.isComment(e)){return null}else{if(this.mapDomToView(e)){return this.mapDomToView(e)}let i;if(this.isDocumentFragment(e)){i=new Uc(this.document);if(t.bind){this.bindDocumentFragments(e,i)}}else{const n=t.keepOriginalCase?e.tagName:e.tagName.toLowerCase();i=new jl(this.document,n);if(t.bind){this.bindElements(e,i)}const o=e.attributes;for(let e=o.length-1;e>=0;e--){i._setAttribute(o[e].name,o[e].value)}}if(t.withChildren||t.withChildren===undefined){for(const n of this.domChildrenToView(e,t)){i._appendChild(n)}}return i}}*domChildrenToView(e,t={}){for(let i=0;i{const{scrollLeft:t,scrollTop:i}=e;n.push([t,i])});t.focus();Bd(t,e=>{const[t,i]=n.shift();e.scrollLeft=t;e.scrollTop=i});Ld.window.scrollTo(e,i)}}isElement(e){return e&&e.nodeType==Node.ELEMENT_NODE}isDocumentFragment(e){return e&&e.nodeType==Node.DOCUMENT_FRAGMENT_NODE}isComment(e){return e&&e.nodeType==Node.COMMENT_NODE}isBlockFiller(e){if(this.blockFillerMode=="br"){return e.isEqualNode(zd)}if(e.tagName==="BR"&&Fd(e,this.blockElements)&&e.parentNode.childNodes.length===1){return true}return Vd(e,this.blockElements)}isDomSelectionBackward(e){if(e.isCollapsed){return false}const t=document.createRange();t.setStart(e.anchorNode,e.anchorOffset);t.setEnd(e.focusNode,e.focusOffset);const i=t.collapsed;t.detach();return i}getParentUIElement(e){const t=Od(e);t.pop();while(t.length){const e=t.pop();const i=this._domToViewMapping.get(e);if(i&&i.is("uiElement")){return i}}return null}isDomSelectionCorrect(e){return this._isDomSelectionPositionCorrect(e.anchorNode,e.anchorOffset)&&this._isDomSelectionPositionCorrect(e.focusNode,e.focusOffset)}_isDomSelectionPositionCorrect(e,t){if(od(e)&&cd(e)&&tthis.preElements.includes(e.name))){return t}if(t.charAt(0)==" "){const i=this._getTouchingViewTextNode(e,false);const n=i&&this._nodeEndsWithSpace(i);if(n||!i){t=" "+t.substr(1)}}if(t.charAt(t.length-1)==" "){const i=this._getTouchingViewTextNode(e,true);if(t.charAt(t.length-2)==" "||!i||i.data.charAt(0)==" "){t=t.substr(0,t.length-1)+" "}}return t.replace(/ {2}/g,"  ")}_nodeEndsWithSpace(e){if(e.getAncestors().some(e=>this.preElements.includes(e.name))){return false}const t=this._processDataFromViewText(e);return t.charAt(t.length-1)==" "}_processDataFromDomText(e){let t=e.data;if(jd(e,this.preElements)){return ud(e)}t=t.replace(/[ \n\t\r]{1,}/g," ");const i=this._getTouchingInlineDomNode(e,false);const n=this._getTouchingInlineDomNode(e,true);const o=this._checkShouldLeftTrimDomText(i);const r=this._checkShouldRightTrimDomText(e,n);if(o){t=t.replace(/^ /,"")}if(r){t=t.replace(/ $/,"")}t=ud(new Text(t));t=t.replace(/ \u00A0/g," ");if(/( |\u00A0)\u00A0$/.test(t)||!n||n.data&&n.data.charAt(0)==" "){t=t.replace(/\u00A0$/," ")}if(o){t=t.replace(/^\u00A0/," ")}return t}_checkShouldLeftTrimDomText(e){if(!e){return true}if(Yr(e)){return true}return/[^\S\u00A0]/.test(e.data.charAt(e.data.length-1))}_checkShouldRightTrimDomText(e,t){if(t){return false}return!cd(e)}_getTouchingViewTextNode(e,t){const i=new dc({startPosition:t?uc._createAfter(e):uc._createBefore(e),direction:t?"forward":"backward"});for(const e of i){if(e.item.is("containerElement")){return null}else if(e.item.is("br")){return null}else if(e.item.is("textProxy")){return e.item}}return null}_getTouchingInlineDomNode(e,t){if(!e.parentNode){return null}const i=t?"nextNode":"previousNode";const n=e.ownerDocument;const o=Od(e)[0];const r=n.createTreeWalker(o,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,{acceptNode(e){if(od(e)){return NodeFilter.FILTER_ACCEPT}if(e.tagName=="BR"){return NodeFilter.FILTER_ACCEPT}return NodeFilter.FILTER_SKIP}});r.currentNode=e;const s=r[i]();if(s!==null){const t=Rd(e,s);if(t&&!jd(e,this.blockElements,t)&&!jd(s,this.blockElements,t)){return s}}return null}}function jd(e,t,i){let n=Od(e);if(i){n=n.slice(n.indexOf(i)+1)}return n.some(e=>e.tagName&&t.includes(e.tagName.toLowerCase()))}function Bd(e,t){while(e&&e!=Ld.document){t(e);e=e.parentNode}}function Vd(e,t){const i=od(e)&&e.data==" ";return i&&Fd(e,t)&&e.parentNode.childNodes.length===1}function Fd(e,t){const i=e.parentNode;return i&&i.tagName&&t.includes(i.tagName.toLowerCase())}function Hd(e){const t=Object.prototype.toString.apply(e);if(t=="[object Window]"){return true}if(t=="[object global]"){return true}return false}const Wd=ql({},ds,{listenTo(e,...t){if(xd(e)||Hd(e)){const i=this._getProxyEmitter(e)||new qd(e);i.attach(...t);e=i}ds.listenTo.call(this,e,...t)},stopListening(e,t,i){if(xd(e)||Hd(e)){const t=this._getProxyEmitter(e);if(!t){return}e=t}ds.stopListening.call(this,e,t,i);if(e instanceof qd){e.detach(t)}},_getProxyEmitter(e){return us(this,$d(e))}});var Ud=Wd;class qd{constructor(e){hs(this,$d(e));this._domNode=e}}ql(qd.prototype,ds,{attach(e,t,i={}){if(this._domListeners&&this._domListeners[e]){return}const n=this._createDomListener(e,!!i.useCapture);this._domNode.addEventListener(e,n,!!i.useCapture);if(!this._domListeners){this._domListeners={}}this._domListeners[e]=n},detach(e){let t;if(this._domListeners[e]&&(!(t=this._events[e])||!t.callbacks.length)){this._domListeners[e].removeListener()}},_createDomListener(e,t){const i=t=>{this.fire(e,t)};i.removeListener=()=>{this._domNode.removeEventListener(e,i,t);delete this._domListeners[e]};return i}});function $d(e){return e["data-ck-expando"]||(e["data-ck-expando"]=is())}class Gd{constructor(e){this.view=e;this.document=e.document;this.isEnabled=false}enable(){this.isEnabled=true}disable(){this.isEnabled=false}destroy(){this.disable();this.stopListening()}}ys(Gd,Ud);var Yd="__lodash_hash_undefined__";function Kd(e){this.__data__.set(e,Yd);return this}var Jd=Kd;function Qd(e){return this.__data__.has(e)}var Zd=Qd;function Xd(e){var t=-1,i=e==null?0:e.length;this.__data__=new kt;while(++ta)){return false}var c=r.get(e);if(c&&r.get(t)){return c==t}var d=-1,u=true,h=i&su?new eu:undefined;r.set(e,t);r.set(t,e);while(++d{this.listenTo(e,t,(e,t)=>{if(this.isEnabled){this.onDomEvent(t)}},{useCapture:this.useCapture})})}fire(e,t,i){if(this.isEnabled){this.document.fire(e,new Yu(this.view,t,i))}}}class Ju extends Ku{constructor(e){super(e);this.domEventType=["keydown","keyup"]}onDomEvent(e){this.fire(e.type,e,{keyCode:e.keyCode,altKey:e.altKey,ctrlKey:e.ctrlKey||e.metaKey,shiftKey:e.shiftKey,get keystroke(){return Rc(this)}})}}var Qu=function(){return n["a"].Date.now()};var Zu=Qu;var Xu=0/0;var eh=/^\s+|\s+$/g;var th=/^[-+]0x[0-9a-f]+$/i;var ih=/^0b[01]+$/i;var nh=/^0o[0-7]+$/i;var oh=parseInt;function rh(e){if(typeof e=="number"){return e}if(Zs(e)){return Xu}if(le(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=le(t)?t+"":t}if(typeof e!="string"){return e===0?e:+e}e=e.replace(eh,"");var i=ih.test(e);return i||nh.test(e)?oh(e.slice(2),i?2:8):th.test(e)?Xu:+e}var sh=rh;var ah="Expected a function";var lh=Math.max,ch=Math.min;function dh(e,t,i){var n,o,r,s,a,l,c=0,d=false,u=false,h=true;if(typeof e!="function"){throw new TypeError(ah)}t=sh(t)||0;if(le(i)){d=!!i.leading;u="maxWait"in i;r=u?lh(sh(i.maxWait)||0,t):r;h="trailing"in i?!!i.trailing:h}function f(t){var i=n,r=o;n=o=undefined;c=t;s=e.apply(r,i);return s}function m(e){c=e;a=setTimeout(b,t);return d?f(e):s}function g(e){var i=e-l,n=e-c,o=t-i;return u?ch(o,r-n):o}function p(e){var i=e-l,n=e-c;return l===undefined||i>=t||i<0||u&&n>=r}function b(){var e=Zu();if(p(e)){return w(e)}a=setTimeout(b,g(e))}function w(e){a=undefined;if(h&&n){return f(e)}n=o=undefined;return s}function _(){if(a!==undefined){clearTimeout(a)}c=0;n=l=o=a=undefined}function k(){return a===undefined?s:w(Zu())}function v(){var e=Zu(),i=p(e);n=arguments;o=this;l=e;if(i){if(a===undefined){return m(l)}if(u){clearTimeout(a);a=setTimeout(b,t);return f(l)}}if(a===undefined){a=setTimeout(b,t)}return s}v.cancel=_;v.flush=k;return v}var uh=dh;class hh extends Gd{constructor(e){super(e);this._fireSelectionChangeDoneDebounced=uh(e=>this.document.fire("selectionChangeDone",e),200)}observe(){const e=this.document;e.on("keydown",(t,i)=>{const n=e.selection;if(n.isFake&&fh(i.keyCode)&&this.isEnabled){i.preventDefault();this._handleSelectionMove(i.keyCode)}},{priority:"lowest"})}destroy(){super.destroy();this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionMove(e){const t=this.document.selection;const i=new gc(t.getRanges(),{backward:t.isBackward,fake:false});if(e==Oc.arrowleft||e==Oc.arrowup){i.setTo(i.getFirstPosition())}if(e==Oc.arrowright||e==Oc.arrowdown){i.setTo(i.getLastPosition())}const n={oldSelection:t,newSelection:i,domSelection:null};this.document.fire("selectionChange",n);this._fireSelectionChangeDoneDebounced(n)}}function fh(e){return e==Oc.arrowright||e==Oc.arrowleft||e==Oc.arrowup||e==Oc.arrowdown}class mh extends Gd{constructor(e){super(e);this.mutationObserver=e.getObserver(Gu);this.selection=this.document.selection;this.domConverter=e.domConverter;this._documents=new WeakSet;this._fireSelectionChangeDoneDebounced=uh(e=>this.document.fire("selectionChangeDone",e),200);this._clearInfiniteLoopInterval=setInterval(()=>this._clearInfiniteLoop(),1e3);this._loopbackCounter=0}observe(e){const t=e.ownerDocument;if(this._documents.has(t)){return}this.listenTo(t,"selectionchange",()=>{this._handleSelectionChange(t)});this._documents.add(t)}destroy(){super.destroy();clearInterval(this._clearInfiniteLoopInterval);this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionChange(e){if(!this.isEnabled){return}this.mutationObserver.flush();const t=e.defaultView.getSelection();const i=this.domConverter.domSelectionToView(t);if(i.rangeCount==0){this.view.hasDomSelection=false;return}this.view.hasDomSelection=true;if(this.selection.isEqual(i)&&this.domConverter.isDomSelectionCorrect(t)){return}if(++this._loopbackCounter>60){return}if(this.selection.isSimilar(i)){this.view.forceRender()}else{const e={oldSelection:this.selection,newSelection:i,domSelection:t};this.document.fire("selectionChange",e);this._fireSelectionChangeDoneDebounced(e)}}_clearInfiniteLoop(){this._loopbackCounter=0}}class gh extends Ku{constructor(e){super(e);this.domEventType=["focus","blur"];this.useCapture=true;const t=this.document;t.on("focus",()=>{t.isFocused=true;this._renderTimeoutId=setTimeout(()=>e.forceRender(),50)});t.on("blur",(i,n)=>{const o=t.selection.editableElement;if(o===null||o===n.target){t.isFocused=false;e.forceRender()}})}onDomEvent(e){this.fire(e.type,e)}destroy(){if(this._renderTimeoutId){clearTimeout(this._renderTimeoutId)}super.destroy()}}class ph extends Ku{constructor(e){super(e);this.domEventType=["compositionstart","compositionupdate","compositionend"];const t=this.document;t.on("compositionstart",()=>{t.isComposing=true});t.on("compositionend",()=>{t.isComposing=false})}onDomEvent(e){this.fire(e.type,e)}}class bh extends Ku{constructor(e){super(e);this.domEventType=["beforeinput"]}onDomEvent(e){this.fire(e.type,e)}}function wh(e){return Object.prototype.toString.apply(e)=="[object Range]"}function _h(e){const t=e.ownerDocument.defaultView.getComputedStyle(e);return{top:parseInt(t.borderTopWidth,10),right:parseInt(t.borderRightWidth,10),bottom:parseInt(t.borderBottomWidth,10),left:parseInt(t.borderLeftWidth,10)}}const kh=["top","right","bottom","left","width","height"];class vh{constructor(e){const t=wh(e);Object.defineProperty(this,"_source",{value:e._source||e,writable:true,enumerable:false});if(Yr(e)||t){if(t){yh(this,vh.getDomRangeRects(e)[0])}else{yh(this,e.getBoundingClientRect())}}else if(Hd(e)){const{innerWidth:t,innerHeight:i}=e;yh(this,{top:0,right:t,bottom:i,left:0,width:t,height:i})}else{yh(this,e)}}clone(){return new vh(this)}moveTo(e,t){this.top=t;this.right=e+this.width;this.bottom=t+this.height;this.left=e;return this}moveBy(e,t){this.top+=t;this.right+=e;this.left+=e;this.bottom+=t;return this}getIntersection(e){const t={top:Math.max(this.top,e.top),right:Math.min(this.right,e.right),bottom:Math.min(this.bottom,e.bottom),left:Math.max(this.left,e.left)};t.width=t.right-t.left;t.height=t.bottom-t.top;if(t.width<0||t.height<0){return null}else{return new vh(t)}}getIntersectionArea(e){const t=this.getIntersection(e);if(t){return t.getArea()}else{return 0}}getArea(){return this.width*this.height}getVisible(){const e=this._source;let t=this.clone();if(!xh(e)){let i=e.parentNode||e.commonAncestorContainer;while(i&&!xh(i)){const e=new vh(i);const n=t.getIntersection(e);if(n){if(n.getArea()Rh(e,n));const s=Rh(e,n);Eh(n,s,t);if(n.parent!=n){o=n.frameElement;n=n.parent;if(!o){return}}else{n=null}}}function Th(e){const t=Oh(e);Ph(t,()=>new vh(e))}Object.assign(Ah,{scrollViewportToShowTarget:Ch,scrollAncestorsToShowTarget:Th});function Eh(e,t,i){const n=t.clone().moveBy(0,i);const o=t.clone().moveBy(0,-i);const r=new vh(e).excludeScrollbarsAndBorders();const s=[o,n];if(!s.every(e=>r.contains(e))){let{scrollX:s,scrollY:a}=e;if(Sh(o,r)){a-=r.top-t.top+i}else if(Mh(n,r)){a+=t.bottom-r.bottom+i}if(Ih(t,r)){s-=r.left-t.left+i}else if(Lh(t,r)){s+=t.right-r.right+i}e.scrollTo(s,a)}}function Ph(e,t){const i=Nh(e);let n,o;while(e!=i.document.body){o=t();n=new vh(e).excludeScrollbarsAndBorders();if(!n.contains(o)){if(Sh(o,n)){e.scrollTop-=n.top-o.top}else if(Mh(o,n)){e.scrollTop+=o.bottom-n.bottom}if(Ih(o,n)){e.scrollLeft-=n.left-o.left}else if(Lh(o,n)){e.scrollLeft+=o.right-n.right}}e=e.parentNode}}function Mh(e,t){return e.bottom>t.bottom}function Sh(e,t){return e.topt.right}function Nh(e){if(wh(e)){return e.startContainer.ownerDocument.defaultView}else{return e.ownerDocument.defaultView}}function Oh(e){if(wh(e)){let t=e.commonAncestorContainer;if(od(t)){t=t.parentNode}return t}else{return e.parentNode}}function Rh(e,t){const i=Nh(e);const n=new vh(e);if(i===t){return n}else{let e=i;while(e!=t){const t=e.frameElement;const i=new vh(t).excludeScrollbarsAndBorders();n.moveBy(i.left,i.top);e=e.parent}}return n}class zh{constructor(e){this.document=new bc(e);this.domConverter=new Dd(this.document);this.domRoots=new Map;this.set("isRenderingInProgress",false);this.set("hasDomSelection",false);this._renderer=new Ad(this.domConverter,this.document.selection);this._renderer.bind("isFocused").to(this.document);this._initialDomRootAttributes=new WeakMap;this._observers=new Map;this._ongoingChange=false;this._postFixersInProgress=false;this._renderingDisabled=false;this._hasChangedSinceTheLastRendering=false;this._writer=new $c(this.document);this.addObserver(Gu);this.addObserver(mh);this.addObserver(gh);this.addObserver(Ju);this.addObserver(hh);this.addObserver(ph);if(Tc.isAndroid){this.addObserver(bh)}hd(this);Fc(this);this.on("render",()=>{this._render();this.document.fire("layoutChanged");this._hasChangedSinceTheLastRendering=false});this.listenTo(this.document.selection,"change",()=>{this._hasChangedSinceTheLastRendering=true})}attachDomRoot(e,t="main"){const i=this.document.getRoot(t);i._name=e.tagName.toLowerCase();const n={};for(const{name:t,value:o}of Array.from(e.attributes)){n[t]=o;if(t==="class"){this._writer.addClass(o.split(" "),i)}else{this._writer.setAttribute(t,o,i)}}this._initialDomRootAttributes.set(e,n);const o=()=>{this._writer.setAttribute("contenteditable",!i.isReadOnly,i);if(i.isReadOnly){this._writer.addClass("ck-read-only",i)}else{this._writer.removeClass("ck-read-only",i)}};o();this.domRoots.set(t,e);this.domConverter.bindElements(e,i);this._renderer.markToSync("children",i);this._renderer.markToSync("attributes",i);this._renderer.domDocuments.add(e.ownerDocument);i.on("change:children",(e,t)=>this._renderer.markToSync("children",t));i.on("change:attributes",(e,t)=>this._renderer.markToSync("attributes",t));i.on("change:text",(e,t)=>this._renderer.markToSync("text",t));i.on("change:isReadOnly",()=>this.change(o));i.on("change",()=>{this._hasChangedSinceTheLastRendering=true});for(const i of this._observers.values()){i.observe(e,t)}}detachDomRoot(e){const t=this.domRoots.get(e);Array.from(t.attributes).forEach(({name:e})=>t.removeAttribute(e));const i=this._initialDomRootAttributes.get(t);for(const e in i){t.setAttribute(e,i[e])}this.domRoots.delete(e);this.domConverter.unbindDomElement(t)}getDomRoot(e="main"){return this.domRoots.get(e)}addObserver(e){let t=this._observers.get(e);if(t){return t}t=new e(this);this._observers.set(e,t);for(const[e,i]of this.domRoots){t.observe(i,e)}t.enable();return t}getObserver(e){return this._observers.get(e)}disableObservers(){for(const e of this._observers.values()){e.disable()}}enableObservers(){for(const e of this._observers.values()){e.enable()}}scrollToTheSelection(){const e=this.document.selection.getFirstRange();if(e){Ch({target:this.domConverter.viewRangeToDom(e),viewportOffset:20})}}focus(){if(!this.document.isFocused){const e=this.document.selection.editableElement;if(e){this.domConverter.focus(e);this.forceRender()}else{}}}change(e){if(this.isRenderingInProgress||this._postFixersInProgress){throw new ss["b"]("cannot-change-view-tree: "+"Attempting to make changes to the view when it is in an incorrect state: rendering or post-fixers are in progress. "+"This may cause some unexpected behavior and inconsistency between the DOM and the view.",this)}try{if(this._ongoingChange){return e(this._writer)}this._ongoingChange=true;const t=e(this._writer);this._ongoingChange=false;if(!this._renderingDisabled&&this._hasChangedSinceTheLastRendering){this._postFixersInProgress=true;this.document._callPostFixers(this._writer);this._postFixersInProgress=false;this.fire("render")}return t}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}forceRender(){this._hasChangedSinceTheLastRendering=true;this.change(()=>{})}destroy(){for(const e of this._observers.values()){e.destroy()}this.document.destroy();this.stopListening()}createPositionAt(e,t){return uc._createAt(e,t)}createPositionAfter(e){return uc._createAfter(e)}createPositionBefore(e){return uc._createBefore(e)}createRange(e,t){return new hc(e,t)}createRangeOn(e){return hc._createOn(e)}createRangeIn(e){return hc._createIn(e)}createSelection(e,t,i){return new gc(e,t,i)}_disableRendering(e){this._renderingDisabled=e;if(e==false){this.change(()=>{})}}_render(){this.isRenderingInProgress=true;this.disableObservers();this._renderer.render();this.enableObservers();this.isRenderingInProgress=false}}ys(zh,Jl);class Dh{constructor(e){this.parent=null;this._attrs=Ws(e)}get index(){let e;if(!this.parent){return null}if((e=this.parent.getChildIndex(this))===null){throw new ss["b"]("model-node-not-found-in-parent: The node's parent does not contain this node.",this)}return e}get startOffset(){let e;if(!this.parent){return null}if((e=this.parent.getChildStartOffset(this))===null){throw new ss["b"]("model-node-not-found-in-parent: The node's parent does not contain this node.",this)}return e}get offsetSize(){return 1}get endOffset(){if(!this.parent){return null}return this.startOffset+this.offsetSize}get nextSibling(){const e=this.index;return e!==null&&this.parent.getChild(e+1)||null}get previousSibling(){const e=this.index;return e!==null&&this.parent.getChild(e-1)||null}get root(){let e=this;while(e.parent){e=e.parent}return e}isAttached(){return this.root.is("rootElement")}getPath(){const e=[];let t=this;while(t.parent){e.unshift(t.startOffset);t=t.parent}return e}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let i=e.includeSelf?this:this.parent;while(i){t[e.parentFirst?"push":"unshift"](i);i=i.parent}return t}getCommonAncestor(e,t={}){const i=this.getAncestors(t);const n=e.getAncestors(t);let o=0;while(i[o]==n[o]&&i[o]){o++}return o===0?null:i[o-1]}isBefore(e){if(this==e){return false}if(this.root!==e.root){return false}const t=this.getPath();const i=e.getPath();const n=Rs(t,i);switch(n){case"prefix":return true;case"extension":return false;default:return t[n]{e[t[0]]=t[1];return e},{})}return e}is(e){return e==="node"||e==="model:node"}_clone(){return new Dh(this._attrs)}_remove(){this.parent._removeChildren(this.index)}_setAttribute(e,t){this._attrs.set(e,t)}_setAttributesTo(e){this._attrs=Ws(e)}_removeAttribute(e){return this._attrs.delete(e)}_clearAttributes(){this._attrs.clear()}}class jh extends Dh{constructor(e,t){super(t);this._data=e||""}get offsetSize(){return this.data.length}get data(){return this._data}is(e){return e==="text"||e==="model:text"||e==="node"||e==="model:node"}toJSON(){const e=super.toJSON();e.data=this.data;return e}_clone(){return new jh(this.data,this.getAttributes())}static fromJSON(e){return new jh(e.data,e.attributes)}}class Bh{constructor(e,t,i){this.textNode=e;if(t<0||t>e.offsetSize){throw new ss["b"]("model-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.",this)}if(i<0||t+i>e.offsetSize){throw new ss["b"]("model-textproxy-wrong-length: Given length value is incorrect.",this)}this.data=e.data.substring(t,t+i);this.offsetInText=t}get startOffset(){return this.textNode.startOffset!==null?this.textNode.startOffset+this.offsetInText:null}get offsetSize(){return this.data.length}get endOffset(){return this.startOffset!==null?this.startOffset+this.offsetSize:null}get isPartial(){return this.offsetSize!==this.textNode.offsetSize}get parent(){return this.textNode.parent}get root(){return this.textNode.root}is(e){return e==="textProxy"||e==="model:textProxy"}getPath(){const e=this.textNode.getPath();if(e.length>0){e[e.length-1]+=this.offsetInText}return e}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let i=e.includeSelf?this:this.parent;while(i){t[e.parentFirst?"push":"unshift"](i);i=i.parent}return t}hasAttribute(e){return this.textNode.hasAttribute(e)}getAttribute(e){return this.textNode.getAttribute(e)}getAttributes(){return this.textNode.getAttributes()}getAttributeKeys(){return this.textNode.getAttributeKeys()}}class Vh{constructor(e){this._nodes=[];if(e){this._insertNodes(0,e)}}[Symbol.iterator](){return this._nodes[Symbol.iterator]()}get length(){return this._nodes.length}get maxOffset(){return this._nodes.reduce((e,t)=>e+t.offsetSize,0)}getNode(e){return this._nodes[e]||null}getNodeIndex(e){const t=this._nodes.indexOf(e);return t==-1?null:t}getNodeStartOffset(e){const t=this.getNodeIndex(e);return t===null?null:this._nodes.slice(0,t).reduce((e,t)=>e+t.offsetSize,0)}indexToOffset(e){if(e==this._nodes.length){return this.maxOffset}const t=this._nodes[e];if(!t){throw new ss["b"]("model-nodelist-index-out-of-bounds: Given index cannot be found in the node list.",this)}return this.getNodeStartOffset(t)}offsetToIndex(e){let t=0;for(const i of this._nodes){if(e>=t&&ee.toJSON())}}class Fh extends Dh{constructor(e,t,i){super(t);this.name=e;this._children=new Vh;if(i){this._insertChild(0,i)}}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}is(e,t=null){if(!t){return e==="element"||e==="model:element"||e===this.name||e==="model:"+this.name||e==="node"||e==="model:node"}return t===this.name&&(e==="element"||e==="model:element")}getChild(e){return this._children.getNode(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}offsetToIndex(e){return this._children.offsetToIndex(e)}getNodeByPath(e){let t=this;for(const i of e){t=t.getChild(t.offsetToIndex(i))}return t}toJSON(){const e=super.toJSON();e.name=this.name;if(this._children.length>0){e.children=[];for(const t of this._children){e.children.push(t.toJSON())}}return e}_clone(e=false){const t=e?Array.from(this._children).map(e=>e._clone(true)):null;return new Fh(this.name,this.getAttributes(),t)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){const i=Hh(t);for(const e of i){if(e.parent!==null){e._remove()}e.parent=this}this._children._insertNodes(e,i)}_removeChildren(e,t=1){const i=this._children._removeNodes(e,t);for(const e of i){e.parent=null}return i}static fromJSON(e){let t=null;if(e.children){t=[];for(const i of e.children){if(i.name){t.push(Fh.fromJSON(i))}else{t.push(jh.fromJSON(i))}}}return new Fh(e.name,e.attributes,t)}}function Hh(e){if(typeof e=="string"){return[new jh(e)]}if(!vs(e)){e=[e]}return Array.from(e).map(e=>{if(typeof e=="string"){return new jh(e)}if(e instanceof Bh){return new jh(e.data,e.getAttributes())}return e})}class Wh{constructor(e={}){if(!e.boundaries&&!e.startPosition){throw new ss["b"]("model-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.",null)}const t=e.direction||"forward";if(t!="forward"&&t!="backward"){throw new ss["b"]("model-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.",e,{direction:t})}this.direction=t;this.boundaries=e.boundaries||null;if(e.startPosition){this.position=e.startPosition.clone()}else{this.position=qh._createAt(this.boundaries[this.direction=="backward"?"end":"start"])}this.position.stickiness="toNone";this.singleCharacters=!!e.singleCharacters;this.shallow=!!e.shallow;this.ignoreElementEnd=!!e.ignoreElementEnd;this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null;this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null;this._visitedParent=this.position.parent}[Symbol.iterator](){return this}skip(e){let t,i,n,o;do{n=this.position;o=this._visitedParent;({done:t,value:i}=this.next())}while(!t&&e(i));if(!t){this.position=n;this._visitedParent=o}}next(){if(this.direction=="forward"){return this._next()}else{return this._previous()}}_next(){const e=this.position;const t=this.position.clone();const i=this._visitedParent;if(i.parent===null&&t.offset===i.maxOffset){return{done:true}}if(i===this._boundaryEndParent&&t.offset==this.boundaries.end.offset){return{done:true}}const n=t.parent;const o=$h(t,n);const r=o?o:Gh(t,n,o);if(r instanceof Fh){if(!this.shallow){t.path.push(0);this._visitedParent=r}else{t.offset++}this.position=t;return Uh("elementStart",r,e,t,1)}else if(r instanceof jh){let n;if(this.singleCharacters){n=1}else{let e=r.endOffset;if(this._boundaryEndParent==i&&this.boundaries.end.offsete){e=this.boundaries.start.offset}n=t.offset-e}const o=t.offset-r.startOffset;const s=new Bh(r,o-n,n);t.offset-=n;this.position=t;return Uh("text",s,e,t,n)}else{t.path.pop();this.position=t;this._visitedParent=i.parent;return Uh("elementStart",i,e,t,1)}}}function Uh(e,t,i,n,o){return{done:false,value:{type:e,item:t,previousPosition:i,nextPosition:n,length:o}}}class qh{constructor(e,t,i="toNone"){if(!e.is("element")&&!e.is("documentFragment")){throw new ss["b"]("model-position-root-invalid: Position root invalid.",e)}if(!(t instanceof Array)||t.length===0){throw new ss["b"]("model-position-path-incorrect-format: Position path must be an array with at least one item.",e,{path:t})}if(e.is("rootElement")){t=t.slice()}else{t=[...e.getPath(),...t];e=e.root}this.root=e;this.path=t;this.stickiness=i}get offset(){return this.path[this.path.length-1]}set offset(e){this.path[this.path.length-1]=e}get parent(){let e=this.root;for(let t=0;ti.path.length){if(t.offset!==o.maxOffset){return false}t.path=t.path.slice(0,-1);o=o.parent;t.offset++}else{if(i.offset!==0){return false}i.path=i.path.slice(0,-1)}}}is(e){return e==="position"||e==="model:position"}hasSameParentAs(e){if(this.root!==e.root){return false}const t=this.getParentPath();const i=e.getParentPath();return Rs(t,i)=="same"}getTransformedByOperation(e){let t;switch(e.type){case"insert":t=this._getTransformedByInsertOperation(e);break;case"move":case"remove":case"reinsert":t=this._getTransformedByMoveOperation(e);break;case"split":t=this._getTransformedBySplitOperation(e);break;case"merge":t=this._getTransformedByMergeOperation(e);break;default:t=qh._createAt(this);break}return t}_getTransformedByInsertOperation(e){return this._getTransformedByInsertion(e.position,e.howMany)}_getTransformedByMoveOperation(e){return this._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany)}_getTransformedBySplitOperation(e){const t=e.movedRange;const i=t.containsPosition(this)||t.start.isEqual(this)&&this.stickiness=="toNext";if(i){return this._getCombined(e.splitPosition,e.moveTargetPosition)}else{if(e.graveyardPosition){return this._getTransformedByMove(e.graveyardPosition,e.insertionPosition,1)}else{return this._getTransformedByInsertion(e.insertionPosition,1)}}}_getTransformedByMergeOperation(e){const t=e.movedRange;const i=t.containsPosition(this)||t.start.isEqual(this);let n;if(i){n=this._getCombined(e.sourcePosition,e.targetPosition);if(e.sourcePosition.isBefore(e.targetPosition)){n=n._getTransformedByDeletion(e.deletionPosition,1)}}else if(this.isEqual(e.deletionPosition)){n=qh._createAt(e.deletionPosition)}else{n=this._getTransformedByMove(e.deletionPosition,e.graveyardPosition,1)}return n}_getTransformedByDeletion(e,t){const i=qh._createAt(this);if(this.root!=e.root){return i}if(Rs(e.getParentPath(),this.getParentPath())=="same"){if(e.offsetthis.offset){return null}else{i.offset-=t}}}else if(Rs(e.getParentPath(),this.getParentPath())=="prefix"){const n=e.path.length-1;if(e.offset<=this.path[n]){if(e.offset+t>this.path[n]){return null}else{i.path[n]-=t}}}return i}_getTransformedByInsertion(e,t){const i=qh._createAt(this);if(this.root!=e.root){return i}if(Rs(e.getParentPath(),this.getParentPath())=="same"){if(e.offsett+1){const t=n.maxOffset-i.offset;if(t!==0){e.push(new Kh(i,i.getShiftedBy(t)))}i.path=i.path.slice(0,-1);i.offset++;n=n.parent}while(i.path.length<=this.end.path.length){const t=this.end.path[i.path.length-1];const n=t-i.offset;if(n!==0){e.push(new Kh(i,i.getShiftedBy(n)))}i.offset=t;i.path.push(0)}return e}getWalker(e={}){e.boundaries=this;return new Wh(e)}*getItems(e={}){e.boundaries=this;e.ignoreElementEnd=true;const t=new Wh(e);for(const e of t){yield e.item}}*getPositions(e={}){e.boundaries=this;const t=new Wh(e);yield t.position;for(const e of t){yield e.nextPosition}}getTransformedByOperation(e){switch(e.type){case"insert":return this._getTransformedByInsertOperation(e);case"move":case"remove":case"reinsert":return this._getTransformedByMoveOperation(e);case"split":return[this._getTransformedBySplitOperation(e)];case"merge":return[this._getTransformedByMergeOperation(e)]}return[new Kh(this.start,this.end)]}getTransformedByOperations(e){const t=[new Kh(this.start,this.end)];for(const i of e){for(let e=0;e0?new this(i,n):new this(n,i)}static _createIn(e){return new this(qh._createAt(e,0),qh._createAt(e,e.maxOffset))}static _createOn(e){return this._createFromPositionAndShift(qh._createBefore(e),e.offsetSize)}static _createFromRanges(e){if(e.length===0){throw new ss["b"]("range-create-from-ranges-empty-array: At least one range has to be passed.",null)}else if(e.length==1){return e[0].clone()}const t=e[0];e.sort((e,t)=>e.start.isAfter(t.start)?1:-1);const i=e.indexOf(t);const n=new this(t.start,t.end);if(i>0){for(let t=i-1;true;t++){if(e[t].end.isEqual(n.start)){n.start=qh._createAt(e[t].start)}else{break}}}for(let t=i+1;t{if(t.viewPosition){return}const i=this._modelToViewMapping.get(t.modelPosition.parent);t.viewPosition=this._findPositionIn(i,t.modelPosition.offset)},{priority:"low"});this.on("viewToModelPosition",(e,t)=>{if(t.modelPosition){return}const i=this.findMappedViewAncestor(t.viewPosition);const n=this._viewToModelMapping.get(i);const o=this._toModelOffset(t.viewPosition.parent,t.viewPosition.offset,i);t.modelPosition=qh._createAt(n,o)},{priority:"low"})}bindElements(e,t){this._modelToViewMapping.set(e,t);this._viewToModelMapping.set(t,e)}unbindViewElement(e){const t=this.toModelElement(e);this._viewToModelMapping.delete(e);if(this._elementToMarkerNames.has(e)){for(const t of this._elementToMarkerNames.get(e)){this._unboundMarkerNames.add(t)}}if(this._modelToViewMapping.get(t)==e){this._modelToViewMapping.delete(t)}}unbindModelElement(e){const t=this.toViewElement(e);this._modelToViewMapping.delete(e);if(this._viewToModelMapping.get(t)==e){this._viewToModelMapping.delete(t)}}bindElementToMarker(e,t){const i=this._markerNameToElements.get(t)||new Set;i.add(e);const n=this._elementToMarkerNames.get(e)||new Set;n.add(t);this._markerNameToElements.set(t,i);this._elementToMarkerNames.set(e,n)}unbindElementFromMarkerName(e,t){const i=this._markerNameToElements.get(t);if(i){i.delete(e);if(i.size==0){this._markerNameToElements.delete(t)}}const n=this._elementToMarkerNames.get(e);if(n){n.delete(t);if(n.size==0){this._elementToMarkerNames.delete(e)}}}flushUnboundMarkerNames(){const e=Array.from(this._unboundMarkerNames);this._unboundMarkerNames.clear();return e}clearBindings(){this._modelToViewMapping=new WeakMap;this._viewToModelMapping=new WeakMap;this._markerNameToElements=new Map;this._elementToMarkerNames=new Map;this._unboundMarkerNames=new Set}toModelElement(e){return this._viewToModelMapping.get(e)}toViewElement(e){return this._modelToViewMapping.get(e)}toModelRange(e){return new Kh(this.toModelPosition(e.start),this.toModelPosition(e.end))}toViewRange(e){return new hc(this.toViewPosition(e.start),this.toViewPosition(e.end))}toModelPosition(e){const t={viewPosition:e,mapper:this};this.fire("viewToModelPosition",t);return t.modelPosition}toViewPosition(e,t={isPhantom:false}){const i={modelPosition:e,mapper:this,isPhantom:t.isPhantom};this.fire("modelToViewPosition",i);return i.viewPosition}markerNameToElements(e){const t=this._markerNameToElements.get(e);if(!t){return null}const i=new Set;for(const e of t){if(e.is("attributeElement")){for(const t of e.getElementsWithSameId()){i.add(t)}}else{i.add(e)}}return i}registerViewToModelLength(e,t){this._viewToModelLengthCallbacks.set(e,t)}findMappedViewAncestor(e){let t=e.parent;while(!this._viewToModelMapping.has(t)){t=t.parent}return t}_toModelOffset(e,t,i){if(i!=e){const n=this._toModelOffset(e.parent,e.index,i);const o=this._toModelOffset(e,t,e);return n+o}if(e.is("text")){return t}let n=0;for(let i=0;i1?t[0]+":"+t[1]:t[0]}class Xh{constructor(e){this.conversionApi=ql({dispatcher:this},e)}convertChanges(e,t,i){for(const t of e.getMarkersToRemove()){this.convertMarkerRemove(t.name,t.range,i)}for(const t of e.getChanges()){if(t.type=="insert"){this.convertInsert(Kh._createFromPositionAndShift(t.position,t.length),i)}else if(t.type=="remove"){this.convertRemove(t.position,t.length,t.name,i)}else{this.convertAttribute(t.range,t.attributeKey,t.attributeOldValue,t.attributeNewValue,i)}}for(const e of this.conversionApi.mapper.flushUnboundMarkerNames()){const n=t.get(e).getRange();this.convertMarkerRemove(e,n,i);this.convertMarkerAdd(e,n,i)}for(const t of e.getMarkersToAdd()){this.convertMarkerAdd(t.name,t.range,i)}}convertInsert(e,t){this.conversionApi.writer=t;this.conversionApi.consumable=this._createInsertConsumable(e);for(const t of e){const e=t.item;const i=Kh._createFromPositionAndShift(t.previousPosition,t.length);const n={item:e,range:i};this._testAndFire("insert",n);for(const t of e.getAttributeKeys()){n.attributeKey=t;n.attributeOldValue=null;n.attributeNewValue=e.getAttribute(t);this._testAndFire(`attribute:${t}`,n)}}this._clearConversionApi()}convertRemove(e,t,i,n){this.conversionApi.writer=n;this.fire("remove:"+i,{position:e,length:t},this.conversionApi);this._clearConversionApi()}convertAttribute(e,t,i,n,o){this.conversionApi.writer=o;this.conversionApi.consumable=this._createConsumableForRange(e,`attribute:${t}`);for(const o of e){const e=o.item;const r=Kh._createFromPositionAndShift(o.previousPosition,o.length);const s={item:e,range:r,attributeKey:t,attributeOldValue:i,attributeNewValue:n};this._testAndFire(`attribute:${t}`,s)}this._clearConversionApi()}convertSelection(e,t,i){const n=Array.from(t.getMarkersAtPosition(e.getFirstPosition()));this.conversionApi.writer=i;this.conversionApi.consumable=this._createSelectionConsumable(e,n);this.fire("selection",{selection:e},this.conversionApi);if(!e.isCollapsed){return}for(const t of n){const i=t.getRange();if(!ef(e.getFirstPosition(),t,this.conversionApi.mapper)){continue}const n={item:e,markerName:t.name,markerRange:i};if(this.conversionApi.consumable.test(e,"addMarker:"+t.name)){this.fire("addMarker:"+t.name,n,this.conversionApi)}}for(const t of e.getAttributeKeys()){const i={item:e,range:e.getFirstRange(),attributeKey:t,attributeOldValue:null,attributeNewValue:e.getAttribute(t)};if(this.conversionApi.consumable.test(e,"attribute:"+i.attributeKey)){this.fire("attribute:"+i.attributeKey+":$text",i,this.conversionApi)}}this._clearConversionApi()}convertMarkerAdd(e,t,i){if(!t.root.document||t.root.rootName=="$graveyard"){return}this.conversionApi.writer=i;const n="addMarker:"+e;const o=new Qh;o.add(t,n);this.conversionApi.consumable=o;this.fire(n,{markerName:e,markerRange:t},this.conversionApi);if(!o.test(t,n)){return}this.conversionApi.consumable=this._createConsumableForRange(t,n);for(const i of t.getItems()){if(!this.conversionApi.consumable.test(i,n)){continue}const o={item:i,range:Kh._createOn(i),markerName:e,markerRange:t};this.fire(n,o,this.conversionApi)}this._clearConversionApi()}convertMarkerRemove(e,t,i){if(!t.root.document||t.root.rootName=="$graveyard"){return}this.conversionApi.writer=i;this.fire("removeMarker:"+e,{markerName:e,markerRange:t},this.conversionApi);this._clearConversionApi()}_createInsertConsumable(e){const t=new Qh;for(const i of e){const e=i.item;t.add(e,"insert");for(const i of e.getAttributeKeys()){t.add(e,"attribute:"+i)}}return t}_createConsumableForRange(e,t){const i=new Qh;for(const n of e.getItems()){i.add(n,t)}return i}_createSelectionConsumable(e,t){const i=new Qh;i.add(e,"selection");for(const n of t){i.add(e,"addMarker:"+n.name)}for(const t of e.getAttributeKeys()){i.add(e,"attribute:"+t)}return i}_testAndFire(e,t){if(!this.conversionApi.consumable.test(t.item,e)){return}const i=t.item.name||"$text";this.fire(e+":"+i,t,this.conversionApi)}_clearConversionApi(){delete this.conversionApi.writer;delete this.conversionApi.consumable}}ys(Xh,ds);function ef(e,t,i){const n=t.getRange();const o=Array.from(e.getAncestors());o.shift();o.reverse();const r=o.some(e=>{if(n.containsItem(e)){const t=i.toViewElement(e);return!!t.getCustomProperty("addHighlight")}});return!r}class tf{constructor(e,t,i){this._lastRangeBackward=false;this._ranges=[];this._attrs=new Map;if(e){this.setTo(e,t,i)}}get anchor(){if(this._ranges.length>0){const e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.end:e.start}return null}get focus(){if(this._ranges.length>0){const e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.start:e.end}return null}get isCollapsed(){const e=this._ranges.length;if(e===1){return this._ranges[0].isCollapsed}else{return false}}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}isEqual(e){if(this.rangeCount!=e.rangeCount){return false}else if(this.rangeCount===0){return true}if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus)){return false}for(const t of this._ranges){let i=false;for(const n of e._ranges){if(t.isEqual(n)){i=true;break}}if(!i){return false}}return true}*getRanges(){for(const e of this._ranges){yield new Kh(e.start,e.end)}}getFirstRange(){let e=null;for(const t of this._ranges){if(!e||t.start.isBefore(e.start)){e=t}}return e?new Kh(e.start,e.end):null}getLastRange(){let e=null;for(const t of this._ranges){if(!e||t.end.isAfter(e.end)){e=t}}return e?new Kh(e.start,e.end):null}getFirstPosition(){const e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){const e=this.getLastRange();return e?e.end.clone():null}setTo(e,t,i){if(e===null){this._setRanges([])}else if(e instanceof tf){this._setRanges(e.getRanges(),e.isBackward)}else if(e&&typeof e.getRanges=="function"){this._setRanges(e.getRanges(),e.isBackward)}else if(e instanceof Kh){this._setRanges([e],!!t&&!!t.backward)}else if(e instanceof qh){this._setRanges([new Kh(e)])}else if(e instanceof Dh){const n=!!i&&!!i.backward;let o;if(t=="in"){o=Kh._createIn(e)}else if(t=="on"){o=Kh._createOn(e)}else if(t!==undefined){o=new Kh(qh._createAt(e,t))}else{throw new ss["b"]("model-selection-setTo-required-second-parameter: "+"selection.setTo requires the second parameter when the first parameter is a node.",[this,e])}this._setRanges([o],n)}else if(vs(e)){this._setRanges(e,t&&!!t.backward)}else{throw new ss["b"]("model-selection-setTo-not-selectable: Cannot set the selection to the given place.",[this,e])}}_setRanges(e,t=false){e=Array.from(e);const i=e.some(t=>{if(!(t instanceof Kh)){throw new ss["b"]("model-selection-set-ranges-not-range: "+"Selection range set to an object that is not an instance of model.Range.",[this,e])}return this._ranges.every(e=>!e.isEqual(t))});if(e.length===this._ranges.length&&!i){return}this._removeAllRanges();for(const t of e){this._pushRange(t)}this._lastRangeBackward=!!t;this.fire("change:range",{directChange:true})}setFocus(e,t){if(this.anchor===null){throw new ss["b"]("model-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.",[this,e])}const i=qh._createAt(e,t);if(i.compareWith(this.focus)=="same"){return}const n=this.anchor;if(this._ranges.length){this._popRange()}if(i.compareWith(n)=="before"){this._pushRange(new Kh(i,n));this._lastRangeBackward=true}else{this._pushRange(new Kh(n,i));this._lastRangeBackward=false}this.fire("change:range",{directChange:true})}getAttribute(e){return this._attrs.get(e)}getAttributes(){return this._attrs.entries()}getAttributeKeys(){return this._attrs.keys()}hasAttribute(e){return this._attrs.has(e)}removeAttribute(e){if(this.hasAttribute(e)){this._attrs.delete(e);this.fire("change:attribute",{attributeKeys:[e],directChange:true})}}setAttribute(e,t){if(this.getAttribute(e)!==t){this._attrs.set(e,t);this.fire("change:attribute",{attributeKeys:[e],directChange:true})}}getSelectedElement(){if(this.rangeCount!==1){return null}return this.getFirstRange().getContainedElement()}is(e){return e==="selection"||e==="model:selection"}*getSelectedBlocks(){const e=new WeakSet;for(const t of this.getRanges()){const i=rf(t.start,e);if(i&&sf(i,t)){yield i}for(const i of t.getWalker()){const n=i.item;if(i.type=="elementEnd"&&of(n,e,t)){yield n}}const n=rf(t.end,e);if(n&&!t.end.isTouching(qh._createAt(n,0))&&sf(n,t)){yield n}}}containsEntireContent(e=this.anchor.root){const t=qh._createAt(e,0);const i=qh._createAt(e,"end");return t.isTouching(this.getFirstPosition())&&i.isTouching(this.getLastPosition())}_pushRange(e){this._checkRange(e);this._ranges.push(new Kh(e.start,e.end))}_checkRange(e){for(let t=0;t0){this._popRange()}}_popRange(){this._ranges.pop()}}ys(tf,ds);function nf(e,t){if(t.has(e)){return false}t.add(e);return e.root.document.model.schema.isBlock(e)&&e.parent}function of(e,t,i){return nf(e,t)&&sf(e,i)}function rf(e,t){const i=e.parent;const n=i.root.document.model.schema;const o=e.parent.getAncestors({parentFirst:true,includeSelf:true});let r=false;const s=o.find(e=>{if(r){return false}r=n.isLimit(e);return!r&&nf(e,t)});o.forEach(e=>t.add(e));return s}function sf(e,t){const i=af(e);if(!i){return true}const n=t.containsRange(Kh._createOn(i),true);return!n}function af(e){const t=e.root.document.model.schema;let i=e.parent;while(i){if(t.isBlock(i)){return i}i=i.parent}}class lf extends Kh{constructor(e,t){super(e,t);cf.call(this)}detach(){this.stopListening()}is(e){return e==="liveRange"||e==="model:liveRange"||e=="range"||e==="model:range"}toRange(){return new Kh(this.start,this.end)}static fromRange(e){return new lf(e.start,e.end)}}function cf(){this.listenTo(this.root.document.model,"applyOperation",(e,t)=>{const i=t[0];if(!i.isDocumentOperation){return}df.call(this,i)},{priority:"low"})}function df(e){const t=this.getTransformedByOperation(e);const i=Kh._createFromRanges(t);const n=!i.isEqual(this);const o=uf(this,e);let r=null;if(n){if(i.root.rootName=="$graveyard"){if(e.type=="remove"){r=e.sourcePosition}else{r=e.deletionPosition}}const t=this.toRange();this.start=i.start;this.end=i.end;this.fire("change:range",t,{deletionPosition:r})}else if(o){this.fire("change:content",this.toRange(),{deletionPosition:r})}}function uf(e,t){switch(t.type){case"insert":return e.containsPosition(t.position);case"move":case"remove":case"reinsert":case"merge":return e.containsPosition(t.sourcePosition)||e.start.isEqual(t.sourcePosition)||e.containsPosition(t.targetPosition);case"split":return e.containsPosition(t.splitPosition)||e.containsPosition(t.insertionPosition)}return false}ys(lf,ds);const hf="selection:";class ff{constructor(e){this._selection=new mf(e);this._selection.delegate("change:range").to(this);this._selection.delegate("change:attribute").to(this);this._selection.delegate("change:marker").to(this)}get isCollapsed(){return this._selection.isCollapsed}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get rangeCount(){return this._selection.rangeCount}get hasOwnRange(){return this._selection.hasOwnRange}get isBackward(){return this._selection.isBackward}get isGravityOverridden(){return this._selection.isGravityOverridden}get markers(){return this._selection.markers}get _ranges(){return this._selection._ranges}getRanges(){return this._selection.getRanges()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getSelectedBlocks(){return this._selection.getSelectedBlocks()}getSelectedElement(){return this._selection.getSelectedElement()}containsEntireContent(e){return this._selection.containsEntireContent(e)}destroy(){this._selection.destroy()}getAttributeKeys(){return this._selection.getAttributeKeys()}getAttributes(){return this._selection.getAttributes()}getAttribute(e){return this._selection.getAttribute(e)}hasAttribute(e){return this._selection.hasAttribute(e)}refresh(){this._selection._updateMarkers();this._selection._updateAttributes(false)}is(e){return e==="selection"||e=="model:selection"||e=="documentSelection"||e=="model:documentSelection"}_setFocus(e,t){this._selection.setFocus(e,t)}_setTo(e,t,i){this._selection.setTo(e,t,i)}_setAttribute(e,t){this._selection.setAttribute(e,t)}_removeAttribute(e){this._selection.removeAttribute(e)}_getStoredAttributes(){return this._selection._getStoredAttributes()}_overrideGravity(){return this._selection.overrideGravity()}_restoreGravity(e){this._selection.restoreGravity(e)}static _getStoreAttributeKey(e){return hf+e}static _isStoreAttributeKey(e){return e.startsWith(hf)}}ys(ff,ds);class mf extends tf{constructor(e){super();this.markers=new xs({idProperty:"name"});this._model=e.model;this._document=e;this._attributePriority=new Map;this._fixGraveyardRangesData=[];this._hasChangedRange=false;this._overriddenGravityRegister=new Set;this.listenTo(this._model,"applyOperation",(e,t)=>{const i=t[0];if(!i.isDocumentOperation||i.type=="marker"||i.type=="rename"||i.type=="noop"){return}while(this._fixGraveyardRangesData.length){const{liveRange:e,sourcePosition:t}=this._fixGraveyardRangesData.shift();this._fixGraveyardSelection(e,t)}if(this._hasChangedRange){this._hasChangedRange=false;this.fire("change:range",{directChange:false})}},{priority:"lowest"});this.on("change:range",()=>{for(const e of this.getRanges()){if(!this._document._validateSelectionRange(e)){throw new ss["b"]("document-selection-wrong-position: Range from document selection starts or ends at incorrect position.",this,{range:e})}}});this.listenTo(this._model.markers,"update",()=>this._updateMarkers());this.listenTo(this._document,"change",(e,t)=>{pf(this._model,t)})}get isCollapsed(){const e=this._ranges.length;return e===0?this._document._getDefaultRange().isCollapsed:super.isCollapsed}get anchor(){return super.anchor||this._document._getDefaultRange().start}get focus(){return super.focus||this._document._getDefaultRange().end}get rangeCount(){return this._ranges.length?this._ranges.length:1}get hasOwnRange(){return this._ranges.length>0}get isGravityOverridden(){return!!this._overriddenGravityRegister.size}destroy(){for(let e=0;e{this._hasChangedRange=true;if(t.root==this._document.graveyard){this._fixGraveyardRangesData.push({liveRange:t,sourcePosition:n.deletionPosition})}});return t}_updateMarkers(){const e=[];let t=false;for(const t of this._model.markers){const i=t.getRange();for(const n of this.getRanges()){if(i.containsRange(n,!n.isCollapsed)){e.push(t)}}}const i=Array.from(this.markers);for(const i of e){if(!this.markers.has(i)){this.markers.add(i);t=true}}for(const i of Array.from(this.markers)){if(!e.includes(i)){this.markers.remove(i);t=true}}if(t){this.fire("change:marker",{oldMarkers:i,directChange:false})}}_updateAttributes(e){const t=Ws(this._getSurroundingAttributes());const i=Ws(this.getAttributes());if(e){this._attributePriority=new Map;this._attrs=new Map}else{for(const[e,t]of this._attributePriority){if(t=="low"){this._attrs.delete(e);this._attributePriority.delete(e)}}}this._setAttributesTo(t);const n=[];for(const[e,t]of this.getAttributes()){if(!i.has(e)||i.get(e)!==t){n.push(e)}}for(const[e]of i){if(!this.hasAttribute(e)){n.push(e)}}if(n.length>0){this.fire("change:attribute",{attributeKeys:n,directChange:false})}}_setAttribute(e,t,i=true){const n=i?"normal":"low";if(n=="low"&&this._attributePriority.get(e)=="normal"){return false}const o=super.getAttribute(e);if(o===t){return false}this._attrs.set(e,t);this._attributePriority.set(e,n);return true}_removeAttribute(e,t=true){const i=t?"normal":"low";if(i=="low"&&this._attributePriority.get(e)=="normal"){return false}this._attributePriority.set(e,i);if(!super.hasAttribute(e)){return false}this._attrs.delete(e);return true}_setAttributesTo(e){const t=new Set;for(const[t,i]of this.getAttributes()){if(e.get(t)===i){continue}this._removeAttribute(t,false)}for(const[i,n]of e){const e=this._setAttribute(i,n,false);if(e){t.add(i)}}return t}*_getStoredAttributes(){const e=this.getFirstPosition().parent;if(this.isCollapsed&&e.isEmpty){for(const t of e.getAttributeKeys()){if(t.startsWith(hf)){const i=t.substr(hf.length);yield[i,e.getAttribute(t)]}}}}_getSurroundingAttributes(){const e=this.getFirstPosition();const t=this._model.schema;let i=null;if(!this.isCollapsed){const e=this.getFirstRange();for(const n of e){if(n.item.is("element")&&t.isObject(n.item)){break}if(n.type=="text"){i=n.item.getAttributes();break}}}else{const t=e.textNode?e.textNode:e.nodeBefore;const n=e.textNode?e.textNode:e.nodeAfter;if(!this.isGravityOverridden){i=gf(t)}if(!i){i=gf(n)}if(!this.isGravityOverridden&&!i){let e=t;while(e&&!i){e=e.previousSibling;i=gf(e)}}if(!i){let e=n;while(e&&!i){e=e.nextSibling;i=gf(e)}}if(!i){i=this._getStoredAttributes()}}return i}_fixGraveyardSelection(e,t){const i=t.clone();const n=this._model.schema.getNearestSelectionRange(i);const o=this._ranges.indexOf(e);this._ranges.splice(o,1);e.detach();if(n&&!bf(n,this)){const e=this._prepareRange(n);this._ranges.splice(o,0,e)}}}function gf(e){if(e instanceof Bh||e instanceof jh){return e.getAttributes()}return null}function pf(e,t){const i=e.document.differ;for(const n of i.getChanges()){if(n.type!="insert"){continue}const i=n.position.parent;const o=n.length===i.maxOffset;if(o){e.enqueueChange(t,e=>{const t=Array.from(i.getAttributeKeys()).filter(e=>e.startsWith(hf));for(const n of t){e.removeAttribute(n,i)}})}}}function bf(e,t){return!t._ranges.every(t=>!e.isEqual(t))}class wf{constructor(e){this._dispatchers=e}add(e){for(const t of this._dispatchers){e(t)}return this}}var _f=1,kf=4;function vf(e){return Hr(e,_f|kf)}var yf=vf;class xf extends wf{elementToElement(e){return this.add(jf(e))}attributeToElement(e){return this.add(Bf(e))}attributeToAttribute(e){return this.add(Vf(e))}markerToElement(e){return this.add(Ff(e))}markerToHighlight(e){return this.add(Hf(e))}}function Af(){return(e,t,i)=>{if(!i.consumable.consume(t.item,"insert")){return}const n=i.writer;const o=i.mapper.toViewPosition(t.range.start);const r=n.createText(t.item.data);n.insert(o,r)}}function Cf(){return(e,t,i)=>{const n=i.mapper.toViewPosition(t.position);const o=t.position.getShiftedBy(t.length);const r=i.mapper.toViewPosition(o,{isPhantom:true});const s=i.writer.createRange(n,r);const a=i.writer.remove(s.getTrimmed());for(const e of i.writer.createRangeIn(a).getItems()){i.mapper.unbindViewElement(e)}}}function Tf(e,t){const i=e.createAttributeElement("span",t.attributes);if(t.classes){i._addClass(t.classes)}if(t.priority){i._priority=t.priority}i._id=t.id;return i}function Ef(){return(e,t,i)=>{const n=t.selection;if(n.isCollapsed){return}if(!i.consumable.consume(n,"selection")){return}const o=[];for(const e of n.getRanges()){const t=i.mapper.toViewRange(e);o.push(t)}i.writer.setSelection(o,{backward:n.isBackward})}}function Pf(){return(e,t,i)=>{const n=t.selection;if(!n.isCollapsed){return}if(!i.consumable.consume(n,"selection")){return}const o=i.writer;const r=n.getFirstPosition();const s=i.mapper.toViewPosition(r);const a=o.breakAttributes(s);o.setSelection(a)}}function Mf(){return(e,t,i)=>{const n=i.writer;const o=n.document.selection;for(const e of o.getRanges()){if(e.isCollapsed){if(e.end.parent.isAttached()){i.writer.mergeAttributes(e.start)}}}n.setSelection(null)}}function Sf(e){return(t,i,n)=>{const o=e(i.attributeOldValue,n.writer);const r=e(i.attributeNewValue,n.writer);if(!o&&!r){return}if(!n.consumable.consume(i.item,t.name)){return}const s=n.writer;const a=s.document.selection;if(i.item instanceof tf||i.item instanceof ff){s.wrap(a.getFirstRange(),r)}else{let e=n.mapper.toViewRange(i.range);if(i.attributeOldValue!==null&&o){e=s.unwrap(e,o)}if(i.attributeNewValue!==null&&r){s.wrap(e,r)}}}}function If(e){return(t,i,n)=>{const o=e(i.item,n.writer);if(!o){return}if(!n.consumable.consume(i.item,"insert")){return}const r=n.mapper.toViewPosition(i.range.start);n.mapper.bindElements(i.item,o);n.writer.insert(r,o)}}function Lf(e){return(t,i,n)=>{i.isOpening=true;const o=e(i,n.writer);i.isOpening=false;const r=e(i,n.writer);if(!o||!r){return}const s=i.markerRange;if(s.isCollapsed&&!n.consumable.consume(s,t.name)){return}for(const e of s){if(!n.consumable.consume(e.item,t.name)){return}}const a=n.mapper;const l=n.writer;l.insert(a.toViewPosition(s.start),o);n.mapper.bindElementToMarker(o,i.markerName);if(!s.isCollapsed){l.insert(a.toViewPosition(s.end),r);n.mapper.bindElementToMarker(r,i.markerName)}t.stop()}}function Nf(){return(e,t,i)=>{const n=i.mapper.markerNameToElements(t.markerName);if(!n){return}for(const e of n){i.mapper.unbindElementFromMarkerName(e,t.markerName);i.writer.clear(i.writer.createRangeOn(e),e)}i.writer.clearClonedElementsGroup(t.markerName);e.stop()}}function Of(e){return(t,i,n)=>{const o=e(i.attributeOldValue,i);const r=e(i.attributeNewValue,i);if(!o&&!r){return}if(!n.consumable.consume(i.item,t.name)){return}const s=n.mapper.toViewElement(i.item);const a=n.writer;if(!s){throw new ss["b"]("conversion-attribute-to-attribute-on-text: "+"Trying to convert text node's attribute with attribute-to-attribute converter.",[i,n])}if(i.attributeOldValue!==null&&o){if(o.key=="class"){const e=Array.isArray(o.value)?o.value:[o.value];for(const t of e){a.removeClass(t,s)}}else if(o.key=="style"){const e=Object.keys(o.value);for(const t of e){a.removeStyle(t,s)}}else{a.removeAttribute(o.key,s)}}if(i.attributeNewValue!==null&&r){if(r.key=="class"){const e=Array.isArray(r.value)?r.value:[r.value];for(const t of e){a.addClass(t,s)}}else if(r.key=="style"){const e=Object.keys(r.value);for(const t of e){a.setStyle(t,r.value[t],s)}}else{a.setAttribute(r.key,r.value,s)}}}}function Rf(e){return(t,i,n)=>{if(!i.item){return}if(!(i.item instanceof tf||i.item instanceof ff)&&!i.item.is("textProxy")){return}const o=Gf(e,i,n);if(!o){return}if(!n.consumable.consume(i.item,t.name)){return}const r=n.writer;const s=Tf(r,o);const a=r.document.selection;if(i.item instanceof tf||i.item instanceof ff){r.wrap(a.getFirstRange(),s,a)}else{const e=n.mapper.toViewRange(i.range);const t=r.wrap(e,s);for(const e of t.getItems()){if(e.is("attributeElement")&&e.isSimilar(s)){n.mapper.bindElementToMarker(e,i.markerName);break}}}}}function zf(e){return(t,i,n)=>{if(!i.item){return}if(!(i.item instanceof Fh)){return}const o=Gf(e,i,n);if(!o){return}if(!n.consumable.test(i.item,t.name)){return}const r=n.mapper.toViewElement(i.item);if(r&&r.getCustomProperty("addHighlight")){n.consumable.consume(i.item,t.name);for(const e of Kh._createIn(i.item)){n.consumable.consume(e.item,t.name)}r.getCustomProperty("addHighlight")(r,o,n.writer);n.mapper.bindElementToMarker(r,i.markerName)}}}function Df(e){return(t,i,n)=>{if(i.markerRange.isCollapsed){return}const o=Gf(e,i,n);if(!o){return}const r=Tf(n.writer,o);const s=n.mapper.markerNameToElements(i.markerName);if(!s){return}for(const e of s){n.mapper.unbindElementFromMarkerName(e,i.markerName);if(e.is("attributeElement")){n.writer.unwrap(n.writer.createRangeOn(e),r)}else{e.getCustomProperty("removeHighlight")(e,o.id,n.writer)}}n.writer.clearClonedElementsGroup(i.markerName);t.stop()}}function jf(e){e=yf(e);e.view=Wf(e.view,"container");return t=>{t.on("insert:"+e.model,If(e.view),{priority:e.converterPriority||"normal"})}}function Bf(e){e=yf(e);const t=e.model.key?e.model.key:e.model;let i="attribute:"+t;if(e.model.name){i+=":"+e.model.name}if(e.model.values){for(const t of e.model.values){e.view[t]=Wf(e.view[t],"attribute")}}else{e.view=Wf(e.view,"attribute")}const n=qf(e);return t=>{t.on(i,Sf(n),{priority:e.converterPriority||"normal"})}}function Vf(e){e=yf(e);const t=e.model.key?e.model.key:e.model;let i="attribute:"+t;if(e.model.name){i+=":"+e.model.name}if(e.model.values){for(const t of e.model.values){e.view[t]=$f(e.view[t])}}else{e.view=$f(e.view)}const n=qf(e);return t=>{t.on(i,Of(n),{priority:e.converterPriority||"normal"})}}function Ff(e){e=yf(e);e.view=Wf(e.view,"ui");return t=>{t.on("addMarker:"+e.model,Lf(e.view),{priority:e.converterPriority||"normal"});t.on("removeMarker:"+e.model,Nf(e.view),{priority:e.converterPriority||"normal"})}}function Hf(e){return t=>{t.on("addMarker:"+e.model,Rf(e.view),{priority:e.converterPriority||"normal"});t.on("addMarker:"+e.model,zf(e.view),{priority:e.converterPriority||"normal"});t.on("removeMarker:"+e.model,Df(e.view),{priority:e.converterPriority||"normal"})}}function Wf(e,t){if(typeof e=="function"){return e}return(i,n)=>Uf(e,n,t)}function Uf(e,t,i){if(typeof e=="string"){e={name:e}}let n;const o=Object.assign({},e.attributes);if(i=="container"){n=t.createContainerElement(e.name,o)}else if(i=="attribute"){const i={priority:e.priority||_c.DEFAULT_PRIORITY};n=t.createAttributeElement(e.name,o,i)}else{n=t.createUIElement(e.name,o)}if(e.styles){const i=Object.keys(e.styles);for(const o of i){t.setStyle(o,e.styles[o],n)}}if(e.classes){const i=e.classes;if(typeof i=="string"){t.addClass(i,n)}else{for(const e of i){t.addClass(e,n)}}}return n}function qf(e){if(e.model.values){return(t,i)=>{const n=e.view[t];if(n){return n(t,i)}return null}}else{return e.view}}function $f(e){if(typeof e=="string"){return t=>({key:e,value:t})}else if(typeof e=="object"){if(e.value){return()=>e}else{return t=>({key:e.key,value:t})}}else{return e}}function Gf(e,t,i){const n=typeof e=="function"?e(t,i):e;if(!n){return null}if(!n.priority){n.priority=10}if(!n.id){n.id=t.markerName}return n}class Yf extends wf{elementToElement(e){return this.add(Zf(e))}elementToAttribute(e){return this.add(Xf(e))}attributeToAttribute(e){return this.add(em(e))}elementToMarker(e){return this.add(tm(e))}}function Kf(){return(e,t,i)=>{if(!t.modelRange&&i.consumable.consume(t.viewItem,{name:true})){const{modelRange:e,modelCursor:n}=i.convertChildren(t.viewItem,t.modelCursor);t.modelRange=e;t.modelCursor=n}}}function Jf(){return(e,t,i)=>{if(i.schema.checkChild(t.modelCursor,"$text")){if(i.consumable.consume(t.viewItem)){const e=i.writer.createText(t.viewItem.data);i.writer.insert(e,t.modelCursor);t.modelRange=Kh._createFromPositionAndShift(t.modelCursor,e.offsetSize);t.modelCursor=t.modelRange.end}}}}function Qf(e,t){return(i,n)=>{const o=n.newSelection;const r=new tf;const s=[];for(const e of o.getRanges()){s.push(t.toModelRange(e))}r.setTo(s,{backward:o.isBackward});if(!r.isEqual(e.document.selection)){e.change(e=>{e.setSelection(r)})}}}function Zf(e){e=yf(e);const t=nm(e);const i=im(e.view);const n=i?"element:"+i:"element";return i=>{i.on(n,t,{priority:e.converterPriority||"normal"})}}function Xf(e){e=yf(e);sm(e);const t=am(e,false);const i=im(e.view);const n=i?"element:"+i:"element";return i=>{i.on(n,t,{priority:e.converterPriority||"low"})}}function em(e){e=yf(e);let t=null;if(typeof e.view=="string"||e.view.key){t=rm(e)}sm(e,t);const i=am(e,true);return t=>{t.on("element",i,{priority:e.converterPriority||"low"})}}function tm(e){e=yf(e);dm(e);return Zf(e)}function im(e){if(typeof e=="string"){return e}if(typeof e=="object"&&typeof e.name=="string"){return e.name}return null}function nm(e){const t=e.view?new Us(e.view):null;return(i,n,o)=>{let r={};if(t){const e=t.match(n.viewItem);if(!e){return}r=e.match}r.name=true;const s=om(e.model,n.viewItem,o.writer);if(!s){return}if(!o.consumable.test(n.viewItem,r)){return}const a=o.splitToAllowedParent(s,n.modelCursor);if(!a){return}o.writer.insert(s,a.position);o.convertChildren(n.viewItem,o.writer.createPositionAt(s,0));o.consumable.consume(n.viewItem,r);const l=o.getSplitParts(s);n.modelRange=new Kh(o.writer.createPositionBefore(s),o.writer.createPositionAfter(l[l.length-1]));if(a.cursorParent){n.modelCursor=o.writer.createPositionAt(a.cursorParent,0)}else{n.modelCursor=n.modelRange.end}}}function om(e,t,i){if(e instanceof Function){return e(t,i)}else{return i.createElement(e)}}function rm(e){if(typeof e.view=="string"){e.view={key:e.view}}const t=e.view.key;let i;if(t=="class"||t=="style"){const n=t=="class"?"classes":"styles";i={[n]:e.view.value}}else{const n=typeof e.view.value=="undefined"?/[\s\S]*/:e.view.value;i={attributes:{[t]:n}}}if(e.view.name){i.name=e.view.name}e.view=i;return t}function sm(e,t=null){const i=t===null?true:e=>e.getAttribute(t);const n=typeof e.model!="object"?e.model:e.model.key;const o=typeof e.model!="object"||typeof e.model.value=="undefined"?i:e.model.value;e.model={key:n,value:o}}function am(e,t){const i=new Us(e.view);return(n,o,r)=>{const s=i.match(o.viewItem);if(!s){return}const a=e.model.key;const l=typeof e.model.value=="function"?e.model.value(o.viewItem):e.model.value;if(l===null){return}if(lm(e.view,o.viewItem)){s.match.name=true}else{delete s.match.name}if(!r.consumable.test(o.viewItem,s.match)){return}if(!o.modelRange){o=Object.assign(o,r.convertChildren(o.viewItem,o.modelCursor))}const c=cm(o.modelRange,{key:a,value:l},t,r);if(c){r.consumable.consume(o.viewItem,s.match)}}}function lm(e,t){const i=typeof e=="function"?e(t):e;if(typeof i=="object"&&!im(i)){return false}return!i.classes&&!i.attributes&&!i.styles}function cm(e,t,i,n){let o=false;for(const r of Array.from(e.getItems({shallow:i}))){if(n.schema.checkAttribute(r,t.key)){n.writer.setAttribute(t.key,t.value,r);o=true}}return o}function dm(e){const t=e.model;e.model=(e,i)=>{const n=typeof t=="string"?t:t(e);return i.createElement("$marker",{"data-name":n})}}class um{constructor(e,t){this.model=e;this.view=new zh(t);this.mapper=new Jh;this.downcastDispatcher=new Xh({mapper:this.mapper});const i=this.model.document;const n=i.selection;const o=this.model.markers;this.listenTo(this.model,"_beforeChanges",()=>{this.view._disableRendering(true)},{priority:"highest"});this.listenTo(this.model,"_afterChanges",()=>{this.view._disableRendering(false)},{priority:"lowest"});this.listenTo(i,"change",()=>{this.view.change(e=>{this.downcastDispatcher.convertChanges(i.differ,o,e);this.downcastDispatcher.convertSelection(n,o,e)})},{priority:"low"});this.listenTo(this.view.document,"selectionChange",Qf(this.model,this.mapper));this.downcastDispatcher.on("insert:$text",Af(),{priority:"lowest"});this.downcastDispatcher.on("remove",Cf(),{priority:"low"});this.downcastDispatcher.on("selection",Mf(),{priority:"low"});this.downcastDispatcher.on("selection",Ef(),{priority:"low"});this.downcastDispatcher.on("selection",Pf(),{priority:"low"});this.view.document.roots.bindTo(this.model.document.roots).using(e=>{if(e.rootName=="$graveyard"){return null}const t=new cc(this.view.document,e.name);t.rootName=e.rootName;this.mapper.bindElements(e,t);return t})}destroy(){this.view.destroy();this.stopListening()}}ys(um,Jl);class hm{constructor(){this._commands=new Map}add(e,t){this._commands.set(e,t)}get(e){return this._commands.get(e)}execute(e,...t){const i=this.get(e);if(!i){throw new ss["b"]("commandcollection-command-not-found: Command does not exist.",this,{commandName:e})}i.execute(...t)}*names(){yield*this._commands.keys()}*commands(){yield*this._commands.values()}[Symbol.iterator](){return this._commands[Symbol.iterator]()}destroy(){for(const e of this.commands()){e.destroy()}}}class fm{constructor(){this._consumables=new Map}add(e,t){let i;if(e.is("text")||e.is("documentFragment")){this._consumables.set(e,true);return}if(!this._consumables.has(e)){i=new mm(e);this._consumables.set(e,i)}else{i=this._consumables.get(e)}i.add(t)}test(e,t){const i=this._consumables.get(e);if(i===undefined){return null}if(e.is("text")||e.is("documentFragment")){return i}return i.test(t)}consume(e,t){if(this.test(e,t)){if(e.is("text")||e.is("documentFragment")){this._consumables.set(e,false)}else{this._consumables.get(e).consume(t)}return true}return false}revert(e,t){const i=this._consumables.get(e);if(i!==undefined){if(e.is("text")||e.is("documentFragment")){this._consumables.set(e,true)}else{i.revert(t)}}}static consumablesFromElement(e){const t={element:e,name:true,attributes:[],classes:[],styles:[]};const i=e.getAttributeKeys();for(const e of i){if(e=="style"||e=="class"){continue}t.attributes.push(e)}const n=e.getClassNames();for(const e of n){t.classes.push(e)}const o=e.getStyleNames();for(const e of o){t.styles.push(e)}return t}static createFrom(e,t){if(!t){t=new fm(e)}if(e.is("text")){t.add(e);return t}if(e.is("element")){t.add(e,fm.consumablesFromElement(e))}if(e.is("documentFragment")){t.add(e)}for(const i of e.getChildren()){t=fm.createFrom(i,t)}return t}}class mm{constructor(e){this.element=e;this._canConsumeName=null;this._consumables={attributes:new Map,styles:new Map,classes:new Map}}add(e){if(e.name){this._canConsumeName=true}for(const t in this._consumables){if(t in e){this._add(t,e[t])}}}test(e){if(e.name&&!this._canConsumeName){return this._canConsumeName}for(const t in this._consumables){if(t in e){const i=this._test(t,e[t]);if(i!==true){return i}}}return true}consume(e){if(e.name){this._canConsumeName=false}for(const t in this._consumables){if(t in e){this._consume(t,e[t])}}}revert(e){if(e.name){this._canConsumeName=true}for(const t in this._consumables){if(t in e){this._revert(t,e[t])}}}_add(e,t){const i=Kt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e==="attributes"&&(t==="class"||t==="style")){throw new ss["b"]("viewconsumable-invalid-attribute: Classes and styles should be handled separately.",this)}n.set(t,true);if(e==="styles"){for(const e of this.element.document.stylesProcessor.getRelatedStyles(t)){n.set(e,true)}}}}_test(e,t){const i=Kt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e==="attributes"&&(t==="class"||t==="style")){const e=t=="class"?"classes":"styles";const i=this._test(e,[...this._consumables[e].keys()]);if(i!==true){return i}}else{const e=n.get(t);if(e===undefined){return null}if(!e){return false}}}return true}_consume(e,t){const i=Kt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e==="attributes"&&(t==="class"||t==="style")){const e=t=="class"?"classes":"styles";this._consume(e,[...this._consumables[e].keys()])}else{n.set(t,false);if(e=="styles"){for(const e of this.element.document.stylesProcessor.getRelatedStyles(t)){n.set(e,false)}}}}}_revert(e,t){const i=Kt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e==="attributes"&&(t==="class"||t==="style")){const e=t=="class"?"classes":"styles";this._revert(e,[...this._consumables[e].keys()])}else{const e=n.get(t);if(e===false){n.set(t,true)}}}}}class gm{constructor(){this._sourceDefinitions={};this._attributeProperties={};this.decorate("checkChild");this.decorate("checkAttribute");this.on("checkAttribute",(e,t)=>{t[0]=new pm(t[0])},{priority:"highest"});this.on("checkChild",(e,t)=>{t[0]=new pm(t[0]);t[1]=this.getDefinition(t[1])},{priority:"highest"})}register(e,t){if(this._sourceDefinitions[e]){throw new ss["b"]("schema-cannot-register-item-twice: A single item cannot be registered twice in the schema.",this,{itemName:e})}this._sourceDefinitions[e]=[Object.assign({},t)];this._clearCache()}extend(e,t){if(!this._sourceDefinitions[e]){throw new ss["b"]("schema-cannot-extend-missing-item: Cannot extend an item which was not registered yet.",this,{itemName:e})}this._sourceDefinitions[e].push(Object.assign({},t));this._clearCache()}getDefinitions(){if(!this._compiledDefinitions){this._compile()}return this._compiledDefinitions}getDefinition(e){let t;if(typeof e=="string"){t=e}else if(e.is&&(e.is("text")||e.is("textProxy"))){t="$text"}else{t=e.name}return this.getDefinitions()[t]}isRegistered(e){return!!this.getDefinition(e)}isBlock(e){const t=this.getDefinition(e);return!!(t&&t.isBlock)}isLimit(e){const t=this.getDefinition(e);if(!t){return false}return!!(t.isLimit||t.isObject)}isObject(e){const t=this.getDefinition(e);return!!(t&&t.isObject)}isInline(e){const t=this.getDefinition(e);return!!(t&&t.isInline)}checkChild(e,t){if(!t){return false}return this._checkContextMatch(t,e)}checkAttribute(e,t){const i=this.getDefinition(e.last);if(!i){return false}return i.allowAttributes.includes(t)}checkMerge(e,t=null){if(e instanceof qh){const t=e.nodeBefore;const i=e.nodeAfter;if(!(t instanceof Fh)){throw new ss["b"]("schema-check-merge-no-element-before: The node before the merge position must be an element.",this)}if(!(i instanceof Fh)){throw new ss["b"]("schema-check-merge-no-element-after: The node after the merge position must be an element.",this)}return this.checkMerge(t,i)}for(const i of t.getChildren()){if(!this.checkChild(e,i)){return false}}return true}addChildCheck(e){this.on("checkChild",(t,[i,n])=>{if(!n){return}const o=e(i,n);if(typeof o=="boolean"){t.stop();t.return=o}},{priority:"high"})}addAttributeCheck(e){this.on("checkAttribute",(t,[i,n])=>{const o=e(i,n);if(typeof o=="boolean"){t.stop();t.return=o}},{priority:"high"})}setAttributeProperties(e,t){this._attributeProperties[e]=Object.assign(this.getAttributeProperties(e),t)}getAttributeProperties(e){return this._attributeProperties[e]||{}}getLimitElement(e){let t;if(e instanceof qh){t=e.parent}else{const i=e instanceof Kh?[e]:Array.from(e.getRanges());t=i.reduce((e,t)=>{const i=t.getCommonAncestor();if(!e){return i}return e.getCommonAncestor(i,{includeSelf:true})},null)}while(!this.isLimit(t)){if(t.parent){t=t.parent}else{break}}return t}checkAttributeInSelection(e,t){if(e.isCollapsed){const i=e.getFirstPosition();const n=[...i.getAncestors(),new jh("",e.getAttributes())];return this.checkAttribute(n,t)}else{const i=e.getRanges();for(const e of i){for(const i of e){if(this.checkAttribute(i.item,t)){return true}}}}return false}*getValidRanges(e,t){e=Im(e);for(const i of e){yield*this._getValidRangesForRange(i,t)}}getNearestSelectionRange(e,t="both"){if(this.checkChild(e,"$text")){return new Kh(e)}let i,n;const o=e.getAncestors().reverse().find(e=>this.isLimit(e))||e.root;if(t=="both"||t=="backward"){i=new Wh({boundaries:Kh._createIn(o),startPosition:e,direction:"backward"})}if(t=="both"||t=="forward"){n=new Wh({boundaries:Kh._createIn(o),startPosition:e})}for(const e of Sm(i,n)){const t=e.walker==i?"elementEnd":"elementStart";const n=e.value;if(n.type==t&&this.isObject(n.item)){return Kh._createOn(n.item)}if(this.checkChild(n.nextPosition,"$text")){return new Kh(n.nextPosition)}}return null}findAllowedParent(e,t){let i=e.parent;while(i){if(this.checkChild(i,t)){return i}if(this.isLimit(i)){return null}i=i.parent}return null}removeDisallowedAttributes(e,t){for(const i of e){if(i.is("text")){Lm(this,i,t)}else{const e=Kh._createIn(i);const n=e.getPositions();for(const e of n){const i=e.nodeBefore||e.parent;Lm(this,i,t)}}}}createContext(e){return new pm(e)}_clearCache(){this._compiledDefinitions=null}_compile(){const e={};const t=this._sourceDefinitions;const i=Object.keys(t);for(const n of i){e[n]=bm(t[n],n)}for(const t of i){wm(e,t)}for(const t of i){_m(e,t)}for(const t of i){km(e,t);vm(e,t)}for(const t of i){ym(e,t);xm(e,t)}this._compiledDefinitions=e}_checkContextMatch(e,t,i=t.length-1){const n=t.getItem(i);if(e.allowIn.includes(n.name)){if(i==0){return true}else{const e=this.getDefinition(n);return this._checkContextMatch(e,t,i-1)}}else{return false}}*_getValidRangesForRange(e,t){let i=e.start;let n=e.start;for(const o of e.getItems({shallow:true})){if(o.is("element")){yield*this._getValidRangesForRange(Kh._createIn(o),t)}if(!this.checkAttribute(o,t)){if(!i.isEqual(n)){yield new Kh(i,n)}i=qh._createAfter(o)}n=qh._createAfter(o)}if(!i.isEqual(n)){yield new Kh(i,n)}}}ys(gm,Jl);class pm{constructor(e){if(e instanceof pm){return e}if(typeof e=="string"){e=[e]}else if(!Array.isArray(e)){e=e.getAncestors({includeSelf:true})}if(e[0]&&typeof e[0]!="string"&&e[0].is("documentFragment")){e.shift()}this._items=e.map(Mm)}get length(){return this._items.length}get last(){return this._items[this._items.length-1]}[Symbol.iterator](){return this._items[Symbol.iterator]()}push(e){const t=new pm([e]);t._items=[...this._items,...t._items];return t}getItem(e){return this._items[e]}*getNames(){yield*this._items.map(e=>e.name)}endsWith(e){return Array.from(this.getNames()).join(" ").endsWith(e)}startsWith(e){return Array.from(this.getNames()).join(" ").startsWith(e)}}function bm(e,t){const i={name:t,allowIn:[],allowContentOf:[],allowWhere:[],allowAttributes:[],allowAttributesOf:[],inheritTypesFrom:[]};Am(e,i);Cm(e,i,"allowIn");Cm(e,i,"allowContentOf");Cm(e,i,"allowWhere");Cm(e,i,"allowAttributes");Cm(e,i,"allowAttributesOf");Cm(e,i,"inheritTypesFrom");Tm(e,i);return i}function wm(e,t){for(const i of e[t].allowContentOf){if(e[i]){const n=Em(e,i);n.forEach(e=>{e.allowIn.push(t)})}}delete e[t].allowContentOf}function _m(e,t){for(const i of e[t].allowWhere){const n=e[i];if(n){const i=n.allowIn;e[t].allowIn.push(...i)}}delete e[t].allowWhere}function km(e,t){for(const i of e[t].allowAttributesOf){const n=e[i];if(n){const i=n.allowAttributes;e[t].allowAttributes.push(...i)}}delete e[t].allowAttributesOf}function vm(e,t){const i=e[t];for(const t of i.inheritTypesFrom){const n=e[t];if(n){const e=Object.keys(n).filter(e=>e.startsWith("is"));for(const t of e){if(!(t in i)){i[t]=n[t]}}}}delete i.inheritTypesFrom}function ym(e,t){const i=e[t];const n=i.allowIn.filter(t=>e[t]);i.allowIn=Array.from(new Set(n))}function xm(e,t){const i=e[t];i.allowAttributes=Array.from(new Set(i.allowAttributes))}function Am(e,t){for(const i of e){const e=Object.keys(i).filter(e=>e.startsWith("is"));for(const n of e){t[n]=i[n]}}}function Cm(e,t,i){for(const n of e){if(typeof n[i]=="string"){t[i].push(n[i])}else if(Array.isArray(n[i])){t[i].push(...n[i])}}}function Tm(e,t){for(const i of e){const e=i.inheritAllFrom;if(e){t.allowContentOf.push(e);t.allowWhere.push(e);t.allowAttributesOf.push(e);t.inheritTypesFrom.push(e)}}}function Em(e,t){const i=e[t];return Pm(e).filter(e=>e.allowIn.includes(i.name))}function Pm(e){return Object.keys(e).map(t=>e[t])}function Mm(e){if(typeof e=="string"){return{name:e,*getAttributeKeys(){},getAttribute(){}}}else{return{name:e.is("element")?e.name:"$text",*getAttributeKeys(){yield*e.getAttributeKeys()},getAttribute(t){return e.getAttribute(t)}}}}function*Sm(e,t){let i=false;while(!i){i=true;if(e){const t=e.next();if(!t.done){i=false;yield{walker:e,value:t.value}}}if(t){const e=t.next();if(!e.done){i=false;yield{walker:t,value:e.value}}}}}function*Im(e){for(const t of e){yield*t.getMinimalFlatRanges()}}function Lm(e,t,i){for(const n of t.getAttributeKeys()){if(!e.checkAttribute(t,n)){i.removeAttribute(n,t)}}}class Nm{constructor(e={}){this._splitParts=new Map;this._modelCursor=null;this.conversionApi=Object.assign({},e);this.conversionApi.convertItem=this._convertItem.bind(this);this.conversionApi.convertChildren=this._convertChildren.bind(this);this.conversionApi.splitToAllowedParent=this._splitToAllowedParent.bind(this);this.conversionApi.getSplitParts=this._getSplitParts.bind(this)}convert(e,t,i=["$root"]){this.fire("viewCleanup",e);this._modelCursor=Rm(i,t);this.conversionApi.writer=t;this.conversionApi.consumable=fm.createFrom(e);this.conversionApi.store={};const{modelRange:n}=this._convertItem(e,this._modelCursor);const o=t.createDocumentFragment();if(n){this._removeEmptyElements();for(const e of Array.from(this._modelCursor.parent.getChildren())){t.append(e,o)}o.markers=Om(o,t)}this._modelCursor=null;this._splitParts.clear();this.conversionApi.writer=null;this.conversionApi.store=null;return o}_convertItem(e,t){const i=Object.assign({viewItem:e,modelCursor:t,modelRange:null});if(e.is("element")){this.fire("element:"+e.name,i,this.conversionApi)}else if(e.is("text")){this.fire("text",i,this.conversionApi)}else{this.fire("documentFragment",i,this.conversionApi)}if(i.modelRange&&!(i.modelRange instanceof Kh)){throw new ss["b"]("view-conversion-dispatcher-incorrect-result: Incorrect conversion result was dropped.",this)}return{modelRange:i.modelRange,modelCursor:i.modelCursor}}_convertChildren(e,t){const i=new Kh(t);let n=t;for(const t of Array.from(e.getChildren())){const e=this._convertItem(t,n);if(e.modelRange instanceof Kh){i.end=e.modelRange.end;n=e.modelCursor}}return{modelRange:i,modelCursor:n}}_splitToAllowedParent(e,t){const i=this.conversionApi.schema.findAllowedParent(t,e);if(!i){return null}if(i===t.parent){return{position:t}}if(this._modelCursor.parent.getAncestors().includes(i)){return null}const n=this.conversionApi.writer.split(t,i);const o=[];for(const e of n.range.getWalker()){if(e.type=="elementEnd"){o.push(e.item)}else{const t=o.pop();const i=e.item;this._registerSplitPair(t,i)}}return{position:n.position,cursorParent:n.range.end.parent}}_registerSplitPair(e,t){if(!this._splitParts.has(e)){this._splitParts.set(e,[e])}const i=this._splitParts.get(e);this._splitParts.set(t,i);i.push(t)}_getSplitParts(e){let t;if(!this._splitParts.has(e)){t=[e]}else{t=this._splitParts.get(e)}return t}_removeEmptyElements(){let e=false;for(const t of this._splitParts.keys()){if(t.isEmpty){this.conversionApi.writer.remove(t);this._splitParts.delete(t);e=true}}if(e){this._removeEmptyElements()}}}ys(Nm,ds);function Om(e,t){const i=new Set;const n=new Map;const o=Kh._createIn(e).getItems();for(const e of o){if(e.name=="$marker"){i.add(e)}}for(const e of i){const i=e.getAttribute("data-name");const o=t.createPositionBefore(e);if(!n.has(i)){n.set(i,new Kh(o.clone()))}else{n.get(i).end=o.clone()}t.remove(e)}return n}function Rm(e,t){let i;for(const n of new pm(e)){const e={};for(const t of n.getAttributeKeys()){e[t]=n.getAttribute(t)}const o=t.createElement(n.name,e);if(i){t.append(o,i)}i=qh._createAt(o,0)}return i}class zm{constructor(e,t){this.model=e;this.stylesProcessor=t;this.processor;this.mapper=new Jh;this.downcastDispatcher=new Xh({mapper:this.mapper});this.downcastDispatcher.on("insert:$text",Af(),{priority:"lowest"});this.upcastDispatcher=new Nm({schema:e.schema});this.viewDocument=new bc(t);this._viewWriter=new $c(this.viewDocument);this.upcastDispatcher.on("text",Jf(),{priority:"lowest"});this.upcastDispatcher.on("element",Kf(),{priority:"lowest"});this.upcastDispatcher.on("documentFragment",Kf(),{priority:"lowest"});this.decorate("init");this.on("init",()=>{this.fire("ready")},{priority:"lowest"})}get(e){const{rootName:t="main",trim:i="empty"}=e||{};if(!this._checkIfRootsExists([t])){throw new ss["b"]("datacontroller-get-non-existent-root: Attempting to get data from a non-existing root.",this)}const n=this.model.document.getRoot(t);if(i==="empty"&&!this.model.hasContent(n,{ignoreWhitespaces:true})){return""}return this.stringify(n)}stringify(e){const t=this.toView(e);return this.processor.toData(t)}toView(e){const t=this.viewDocument;const i=this._viewWriter;this.mapper.clearBindings();const n=Kh._createIn(e);const o=new Uc(t);this.mapper.bindElements(e,o);this.downcastDispatcher.convertInsert(n,i);if(!e.is("documentFragment")){const t=Dm(e);for(const[e,n]of t){this.downcastDispatcher.convertMarkerAdd(e,n,i)}}return o}init(e){if(this.model.document.version){throw new ss["b"]("datacontroller-init-document-not-empty: Trying to set initial data to not empty document.",this)}let t={};if(typeof e==="string"){t.main=e}else{t=e}if(!this._checkIfRootsExists(Object.keys(t))){throw new ss["b"]("datacontroller-init-non-existent-root: Attempting to init data on a non-existing root.",this)}this.model.enqueueChange("transparent",e=>{for(const i of Object.keys(t)){const n=this.model.document.getRoot(i);e.insert(this.parse(t[i],n),n,0)}});return Promise.resolve()}set(e){let t={};if(typeof e==="string"){t.main=e}else{t=e}if(!this._checkIfRootsExists(Object.keys(t))){throw new ss["b"]("datacontroller-set-non-existent-root: Attempting to set data on a non-existing root.",this)}this.model.enqueueChange("transparent",e=>{e.setSelection(null);e.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());for(const i of Object.keys(t)){const n=this.model.document.getRoot(i);e.remove(e.createRangeIn(n));e.insert(this.parse(t[i],n),n,0)}})}parse(e,t="$root"){const i=this.processor.toView(e);return this.toModel(i,t)}toModel(e,t="$root"){return this.model.change(i=>this.upcastDispatcher.convert(e,i,t))}addStyleProcessorRules(e){e(this.stylesProcessor)}destroy(){this.stopListening()}_checkIfRootsExists(e){for(const t of e){if(!this.model.document.getRootNames().includes(t)){return false}}return true}}ys(zm,Jl);function Dm(e){const t=[];const i=e.root.document;if(!i){return[]}const n=Kh._createIn(e);for(const e of i.model.markers){const i=n.getIntersection(e.getRange());if(i){t.push([e.name,i])}}return t}class jm{constructor(e,t){this._helpers=new Map;this._downcast=Array.isArray(e)?e:[e];this._createConversionHelpers({name:"downcast",dispatchers:this._downcast,isDowncast:true});this._upcast=Array.isArray(t)?t:[t];this._createConversionHelpers({name:"upcast",dispatchers:this._upcast,isDowncast:false})}addAlias(e,t){const i=this._downcast.includes(t);const n=this._upcast.includes(t);if(!n&&!i){throw new ss["b"]("conversion-add-alias-dispatcher-not-registered: "+"Trying to register and alias for a dispatcher that nas not been registered.",this)}this._createConversionHelpers({name:e,dispatchers:[t],isDowncast:i})}for(e){if(!this._helpers.has(e)){throw new ss["b"]("conversion-for-unknown-group: Trying to add a converter to an unknown dispatchers group.",this)}return this._helpers.get(e)}elementToElement(e){this.for("downcast").elementToElement(e);for(const{model:t,view:i}of Bm(e)){this.for("upcast").elementToElement({model:t,view:i,converterPriority:e.converterPriority})}}attributeToElement(e){this.for("downcast").attributeToElement(e);for(const{model:t,view:i}of Bm(e)){this.for("upcast").elementToAttribute({view:i,model:t,converterPriority:e.converterPriority})}}attributeToAttribute(e){this.for("downcast").attributeToAttribute(e);for(const{model:t,view:i}of Bm(e)){this.for("upcast").attributeToAttribute({view:i,model:t})}}_createConversionHelpers({name:e,dispatchers:t,isDowncast:i}){if(this._helpers.has(e)){throw new ss["b"]("conversion-group-exists: Trying to register a group name that has already been registered.",this)}const n=i?new xf(t):new Yf(t);this._helpers.set(e,n)}}function*Bm(e){if(e.model.values){for(const t of e.model.values){const i={key:e.model.key,value:t};const n=e.view[t];const o=e.upcastAlso?e.upcastAlso[t]:undefined;yield*Vm(i,n,o)}}else{yield*Vm(e.model,e.view,e.upcastAlso)}}function*Vm(e,t,i){yield{model:e,view:t};if(i){i=Array.isArray(i)?i:[i];for(const t of i){yield{model:e,view:t}}}}class Fm{constructor(e="default"){this.operations=[];this.type=e}get baseVersion(){for(const e of this.operations){if(e.baseVersion!==null){return e.baseVersion}}return null}addOperation(e){e.batch=this;this.operations.push(e);return e}}class Hm{constructor(e){this.baseVersion=e;this.isDocumentOperation=this.baseVersion!==null;this.batch=null}_validate(){}toJSON(){const e=Object.assign({},this);e.__className=this.constructor.className;delete e.batch;delete e.isDocumentOperation;return e}static get className(){return"Operation"}static fromJSON(e){return new this(e.baseVersion)}}class Wm{constructor(e){this.markers=new Map;this._children=new Vh;if(e){this._insertChild(0,e)}}[Symbol.iterator](){return this.getChildren()}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}is(e){return e==="documentFragment"||e==="model:documentFragment"}getChild(e){return this._children.getNode(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}getPath(){return[]}getNodeByPath(e){let t=this;for(const i of e){t=t.getChild(t.offsetToIndex(i))}return t}offsetToIndex(e){return this._children.offsetToIndex(e)}toJSON(){const e=[];for(const t of this._children){e.push(t.toJSON())}return e}static fromJSON(e){const t=[];for(const i of e){if(i.name){t.push(Fh.fromJSON(i))}else{t.push(jh.fromJSON(i))}}return new Wm(t)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){const i=Um(t);for(const e of i){if(e.parent!==null){e._remove()}e.parent=this}this._children._insertNodes(e,i)}_removeChildren(e,t=1){const i=this._children._removeNodes(e,t);for(const e of i){e.parent=null}return i}}function Um(e){if(typeof e=="string"){return[new jh(e)]}if(!vs(e)){e=[e]}return Array.from(e).map(e=>{if(typeof e=="string"){return new jh(e)}if(e instanceof Bh){return new jh(e.data,e.getAttributes())}return e})}function qm(e,t){t=Km(t);const i=t.reduce((e,t)=>e+t.offsetSize,0);const n=e.parent;Qm(e);const o=e.index;n._insertChild(o,t);Jm(n,o+t.length);Jm(n,o);return new Kh(e,e.getShiftedBy(i))}function $m(e){if(!e.isFlat){throw new ss["b"]("operation-utils-remove-range-not-flat: "+"Trying to remove a range which starts and ends in different element.",this)}const t=e.start.parent;Qm(e.start);Qm(e.end);const i=t._removeChildren(e.start.index,e.end.index-e.start.index);Jm(t,e.start.index);return i}function Gm(e,t){if(!e.isFlat){throw new ss["b"]("operation-utils-move-range-not-flat: "+"Trying to move a range which starts and ends in different element.",this)}const i=$m(e);t=t._getTransformedByDeletion(e.start,e.end.offset-e.start.offset);return qm(t,i)}function Ym(e,t,i){Qm(e.start);Qm(e.end);for(const n of e.getItems({shallow:true})){const e=n.is("textProxy")?n.textNode:n;if(i!==null){e._setAttribute(t,i)}else{e._removeAttribute(t)}Jm(e.parent,e.index)}Jm(e.end.parent,e.end.index)}function Km(e){const t=[];if(!(e instanceof Array)){e=[e]}for(let i=0;ie.maxOffset){throw new ss["b"]("move-operation-nodes-do-not-exist: The nodes which should be moved do not exist.",this)}else if(e===t&&i=i&&this.targetPosition.path[e]e._clone(true)));const t=new og(this.position,e,this.baseVersion);t.shouldReceiveAttributes=this.shouldReceiveAttributes;return t}getReversed(){const e=this.position.root.document.graveyard;const t=new qh(e,[0]);return new ng(this.position,this.nodes.maxOffset,t,this.baseVersion+1)}_validate(){const e=this.position.parent;if(!e||e.maxOffsete._clone(true)));qm(this.position,e)}toJSON(){const e=super.toJSON();e.position=this.position.toJSON();e.nodes=this.nodes.toJSON();return e}static get className(){return"InsertOperation"}static fromJSON(e,t){const i=[];for(const t of e.nodes){if(t.name){i.push(Fh.fromJSON(t))}else{i.push(jh.fromJSON(t))}}const n=new og(qh.fromJSON(e.position,t),i,e.baseVersion);n.shouldReceiveAttributes=e.shouldReceiveAttributes;return n}}class rg extends Hm{constructor(e,t,i,n,o,r){super(r);this.name=e;this.oldRange=t?t.clone():null;this.newRange=i?i.clone():null;this.affectsData=o;this._markers=n}get type(){return"marker"}clone(){return new rg(this.name,this.oldRange,this.newRange,this._markers,this.affectsData,this.baseVersion)}getReversed(){return new rg(this.name,this.newRange,this.oldRange,this._markers,this.affectsData,this.baseVersion+1)}_execute(){const e=this.newRange?"_set":"_remove";this._markers[e](this.name,this.newRange,true,this.affectsData)}toJSON(){const e=super.toJSON();if(this.oldRange){e.oldRange=this.oldRange.toJSON()}if(this.newRange){e.newRange=this.newRange.toJSON()}delete e._markers;return e}static get className(){return"MarkerOperation"}static fromJSON(e,t){return new rg(e.name,e.oldRange?Kh.fromJSON(e.oldRange,t):null,e.newRange?Kh.fromJSON(e.newRange,t):null,t.model.markers,e.affectsData,e.baseVersion)}}class sg extends Hm{constructor(e,t,i,n){super(n);this.position=e;this.position.stickiness="toNext";this.oldName=t;this.newName=i}get type(){return"rename"}clone(){return new sg(this.position.clone(),this.oldName,this.newName,this.baseVersion)}getReversed(){return new sg(this.position.clone(),this.newName,this.oldName,this.baseVersion+1)}_validate(){const e=this.position.nodeAfter;if(!(e instanceof Fh)){throw new ss["b"]("rename-operation-wrong-position: Given position is invalid or node after it is not an instance of Element.",this)}else if(e.name!==this.oldName){throw new ss["b"]("rename-operation-wrong-name: Element to change has different name than operation's old name.",this)}}_execute(){const e=this.position.nodeAfter;e.name=this.newName}toJSON(){const e=super.toJSON();e.position=this.position.toJSON();return e}static get className(){return"RenameOperation"}static fromJSON(e,t){return new sg(qh.fromJSON(e.position,t),e.oldName,e.newName,e.baseVersion)}}class ag extends Hm{constructor(e,t,i,n,o){super(o);this.root=e;this.key=t;this.oldValue=i;this.newValue=n}get type(){if(this.oldValue===null){return"addRootAttribute"}else if(this.newValue===null){return"removeRootAttribute"}else{return"changeRootAttribute"}}clone(){return new ag(this.root,this.key,this.oldValue,this.newValue,this.baseVersion)}getReversed(){return new ag(this.root,this.key,this.newValue,this.oldValue,this.baseVersion+1)}_validate(){if(this.root!=this.root.root||this.root.is("documentFragment")){throw new ss["b"]("rootattribute-operation-not-a-root: The element to change is not a root element.",this,{root:this.root,key:this.key})}if(this.oldValue!==null&&this.root.getAttribute(this.key)!==this.oldValue){throw new ss["b"]("rootattribute-operation-wrong-old-value: Changed node has different attribute value than operation's "+"old attribute value.",this,{root:this.root,key:this.key})}if(this.oldValue===null&&this.newValue!==null&&this.root.hasAttribute(this.key)){throw new ss["b"]("rootattribute-operation-attribute-exists: The attribute with given key already exists.",this,{root:this.root,key:this.key})}}_execute(){if(this.newValue!==null){this.root._setAttribute(this.key,this.newValue)}else{this.root._removeAttribute(this.key)}}toJSON(){const e=super.toJSON();e.root=this.root.toJSON();return e}static get className(){return"RootAttributeOperation"}static fromJSON(e,t){if(!t.getRoot(e.root)){throw new ss["b"]("rootattribute-operation-fromjson-no-root: Cannot create RootAttributeOperation. Root with specified name does not exist.",this,{rootName:e.root})}return new ag(t.getRoot(e.root),e.key,e.oldValue,e.newValue,e.baseVersion)}}class lg extends Hm{constructor(e,t,i,n,o){super(o);this.sourcePosition=e.clone();this.sourcePosition.stickiness="toPrevious";this.howMany=t;this.targetPosition=i.clone();this.targetPosition.stickiness="toNext";this.graveyardPosition=n.clone()}get type(){return"merge"}get deletionPosition(){return new qh(this.sourcePosition.root,this.sourcePosition.path.slice(0,-1))}get movedRange(){const e=this.sourcePosition.getShiftedBy(Number.POSITIVE_INFINITY);return new Kh(this.sourcePosition,e)}clone(){return new this.constructor(this.sourcePosition,this.howMany,this.targetPosition,this.graveyardPosition,this.baseVersion)}getReversed(){const e=this.targetPosition._getTransformedByMergeOperation(this);const t=this.sourcePosition.path.slice(0,-1);const i=new qh(this.sourcePosition.root,t)._getTransformedByMergeOperation(this);const n=new cg(e,this.howMany,this.graveyardPosition,this.baseVersion+1);n.insertionPosition=i;return n}_validate(){const e=this.sourcePosition.parent;const t=this.targetPosition.parent;if(!e.parent){throw new ss["b"]("merge-operation-source-position-invalid: Merge source position is invalid.",this)}else if(!t.parent){throw new ss["b"]("merge-operation-target-position-invalid: Merge target position is invalid.",this)}else if(this.howMany!=e.maxOffset){throw new ss["b"]("merge-operation-how-many-invalid: Merge operation specifies wrong number of nodes to move.",this)}}_execute(){const e=this.sourcePosition.parent;const t=Kh._createIn(e);Gm(t,this.targetPosition);Gm(Kh._createOn(e),this.graveyardPosition)}toJSON(){const e=super.toJSON();e.sourcePosition=e.sourcePosition.toJSON();e.targetPosition=e.targetPosition.toJSON();e.graveyardPosition=e.graveyardPosition.toJSON();return e}static get className(){return"MergeOperation"}static fromJSON(e,t){const i=qh.fromJSON(e.sourcePosition,t);const n=qh.fromJSON(e.targetPosition,t);const o=qh.fromJSON(e.graveyardPosition,t);return new this(i,e.howMany,n,o,e.baseVersion)}}class cg extends Hm{constructor(e,t,i,n){super(n);this.splitPosition=e.clone();this.splitPosition.stickiness="toNext";this.howMany=t;this.insertionPosition=cg.getInsertionPosition(e);this.insertionPosition.stickiness="toNone";this.graveyardPosition=i?i.clone():null;if(this.graveyardPosition){this.graveyardPosition.stickiness="toNext"}}get type(){return"split"}get moveTargetPosition(){const e=this.insertionPosition.path.slice();e.push(0);return new qh(this.insertionPosition.root,e)}get movedRange(){const e=this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);return new Kh(this.splitPosition,e)}clone(){const e=new this.constructor(this.splitPosition,this.howMany,this.graveyardPosition,this.baseVersion);e.insertionPosition=this.insertionPosition;return e}getReversed(){const e=this.splitPosition.root.document.graveyard;const t=new qh(e,[0]);return new lg(this.moveTargetPosition,this.howMany,this.splitPosition,t,this.baseVersion+1)}_validate(){const e=this.splitPosition.parent;const t=this.splitPosition.offset;if(!e||e.maxOffset{for(const t of e.getAttributeKeys()){this.removeAttribute(t,e)}};if(!(e instanceof Kh)){t(e)}else{for(const i of e.getItems()){t(i)}}}move(e,t,i){this._assertWriterUsedCorrectly();if(!(e instanceof Kh)){throw new ss["b"]("writer-move-invalid-range: Invalid range to move.",this)}if(!e.isFlat){throw new ss["b"]("writer-move-range-not-flat: Range to move is not flat.",this)}const n=qh._createAt(t,i);if(n.isEqual(e.start)){return}this._addOperationForAffectedMarkers("move",e);if(!pg(e.root,n.root)){throw new ss["b"]("writer-move-different-document: Range is going to be moved between different documents.",this)}const o=e.root.document?e.root.document.version:null;const r=new ng(e.start,e.end.offset-e.start.offset,n,o);this.batch.addOperation(r);this.model.applyOperation(r)}remove(e){this._assertWriterUsedCorrectly();const t=e instanceof Kh?e:Kh._createOn(e);const i=t.getMinimalFlatRanges().reverse();for(const e of i){this._addOperationForAffectedMarkers("move",e);gg(e.start,e.end.offset-e.start.offset,this.batch,this.model)}}merge(e){this._assertWriterUsedCorrectly();const t=e.nodeBefore;const i=e.nodeAfter;this._addOperationForAffectedMarkers("merge",e);if(!(t instanceof Fh)){throw new ss["b"]("writer-merge-no-element-before: Node before merge position must be an element.",this)}if(!(i instanceof Fh)){throw new ss["b"]("writer-merge-no-element-after: Node after merge position must be an element.",this)}if(!e.root.document){this._mergeDetached(e)}else{this._merge(e)}}createPositionFromPath(e,t,i){return this.model.createPositionFromPath(e,t,i)}createPositionAt(e,t){return this.model.createPositionAt(e,t)}createPositionAfter(e){return this.model.createPositionAfter(e)}createPositionBefore(e){return this.model.createPositionBefore(e)}createRange(e,t){return this.model.createRange(e,t)}createRangeIn(e){return this.model.createRangeIn(e)}createRangeOn(e){return this.model.createRangeOn(e)}createSelection(e,t,i){return this.model.createSelection(e,t,i)}_mergeDetached(e){const t=e.nodeBefore;const i=e.nodeAfter;this.move(Kh._createIn(i),qh._createAt(t,"end"));this.remove(i)}_merge(e){const t=qh._createAt(e.nodeBefore,"end");const i=qh._createAt(e.nodeAfter,0);const n=e.root.document.graveyard;const o=new qh(n,[0]);const r=e.root.document.version;const s=new lg(i,e.nodeAfter.maxOffset,t,o,r);this.batch.addOperation(s);this.model.applyOperation(s)}rename(e,t){this._assertWriterUsedCorrectly();if(!(e instanceof Fh)){throw new ss["b"]("writer-rename-not-element-instance: Trying to rename an object which is not an instance of Element.",this)}const i=e.root.document?e.root.document.version:null;const n=new sg(qh._createBefore(e),e.name,t,i);this.batch.addOperation(n);this.model.applyOperation(n)}split(e,t){this._assertWriterUsedCorrectly();let i=e.parent;if(!i.parent){throw new ss["b"]("writer-split-element-no-parent: Element with no parent can not be split.",this)}if(!t){t=i.parent}if(!e.parent.getAncestors({includeSelf:true}).includes(t)){throw new ss["b"]("writer-split-invalid-limit-element: Limit element is not a position ancestor.",this)}let n,o;do{const t=i.root.document?i.root.document.version:null;const r=i.maxOffset-e.offset;const s=new cg(e,r,null,t);this.batch.addOperation(s);this.model.applyOperation(s);if(!n&&!o){n=i;o=e.parent.nextSibling}e=this.createPositionAfter(e.parent);i=e.parent}while(i!==t);return{position:e,range:new Kh(qh._createAt(n,"end"),qh._createAt(o,0))}}wrap(e,t){this._assertWriterUsedCorrectly();if(!e.isFlat){throw new ss["b"]("writer-wrap-range-not-flat: Range to wrap is not flat.",this)}const i=t instanceof Fh?t:new Fh(t);if(i.childCount>0){throw new ss["b"]("writer-wrap-element-not-empty: Element to wrap with is not empty.",this)}if(i.parent!==null){throw new ss["b"]("writer-wrap-element-attached: Element to wrap with is already attached to tree model.",this)}this.insert(i,e.start);const n=new Kh(e.start.getShiftedBy(1),e.end.getShiftedBy(1));this.move(n,qh._createAt(i,0))}unwrap(e){this._assertWriterUsedCorrectly();if(e.parent===null){throw new ss["b"]("writer-unwrap-element-no-parent: Trying to unwrap an element which has no parent.",this)}this.move(Kh._createIn(e),this.createPositionAfter(e));this.remove(e)}addMarker(e,t){this._assertWriterUsedCorrectly();if(!t||typeof t.usingOperation!="boolean"){throw new ss["b"]("writer-addMarker-no-usingOperation: The options.usingOperation parameter is required when adding a new marker.",this)}const i=t.usingOperation;const n=t.range;const o=t.affectsData===undefined?false:t.affectsData;if(this.model.markers.has(e)){throw new ss["b"]("writer-addMarker-marker-exists: Marker with provided name already exists.",this)}if(!n){throw new ss["b"]("writer-addMarker-no-range: Range parameter is required when adding a new marker.",this)}if(!i){return this.model.markers._set(e,n,i,o)}mg(this,e,null,n,o);return this.model.markers.get(e)}updateMarker(e,t){this._assertWriterUsedCorrectly();const i=typeof e=="string"?e:e.name;const n=this.model.markers.get(i);if(!n){throw new ss["b"]("writer-updateMarker-marker-not-exists: Marker with provided name does not exists.",this)}if(!t){this.model.markers._refresh(n);return}const o=typeof t.usingOperation=="boolean";const r=typeof t.affectsData=="boolean";const s=r?t.affectsData:n.affectsData;if(!o&&!t.range&&!r){throw new ss["b"]("writer-updateMarker-wrong-options: One of the options is required - provide range, usingOperations or affectsData.",this)}const a=n.getRange();const l=t.range?t.range:a;if(o&&t.usingOperation!==n.managedUsingOperations){if(t.usingOperation){mg(this,i,null,l,s)}else{mg(this,i,a,null,s);this.model.markers._set(i,l,undefined,s)}return}if(n.managedUsingOperations){mg(this,i,a,l,s)}else{this.model.markers._set(i,l,undefined,s)}}removeMarker(e){this._assertWriterUsedCorrectly();const t=typeof e=="string"?e:e.name;if(!this.model.markers.has(t)){throw new ss["b"]("writer-removeMarker-no-marker: Trying to remove marker which does not exist.",this)}const i=this.model.markers.get(t);if(!i.managedUsingOperations){this.model.markers._remove(t);return}const n=i.getRange();mg(this,t,n,null,i.affectsData)}setSelection(e,t,i){this._assertWriterUsedCorrectly();this.model.document.selection._setTo(e,t,i)}setSelectionFocus(e,t){this._assertWriterUsedCorrectly();this.model.document.selection._setFocus(e,t)}setSelectionAttribute(e,t){this._assertWriterUsedCorrectly();if(typeof e==="string"){this._setSelectionAttribute(e,t)}else{for(const[t,i]of Ws(e)){this._setSelectionAttribute(t,i)}}}removeSelectionAttribute(e){this._assertWriterUsedCorrectly();if(typeof e==="string"){this._removeSelectionAttribute(e)}else{for(const t of e){this._removeSelectionAttribute(t)}}}overrideSelectionGravity(){return this.model.document.selection._overrideGravity()}restoreSelectionGravity(e){this.model.document.selection._restoreGravity(e)}_setSelectionAttribute(e,t){const i=this.model.document.selection;if(i.isCollapsed&&i.anchor.parent.isEmpty){const n=ff._getStoreAttributeKey(e);this.setAttribute(n,t,i.anchor.parent)}i._setAttribute(e,t)}_removeSelectionAttribute(e){const t=this.model.document.selection;if(t.isCollapsed&&t.anchor.parent.isEmpty){const i=ff._getStoreAttributeKey(e);this.removeAttribute(i,t.anchor.parent)}t._removeAttribute(e)}_assertWriterUsedCorrectly(){if(this.model._currentWriter!==this){throw new ss["b"]("writer-incorrect-use: Trying to use a writer outside the change() block.",this)}}_addOperationForAffectedMarkers(e,t){for(const i of this.model.markers){if(!i.managedUsingOperations){continue}const n=i.getRange();let o=false;if(e==="move"){o=t.containsPosition(n.start)||t.start.isEqual(n.start)||t.containsPosition(n.end)||t.end.isEqual(n.end)}else{const e=t.nodeBefore;const i=t.nodeAfter;const r=n.start.parent==e&&n.start.isAtEnd;const s=n.end.parent==i&&n.end.offset==0;const a=n.end.nodeAfter==i;const l=n.start.nodeAfter==i;o=r||s||a||l}if(o){this.updateMarker(i.name,{range:n})}}}}function hg(e,t,i,n){const o=e.model;const r=o.document;let s=n.start;let a;let l;let c;for(const e of n.getWalker({shallow:true})){c=e.item.getAttribute(t);if(a&&l!=c){if(l!=i){d()}s=a}a=e.nextPosition;l=c}if(a instanceof qh&&a!=s&&l!=i){d()}function d(){const n=new Kh(s,a);const c=n.root.document?r.version:null;const d=new tg(n,t,l,i,c);e.batch.addOperation(d);o.applyOperation(d)}}function fg(e,t,i,n){const o=e.model;const r=o.document;const s=n.getAttribute(t);let a,l;if(s!=i){const c=n.root===n;if(c){const e=n.document?r.version:null;l=new ag(n,t,s,i,e)}else{a=new Kh(qh._createBefore(n),e.createPositionAfter(n));const o=a.root.document?r.version:null;l=new tg(a,t,s,i,o)}e.batch.addOperation(l);o.applyOperation(l)}}function mg(e,t,i,n,o){const r=e.model;const s=r.document;const a=new rg(t,i,n,r.markers,o,s.version);e.batch.addOperation(a);r.applyOperation(a)}function gg(e,t,i,n){let o;if(e.root.document){const i=n.document;const r=new qh(i.graveyard,[0]);o=new ng(e,t,r,i.version)}else{o=new ig(e,t)}i.addOperation(o);n.applyOperation(o)}function pg(e,t){if(e===t){return true}if(e instanceof dg&&t instanceof dg){return true}return false}class bg{constructor(e){this._markerCollection=e;this._changesInElement=new Map;this._elementSnapshots=new Map;this._changedMarkers=new Map;this._changeCount=0;this._cachedChanges=null;this._cachedChangesWithGraveyard=null}get isEmpty(){return this._changesInElement.size==0&&this._changedMarkers.size==0}refreshItem(e){if(this._isInInsertedElement(e.parent)){return}this._markRemove(e.parent,e.startOffset,e.offsetSize);this._markInsert(e.parent,e.startOffset,e.offsetSize);const t=Kh._createOn(e);for(const e of this._markerCollection.getMarkersIntersectingRange(t)){const t=e.getRange();this.bufferMarkerChange(e.name,t,t,e.affectsData)}this._cachedChanges=null}bufferOperation(e){switch(e.type){case"insert":{if(this._isInInsertedElement(e.position.parent)){return}this._markInsert(e.position.parent,e.position.offset,e.nodes.maxOffset);break}case"addAttribute":case"removeAttribute":case"changeAttribute":{for(const t of e.range.getItems({shallow:true})){if(this._isInInsertedElement(t.parent)){continue}this._markAttribute(t)}break}case"remove":case"move":case"reinsert":{if(e.sourcePosition.isEqual(e.targetPosition)||e.sourcePosition.getShiftedBy(e.howMany).isEqual(e.targetPosition)){return}const t=this._isInInsertedElement(e.sourcePosition.parent);const i=this._isInInsertedElement(e.targetPosition.parent);if(!t){this._markRemove(e.sourcePosition.parent,e.sourcePosition.offset,e.howMany)}if(!i){this._markInsert(e.targetPosition.parent,e.getMovedRangeStart().offset,e.howMany)}break}case"rename":{if(this._isInInsertedElement(e.position.parent)){return}this._markRemove(e.position.parent,e.position.offset,1);this._markInsert(e.position.parent,e.position.offset,1);const t=Kh._createFromPositionAndShift(e.position,1);for(const e of this._markerCollection.getMarkersIntersectingRange(t)){const t=e.getRange();this.bufferMarkerChange(e.name,t,t,e.affectsData)}break}case"split":{const t=e.splitPosition.parent;if(!this._isInInsertedElement(t)){this._markRemove(t,e.splitPosition.offset,e.howMany)}if(!this._isInInsertedElement(e.insertionPosition.parent)){this._markInsert(e.insertionPosition.parent,e.insertionPosition.offset,1)}if(e.graveyardPosition){this._markRemove(e.graveyardPosition.parent,e.graveyardPosition.offset,1)}break}case"merge":{const t=e.sourcePosition.parent;if(!this._isInInsertedElement(t.parent)){this._markRemove(t.parent,t.startOffset,1)}const i=e.graveyardPosition.parent;this._markInsert(i,e.graveyardPosition.offset,1);const n=e.targetPosition.parent;if(!this._isInInsertedElement(n)){this._markInsert(n,e.targetPosition.offset,t.maxOffset)}break}}this._cachedChanges=null}bufferMarkerChange(e,t,i,n){const o=this._changedMarkers.get(e);if(!o){this._changedMarkers.set(e,{oldRange:t,newRange:i,affectsData:n})}else{o.newRange=i;o.affectsData=n;if(o.oldRange==null&&o.newRange==null){this._changedMarkers.delete(e)}}}getMarkersToRemove(){const e=[];for(const[t,i]of this._changedMarkers){if(i.oldRange!=null){e.push({name:t,range:i.oldRange})}}return e}getMarkersToAdd(){const e=[];for(const[t,i]of this._changedMarkers){if(i.newRange!=null){e.push({name:t,range:i.newRange})}}return e}getChangedMarkers(){return Array.from(this._changedMarkers).map(e=>({name:e[0],data:{oldRange:e[1].oldRange,newRange:e[1].newRange}}))}hasDataChanges(){for(const[,e]of this._changedMarkers){if(e.affectsData){return true}}return this._changesInElement.size>0}getChanges(e={includeChangesInGraveyard:false}){if(this._cachedChanges){if(e.includeChangesInGraveyard){return this._cachedChangesWithGraveyard.slice()}else{return this._cachedChanges.slice()}}const t=[];for(const e of this._changesInElement.keys()){const i=this._changesInElement.get(e).sort((e,t)=>{if(e.offset===t.offset){if(e.type!=t.type){return e.type=="remove"?-1:1}return 0}return e.offset{if(e.position.root!=t.position.root){return e.position.root.rootNamei.offset){if(n>o){const e={type:"attribute",offset:o,howMany:n-o,count:this._changeCount++};this._handleChange(e,t);t.push(e)}e.nodesToHandle=i.offset-e.offset;e.howMany=e.nodesToHandle}else if(e.offset>=i.offset&&e.offseto){e.nodesToHandle=n-o;e.offset=o}else{e.nodesToHandle=0}}}if(i.type=="remove"){if(e.offseti.offset){const o={type:"attribute",offset:i.offset,howMany:n-i.offset,count:this._changeCount++};this._handleChange(o,t);t.push(o);e.nodesToHandle=i.offset-e.offset;e.howMany=e.nodesToHandle}}if(i.type=="attribute"){if(e.offset>=i.offset&&n<=o){e.nodesToHandle=0;e.howMany=0;e.offset=0}else if(e.offset<=i.offset&&n>=o){i.howMany=0}}}}e.howMany=e.nodesToHandle;delete e.nodesToHandle}_getInsertDiff(e,t,i){return{type:"insert",position:qh._createAt(e,t),name:i,length:1,changeCount:this._changeCount++}}_getRemoveDiff(e,t,i){return{type:"remove",position:qh._createAt(e,t),name:i,length:1,changeCount:this._changeCount++}}_getAttributesDiff(e,t,i){const n=[];i=new Map(i);for(const[o,r]of t){const t=i.has(o)?i.get(o):null;if(t!==r){n.push({type:"attribute",position:e.start,range:e.clone(),length:1,attributeKey:o,attributeOldValue:r,attributeNewValue:t,changeCount:this._changeCount++})}i.delete(o)}for(const[t,o]of i){n.push({type:"attribute",position:e.start,range:e.clone(),length:1,attributeKey:t,attributeOldValue:null,attributeNewValue:o,changeCount:this._changeCount++})}return n}_isInInsertedElement(e){const t=e.parent;if(!t){return false}const i=this._changesInElement.get(t);const n=e.startOffset;if(i){for(const e of i){if(e.type=="insert"&&n>=e.offset&&nn){for(let t=0;t{const i=t[0];if(i.isDocumentOperation&&i.baseVersion!==this.version){throw new ss["b"]("model-document-applyOperation-wrong-version: Only operations with matching versions can be applied.",this,{operation:i})}},{priority:"highest"});this.listenTo(e,"applyOperation",(e,t)=>{const i=t[0];if(i.isDocumentOperation){this.differ.bufferOperation(i)}},{priority:"high"});this.listenTo(e,"applyOperation",(e,t)=>{const i=t[0];if(i.isDocumentOperation){this.version++;this.history.addOperation(i)}},{priority:"low"});this.listenTo(this.selection,"change",()=>{this._hasSelectionChangedFromTheLastChangeBlock=true});this.listenTo(e.markers,"update",(e,t,i,n)=>{this.differ.bufferMarkerChange(t.name,i,n,t.affectsData);if(i===null){t.on("change",(e,i)=>{this.differ.bufferMarkerChange(t.name,i,t.getRange(),t.affectsData)})}})}get graveyard(){return this.getRoot(Eg)}createRoot(e="$root",t="main"){if(this.roots.get(t)){throw new ss["b"]("model-document-createRoot-name-exists: Root with specified name already exists.",this,{name:t})}const i=new dg(this,e,t);this.roots.add(i);return i}destroy(){this.selection.destroy();this.stopListening()}getRoot(e="main"){return this.roots.get(e)}getRootNames(){return Array.from(this.roots,e=>e.rootName).filter(e=>e!=Eg)}registerPostFixer(e){this._postFixers.add(e)}toJSON(){const e=js(this);e.selection="[engine.model.DocumentSelection]";e.model="[engine.model.Model]";return e}_handleChangeBlock(e){if(this._hasDocumentChangedFromTheLastChangeBlock()){this._callPostFixers(e);this.selection.refresh();if(this.differ.hasDataChanges()){this.fire("change:data",e.batch)}else{this.fire("change",e.batch)}this.selection.refresh();this.differ.reset()}this._hasSelectionChangedFromTheLastChangeBlock=false}_hasDocumentChangedFromTheLastChangeBlock(){return!this.differ.isEmpty||this._hasSelectionChangedFromTheLastChangeBlock}_getDefaultRoot(){for(const e of this.roots){if(e!==this.graveyard){return e}}return this.graveyard}_getDefaultRange(){const e=this._getDefaultRoot();const t=this.model;const i=t.schema;const n=t.createPositionFromPath(e,[0]);const o=i.getNearestSelectionRange(n);return o||t.createRange(n)}_validateSelectionRange(e){return Mg(e.start)&&Mg(e.end)}_callPostFixers(e){let t=false;do{for(const i of this._postFixers){this.selection.refresh();t=i(e);if(t){break}}}while(t)}}ys(Pg,ds);function Mg(e){const t=e.textNode;if(t){const i=t.data;const n=e.offset-t.startOffset;return!Cg(i,n)&&!Tg(i,n)}return true}class Sg{constructor(){this._markers=new Map}[Symbol.iterator](){return this._markers.values()}has(e){return this._markers.has(e)}get(e){return this._markers.get(e)||null}_set(e,t,i=false,n=false){const o=e instanceof Ig?e.name:e;const r=this._markers.get(o);if(r){const e=r.getRange();let s=false;if(!e.isEqual(t)){r._attachLiveRange(lf.fromRange(t));s=true}if(i!=r.managedUsingOperations){r._managedUsingOperations=i;s=true}if(typeof n==="boolean"&&n!=r.affectsData){r._affectsData=n;s=true}if(s){this.fire("update:"+o,r,e,t)}return r}const s=lf.fromRange(t);const a=new Ig(o,s,i,n);this._markers.set(o,a);this.fire("update:"+o,a,null,t);return a}_remove(e){const t=e instanceof Ig?e.name:e;const i=this._markers.get(t);if(i){this._markers.delete(t);this.fire("update:"+t,i,i.getRange(),null);this._destroyMarker(i);return true}return false}_refresh(e){const t=e instanceof Ig?e.name:e;const i=this._markers.get(t);if(!i){throw new ss["b"]("markercollection-refresh-marker-not-exists: Marker with provided name does not exists.",this)}const n=i.getRange();this.fire("update:"+t,i,n,n,i.managedUsingOperations,i.affectsData)}*getMarkersAtPosition(e){for(const t of this){if(t.getRange().containsPosition(e)){yield t}}}*getMarkersIntersectingRange(e){for(const t of this){if(t.getRange().getIntersection(e)!==null){yield t}}}destroy(){for(const e of this._markers.values()){this._destroyMarker(e)}this._markers=null;this.stopListening()}*getMarkersGroup(e){for(const t of this._markers.values()){if(t.name.startsWith(e+":")){yield t}}}_destroyMarker(e){e.stopListening();e._detachLiveRange()}}ys(Sg,ds);class Ig{constructor(e,t,i,n){this.name=e;this._liveRange=this._attachLiveRange(t);this._managedUsingOperations=i;this._affectsData=n}get managedUsingOperations(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._managedUsingOperations}get affectsData(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._affectsData}getStart(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._liveRange.start.clone()}getEnd(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._liveRange.end.clone()}getRange(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._liveRange.toRange()}is(e){return e==="marker"||e==="model:marker"}_attachLiveRange(e){if(this._liveRange){this._detachLiveRange()}e.delegate("change:range").to(this);e.delegate("change:content").to(this);this._liveRange=e;return e}_detachLiveRange(){this._liveRange.stopDelegating("change:range",this);this._liveRange.stopDelegating("change:content",this);this._liveRange.detach();this._liveRange=null}}ys(Ig,ds);class Lg extends Hm{get type(){return"noop"}clone(){return new Lg(this.baseVersion)}getReversed(){return new Lg(this.baseVersion+1)}_execute(){}static get className(){return"NoOperation"}}const Ng={};Ng[tg.className]=tg;Ng[og.className]=og;Ng[rg.className]=rg;Ng[ng.className]=ng;Ng[Lg.className]=Lg;Ng[Hm.className]=Hm;Ng[sg.className]=sg;Ng[ag.className]=ag;Ng[cg.className]=cg;Ng[lg.className]=lg;class Og{static fromJSON(e,t){return Ng[e.__className].fromJSON(e,t)}}class Rg extends qh{constructor(e,t,i="toNone"){super(e,t,i);if(!this.root.is("rootElement")){throw new ss["b"]("model-liveposition-root-not-rootelement: LivePosition's root has to be an instance of RootElement.",e)}zg.call(this)}detach(){this.stopListening()}is(e){return e==="livePosition"||e==="model:livePosition"||e=="position"||e==="model:position"}toPosition(){return new qh(this.root,this.path.slice(),this.stickiness)}static fromPosition(e,t){return new this(e.root,e.path.slice(),t?t:e.stickiness)}}function zg(){this.listenTo(this.root.document.model,"applyOperation",(e,t)=>{const i=t[0];if(!i.isDocumentOperation){return}Dg.call(this,i)},{priority:"low"})}function Dg(e){const t=this.getTransformedByOperation(e);if(!this.isEqual(t)){const e=this.toPosition();this.path=t.path;this.root=t.root;this.fire("change",e)}}ys(Rg,ds);function jg(e,t,i,n){return e.change(o=>{let r;if(!i){r=e.document.selection}else if(i instanceof tf||i instanceof ff){r=i}else{r=o.createSelection(i,n)}if(!r.isCollapsed){e.deleteContent(r,{doNotAutoparagraph:true})}const s=new Bg(e,o,r.anchor);let a;if(t.is("documentFragment")){a=t.getChildren()}else{a=[t]}s.handleNodes(a,{isFirst:true,isLast:true});const l=s.getSelectionRange();if(l){if(r instanceof ff){o.setSelection(l)}else{r.setTo(l)}}else{}const c=s.getAffectedRange()||e.createRange(r.anchor);s.destroy();return c})}class Bg{constructor(e,t,i){this.model=e;this.writer=t;this.position=i;this.canMergeWith=new Set([this.position.parent]);this.schema=e.schema;this._filterAttributesOf=[];this._affectedStart=null;this._affectedEnd=null}handleNodes(e,t){e=Array.from(e);for(let i=0;i{if(!i.doNotResetEntireContent&&$g(o,t)){qg(e,t,o);return}const r=n.start;const s=Rg.fromPosition(n.end,"toNext");if(!n.start.isTouching(n.end)){e.remove(n)}if(!i.leaveUnmerged){Fg(e,r,s);o.removeDisallowedAttributes(r.parent.getChildren(),e)}Gg(e,t,r);if(!i.doNotAutoparagraph&&Hg(o,r)){Ug(e,r,t)}s.detach()})}function Fg(e,t,i){const n=t.parent;const o=i.parent;if(n==o){return}if(e.model.schema.isLimit(n)||e.model.schema.isLimit(o)){return}if(!Wg(t,i,e.model.schema)){return}t=e.createPositionAfter(n);i=e.createPositionBefore(o);if(!i.isEqual(t)){e.insert(o,t)}e.merge(t);while(i.parent.isEmpty){const t=i.parent;i=e.createPositionBefore(t);e.remove(t)}Fg(e,t,i)}function Hg(e,t){const i=e.checkChild(t,"$text");const n=e.checkChild(t,"paragraph");return!i&&n}function Wg(e,t,i){const n=new Kh(e,t);for(const e of n.getWalker()){if(i.isLimit(e.item)){return false}}return true}function Ug(e,t,i){const n=e.createElement("paragraph");e.insert(n,t);Gg(e,i,e.createPositionAt(n,0))}function qg(e,t){const i=e.model.schema.getLimitElement(t);e.remove(e.createRangeIn(i));Ug(e,e.createPositionAt(i,0),t)}function $g(e,t){const i=e.getLimitElement(t);if(!t.containsEntireContent(i)){return false}const n=t.getFirstRange();if(n.start.parent==n.end.parent){return false}return e.checkChild(i,"paragraph")}function Gg(e,t,i){if(t instanceof ff){e.setSelection(i)}else{t.setTo(i)}}const Yg=' ,.?!:;"-()';function Kg(e,t,i={}){const n=e.schema;const o=i.direction!="backward";const r=i.unit?i.unit:"character";const s=t.focus;const a=new Wh({boundaries:Xg(s,o),singleCharacters:true,direction:o?"forward":"backward"});const l={walker:a,schema:n,isForward:o,unit:r};let c;while(c=a.next()){if(c.done){return}const i=Jg(l,c.value);if(i){if(t instanceof ff){e.change(e=>{e.setSelectionFocus(i)})}else{t.setFocus(i)}return}}}function Jg(e,t){if(t.type=="text"){if(e.unit==="word"){return Zg(e.walker,e.isForward)}return Qg(e.walker,e.unit,e.isForward)}if(t.type==(e.isForward?"elementStart":"elementEnd")){if(e.schema.isObject(t.item)){return qh._createAt(t.item,e.isForward?"after":"before")}if(e.schema.checkChild(t.nextPosition,"$text")){return t.nextPosition}}else{if(e.schema.isLimit(t.item)){e.walker.skip(()=>true);return}if(e.schema.checkChild(t.nextPosition,"$text")){return t.nextPosition}}}function Qg(e,t){const i=e.position.textNode;if(i){const n=i.data;let o=e.position.offset-i.startOffset;while(Cg(n,o)||t=="character"&&Tg(n,o)){e.next();o=e.position.offset-i.startOffset}}return e.position}function Zg(e,t){let i=e.position.textNode;if(i){let n=e.position.offset-i.startOffset;while(!ep(i.data,n,t)&&!tp(i,n,t)){e.next();const o=t?e.position.nodeAfter:e.position.nodeBefore;if(o&&o.is("text")){const n=o.data.charAt(t?0:o.data.length-1);if(!Yg.includes(n)){e.next();i=e.position.textNode}}n=e.position.offset-i.startOffset}}return e.position}function Xg(e,t){const i=e.root;const n=qh._createAt(i,t?"end":0);if(t){return new Kh(e,n)}else{return new Kh(n,e)}}function ep(e,t,i){const n=t+(i?0:-1);return Yg.includes(e.charAt(n))}function tp(e,t,i){return t===(i?e.endOffset:0)}function ip(e,t){return e.change(e=>{const i=e.createDocumentFragment();const n=t.getFirstRange();if(!n||n.isCollapsed){return i}const o=n.start.root;const r=n.start.getCommonPath(n.end);const s=o.getNodeByPath(r);let a;if(n.start.parent==n.end.parent){a=n}else{a=e.createRange(e.createPositionAt(s,n.start.path[r.length]),e.createPositionAt(s,n.end.path[r.length]+1))}const l=a.end.offset-a.start.offset;for(const t of a.getItems({shallow:true})){if(t.is("textProxy")){e.appendText(t.data,t.getAttributes(),i)}else{e.append(t._clone(true),i)}}if(a!=n){const t=n._getTransformedByMove(a.start,e.createPositionAt(i,0),l)[0];const o=e.createRange(e.createPositionAt(i,0),t.start);const r=e.createRange(t.end,e.createPositionAt(i,"end"));np(r,e);np(o,e)}return i})}function np(e,t){const i=[];Array.from(e.getItems({direction:"backward"})).map(e=>t.createRangeOn(e)).filter(t=>{const i=(t.start.isAfter(e.start)||t.start.isEqual(e.start))&&(t.end.isBefore(e.end)||t.end.isEqual(e.end));return i}).forEach(e=>{i.push(e.start.parent);t.remove(e)});i.forEach(e=>{let i=e;while(i.parent&&i.isEmpty){const e=t.createRangeOn(i);i=i.parent;t.remove(e)}})}function op(e){e.document.registerPostFixer(t=>rp(t,e))}function rp(e,t){const i=t.document.selection;const n=t.schema;const o=[];let r=false;for(const e of i.getRanges()){const t=sp(e,n);if(t){o.push(t);r=true}else{o.push(e)}}if(r){e.setSelection(up(o),{backward:i.isBackward})}}function sp(e,t){if(e.isCollapsed){return ap(e,t)}return lp(e,t)}function ap(e,t){const i=e.start;const n=t.getNearestSelectionRange(i);if(!n){return null}if(!n.isCollapsed){return n}const o=n.start;if(i.isEqual(o)){return null}return new Kh(o)}function lp(e,t){const i=e.start;const n=e.end;const o=t.checkChild(i,"$text");const r=t.checkChild(n,"$text");const s=t.getLimitElement(i);const a=t.getLimitElement(n);if(s===a){if(o&&r){return null}if(dp(i,n,t)){const e=i.nodeAfter&&t.isObject(i.nodeAfter);const o=e?null:t.getNearestSelectionRange(i,"forward");const r=n.nodeBefore&&t.isObject(n.nodeBefore);const s=r?null:t.getNearestSelectionRange(n,"backward");const a=o?o.start:i;const l=s?s.start:n;return new Kh(a,l)}}const l=s&&!s.is("rootElement");const c=a&&!a.is("rootElement");if(l||c){const e=i.nodeAfter&&n.nodeBefore&&i.nodeAfter.parent===n.nodeBefore.parent;const o=l&&(!e||!hp(i.nodeAfter,t));const r=c&&(!e||!hp(n.nodeBefore,t));let d=i;let u=n;if(o){d=qh._createBefore(cp(s,t))}if(r){u=qh._createAfter(cp(a,t))}return new Kh(d,u)}return null}function cp(e,t){let i=e;let n=i;while(t.isLimit(n)&&n.parent){i=n;n=n.parent}return i}function dp(e,t,i){const n=e.nodeAfter&&!i.isLimit(e.nodeAfter)||i.checkChild(e,"$text");const o=t.nodeBefore&&!i.isLimit(t.nodeBefore)||i.checkChild(t,"$text");return n||o}function up(e){const t=[];t.push(e.shift());for(const i of e){const e=t.pop();if(i.isIntersecting(e)){const n=e.start.isAfter(i.start)?i.start:e.start;const o=e.end.isAfter(i.end)?e.end:i.end;const r=new Kh(n,o);t.push(r)}else{t.push(e);t.push(i)}}return t}function hp(e,t){return e&&t.isObject(e)}class fp{constructor(){this.markers=new Sg;this.document=new Pg(this);this.schema=new gm;this._pendingChanges=[];this._currentWriter=null;["insertContent","deleteContent","modifySelection","getSelectedContent","applyOperation"].forEach(e=>this.decorate(e));this.on("applyOperation",(e,t)=>{const i=t[0];i._validate()},{priority:"highest"});this.schema.register("$root",{isLimit:true});this.schema.register("$block",{allowIn:"$root",isBlock:true});this.schema.register("$text",{allowIn:"$block",isInline:true});this.schema.register("$clipboardHolder",{allowContentOf:"$root",isLimit:true});this.schema.extend("$text",{allowIn:"$clipboardHolder"});this.schema.register("$marker");this.schema.addChildCheck((e,t)=>{if(t.name==="$marker"){return true}});op(this)}change(e){try{if(this._pendingChanges.length===0){this._pendingChanges.push({batch:new Fm,callback:e});return this._runPendingChanges()[0]}else{return e(this._currentWriter)}}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}enqueueChange(e,t){try{if(typeof e==="string"){e=new Fm(e)}else if(typeof e=="function"){t=e;e=new Fm}this._pendingChanges.push({batch:e,callback:t});if(this._pendingChanges.length==1){this._runPendingChanges()}}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}applyOperation(e){e._execute()}insertContent(e,t,i){return jg(this,e,t,i)}deleteContent(e,t){Vg(this,e,t)}modifySelection(e,t){Kg(this,e,t)}getSelectedContent(e){return ip(this,e)}hasContent(e,t){const i=e instanceof Fh?Kh._createIn(e):e;if(i.isCollapsed){return false}for(const e of this.markers.getMarkersIntersectingRange(i)){if(e.affectsData){return true}}const{ignoreWhitespaces:n=false}=t||{};for(const e of i.getItems()){if(e.is("textProxy")){if(!n){return true}else if(e.data.search(/\S/)!==-1){return true}}else if(this.schema.isObject(e)){return true}}return false}createPositionFromPath(e,t,i){return new qh(e,t,i)}createPositionAt(e,t){return qh._createAt(e,t)}createPositionAfter(e){return qh._createAfter(e)}createPositionBefore(e){return qh._createBefore(e)}createRange(e,t){return new Kh(e,t)}createRangeIn(e){return Kh._createIn(e)}createRangeOn(e){return Kh._createOn(e)}createSelection(e,t,i){return new tf(e,t,i)}createBatch(e){return new Fm(e)}createOperationFromJSON(e){return Og.fromJSON(e,this.document)}destroy(){this.document.destroy();this.stopListening()}_runPendingChanges(){const e=[];this.fire("_beforeChanges");while(this._pendingChanges.length){const t=this._pendingChanges[0].batch;this._currentWriter=new ug(this,t);const i=this._pendingChanges[0].callback(this._currentWriter);e.push(i);this.document._handleChangeBlock(this._currentWriter);this._pendingChanges.shift();this._currentWriter=null}this.fire("_afterChanges");return e}}ys(fp,Jl);class mp{constructor(){this._listener=Object.create(Ud)}listenTo(e){this._listener.listenTo(e,"keydown",(e,t)=>{this._listener.fire("_keydown:"+Rc(t),t)})}set(e,t,i={}){const n=zc(e);const o=i.priority;this._listener.listenTo(this._listener,"_keydown:"+n,(e,i)=>{t(i,()=>{i.preventDefault();i.stopPropagation();e.stop()});e.return=true},{priority:o})}press(e){return!!this._listener.fire("_keydown:"+Rc(e),e)}destroy(){this._listener.stopListening()}}class gp extends mp{constructor(e){super();this.editor=e}set(e,t,i={}){if(typeof t=="string"){const e=t;t=(t,i)=>{this.editor.execute(e);i()}}super.set(e,t,i)}}class pp{constructor(e={}){this._context=e.context||new Os({language:e.language});this._context._addEditor(this,!e.context);const t=Array.from(this.constructor.builtinPlugins||[]);this.config=new Kr(e,this.constructor.defaultConfig);this.config.define("plugins",t);this.config.define(this._context._getEditorConfig());this.plugins=new As(this,t,this._context.plugins);this.locale=this._context.locale;this.t=this.locale.t;this.commands=new hm;this.set("state","initializing");this.once("ready",()=>this.state="ready",{priority:"high"});this.once("destroy",()=>this.state="destroyed",{priority:"high"});this.set("isReadOnly",false);this.model=new fp;const i=new Ol;this.data=new zm(this.model,i);this.editing=new um(this.model,i);this.editing.view.document.bind("isReadOnly").to(this);this.conversion=new jm([this.editing.downcastDispatcher,this.data.downcastDispatcher],this.data.upcastDispatcher);this.conversion.addAlias("dataDowncast",this.data.downcastDispatcher);this.conversion.addAlias("editingDowncast",this.editing.downcastDispatcher);this.keystrokes=new gp(this);this.keystrokes.listenTo(this.editing.view.document)}initPlugins(){const e=this.config;const t=e.get("plugins");const i=e.get("removePlugins")||[];const n=e.get("extraPlugins")||[];return this.plugins.init(t.concat(n),i)}destroy(){let e=Promise.resolve();if(this.state=="initializing"){e=new Promise(e=>this.once("ready",e))}return e.then(()=>{this.fire("destroy");this.stopListening();this.commands.destroy()}).then(()=>this.plugins.destroy()).then(()=>{this.model.destroy();this.data.destroy();this.editing.destroy();this.keystrokes.destroy()}).then(()=>this._context._removeEditor(this))}execute(...e){try{this.commands.execute(...e)}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}}ys(pp,Jl);const bp={setData(e){this.data.set(e)},getData(e){return this.data.get(e)}};var wp=bp;function _p(e,t){if(e instanceof HTMLTextAreaElement){e.value=t}e.innerHTML=t}const kp={updateSourceElement(){if(!this.sourceElement){throw new ss["b"]("editor-missing-sourceelement: Cannot update the source element of a detached editor.",this)}_p(this.sourceElement,this.data.get())}};var vp=kp;function yp(e){if(!me(e.updateSourceElement)){throw new ss["b"]("attachtoform-missing-elementapi-interface: Editor passed to attachToForm() must implement ElementApi.",e)}const t=e.sourceElement;if(t&&t.tagName.toLowerCase()==="textarea"&&t.form){let i;const n=t.form;const o=()=>e.updateSourceElement();if(me(n.submit)){i=n.submit;n.submit=()=>{o();i.apply(n)}}n.addEventListener("submit",o);e.on("destroy",()=>{n.removeEventListener("submit",o);if(i){n.submit=i}})}}class xp{getHtml(e){const t=document.implementation.createHTMLDocument("");const i=t.createElement("div");i.appendChild(e);return i.innerHTML}}class Ap{constructor(e){this._domParser=new DOMParser;this._domConverter=new Dd(e,{blockFillerMode:"nbsp"});this._htmlWriter=new xp}toData(e){const t=this._domConverter.viewToDom(e,document);return this._htmlWriter.getHtml(t)}toView(e){const t=this._toDom(e);return this._domConverter.domToView(t)}_toDom(e){const t=this._domParser.parseFromString(e,"text/html");const i=t.createDocumentFragment();const n=t.body.childNodes;while(n.length>0){i.appendChild(n[0])}return i}}class Cp{constructor(e){this.editor=e;this._components=new Map}*names(){for(const e of this._components.values()){yield e.originalName}}add(e,t){if(this.has(e)){throw new ss["b"]("componentfactory-item-exists: The item already exists in the component factory.",this,{name:e})}this._components.set(Tp(e),{callback:t,originalName:e})}create(e){if(!this.has(e)){throw new ss["b"]("componentfactory-item-missing: The required component is not registered in the factory.",this,{name:e})}return this._components.get(Tp(e)).callback(this.editor.locale)}has(e){return this._components.has(Tp(e))}}function Tp(e){return String(e).toLowerCase()}class Ep{constructor(){this.set("isFocused",false);this.set("focusedElement",null);this._elements=new Set;this._nextEventLoopTimeout=null}add(e){if(this._elements.has(e)){throw new ss["b"]("focusTracker-add-element-already-exist",this)}this.listenTo(e,"focus",()=>this._focus(e),{useCapture:true});this.listenTo(e,"blur",()=>this._blur(),{useCapture:true});this._elements.add(e)}remove(e){if(e===this.focusedElement){this._blur(e)}if(this._elements.has(e)){this.stopListening(e);this._elements.delete(e)}}destroy(){this.stopListening()}_focus(e){clearTimeout(this._nextEventLoopTimeout);this.focusedElement=e;this.isFocused=true}_blur(){clearTimeout(this._nextEventLoopTimeout);this._nextEventLoopTimeout=setTimeout(()=>{this.focusedElement=null;this.isFocused=false},0)}}ys(Ep,Ud);ys(Ep,Jl);class Pp{constructor(e){this.editor=e;this.componentFactory=new Cp(e);this.focusTracker=new Ep;this._editableElementsMap=new Map;this.listenTo(e.editing.view.document,"layoutChanged",()=>this.update())}get element(){return null}update(){this.fire("update")}destroy(){this.stopListening();this.focusTracker.destroy();for(const e of this._editableElementsMap.values()){e.ckeditorInstance=null}this._editableElementsMap=new Map}setEditableElement(e,t){this._editableElementsMap.set(e,t);if(!t.ckeditorInstance){t.ckeditorInstance=this.editor}}getEditableElement(e="main"){return this._editableElementsMap.get(e)}getEditableElementsNames(){return this._editableElementsMap.keys()}get _editableElements(){console.warn("editor-ui-deprecated-editable-elements: "+"The EditorUI#_editableElements property has been deprecated and will be removed in the near future.",{editorUI:this});return this._editableElementsMap}}ys(Pp,ds);function Mp({origin:e,originKeystrokeHandler:t,originFocusTracker:i,toolbar:n,beforeFocus:o,afterBlur:r}){i.add(n.element);t.set("Alt+F10",(e,t)=>{if(i.isFocused&&!n.focusTracker.isFocused){if(o){o()}n.focus();t()}});n.keystrokes.set("Esc",(t,i)=>{if(n.focusTracker.isFocused){e.focus();if(r){r()}i()}})}function Sp(e){if(Array.isArray(e)){return{items:e}}if(!e){return{items:[]}}return Object.assign({items:[]},e)}var Ip=i(17);const Lp=new WeakMap;function Np(e){const{view:t,element:i,text:n,isDirectHost:o=true}=e;const r=t.document;if(!Lp.has(r)){Lp.set(r,new Map);r.registerPostFixer(e=>jp(r,e))}Lp.get(r).set(i,{text:n,isDirectHost:o});t.change(e=>jp(r,e))}function Op(e,t){const i=t.document;e.change(e=>{if(!Lp.has(i)){return}const n=Lp.get(i);const o=n.get(t);e.removeAttribute("data-placeholder",o.hostElement);zp(e,o.hostElement);n.delete(t)})}function Rp(e,t){if(!t.hasClass("ck-placeholder")){e.addClass("ck-placeholder",t);return true}return false}function zp(e,t){if(t.hasClass("ck-placeholder")){e.removeClass("ck-placeholder",t);return true}return false}function Dp(e){if(!e.isAttached()){return false}const t=!Array.from(e.getChildren()).some(e=>!e.is("uiElement"));const i=e.document;if(!i.isFocused&&t){return true}const n=i.selection;const o=n.anchor;if(t&&o&&o.parent!==e){return true}return false}function jp(e,t){const i=Lp.get(e);let n=false;for(const[e,o]of i){if(Bp(t,e,o)){n=true}}return n}function Bp(e,t,i){const{text:n,isDirectHost:o}=i;const r=o?t:Vp(t);let s=false;if(!r){return false}i.hostElement=r;if(r.getAttribute("data-placeholder")!==n){e.setAttribute("data-placeholder",n,r);s=true}if(Dp(r)){if(Rp(e,r)){s=true}}else if(zp(e,r)){s=true}return s}function Vp(e){if(e.childCount===1){const t=e.getChild(0);if(t.is("element")&&!t.is("uiElement")){return t}}return null}class Fp{constructor(){this._replacedElements=[]}replace(e,t){this._replacedElements.push({element:e,newElement:t});e.style.display="none";if(t){e.parentNode.insertBefore(t,e.nextSibling)}}restore(){this._replacedElements.forEach(({element:e,newElement:t})=>{e.style.display="";if(t){t.remove()}});this._replacedElements=[]}}class Hp extends Pp{constructor(e,t){super(e);this.view=t;this._toolbarConfig=Sp(e.config.get("toolbar"));this._elementReplacer=new Fp}get element(){return this.view.element}init(e){const t=this.editor;const i=this.view;const n=t.editing.view;const o=i.editable;const r=n.document.getRoot();o.name=r.rootName;i.render();const s=o.element;this.setEditableElement(o.name,s);this.focusTracker.add(s);i.editable.bind("isFocused").to(this.focusTracker);n.attachDomRoot(s);if(e){this._elementReplacer.replace(e,this.element)}this._initPlaceholder();this._initToolbar();this.fire("ready")}destroy(){const e=this.view;const t=this.editor.editing.view;this._elementReplacer.restore();t.detachDomRoot(e.editable.name);e.destroy();super.destroy()}_initToolbar(){const e=this.editor;const t=this.view;const i=e.editing.view;t.stickyPanel.bind("isActive").to(this.focusTracker,"isFocused");t.stickyPanel.limiterElement=t.element;if(this._toolbarConfig.viewportTopOffset){t.stickyPanel.viewportTopOffset=this._toolbarConfig.viewportTopOffset}t.toolbar.fillFromConfig(this._toolbarConfig.items,this.componentFactory);Mp({origin:i,originFocusTracker:this.focusTracker,originKeystrokeHandler:e.keystrokes,toolbar:t.toolbar})}_initPlaceholder(){const e=this.editor;const t=e.editing.view;const i=t.document.getRoot();const n=e.sourceElement;const o=e.config.get("placeholder")||n&&n.tagName.toLowerCase()==="textarea"&&n.getAttribute("placeholder");if(o){Np({view:t,element:i,text:o,isDirectHost:false})}}}class Wp extends xs{constructor(e=[]){super(e,{idProperty:"viewUid"});this.on("add",(e,t,i)=>{this._renderViewIntoCollectionParent(t,i)});this.on("remove",(e,t)=>{if(t.element&&this._parentElement){t.element.remove()}});this._parentElement=null}destroy(){this.map(e=>e.destroy())}setParent(e){this._parentElement=e;for(const e of this){this._renderViewIntoCollectionParent(e)}}delegate(...e){if(!e.length||!Up(e)){throw new ss["b"]("ui-viewcollection-delegate-wrong-events: All event names must be strings.",this)}return{to:t=>{for(const i of this){for(const n of e){i.delegate(n).to(t)}}this.on("add",(i,n)=>{for(const i of e){n.delegate(i).to(t)}});this.on("remove",(i,n)=>{for(const i of e){n.stopDelegating(i,t)}})}}}_renderViewIntoCollectionParent(e,t){if(!e.isRendered){e.render()}if(e.element&&this._parentElement){this._parentElement.insertBefore(e.element,this._parentElement.children[t])}}}function Up(e){return e.every(e=>typeof e=="string")}const qp="http://www.w3.org/1999/xhtml";class $p{constructor(e){Object.assign(this,nb(ib(e)));this._isRendered=false;this._revertData=null}render(){const e=this._renderNode({intoFragment:true});this._isRendered=true;return e}apply(e){this._revertData=pb();this._renderNode({node:e,isApplying:true,revertData:this._revertData});return e}revert(e){if(!this._revertData){throw new ss["b"]("ui-template-revert-not-applied: Attempting to revert a template which has not been applied yet.",[this,e])}this._revertTemplateFromNode(e,this._revertData)}*getViews(){function*e(t){if(t.children){for(const i of t.children){if(fb(i)){yield i}else if(mb(i)){yield*e(i)}}}}yield*e(this)}static bind(e,t){return{to(i,n){return new Yp({eventNameOrFunction:i,attribute:i,observable:e,emitter:t,callback:n})},if(i,n,o){return new Kp({observable:e,emitter:t,attribute:i,valueIfTrue:n,callback:o})}}}static extend(e,t){if(e._isRendered){throw new ss["b"]("template-extend-render: Attempting to extend a template which has already been rendered.",[this,e])}ub(e,nb(ib(t)))}_renderNode(e){let t;if(e.node){t=this.tag&&this.text}else{t=this.tag?this.text:!this.text}if(t){throw new ss["b"]('ui-template-wrong-syntax: Node definition must have either "tag" or "text" when rendering a new Node.',this)}if(this.text){return this._renderText(e)}else{return this._renderElement(e)}}_renderElement(e){let t=e.node;if(!t){t=e.node=document.createElementNS(this.ns||qp,this.tag)}this._renderAttributes(e);this._renderElementChildren(e);this._setUpListeners(e);return t}_renderText(e){let t=e.node;if(t){e.revertData.text=t.textContent}else{t=e.node=document.createTextNode("")}if(Jp(this.text)){this._bindToObservable({schema:this.text,updater:Xp(t),data:e})}else{t.textContent=this.text.join("")}return t}_renderAttributes(e){let t,i,n,o;if(!this.attributes){return}const r=e.node;const s=e.revertData;for(t in this.attributes){n=r.getAttribute(t);i=this.attributes[t];if(s){s.attributes[t]=n}o=le(i[0])&&i[0].ns?i[0].ns:null;if(Jp(i)){const a=o?i[0].value:i;if(s&&bb(t)){a.unshift(n)}this._bindToObservable({schema:a,updater:eb(r,t,o),data:e})}else if(t=="style"&&typeof i[0]!=="string"){this._renderStyleAttribute(i[0],e)}else{if(s&&n&&bb(t)){i.unshift(n)}i=i.map(e=>e?e.value||e:e).reduce((e,t)=>e.concat(t),[]).reduce(cb,"");if(!hb(i)){r.setAttributeNS(o,t,i)}}}}_renderStyleAttribute(e,t){const i=t.node;for(const n in e){const o=e[n];if(Jp(o)){this._bindToObservable({schema:[o],updater:tb(i,n),data:t})}else{i.style[n]=o}}}_renderElementChildren(e){const t=e.node;const i=e.intoFragment?document.createDocumentFragment():t;const n=e.isApplying;let o=0;for(const r of this.children){if(gb(r)){if(!n){r.setParent(t);for(const e of r){i.appendChild(e.element)}}}else if(fb(r)){if(!n){if(!r.isRendered){r.render()}i.appendChild(r.element)}}else if(xd(r)){i.appendChild(r)}else{if(n){const t=e.revertData;const n=pb();t.children.push(n);r._renderNode({node:i.childNodes[o++],isApplying:true,revertData:n})}else{i.appendChild(r.render())}}}if(e.intoFragment){t.appendChild(i)}}_setUpListeners(e){if(!this.eventListeners){return}for(const t in this.eventListeners){const i=this.eventListeners[t].map(i=>{const[n,o]=t.split("@");return i.activateDomEventListener(n,o,e)});if(e.revertData){e.revertData.bindings.push(i)}}}_bindToObservable({schema:e,updater:t,data:i}){const n=i.revertData;Zp(e,t,i);const o=e.filter(e=>!hb(e)).filter(e=>e.observable).map(n=>n.activateAttributeListener(e,t,i));if(n){n.bindings.push(o)}}_revertTemplateFromNode(e,t){for(const e of t.bindings){for(const t of e){t()}}if(t.text){e.textContent=t.text;return}for(const i in t.attributes){const n=t.attributes[i];if(n===null){e.removeAttribute(i)}else{e.setAttribute(i,n)}}for(let i=0;iZp(e,t,i);this.emitter.listenTo(this.observable,"change:"+this.attribute,n);return()=>{this.emitter.stopListening(this.observable,"change:"+this.attribute,n)}}}class Yp extends Gp{activateDomEventListener(e,t,i){const n=(e,i)=>{if(!t||i.target.matches(t)){if(typeof this.eventNameOrFunction=="function"){this.eventNameOrFunction(i)}else{this.observable.fire(this.eventNameOrFunction,i)}}};this.emitter.listenTo(i.node,e,n);return()=>{this.emitter.stopListening(i.node,e,n)}}}class Kp extends Gp{getValue(e){const t=super.getValue(e);return hb(t)?false:this.valueIfTrue||true}}function Jp(e){if(!e){return false}if(e.value){e=e.value}if(Array.isArray(e)){return e.some(Jp)}else if(e instanceof Gp){return true}return false}function Qp(e,t){return e.map(e=>{if(e instanceof Gp){return e.getValue(t)}return e})}function Zp(e,t,{node:i}){let n=Qp(e,i);if(e.length==1&&e[0]instanceof Kp){n=n[0]}else{n=n.reduce(cb,"")}if(hb(n)){t.remove()}else{t.set(n)}}function Xp(e){return{set(t){e.textContent=t},remove(){e.textContent=""}}}function eb(e,t,i){return{set(n){e.setAttributeNS(i,t,n)},remove(){e.removeAttributeNS(i,t)}}}function tb(e,t){return{set(i){e.style[t]=i},remove(){e.style[t]=null}}}function ib(e){const t=$r(e,e=>{if(e&&(e instanceof Gp||mb(e)||fb(e)||gb(e))){return e}});return t}function nb(e){if(typeof e=="string"){e=sb(e)}else if(e.text){ab(e)}if(e.on){e.eventListeners=rb(e.on);delete e.on}if(!e.text){if(e.attributes){ob(e.attributes)}const t=[];if(e.children){if(gb(e.children)){t.push(e.children)}else{for(const i of e.children){if(mb(i)||fb(i)||xd(i)){t.push(i)}else{t.push(new $p(i))}}}}e.children=t}return e}function ob(e){for(const t in e){if(e[t].value){e[t].value=[].concat(e[t].value)}lb(e,t)}}function rb(e){for(const t in e){lb(e,t)}return e}function sb(e){return{text:[e]}}function ab(e){if(!Array.isArray(e.text)){e.text=[e.text]}}function lb(e,t){if(!Array.isArray(e[t])){e[t]=[e[t]]}}function cb(e,t){if(hb(t)){return e}else if(hb(e)){return t}else{return`${e} ${t}`}}function db(e,t){for(const i in t){if(e[i]){e[i].push(...t[i])}else{e[i]=t[i]}}}function ub(e,t){if(t.attributes){if(!e.attributes){e.attributes={}}db(e.attributes,t.attributes)}if(t.eventListeners){if(!e.eventListeners){e.eventListeners={}}db(e.eventListeners,t.eventListeners)}if(t.text){e.text.push(...t.text)}if(t.children&&t.children.length){if(e.children.length!=t.children.length){throw new ss["b"]("ui-template-extend-children-mismatch: The number of children in extended definition does not match.",e)}let i=0;for(const n of t.children){ub(e.children[i++],n)}}}function hb(e){return!e&&e!==0}function fb(e){return e instanceof _b}function mb(e){return e instanceof $p}function gb(e){return e instanceof Wp}function pb(){return{children:[],bindings:[],attributes:{}}}function bb(e){return e=="class"||e=="style"}var wb=i(19);class _b{constructor(e){this.element=null;this.isRendered=false;this.locale=e;this.t=e&&e.t;this._viewCollections=new xs;this._unboundChildren=this.createCollection();this._viewCollections.on("add",(t,i)=>{i.locale=e});this.decorate("render")}get bindTemplate(){if(this._bindTemplate){return this._bindTemplate}return this._bindTemplate=$p.bind(this,this)}createCollection(e){const t=new Wp(e);this._viewCollections.add(t);return t}registerChild(e){if(!vs(e)){e=[e]}for(const t of e){this._unboundChildren.add(t)}}deregisterChild(e){if(!vs(e)){e=[e]}for(const t of e){this._unboundChildren.remove(t)}}setTemplate(e){this.template=new $p(e)}extendTemplate(e){$p.extend(this.template,e)}render(){if(this.isRendered){throw new ss["b"]("ui-view-render-already-rendered: This View has already been rendered.",this)}if(this.template){this.element=this.template.render();this.registerChild(this.template.getViews())}this.isRendered=true}destroy(){this.stopListening();this._viewCollections.map(e=>e.destroy());if(this.template&&this.template._revertData){this.template.revert(this.element)}}}ys(_b,Ud);ys(_b,Jl);var kb="[object String]";function vb(e){return typeof e=="string"||!Kt(e)&&T(e)&&k(e)==kb}var yb=vb;function xb(e,t,i={},n=[]){const o=i&&i.xmlns;const r=o?e.createElementNS(o,t):e.createElement(t);for(const e in i){r.setAttribute(e,i[e])}if(yb(n)||!vs(n)){n=[n]}for(let t of n){if(yb(t)){t=e.createTextNode(t)}r.appendChild(t)}return r}class Ab extends Wp{constructor(e,t=[]){super(t);this.locale=e}attachToDom(){this._bodyCollectionContainer=new $p({tag:"div",attributes:{class:["ck","ck-reset_all","ck-body","ck-rounded-corners"],dir:this.locale.uiLanguageDirection},children:this}).render();let e=document.querySelector(".ck-body-wrapper");if(!e){e=xb(document,"div",{class:"ck-body-wrapper"});document.body.appendChild(e)}e.appendChild(this._bodyCollectionContainer)}detachFromDom(){super.destroy();if(this._bodyCollectionContainer){this._bodyCollectionContainer.remove()}const e=document.querySelector(".ck-body-wrapper");if(e&&e.childElementCount==0){e.remove()}}}var Cb=i(21);class Tb extends _b{constructor(e){super(e);this.body=new Ab(e)}render(){super.render();this.body.attachToDom()}destroy(){this.body.detachFromDom();return super.destroy()}}var Eb=i(23);class Pb extends _b{constructor(e){super(e);this.set("text");this.set("for");this.id=`ck-editor__label_${is()}`;const t=this.bindTemplate;this.setTemplate({tag:"label",attributes:{class:["ck","ck-label"],id:this.id,for:t.to("for")},children:[{text:t.to("text")}]})}}class Mb extends Tb{constructor(e){super(e);this.top=this.createCollection();this.main=this.createCollection();this._voiceLabelView=this._createVoiceLabel();this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-editor","ck-rounded-corners"],role:"application",dir:e.uiLanguageDirection,lang:e.uiLanguage,"aria-labelledby":this._voiceLabelView.id},children:[this._voiceLabelView,{tag:"div",attributes:{class:["ck","ck-editor__top","ck-reset_all"],role:"presentation"},children:this.top},{tag:"div",attributes:{class:["ck","ck-editor__main"],role:"presentation"},children:this.main}]})}_createVoiceLabel(){const e=this.t;const t=new Pb;t.text=e("Rich Text Editor");t.extendTemplate({attributes:{class:"ck-voice-label"}});return t}}class Sb extends _b{constructor(e,t,i){super(e);this.setTemplate({tag:"div",attributes:{class:["ck","ck-content","ck-editor__editable","ck-rounded-corners"],lang:e.contentLanguage,dir:e.contentLanguageDirection}});this.name=null;this.set("isFocused",false);this._editableElement=i;this._hasExternalElement=!!this._editableElement;this._editingView=t}render(){super.render();if(this._hasExternalElement){this.template.apply(this.element=this._editableElement)}else{this._editableElement=this.element}this.on("change:isFocused",()=>this._updateIsFocusedClasses());this._updateIsFocusedClasses()}destroy(){if(this._hasExternalElement){this.template.revert(this._editableElement)}super.destroy()}_updateIsFocusedClasses(){const e=this._editingView;if(e.isRenderingInProgress){i(this)}else{t(this)}function t(t){e.change(i=>{const n=e.document.getRoot(t.name);i.addClass(t.isFocused?"ck-focused":"ck-blurred",n);i.removeClass(t.isFocused?"ck-blurred":"ck-focused",n)})}function i(n){e.once("change:isRenderingInProgress",(e,o,r)=>{if(!r){t(n)}else{i(n)}})}}}class Ib extends Sb{constructor(e,t,i){super(e,t,i);this.extendTemplate({attributes:{role:"textbox",class:"ck-editor__editable_inline"}})}render(){super.render();const e=this._editingView;const t=this.t;e.change(i=>{const n=e.document.getRoot(this.name);i.setAttribute("aria-label",t("Rich Text Editor, %0",[this.name]),n)})}}function Lb(e){return t=>t+e}var Nb=i(25);const Ob=Lb("px");class Rb extends _b{constructor(e){super(e);const t=this.bindTemplate;this.set("isActive",false);this.set("isSticky",false);this.set("limiterElement",null);this.set("limiterBottomOffset",50);this.set("viewportTopOffset",0);this.set("_marginLeft",null);this.set("_isStickyToTheLimiter",false);this.set("_hasViewportTopOffset",false);this.content=this.createCollection();this._contentPanelPlaceholder=new $p({tag:"div",attributes:{class:["ck","ck-sticky-panel__placeholder"],style:{display:t.to("isSticky",e=>e?"block":"none"),height:t.to("isSticky",e=>e?Ob(this._panelRect.height):null)}}}).render();this._contentPanel=new $p({tag:"div",attributes:{class:["ck","ck-sticky-panel__content",t.if("isSticky","ck-sticky-panel__content_sticky"),t.if("_isStickyToTheLimiter","ck-sticky-panel__content_sticky_bottom-limit")],style:{width:t.to("isSticky",e=>e?Ob(this._contentPanelPlaceholder.getBoundingClientRect().width):null),top:t.to("_hasViewportTopOffset",e=>e?Ob(this.viewportTopOffset):null),bottom:t.to("_isStickyToTheLimiter",e=>e?Ob(this.limiterBottomOffset):null),marginLeft:t.to("_marginLeft")}},children:this.content}).render();this.setTemplate({tag:"div",attributes:{class:["ck","ck-sticky-panel"]},children:[this._contentPanelPlaceholder,this._contentPanel]})}render(){super.render();this._checkIfShouldBeSticky();this.listenTo(Ld.window,"scroll",()=>{this._checkIfShouldBeSticky()});this.listenTo(this,"change:isActive",()=>{this._checkIfShouldBeSticky()})}_checkIfShouldBeSticky(){const e=this._panelRect=this._contentPanel.getBoundingClientRect();let t;if(!this.limiterElement){this.isSticky=false}else{t=this._limiterRect=this.limiterElement.getBoundingClientRect();this.isSticky=this.isActive&&t.top{this[t]();i()})}}}}get first(){return this.focusables.find(Db)||null}get last(){return this.focusables.filter(Db).slice(-1)[0]||null}get next(){return this._getFocusableItem(1)}get previous(){return this._getFocusableItem(-1)}get current(){let e=null;if(this.focusTracker.focusedElement===null){return null}this.focusables.find((t,i)=>{const n=t.element===this.focusTracker.focusedElement;if(n){e=i}return n});return e}focusFirst(){this._focus(this.first)}focusLast(){this._focus(this.last)}focusNext(){this._focus(this.next)}focusPrevious(){this._focus(this.previous)}_focus(e){if(e){e.focus()}}_getFocusableItem(e){const t=this.current;const i=this.focusables.length;if(!i){return null}if(t===null){return this[e===1?"first":"last"]}let n=(t+i+e)%i;do{const t=this.focusables.get(n);if(Db(t)){return t}n=(n+i+e)%i}while(n!==t);return null}}function Db(e){return!!(e.focus&&Ld.window.getComputedStyle(e.element).display!="none")}class jb extends _b{constructor(e){super(e);this.setTemplate({tag:"span",attributes:{class:["ck","ck-toolbar__separator"]}})}}const Bb=100;class Vb{constructor(e,t){if(!Vb._observerInstance){Vb._createObserver()}this._element=e;this._callback=t;Vb._addElementCallback(e,t);Vb._observerInstance.observe(e)}destroy(){Vb._deleteElementCallback(this._element,this._callback)}static _addElementCallback(e,t){if(!Vb._elementCallbacks){Vb._elementCallbacks=new Map}let i=Vb._elementCallbacks.get(e);if(!i){i=new Set;Vb._elementCallbacks.set(e,i)}i.add(t)}static _deleteElementCallback(e,t){const i=Vb._getElementCallbacks(e);if(i){i.delete(t);if(!i.size){Vb._elementCallbacks.delete(e);Vb._observerInstance.unobserve(e)}}if(Vb._elementCallbacks&&!Vb._elementCallbacks.size){Vb._observerInstance=null;Vb._elementCallbacks=null}}static _getElementCallbacks(e){if(!Vb._elementCallbacks){return null}return Vb._elementCallbacks.get(e)}static _createObserver(){let e;if(typeof Ld.window.ResizeObserver==="function"){e=Ld.window.ResizeObserver}else{e=Fb}Vb._observerInstance=new e(e=>{for(const t of e){if(!t.target.offsetParent){continue}const e=Vb._getElementCallbacks(t.target);if(e){for(const i of e){i(t)}}}})}}Vb._observerInstance=null;Vb._elementCallbacks=null;class Fb{constructor(e){this._callback=e;this._elements=new Set;this._previousRects=new Map;this._periodicCheckTimeout=null}observe(e){this._elements.add(e);this._checkElementRectsAndExecuteCallback();if(this._elements.size===1){this._startPeriodicCheck()}}unobserve(e){this._elements.delete(e);this._previousRects.delete(e);if(!this._elements.size){this._stopPeriodicCheck()}}_startPeriodicCheck(){const e=()=>{this._checkElementRectsAndExecuteCallback();this._periodicCheckTimeout=setTimeout(e,Bb)};this.listenTo(Ld.window,"resize",()=>{this._checkElementRectsAndExecuteCallback()});this._periodicCheckTimeout=setTimeout(e,Bb)}_stopPeriodicCheck(){clearTimeout(this._periodicCheckTimeout);this.stopListening();this._previousRects.clear()}_checkElementRectsAndExecuteCallback(){const e=[];for(const t of this._elements){if(this._hasRectChanged(t)){e.push({target:t,contentRect:this._previousRects.get(t)})}}if(e.length){this._callback(e)}}_hasRectChanged(e){if(!e.ownerDocument.body.contains(e)){return false}const t=new vh(e);const i=this._previousRects.get(e);const n=!i||!i.isEqual(t);this._previousRects.set(e,t);return n}}ys(Fb,Ud);function Hb(e){return e.bindTemplate.to(t=>{if(t.target===e.element){t.preventDefault()}})}class Wb extends _b{constructor(e){super(e);const t=this.bindTemplate;this.set("isVisible",false);this.set("position","se");this.children=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-dropdown__panel",t.to("position",e=>`ck-dropdown__panel_${e}`),t.if("isVisible","ck-dropdown__panel-visible")]},children:this.children,on:{selectstart:t.to(e=>e.preventDefault())}})}focus(){if(this.children.length){this.children.first.focus()}}focusLast(){if(this.children.length){const e=this.children.last;if(typeof e.focusLast==="function"){e.focusLast()}else{e.focus()}}}}var Ub=i(27);function qb(e){if(!e||!e.parentNode){return null}if(e.offsetParent===Ld.document.body){return null}return e.offsetParent}function $b({element:e,target:t,positions:i,limiter:n,fitInViewport:o}){if(me(t)){t=t()}if(me(n)){n=n()}const r=qb(e);const s=new vh(e);const a=new vh(t);let l;let c;if(!n&&!o){[c,l]=Gb(i[0],a,s)}else{const e=n&&new vh(n).getVisible();const t=o&&new vh(Ld.window);const r=Yb(i,{targetRect:a,elementRect:s,limiterRect:e,viewportRect:t});[c,l]=r||Gb(i[0],a,s)}let d=Zb(l);if(r){d=Qb(d,r)}return{left:d.left,top:d.top,name:c}}function Gb(e,t,i){const n=e(t,i);if(!n){return null}const{left:o,top:r,name:s}=n;return[s,i.clone().moveTo(o,r)]}function Yb(e,t){const{elementRect:i,viewportRect:n}=t;const o=i.getArea();const r=Kb(e,t);if(n){const e=r.filter(({viewportIntersectArea:e})=>e===o);const t=Jb(e,o);if(t){return t}}return Jb(r,o)}function Kb(e,{targetRect:t,elementRect:i,limiterRect:n,viewportRect:o}){const r=[];const s=i.getArea();for(const a of e){const e=Gb(a,t,i);if(!e){continue}const[l,c]=e;let d=0;let u=0;if(n){if(o){const e=n.getIntersection(o);if(e){d=e.getIntersectionArea(c)}}else{d=n.getIntersectionArea(c)}}if(o){u=o.getIntersectionArea(c)}const h={positionName:l,positionRect:c,limiterIntersectArea:d,viewportIntersectArea:u};if(d===s){return[h]}r.push(h)}return r}function Jb(e,t){let i=0;let n;let o;for(const{positionName:r,positionRect:s,limiterIntersectArea:a,viewportIntersectArea:l}of e){if(a===t){return[r,s]}const e=l**2+a**2;if(e>i){i=e;n=s;o=r}}return n?[o,n]:null}function Qb({left:e,top:t},i){const n=Zb(new vh(i));const o=_h(i);e-=n.left;t-=n.top;e+=i.scrollLeft;t+=i.scrollTop;e-=o.left;t-=o.top;return{left:e,top:t}}function Zb({left:e,top:t}){const{scrollX:i,scrollY:n}=Ld.window;return{left:e+i,top:t+n}}class Xb extends _b{constructor(e,t,i){super(e);const n=this.bindTemplate;this.buttonView=t;this.panelView=i;this.set("isOpen",false);this.set("isEnabled",true);this.set("class");this.set("id");this.set("panelPosition","auto");this.keystrokes=new mp;this.setTemplate({tag:"div",attributes:{class:["ck","ck-dropdown",n.to("class"),n.if("isEnabled","ck-disabled",e=>!e)],id:n.to("id"),"aria-describedby":n.to("ariaDescribedById")},children:[t,i]});t.extendTemplate({attributes:{class:["ck-dropdown__button"]}})}render(){super.render();this.listenTo(this.buttonView,"open",()=>{this.isOpen=!this.isOpen});this.panelView.bind("isVisible").to(this,"isOpen");this.on("change:isOpen",()=>{if(!this.isOpen){return}if(this.panelPosition==="auto"){this.panelView.position=Xb._getOptimalPosition({element:this.panelView.element,target:this.buttonView.element,fitInViewport:true,positions:this._panelPositions}).name}else{this.panelView.position=this.panelPosition}});this.keystrokes.listenTo(this.element);const e=(e,t)=>{if(this.isOpen){this.buttonView.focus();this.isOpen=false;t()}};this.keystrokes.set("arrowdown",(e,t)=>{if(this.buttonView.isEnabled&&!this.isOpen){this.isOpen=true;t()}});this.keystrokes.set("arrowright",(e,t)=>{if(this.isOpen){t()}});this.keystrokes.set("arrowleft",e);this.keystrokes.set("esc",e)}focus(){this.buttonView.focus()}get _panelPositions(){const{southEast:e,southWest:t,northEast:i,northWest:n}=Xb.defaultPanelPositions;if(this.locale.uiLanguageDirection==="ltr"){return[e,t,i,n]}else{return[t,e,n,i]}}}Xb.defaultPanelPositions={southEast:e=>({top:e.bottom,left:e.left,name:"se"}),southWest:(e,t)=>({top:e.bottom,left:e.left-t.width+e.width,name:"sw"}),northEast:(e,t)=>({top:e.top-t.height,left:e.left,name:"ne"}),northWest:(e,t)=>({top:e.bottom-t.height,left:e.left-t.width+e.width,name:"nw"})};Xb._getOptimalPosition=$b;var ew=i(29);class tw extends _b{constructor(){super();const e=this.bindTemplate;this.set("content","");this.set("viewBox","0 0 20 20");this.set("fillColor","");this.setTemplate({tag:"svg",ns:"http://www.w3.org/2000/svg",attributes:{class:["ck","ck-icon"],viewBox:e.to("viewBox")}})}render(){super.render();this._updateXMLContent();this._colorFillPaths();this.on("change:content",()=>{this._updateXMLContent();this._colorFillPaths()});this.on("change:fillColor",()=>{this._colorFillPaths()})}_updateXMLContent(){if(this.content){const e=(new DOMParser).parseFromString(this.content.trim(),"image/svg+xml");const t=e.querySelector("svg");const i=t.getAttribute("viewBox");if(i){this.viewBox=i}this.element.innerHTML="";while(t.childNodes.length>0){this.element.appendChild(t.childNodes[0])}}}_colorFillPaths(){if(this.fillColor){this.element.querySelectorAll(".ck-icon__fill").forEach(e=>{e.style.fill=this.fillColor})}}}var iw=i(31);class nw extends _b{constructor(e){super(e);this.set("text","");this.set("position","s");const t=this.bindTemplate;this.setTemplate({tag:"span",attributes:{class:["ck","ck-tooltip",t.to("position",e=>"ck-tooltip_"+e),t.if("text","ck-hidden",e=>!e.trim())]},children:[{tag:"span",attributes:{class:["ck","ck-tooltip__text"]},children:[{text:t.to("text")}]}]})}}var ow=i(33);class rw extends _b{constructor(e){super(e);const t=this.bindTemplate;const i=is();this.set("class");this.set("labelStyle");this.set("icon");this.set("isEnabled",true);this.set("isOn",false);this.set("isVisible",true);this.set("isToggleable",false);this.set("keystroke");this.set("label");this.set("tabindex",-1);this.set("tooltip");this.set("tooltipPosition","s");this.set("type","button");this.set("withText",false);this.set("withKeystroke",false);this.children=this.createCollection();this.tooltipView=this._createTooltipView();this.labelView=this._createLabelView(i);this.iconView=new tw;this.iconView.extendTemplate({attributes:{class:"ck-button__icon"}});this.keystrokeView=this._createKeystrokeView();this.bind("_tooltipString").to(this,"tooltip",this,"label",this,"keystroke",this._getTooltipString.bind(this));this.setTemplate({tag:"button",attributes:{class:["ck","ck-button",t.to("class"),t.if("isEnabled","ck-disabled",e=>!e),t.if("isVisible","ck-hidden",e=>!e),t.to("isOn",e=>e?"ck-on":"ck-off"),t.if("withText","ck-button_with-text"),t.if("withKeystroke","ck-button_with-keystroke")],type:t.to("type",e=>e?e:"button"),tabindex:t.to("tabindex"),"aria-labelledby":`ck-editor__aria-label_${i}`,"aria-disabled":t.if("isEnabled",true,e=>!e),"aria-pressed":t.to("isOn",e=>this.isToggleable?String(e):false)},children:this.children,on:{mousedown:t.to(e=>{e.preventDefault()}),click:t.to(e=>{if(this.isEnabled){this.fire("execute")}else{e.preventDefault()}})}})}render(){super.render();if(this.icon){this.iconView.bind("content").to(this,"icon");this.children.add(this.iconView)}this.children.add(this.tooltipView);this.children.add(this.labelView);if(this.withKeystroke){this.children.add(this.keystrokeView)}}focus(){this.element.focus()}_createTooltipView(){const e=new nw;e.bind("text").to(this,"_tooltipString");e.bind("position").to(this,"tooltipPosition");return e}_createLabelView(e){const t=new _b;const i=this.bindTemplate;t.setTemplate({tag:"span",attributes:{class:["ck","ck-button__label"],style:i.to("labelStyle"),id:`ck-editor__aria-label_${e}`},children:[{text:this.bindTemplate.to("label")}]});return t}_createKeystrokeView(){const e=new _b;e.setTemplate({tag:"span",attributes:{class:["ck","ck-button__keystroke"]},children:[{text:this.bindTemplate.to("keystroke",e=>Dc(e))}]});return e}_getTooltipString(e,t,i){if(e){if(typeof e=="string"){return e}else{if(i){i=Dc(i)}if(e instanceof Function){return e(t,i)}else{return`${t}${i?` (${i})`:""}`}}}return""}}var sw='';class aw extends rw{constructor(e){super(e);this.arrowView=this._createArrowView();this.extendTemplate({attributes:{"aria-haspopup":true}});this.delegate("execute").to(this,"open")}render(){super.render();this.children.add(this.arrowView)}_createArrowView(){const e=new tw;e.content=sw;e.extendTemplate({attributes:{class:"ck-dropdown__arrow"}});return e}}var lw=i(35);class cw extends _b{constructor(){super();this.items=this.createCollection();this.focusTracker=new Ep;this.keystrokes=new mp;this._focusCycler=new zb({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowup",focusNext:"arrowdown"}});this.setTemplate({tag:"ul",attributes:{class:["ck","ck-reset","ck-list"]},children:this.items})}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)});this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}}class dw extends _b{constructor(e){super(e);this.children=this.createCollection();this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__item"]},children:this.children})}focus(){this.children.first.focus()}}class uw extends _b{constructor(e){super(e);this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__separator"]}})}}var hw=i(37);class fw extends rw{constructor(e){super(e);this.isToggleable=true;this.toggleSwitchView=this._createToggleView();this.extendTemplate({attributes:{class:"ck-switchbutton"}})}render(){super.render();this.children.add(this.toggleSwitchView)}_createToggleView(){const e=new _b;e.setTemplate({tag:"span",attributes:{class:["ck","ck-button__toggle"]},children:[{tag:"span",attributes:{class:["ck","ck-button__toggle__inner"]}}]});return e}}function mw({emitter:e,activator:t,callback:i,contextElements:n}){e.listenTo(document,"mousedown",(e,{target:o})=>{if(!t()){return}for(const e of n){if(e.contains(o)){return}}i()})}var gw=i(39);var pw=i(41);function bw(e,t=aw){const i=new t(e);const n=new Wb(e);const o=new Xb(e,i,n);i.bind("isEnabled").to(o);if(i instanceof aw){i.bind("isOn").to(o,"isOpen")}else{i.arrowView.bind("isOn").to(o,"isOpen")}kw(o);return o}function ww(e,t){const i=e.locale;const n=i.t;const o=e.toolbarView=new Tw(i);o.set("ariaLabel",n("Dropdown toolbar"));e.extendTemplate({attributes:{class:["ck-toolbar-dropdown"]}});t.map(e=>o.items.add(e));e.panelView.children.add(o);o.items.delegate("execute").to(e)}function _w(e,t){const i=e.locale;const n=e.listView=new cw(i);n.items.bindTo(t).using(({type:e,model:t})=>{if(e==="separator"){return new uw(i)}else if(e==="button"||e==="switchbutton"){const n=new dw(i);let o;if(e==="button"){o=new rw(i)}else{o=new fw(i)}o.bind(...Object.keys(t)).to(t);o.delegate("execute").to(n);n.children.add(o);return n}});e.panelView.children.add(n);n.items.delegate("execute").to(e)}function kw(e){vw(e);yw(e);xw(e)}function vw(e){e.on("render",()=>{mw({emitter:e,activator:()=>e.isOpen,callback:()=>{e.isOpen=false},contextElements:[e.element]})})}function yw(e){e.on("execute",t=>{if(t.source instanceof fw){return}e.isOpen=false})}function xw(e){e.keystrokes.set("arrowdown",(t,i)=>{if(e.isOpen){e.panelView.focus();i()}});e.keystrokes.set("arrowup",(t,i)=>{if(e.isOpen){e.panelView.focusLast();i()}})}var Aw='';var Cw=i(43);class Tw extends _b{constructor(e,t){super(e);const i=this.bindTemplate;const n=this.t;this.options=t||{};this.set("ariaLabel",n("Editor toolbar"));this.set("maxWidth","auto");this.items=this.createCollection();this.focusTracker=new Ep;this.keystrokes=new mp;this.set("class");this.set("isCompact",false);this.itemsView=new Ew(e);this.children=this.createCollection();this.children.add(this.itemsView);this.focusables=this.createCollection();this._focusCycler=new zb({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:["arrowleft","arrowup"],focusNext:["arrowright","arrowdown"]}});this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar",i.to("class"),i.if("isCompact","ck-toolbar_compact")],role:"toolbar","aria-label":i.to("ariaLabel"),style:{maxWidth:i.to("maxWidth")}},children:this.children,on:{mousedown:Hb(this)}});this._behavior=this.options.shouldGroupWhenFull?new Mw(this):new Pw(this)}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)});this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element);this._behavior.render(this)}destroy(){this._behavior.destroy();return super.destroy()}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}fillFromConfig(e,t){e.map(e=>{if(e=="|"){this.items.add(new jb)}else if(t.has(e)){this.items.add(t.create(e))}else{console.warn(Object(ss["a"])("toolbarview-item-unavailable: The requested toolbar item is unavailable."),{name:e})}})}}class Ew extends _b{constructor(e){super(e);this.children=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar__items"]},children:this.children})}}class Pw{constructor(e){const t=e.bindTemplate;e.set("isVertical",false);e.itemsView.children.bindTo(e.items).using(e=>e);e.focusables.bindTo(e.items).using(e=>e);e.extendTemplate({attributes:{class:[t.if("isVertical","ck-toolbar_vertical")]}})}render(){}destroy(){}}class Mw{constructor(e){this.viewChildren=e.children;this.viewFocusables=e.focusables;this.viewItemsView=e.itemsView;this.viewFocusTracker=e.focusTracker;this.viewLocale=e.locale;this.ungroupedItems=e.createCollection();this.groupedItems=e.createCollection();this.groupedItemsDropdown=this._createGroupedItemsDropdown();this.resizeObserver=null;this.cachedPadding=null;this.shouldUpdateGroupingOnNextResize=false;e.itemsView.children.bindTo(this.ungroupedItems).using(e=>e);this.ungroupedItems.on("add",this._updateFocusCycleableItems.bind(this));this.ungroupedItems.on("remove",this._updateFocusCycleableItems.bind(this));e.children.on("add",this._updateFocusCycleableItems.bind(this));e.children.on("remove",this._updateFocusCycleableItems.bind(this));e.items.on("add",(e,t,i)=>{if(i>this.ungroupedItems.length){this.groupedItems.add(t,i-this.ungroupedItems.length)}else{this.ungroupedItems.add(t,i)}this._updateGrouping()});e.items.on("remove",(e,t,i)=>{if(i>this.ungroupedItems.length){this.groupedItems.remove(t)}else{this.ungroupedItems.remove(t)}this._updateGrouping()});e.extendTemplate({attributes:{class:["ck-toolbar_grouping"]}})}render(e){this.viewElement=e.element;this._enableGroupingOnResize();this._enableGroupingOnMaxWidthChange(e)}destroy(){this.groupedItemsDropdown.destroy();this.resizeObserver.destroy()}_updateGrouping(){if(!this.viewElement.ownerDocument.body.contains(this.viewElement)){return}if(!this.viewElement.offsetParent){this.shouldUpdateGroupingOnNextResize=true;return}let e;while(this._areItemsOverflowing){this._groupLastItem();e=true}if(!e&&this.groupedItems.length){while(this.groupedItems.length&&!this._areItemsOverflowing){this._ungroupFirstItem()}if(this._areItemsOverflowing){this._groupLastItem()}}}get _areItemsOverflowing(){if(!this.ungroupedItems.length){return false}const e=this.viewElement;const t=this.viewLocale.uiLanguageDirection;const i=new vh(e.lastChild);const n=new vh(e);if(!this.cachedPadding){const i=Ld.window.getComputedStyle(e);const n=t==="ltr"?"paddingRight":"paddingLeft";this.cachedPadding=Number.parseInt(i[n])}if(t==="ltr"){return i.right>n.right-this.cachedPadding}else{return i.left{if(!e||e!==t.contentRect.width||this.shouldUpdateGroupingOnNextResize){this.shouldUpdateGroupingOnNextResize=false;this._updateGrouping();e=t.contentRect.width}});this._updateGrouping()}_enableGroupingOnMaxWidthChange(e){e.on("change:maxWidth",()=>{this._updateGrouping()})}_groupLastItem(){if(!this.groupedItems.length){this.viewChildren.add(new jb);this.viewChildren.add(this.groupedItemsDropdown);this.viewFocusTracker.add(this.groupedItemsDropdown.element)}this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last),0)}_ungroupFirstItem(){this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first));if(!this.groupedItems.length){this.viewChildren.remove(this.groupedItemsDropdown);this.viewChildren.remove(this.viewChildren.last);this.viewFocusTracker.remove(this.groupedItemsDropdown.element)}}_createGroupedItemsDropdown(){const e=this.viewLocale;const t=e.t;const i=bw(e);i.class="ck-toolbar__grouped-dropdown";i.panelPosition=e.uiLanguageDirection==="ltr"?"sw":"se";ww(i,[]);i.buttonView.set({label:t("Show more items"),tooltip:true,icon:Aw});i.toolbarView.items.bindTo(this.groupedItems).using(e=>e);return i}_updateFocusCycleableItems(){this.viewFocusables.clear();this.ungroupedItems.map(e=>{this.viewFocusables.add(e)});if(this.groupedItems.length){this.viewFocusables.add(this.groupedItemsDropdown)}}}var Sw=i(45);class Iw extends Mb{constructor(e,t,i={}){super(e);this.stickyPanel=new Rb(e);this.toolbar=new Tw(e,{shouldGroupWhenFull:i.shouldToolbarGroupWhenFull});this.editable=new Ib(e,t)}render(){super.render();this.stickyPanel.content.add(this.toolbar);this.top.add(this.stickyPanel);this.main.add(this.editable)}}function Lw(e){if(e instanceof HTMLTextAreaElement){return e.value}return e.innerHTML}class Nw extends pp{constructor(e,t){super(t);if(Yr(e)){this.sourceElement=e}this.data.processor=new Ap(this.data.viewDocument);this.model.document.createRoot();const i=!this.config.get("toolbar.shouldNotGroupWhenFull");const n=new Iw(this.locale,this.editing.view,{shouldToolbarGroupWhenFull:i});this.ui=new Hp(this,n);yp(this)}destroy(){if(this.sourceElement){this.updateSourceElement()}this.ui.destroy();return super.destroy()}static create(e,t={}){return new Promise(i=>{const n=new this(e,t);i(n.initPlugins().then(()=>n.ui.init(Yr(e)?e:null)).then(()=>{if(!Yr(e)&&t.initialData){throw new ss["b"]("editor-create-initial-data: "+"The config.initialData option cannot be used together with initial data passed in Editor.create().",null)}const i=t.initialData||Ow(e);return n.data.init(i)}).then(()=>n.fire("ready")).then(()=>n))})}}ys(Nw,wp);ys(Nw,vp);function Ow(e){return Yr(e)?Lw(e):e}class Rw{constructor(e){this.editor=e;this.set("isEnabled",true);this._disableStack=new Set}forceDisabled(e){this._disableStack.add(e);if(this._disableStack.size==1){this.on("set:isEnabled",zw,{priority:"highest"});this.isEnabled=false}}clearForceDisabled(e){this._disableStack.delete(e);if(this._disableStack.size==0){this.off("set:isEnabled",zw);this.isEnabled=true}}destroy(){this.stopListening()}static get isContextPlugin(){return false}}ys(Rw,Jl);function zw(e){e.return=false;e.stop()}class Dw{constructor(e){this.editor=e;this.set("value",undefined);this.set("isEnabled",false);this._disableStack=new Set;this.decorate("execute");this.listenTo(this.editor.model.document,"change",()=>{this.refresh()});this.on("execute",e=>{if(!this.isEnabled){e.stop()}},{priority:"high"});this.listenTo(e,"change:isReadOnly",(e,t,i)=>{if(i){this.forceDisabled("readOnlyMode")}else{this.clearForceDisabled("readOnlyMode")}})}refresh(){this.isEnabled=true}forceDisabled(e){this._disableStack.add(e);if(this._disableStack.size==1){this.on("set:isEnabled",jw,{priority:"highest"});this.isEnabled=false}}clearForceDisabled(e){this._disableStack.delete(e);if(this._disableStack.size==0){this.off("set:isEnabled",jw);this.refresh()}}execute(){}destroy(){this.stopListening()}}ys(Dw,Jl);function jw(e){e.return=false;e.stop()}function Bw(e){const t=e.next();if(t.done){return null}return t.value}const Vw=["left","right","center","justify"];function Fw(e){return Vw.includes(e)}function Hw(e,t){if(t.contentLanguageDirection=="rtl"){return e==="right"}else{return e==="left"}}const Ww="alignment";class Uw extends Dw{refresh(){const e=this.editor;const t=e.locale;const i=Bw(this.editor.model.document.selection.getSelectedBlocks());this.isEnabled=!!i&&this._canBeAligned(i);if(this.isEnabled&&i.hasAttribute("alignment")){this.value=i.getAttribute("alignment")}else{this.value=t.contentLanguageDirection==="rtl"?"right":"left"}}execute(e={}){const t=this.editor;const i=t.locale;const n=t.model;const o=n.document;const r=e.value;n.change(e=>{const t=Array.from(o.selection.getSelectedBlocks()).filter(e=>this._canBeAligned(e));const n=t[0].getAttribute("alignment");const s=Hw(r,i)||n===r||!r;if(s){qw(t,e)}else{$w(t,e,r)}})}_canBeAligned(e){return this.editor.model.schema.checkAttribute(e,Ww)}}function qw(e,t){for(const i of e){t.removeAttribute(Ww,i)}}function $w(e,t,i){for(const n of e){t.setAttribute(Ww,i,n)}}class Gw extends Rw{static get pluginName(){return"AlignmentEditing"}constructor(e){super(e);e.config.define("alignment",{options:[...Vw]})}init(){const e=this.editor;const t=e.locale;const i=e.model.schema;const n=e.config.get("alignment.options").filter(Fw);i.extend("$block",{allowAttributes:"alignment"});e.model.schema.setAttributeProperties("alignment",{isFormatting:true});const o=Yw(n.filter(e=>!Hw(e,t)));e.conversion.attributeToAttribute(o);e.commands.add("alignment",new Uw(e))}}function Yw(e){const t={model:{key:"alignment",values:e.slice()},view:{}};for(const i of e){t.view[i]={key:"style",value:{"text-align":i}}}return t}var Kw='';var Jw='';var Qw='';var Zw='';const Xw=new Map([["left",Kw],["right",Jw],["center",Qw],["justify",Zw]]);class e_ extends Rw{get localizedOptionTitles(){const e=this.editor.t;return{left:e("Align left"),right:e("Align right"),center:e("Align center"),justify:e("Justify")}}static get pluginName(){return"AlignmentUI"}init(){const e=this.editor;const t=e.ui.componentFactory;const i=e.t;const n=e.config.get("alignment.options");n.filter(Fw).forEach(e=>this._addButton(e));t.add("alignment",e=>{const o=bw(e);const r=n.map(e=>t.create(`alignment:${e}`));ww(o,r);o.buttonView.set({label:i("Text alignment"),tooltip:true});o.toolbarView.isVertical=true;o.toolbarView.ariaLabel=i("Text alignment toolbar");o.extendTemplate({attributes:{class:"ck-alignment-dropdown"}});const s=e.contentLanguageDirection==="rtl"?Jw:Kw;o.buttonView.bind("icon").toMany(r,"isOn",(...e)=>{const t=e.findIndex(e=>e);if(t<0){return s}return r[t].icon});o.bind("isEnabled").toMany(r,"isEnabled",(...e)=>e.some(e=>e));return o})}_addButton(e){const t=this.editor;t.ui.componentFactory.add(`alignment:${e}`,i=>{const n=t.commands.get("alignment");const o=new rw(i);o.set({label:this.localizedOptionTitles[e],icon:Xw.get(e),tooltip:true,isToggleable:true});o.bind("isEnabled").to(n);o.bind("isOn").to(n,"value",t=>t===e);this.listenTo(o,"execute",()=>{t.execute("alignment",{value:e});t.editing.view.focus()});return o})}}class t_ extends Rw{static get requires(){return[Gw,e_]}static get pluginName(){return"Alignment"}}class i_{constructor(e){this.context=e}destroy(){this.stopListening()}static get isContextPlugin(){return true}}ys(i_,Jl);class n_ extends i_{static get pluginName(){return"PendingActions"}init(){this.set("hasAny",false);this._actions=new xs({idProperty:"_id"});this._actions.delegate("add","remove").to(this)}add(e){if(typeof e!=="string"){throw new ss["b"]("pendingactions-add-invalid-message: The message must be a string.",this)}const t=Object.create(Jl);t.set("message",e);this._actions.add(t);this.hasAny=true;return t}remove(e){this._actions.remove(e);this.hasAny=!!this._actions.length}get first(){return this._actions.get(0)}[Symbol.iterator](){return this._actions[Symbol.iterator]()}}class o_{constructor(){const e=new window.FileReader;this._reader=e;this._data=undefined;this.set("loaded",0);e.onprogress=e=>{this.loaded=e.loaded}}get error(){return this._reader.error}get data(){return this._data}read(e){const t=this._reader;this.total=e.size;return new Promise((i,n)=>{t.onload=()=>{const e=t.result;this._data=e;i(e)};t.onerror=()=>{n("error")};t.onabort=()=>{n("aborted")};this._reader.readAsDataURL(e)})}abort(){this._reader.abort()}}ys(o_,Jl);class r_ extends Rw{static get pluginName(){return"FileRepository"}static get requires(){return[n_]}init(){this.loaders=new xs;this.loaders.on("add",()=>this._updatePendingAction());this.loaders.on("remove",()=>this._updatePendingAction());this._loadersMap=new Map;this._pendingAction=null;this.set("uploaded",0);this.set("uploadTotal",null);this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(e,t)=>t?e/t*100:0)}getLoader(e){return this._loadersMap.get(e)||null}createLoader(e){if(!this.createUploadAdapter){console.warn(Object(ss["a"])("filerepository-no-upload-adapter: Upload adapter is not defined."));return null}const t=new s_(Promise.resolve(e),this.createUploadAdapter);this.loaders.add(t);this._loadersMap.set(e,t);if(e instanceof Promise){t.file.then(e=>{this._loadersMap.set(e,t)}).catch(()=>{})}t.on("change:uploaded",()=>{let e=0;for(const t of this.loaders){e+=t.uploaded}this.uploaded=e});t.on("change:uploadTotal",()=>{let e=0;for(const t of this.loaders){if(t.uploadTotal){e+=t.uploadTotal}}this.uploadTotal=e});return t}destroyLoader(e){const t=e instanceof s_?e:this.getLoader(e);t._destroy();this.loaders.remove(t);this._loadersMap.forEach((e,i)=>{if(e===t){this._loadersMap.delete(i)}})}_updatePendingAction(){const e=this.editor.plugins.get(n_);if(this.loaders.length){if(!this._pendingAction){const t=this.editor.t;const i=e=>`${t("Upload in progress")} ${parseInt(e)}%.`;this._pendingAction=e.add(i(this.uploadedPercent));this._pendingAction.bind("message").to(this,"uploadedPercent",i)}}else{e.remove(this._pendingAction);this._pendingAction=null}}}ys(r_,Jl);class s_{constructor(e,t){this.id=is();this._filePromiseWrapper=this._createFilePromiseWrapper(e);this._adapter=t(this);this._reader=new o_;this.set("status","idle");this.set("uploaded",0);this.set("uploadTotal",null);this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(e,t)=>t?e/t*100:0);this.set("uploadResponse",null)}get file(){if(!this._filePromiseWrapper){return Promise.resolve(null)}else{return this._filePromiseWrapper.promise.then(e=>this._filePromiseWrapper?e:null)}}get data(){return this._reader.data}read(){if(this.status!="idle"){throw new ss["b"]("filerepository-read-wrong-status: You cannot call read if the status is different than idle.",this)}this.status="reading";return this.file.then(e=>this._reader.read(e)).then(e=>{if(this.status!=="reading"){throw this.status}this.status="idle";return e}).catch(e=>{if(e==="aborted"){this.status="aborted";throw"aborted"}this.status="error";throw this._reader.error?this._reader.error:e})}upload(){if(this.status!="idle"){throw new ss["b"]("filerepository-upload-wrong-status: You cannot call upload if the status is different than idle.",this)}this.status="uploading";return this.file.then(()=>this._adapter.upload()).then(e=>{this.uploadResponse=e;this.status="idle";return e}).catch(e=>{if(this.status==="aborted"){throw"aborted"}this.status="error";throw e})}abort(){const e=this.status;this.status="aborted";if(!this._filePromiseWrapper.isFulfilled){this._filePromiseWrapper.promise.catch(()=>{});this._filePromiseWrapper.rejecter("aborted")}else if(e=="reading"){this._reader.abort()}else if(e=="uploading"&&this._adapter.abort){this._adapter.abort()}this._destroy()}_destroy(){this._filePromiseWrapper=undefined;this._reader=undefined;this._adapter=undefined;this.uploadResponse=undefined}_createFilePromiseWrapper(e){const t={};t.promise=new Promise((i,n)=>{t.rejecter=n;t.isFulfilled=false;e.then(e=>{t.isFulfilled=true;i(e)}).catch(e=>{t.isFulfilled=true;n(e)})});return t}}ys(s_,Jl);class a_ extends Rw{static get requires(){return[r_]}static get pluginName(){return"Base64UploadAdapter"}init(){this.editor.plugins.get(r_).createUploadAdapter=e=>new l_(e)}}class l_{constructor(e){this.loader=e}upload(){return new Promise((e,t)=>{const i=this.reader=new window.FileReader;i.addEventListener("load",()=>{e({default:i.result})});i.addEventListener("error",e=>{t(e)});i.addEventListener("abort",()=>{t()});this.loader.file.then(e=>{i.readAsDataURL(e)})})}abort(){this.reader.abort()}}class c_ extends Dw{refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(e={}){const t=this.editor.model;const i=t.schema;const n=t.document.selection;const o=Array.from(n.getSelectedBlocks());const r=e.forceValue===undefined?!this.value:e.forceValue;t.change(e=>{if(!r){this._removeQuote(e,o.filter(d_))}else{const t=o.filter(e=>d_(e)||h_(i,e));this._applyQuote(e,t)}})}_getValue(){const e=this.editor.model.document.selection;const t=Bw(e.getSelectedBlocks());return!!(t&&d_(t))}_checkEnabled(){if(this.value){return true}const e=this.editor.model.document.selection;const t=this.editor.model.schema;const i=Bw(e.getSelectedBlocks());if(!i){return false}return h_(t,i)}_removeQuote(e,t){u_(e,t).reverse().forEach(t=>{if(t.start.isAtStart&&t.end.isAtEnd){e.unwrap(t.start.parent);return}if(t.start.isAtStart){const i=e.createPositionBefore(t.start.parent);e.move(t,i);return}if(!t.end.isAtEnd){e.split(t.end)}const i=e.createPositionAfter(t.end.parent);e.move(t,i)})}_applyQuote(e,t){const i=[];u_(e,t).reverse().forEach(t=>{let n=d_(t.start);if(!n){n=e.createElement("blockQuote");e.wrap(t,n)}i.push(n)});i.reverse().reduce((t,i)=>{if(t.nextSibling==i){e.merge(e.createPositionAfter(t));return t}return i})}}function d_(e){return e.parent.name=="blockQuote"?e.parent:null}function u_(e,t){let i;let n=0;const o=[];while(n{if(e.endsWith("blockQuote")&&t.name=="blockQuote"){return false}});e.conversion.elementToElement({model:"blockQuote",view:"blockquote"});e.model.document.registerPostFixer(i=>{const n=e.model.document.differ.getChanges();for(const e of n){if(e.type=="insert"){const n=e.position.nodeAfter;if(!n){continue}if(n.is("blockQuote")&&n.isEmpty){i.remove(n);return true}else if(n.is("blockQuote")&&!t.checkChild(e.position,n)){i.unwrap(n);return true}else if(n.is("element")){const e=i.createRangeIn(n);for(const n of e.getItems()){if(n.is("blockQuote")&&!t.checkChild(i.createPositionBefore(n),n)){i.unwrap(n);return true}}}}else if(e.type=="remove"){const t=e.position.parent;if(t.is("blockQuote")&&t.isEmpty){i.remove(t);return true}}}return false})}afterInit(){const e=this.editor;const t=e.commands.get("blockQuote");this.listenTo(this.editor.editing.view.document,"enter",(e,i)=>{const n=this.editor.model.document;const o=n.selection.getLastPosition().parent;if(n.selection.isCollapsed&&o.isEmpty&&t.value){this.editor.execute("blockQuote");this.editor.editing.view.scrollToTheSelection();i.preventDefault();e.stop()}})}}var m_='';var g_=i(47);class p_ extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("blockQuote",i=>{const n=e.commands.get("blockQuote");const o=new rw(i);o.set({label:t("Block quote"),icon:m_,tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute("blockQuote");e.editing.view.focus()});return o})}}class b_ extends Rw{static get requires(){return[f_,p_]}static get pluginName(){return"BlockQuote"}}class w_ extends Dw{constructor(e,t){super(e);this.attributeKey=t}refresh(){const e=this.editor.model;const t=e.document;this.value=this._getValueFromFirstAllowedNode();this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){const t=this.editor.model;const i=t.document;const n=i.selection;const o=e.forceValue===undefined?!this.value:e.forceValue;t.change(e=>{if(n.isCollapsed){if(o){e.setSelectionAttribute(this.attributeKey,true)}else{e.removeSelectionAttribute(this.attributeKey)}}else{const i=t.schema.getValidRanges(n.getRanges(),this.attributeKey);for(const t of i){if(o){e.setAttribute(this.attributeKey,o,t)}else{e.removeAttribute(this.attributeKey,t)}}}})}_getValueFromFirstAllowedNode(){const e=this.editor.model;const t=e.schema;const i=e.document.selection;if(i.isCollapsed){return i.hasAttribute(this.attributeKey)}for(const e of i.getRanges()){for(const i of e.getItems()){if(t.checkAttribute(i,this.attributeKey)){return i.hasAttribute(this.attributeKey)}}}return false}}const __="bold";class k_ extends Rw{static get pluginName(){return"BoldEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:__});e.model.schema.setAttributeProperties(__,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:__,view:"strong",upcastAlso:["b",e=>{const t=e.getStyle("font-weight");if(!t){return null}if(t=="bold"||Number(t)>=600){return{name:true,styles:["font-weight"]}}}]});e.commands.add(__,new w_(e,__));e.keystrokes.set("CTRL+B",__)}}var v_='';const y_="bold";class x_ extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(y_,i=>{const n=e.commands.get(y_);const o=new rw(i);o.set({label:t("Bold"),icon:v_,keystroke:"CTRL+B",tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(y_);e.editing.view.focus()});return o})}}class A_ extends Rw{static get requires(){return[k_,x_]}static get pluginName(){return"Bold"}}const C_="code";class T_ extends Rw{static get pluginName(){return"CodeEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:C_});e.model.schema.setAttributeProperties(C_,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:C_,view:"code",upcastAlso:{styles:{"word-wrap":"break-word"}}});e.commands.add(C_,new w_(e,C_))}}var E_='';var P_=i(11);const M_="code";class S_ extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(M_,i=>{const n=e.commands.get(M_);const o=new rw(i);o.set({label:t("Code"),icon:E_,tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(M_);e.editing.view.focus()});return o})}}class I_ extends Rw{static get requires(){return[T_,S_]}static get pluginName(){return"Code"}}function*L_(e,t){for(const i of t){if(i&&e.getAttributeProperties(i[0]).copyOnEnter){yield i}}}class N_ extends Dw{execute(){const e=this.editor.model;const t=e.document;e.change(i=>{R_(e,i,t.selection);this.fire("afterExecute",{writer:i})})}refresh(){const e=this.editor.model;const t=e.document;this.isEnabled=O_(e.schema,t.selection)}}function O_(e,t){if(t.rangeCount>1){return false}const i=t.anchor;if(!i||!e.checkChild(i,"softBreak")){return false}const n=t.getFirstRange();const o=n.start.parent;const r=n.end.parent;if((D_(o,e)||D_(r,e))&&o!==r){return false}return true}function R_(e,t,i){const n=i.isCollapsed;const o=i.getFirstRange();const r=o.start.parent;const s=o.end.parent;const a=r==s;if(n){const n=L_(e.schema,i.getAttributes());z_(e,t,o.end);t.removeSelectionAttribute(i.getAttributeKeys());t.setSelectionAttribute(n)}else{const n=!(o.start.isAtStart&&o.end.isAtEnd);e.deleteContent(i,{leaveUnmerged:n});if(a){z_(e,t,i.focus)}else{if(n){t.setSelection(s,0)}}}}function z_(e,t,i){const n=t.createElement("softBreak");e.insertContent(n,i);t.setSelection(n,"after")}function D_(e,t){if(e.is("rootElement")){return false}return t.isLimit(e)||D_(e.parent,t)}class j_ extends Gd{constructor(e){super(e);const t=this.document;t.on("keydown",(e,i)=>{if(this.isEnabled&&i.keyCode==Oc.enter){let n;t.once("enter",e=>n=e,{priority:"highest"});t.fire("enter",new Yu(t,i.domEvent,{isSoft:i.shiftKey}));if(n&&n.stop.called){e.stop()}}})}observe(){}}class B_ extends Rw{static get pluginName(){return"ShiftEnter"}init(){const e=this.editor;const t=e.model.schema;const i=e.conversion;const n=e.editing.view;const o=n.document;t.register("softBreak",{allowWhere:"$text",isInline:true});i.for("upcast").elementToElement({model:"softBreak",view:"br"});i.for("downcast").elementToElement({model:"softBreak",view:(e,t)=>t.createEmptyElement("br")});n.addObserver(j_);e.commands.add("shiftEnter",new N_(e));this.listenTo(o,"enter",(t,i)=>{i.preventDefault();if(!i.isSoft){return}e.execute("shiftEnter");n.scrollToTheSelection()},{priority:"low"})}}function V_(e){const t=e.t;const i=e.config.get("codeBlock.languages");for(const e of i){if(e.label==="Plain text"){e.label=t("Plain text")}if(e.class===undefined){e.class=`language-${e.language}`}}return i}function F_(e,t,i){const n={};for(const o of e){if(t==="class"){n[o[t].split(" ").shift()]=o[i]}else{n[o[t]]=o[i]}}return n}function H_(e){return e.data.match(/^(\s*)/)[0]}function W_(e,t){const i=e.createDocumentFragment();const n=t.split("\n").map(t=>e.createText(t));const o=n[n.length-1];for(const t of n){e.append(t,i);if(t!==o){e.appendElement("softBreak",i)}}return i}function U_(e){const t=e.document.selection;const i=[];if(t.isCollapsed){i.push(t.anchor)}else{const n=t.getFirstRange().getWalker({ignoreElementEnd:true,direction:"backward"});for(const{item:t}of n){if(t.is("textProxy")&&t.parent.is("codeBlock")){const n=H_(t.textNode);const{parent:o,startOffset:r}=t.textNode;const s=e.createPositionAt(o,r+n.length);i.push(s)}}}return i}function q_(e){const t=Bw(e.getSelectedBlocks());return t&&t.is("codeBlock")}class $_ extends Dw{refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(e={}){const t=this.editor;const i=t.model;const n=i.document.selection;const o=V_(t);const r=o[0];const s=Array.from(n.getSelectedBlocks());const a=e.forceValue===undefined?!this.value:e.forceValue;const l=e.language||r.language;i.change(e=>{if(a){this._applyCodeBlock(e,s,l)}else{this._removeCodeBlock(e,s)}})}_getValue(){const e=this.editor.model.document.selection;const t=Bw(e.getSelectedBlocks());const i=!!(t&&t.is("codeBlock"));return i?t.getAttribute("language"):false}_checkEnabled(){if(this.value){return true}const e=this.editor.model.document.selection;const t=this.editor.model.schema;const i=Bw(e.getSelectedBlocks());if(!i){return false}return G_(t,i)}_applyCodeBlock(e,t,i){const n=this.editor.model.schema;const o=t.filter(e=>G_(n,e));for(const t of o){e.rename(t,"codeBlock");e.setAttribute("language",i,t);n.removeDisallowedAttributes([t],e)}o.reverse().forEach((t,i)=>{const n=o[i+1];if(t.previousSibling===n){e.appendElement("softBreak",n);e.merge(e.createPositionBefore(t))}})}_removeCodeBlock(e,t){const i=t.filter(e=>e.is("codeBlock"));for(const t of i){const i=e.createRangeOn(t);for(const t of Array.from(i.getItems()).reverse()){if(t.is("softBreak")&&t.parent.is("codeBlock")){const{position:i}=e.split(e.createPositionBefore(t));e.rename(i.nodeAfter,"paragraph");e.removeAttribute("language",i.nodeAfter);e.remove(t)}}e.rename(t,"paragraph");e.removeAttribute("language",t)}}}function G_(e,t){if(t.is("rootElement")||e.isLimit(t)){return false}return e.checkChild(t.parent,"codeBlock")}class Y_ extends Dw{constructor(e){super(e);this._indentSequence=e.config.get("codeBlock.indentSequence")}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor;const t=e.model;t.change(e=>{const i=U_(t);for(const t of i){e.insertText(this._indentSequence,t)}})}_checkEnabled(){if(!this._indentSequence){return false}return q_(this.editor.model.document.selection)}}class K_ extends Dw{constructor(e){super(e);this._indentSequence=e.config.get("codeBlock.indentSequence")}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor;const t=e.model;t.change(e=>{const i=U_(t);for(const t of i){const i=J_(this.editor.model,t,this._indentSequence);if(i){e.remove(i)}}})}_checkEnabled(){if(!this._indentSequence){return false}const e=this.editor.model;if(!q_(e.document.selection)){return false}return U_(e).some(t=>J_(e,t,this._indentSequence))}}function J_(e,t,i){const n=Q_(t);if(!n){return null}const o=H_(n);const r=o.lastIndexOf(i);if(r+i.length!==o.length){return null}if(r===-1){return null}const{parent:s,startOffset:a}=n;return e.createRange(e.createPositionAt(s,a+r),e.createPositionAt(s,a+r+i.length))}function Q_(e){let t=e.parent.getChild(e.index);if(!t||t.is("softBreak")){t=e.nodeBefore}if(!t||t.is("softBreak")){return null}return t}function Z_(e,t,i=false){const n=F_(t,"language","class");const o=F_(t,"language","label");return(t,r,s)=>{const{writer:a,mapper:l,consumable:c}=s;if(!c.consume(r.item,"insert")){return}const d=r.item.getAttribute("language");const u=l.toViewPosition(e.createPositionBefore(r.item));const h={};if(i){h["data-language"]=o[d];h.spellcheck="false"}const f=a.createContainerElement("pre",h);const m=a.createContainerElement("code",{class:n[d]||null});a.insert(a.createPositionAt(f,0),m);a.insert(u,f);l.bindElements(r.item,m)}}function X_(e){return(t,i,n)=>{if(i.item.parent.name!=="codeBlock"){return}const{writer:o,mapper:r,consumable:s}=n;if(!s.consume(i.item,"insert")){return}const a=r.toViewPosition(e.createPositionBefore(i.item));o.insert(a,o.createText("\n"))}}function ek(e,t){const i=F_(t,"class","language");const n=t[0].language;return(t,o,r)=>{const s=o.viewItem;const a=s.getChild(0);if(!a||!a.is("code")){return}const{consumable:l,writer:c}=r;if(!l.test(s,{name:true})||!l.test(a,{name:true})){return}const d=c.createElement("codeBlock");const u=[...a.getClassNames()];if(!u.length){u.push("")}for(const e of u){const t=i[e];if(t){c.setAttribute("language",t,d);break}}if(!d.hasAttribute("language")){c.setAttribute("language",n,d)}const h=[...e.createRangeIn(a)].filter(e=>e.type==="text").map(({item:e})=>e.data).join("");const f=W_(c,h);c.append(f,d);const m=r.splitToAllowedParent(d,o.modelCursor);if(!m){return}c.insert(d,m.position);l.consume(s,{name:true});l.consume(a,{name:true});const g=r.getSplitParts(d);o.modelRange=c.createRange(r.writer.createPositionBefore(d),r.writer.createPositionAfter(g[g.length-1]));if(m.cursorParent){o.modelCursor=c.createPositionAt(m.cursorParent,0)}else{o.modelCursor=o.modelRange.end}}}const tk="paragraph";class ik extends Rw{static get pluginName(){return"CodeBlockEditing"}static get requires(){return[B_]}constructor(e){super(e);e.config.define("codeBlock",{languages:[{language:"plaintext",label:"Plain text"},{language:"c",label:"C"},{language:"cs",label:"C#"},{language:"cpp",label:"C++"},{language:"css",label:"CSS"},{language:"diff",label:"Diff"},{language:"html",label:"HTML"},{language:"java",label:"Java"},{language:"javascript",label:"JavaScript"},{language:"php",label:"PHP"},{language:"python",label:"Python"},{language:"ruby",label:"Ruby"},{language:"typescript",label:"TypeScript"},{language:"xml",label:"XML"}],indentSequence:"\t"})}init(){const e=this.editor;const t=e.model.schema;const i=e.model;const n=V_(e);e.commands.add("codeBlock",new $_(e));e.commands.add("indentCodeBlock",new Y_(e));e.commands.add("outdentCodeBlock",new K_(e));const o=e=>(t,i)=>{const n=this.editor.commands.get(e);if(n.isEnabled){this.editor.execute(e);i()}};e.keystrokes.set("Tab",o("indentCodeBlock"));e.keystrokes.set("Shift+Tab",o("outdentCodeBlock"));t.register("codeBlock",{allowWhere:"$block",isBlock:true,allowAttributes:["language"]});t.extend("$text",{allowIn:"codeBlock"});t.addAttributeCheck(e=>{if(e.endsWith("codeBlock $text")){return false}});e.editing.downcastDispatcher.on("insert:codeBlock",Z_(i,n,true));e.data.downcastDispatcher.on("insert:codeBlock",Z_(i,n));e.data.downcastDispatcher.on("insert:softBreak",X_(i),{priority:"high"});e.data.upcastDispatcher.on("element:pre",ek(e.editing.view,n));this.listenTo(e.editing.view.document,"clipboardInput",(e,t)=>{const n=i.document.selection;if(!n.anchor.parent.is("codeBlock")){return}const o=t.dataTransfer.getData("text/plain");i.change(t=>{i.insertContent(W_(t,o),n);e.stop()})});this.listenTo(i,"getSelectedContent",(e,[n])=>{const o=n.anchor;if(n.isCollapsed||!o.parent.is("codeBlock")||!o.hasSameParentAs(n.focus)){return}i.change(i=>{const r=e.return;if(r.childCount>1||n.containsEntireContent(o.parent)){const t=i.createElement("codeBlock",o.parent.getAttributes());i.append(r,t);const n=i.createDocumentFragment();i.append(t,n);e.return=n}else{const e=r.getChild(0);if(t.checkAttribute(e,"code")){i.setAttribute("code",true,e)}}})})}afterInit(){const e=this.editor;const t=e.commands;const i=t.get("indent");const n=t.get("outdent");if(i){i.registerChildCommand(t.get("indentCodeBlock"))}if(n){n.registerChildCommand(t.get("outdentCodeBlock"))}this.listenTo(e.editing.view.document,"enter",(t,i)=>{const n=e.model.document.selection.getLastPosition().parent;if(!n.is("codeBlock")){return}ok(e,i.isSoft)||rk(e,i.isSoft)||nk(e);i.preventDefault();t.stop()})}}function nk(e){const t=e.model;const i=t.document;const n=i.selection.getLastPosition();const o=n.nodeBefore||n.textNode;let r;if(o&&o.is("text")){r=H_(o)}e.model.change(t=>{e.execute("shiftEnter");if(r){t.insertText(r,i.selection.anchor)}})}function ok(e,t){const i=e.model;const n=i.document;const o=e.editing.view;const r=n.selection.getLastPosition();const s=r.nodeAfter;if(t||!n.selection.isCollapsed||!r.isAtStart){return false}if(!s||!s.is("softBreak")){return false}e.model.change(t=>{e.execute("enter");const i=n.selection.anchor.parent.previousSibling;t.rename(i,tk);t.setSelection(i,"in");e.model.schema.removeDisallowedAttributes([i],t);t.remove(s)});o.scrollToTheSelection();return true}function rk(e,t){const i=e.model;const n=i.document;const o=e.editing.view;const r=n.selection.getLastPosition();const s=r.nodeBefore;let a;if(t||!n.selection.isCollapsed||!r.isAtEnd||!s){return false}if(s.is("softBreak")){a=i.createRangeOn(s)}else if(s.is("text")&&!s.data.match(/\S/)&&s.previousSibling&&s.previousSibling.is("softBreak")){a=i.createRange(i.createPositionBefore(s.previousSibling),i.createPositionAfter(s))}else{return false}e.model.change(t=>{t.remove(a);e.execute("enter");const i=n.selection.anchor.parent;t.rename(i,tk);e.model.schema.removeDisallowedAttributes([i],t)});o.scrollToTheSelection();return true}class sk{constructor(e,t){if(t){ql(this,t)}if(e){this.set(e)}}}ys(sk,Jl);var ak=i(50);class lk extends _b{constructor(e){super(e);const t=this.bindTemplate;this.set("icon");this.set("isEnabled",true);this.set("isOn",false);this.set("isToggleable",false);this.set("isVisible",true);this.set("keystroke");this.set("label");this.set("tabindex",-1);this.set("tooltip");this.set("tooltipPosition","s");this.set("type","button");this.set("withText",false);this.children=this.createCollection();this.actionView=this._createActionView();this.arrowView=this._createArrowView();this.keystrokes=new mp;this.focusTracker=new Ep;this.setTemplate({tag:"div",attributes:{class:["ck","ck-splitbutton",t.if("isVisible","ck-hidden",e=>!e),this.arrowView.bindTemplate.if("isOn","ck-splitbutton_open")]},children:this.children})}render(){super.render();this.children.add(this.actionView);this.children.add(this.arrowView);this.focusTracker.add(this.actionView.element);this.focusTracker.add(this.arrowView.element);this.keystrokes.listenTo(this.element);this.keystrokes.set("arrowright",(e,t)=>{if(this.focusTracker.focusedElement===this.actionView.element){this.arrowView.focus();t()}});this.keystrokes.set("arrowleft",(e,t)=>{if(this.focusTracker.focusedElement===this.arrowView.element){this.actionView.focus();t()}})}focus(){this.actionView.focus()}_createActionView(){const e=new rw;e.bind("icon","isEnabled","isOn","isToggleable","keystroke","label","tabindex","tooltip","tooltipPosition","type","withText").to(this);e.extendTemplate({attributes:{class:"ck-splitbutton__action"}});e.delegate("execute").to(this);return e}_createArrowView(){const e=new rw;const t=e.bindTemplate;e.icon=sw;e.extendTemplate({attributes:{class:"ck-splitbutton__arrow","aria-haspopup":true,"aria-expanded":t.to("isOn",e=>String(e))}});e.bind("isEnabled").to(this);e.delegate("execute").to(this,"open");return e}}var ck='';var dk=i(52);class uk extends Rw{init(){const e=this.editor;const t=e.t;const i=e.ui.componentFactory;const n=V_(e);const o=n[0];i.add("codeBlock",i=>{const r=e.commands.get("codeBlock");const s=bw(i,lk);const a=s.buttonView;a.set({label:t("Insert code block"),tooltip:true,icon:ck,isToggleable:true});a.bind("isOn").to(r,"value",e=>!!e);a.on("execute",()=>{e.execute("codeBlock",{language:o.language});e.editing.view.focus()});s.on("execute",t=>{e.execute("codeBlock",{language:t.source._codeBlockLanguage,forceValue:true});e.editing.view.focus()});s.class="ck-code-block-dropdown";s.bind("isEnabled").to(r);_w(s,this._getLanguageListItemDefinitions(n));return s})}_getLanguageListItemDefinitions(e){const t=this.editor;const i=t.commands.get("codeBlock");const n=new xs;for(const t of e){const e={type:"button",model:new sk({_codeBlockLanguage:t.language,label:t.label,withText:true})};e.model.bind("isOn").to(i,"value",t=>t===e.model._codeBlockLanguage);n.add(e)}return n}}class hk extends Rw{static get requires(){return[ik,uk]}static get pluginName(){return"CodeBlock"}}class fk{constructor(e){this.files=mk(e);this._native=e}get types(){return this._native.types}getData(e){return this._native.getData(e)}setData(e,t){this._native.setData(e,t)}}function mk(e){const t=e.files?Array.from(e.files):[];const i=e.items?Array.from(e.items):[];if(t.length){return t}return i.filter(e=>e.kind==="file").map(e=>e.getAsFile())}class gk extends Ku{constructor(e){super(e);const t=this.document;this.domEventType=["paste","copy","cut","drop","dragover"];this.listenTo(t,"paste",i,{priority:"low"});this.listenTo(t,"drop",i,{priority:"low"});function i(e,i){i.preventDefault();const n=i.dropRange?[i.dropRange]:Array.from(t.selection.getRanges());const o=new es(t,"clipboardInput");t.fire(o,{dataTransfer:i.dataTransfer,targetRanges:n});if(o.stop.called){i.stopPropagation()}}}onDomEvent(e){const t={dataTransfer:new fk(e.clipboardData?e.clipboardData:e.dataTransfer)};if(e.type=="drop"){t.dropRange=pk(this.view,e)}this.fire(e.type,e,t)}}function pk(e,t){const i=t.target.ownerDocument;const n=t.clientX;const o=t.clientY;let r;if(i.caretRangeFromPoint&&i.caretRangeFromPoint(n,o)){r=i.caretRangeFromPoint(n,o)}else if(t.rangeParent){r=i.createRange();r.setStart(t.rangeParent,t.rangeOffset);r.collapse(true)}if(r){return e.domConverter.domRangeToView(r)}else{return e.document.selection.getFirstRange()}}function bk(e){e=e.replace(//g,">").replace(/\n/g,"

    ").replace(/^\s/," ").replace(/\s$/," ").replace(/\s\s/g,"  ");if(e.indexOf("

    ")>-1){e=`

    ${e}

    `}return e}function wk(e){return e.replace(/(\s+)<\/span>/g,(e,t)=>{if(t.length==1){return" "}return t})}const _k=["figcaption","li"];function kk(e){let t="";if(e.is("text")||e.is("textProxy")){t=e.data}else if(e.is("img")&&e.hasAttribute("alt")){t=e.getAttribute("alt")}else{let i=null;for(const n of e.getChildren()){const e=kk(n);if(i&&(i.is("containerElement")||n.is("containerElement"))){if(_k.includes(i.name)||_k.includes(n.name)){t+="\n"}else{t+="\n\n"}}t+=e;i=n}}return t}class vk extends Rw{static get pluginName(){return"Clipboard"}init(){const e=this.editor;const t=e.model.document;const i=e.editing.view;const n=i.document;this._htmlDataProcessor=new Ap(n);i.addObserver(gk);this.listenTo(n,"clipboardInput",t=>{if(e.isReadOnly){t.stop()}},{priority:"highest"});this.listenTo(n,"clipboardInput",(e,t)=>{const n=t.dataTransfer;let o="";if(n.getData("text/html")){o=wk(n.getData("text/html"))}else if(n.getData("text/plain")){o=bk(n.getData("text/plain"))}o=this._htmlDataProcessor.toView(o);const r=new es(this,"inputTransformation");this.fire(r,{content:o,dataTransfer:n});if(r.stop.called){e.stop()}i.scrollToTheSelection()},{priority:"low"});this.listenTo(this,"inputTransformation",(e,t)=>{if(!t.content.isEmpty){const i=this.editor.data;const n=this.editor.model;const o=i.toModel(t.content,"$clipboardHolder");if(o.childCount==0){return}n.insertContent(o);e.stop()}},{priority:"low"});function o(i,o){const r=o.dataTransfer;o.preventDefault();const s=e.data.toView(e.model.getSelectedContent(t.selection));n.fire("clipboardOutput",{dataTransfer:r,content:s,method:i.name})}this.listenTo(n,"copy",o,{priority:"low"});this.listenTo(n,"cut",(t,i)=>{if(e.isReadOnly){i.preventDefault()}else{o(t,i)}},{priority:"low"});this.listenTo(n,"clipboardOutput",(i,n)=>{if(!n.content.isEmpty){n.dataTransfer.setData("text/html",this._htmlDataProcessor.toData(n.content));n.dataTransfer.setData("text/plain",kk(n.content))}if(n.method=="cut"){e.model.deleteContent(t.selection)}},{priority:"low"})}}class yk extends Dw{execute(){const e=this.editor.model;const t=e.document;e.change(i=>{xk(this.editor.model,i,t.selection,e.schema);this.fire("afterExecute",{writer:i})})}}function xk(e,t,i,n){const o=i.isCollapsed;const r=i.getFirstRange();const s=r.start.parent;const a=r.end.parent;if(n.isLimit(s)||n.isLimit(a)){if(!o&&s==a){e.deleteContent(i)}return}if(o){const e=L_(t.model.schema,i.getAttributes());Ak(t,r.start);t.setSelectionAttribute(e)}else{const n=!(r.start.isAtStart&&r.end.isAtEnd);const o=s==a;e.deleteContent(i,{leaveUnmerged:n});if(n){if(o){Ak(t,i.focus)}else{t.setSelection(a,0)}}}}function Ak(e,t){e.split(t);e.setSelection(t.parent.nextSibling,0)}class Ck extends Rw{static get pluginName(){return"Enter"}init(){const e=this.editor;const t=e.editing.view;const i=t.document;t.addObserver(j_);e.commands.add("enter",new yk(e));this.listenTo(i,"enter",(i,n)=>{n.preventDefault();if(n.isSoft){return}e.execute("enter");t.scrollToTheSelection()},{priority:"low"})}}class Tk extends Dw{execute(){const e=this.editor.model;const t=e.schema.getLimitElement(e.document.selection);e.change(e=>{e.setSelection(t,"in")})}}const Ek=zc("Ctrl+A");class Pk extends Rw{static get pluginName(){return"SelectAllEditing"}init(){const e=this.editor;const t=e.editing.view;const i=t.document;e.commands.add("selectAll",new Tk(e));this.listenTo(i,"keydown",(t,i)=>{if(Rc(i)===Ek){e.execute("selectAll");i.preventDefault()}})}}var Mk='';class Sk extends Rw{static get pluginName(){return"SelectAllUI"}init(){const e=this.editor;e.ui.componentFactory.add("selectAll",t=>{const i=e.commands.get("selectAll");const n=new rw(t);const o=t.t;n.set({label:o("Select all"),icon:Mk,keystroke:"Ctrl+A",tooltip:true});n.bind("isOn","isEnabled").to(i,"value","isEnabled");this.listenTo(n,"execute",()=>{e.execute("selectAll");e.editing.view.focus()});return n})}}class Ik extends Rw{static get requires(){return[Pk,Sk]}static get pluginName(){return"SelectAll"}}class Lk{constructor(e,t=20){this.model=e;this.size=0;this.limit=t;this.isLocked=false;this._changeCallback=(e,t)=>{if(t.type!="transparent"&&t!==this._batch){this._reset(true)}};this._selectionChangeCallback=()=>{this._reset()};this.model.document.on("change",this._changeCallback);this.model.document.selection.on("change:range",this._selectionChangeCallback);this.model.document.selection.on("change:attribute",this._selectionChangeCallback)}get batch(){if(!this._batch){this._batch=this.model.createBatch()}return this._batch}input(e){this.size+=e;if(this.size>=this.limit){this._reset(true)}}lock(){this.isLocked=true}unlock(){this.isLocked=false}destroy(){this.model.document.off("change",this._changeCallback);this.model.document.selection.off("change:range",this._selectionChangeCallback);this.model.document.selection.off("change:attribute",this._selectionChangeCallback)}_reset(e){if(!this.isLocked||e){this._batch=null;this.size=0}}}class Nk extends Dw{constructor(e,t){super(e);this._buffer=new Lk(e.model,t);this._batches=new WeakSet}get buffer(){return this._buffer}destroy(){super.destroy();this._buffer.destroy()}execute(e={}){const t=this.editor.model;const i=t.document;const n=e.text||"";const o=n.length;const r=e.range?t.createSelection(e.range):i.selection;const s=e.resultRange;t.enqueueChange(this._buffer.batch,e=>{this._buffer.lock();t.deleteContent(r);if(n){t.insertContent(e.createText(n,i.selection.getAttributes()),r)}if(s){e.setSelection(s)}else if(!r.is("documentSelection")){e.setSelection(r)}this._buffer.unlock();this._buffer.input(o);this._batches.add(this._buffer.batch)})}}function Ok(e){let t=null;const i=e.model;const n=e.editing.view;const o=e.commands.get("input");if(Tc.isAndroid){n.document.on("beforeinput",(e,t)=>r(t),{priority:"lowest"})}else{n.document.on("keydown",(e,t)=>r(t),{priority:"lowest"})}n.document.on("compositionstart",s,{priority:"lowest"});n.document.on("compositionend",()=>{t=i.createSelection(i.document.selection)},{priority:"lowest"});function r(e){const r=i.document;const s=n.document.isComposing;const l=t&&t.isEqual(r.selection);t=null;if(!o.isEnabled){return}if(zk(e)||r.selection.isCollapsed){return}if(s&&e.keyCode===229){return}if(!s&&e.keyCode===229&&l){return}a()}function s(){const e=i.document;const t=e.selection.rangeCount===1?e.selection.getFirstRange().isFlat:true;if(e.selection.isCollapsed||t){return}a()}function a(){const e=o.buffer;e.lock();i.enqueueChange(e.batch,()=>{i.deleteContent(i.document.selection)});e.unlock()}}const Rk=[Rc("arrowUp"),Rc("arrowRight"),Rc("arrowDown"),Rc("arrowLeft"),9,16,17,18,19,20,27,33,34,35,36,45,91,93,144,145,173,174,175,176,177,178,179,255];for(let e=112;e<=135;e++){Rk.push(e)}function zk(e){if(e.ctrlKey){return true}return Rk.includes(e.keyCode)}function Dk(e,t){const i=[];let n=0;let o;e.forEach(e=>{if(e=="equal"){r();n++}else if(e=="insert"){if(s("insert")){o.values.push(t[n])}else{r();o={type:"insert",index:n,values:[t[n]]}}n++}else{if(s("delete")){o.howMany++}else{r();o={type:"delete",index:n,howMany:1}}}});r();return i;function r(){if(o){i.push(o);o=null}}function s(e){return o&&o.type==e}}function jk(e){if(e.length==0){return false}for(const t of e){if(t.type==="children"&&!Bk(t)){return true}}return false}function Bk(e){if(e.newChildren.length-e.oldChildren.length!=1){return}const t=kd(e.oldChildren,e.newChildren,Vk);const i=Dk(t,e.newChildren);if(i.length>1){return}const n=i[0];if(!(!!n.values[0]&&n.values[0].is("text"))){return}return n}function Vk(e,t){if(!!e&&e.is("text")&&!!t&&t.is("text")){return e.data===t.data}else{return e===t}}function Fk(e){e.editing.view.document.on("mutations",(t,i,n)=>{new Hk(e).handle(i,n)})}class Hk{constructor(e){this.editor=e;this.editing=this.editor.editing}handle(e,t){if(jk(e)){this._handleContainerChildrenMutations(e,t)}else{for(const i of e){this._handleTextMutation(i,t);this._handleTextNodeInsertion(i)}}}_handleContainerChildrenMutations(e,t){const i=Wk(e);if(!i){return}const n=this.editor.editing.view.domConverter;const o=n.mapViewToDom(i);const r=new Dd(this.editor.editing.view.document);const s=this.editor.data.toModel(r.domToView(o)).getChild(0);const a=this.editor.editing.mapper.toModelElement(i);if(!a){return}const l=Array.from(s.getChildren());const c=Array.from(a.getChildren());const d=l[l.length-1];const u=c[c.length-1];if(d&&d.is("softBreak")&&u&&!u.is("softBreak")){l.pop()}const h=this.editor.model.schema;if(!Uk(l,h)||!Uk(c,h)){return}const f=l.map(e=>e.is("text")?e.data:"@").join("").replace(/\u00A0/g," ");const m=c.map(e=>e.is("text")?e.data:"@").join("").replace(/\u00A0/g," ");if(m===f){return}const g=kd(m,f);const{firstChangeAt:p,insertions:b,deletions:w}=qk(g);let _=null;if(t){_=this.editing.mapper.toModelRange(t.getFirstRange())}const k=f.substr(p,b);const v=this.editor.model.createRange(this.editor.model.createPositionAt(a,p),this.editor.model.createPositionAt(a,p+w));this.editor.execute("input",{text:k,range:v,resultRange:_})}_handleTextMutation(e,t){if(e.type!="text"){return}const i=e.newText.replace(/\u00A0/g," ");const n=e.oldText.replace(/\u00A0/g," ");if(n===i){return}const o=kd(n,i);const{firstChangeAt:r,insertions:s,deletions:a}=qk(o);let l=null;if(t){l=this.editing.mapper.toModelRange(t.getFirstRange())}const c=this.editing.view.createPositionAt(e.node,r);const d=this.editing.mapper.toModelPosition(c);const u=this.editor.model.createRange(d,d.getShiftedBy(a));const h=i.substr(r,s);this.editor.execute("input",{text:h,range:u,resultRange:l})}_handleTextNodeInsertion(e){if(e.type!="children"){return}const t=Bk(e);const i=this.editing.view.createPositionAt(e.node,t.index);const n=this.editing.mapper.toModelPosition(i);const o=t.values[0].data;this.editor.execute("input",{text:o.replace(/\u00A0/g," "),range:this.editor.model.createRange(n)})}}function Wk(e){const t=e.map(e=>e.node).reduce((e,t)=>e.getCommonAncestor(t,{includeSelf:true}));if(!t){return}return t.getAncestors({includeSelf:true,parentFirst:true}).find(e=>e.is("containerElement")||e.is("rootElement"))}function Uk(e,t){return e.every(e=>t.isInline(e))}function qk(e){let t=null;let i=null;for(let n=0;n{this._buffer.lock();const o=n.createSelection(e.selection||i.selection);const r=o.isCollapsed;if(o.isCollapsed){t.modifySelection(o,{direction:this.direction,unit:e.unit})}if(this._shouldEntireContentBeReplacedWithParagraph(e.sequence||1)){this._replaceEntireContentWithParagraph(n);return}if(o.isCollapsed){return}let s=0;o.getFirstRange().getMinimalFlatRanges().forEach(e=>{s+=mc(e.getWalker({singleCharacters:true,ignoreElementEnd:true,shallow:true}))});t.deleteContent(o,{doNotResetEntireContent:r,direction:this.direction});this._buffer.input(s);n.setSelection(o);this._buffer.unlock()})}_shouldEntireContentBeReplacedWithParagraph(e){if(e>1){return false}const t=this.editor.model;const i=t.document;const n=i.selection;const o=t.schema.getLimitElement(n);const r=n.isCollapsed&&n.containsEntireContent(o);if(!r){return false}if(!t.schema.checkChild(o,"paragraph")){return false}const s=o.getChild(0);if(s&&s.name==="paragraph"){return false}return true}_replaceEntireContentWithParagraph(e){const t=this.editor.model;const i=t.document;const n=i.selection;const o=t.schema.getLimitElement(n);const r=e.createElement("paragraph");e.remove(e.createRangeIn(o));e.insert(r,o);e.setSelection(r,0)}}class Yk extends Gd{constructor(e){super(e);const t=e.document;let i=0;t.on("keyup",(e,t)=>{if(t.keyCode==Oc.delete||t.keyCode==Oc.backspace){i=0}});t.on("keydown",(e,t)=>{const o={};if(t.keyCode==Oc.delete){o.direction="forward";o.unit="character"}else if(t.keyCode==Oc.backspace){o.direction="backward";o.unit="codePoint"}else{return}const r=Tc.isMac?t.altKey:t.ctrlKey;o.unit=r?"word":o.unit;o.sequence=++i;n(e,t.domEvent,o)});if(Tc.isAndroid){t.on("beforeinput",(t,i)=>{if(i.domEvent.inputType!="deleteContentBackward"){return}const o={unit:"codepoint",direction:"backward",sequence:1};const r=i.domTarget.ownerDocument.defaultView.getSelection();if(r.anchorNode==r.focusNode&&r.anchorOffset+1!=r.focusOffset){o.selectionToRemove=e.domConverter.domSelectionToView(r)}n(t,i.domEvent,o)})}function n(e,i,n){let o;t.once("delete",e=>o=e,{priority:Number.POSITIVE_INFINITY});t.fire("delete",new Yu(t,i,n));if(o&&o.stop.called){e.stop()}}}observe(){}}class Kk extends Rw{static get pluginName(){return"Delete"}init(){const e=this.editor;const t=e.editing.view;const i=t.document;t.addObserver(Yk);e.commands.add("forwardDelete",new Gk(e,"forward"));e.commands.add("delete",new Gk(e,"backward"));this.listenTo(i,"delete",(i,n)=>{const o={unit:n.unit,sequence:n.sequence};if(n.selectionToRemove){const t=e.model.createSelection();const i=[];for(const t of n.selectionToRemove.getRanges()){i.push(e.editing.mapper.toModelRange(t))}t.setTo(i);o.selection=t}e.execute(n.direction=="forward"?"forwardDelete":"delete",o);n.preventDefault();t.scrollToTheSelection()});if(Tc.isAndroid){let e=null;this.listenTo(i,"delete",(t,i)=>{const n=i.domTarget.ownerDocument.defaultView.getSelection();e={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}},{priority:"lowest"});this.listenTo(i,"keyup",(t,i)=>{if(e){const t=i.domTarget.ownerDocument.defaultView.getSelection();t.collapse(e.anchorNode,e.anchorOffset);t.extend(e.focusNode,e.focusOffset);e=null}})}}}class Jk extends Rw{static get requires(){return[$k,Kk]}static get pluginName(){return"Typing"}}const Qk=new Map;function Zk(e,t,i){let n=Qk.get(e);if(!n){n=new Map;Qk.set(e,n)}n.set(t,i)}function Xk(e,t){const i=Qk.get(e);if(i&&i.has(t)){return i.get(t)}return ev}function ev(e){return[e]}function tv(e,t,i={}){const n=Xk(e.constructor,t.constructor);try{e=e.clone();return n(e,t,i)}catch(e){throw e}}function iv(e,t,i){e=e.slice();t=t.slice();const n=new nv(i.document,i.useRelations,i.forceWeakRemove);n.setOriginalOperations(e);n.setOriginalOperations(t);const o=n.originalOperations;if(e.length==0||t.length==0){return{operationsA:e,operationsB:t,originalOperations:o}}const r=new WeakMap;for(const t of e){r.set(t,0)}const s={nextBaseVersionA:e[e.length-1].baseVersion+1,nextBaseVersionB:t[t.length-1].baseVersion+1,originalOperationsACount:e.length,originalOperationsBCount:t.length};let a=0;while(a{if(e.key===t.key&&e.range.start.hasSameParentAs(t.range.start)){const n=e.range.getDifference(t.range).map(t=>new tg(t,e.key,e.oldValue,e.newValue,0));const o=e.range.getIntersection(t.range);if(o){if(i.aIsStrong){n.push(new tg(o,t.key,t.newValue,e.newValue,0))}}if(n.length==0){return[new Lg(0)]}return n}else{return[e]}});Zk(tg,og,(e,t)=>{if(e.range.start.hasSameParentAs(t.position)&&e.range.containsPosition(t.position)){const i=e.range._getTransformedByInsertion(t.position,t.howMany,!t.shouldReceiveAttributes);const n=i.map(t=>new tg(t,e.key,e.oldValue,e.newValue,e.baseVersion));if(t.shouldReceiveAttributes){const i=sv(t,e.key,e.oldValue);if(i){n.unshift(i)}}return n}e.range=e.range._getTransformedByInsertion(t.position,t.howMany,false)[0];return[e]});function sv(e,t,i){const n=e.nodes;const o=n.getNode(0).getAttribute(t);if(o==i){return null}const r=new Kh(e.position,e.position.getShiftedBy(e.howMany));return new tg(r,t,o,i,0)}Zk(tg,lg,(e,t)=>{const i=[];if(e.range.start.hasSameParentAs(t.deletionPosition)){if(e.range.containsPosition(t.deletionPosition)||e.range.start.isEqual(t.deletionPosition)){i.push(Kh._createFromPositionAndShift(t.graveyardPosition,1))}}const n=e.range._getTransformedByMergeOperation(t);if(!n.isCollapsed){i.push(n)}return i.map(t=>new tg(t,e.key,e.oldValue,e.newValue,e.baseVersion))});Zk(tg,ng,(e,t)=>{const i=av(e.range,t);return i.map(t=>new tg(t,e.key,e.oldValue,e.newValue,e.baseVersion))});function av(e,t){const i=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);let n=null;let o=[];if(i.containsRange(e,true)){n=e}else if(e.start.hasSameParentAs(i.start)){o=e.getDifference(i);n=e.getIntersection(i)}else{o=[e]}const r=[];for(let e of o){e=e._getTransformedByDeletion(t.sourcePosition,t.howMany);const i=t.getMovedRangeStart();const n=e.start.hasSameParentAs(i);e=e._getTransformedByInsertion(i,t.howMany,n);r.push(...e)}if(n){r.push(n._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany,false)[0])}return r}Zk(tg,cg,(e,t)=>{if(e.range.end.isEqual(t.insertionPosition)){if(!t.graveyardPosition){e.range.end.offset++}return[e]}if(e.range.start.hasSameParentAs(t.splitPosition)&&e.range.containsPosition(t.splitPosition)){const i=e.clone();i.range=new Kh(t.moveTargetPosition.clone(),e.range.end._getCombined(t.splitPosition,t.moveTargetPosition));e.range.end=t.splitPosition.clone();e.range.end.stickiness="toPrevious";return[e,i]}e.range=e.range._getTransformedBySplitOperation(t);return[e]});Zk(og,tg,(e,t)=>{const i=[e];if(e.shouldReceiveAttributes&&e.position.hasSameParentAs(t.range.start)&&t.range.containsPosition(e.position)){const n=sv(e,t.key,t.newValue);if(n){i.push(n)}}return i});Zk(og,og,(e,t,i)=>{if(e.position.isEqual(t.position)&&i.aIsStrong){return[e]}e.position=e.position._getTransformedByInsertOperation(t);return[e]});Zk(og,ng,(e,t)=>{e.position=e.position._getTransformedByMoveOperation(t);return[e]});Zk(og,cg,(e,t)=>{e.position=e.position._getTransformedBySplitOperation(t);return[e]});Zk(og,lg,(e,t)=>{e.position=e.position._getTransformedByMergeOperation(t);return[e]});Zk(rg,og,(e,t)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedByInsertOperation(t)[0]}if(e.newRange){e.newRange=e.newRange._getTransformedByInsertOperation(t)[0]}return[e]});Zk(rg,rg,(e,t,i)=>{if(e.name==t.name){if(i.aIsStrong){e.oldRange=t.newRange?t.newRange.clone():null}else{return[new Lg(0)]}}return[e]});Zk(rg,lg,(e,t)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedByMergeOperation(t)}if(e.newRange){e.newRange=e.newRange._getTransformedByMergeOperation(t)}return[e]});Zk(rg,ng,(e,t,i)=>{if(e.oldRange){e.oldRange=Kh._createFromRanges(e.oldRange._getTransformedByMoveOperation(t))}if(e.newRange){if(i.abRelation){const n=Kh._createFromRanges(e.newRange._getTransformedByMoveOperation(t));if(i.abRelation.side=="left"&&t.targetPosition.isEqual(e.newRange.start)){e.newRange.start.path=i.abRelation.path;e.newRange.end=n.end;return[e]}else if(i.abRelation.side=="right"&&t.targetPosition.isEqual(e.newRange.end)){e.newRange.start=n.start;e.newRange.end.path=i.abRelation.path;return[e]}}e.newRange=Kh._createFromRanges(e.newRange._getTransformedByMoveOperation(t))}return[e]});Zk(rg,cg,(e,t,i)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedBySplitOperation(t)}if(e.newRange){if(i.abRelation){const n=e.newRange._getTransformedBySplitOperation(t);if(e.newRange.start.isEqual(t.splitPosition)&&i.abRelation.wasStartBeforeMergedElement){e.newRange.start=qh._createAt(t.insertionPosition)}else if(e.newRange.start.isEqual(t.splitPosition)&&!i.abRelation.wasInLeftElement){e.newRange.start=qh._createAt(t.moveTargetPosition)}if(e.newRange.end.isEqual(t.splitPosition)&&i.abRelation.wasInRightElement){e.newRange.end=qh._createAt(t.moveTargetPosition)}else if(e.newRange.end.isEqual(t.splitPosition)&&i.abRelation.wasEndBeforeMergedElement){e.newRange.end=qh._createAt(t.insertionPosition)}else{e.newRange.end=n.end}return[e]}e.newRange=e.newRange._getTransformedBySplitOperation(t)}return[e]});Zk(lg,og,(e,t)=>{if(e.sourcePosition.hasSameParentAs(t.position)){e.howMany+=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByInsertOperation(t);e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t);return[e]});Zk(lg,lg,(e,t,i)=>{if(e.sourcePosition.isEqual(t.sourcePosition)&&e.targetPosition.isEqual(t.targetPosition)){if(!i.bWasUndone){return[new Lg(0)]}else{const i=t.graveyardPosition.path.slice();i.push(0);e.sourcePosition=new qh(t.graveyardPosition.root,i);e.howMany=0;return[e]}}if(e.sourcePosition.isEqual(t.sourcePosition)&&!e.targetPosition.isEqual(t.targetPosition)&&!i.bWasUndone&&i.abRelation!="splitAtSource"){const n=e.targetPosition.root.rootName=="$graveyard";const o=t.targetPosition.root.rootName=="$graveyard";const r=n&&!o;const s=o&&!n;const a=s||!r&&i.aIsStrong;if(a){const i=t.targetPosition._getTransformedByMergeOperation(t);const n=e.targetPosition._getTransformedByMergeOperation(t);return[new ng(i,e.howMany,n,0)]}else{return[new Lg(0)]}}if(e.sourcePosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByMergeOperation(t);e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);if(!e.graveyardPosition.isEqual(t.graveyardPosition)||!i.aIsStrong){e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)}return[e]});Zk(lg,ng,(e,t,i)=>{const n=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);if(t.type=="remove"&&!i.bWasUndone&&!i.forceWeakRemove){if(e.deletionPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(e.sourcePosition)){return[new Lg(0)]}}if(e.sourcePosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}if(e.sourcePosition.hasSameParentAs(t.sourcePosition)){e.howMany-=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByMoveOperation(t);e.targetPosition=e.targetPosition._getTransformedByMoveOperation(t);if(!e.graveyardPosition.isEqual(t.targetPosition)){e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)}return[e]});Zk(lg,cg,(e,t,i)=>{if(t.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedByDeletion(t.graveyardPosition,1);if(e.deletionPosition.isEqual(t.graveyardPosition)){e.howMany=t.howMany}}if(e.targetPosition.isEqual(t.splitPosition)){const n=t.howMany!=0;const o=t.graveyardPosition&&e.deletionPosition.isEqual(t.graveyardPosition);if(n||o||i.abRelation=="mergeTargetNotMoved"){e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t);return[e]}}if(e.sourcePosition.isEqual(t.splitPosition)){if(i.abRelation=="mergeSourceNotMoved"){e.howMany=0;e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]}if(i.abRelation=="mergeSameElement"||e.sourcePosition.offset>0){e.sourcePosition=t.moveTargetPosition.clone();e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]}}if(e.sourcePosition.hasSameParentAs(t.splitPosition)){e.howMany=t.splitPosition.offset}e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t);e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]});Zk(ng,og,(e,t)=>{const i=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);const n=i._getTransformedByInsertOperation(t,false)[0];e.sourcePosition=n.start;e.howMany=n.end.offset-n.start.offset;if(!e.targetPosition.isEqual(t.position)){e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t)}return[e]});Zk(ng,ng,(e,t,i)=>{const n=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);const o=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);let r=i.aIsStrong;let s=!i.aIsStrong;if(i.abRelation=="insertBefore"||i.baRelation=="insertAfter"){s=true}else if(i.abRelation=="insertAfter"||i.baRelation=="insertBefore"){s=false}let a;if(e.targetPosition.isEqual(t.targetPosition)&&s){a=e.targetPosition._getTransformedByDeletion(t.sourcePosition,t.howMany)}else{a=e.targetPosition._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany)}if(lv(e,t)&&lv(t,e)){return[t.getReversed()]}const l=n.containsPosition(t.targetPosition);if(l&&n.containsRange(o,true)){n.start=n.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);n.end=n.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);return cv([n],a)}const c=o.containsPosition(e.targetPosition);if(c&&o.containsRange(n,true)){n.start=n.start._getCombined(t.sourcePosition,t.getMovedRangeStart());n.end=n.end._getCombined(t.sourcePosition,t.getMovedRangeStart());return cv([n],a)}const d=Rs(e.sourcePosition.getParentPath(),t.sourcePosition.getParentPath());if(d=="prefix"||d=="extension"){n.start=n.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);n.end=n.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);return cv([n],a)}if(e.type=="remove"&&t.type!="remove"&&!i.aWasUndone&&!i.forceWeakRemove){r=true}else if(e.type!="remove"&&t.type=="remove"&&!i.bWasUndone&&!i.forceWeakRemove){r=false}const u=[];const h=n.getDifference(o);for(const e of h){e.start=e.start._getTransformedByDeletion(t.sourcePosition,t.howMany);e.end=e.end._getTransformedByDeletion(t.sourcePosition,t.howMany);const i=Rs(e.start.getParentPath(),t.getMovedRangeStart().getParentPath())=="same";const n=e._getTransformedByInsertion(t.getMovedRangeStart(),t.howMany,i);u.push(...n)}const f=n.getIntersection(o);if(f!==null&&r){f.start=f.start._getCombined(t.sourcePosition,t.getMovedRangeStart());f.end=f.end._getCombined(t.sourcePosition,t.getMovedRangeStart());if(u.length===0){u.push(f)}else if(u.length==1){if(o.start.isBefore(n.start)||o.start.isEqual(n.start)){u.unshift(f)}else{u.push(f)}}else{u.splice(1,0,f)}}if(u.length===0){return[new Lg(e.baseVersion)]}return cv(u,a)});Zk(ng,cg,(e,t,i)=>{let n=e.targetPosition.clone();if(!e.targetPosition.isEqual(t.insertionPosition)||!t.graveyardPosition||i.abRelation=="moveTargetAfter"){n=e.targetPosition._getTransformedBySplitOperation(t)}const o=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);if(o.end.isEqual(t.insertionPosition)){if(!t.graveyardPosition){e.howMany++}e.targetPosition=n;return[e]}if(o.start.hasSameParentAs(t.splitPosition)&&o.containsPosition(t.splitPosition)){let e=new Kh(t.splitPosition,o.end);e=e._getTransformedBySplitOperation(t);const i=[new Kh(o.start,t.splitPosition),e];return cv(i,n)}if(e.targetPosition.isEqual(t.splitPosition)&&i.abRelation=="insertAtSource"){n=t.moveTargetPosition}if(e.targetPosition.isEqual(t.insertionPosition)&&i.abRelation=="insertBetween"){n=e.targetPosition}const r=o._getTransformedBySplitOperation(t);const s=[r];if(t.graveyardPosition){const n=o.start.isEqual(t.graveyardPosition)||o.containsPosition(t.graveyardPosition);if(e.howMany>1&&n&&!i.aWasUndone){s.push(Kh._createFromPositionAndShift(t.insertionPosition,1))}}return cv(s,n)});Zk(ng,lg,(e,t,i)=>{const n=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);if(t.deletionPosition.hasSameParentAs(e.sourcePosition)&&n.containsPosition(t.sourcePosition)){if(e.type=="remove"&&!i.forceWeakRemove){if(!i.aWasUndone){const i=[];let n=t.graveyardPosition.clone();let o=t.targetPosition._getTransformedByMergeOperation(t);if(e.howMany>1){i.push(new ng(e.sourcePosition,e.howMany-1,e.targetPosition,0));n=n._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany-1);o=o._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany-1)}const r=t.deletionPosition._getCombined(e.sourcePosition,e.targetPosition);const s=new ng(n,1,r,0);const a=s.getMovedRangeStart().path.slice();a.push(0);const l=new qh(s.targetPosition.root,a);o=o._getTransformedByMove(n,r,1);const c=new ng(o,t.howMany,l,0);i.push(s);i.push(c);return i}}else{if(e.howMany==1){if(!i.bWasUndone){return[new Lg(0)]}else{e.sourcePosition=t.graveyardPosition.clone();e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);return[e]}}}}const o=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);const r=o._getTransformedByMergeOperation(t);e.sourcePosition=r.start;e.howMany=r.end.offset-r.start.offset;e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);return[e]});Zk(sg,og,(e,t)=>{e.position=e.position._getTransformedByInsertOperation(t);return[e]});Zk(sg,lg,(e,t)=>{if(e.position.isEqual(t.deletionPosition)){e.position=t.graveyardPosition.clone();e.position.stickiness="toNext";return[e]}e.position=e.position._getTransformedByMergeOperation(t);return[e]});Zk(sg,ng,(e,t)=>{e.position=e.position._getTransformedByMoveOperation(t);return[e]});Zk(sg,sg,(e,t,i)=>{if(e.position.isEqual(t.position)){if(i.aIsStrong){e.oldName=t.newName}else{return[new Lg(0)]}}return[e]});Zk(sg,cg,(e,t)=>{const i=e.position.path;const n=t.splitPosition.getParentPath();if(Rs(i,n)=="same"&&!t.graveyardPosition){const t=new sg(e.position.getShiftedBy(1),e.oldName,e.newName,0);return[e,t]}e.position=e.position._getTransformedBySplitOperation(t);return[e]});Zk(ag,ag,(e,t,i)=>{if(e.root===t.root&&e.key===t.key){if(!i.aIsStrong||e.newValue===t.newValue){return[new Lg(0)]}else{e.oldValue=t.newValue}}return[e]});Zk(cg,og,(e,t)=>{if(e.splitPosition.hasSameParentAs(t.position)&&e.splitPosition.offset{if(!e.graveyardPosition&&!i.bWasUndone&&e.splitPosition.hasSameParentAs(t.sourcePosition)){const i=t.graveyardPosition.path.slice();i.push(0);const n=new qh(t.graveyardPosition.root,i);const o=cg.getInsertionPosition(new qh(t.graveyardPosition.root,i));const r=new cg(n,0,null,0);r.insertionPosition=o;e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t);e.insertionPosition=cg.getInsertionPosition(e.splitPosition);e.graveyardPosition=r.insertionPosition.clone();e.graveyardPosition.stickiness="toNext";return[r,e]}if(e.splitPosition.hasSameParentAs(t.deletionPosition)&&!e.splitPosition.isAfter(t.deletionPosition)){e.howMany--}if(e.splitPosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t);e.insertionPosition=cg.getInsertionPosition(e.splitPosition);if(e.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)}return[e]});Zk(cg,ng,(e,t,i)=>{const n=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);if(e.graveyardPosition){const o=n.start.isEqual(e.graveyardPosition)||n.containsPosition(e.graveyardPosition);if(!i.bWasUndone&&o){const i=e.splitPosition._getTransformedByMoveOperation(t);const n=e.graveyardPosition._getTransformedByMoveOperation(t);const o=n.path.slice();o.push(0);const r=new qh(n.root,o);const s=new ng(i,e.howMany,r,0);return[s]}e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)}if(e.splitPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(e.splitPosition)){const i=t.howMany-(e.splitPosition.offset-t.sourcePosition.offset);e.howMany-=i;if(e.splitPosition.hasSameParentAs(t.targetPosition)&&e.splitPosition.offset{if(e.splitPosition.isEqual(t.splitPosition)){if(!e.graveyardPosition&&!t.graveyardPosition){return[new Lg(0)]}if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition)){return[new Lg(0)]}if(i.abRelation=="splitBefore"){e.howMany=0;e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t);return[e]}}if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition)){const n=e.splitPosition.root.rootName=="$graveyard";const o=t.splitPosition.root.rootName=="$graveyard";const r=n&&!o;const s=o&&!n;const a=s||!r&&i.aIsStrong;if(a){const i=[];if(t.howMany){i.push(new ng(t.moveTargetPosition,t.howMany,t.splitPosition,0))}if(e.howMany){i.push(new ng(e.splitPosition,e.howMany,e.moveTargetPosition,0))}return i}else{return[new Lg(0)]}}if(e.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t)}if(e.splitPosition.isEqual(t.insertionPosition)&&i.abRelation=="splitBefore"){e.howMany++;return[e]}if(t.splitPosition.isEqual(e.insertionPosition)&&i.baRelation=="splitBefore"){const i=t.insertionPosition.path.slice();i.push(0);const n=new qh(t.insertionPosition.root,i);const o=new ng(e.insertionPosition,1,n,0);return[e,o]}if(e.splitPosition.hasSameParentAs(t.splitPosition)&&e.splitPosition.offset0}addBatch(e){const t=this.editor.model.document.selection;const i={ranges:t.hasOwnRange?Array.from(t.getRanges()):[],isBackward:t.isBackward};this._stack.push({batch:e,selection:i});this.refresh()}clearStack(){this._stack=[];this.refresh()}_restoreSelection(e,t,i){const n=this.editor.model;const o=n.document;const r=[];for(const t of e){const e=uv(t,i);const n=e.find(e=>e.start.root!=o.graveyard);if(n){r.push(n)}}if(r.length){n.change(e=>{e.setSelection(r,{backward:t})})}}_undo(e,t){const i=this.editor.model;const n=i.document;this._createdBatches.add(t);const o=e.operations.slice().filter(e=>e.isDocumentOperation);o.reverse();for(const e of o){const o=e.baseVersion+1;const r=Array.from(n.history.getOperations(o));const s=iv([e.getReversed()],r,{useRelations:true,document:this.editor.model.document,padWithNoOps:false,forceWeakRemove:true});const a=s.operationsA;for(const o of a){t.addOperation(o);i.applyOperation(o);n.history.setOperationAsUndone(e,o)}}}}function uv(e,t){const i=e.getTransformedByOperations(t);i.sort((e,t)=>e.start.isBefore(t.start)?-1:1);for(let e=1;et.batch==e):this._stack.length-1;const i=this._stack.splice(t,1)[0];const n=this.editor.model.createBatch("transparent");this.editor.model.enqueueChange(n,()=>{this._undo(i.batch,n);const e=this.editor.model.document.history.getOperations(i.batch.baseVersion);this._restoreSelection(i.selection.ranges,i.selection.isBackward,e);this.fire("revert",i.batch,n)});this.refresh()}}class fv extends dv{execute(){const e=this._stack.pop();const t=this.editor.model.createBatch("transparent");this.editor.model.enqueueChange(t,()=>{const i=e.batch.operations[e.batch.operations.length-1];const n=i.baseVersion+1;const o=this.editor.model.document.history.getOperations(n);this._restoreSelection(e.selection.ranges,e.selection.isBackward,o);this._undo(e.batch,t)});this.refresh()}}class mv extends Rw{static get pluginName(){return"UndoEditing"}constructor(e){super(e);this._batchRegistry=new WeakSet}init(){const e=this.editor;this._undoCommand=new hv(e);this._redoCommand=new fv(e);e.commands.add("undo",this._undoCommand);e.commands.add("redo",this._redoCommand);this.listenTo(e.model,"applyOperation",(e,t)=>{const i=t[0];if(!i.isDocumentOperation){return}const n=i.batch;const o=this._redoCommand._createdBatches.has(n);const r=this._undoCommand._createdBatches.has(n);const s=this._batchRegistry.has(n);if(s||n.type=="transparent"&&!o&&!r){return}else{if(o){this._undoCommand.addBatch(n)}else if(!r){this._undoCommand.addBatch(n);this._redoCommand.clearStack()}}this._batchRegistry.add(n)},{priority:"highest"});this.listenTo(this._undoCommand,"revert",(e,t,i)=>{this._redoCommand.addBatch(i)});e.keystrokes.set("CTRL+Z","undo");e.keystrokes.set("CTRL+Y","redo");e.keystrokes.set("CTRL+SHIFT+Z","redo")}}var gv='';var pv='';class bv extends Rw{init(){const e=this.editor;const t=e.locale;const i=e.t;const n=t.uiLanguageDirection=="ltr"?gv:pv;const o=t.uiLanguageDirection=="ltr"?pv:gv;this._addButton("undo",i("Undo"),"CTRL+Z",n);this._addButton("redo",i("Redo"),"CTRL+Y",o)}_addButton(e,t,i,n){const o=this.editor;o.ui.componentFactory.add(e,r=>{const s=o.commands.get(e);const a=new rw(r);a.set({label:t,icon:n,keystroke:i,tooltip:true});a.bind("isEnabled").to(s,"isEnabled");this.listenTo(a,"execute",()=>{o.execute(e);o.editing.view.focus()});return a})}}class wv extends Rw{static get requires(){return[mv,bv]}static get pluginName(){return"Undo"}}class _v extends Rw{static get requires(){return[vk,Ck,Ik,B_,Jk,wv]}static get pluginName(){return"Essentials"}}class kv extends Dw{constructor(e,t){super(e);this.attributeKey=t}refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute(this.attributeKey);this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){const t=this.editor.model;const i=t.document;const n=i.selection;const o=e.value;t.change(e=>{if(n.isCollapsed){if(o){e.setSelectionAttribute(this.attributeKey,o)}else{e.removeSelectionAttribute(this.attributeKey)}}else{const i=t.schema.getValidRanges(n.getRanges(),this.attributeKey);for(const t of i){if(o){e.setAttribute(this.attributeKey,o,t)}else{e.removeAttribute(this.attributeKey,t)}}}})}}var vv='';class yv extends rw{constructor(e){super(e);const t=this.bindTemplate;this.set("color");this.set("hasBorder");this.icon=vv;this.extendTemplate({attributes:{style:{backgroundColor:t.to("color")},class:["ck","ck-color-grid__tile",t.if("hasBorder","ck-color-table__color-tile_bordered")]}})}render(){super.render();this.iconView.fillColor="hsl(0, 0%, 100%)"}}var xv=i(54);class Av extends _b{constructor(e,t){super(e);const i=t&&t.colorDefinitions||[];const n={};if(t&&t.columns){n.gridTemplateColumns=`repeat( ${t.columns}, 1fr)`}this.set("selectedColor");this.items=this.createCollection();this.focusTracker=new Ep;this.keystrokes=new mp;this._focusCycler=new zb({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowleft",focusNext:"arrowright"}});this.items.on("add",(e,t)=>{t.isOn=t.color===this.selectedColor});i.forEach(e=>{const t=new yv;t.set({color:e.color,label:e.label,tooltip:true,hasBorder:e.options.hasBorder});t.on("execute",()=>{this.fire("execute",{value:e.color,hasBorder:e.options.hasBorder,label:e.label})});this.items.add(t)});this.setTemplate({tag:"div",children:this.items,attributes:{class:["ck","ck-color-grid"],style:n}});this.on("change:selectedColor",(e,t,i)=>{for(const e of this.items){e.isOn=e.color===i}})}focus(){if(this.items.length){this.items.first.focus()}}focusLast(){if(this.items.length){this.items.last.focus()}}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)});this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element)}}class Cv extends xs{constructor(e){super(e);this.set("isEmpty",true)}add(e,t){if(this.find(t=>t.color===e.color)){return}super.add(e,t);this.set("isEmpty",false)}remove(e){const t=super.remove(e);if(this.length===0){this.set("isEmpty",true)}return t}hasColor(e){return!!this.find(t=>t.color===e)}}ys(Cv,Jl);var Tv='';var Ev=i(56);class Pv extends _b{constructor(e,{colors:t,columns:i,removeButtonLabel:n,documentColorsLabel:o,documentColorsCount:r}){super(e);this.items=this.createCollection();this.colorDefinitions=t;this.focusTracker=new Ep;this.keystrokes=new mp;this.set("selectedColor");this.removeButtonLabel=n;this.columns=i;this.documentColors=new Cv;this.documentColorsCount=r;this._focusCycler=new zb({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowup",focusNext:"arrowdown"}});this._documentColorsLabel=o;this.setTemplate({tag:"div",attributes:{class:["ck","ck-color-table"]},children:this.items});this.items.add(this._removeColorButton())}updateDocumentColors(e,t){const i=e.document;const n=this.documentColorsCount;this.documentColors.clear();for(const o of i.getRootNames()){const r=i.getRoot(o);const s=e.createRangeIn(r);for(const e of s.getItems()){if(e.is("textProxy")&&e.hasAttribute(t)){this._addColorToDocumentColors(e.getAttribute(t));if(this.documentColors.length>=n){return}}}}}updateSelectedColors(){const e=this.documentColorsGrid;const t=this.staticColorsGrid;const i=this.selectedColor;t.selectedColor=i;if(e){e.selectedColor=i}}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.keystrokes.listenTo(this.element)}appendGrids(){if(this.staticColorsGrid){return}this.staticColorsGrid=this._createStaticColorsGrid();this.items.add(this.staticColorsGrid);if(this.documentColorsCount){const e=$p.bind(this.documentColors,this.documentColors);const t=new Pb(this.locale);t.text=this._documentColorsLabel;t.extendTemplate({attributes:{class:["ck","ck-color-grid__label",e.if("isEmpty","ck-hidden")]}});this.items.add(t);this.documentColorsGrid=this._createDocumentColorsGrid();this.items.add(this.documentColorsGrid)}}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}_removeColorButton(){const e=new rw;e.set({withText:true,icon:Tv,tooltip:true,label:this.removeButtonLabel});e.class="ck-color-table__remove-color";e.on("execute",()=>{this.fire("execute",{value:null})});return e}_createStaticColorsGrid(){const e=new Av(this.locale,{colorDefinitions:this.colorDefinitions,columns:this.columns});e.delegate("execute").to(this);return e}_createDocumentColorsGrid(){const e=$p.bind(this.documentColors,this.documentColors);const t=new Av(this.locale,{columns:this.columns});t.delegate("execute").to(this);t.extendTemplate({attributes:{class:e.if("isEmpty","ck-hidden")}});t.items.bindTo(this.documentColors).using(e=>{const t=new yv;t.set({color:e.color,hasBorder:e.options&&e.options.hasBorder});if(e.label){t.set({label:e.label,tooltip:true})}t.on("execute",()=>{this.fire("execute",{value:e.color})});return t});this.documentColors.on("change:isEmpty",(e,i,n)=>{if(n){t.selectedColor=null}});return t}_addColorToDocumentColors(e){const t=this.colorDefinitions.find(t=>t.color===e);if(!t){this.documentColors.add({color:e,label:e,options:{hasBorder:false}})}else{this.documentColors.add(Object.assign({},t))}}}const Mv="fontSize";const Sv="fontFamily";const Iv="fontColor";const Lv="fontBackgroundColor";function Nv(e,t){const i={model:{key:e,values:[]},view:{},upcastAlso:{}};for(const e of t){i.model.values.push(e.model);i.view[e.model]=e.view;if(e.upcastAlso){i.upcastAlso[e.model]=e.upcastAlso}}return i}function Ov(e){return t=>Dv(t.getStyle(e))}function Rv(e){return(t,i)=>i.createAttributeElement("span",{style:`${e}:${t}`},{priority:7})}function zv({dropdownView:e,colors:t,columns:i,removeButtonLabel:n,documentColorsLabel:o,documentColorsCount:r}){const s=e.locale;const a=new Pv(s,{colors:t,columns:i,removeButtonLabel:n,documentColorsLabel:o,documentColorsCount:r});e.colorTableView=a;e.panelView.children.add(a);a.delegate("execute").to(e,"execute");return a}function Dv(e){return e.replace(/\s/g,"")}class jv extends kv{constructor(e){super(e,Lv)}}class Bv extends Rw{static get pluginName(){return"FontBackgroundColorEditing"}constructor(e){super(e);e.config.define(Lv,{colors:[{color:"hsl(0, 0%, 0%)",label:"Black"},{color:"hsl(0, 0%, 30%)",label:"Dim grey"},{color:"hsl(0, 0%, 60%)",label:"Grey"},{color:"hsl(0, 0%, 90%)",label:"Light grey"},{color:"hsl(0, 0%, 100%)",label:"White",hasBorder:true},{color:"hsl(0, 75%, 60%)",label:"Red"},{color:"hsl(30, 75%, 60%)",label:"Orange"},{color:"hsl(60, 75%, 60%)",label:"Yellow"},{color:"hsl(90, 75%, 60%)",label:"Light green"},{color:"hsl(120, 75%, 60%)",label:"Green"},{color:"hsl(150, 75%, 60%)",label:"Aquamarine"},{color:"hsl(180, 75%, 60%)",label:"Turquoise"},{color:"hsl(210, 75%, 60%)",label:"Light blue"},{color:"hsl(240, 75%, 60%)",label:"Blue"},{color:"hsl(270, 75%, 60%)",label:"Purple"}],columns:5});e.conversion.for("upcast").elementToAttribute({view:{name:"span",styles:{"background-color":/[\s\S]+/}},model:{key:Lv,value:Ov("background-color")}});e.conversion.for("downcast").attributeToElement({model:Lv,view:Rv("background-color")});e.commands.add(Lv,new jv(e));e.model.schema.extend("$text",{allowAttributes:Lv});e.model.schema.setAttributeProperties(Lv,{isFormatting:true,copyOnEnter:true})}}function Vv(e,t){const i=e.t;const n={Black:i("Black"),"Dim grey":i("Dim grey"),Grey:i("Grey"),"Light grey":i("Light grey"),White:i("White"),Red:i("Red"),Orange:i("Orange"),Yellow:i("Yellow"),"Light green":i("Light green"),Green:i("Green"),Aquamarine:i("Aquamarine"),Turquoise:i("Turquoise"),"Light blue":i("Light blue"),Blue:i("Blue"),Purple:i("Purple")};return t.map(e=>{const t=n[e.label];if(t&&t!=e.label){e.label=t}return e})}function Fv(e){return e.map(Hv).filter(e=>!!e)}function Hv(e){if(typeof e==="string"){return{model:e,label:e,hasBorder:false,view:{name:"span",styles:{color:e}}}}else{return{model:e.color,label:e.label||e.color,hasBorder:e.hasBorder===undefined?false:e.hasBorder,view:{name:"span",styles:{color:`${e.color}`}}}}}class Wv extends Rw{constructor(e,{commandName:t,icon:i,componentName:n,dropdownLabel:o}){super(e);this.commandName=t;this.componentName=n;this.icon=i;this.dropdownLabel=o;this.columns=e.config.get(`${this.componentName}.columns`);this.colorTableView}init(){const e=this.editor;const t=e.locale;const i=t.t;const n=e.commands.get(this.commandName);const o=Fv(e.config.get(this.componentName).colors);const r=Vv(t,o);const s=e.config.get(`${this.componentName}.documentColors`);e.ui.componentFactory.add(this.componentName,t=>{const o=bw(t);this.colorTableView=zv({dropdownView:o,colors:r.map(e=>({label:e.label,color:e.model,options:{hasBorder:e.hasBorder}})),columns:this.columns,removeButtonLabel:i("Remove color"),documentColorsLabel:s!==0?i("Document colors"):undefined,documentColorsCount:s===undefined?this.columns:s});this.colorTableView.bind("selectedColor").to(n,"value");o.buttonView.set({label:this.dropdownLabel,icon:this.icon,tooltip:true});o.extendTemplate({attributes:{class:"ck-color-ui-dropdown"}});o.bind("isEnabled").to(n);o.on("execute",(t,i)=>{e.execute(this.commandName,i);e.editing.view.focus()});o.on("change:isOpen",(t,i,n)=>{o.colorTableView.appendGrids();if(n){if(s!==0){this.colorTableView.updateDocumentColors(e.model,this.componentName)}this.colorTableView.updateSelectedColors()}});return o})}}var Uv='';class qv extends Wv{constructor(e){const t=e.locale.t;super(e,{commandName:Lv,componentName:Lv,icon:Uv,dropdownLabel:t("Font Background Color")})}static get pluginName(){return"FontBackgroundColorUI"}}class $v extends Rw{static get requires(){return[Bv,qv]}static get pluginName(){return"FontBackgroundColor"}}class Gv extends kv{constructor(e){super(e,Iv)}}class Yv extends Rw{static get pluginName(){return"FontColorEditing"}constructor(e){super(e);e.config.define(Iv,{colors:[{color:"hsl(0, 0%, 0%)",label:"Black"},{color:"hsl(0, 0%, 30%)",label:"Dim grey"},{color:"hsl(0, 0%, 60%)",label:"Grey"},{color:"hsl(0, 0%, 90%)",label:"Light grey"},{color:"hsl(0, 0%, 100%)",label:"White",hasBorder:true},{color:"hsl(0, 75%, 60%)",label:"Red"},{color:"hsl(30, 75%, 60%)",label:"Orange"},{color:"hsl(60, 75%, 60%)",label:"Yellow"},{color:"hsl(90, 75%, 60%)",label:"Light green"},{color:"hsl(120, 75%, 60%)",label:"Green"},{color:"hsl(150, 75%, 60%)",label:"Aquamarine"},{color:"hsl(180, 75%, 60%)",label:"Turquoise"},{color:"hsl(210, 75%, 60%)",label:"Light blue"},{color:"hsl(240, 75%, 60%)",label:"Blue"},{color:"hsl(270, 75%, 60%)",label:"Purple"}],columns:5});e.conversion.for("upcast").elementToAttribute({view:{name:"span",styles:{color:/[\s\S]+/}},model:{key:Iv,value:Ov("color")}});e.conversion.for("downcast").attributeToElement({model:Iv,view:Rv("color")});e.commands.add(Iv,new Gv(e));e.model.schema.extend("$text",{allowAttributes:Iv});e.model.schema.setAttributeProperties(Iv,{isFormatting:true,copyOnEnter:true})}}var Kv='';class Jv extends Wv{constructor(e){const t=e.locale.t;super(e,{commandName:Iv,componentName:Iv,icon:Kv,dropdownLabel:t("Font Color")})}static get pluginName(){return"FontColorUI"}}class Qv extends Rw{static get requires(){return[Yv,Jv]}static get pluginName(){return"FontColor"}}class Zv extends kv{constructor(e){super(e,Sv)}}function Xv(e){return e.map(ey).filter(e=>!!e)}function ey(e){if(typeof e==="object"){return e}if(e==="default"){return{title:"Default",model:undefined}}if(typeof e!=="string"){return}return ty(e)}function ty(e){const t=e.replace(/"|'/g,"").split(",");const i=t[0];const n=t.map(iy).join(", ");return{title:i,model:i,view:{name:"span",styles:{"font-family":n},priority:7}}}function iy(e){e=e.trim();if(e.indexOf(" ")>0){e=`'${e}'`}return e}class ny extends Rw{static get pluginName(){return"FontFamilyEditing"}constructor(e){super(e);e.config.define(Sv,{options:["default","Arial, Helvetica, sans-serif","Courier New, Courier, monospace","Georgia, serif","Lucida Sans Unicode, Lucida Grande, sans-serif","Tahoma, Geneva, sans-serif","Times New Roman, Times, serif","Trebuchet MS, Helvetica, sans-serif","Verdana, Geneva, sans-serif"],supportAllValues:false})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:Sv});e.model.schema.setAttributeProperties(Sv,{isFormatting:true,copyOnEnter:true});const t=Xv(e.config.get("fontFamily.options")).filter(e=>e.model);const i=Nv(Sv,t);if(e.config.get("fontFamily.supportAllValues")){this._prepareAnyValueConverters()}else{e.conversion.attributeToElement(i)}e.commands.add(Sv,new Zv(e))}_prepareAnyValueConverters(){const e=this.editor;e.conversion.for("downcast").attributeToElement({model:Sv,view:(e,t)=>t.createAttributeElement("span",{style:"font-family:"+e},{priority:7})});e.conversion.for("upcast").attributeToAttribute({model:{key:Sv,value:e=>e.getStyle("font-family")},view:{name:"span",styles:{"font-family":/.*/}}})}}var oy='';class ry extends Rw{init(){const e=this.editor;const t=e.t;const i=this._getLocalizedOptions();const n=e.commands.get(Sv);e.ui.componentFactory.add(Sv,o=>{const r=bw(o);_w(r,sy(i,n));r.buttonView.set({label:t("Font Family"),icon:oy,tooltip:true});r.extendTemplate({attributes:{class:"ck-font-family-dropdown"}});r.bind("isEnabled").to(n);this.listenTo(r,"execute",t=>{e.execute(t.source.commandName,{value:t.source.commandParam});e.editing.view.focus()});return r})}_getLocalizedOptions(){const e=this.editor;const t=e.t;const i=Xv(e.config.get(Sv).options);return i.map(e=>{if(e.title==="Default"){e.title=t("Default")}return e})}}function sy(e,t){const i=new xs;for(const n of e){const e={type:"button",model:new sk({commandName:Sv,commandParam:n.model,label:n.title,withText:true})};e.model.bind("isOn").to(t,"value",e=>{if(e===n.model){return true}if(!e||!n.model){return false}return e.split(",")[0].replace(/'/g,"").toLowerCase()===n.model.toLowerCase()});if(n.view&&n.view.styles){e.model.set("labelStyle",`font-family: ${n.view.styles["font-family"]}`)}i.add(e)}return i}class ay extends Rw{static get requires(){return[ny,ry]}static get pluginName(){return"FontFamily"}}class ly extends kv{constructor(e){super(e,Mv)}}function cy(e){return e.map(e=>uy(e)).filter(e=>!!e)}const dy={get tiny(){return{title:"Tiny",model:"tiny",view:{name:"span",classes:"text-tiny",priority:7}}},get small(){return{title:"Small",model:"small",view:{name:"span",classes:"text-small",priority:7}}},get big(){return{title:"Big",model:"big",view:{name:"span",classes:"text-big",priority:7}}},get huge(){return{title:"Huge",model:"huge",view:{name:"span",classes:"text-huge",priority:7}}}};function uy(e){if(gy(e)){return fy(e)}const t=my(e);if(t){return fy(t)}if(e==="default"){return{model:undefined,title:"Default"}}if(py(e)){return}return hy(e)}function hy(e){if(typeof e==="number"||typeof e==="string"){e={title:String(e),model:`${parseFloat(e)}px`}}e.view={name:"span",styles:{"font-size":e.model}};return fy(e)}function fy(e){if(!e.view.priority){e.view.priority=7}return e}function my(e){return dy[e]||dy[e.model]}function gy(e){return typeof e==="object"&&e.title&&e.model&&e.view}function py(e){let t;if(typeof e==="object"){if(!e.model){throw new ss["b"]("font-size-invalid-definition: Provided font size definition is invalid.",null,e)}else{t=parseFloat(e.model)}}else{t=parseFloat(e)}return isNaN(t)}class by extends Rw{static get pluginName(){return"FontSizeEditing"}constructor(e){super(e);e.config.define(Mv,{options:["tiny","small","default","big","huge"],supportAllValues:false})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:Mv});e.model.schema.setAttributeProperties(Mv,{isFormatting:true,copyOnEnter:true});const t=e.config.get("fontSize.supportAllValues");const i=cy(this.editor.config.get("fontSize.options")).filter(e=>e.model);const n=Nv(Mv,i);if(t){this._prepareAnyValueConverters(n)}else{e.conversion.attributeToElement(n)}e.commands.add(Mv,new ly(e))}_prepareAnyValueConverters(e){const t=this.editor;const i=e.model.values.filter(e=>!String(e).match(/[\d.]+[\w%]+/));if(i.length){throw new ss["b"]("font-size-invalid-use-of-named-presets: "+"If config.fontSize.supportAllValues is set to true, you need to use numerical values as font size options.",null,{presets:i})}t.conversion.for("downcast").attributeToElement({model:Mv,view:(e,t)=>{if(!e){return}return t.createAttributeElement("span",{style:"font-size:"+e},{priority:7})}});t.conversion.for("upcast").attributeToAttribute({model:{key:Mv,value:e=>e.getStyle("font-size")},view:{name:"span"}})}}var wy='';var _y=i(58);class ky extends Rw{init(){const e=this.editor;const t=e.t;const i=this._getLocalizedOptions();const n=e.commands.get(Mv);e.ui.componentFactory.add(Mv,o=>{const r=bw(o);_w(r,vy(i,n));r.buttonView.set({label:t("Font Size"),icon:wy,tooltip:true});r.extendTemplate({attributes:{class:["ck-font-size-dropdown"]}});r.bind("isEnabled").to(n);this.listenTo(r,"execute",t=>{e.execute(t.source.commandName,{value:t.source.commandParam});e.editing.view.focus()});return r})}_getLocalizedOptions(){const e=this.editor;const t=e.t;const i={Default:t("Default"),Tiny:t("Tiny"),Small:t("Small"),Big:t("Big"),Huge:t("Huge")};const n=cy(e.config.get(Mv).options);return n.map(e=>{const t=i[e.title];if(t&&t!=e.title){e=Object.assign({},e,{title:t})}return e})}}function vy(e,t){const i=new xs;for(const n of e){const e={type:"button",model:new sk({commandName:Mv,commandParam:n.model,label:n.title,class:"ck-fontsize-option",withText:true})};if(n.view&&n.view.styles){e.model.set("labelStyle",`font-size:${n.view.styles["font-size"]}`)}if(n.view&&n.view.classes){e.model.set("class",`${e.model.class} ${n.view.classes}`)}e.model.bind("isOn").to(t,"value",e=>e===n.model);i.add(e)}return i}class yy extends Rw{static get requires(){return[by,ky]}static get pluginName(){return"FontSize"}}class xy extends Dw{refresh(){const e=this.editor.model;const t=e.document;const i=Bw(t.selection.getSelectedBlocks());this.value=!!i&&i.is("paragraph");this.isEnabled=!!i&&Ay(i,e.schema)}execute(e={}){const t=this.editor.model;const i=t.document;t.change(n=>{const o=(e.selection||i.selection).getSelectedBlocks();for(const e of o){if(!e.is("paragraph")&&Ay(e,t.schema)){n.rename(e,"paragraph")}}})}}function Ay(e,t){return t.checkChild(e.parent,"paragraph")&&!t.isObject(e)}class Cy extends Dw{execute(e){const t=this.editor.model;if(!t.schema.checkChild(e.position,"paragraph")){return}t.change(i=>{const n=i.createElement("paragraph");t.insertContent(n,e.position);i.setSelection(n,"in")})}}class Ty extends Rw{static get pluginName(){return"Paragraph"}init(){const e=this.editor;const t=e.model;const i=e.data;e.commands.add("paragraph",new xy(e));e.commands.add("insertParagraph",new Cy(e));t.schema.register("paragraph",{inheritAllFrom:"$block"});e.conversion.elementToElement({model:"paragraph",view:"p"});e.conversion.for("upcast").elementToElement({model:(e,t)=>{if(!Ty.paragraphLikeElements.has(e.name)){return null}if(e.isEmpty){return null}return t.createElement("paragraph")},converterPriority:"low"});i.upcastDispatcher.on("element",(e,t,i)=>{if(!i.consumable.test(t.viewItem,{name:t.viewItem.name})){return}if(Py(t.viewItem,t.modelCursor,i.schema)){Object.assign(t,Ey(t.viewItem,t.modelCursor,i))}},{priority:"low"});i.upcastDispatcher.on("text",(e,t,i)=>{if(t.modelRange){return}if(Py(t.viewItem,t.modelCursor,i.schema)){Object.assign(t,Ey(t.viewItem,t.modelCursor,i))}},{priority:"lowest"});t.document.registerPostFixer(e=>this._autoparagraphEmptyRoots(e));e.data.on("ready",()=>{t.enqueueChange("transparent",e=>this._autoparagraphEmptyRoots(e))},{priority:"lowest"})}_autoparagraphEmptyRoots(e){const t=this.editor.model;for(const i of t.document.getRootNames()){const n=t.document.getRoot(i);if(n.isEmpty&&n.rootName!="$graveyard"){if(t.schema.checkChild(n,"paragraph")){e.insertElement("paragraph",n);return true}}}}}Ty.paragraphLikeElements=new Set(["blockquote","dd","div","dt","h1","h2","h3","h4","h5","h6","li","p","td"]);function Ey(e,t,i){const n=i.writer.createElement("paragraph");i.writer.insert(n,t);return i.convertItem(e,i.writer.createPositionAt(n,0))}function Py(e,t,i){const n=i.createContext(t);if(!i.checkChild(n,"paragraph")){return false}if(!i.checkChild(n.push("paragraph"),e)){return false}return true}class My extends Dw{constructor(e,t){super(e);this.modelElements=t}refresh(){const e=Bw(this.editor.model.document.selection.getSelectedBlocks());this.value=!!e&&this.modelElements.includes(e.name)&&e.name;this.isEnabled=!!e&&this.modelElements.some(t=>Sy(e,t,this.editor.model.schema))}execute(e){const t=this.editor.model;const i=t.document;const n=e.value;t.change(e=>{const o=Array.from(i.selection.getSelectedBlocks()).filter(e=>Sy(e,n,t.schema));for(const t of o){if(!t.is(n)){e.rename(t,n)}}})}}function Sy(e,t,i){return i.checkChild(e.parent,t)&&!i.isObject(e)}const Iy="paragraph";class Ly extends Rw{static get pluginName(){return"HeadingEditing"}constructor(e){super(e);e.config.define("heading",{options:[{model:"paragraph",title:"Paragraph",class:"ck-heading_paragraph"},{model:"heading1",view:"h2",title:"Heading 1",class:"ck-heading_heading1"},{model:"heading2",view:"h3",title:"Heading 2",class:"ck-heading_heading2"},{model:"heading3",view:"h4",title:"Heading 3",class:"ck-heading_heading3"}]})}static get requires(){return[Ty]}init(){const e=this.editor;const t=e.config.get("heading.options");const i=[];for(const n of t){if(n.model!==Iy){e.model.schema.register(n.model,{inheritAllFrom:"$block"});e.conversion.elementToElement(n);i.push(n.model)}}this._addDefaultH1Conversion(e);e.commands.add("heading",new My(e,i))}afterInit(){const e=this.editor;const t=e.commands.get("enter");const i=e.config.get("heading.options");if(t){this.listenTo(t,"afterExecute",(t,n)=>{const o=e.model.document.selection.getFirstPosition().parent;const r=i.some(e=>o.is(e.model));if(r&&!o.is(Iy)&&o.childCount===0){n.writer.rename(o,Iy)}})}}_addDefaultH1Conversion(e){e.conversion.for("upcast").elementToElement({model:"heading1",view:"h1",converterPriority:os.get("low")+1})}}function Ny(e){const t=e.t;const i={Paragraph:t("Paragraph"),"Heading 1":t("Heading 1"),"Heading 2":t("Heading 2"),"Heading 3":t("Heading 3"),"Heading 4":t("Heading 4"),"Heading 5":t("Heading 5"),"Heading 6":t("Heading 6")};return e.config.get("heading.options").map(e=>{const t=i[e.title];if(t&&t!=e.title){e.title=t}return e})}var Oy=i(12);class Ry extends Rw{init(){const e=this.editor;const t=e.t;const i=Ny(e);const n=t("Choose heading");const o=t("Heading");e.ui.componentFactory.add("heading",t=>{const r={};const s=new xs;const a=e.commands.get("heading");const l=e.commands.get("paragraph");const c=[a];for(const e of i){const t={type:"button",model:new sk({label:e.title,class:e.class,withText:true})};if(e.model==="paragraph"){t.model.bind("isOn").to(l,"value");t.model.set("commandName","paragraph");c.push(l)}else{t.model.bind("isOn").to(a,"value",t=>t===e.model);t.model.set({commandName:"heading",commandValue:e.model})}s.add(t);r[e.model]=e.title}const d=bw(t);_w(d,s);d.buttonView.set({isOn:false,withText:true,tooltip:o});d.extendTemplate({attributes:{class:["ck-heading-dropdown"]}});d.bind("isEnabled").toMany(c,"isEnabled",(...e)=>e.some(e=>e));d.buttonView.bind("label").to(a,"value",l,"value",(e,t)=>{const i=e||t&&"paragraph";return r[i]?r[i]:n});this.listenTo(d,"execute",t=>{e.execute(t.source.commandName,t.source.commandValue?{value:t.source.commandValue}:undefined);e.editing.view.focus()});return d})}}class zy extends Rw{static get requires(){return[Ly,Ry]}static get pluginName(){return"Heading"}}class Dy extends Dw{refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute("highlight");this.isEnabled=e.schema.checkAttributeInSelection(t.selection,"highlight")}execute(e={}){const t=this.editor.model;const i=t.document;const n=i.selection;const o=e.value;t.change(e=>{const i=t.schema.getValidRanges(n.getRanges(),"highlight");if(n.isCollapsed){const t=n.getFirstPosition();if(n.hasAttribute("highlight")){const i=e=>e.item.hasAttribute("highlight")&&e.item.getAttribute("highlight")===this.value;const n=t.getLastMatchingPosition(i,{direction:"backward"});const r=t.getLastMatchingPosition(i);const s=e.createRange(n,r);if(!o||this.value===o){e.removeAttribute("highlight",s);e.removeSelectionAttribute("highlight")}else{e.setAttribute("highlight",o,s);e.setSelectionAttribute("highlight",o)}}else if(o){e.setSelectionAttribute("highlight",o)}}else{for(const t of i){if(o){e.setAttribute("highlight",o,t)}else{e.removeAttribute("highlight",t)}}}})}}class jy extends Rw{static get pluginName(){return"HighlightEditing"}constructor(e){super(e);e.config.define("highlight",{options:[{model:"yellowMarker",class:"marker-yellow",title:"Yellow marker",color:"var(--ck-highlight-marker-yellow)",type:"marker"},{model:"greenMarker",class:"marker-green",title:"Green marker",color:"var(--ck-highlight-marker-green)",type:"marker"},{model:"pinkMarker",class:"marker-pink",title:"Pink marker",color:"var(--ck-highlight-marker-pink)",type:"marker"},{model:"blueMarker",class:"marker-blue",title:"Blue marker",color:"var(--ck-highlight-marker-blue)",type:"marker"},{model:"redPen",class:"pen-red",title:"Red pen",color:"var(--ck-highlight-pen-red)",type:"pen"},{model:"greenPen",class:"pen-green",title:"Green pen",color:"var(--ck-highlight-pen-green)",type:"pen"}]})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:"highlight"});const t=e.config.get("highlight.options");e.conversion.attributeToElement(By(t));e.commands.add("highlight",new Dy(e))}}function By(e){const t={model:{key:"highlight",values:[]},view:{}};for(const i of e){t.model.values.push(i.model);t.view[i.model]={name:"mark",classes:i.class}}return t}var Vy='';var Fy='';var Hy=i(61);class Wy extends Rw{get localizedOptionTitles(){const e=this.editor.t;return{"Yellow marker":e("Yellow marker"),"Green marker":e("Green marker"),"Pink marker":e("Pink marker"),"Blue marker":e("Blue marker"),"Red pen":e("Red pen"),"Green pen":e("Green pen")}}static get pluginName(){return"HighlightUI"}init(){const e=this.editor.config.get("highlight.options");for(const t of e){this._addHighlighterButton(t)}this._addRemoveHighlightButton();this._addDropdown(e)}_addRemoveHighlightButton(){const e=this.editor.t;this._addButton("removeHighlight",e("Remove highlight"),Tv)}_addHighlighterButton(e){const t=this.editor.commands.get("highlight");this._addButton("highlight:"+e.model,e.title,qy(e.type),e.model,i);function i(i){i.bind("isEnabled").to(t,"isEnabled");i.bind("isOn").to(t,"value",t=>t===e.model);i.iconView.fillColor=e.color;i.isToggleable=true}}_addButton(e,t,i,n,o=(()=>{})){const r=this.editor;r.ui.componentFactory.add(e,e=>{const s=new rw(e);const a=this.localizedOptionTitles[t]?this.localizedOptionTitles[t]:t;s.set({label:a,icon:i,tooltip:true});s.on("execute",()=>{r.execute("highlight",{value:n});r.editing.view.focus()});o(s);return s})}_addDropdown(e){const t=this.editor;const i=t.t;const n=t.ui.componentFactory;const o=e[0];const r=e.reduce((e,t)=>{e[t.model]=t;return e},{});n.add("highlight",s=>{const a=t.commands.get("highlight");const l=bw(s,lk);const c=l.buttonView;c.set({tooltip:i("Highlight"),lastExecuted:o.model,commandValue:o.model,isToggleable:true});c.bind("icon").to(a,"value",e=>qy(u(e,"type")));c.bind("color").to(a,"value",e=>u(e,"color"));c.bind("commandValue").to(a,"value",e=>u(e,"model"));c.bind("isOn").to(a,"value",e=>!!e);c.delegate("execute").to(l);const d=e.map(e=>{const t=n.create("highlight:"+e.model);this.listenTo(t,"execute",()=>l.buttonView.set({lastExecuted:e.model}));return t});l.bind("isEnabled").toMany(d,"isEnabled",(...e)=>e.some(e=>e));d.push(new jb);d.push(n.create("removeHighlight"));ww(l,d);Uy(l);l.toolbarView.ariaLabel=i("Text highlight toolbar");c.on("execute",()=>{t.execute("highlight",{value:c.commandValue});t.editing.view.focus()});function u(e,t){const i=!e||e===c.lastExecuted?c.lastExecuted:e;return r[i][t]}return l})}}function Uy(e){const t=e.buttonView.actionView;t.iconView.bind("fillColor").to(e.buttonView,"color")}function qy(e){return e==="marker"?Vy:Fy}class $y extends Rw{static get requires(){return[jy,Wy]}static get pluginName(){return"Highlight"}}class Gy{constructor(){this._stack=[]}add(e,t){const i=this._stack;const n=i[0];this._insertDescriptor(e);const o=i[0];if(n!==o&&!Yy(n,o)){this.fire("change:top",{oldDescriptor:n,newDescriptor:o,writer:t})}}remove(e,t){const i=this._stack;const n=i[0];this._removeDescriptor(e);const o=i[0];if(n!==o&&!Yy(n,o)){this.fire("change:top",{oldDescriptor:n,newDescriptor:o,writer:t})}}_insertDescriptor(e){const t=this._stack;const i=t.findIndex(t=>t.id===e.id);if(Yy(e,t[i])){return}if(i>-1){t.splice(i,1)}let n=0;while(t[n]&&Ky(t[n],e)){n++}t.splice(n,0,e)}_removeDescriptor(e){const t=this._stack;const i=t.findIndex(t=>t.id===e);if(i>-1){t.splice(i,1)}}}ys(Gy,ds);function Yy(e,t){return e&&t&&e.priority==t.priority&&Jy(e.classes)==Jy(t.classes)}function Ky(e,t){if(e.priority>t.priority){return true}else if(e.priorityJy(t.classes)}function Jy(e){return Array.isArray(e)?e.sort().join(","):e}var Qy=i(63);const Zy=Lb("px");const Xy=Ld.document.body;class ex extends _b{constructor(e){super(e);const t=this.bindTemplate;this.set("top",0);this.set("left",0);this.set("position","arrow_nw");this.set("isVisible",false);this.set("withArrow",true);this.set("class");this.content=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-panel",t.to("position",e=>`ck-balloon-panel_${e}`),t.if("isVisible","ck-balloon-panel_visible"),t.if("withArrow","ck-balloon-panel_with-arrow"),t.to("class")],style:{top:t.to("top",Zy),left:t.to("left",Zy)}},children:this.content})}show(){this.isVisible=true}hide(){this.isVisible=false}attachTo(e){this.show();const t=ex.defaultPositions;const i=Object.assign({},{element:this.element,positions:[t.southArrowNorth,t.southArrowNorthMiddleWest,t.southArrowNorthMiddleEast,t.southArrowNorthWest,t.southArrowNorthEast,t.northArrowSouth,t.northArrowSouthMiddleWest,t.northArrowSouthMiddleEast,t.northArrowSouthWest,t.northArrowSouthEast],limiter:Xy,fitInViewport:true},e);const n=ex._getOptimalPosition(i);const o=parseInt(n.left);const r=parseInt(n.top);const s=n.name;Object.assign(this,{top:r,left:o,position:s})}pin(e){this.unpin();this._pinWhenIsVisibleCallback=()=>{if(this.isVisible){this._startPinning(e)}else{this._stopPinning()}};this._startPinning(e);this.listenTo(this,"change:isVisible",this._pinWhenIsVisibleCallback)}unpin(){if(this._pinWhenIsVisibleCallback){this._stopPinning();this.stopListening(this,"change:isVisible",this._pinWhenIsVisibleCallback);this._pinWhenIsVisibleCallback=null;this.hide()}}_startPinning(e){this.attachTo(e);const t=tx(e.target);const i=e.limiter?tx(e.limiter):Xy;this.listenTo(Ld.document,"scroll",(n,o)=>{const r=o.target;const s=t&&r.contains(t);const a=i&&r.contains(i);if(s||a||!t||!i){this.attachTo(e)}},{useCapture:true});this.listenTo(Ld.window,"resize",()=>{this.attachTo(e)})}_stopPinning(){this.stopListening(Ld.document,"scroll");this.stopListening(Ld.window,"resize")}}function tx(e){if(Yr(e)){return e}if(wh(e)){return e.commonAncestorContainer}if(typeof e=="function"){return tx(e())}return null}ex.arrowHorizontalOffset=25;ex.arrowVerticalOffset=10;ex._getOptimalPosition=$b;ex.defaultPositions={northWestArrowSouthWest:(e,t)=>({top:ix(e,t),left:e.left-ex.arrowHorizontalOffset,name:"arrow_sw"}),northWestArrowSouthMiddleWest:(e,t)=>({top:ix(e,t),left:e.left-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_smw"}),northWestArrowSouth:(e,t)=>({top:ix(e,t),left:e.left-t.width/2,name:"arrow_s"}),northWestArrowSouthMiddleEast:(e,t)=>({top:ix(e,t),left:e.left-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_sme"}),northWestArrowSouthEast:(e,t)=>({top:ix(e,t),left:e.left-t.width+ex.arrowHorizontalOffset,name:"arrow_se"}),northArrowSouthWest:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-ex.arrowHorizontalOffset,name:"arrow_sw"}),northArrowSouthMiddleWest:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_smw"}),northArrowSouth:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width/2,name:"arrow_s"}),northArrowSouthMiddleEast:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_sme"}),northArrowSouthEast:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width+ex.arrowHorizontalOffset,name:"arrow_se"}),northEastArrowSouthWest:(e,t)=>({top:ix(e,t),left:e.right-ex.arrowHorizontalOffset,name:"arrow_sw"}),northEastArrowSouthMiddleWest:(e,t)=>({top:ix(e,t),left:e.right-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_smw"}),northEastArrowSouth:(e,t)=>({top:ix(e,t),left:e.right-t.width/2,name:"arrow_s"}),northEastArrowSouthMiddleEast:(e,t)=>({top:ix(e,t),left:e.right-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_sme"}),northEastArrowSouthEast:(e,t)=>({top:ix(e,t),left:e.right-t.width+ex.arrowHorizontalOffset,name:"arrow_se"}),southWestArrowNorthWest:(e,t)=>({top:nx(e,t),left:e.left-ex.arrowHorizontalOffset,name:"arrow_nw"}),southWestArrowNorthMiddleWest:(e,t)=>({top:nx(e,t),left:e.left-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_nmw"}),southWestArrowNorth:(e,t)=>({top:nx(e,t),left:e.left-t.width/2,name:"arrow_n"}),southWestArrowNorthMiddleEast:(e,t)=>({top:nx(e,t),left:e.left-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_nme"}),southWestArrowNorthEast:(e,t)=>({top:nx(e,t),left:e.left-t.width+ex.arrowHorizontalOffset,name:"arrow_ne"}),southArrowNorthWest:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-ex.arrowHorizontalOffset,name:"arrow_nw"}),southArrowNorthMiddleWest:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_nmw"}),southArrowNorth:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width/2,name:"arrow_n"}),southArrowNorthMiddleEast:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_nme"}),southArrowNorthEast:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width+ex.arrowHorizontalOffset,name:"arrow_ne"}),southEastArrowNorthWest:(e,t)=>({top:nx(e,t),left:e.right-ex.arrowHorizontalOffset,name:"arrow_nw"}),southEastArrowNorthMiddleWest:(e,t)=>({top:nx(e,t),left:e.right-t.width*.25-ex.arrowHorizontalOffset,name:"arrow_nmw"}),southEastArrowNorth:(e,t)=>({top:nx(e,t),left:e.right-t.width/2,name:"arrow_n"}),southEastArrowNorthMiddleEast:(e,t)=>({top:nx(e,t),left:e.right-t.width*.75+ex.arrowHorizontalOffset,name:"arrow_nme"}),southEastArrowNorthEast:(e,t)=>({top:nx(e,t),left:e.right-t.width+ex.arrowHorizontalOffset,name:"arrow_ne"})};function ix(e,t){return e.top-t.height-ex.arrowVerticalOffset}function nx(e){return e.bottom+ex.arrowVerticalOffset}var ox='';const rx="ck-widget";const sx="ck-widget_selected";function ax(e){if(!e.is("element")){return false}return!!e.getCustomProperty("widget")}function lx(e,t,i={}){t.setAttribute("contenteditable","false",e);t.addClass(rx,e);t.setCustomProperty("widget",true,e);e.getFillerOffset=px;if(i.label){dx(e,i.label,t)}if(i.hasSelectionHandle){bx(e,t)}cx(e,t,(e,t,i)=>i.addClass(n(t.classes),e),(e,t,i)=>i.removeClass(n(t.classes),e));return e;function n(e){return Array.isArray(e)?e:[e]}}function cx(e,t,i,n){const o=new Gy;o.on("change:top",(t,o)=>{if(o.oldDescriptor){n(e,o.oldDescriptor,o.writer)}if(o.newDescriptor){i(e,o.newDescriptor,o.writer)}});t.setCustomProperty("addHighlight",(e,t,i)=>o.add(t,i),e);t.setCustomProperty("removeHighlight",(e,t,i)=>o.remove(t,i),e)}function dx(e,t,i){i.setCustomProperty("widgetLabel",t,e)}function ux(e){const t=e.getCustomProperty("widgetLabel");if(!t){return""}return typeof t=="function"?t():t}function hx(e,t){t.addClass(["ck-editor__editable","ck-editor__nested-editable"],e);t.setAttribute("contenteditable",e.isReadOnly?"false":"true",e);e.on("change:isReadOnly",(i,n,o)=>{t.setAttribute("contenteditable",o?"false":"true",e)});e.on("change:isFocused",(i,n,o)=>{if(o){t.addClass("ck-editor__nested-editable_focused",e)}else{t.removeClass("ck-editor__nested-editable_focused",e)}});return e}function fx(e,t){const i=e.getSelectedElement();if(i&&t.schema.isBlock(i)){return t.createPositionAfter(i)}const n=e.getSelectedBlocks().next().value;if(n){if(n.isEmpty){return t.createPositionAt(n,0)}const i=t.createPositionAfter(n);if(e.focus.isTouching(i)){return i}return t.createPositionBefore(n)}return e.focus}function mx(e,t){return(i,n)=>{const{mapper:o,viewPosition:r}=n;const s=o.findMappedViewAncestor(r);if(!t(s)){return}const a=o.toModelElement(s);n.modelPosition=e.createPositionAt(a,r.isAtStart?"before":"after")}}function gx(e,t){const i=new vh(Ld.window);const n=i.getIntersection(e);const o=t.height+ex.arrowVerticalOffset;if(e.top-o>i.top||e.bottom+o{const i=t.createElement("horizontalLine");e.insertContent(i);let n=i.nextSibling;const o=n&&e.schema.checkChild(n,"$text");if(!o&&e.schema.checkChild(i.parent,"paragraph")){n=t.createElement("paragraph");e.insertContent(n,t.createPositionAfter(i))}if(n){t.setSelection(n,0)}})}}function _x(e){const t=e.schema;const i=e.document.selection;return kx(i,t,e)&&!vx(i,t)}function kx(e,t,i){const n=yx(e,i);return t.checkChild(n,"horizontalLine")}function vx(e,t){const i=e.getSelectedElement();return i&&t.isObject(i)}function yx(e,t){const i=fx(e,t);const n=i.parent;if(n.isEmpty&&!n.is("$root")){return n.parent}return n}var xx=i(65);class Ax extends Rw{static get pluginName(){return"HorizontalLineEditing"}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;t.register("horizontalLine",{isObject:true,allowWhere:"$block"});n.for("dataDowncast").elementToElement({model:"horizontalLine",view:(e,t)=>t.createEmptyElement("hr")});n.for("editingDowncast").elementToElement({model:"horizontalLine",view:(e,t)=>{const n=i("Horizontal line");const o=t.createContainerElement("div");const r=t.createEmptyElement("hr");t.addClass("ck-horizontal-line",o);t.setCustomProperty("hr",true,o);t.insert(t.createPositionAt(o,0),r);return Cx(o,t,n)}});n.for("upcast").elementToElement({view:"hr",model:"horizontalLine"});e.commands.add("horizontalLine",new wx(e))}}function Cx(e,t,i){t.setCustomProperty("horizontalLine",true,e);return lx(e,t,{label:i})}var Tx='';class Ex extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("horizontalLine",i=>{const n=e.commands.get("horizontalLine");const o=new rw(i);o.set({label:t("Horizontal line"),icon:Tx,tooltip:true});o.bind("isEnabled").to(n,"isEnabled");this.listenTo(o,"execute",()=>{e.execute("horizontalLine");e.editing.view.focus()});return o})}}class Px extends Rw{static get requires(){return[Ax,Ex]}static get pluginName(){return"HorizontalLine"}}class Mx extends Gd{observe(e){this.listenTo(e,"load",(e,t)=>{const i=t.target;if(i.tagName=="IMG"){this._fireEvents(t)}},{useCapture:true})}_fireEvents(e){if(this.isEnabled){this.document.fire("layoutChanged");this.document.fire("imageLoaded",e)}}}function Sx(e,t,i){t.setCustomProperty("image",true,e);return lx(e,t,{label:n});function n(){const t=zx(e);const n=t.getAttribute("alt");return n?`${n} ${i}`:i}}function Ix(e){return!!e.getCustomProperty("image")&&ax(e)}function Lx(e){const t=e.getSelectedElement();if(t&&Ix(t)){return t}return null}function Nx(e){return!!e&&e.is("image")}function Ox(e,t,i={}){const n=e.createElement("image",i);const o=fx(t.document.selection,t);t.insertContent(n,o);if(n.parent){e.setSelection(n,"on")}}function Rx(e){const t=e.schema;const i=e.document.selection;return Dx(i,t,e)&&!jx(i,t)&&Bx(i)}function zx(e){return Array.from(e.getChildren()).find(e=>e.is("img"))}function Dx(e,t,i){const n=Vx(e,i);return t.checkChild(n,"image")}function jx(e,t){const i=e.getSelectedElement();return i&&t.isObject(i)}function Bx(e){return[...e.focus.getAncestors()].every(e=>!e.is("image"))}function Vx(e,t){const i=fx(e,t);const n=i.parent;if(n.isEmpty&&!n.is("$root")){return n.parent}return n}function Fx(){return t=>{t.on("element:figure",e)};function e(e,t,i){if(!i.consumable.test(t.viewItem,{name:true,classes:"image"})){return}const n=zx(t.viewItem);if(!n||!n.hasAttribute("src")||!i.consumable.test(n,{name:true})){return}const o=i.convertItem(n,t.modelCursor);const r=Bw(o.modelRange.getItems());if(!r){return}i.convertChildren(t.viewItem,i.writer.createPositionAt(r,0));t.modelRange=o.modelRange;t.modelCursor=o.modelCursor}}function Hx(){return t=>{t.on("attribute:srcset:image",e)};function e(e,t,i){if(!i.consumable.consume(t.item,e.name)){return}const n=i.writer;const o=i.mapper.toViewElement(t.item);const r=zx(o);if(t.attributeNewValue===null){const e=t.attributeOldValue;if(e.data){n.removeAttribute("srcset",r);n.removeAttribute("sizes",r);if(e.width){n.removeAttribute("width",r)}}}else{const e=t.attributeNewValue;if(e.data){n.setAttribute("srcset",e.data,r);n.setAttribute("sizes","100vw",r);if(e.width){n.setAttribute("width",e.width,r)}}}}}function Wx(e){return i=>{i.on(`attribute:${e}:image`,t)};function t(e,t,i){if(!i.consumable.consume(t.item,e.name)){return}const n=i.writer;const o=i.mapper.toViewElement(t.item);const r=zx(o);if(t.attributeNewValue!==null){n.setAttribute(t.attributeKey,t.attributeNewValue,r)}else{n.removeAttribute(t.attributeKey,r)}}}class Ux extends Dw{refresh(){this.isEnabled=Rx(this.editor.model)}execute(e){const t=this.editor.model;t.change(i=>{const n=Array.isArray(e.source)?e.source:[e.source];for(const e of n){Ox(i,t,{src:e})}})}}class qx extends Rw{static get pluginName(){return"ImageEditing"}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;e.editing.view.addObserver(Mx);t.register("image",{isObject:true,isBlock:true,allowWhere:"$block",allowAttributes:["alt","src","srcset"]});n.for("dataDowncast").elementToElement({model:"image",view:(e,t)=>$x(t)});n.for("editingDowncast").elementToElement({model:"image",view:(e,t)=>Sx($x(t),t,i("image widget"))});n.for("downcast").add(Wx("src")).add(Wx("alt")).add(Hx());n.for("upcast").elementToElement({view:{name:"img",attributes:{src:true}},model:(e,t)=>t.createElement("image",{src:e.getAttribute("src")})}).attributeToAttribute({view:{name:"img",key:"alt"},model:"alt"}).attributeToAttribute({view:{name:"img",key:"srcset"},model:{key:"srcset",value:e=>{const t={data:e.getAttribute("srcset")};if(e.hasAttribute("width")){t.width=e.getAttribute("width")}return t}}}).add(Fx());e.commands.add("imageInsert",new Ux(e))}}function $x(e){const t=e.createEmptyElement("img");const i=e.createContainerElement("figure",{class:"image"});e.insert(e.createPositionAt(i,0),t);return i}class Gx extends Ku{constructor(e){super(e);this.domEventType="mousedown"}onDomEvent(e){this.fire(e.type,e)}}function Yx(e,t,i){return e&&ax(e)&&!i.isInline(t)}function Kx(e){return e.closest(".ck-widget__type-around__button")}function Jx(e){return e.classList.contains("ck-widget__type-around__button_before")?"before":"after"}function Qx(e,t){const i=e.closest(".ck-widget");return t.mapDomToView(i)}function Zx(e){const t=[];if(Xx(e)||tA(e)){t.push("before")}if(eA(e)||iA(e)){t.push("after")}return t}function Xx(e){return!e.previousSibling}function eA(e){return!e.nextSibling}function tA(e){return e.previousSibling&&ax(e.previousSibling)}function iA(e){return e.nextSibling&&ax(e.nextSibling)}var nA='\n';var oA=i(67);const rA=["before","after"];const sA=(new DOMParser).parseFromString(nA,"image/svg+xml").firstChild;class aA extends Rw{static get requires(){return[Ty]}static get pluginName(){return"WidgetTypeAround"}constructor(e){super(e);this._widgetsWithTypeAroundUI=new Set}destroy(){this._widgetsWithTypeAroundUI.clear()}init(){this._enableTypeAroundUIInjection();this._enableDetectionOfTypeAroundWidgets();this._enableInsertingParagraphsOnButtonClick()}_insertParagraph(e,t){const i=this.editor;const n=i.editing.view;const o=i.editing.mapper.toModelElement(e);let r;if(t==="before"){r=i.model.createPositionBefore(o)}else{r=i.model.createPositionAfter(o)}i.execute("insertParagraph",{position:r});n.focus();n.scrollToTheSelection()}_enableTypeAroundUIInjection(){const e=this.editor;const t=e.model.schema;const i=e.locale.t;const n={before:i("Insert paragraph before block"),after:i("Insert paragraph after block")};e.editing.downcastDispatcher.on("insert",(e,i,o)=>{const r=o.mapper.toViewElement(i.item);if(Yx(r,i.item,t)){lA(o.writer,n,r);this._widgetsWithTypeAroundUI.add(r)}},{priority:"low"})}_enableDetectionOfTypeAroundWidgets(){const e=this.editor;const t=e.editing.view;function i(e){return`ck-widget_can-type-around_${e}`}t.document.registerPostFixer(e=>{for(const t of this._widgetsWithTypeAroundUI){if(!t.isAttached()){this._widgetsWithTypeAroundUI.delete(t)}else{const n=Zx(t);e.removeClass(rA.map(i),t);e.addClass(n.map(i),t)}}})}_enableInsertingParagraphsOnButtonClick(){const e=this.editor;const t=e.editing.view;t.document.on("mousedown",(e,i)=>{const n=Kx(i.domTarget);if(!n){return}const o=Jx(n);const r=Qx(n,t.domConverter);this._insertParagraph(r,o);i.preventDefault();e.stop()})}}function lA(e,t,i){const n=e.createUIElement("div",{class:"ck ck-reset_all ck-widget__type-around"},(function(e){const i=this.toDomElement(e);cA(i,t);return i}));e.insert(e.createPositionAt(i,"end"),n)}function cA(e,t){for(const i of rA){const n=new $p({tag:"div",attributes:{class:["ck","ck-widget__type-around__button",`ck-widget__type-around__button_${i}`],title:t[i]},children:[e.ownerDocument.importNode(sA,true)]});e.appendChild(n.render())}}var dA=i(69);class uA extends Rw{static get pluginName(){return"Widget"}static get requires(){return[aA]}init(){const e=this.editor.editing.view;const t=e.document;this._previouslySelected=new Set;this.editor.editing.downcastDispatcher.on("selection",(e,t,i)=>{this._clearPreviouslySelectedWidgets(i.writer);const n=i.writer;const o=n.document.selection;const r=o.getSelectedElement();let s=null;for(const e of o.getRanges()){for(const t of e){const e=t.item;if(ax(e)&&!mA(e,s)){n.addClass(sx,e);this._previouslySelected.add(e);s=e;if(e==r){n.setSelection(o.getRanges(),{fake:true,label:ux(r)})}}}}},{priority:"low"});e.addObserver(Gx);this.listenTo(t,"mousedown",(...e)=>this._onMousedown(...e));this.listenTo(t,"keydown",(...e)=>this._onKeydown(...e),{priority:"high"});this.listenTo(t,"delete",(e,t)=>{if(this._handleDelete(t.direction=="forward")){t.preventDefault();e.stop()}},{priority:"high"})}_onMousedown(e,t){const i=this.editor;const n=i.editing.view;const o=n.document;let r=t.target;if(fA(r)){if(Tc.isSafari&&t.domEvent.detail>=3){const e=i.editing.mapper;const n=e.toModelElement(r);this.editor.model.change(e=>{t.preventDefault();e.setSelection(n,"in")})}return}if(!ax(r)){r=r.findAncestor(ax);if(!r){return}}t.preventDefault();if(!o.isFocused){n.focus()}const s=i.editing.mapper.toModelElement(r);this._setSelectionOverElement(s)}_onKeydown(e,t){const i=t.keyCode;const n=this.editor.locale.contentLanguageDirection==="ltr";const o=i==Oc.arrowdown||i==Oc[n?"arrowright":"arrowleft"];let r=false;if(hA(i)){r=this._handleArrowKeys(o)}else if(i===Oc.enter){r=this._handleEnterKey(t.shiftKey)}if(r){t.preventDefault();e.stop()}}_handleDelete(e){if(this.editor.isReadOnly){return}const t=this.editor.model.document;const i=t.selection;if(!i.isCollapsed){return}const n=this._getObjectElementNextToSelection(e);if(n){this.editor.model.change(e=>{let t=i.anchor.parent;while(t.isEmpty){const i=t;t=i.parent;e.remove(i)}this._setSelectionOverElement(n)});return true}}_handleArrowKeys(e){const t=this.editor.model;const i=t.schema;const n=t.document;const o=n.selection;const r=o.getSelectedElement();if(r&&i.isObject(r)){const n=e?o.getLastPosition():o.getFirstPosition();const r=i.getNearestSelectionRange(n,e?"forward":"backward");if(r){t.change(e=>{e.setSelection(r)})}return true}if(!o.isCollapsed){return}const s=this._getObjectElementNextToSelection(e);if(!!s&&i.isObject(s)){this._setSelectionOverElement(s);return true}}_handleEnterKey(e){const t=this.editor.model;const i=t.document.selection;const n=i.getSelectedElement();if(gA(n,t.schema)){t.change(i=>{let o=i.createPositionAt(n,e?"before":"after");const r=i.createElement("paragraph");if(t.schema.isBlock(n.parent)){const e=t.schema.findAllowedParent(o,r);o=i.split(o,e).position}i.insert(r,o);i.setSelection(r,"in")});return true}}_setSelectionOverElement(e){this.editor.model.change(t=>{t.setSelection(t.createRangeOn(e))})}_getObjectElementNextToSelection(e){const t=this.editor.model;const i=t.schema;const n=t.document.selection;const o=t.createSelection(n);t.modifySelection(o,{direction:e?"forward":"backward"});const r=e?o.focus.nodeBefore:o.focus.nodeAfter;if(!!r&&i.isObject(r)){return r}return null}_clearPreviouslySelectedWidgets(e){for(const t of this._previouslySelected){e.removeClass(sx,t)}this._previouslySelected.clear()}}function hA(e){return e==Oc.arrowright||e==Oc.arrowleft||e==Oc.arrowup||e==Oc.arrowdown}function fA(e){while(e){if(e.is("editableElement")&&!e.is("rootElement")){return true}if(ax(e)){return false}e=e.parent}return false}function mA(e,t){if(!t){return false}return Array.from(e.getAncestors()).includes(t)}function gA(e,t){return e&&t.isObject(e)&&!t.isInline(e)}class pA extends Dw{refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=Nx(e);if(Nx(e)&&e.hasAttribute("alt")){this.value=e.getAttribute("alt")}else{this.value=false}}execute(e){const t=this.editor.model;const i=t.document.selection.getSelectedElement();t.change(t=>{t.setAttribute("alt",e.newValue,i)})}}class bA extends Rw{static get pluginName(){return"ImageTextAlternativeEditing"}init(){this.editor.commands.add("imageTextAlternative",new pA(this.editor))}}var wA=i(71);class _A extends _b{constructor(e,t){super(e);const i=`ck-labeled-field-view-${is()}`;const n=`ck-labeled-field-view-status-${is()}`;this.fieldView=t(this,i,n);this.set("label");this.set("isEnabled",true);this.set("errorText",null);this.set("infoText",null);this.set("class");this.labelView=this._createLabelView(i);this.statusView=this._createStatusView(n);this.bind("_statusText").to(this,"errorText",this,"infoText",(e,t)=>e||t);const o=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view",o.to("class"),o.if("isEnabled","ck-disabled",e=>!e)]},children:[this.labelView,this.fieldView,this.statusView]})}_createLabelView(e){const t=new Pb(this.locale);t.for=e;t.bind("text").to(this,"label");return t}_createStatusView(e){const t=new _b(this.locale);const i=this.bindTemplate;t.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view__status",i.if("errorText","ck-labeled-field-view__status_error"),i.if("_statusText","ck-hidden",e=>!e)],id:e,role:i.if("errorText","alert")},children:[{text:i.to("_statusText")}]});return t}focus(){this.fieldView.focus()}}var kA=i(73);class vA extends _b{constructor(e){super(e);this.set("value");this.set("id");this.set("placeholder");this.set("isReadOnly",false);this.set("hasError",false);this.set("ariaDescribedById");const t=this.bindTemplate;this.setTemplate({tag:"input",attributes:{type:"text",class:["ck","ck-input","ck-input-text",t.if("hasError","ck-error")],id:t.to("id"),placeholder:t.to("placeholder"),readonly:t.to("isReadOnly"),"aria-invalid":t.if("hasError",true),"aria-describedby":t.to("ariaDescribedById")},on:{input:t.to("input")}})}render(){super.render();const e=e=>{this.element.value=!e&&e!==0?"":e};e(this.value);this.on("change:value",(t,i,n)=>{e(n)})}select(){this.element.select()}focus(){this.element.focus()}}function yA(e,t,i){const n=new vA(e.locale);n.set({id:t,ariaDescribedById:i});n.bind("isReadOnly").to(e,"isEnabled",e=>!e);n.bind("hasError").to(e,"errorText",e=>!!e);n.on("input",()=>{e.errorText=null});return n}function xA(e,t,i){const n=bw(e.locale);n.set({id:t,ariaDescribedById:i});n.bind("isEnabled").to(e);return n}function AA({view:e}){e.listenTo(e.element,"submit",(t,i)=>{i.preventDefault();e.fire("submit")},{useCapture:true})}var CA='';var TA='';var EA=i(75);class PA extends _b{constructor(e){super(e);const t=this.locale.t;this.focusTracker=new Ep;this.keystrokes=new mp;this.labeledInput=this._createLabeledInputView();this.saveButtonView=this._createButton(t("Save"),CA,"ck-button-save");this.saveButtonView.type="submit";this.cancelButtonView=this._createButton(t("Cancel"),TA,"ck-button-cancel","cancel");this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this.setTemplate({tag:"form",attributes:{class:["ck","ck-text-alternative-form"],tabindex:"-1"},children:[this.labeledInput,this.saveButtonView,this.cancelButtonView]})}render(){super.render();this.keystrokes.listenTo(this.element);AA({view:this});[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)})}_createButton(e,t,i,n){const o=new rw(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:i}});if(n){o.delegate("execute").to(this,n)}return o}_createLabeledInputView(){const e=this.locale.t;const t=new _A(this.locale,yA);t.label=e("Text alternative");t.fieldView.placeholder=e("Text alternative");return t}}var MA='';var SA='';var IA=i(77);var LA=i(79);const NA=Lb("px");class OA extends Rw{static get pluginName(){return"ContextualBalloon"}constructor(e){super(e);this.positionLimiter=()=>{const e=this.editor.editing.view;const t=e.document;const i=t.selection.editableElement;if(i){return e.domConverter.mapViewToDom(i.root)}return null};this.set("visibleView",null);this.view=new ex(e.locale);e.ui.view.body.add(this.view);e.ui.focusTracker.add(this.view.element);this._viewToStack=new Map;this._idToStack=new Map;this.set("_numberOfStacks",0);this.set("_singleViewMode",false);this._rotatorView=this._createRotatorView();this._fakePanelsView=this._createFakePanelsView()}hasView(e){return Array.from(this._viewToStack.keys()).includes(e)}add(e){if(this.hasView(e.view)){throw new ss["b"]("contextualballoon-add-view-exist: Cannot add configuration of the same view twice.",[this,e])}const t=e.stackId||"main";if(!this._idToStack.has(t)){this._idToStack.set(t,new Map([[e.view,e]]));this._viewToStack.set(e.view,this._idToStack.get(t));this._numberOfStacks=this._idToStack.size;if(!this._visibleStack||e.singleViewMode){this.showStack(t)}return}const i=this._idToStack.get(t);if(e.singleViewMode){this.showStack(t)}i.set(e.view,e);this._viewToStack.set(e.view,i);if(i===this._visibleStack){this._showView(e)}}remove(e){if(!this.hasView(e)){throw new ss["b"]("contextualballoon-remove-view-not-exist: Cannot remove the configuration of a non-existent view.",[this,e])}const t=this._viewToStack.get(e);if(this._singleViewMode&&this.visibleView===e){this._singleViewMode=false}if(this.visibleView===e){if(t.size===1){if(this._idToStack.size>1){this._showNextStack()}else{this.view.hide();this.visibleView=null;this._rotatorView.hideView()}}else{this._showView(Array.from(t.values())[t.size-2])}}if(t.size===1){this._idToStack.delete(this._getStackId(t));this._numberOfStacks=this._idToStack.size}else{t.delete(e)}this._viewToStack.delete(e)}updatePosition(e){if(e){this._visibleStack.get(this.visibleView).position=e}this.view.pin(this._getBalloonPosition());this._fakePanelsView.updatePosition()}showStack(e){this.visibleStack=e;const t=this._idToStack.get(e);if(!t){throw new ss["b"]("contextualballoon-showstack-stack-not-exist: Cannot show a stack that does not exist.",this)}if(this._visibleStack===t){return}this._showView(Array.from(t.values()).pop())}get _visibleStack(){return this._viewToStack.get(this.visibleView)}_getStackId(e){const t=Array.from(this._idToStack.entries()).find(t=>t[1]===e);return t[0]}_showNextStack(){const e=Array.from(this._idToStack.values());let t=e.indexOf(this._visibleStack)+1;if(!e[t]){t=0}this.showStack(this._getStackId(e[t]))}_showPrevStack(){const e=Array.from(this._idToStack.values());let t=e.indexOf(this._visibleStack)-1;if(!e[t]){t=e.length-1}this.showStack(this._getStackId(e[t]))}_createRotatorView(){const e=new RA(this.editor.locale);const t=this.editor.locale.t;this.view.content.add(e);e.bind("isNavigationVisible").to(this,"_numberOfStacks",this,"_singleViewMode",(e,t)=>!t&&e>1);e.on("change:isNavigationVisible",()=>this.updatePosition(),{priority:"low"});e.bind("counter").to(this,"visibleView",this,"_numberOfStacks",(e,i)=>{if(i<2){return""}const n=Array.from(this._idToStack.values()).indexOf(this._visibleStack)+1;return t("%0 of %1",[n,i])});e.buttonNextView.on("execute",()=>{if(e.focusTracker.isFocused){this.editor.editing.view.focus()}this._showNextStack()});e.buttonPrevView.on("execute",()=>{if(e.focusTracker.isFocused){this.editor.editing.view.focus()}this._showPrevStack()});return e}_createFakePanelsView(){const e=new zA(this.editor.locale,this.view);e.bind("numberOfPanels").to(this,"_numberOfStacks",this,"_singleViewMode",(e,t)=>{const i=!t&&e>=2;return i?Math.min(e-1,2):0});e.listenTo(this.view,"change:top",()=>e.updatePosition());e.listenTo(this.view,"change:left",()=>e.updatePosition());this.editor.ui.view.body.add(e);return e}_showView({view:e,balloonClassName:t="",withArrow:i=true,singleViewMode:n=false}){this.view.class=t;this.view.withArrow=i;this._rotatorView.showView(e);this.visibleView=e;this.view.pin(this._getBalloonPosition());this._fakePanelsView.updatePosition();if(n){this._singleViewMode=true}}_getBalloonPosition(){let e=Array.from(this._visibleStack.values()).pop().position;if(e&&!e.limiter){e=Object.assign({},e,{limiter:this.positionLimiter})}return e}}class RA extends _b{constructor(e){super(e);const t=e.t;const i=this.bindTemplate;this.set("isNavigationVisible",true);this.focusTracker=new Ep;this.buttonPrevView=this._createButtonView(t("Previous"),MA);this.buttonNextView=this._createButtonView(t("Next"),SA);this.content=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-rotator"],"z-index":"-1"},children:[{tag:"div",attributes:{class:["ck-balloon-rotator__navigation",i.to("isNavigationVisible",e=>e?"":"ck-hidden")]},children:[this.buttonPrevView,{tag:"span",attributes:{class:["ck-balloon-rotator__counter"]},children:[{text:i.to("counter")}]},this.buttonNextView]},{tag:"div",attributes:{class:"ck-balloon-rotator__content"},children:this.content}]})}render(){super.render();this.focusTracker.add(this.element)}showView(e){this.hideView();this.content.add(e)}hideView(){this.content.clear()}_createButtonView(e,t){const i=new rw(this.locale);i.set({label:e,icon:t,tooltip:true});return i}}class zA extends _b{constructor(e,t){super(e);const i=this.bindTemplate;this.set("top",0);this.set("left",0);this.set("height",0);this.set("width",0);this.set("numberOfPanels",0);this.content=this.createCollection();this._balloonPanelView=t;this.setTemplate({tag:"div",attributes:{class:["ck-fake-panel",i.to("numberOfPanels",e=>e?"":"ck-hidden")],style:{top:i.to("top",NA),left:i.to("left",NA),width:i.to("width",NA),height:i.to("height",NA)}},children:this.content});this.on("change:numberOfPanels",(e,t,i,n)=>{if(i>n){this._addPanels(i-n)}else{this._removePanels(n-i)}this.updatePosition()})}_addPanels(e){while(e--){const e=new _b;e.setTemplate({tag:"div"});this.content.add(e);this.registerChild(e)}}_removePanels(e){while(e--){const e=this.content.last;this.content.remove(e);this.deregisterChild(e);e.destroy()}}updatePosition(){if(this.numberOfPanels){const{top:e,left:t}=this._balloonPanelView;const{width:i,height:n}=new vh(this._balloonPanelView.element);Object.assign(this,{top:e,left:t,width:i,height:n})}}}var DA='';function jA(e){const t=e.plugins.get("ContextualBalloon");if(Lx(e.editing.view.document.selection)){const i=BA(e);t.updatePosition(i)}}function BA(e){const t=e.editing.view;const i=ex.defaultPositions;return{target:t.domConverter.viewToDom(t.document.selection.getSelectedElement()),positions:[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast]}}class VA extends Rw{static get requires(){return[OA]}static get pluginName(){return"ImageTextAlternativeUI"}init(){this._createButton();this._createForm()}destroy(){super.destroy();this._form.destroy()}_createButton(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("imageTextAlternative",i=>{const n=e.commands.get("imageTextAlternative");const o=new rw(i);o.set({label:t("Change image text alternative"),icon:DA,tooltip:true});o.bind("isEnabled").to(n,"isEnabled");this.listenTo(o,"execute",()=>{this._showForm()});return o})}_createForm(){const e=this.editor;const t=e.editing.view;const i=t.document;this._balloon=this.editor.plugins.get("ContextualBalloon");this._form=new PA(e.locale);this._form.render();this.listenTo(this._form,"submit",()=>{e.execute("imageTextAlternative",{newValue:this._form.labeledInput.fieldView.element.value});this._hideForm(true)});this.listenTo(this._form,"cancel",()=>{this._hideForm(true)});this._form.keystrokes.set("Esc",(e,t)=>{this._hideForm(true);t()});this.listenTo(e.ui,"update",()=>{if(!Lx(i.selection)){this._hideForm(true)}else if(this._isVisible){jA(e)}});mw({emitter:this._form,activator:()=>this._isVisible,contextElements:[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible){return}const e=this.editor;const t=e.commands.get("imageTextAlternative");const i=this._form.labeledInput;if(!this._isInBalloon){this._balloon.add({view:this._form,position:BA(e)})}i.fieldView.value=i.fieldView.element.value=t.value||"";this._form.labeledInput.fieldView.select()}_hideForm(e){if(!this._isInBalloon){return}if(this._form.focusTracker.isFocused){this._form.saveButtonView.focus()}this._balloon.remove(this._form);if(e){this.editor.editing.view.focus()}}get _isVisible(){return this._balloon.visibleView===this._form}get _isInBalloon(){return this._balloon.hasView(this._form)}}class FA extends Rw{static get requires(){return[bA,VA]}static get pluginName(){return"ImageTextAlternative"}}var HA=i(81);class WA extends Rw{static get requires(){return[qx,uA,FA]}static get pluginName(){return"Image"}}function UA(e,t){return i=>{const n=i.createEditableElement("figcaption");i.setCustomProperty("imageCaption",true,n);Np({view:e,element:n,text:t});return hx(n,i)}}function qA(e){return!!e.getCustomProperty("imageCaption")}function $A(e){for(const t of e.getChildren()){if(!!t&&t.is("caption")){return t}}return null}function GA(e){const t=e.parent;if(e.name=="figcaption"&&t&&t.name=="figure"&&t.hasClass("image")){return{name:true}}return null}class YA extends Rw{static get pluginName(){return"ImageCaptionEditing"}init(){const e=this.editor;const t=e.editing.view;const i=e.model.schema;const n=e.data;const o=e.editing;const r=e.t;i.register("caption",{allowIn:"image",allowContentOf:"$block",isLimit:true});e.model.document.registerPostFixer(e=>this._insertMissingModelCaptionElement(e));e.conversion.for("upcast").elementToElement({view:GA,model:"caption"});const s=e=>e.createContainerElement("figcaption");n.downcastDispatcher.on("insert:caption",KA(s,false));const a=UA(t,r("Enter image caption"));o.downcastDispatcher.on("insert:caption",KA(a));o.downcastDispatcher.on("insert",this._fixCaptionVisibility(e=>e.item),{priority:"high"});o.downcastDispatcher.on("remove",this._fixCaptionVisibility(e=>e.position.parent),{priority:"high"});t.document.registerPostFixer(e=>this._updateCaptionVisibility(e))}_updateCaptionVisibility(e){const t=this.editor.editing.mapper;const i=this._lastSelectedCaption;let n;const o=this.editor.model.document.selection;const r=o.getSelectedElement();if(r&&r.is("image")){const e=$A(r);n=t.toViewElement(e)}const s=o.getFirstPosition();const a=QA(s.parent);if(a){n=t.toViewElement(a)}if(n){if(i){if(i===n){return XA(n,e)}else{ZA(i,e);this._lastSelectedCaption=n;return XA(n,e)}}else{this._lastSelectedCaption=n;return XA(n,e)}}else{if(i){const t=ZA(i,e);this._lastSelectedCaption=null;return t}else{return false}}}_fixCaptionVisibility(e){return(t,i,n)=>{const o=e(i);const r=QA(o);const s=this.editor.editing.mapper;const a=n.writer;if(r){const e=s.toViewElement(r);if(e){if(r.childCount){a.removeClass("ck-hidden",e)}else{a.addClass("ck-hidden",e)}}}}}_insertMissingModelCaptionElement(e){const t=this.editor.model;const i=t.document.differ.getChanges();const n=[];for(const e of i){if(e.type=="insert"&&e.name!="$text"){const i=e.position.nodeAfter;if(i.is("image")&&!$A(i)){n.push(i)}if(!i.is("image")&&i.childCount){for(const e of t.createRangeIn(i).getItems()){if(e.is("image")&&!$A(e)){n.push(e)}}}}}for(const t of n){e.appendElement("caption",t)}return!!n.length}}function KA(e,t=true){return(i,n,o)=>{const r=n.item;if(!r.childCount&&!t){return}if(Nx(r.parent)){if(!o.consumable.consume(n.item,"insert")){return}const t=o.mapper.toViewElement(n.range.start.parent);const i=e(o.writer);const s=o.writer;if(!r.childCount){s.addClass("ck-hidden",i)}JA(i,n.item,t,o)}}}function JA(e,t,i,n){const o=n.writer.createPositionAt(i,"end");n.writer.insert(o,e);n.mapper.bindElements(t,e)}function QA(e){const t=e.getAncestors({includeSelf:true});const i=t.find(e=>e.name=="caption");if(i&&i.parent&&i.parent.name=="image"){return i}return null}function ZA(e,t){if(!e.childCount&&!e.hasClass("ck-hidden")){t.addClass("ck-hidden",e);return true}return false}function XA(e,t){if(e.hasClass("ck-hidden")){t.removeClass("ck-hidden",e);return true}return false}var eC=i(83);class tC extends Rw{static get requires(){return[YA]}static get pluginName(){return"ImageCaption"}}class iC{constructor(e){this.set("activeHandlePosition",null);this.set("proposedWidthPercents",null);this.set("proposedWidth",null);this.set("proposedHeight",null);this.set("proposedHandleHostWidth",null);this.set("proposedHandleHostHeight",null);this._options=e;this._referenceCoordinates=null}begin(e,t,i){const n=new vh(t);this.activeHandlePosition=sC(e);this._referenceCoordinates=oC(t,aC(this.activeHandlePosition));this.originalWidth=n.width;this.originalHeight=n.height;this.aspectRatio=n.width/n.height;const o=i.style.width;if(o&&o.match(/^\d+\.?\d*%$/)){this.originalWidthPercents=parseFloat(o)}else{this.originalWidthPercents=nC(i,n)}}update(e){this.proposedWidth=e.width;this.proposedHeight=e.height;this.proposedWidthPercents=e.widthPercents;this.proposedHandleHostWidth=e.handleHostWidth;this.proposedHandleHostHeight=e.handleHostHeight}}ys(iC,Jl);function nC(e,t){const i=e.parentElement;const n=parseFloat(i.ownerDocument.defaultView.getComputedStyle(i).width);return t.width/n*100}function oC(e,t){const i=new vh(e);const n=t.split("-");const o={x:n[1]=="right"?i.right:i.left,y:n[0]=="bottom"?i.bottom:i.top};o.x+=e.ownerDocument.defaultView.scrollX;o.y+=e.ownerDocument.defaultView.scrollY;return o}function rC(e){return`ck-widget__resizer__handle-${e}`}function sC(e){const t=["top-left","top-right","bottom-right","bottom-left"];for(const i of t){if(e.classList.contains(rC(i))){return i}}}function aC(e){const t=e.split("-");const i={top:"bottom",bottom:"top",left:"right",right:"left"};return`${i[t[0]]}-${i[t[1]]}`}class lC{constructor(e){this._options=e;this._domResizerWrapper=null;this._viewResizerWrapper=null;this.set("isEnabled",true);this.decorate("begin");this.decorate("cancel");this.decorate("commit");this.decorate("updateSize");this.on("commit",e=>{if(!this.state.proposedWidth&&!this.state.proposedWidthPercents){this._cleanup();e.stop()}},{priority:"high"})}attach(){const e=this;const t=this._options.viewElement;const i=this._options.editor.editing.view;i.change(i=>{const n=i.createUIElement("div",{class:"ck ck-reset_all ck-widget__resizer"},(function(t){const i=this.toDomElement(t);e._appendHandles(i);e._appendSizeUI(i);e._domResizerWrapper=i;e.on("change:isEnabled",(e,t,n)=>{i.style.display=n?"":"none"});i.style.display=e.isEnabled?"":"none";return i}));i.insert(i.createPositionAt(t,"end"),n);i.addClass("ck-widget_with-resizer",t);this._viewResizerWrapper=n})}begin(e){this.state=new iC(this._options);this._sizeUI.bindToState(this._options,this.state);this._initialViewWidth=this._options.viewElement.getStyle("width");this.state.begin(e,this._getHandleHost(),this._getResizeHost())}updateSize(e){const t=this._proposeNewSize(e);const i=this._options.editor.editing.view;i.change(e=>{const i=this._options.unit||"%";const n=(i==="%"?t.widthPercents:t.width)+i;e.setStyle("width",n,this._options.viewElement)});const n=this._getHandleHost();const o=new vh(n);t.handleHostWidth=Math.round(o.width);t.handleHostHeight=Math.round(o.height);const r=new vh(n);t.width=Math.round(r.width);t.height=Math.round(r.height);this.redraw(o);this.state.update(t)}commit(){const e=this._options.unit||"%";const t=(e==="%"?this.state.proposedWidthPercents:this.state.proposedWidth)+e;this._options.editor.editing.view.change(()=>{this._cleanup();this._options.onCommit(t)})}cancel(){this._cleanup()}destroy(){this.cancel()}redraw(e){const t=this._domResizerWrapper;if(i(t)){this._options.editor.editing.view.change(i=>{const n=t.parentElement;const o=this._getHandleHost();const r=e||new vh(o);i.setStyle("width",r.width+"px",this._viewResizerWrapper);i.setStyle("height",r.height+"px",this._viewResizerWrapper);const s={left:o.offsetLeft,top:o.offsetTop,height:o.offsetHeight,width:o.offsetWidth};if(!n.isSameNode(o)){i.setStyle("left",s.left+"px",this._viewResizerWrapper);i.setStyle("top",s.top+"px",this._viewResizerWrapper);i.setStyle("height",s.height+"px",this._viewResizerWrapper);i.setStyle("width",s.width+"px",this._viewResizerWrapper)}})}function i(e){return e&&e.ownerDocument&&e.ownerDocument.contains(e)}}containsHandle(e){return this._domResizerWrapper.contains(e)}static isResizeHandle(e){return e.classList.contains("ck-widget__resizer__handle")}_cleanup(){this._sizeUI.dismiss();this._sizeUI.isVisible=false;const e=this._options.editor.editing.view;e.change(e=>{e.setStyle("width",this._initialViewWidth,this._options.viewElement)})}_proposeNewSize(e){const t=this.state;const i=uC(e);const n=this._options.isCentered?this._options.isCentered(this):true;const o={x:t._referenceCoordinates.x-(i.x+t.originalWidth),y:i.y-t.originalHeight-t._referenceCoordinates.y};if(n&&t.activeHandlePosition.endsWith("-right")){o.x=i.x-(t._referenceCoordinates.x+t.originalWidth)}if(n){o.x*=2}const r={width:Math.abs(t.originalWidth+o.x),height:Math.abs(t.originalHeight+o.y)};r.dominant=r.width/t.aspectRatio>r.height?"width":"height";r.max=r[r.dominant];const s={width:r.width,height:r.height};if(r.dominant=="width"){s.height=s.width/t.aspectRatio}else{s.width=s.height*t.aspectRatio}return{width:Math.round(s.width),height:Math.round(s.height),widthPercents:Math.min(Math.round(t.originalWidthPercents/t.originalWidth*s.width*100)/100,100)}}_getResizeHost(){const e=this._domResizerWrapper.parentElement;return this._options.getResizeHost(e)}_getHandleHost(){const e=this._domResizerWrapper.parentElement;return this._options.getHandleHost(e)}_appendHandles(e){const t=["top-left","top-right","bottom-right","bottom-left"];for(const i of t){e.appendChild(new $p({tag:"div",attributes:{class:`ck-widget__resizer__handle ${dC(i)}`}}).render())}}_appendSizeUI(e){const t=new cC;t.render();this._sizeUI=t;e.appendChild(t.element)}}ys(lC,Jl);class cC extends _b{constructor(){super();const e=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-size-view",e.to("activeHandlePosition",e=>e?`ck-orientation-${e}`:"")],style:{display:e.if("isVisible","none",e=>!e)}},children:[{text:e.to("label")}]})}bindToState(e,t){this.bind("isVisible").to(t,"proposedWidth",t,"proposedHeight",(e,t)=>e!==null&&t!==null);this.bind("label").to(t,"proposedHandleHostWidth",t,"proposedHandleHostHeight",t,"proposedWidthPercents",(t,i,n)=>{if(e.unit==="px"){return`${t}×${i}`}else{return`${n}%`}});this.bind("activeHandlePosition").to(t)}dismiss(){this.unbind();this.isVisible=false}}function dC(e){return`ck-widget__resizer__handle-${e}`}function uC(e){return{x:e.pageX,y:e.pageY}}var hC="Expected a function";function fC(e,t,i){var n=true,o=true;if(typeof e!="function"){throw new TypeError(hC)}if(le(i)){n="leading"in i?!!i.leading:n;o="trailing"in i?!!i.trailing:o}return uh(e,t,{leading:n,maxWait:t,trailing:o})}var mC=fC;var gC=i(85);class pC extends Rw{static get pluginName(){return"WidgetResize"}init(){this.set("_visibleResizer",null);this.set("_activeResizer",null);this._resizers=new Map;const e=Ld.window.document;this.editor.model.schema.setAttributeProperties("width",{isFormatting:true});this._observer=Object.create(Ud);this._observer.listenTo(e,"mousedown",this._mouseDownListener.bind(this));this._observer.listenTo(e,"mousemove",this._mouseMoveListener.bind(this));this._observer.listenTo(e,"mouseup",this._mouseUpListener.bind(this));const t=()=>{if(this._visibleResizer){this._visibleResizer.redraw()}};const i=mC(t,200);this.on("change:_visibleResizer",t);this.editor.ui.on("update",i);this._observer.listenTo(Ld.window,"resize",i);const n=this.editor.editing.view.document.selection;n.on("change",()=>{const e=n.getSelectedElement();this._visibleResizer=this._getResizerByViewElement(e)||null})}destroy(){this._observer.stopListening();for(const e of this._resizers.values()){e.destroy()}}attachTo(e){const t=new lC(e);const i=this.editor.plugins;t.attach();if(i.has("WidgetToolbarRepository")){const e=i.get("WidgetToolbarRepository");t.on("begin",()=>{e.forceDisabled("resize")},{priority:"lowest"});t.on("cancel",()=>{e.clearForceDisabled("resize")},{priority:"highest"});t.on("commit",()=>{e.clearForceDisabled("resize")},{priority:"highest"})}this._resizers.set(e.viewElement,t);return t}_getResizerByHandle(e){for(const t of this._resizers.values()){if(t.containsHandle(e)){return t}}}_getResizerByViewElement(e){return this._resizers.get(e)}_mouseDownListener(e,t){if(!lC.isResizeHandle(t.target)){return}const i=t.target;this._activeResizer=this._getResizerByHandle(i);if(this._activeResizer){this._activeResizer.begin(i)}}_mouseMoveListener(e,t){if(this._activeResizer){this._activeResizer.updateSize(t)}}_mouseUpListener(){if(this._activeResizer){this._activeResizer.commit();this._activeResizer=null}}}ys(pC,Jl);class bC extends Dw{refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=Nx(e);if(!e||!e.hasAttribute("width")){this.value=null}else{this.value={width:e.getAttribute("width"),height:null}}}execute(e){const t=this.editor.model;const i=t.document.selection.getSelectedElement();t.change(t=>{t.setAttribute("width",e.width,i)})}}var wC=i(87);class _C extends Rw{static get requires(){return[pC]}static get pluginName(){return"ImageResize"}init(){const e=this.editor;const t=new bC(e);this._registerSchema();this._registerConverters();e.commands.add("imageResize",t);e.editing.downcastDispatcher.on("insert:image",(i,n,o)=>{const r=o.mapper.toViewElement(n.item);const s=e.plugins.get(pC).attachTo({unit:e.config.get("image.resizeUnit")||"%",modelElement:n.item,viewElement:r,editor:e,getHandleHost(e){return e.querySelector("img")},getResizeHost(e){return e},isCentered(){const e=n.item.getAttribute("imageStyle");return!e||e=="full"||e=="alignCenter"},onCommit(t){e.execute("imageResize",{width:t})}});s.on("updateSize",()=>{if(!r.hasClass("image_resized")){e.editing.view.change(e=>{e.addClass("image_resized",r)})}});s.bind("isEnabled").to(t)},{priority:"low"})}_registerSchema(){this.editor.model.schema.extend("image",{allowAttributes:"width"})}_registerConverters(){const e=this.editor;e.conversion.for("downcast").add(e=>e.on("attribute:width:image",(e,t,i)=>{if(!i.consumable.consume(t.item,e.name)){return}const n=i.writer;const o=i.mapper.toViewElement(t.item);if(t.attributeNewValue!==null){n.setStyle("width",t.attributeNewValue,o);n.addClass("image_resized",o)}else{n.removeStyle("width",o);n.removeClass("image_resized",o)}}));e.conversion.for("upcast").attributeToAttribute({view:{name:"figure",styles:{width:/.+/}},model:{key:"width",value:e=>e.getStyle("width")}})}}class kC extends Dw{constructor(e,t){super(e);this.defaultStyle=false;this.styles=t.reduce((e,t)=>{e[t.name]=t;if(t.isDefault){this.defaultStyle=t.name}return e},{})}refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=Nx(e);if(!e){this.value=false}else if(e.hasAttribute("imageStyle")){const t=e.getAttribute("imageStyle");this.value=this.styles[t]?t:false}else{this.value=this.defaultStyle}}execute(e){const t=e.value;const i=this.editor.model;const n=i.document.selection.getSelectedElement();i.change(e=>{if(this.styles[t].isDefault){e.removeAttribute("imageStyle",n)}else{e.setAttribute("imageStyle",t,n)}})}}function vC(e){return(t,i,n)=>{if(!n.consumable.consume(i.item,t.name)){return}const o=xC(i.attributeNewValue,e);const r=xC(i.attributeOldValue,e);const s=n.mapper.toViewElement(i.item);const a=n.writer;if(r){a.removeClass(r.className,s)}if(o){a.addClass(o.className,s)}}}function yC(e){const t=e.filter(e=>!e.isDefault);return(e,i,n)=>{if(!i.modelRange){return}const o=i.viewItem;const r=Bw(i.modelRange.getItems());if(!n.schema.checkAttribute(r,"imageStyle")){return}for(const e of t){if(n.consumable.consume(o,{classes:e.className})){n.writer.setAttribute("imageStyle",e.name,r)}}}}function xC(e,t){for(const i of t){if(i.name===e){return i}}}var AC='';var CC='';var TC='';var EC='';const PC={full:{name:"full",title:"Full size image",icon:AC,isDefault:true},side:{name:"side",title:"Side image",icon:EC,className:"image-style-side"},alignLeft:{name:"alignLeft",title:"Left aligned image",icon:CC,className:"image-style-align-left"},alignCenter:{name:"alignCenter",title:"Centered image",icon:TC,className:"image-style-align-center"},alignRight:{name:"alignRight",title:"Right aligned image",icon:EC,className:"image-style-align-right"}};const MC={full:AC,left:CC,right:EC,center:TC};function SC(e=[]){return e.map(IC)}function IC(e){if(typeof e=="string"){const t=e;if(PC[t]){e=Object.assign({},PC[t])}else{console.warn(Object(ss["a"])("image-style-not-found: There is no such image style of given name."),{name:t});e={name:t}}}else if(PC[e.name]){const t=PC[e.name];const i=Object.assign({},e);for(const n in t){if(!e.hasOwnProperty(n)){i[n]=t[n]}}e=i}if(typeof e.icon=="string"&&MC[e.icon]){e.icon=MC[e.icon]}return e}class LC extends Rw{static get pluginName(){return"ImageStyleEditing"}init(){const e=this.editor;const t=e.model.schema;const i=e.data;const n=e.editing;e.config.define("image.styles",["full","side"]);const o=SC(e.config.get("image.styles"));t.extend("image",{allowAttributes:"imageStyle"});const r=vC(o);n.downcastDispatcher.on("attribute:imageStyle:image",r);i.downcastDispatcher.on("attribute:imageStyle:image",r);i.upcastDispatcher.on("element:figure",yC(o),{priority:"low"});e.commands.add("imageStyle",new kC(e,o))}}var NC=i(89);class OC extends Rw{static get pluginName(){return"ImageStyleUI"}get localizedDefaultStylesTitles(){const e=this.editor.t;return{"Full size image":e("Full size image"),"Side image":e("Side image"),"Left aligned image":e("Left aligned image"),"Centered image":e("Centered image"),"Right aligned image":e("Right aligned image")}}init(){const e=this.editor;const t=e.config.get("image.styles");const i=RC(SC(t),this.localizedDefaultStylesTitles);for(const e of i){this._createButton(e)}}_createButton(e){const t=this.editor;const i=`imageStyle:${e.name}`;t.ui.componentFactory.add(i,i=>{const n=t.commands.get("imageStyle");const o=new rw(i);o.set({label:e.title,icon:e.icon,tooltip:true,isToggleable:true});o.bind("isEnabled").to(n,"isEnabled");o.bind("isOn").to(n,"value",t=>t===e.name);this.listenTo(o,"execute",()=>{t.execute("imageStyle",{value:e.name});t.editing.view.focus()});return o})}}function RC(e,t){for(const i of e){if(t[i.title]){i.title=t[i.title]}}return e}class zC extends Rw{static get requires(){return[LC,OC]}static get pluginName(){return"ImageStyle"}}class DC extends Rw{static get requires(){return[OA]}static get pluginName(){return"WidgetToolbarRepository"}init(){const e=this.editor;if(e.plugins.has("BalloonToolbar")){const t=e.plugins.get("BalloonToolbar");this.listenTo(t,"show",t=>{if(VC(e.editing.view.document.selection)){t.stop()}},{priority:"high"})}this._toolbarDefinitions=new Map;this._balloon=this.editor.plugins.get("ContextualBalloon");this.on("change:isEnabled",()=>{this._updateToolbarsVisibility()});this.listenTo(e.ui,"update",()=>{this._updateToolbarsVisibility()});this.listenTo(e.ui.focusTracker,"change:isFocused",()=>{this._updateToolbarsVisibility()},{priority:"low"})}destroy(){super.destroy();for(const e of this._toolbarDefinitions.values()){e.view.destroy()}}register(e,{ariaLabel:t,items:i,getRelatedElement:n,balloonClassName:o="ck-toolbar-container"}){const r=this.editor;const s=r.t;const a=new Tw(r.locale);a.ariaLabel=t||s("Widget toolbar");if(this._toolbarDefinitions.has(e)){throw new ss["b"]("widget-toolbar-duplicated: Toolbar with the given id was already added.",this,{toolbarId:e})}a.fillFromConfig(i,r.ui.componentFactory);this._toolbarDefinitions.set(e,{view:a,getRelatedElement:n,balloonClassName:o})}_updateToolbarsVisibility(){let e=0;let t=null;let i=null;for(const n of this._toolbarDefinitions.values()){const o=n.getRelatedElement(this.editor.editing.view.document.selection);if(!this.isEnabled||!o){if(this._isToolbarInBalloon(n)){this._hideToolbar(n)}}else if(!this.editor.ui.focusTracker.isFocused){if(this._isToolbarVisible(n)){this._hideToolbar(n)}}else{const r=o.getAncestors().length;if(r>e){e=r;t=o;i=n}}}if(i){this._showToolbar(i,t)}}_hideToolbar(e){this._balloon.remove(e.view);this.stopListening(this._balloon,"change:visibleView")}_showToolbar(e,t){if(this._isToolbarVisible(e)){jC(this.editor,t)}else if(!this._isToolbarInBalloon(e)){this._balloon.add({view:e.view,position:BC(this.editor,t),balloonClassName:e.balloonClassName});this.listenTo(this._balloon,"change:visibleView",()=>{for(const e of this._toolbarDefinitions.values()){if(this._isToolbarVisible(e)){const t=e.getRelatedElement(this.editor.editing.view.document.selection);jC(this.editor,t)}}})}}_isToolbarVisible(e){return this._balloon.visibleView===e.view}_isToolbarInBalloon(e){return this._balloon.hasView(e.view)}}function jC(e,t){const i=e.plugins.get("ContextualBalloon");const n=BC(e,t);i.updatePosition(n)}function BC(e,t){const i=e.editing.view;const n=ex.defaultPositions;return{target:i.domConverter.mapViewToDom(t),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,gx]}}function VC(e){const t=e.getSelectedElement();return!!(t&&ax(t))}class FC extends Rw{static get requires(){return[DC]}static get pluginName(){return"ImageToolbar"}afterInit(){const e=this.editor;const t=e.t;const i=e.plugins.get(DC);i.register("image",{ariaLabel:t("Image toolbar"),items:e.config.get("image.toolbar")||[],getRelatedElement:Lx})}}class HC extends _b{constructor(e){super(e);this.buttonView=new rw(e);this._fileInputView=new WC(e);this._fileInputView.bind("acceptedType").to(this);this._fileInputView.bind("allowMultipleFiles").to(this);this._fileInputView.delegate("done").to(this);this.setTemplate({tag:"span",attributes:{class:"ck-file-dialog-button"},children:[this.buttonView,this._fileInputView]});this.buttonView.on("execute",()=>{this._fileInputView.open()})}focus(){this.buttonView.focus()}}class WC extends _b{constructor(e){super(e);this.set("acceptedType");this.set("allowMultipleFiles",false);const t=this.bindTemplate;this.setTemplate({tag:"input",attributes:{class:["ck-hidden"],type:"file",tabindex:"-1",accept:t.to("acceptedType"),multiple:t.to("allowMultipleFiles")},on:{change:t.to(()=>{if(this.element&&this.element.files&&this.element.files.length){this.fire("done",this.element.files)}this.element.value=""})}})}open(){this.element.click()}}var UC='';function qC(e){const t=e.map(e=>e.replace("+","\\+"));return new RegExp(`^image\\/(${t.join("|")})$`)}function $C(e){return new Promise((t,i)=>{const n=e.getAttribute("src");fetch(n).then(e=>e.blob()).then(e=>{const i=YC(e,n);const o=i.replace("image/","");const r=`image.${o}`;const s=new File([e],r,{type:i});t(s)}).catch(i)})}function GC(e){if(!e.is("element","img")||!e.getAttribute("src")){return false}return e.getAttribute("src").match(/^data:image\/\w+;base64,/g)||e.getAttribute("src").match(/^blob:/g)}function YC(e,t){if(e.type){return e.type}else if(t.match(/data:(image\/\w+);base64/)){return t.match(/data:(image\/\w+);base64/)[1].toLowerCase()}else{return"image/jpeg"}}class KC extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("imageUpload",i=>{const n=new HC(i);const o=e.commands.get("imageUpload");const r=e.config.get("image.upload.types");const s=qC(r);n.set({acceptedType:r.map(e=>`image/${e}`).join(","),allowMultipleFiles:true});n.buttonView.set({label:t("Insert image"),icon:UC,tooltip:true});n.buttonView.bind("isEnabled").to(o);n.on("done",(t,i)=>{const n=Array.from(i).filter(e=>s.test(e.type));if(n.length){e.execute("imageUpload",{file:n})}});return n})}}var JC='';var QC=i(91);var ZC=i(93);var XC=i(95);class eT extends Rw{constructor(e){super(e);this.placeholder="data:image/svg+xml;utf8,"+encodeURIComponent(JC)}init(){const e=this.editor;e.editing.downcastDispatcher.on("attribute:uploadStatus:image",(...e)=>this.uploadStatusChange(...e))}uploadStatusChange(e,t,i){const n=this.editor;const o=t.item;const r=o.getAttribute("uploadId");if(!i.consumable.consume(t.item,e.name)){return}const s=n.plugins.get(r_);const a=r?t.attributeNewValue:null;const l=this.placeholder;const c=n.editing.mapper.toViewElement(o);const d=i.writer;if(a=="reading"){tT(c,d);nT(l,c,d);return}if(a=="uploading"){const e=s.loaders.get(r);tT(c,d);if(!e){nT(l,c,d)}else{oT(c,d);rT(c,d,e,n.editing.view);hT(c,d,e)}return}if(a=="complete"&&s.loaders.get(r)){aT(c,d,n.editing.view)}sT(c,d);oT(c,d);iT(c,d)}}function tT(e,t){if(!e.hasClass("ck-appear")){t.addClass("ck-appear",e)}}function iT(e,t){t.removeClass("ck-appear",e)}function nT(e,t,i){if(!t.hasClass("ck-image-upload-placeholder")){i.addClass("ck-image-upload-placeholder",t)}const n=zx(t);if(n.getAttribute("src")!==e){i.setAttribute("src",e,n)}if(!dT(t,"placeholder")){i.insert(i.createPositionAfter(n),cT(i))}}function oT(e,t){if(e.hasClass("ck-image-upload-placeholder")){t.removeClass("ck-image-upload-placeholder",e)}uT(e,t,"placeholder")}function rT(e,t,i,n){const o=lT(t);t.insert(t.createPositionAt(e,"end"),o);i.on("change:uploadedPercent",(e,t,i)=>{n.change(e=>{e.setStyle("width",i+"%",o)})})}function sT(e,t){uT(e,t,"progressBar")}function aT(e,t,i){const n=t.createUIElement("div",{class:"ck-image-upload-complete-icon"});t.insert(t.createPositionAt(e,"end"),n);setTimeout(()=>{i.change(e=>e.remove(e.createRangeOn(n)))},3e3)}function lT(e){const t=e.createUIElement("div",{class:"ck-progress-bar"});e.setCustomProperty("progressBar",true,t);return t}function cT(e){const t=e.createUIElement("div",{class:"ck-upload-placeholder-loader"});e.setCustomProperty("placeholder",true,t);return t}function dT(e,t){for(const i of e.getChildren()){if(i.getCustomProperty(t)){return i}}}function uT(e,t,i){const n=dT(e,i);if(n){t.remove(t.createRangeOn(n))}}function hT(e,t,i){if(i.data){const n=zx(e);t.setAttribute("src",i.data,n)}}class fT extends i_{static get pluginName(){return"Notification"}init(){this.on("show:warning",(e,t)=>{window.alert(t.message)},{priority:"lowest"})}showSuccess(e,t={}){this._showNotification({message:e,type:"success",namespace:t.namespace,title:t.title})}showInfo(e,t={}){this._showNotification({message:e,type:"info",namespace:t.namespace,title:t.title})}showWarning(e,t={}){this._showNotification({message:e,type:"warning",namespace:t.namespace,title:t.title})}_showNotification(e){const t=`show:${e.type}`+(e.namespace?`:${e.namespace}`:"");this.fire(t,{message:e.message,type:e.type,title:e.title||""})}}class mT{constructor(e){this.document=e}createDocumentFragment(e){return new Uc(this.document,e)}createElement(e,t,i){return new jl(this.document,e,t,i)}createText(e){return new Vs(this.document,e)}clone(e,t=false){return e._clone(t)}appendChild(e,t){return t._appendChild(e)}insertChild(e,t,i){return i._insertChild(e,t)}removeChildren(e,t,i){return i._removeChildren(e,t)}remove(e){const t=e.parent;if(t){return this.removeChildren(t.getChildIndex(e),1,t)}return[]}replace(e,t){const i=e.parent;if(i){const n=i.getChildIndex(e);this.removeChildren(n,1,i);this.insertChild(n,t,i);return true}return false}unwrapElement(e){const t=e.parent;if(t){const i=t.getChildIndex(e);this.remove(e);this.insertChild(i,e.getChildren(),t)}}rename(e,t){const i=new jl(this.document,e,t.getAttributes(),t.getChildren());return this.replace(t,i)?i:null}setAttribute(e,t,i){i._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,i){if(O(e)&&i===undefined){i=t}i._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,i){i._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}createPositionAt(e,t){return uc._createAt(e,t)}createPositionAfter(e){return uc._createAfter(e)}createPositionBefore(e){return uc._createBefore(e)}createRange(e,t){return new hc(e,t)}createRangeOn(e){return hc._createOn(e)}createRangeIn(e){return hc._createIn(e)}createSelection(e,t,i){return new gc(e,t,i)}}class gT extends Dw{refresh(){this.isEnabled=Rx(this.editor.model)}execute(e){const t=this.editor;const i=t.model;const n=t.plugins.get(r_);i.change(t=>{const o=Array.isArray(e.file)?e.file:[e.file];for(const e of o){pT(t,i,n,e)}})}}function pT(e,t,i,n){const o=i.createLoader(n);if(!o){return}Ox(e,t,{uploadId:o.id})}class bT extends Rw{static get requires(){return[r_,fT,vk]}static get pluginName(){return"ImageUploadEditing"}constructor(e){super(e);e.config.define("image",{upload:{types:["jpeg","png","gif","bmp","webp","tiff"]}})}init(){const e=this.editor;const t=e.model.document;const i=e.model.schema;const n=e.conversion;const o=e.plugins.get(r_);const r=qC(e.config.get("image.upload.types"));i.extend("image",{allowAttributes:["uploadId","uploadStatus"]});e.commands.add("imageUpload",new gT(e));n.for("upcast").attributeToAttribute({view:{name:"img",key:"uploadId"},model:"uploadId"});this.listenTo(e.editing.view.document,"clipboardInput",(t,i)=>{if(wT(i.dataTransfer)){return}const n=Array.from(i.dataTransfer.files).filter(e=>{if(!e){return false}return r.test(e.type)});const o=i.targetRanges.map(t=>e.editing.mapper.toModelRange(t));e.model.change(i=>{i.setSelection(o);if(n.length){t.stop();e.model.enqueueChange("default",()=>{e.execute("imageUpload",{file:n})})}})});this.listenTo(e.plugins.get(vk),"inputTransformation",(t,i)=>{const n=Array.from(e.editing.view.createRangeIn(i.content)).filter(e=>GC(e.item)&&!e.item.getAttribute("uploadProcessed")).map(e=>({promise:$C(e.item),imageElement:e.item}));if(!n.length){return}const r=new mT(e.editing.view.document);for(const e of n){r.setAttribute("uploadProcessed",true,e.imageElement);const t=o.createLoader(e.promise);if(t){r.setAttribute("src","",e.imageElement);r.setAttribute("uploadId",t.id,e.imageElement)}}});e.editing.view.document.on("dragover",(e,t)=>{t.preventDefault()});t.on("change",()=>{const i=t.differ.getChanges({includeChangesInGraveyard:true});for(const t of i){if(t.type=="insert"&&t.name!="$text"){const i=t.position.nodeAfter;const n=t.position.root.rootName=="$graveyard";for(const t of _T(e,i)){const e=t.getAttribute("uploadId");if(!e){continue}const i=o.loaders.get(e);if(!i){continue}if(n){i.abort()}else if(i.status=="idle"){this._readAndUpload(i,t)}}}}})}_readAndUpload(e,t){const i=this.editor;const n=i.model;const o=i.locale.t;const r=i.plugins.get(r_);const s=i.plugins.get(fT);n.enqueueChange("transparent",e=>{e.setAttribute("uploadStatus","reading",t)});return e.read().then(()=>{const o=e.upload();if(Tc.isSafari){const e=i.editing.mapper.toViewElement(t);const n=zx(e);i.editing.view.once("render",()=>{if(!n.parent){return}const e=i.editing.view.domConverter.mapViewToDom(n.parent);if(!e){return}const t=e.style.display;e.style.display="none";e._ckHack=e.offsetHeight;e.style.display=t})}n.enqueueChange("transparent",e=>{e.setAttribute("uploadStatus","uploading",t)});return o}).then(e=>{n.enqueueChange("transparent",i=>{i.setAttributes({uploadStatus:"complete",src:e.default},t);this._parseAndSetSrcsetAttributeOnImage(e,t,i)});a()}).catch(i=>{if(e.status!=="error"&&e.status!=="aborted"){throw i}if(e.status=="error"&&i){s.showWarning(i,{title:o("Upload failed"),namespace:"upload"})}a();n.enqueueChange("transparent",e=>{e.remove(t)})});function a(){n.enqueueChange("transparent",e=>{e.removeAttribute("uploadId",t);e.removeAttribute("uploadStatus",t)});r.destroyLoader(e)}}_parseAndSetSrcsetAttributeOnImage(e,t,i){let n=0;const o=Object.keys(e).filter(e=>{const t=parseInt(e,10);if(!isNaN(t)){n=Math.max(n,t);return true}}).map(t=>`${e[t]} ${t}w`).join(", ");if(o!=""){i.setAttribute("srcset",{data:o,width:n},t)}}}function wT(e){return Array.from(e.types).includes("text/html")&&e.getData("text/html")!==""}function _T(e,t){return Array.from(e.model.createRangeOn(t)).filter(e=>e.item.is("image")).map(e=>e.item)}class kT extends Rw{static get pluginName(){return"ImageUpload"}static get requires(){return[bT,KC,eT]}}class vT extends Dw{constructor(e){super(e);this._childCommands=[]}refresh(){}execute(...e){const t=this._getFirstEnabledCommand();t.execute(e)}registerChildCommand(e){this._childCommands.push(e);e.on("change:isEnabled",()=>this._checkEnabled());this._checkEnabled()}_checkEnabled(){this.isEnabled=!!this._getFirstEnabledCommand()}_getFirstEnabledCommand(){return this._childCommands.find(e=>e.isEnabled)}}class yT extends Rw{static get pluginName(){return"IndentEditing"}init(){const e=this.editor;e.commands.add("indent",new vT(e));e.commands.add("outdent",new vT(e))}}var xT='';var AT='';class CT extends Rw{static get pluginName(){return"IndentUI"}init(){const e=this.editor;const t=e.locale;const i=e.t;const n=t.uiLanguageDirection=="ltr"?xT:AT;const o=t.uiLanguageDirection=="ltr"?AT:xT;this._defineButton("indent",i("Increase indent"),n);this._defineButton("outdent",i("Decrease indent"),o)}_defineButton(e,t,i){const n=this.editor;n.ui.componentFactory.add(e,o=>{const r=n.commands.get(e);const s=new rw(o);s.set({label:t,icon:i,tooltip:true});s.bind("isOn","isEnabled").to(r,"value","isEnabled");this.listenTo(s,"execute",()=>{n.execute(e);n.editing.view.focus()});return s})}}class TT extends Rw{static get pluginName(){return"Indent"}static get requires(){return[yT,CT]}}class ET extends Dw{constructor(e,t){super(e);this._indentBehavior=t}refresh(){const e=this.editor;const t=e.model;const i=Bw(t.document.selection.getSelectedBlocks());if(!i||!t.schema.checkAttribute(i,"blockIndent")){this.isEnabled=false;return}this.isEnabled=this._indentBehavior.checkEnabled(i.getAttribute("blockIndent"))}execute(){const e=this.editor.model;const t=PT(e);e.change(e=>{for(const i of t){const t=i.getAttribute("blockIndent");const n=this._indentBehavior.getNextIndent(t);if(n){e.setAttribute("blockIndent",n,i)}else{e.removeAttribute("blockIndent",i)}}})}}function PT(e){const t=e.document.selection;const i=e.schema;const n=Array.from(t.getSelectedBlocks());return n.filter(e=>i.checkAttribute(e,"blockIndent"))}class MT{constructor(e){this.isForward=e.direction==="forward";this.offset=e.offset;this.unit=e.unit}checkEnabled(e){const t=parseFloat(e||0);return this.isForward||t>0}getNextIndent(e){const t=parseFloat(e||0);const i=!e||e.endsWith(this.unit);if(!i){return this.isForward?this.offset+this.unit:undefined}const n=this.isForward?this.offset:-this.offset;const o=t+n;return o>0?o+this.unit:undefined}}class ST{constructor(e){this.isForward=e.direction==="forward";this.classes=e.classes}checkEnabled(e){const t=this.classes.indexOf(e);if(this.isForward){return t=0}}getNextIndent(e){const t=this.classes.indexOf(e);const i=this.isForward?1:-1;return this.classes[t+i]}}const IT=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;const LT=/^rgb\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}[0-9]{1,3}[ %]?\)$/i;const NT=/^rgba\([ ]?([0-9]{1,3}[ %]?,[ ]?){3}(1|[0-9]+%|[0]?\.?[0-9]+)\)$/i;const OT=/^hsl\([ ]?([0-9]{1,3}[ %]?[,]?[ ]*){3}(1|[0-9]+%|[0]?\.?[0-9]+)?\)$/i;const RT=/^hsla\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}(1|[0-9]+%|[0]?\.?[0-9]+)\)$/i;const zT=new Set(["black","silver","gray","white","maroon","red","purple","fuchsia","green","lime","olive","yellow","navy","blue","teal","aqua","orange","aliceblue","antiquewhite","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","gainsboro","ghostwhite","gold","goldenrod","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","limegreen","linen","magenta","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","oldlace","olivedrab","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","rebeccapurple","currentcolor","transparent"]);function DT(e){if(e.startsWith("#")){return IT.test(e)}if(e.startsWith("rgb")){return LT.test(e)||NT.test(e)}if(e.startsWith("hsl")){return OT.test(e)||RT.test(e)}return zT.has(e.toLowerCase())}const jT=["none","hidden","dotted","dashed","solid","double","groove","ridge","inset","outset"];function BT(e){return jT.includes(e)}const VT=/^([+-]?[0-9]*[.]?[0-9]+(px|cm|mm|in|pc|pt|ch|em|ex|rem|vh|vw|vmin|vmax)|0)$/;function FT(e){return VT.test(e)}const HT=/^[+-]?[0-9]*[.]?[0-9]+%$/;function WT(e){return HT.test(e)}const UT=["repeat-x","repeat-y","repeat","space","round","no-repeat"];function qT(e){return UT.includes(e)}const $T=["center","top","bottom","left","right"];function GT(e){return $T.includes(e)}const YT=["fixed","scroll","local"];function KT(e){return YT.includes(e)}const JT=/^url\(/;function QT(e){return JT.test(e)}function ZT(e=""){if(e===""){return{top:undefined,right:undefined,bottom:undefined,left:undefined}}const t=iE(e);const i=t[0];const n=t[2]||i;const o=t[1]||i;const r=t[3]||o;return{top:i,bottom:n,right:o,left:r}}function XT(e){return t=>{const{top:i,right:n,bottom:o,left:r}=t;const s=[];if(![i,n,r,o].every(e=>!!e)){if(i){s.push([e+"-top",i])}if(n){s.push([e+"-right",n])}if(o){s.push([e+"-bottom",o])}if(r){s.push([e+"-left",r])}}else{s.push([e,eE(t)])}return s}}function eE({top:e,right:t,bottom:i,left:n}){const o=[];if(n!==t){o.push(e,t,i,n)}else if(i!==e){o.push(e,t,i)}else if(t!==e){o.push(e,t)}else{o.push(e)}return o.join(" ")}function tE(e){return t=>({path:e,value:ZT(t)})}function iE(e){return e.replace(/, /g,",").split(" ").map(e=>e.replace(/,/g,", "))}function nE(e){e.setNormalizer("margin",tE("margin"));e.setNormalizer("margin-top",e=>({path:"margin.top",value:e}));e.setNormalizer("margin-right",e=>({path:"margin.right",value:e}));e.setNormalizer("margin-bottom",e=>({path:"margin.bottom",value:e}));e.setNormalizer("margin-left",e=>({path:"margin.left",value:e}));e.setReducer("margin",XT("margin"));e.setStyleRelation("margin",["margin-top","margin-right","margin-bottom","margin-left"])}class oE extends Rw{constructor(e){super(e);e.config.define("indentBlock",{offset:40,unit:"px"})}static get pluginName(){return"IndentBlock"}init(){const e=this.editor;const t=e.config.get("indentBlock");const i=!t.classes||!t.classes.length;const n=Object.assign({direction:"forward"},t);const o=Object.assign({direction:"backward"},t);if(i){e.data.addStyleProcessorRules(nE);this._setupConversionUsingOffset(e.conversion);e.commands.add("indentBlock",new ET(e,new MT(n)));e.commands.add("outdentBlock",new ET(e,new MT(o)))}else{this._setupConversionUsingClasses(t.classes);e.commands.add("indentBlock",new ET(e,new ST(n)));e.commands.add("outdentBlock",new ET(e,new ST(o)))}}afterInit(){const e=this.editor;const t=e.model.schema;const i=e.commands.get("indent");const n=e.commands.get("outdent");const o=["paragraph","heading1","heading2","heading3","heading4","heading5","heading6"];o.forEach(e=>{if(t.isRegistered(e)){t.extend(e,{allowAttributes:"blockIndent"})}});i.registerChildCommand(e.commands.get("indentBlock"));n.registerChildCommand(e.commands.get("outdentBlock"))}_setupConversionUsingOffset(){const e=this.editor.conversion;const t=this.editor.locale;const i=t.contentLanguageDirection==="rtl"?"margin-right":"margin-left";e.for("upcast").attributeToAttribute({view:{styles:{[i]:/[\s\S]+/}},model:{key:"blockIndent",value:e=>e.getStyle(i)}});e.for("downcast").attributeToAttribute({model:"blockIndent",view:e=>({key:"style",value:{[i]:e}})})}_setupConversionUsingClasses(e){const t={model:{key:"blockIndent",values:[]},view:{}};for(const i of e){t.model.values.push(i);t.view[i]={key:"class",value:[i]}}this.editor.conversion.attributeToAttribute(t)}}const rE="italic";class sE extends Rw{static get pluginName(){return"ItalicEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:rE});e.model.schema.setAttributeProperties(rE,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:rE,view:"i",upcastAlso:["em",{styles:{"font-style":"italic"}}]});e.commands.add(rE,new w_(e,rE));e.keystrokes.set("CTRL+I",rE)}}var aE='';const lE="italic";class cE extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(lE,i=>{const n=e.commands.get(lE);const o=new rw(i);o.set({label:t("Italic"),icon:aE,keystroke:"CTRL+I",tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(lE);e.editing.view.focus()});return o})}}class dE extends Rw{static get requires(){return[sE,cE]}static get pluginName(){return"Italic"}}function uE(e,t,i){return i.createRange(hE(e,t,true,i),hE(e,t,false,i))}function hE(e,t,i,n){let o=e.textNode||(i?e.nodeBefore:e.nodeAfter);let r=null;while(o&&o.getAttribute("linkHref")==t){r=o;o=i?o.previousSibling:o.nextSibling}return r?n.createPositionAt(r,i?"before":"after"):e}class fE extends Dw{constructor(e){super(e);this.manualDecorators=new xs}restoreManualDecoratorStates(){for(const e of this.manualDecorators){e.value=this._getDecoratorStateFromModel(e.id)}}refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute("linkHref");for(const e of this.manualDecorators){e.value=this._getDecoratorStateFromModel(e.id)}this.isEnabled=e.schema.checkAttributeInSelection(t.selection,"linkHref")}execute(e,t={}){const i=this.editor.model;const n=i.document.selection;const o=[];const r=[];for(const e in t){if(t[e]){o.push(e)}else{r.push(e)}}i.change(t=>{if(n.isCollapsed){const s=n.getFirstPosition();if(n.hasAttribute("linkHref")){const a=uE(s,n.getAttribute("linkHref"),i);t.setAttribute("linkHref",e,a);o.forEach(e=>{t.setAttribute(e,true,a)});r.forEach(e=>{t.removeAttribute(e,a)});t.setSelection(a)}else if(e!==""){const r=Ws(n.getAttributes());r.set("linkHref",e);o.forEach(e=>{r.set(e,true)});const a=t.createText(e,r);i.insertContent(a,s);t.setSelection(t.createRangeOn(a))}}else{const s=i.schema.getValidRanges(n.getRanges(),"linkHref");for(const i of s){t.setAttribute("linkHref",e,i);o.forEach(e=>{t.setAttribute(e,true,i)});r.forEach(e=>{t.removeAttribute(e,i)})}}})}_getDecoratorStateFromModel(e){const t=this.editor.model.document;return t.selection.getAttribute(e)}}class mE extends Dw{refresh(){this.isEnabled=this.editor.model.document.selection.hasAttribute("linkHref")}execute(){const e=this.editor;const t=this.editor.model;const i=t.document.selection;const n=e.commands.get("link");t.change(e=>{const o=i.isCollapsed?[uE(i.getFirstPosition(),i.getAttribute("linkHref"),t)]:i.getRanges();for(const t of o){e.removeAttribute("linkHref",t);if(n){for(const i of n.manualDecorators){e.removeAttribute(i.id,t)}}}})}}function gE(e,t,i){var n=e.length;i=i===undefined?n:i;return!t&&i>=n?e:La(e,t,i)}var pE=gE;var bE="\\ud800-\\udfff",wE="\\u0300-\\u036f",_E="\\ufe20-\\ufe2f",kE="\\u20d0-\\u20ff",vE=wE+_E+kE,yE="\\ufe0e\\ufe0f";var xE="\\u200d";var AE=RegExp("["+xE+bE+vE+yE+"]");function CE(e){return AE.test(e)}var TE=CE;function EE(e){return e.split("")}var PE=EE;var ME="\\ud800-\\udfff",SE="\\u0300-\\u036f",IE="\\ufe20-\\ufe2f",LE="\\u20d0-\\u20ff",NE=SE+IE+LE,OE="\\ufe0e\\ufe0f";var RE="["+ME+"]",zE="["+NE+"]",DE="\\ud83c[\\udffb-\\udfff]",jE="(?:"+zE+"|"+DE+")",BE="[^"+ME+"]",VE="(?:\\ud83c[\\udde6-\\uddff]){2}",FE="[\\ud800-\\udbff][\\udc00-\\udfff]",HE="\\u200d";var WE=jE+"?",UE="["+OE+"]?",qE="(?:"+HE+"(?:"+[BE,VE,FE].join("|")+")"+UE+WE+")*",$E=UE+WE+qE,GE="(?:"+[BE+zE+"?",zE,VE,FE,RE].join("|")+")";var YE=RegExp(DE+"(?="+DE+")|"+GE+$E,"g");function KE(e){return e.match(YE)||[]}var JE=KE;function QE(e){return TE(e)?JE(e):PE(e)}var ZE=QE;function XE(e){return function(t){t=va(t);var i=TE(t)?ZE(t):undefined;var n=i?i[0]:t.charAt(0);var o=i?pE(i,1).join(""):t.slice(1);return n[e]()+o}}var eP=XE;var tP=eP("toUpperCase");var iP=tP;const nP=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g;const oP=/^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i;function rP(e){return e.is("attributeElement")&&!!e.getCustomProperty("link")}function sP(e,t){const i=t.createAttributeElement("a",{href:e},{priority:5});t.setCustomProperty("link",true,i);return i}function aP(e){e=String(e);return lP(e)?e:"#"}function lP(e){const t=e.replace(nP,"");return t.match(oP)}function cP(e,t){const i={"Open in a new tab":e("Open in a new tab"),Downloadable:e("Downloadable")};t.forEach(e=>{if(e.label&&i[e.label]){e.label=i[e.label]}return e});return t}function dP(e){const t=[];if(e){for(const[i,n]of Object.entries(e)){const e=Object.assign({},n,{id:`link${iP(i)}`});t.push(e)}}return t}class uP{constructor(){this._definitions=new Set}get length(){return this._definitions.size}add(e){if(Array.isArray(e)){e.forEach(e=>this._definitions.add(e))}else{this._definitions.add(e)}}getDispatcher(){return e=>{e.on("attribute:linkHref",(e,t,i)=>{if(!i.consumable.test(t.item,"attribute:linkHref")){return}const n=i.writer;const o=n.document.selection;for(const e of this._definitions){const r=n.createAttributeElement("a",e.attributes,{priority:5});n.setCustomProperty("link",true,r);if(e.callback(t.attributeNewValue)){if(t.item.is("selection")){n.wrap(o.getFirstRange(),r)}else{n.wrap(i.mapper.toViewRange(t.range),r)}}else{n.unwrap(i.mapper.toViewRange(t.range),r)}}},{priority:"high"})}}}class hP{constructor({id:e,label:t,attributes:i,defaultValue:n}){this.id=e;this.set("value");this.defaultValue=n;this.label=t;this.attributes=i}}ys(hP,Jl);function fP({view:e,model:t,emitter:i,attribute:n,locale:o}){const r=new mP(t,i,n);const s=t.document.selection;i.listenTo(e.document,"keydown",(e,t)=>{if(!s.isCollapsed){return}if(t.shiftKey||t.altKey||t.ctrlKey){return}const i=t.keyCode==Oc.arrowright;const n=t.keyCode==Oc.arrowleft;if(!i&&!n){return}const a=s.getFirstPosition();const l=o.contentLanguageDirection;let c;if(l==="ltr"&&i||l==="rtl"&&n){c=r.handleForwardMovement(a,t)}else{c=r.handleBackwardMovement(a,t)}if(c){e.stop()}},{priority:os.get("high")+1})}class mP{constructor(e,t,i){this.model=e;this.attribute=i;this._modelSelection=e.document.selection;this._overrideUid=null;this._isNextGravityRestorationSkipped=false;t.listenTo(this._modelSelection,"change:range",(e,t)=>{if(this._isNextGravityRestorationSkipped){this._isNextGravityRestorationSkipped=false;return}if(!this._isGravityOverridden){return}if(!t.directChange&&gP(this._modelSelection.getFirstPosition(),i)){return}this._restoreGravity()})}handleForwardMovement(e,t){const i=this.attribute;if(this._isGravityOverridden){return}if(e.isAtStart&&this._hasSelectionAttribute){return}if(wP(e,i)&&this._hasSelectionAttribute){this._preventCaretMovement(t);this._removeSelectionAttribute();return true}if(pP(e,i)){this._preventCaretMovement(t);this._overrideGravity();return true}if(bP(e,i)&&this._hasSelectionAttribute){this._preventCaretMovement(t);this._overrideGravity();return true}}handleBackwardMovement(e,t){const i=this.attribute;if(this._isGravityOverridden){if(wP(e,i)&&this._hasSelectionAttribute){this._preventCaretMovement(t);this._restoreGravity();this._removeSelectionAttribute();return true}else{this._preventCaretMovement(t);this._restoreGravity();if(e.isAtStart){this._removeSelectionAttribute()}return true}}else{if(wP(e,i)&&!this._hasSelectionAttribute){this._preventCaretMovement(t);this._setSelectionAttributeFromTheNodeBefore(e);return true}if(e.isAtEnd&&bP(e,i)){if(this._hasSelectionAttribute){if(_P(e,i)){this._skipNextAutomaticGravityRestoration();this._overrideGravity()}return}else{this._preventCaretMovement(t);this._setSelectionAttributeFromTheNodeBefore(e);return true}}if(e.isAtStart){if(this._hasSelectionAttribute){this._removeSelectionAttribute();this._preventCaretMovement(t);return true}return}if(_P(e,i)){this._skipNextAutomaticGravityRestoration();this._overrideGravity()}}}get _isGravityOverridden(){return!!this._overrideUid}get _hasSelectionAttribute(){return this._modelSelection.hasAttribute(this.attribute)}_overrideGravity(){this._overrideUid=this.model.change(e=>e.overrideSelectionGravity())}_restoreGravity(){this.model.change(e=>{e.restoreSelectionGravity(this._overrideUid);this._overrideUid=null})}_preventCaretMovement(e){e.preventDefault()}_removeSelectionAttribute(){this.model.change(e=>{e.removeSelectionAttribute(this.attribute)})}_setSelectionAttributeFromTheNodeBefore(e){const t=this.attribute;this.model.change(i=>{i.setSelectionAttribute(this.attribute,e.nodeBefore.getAttribute(t))})}_skipNextAutomaticGravityRestoration(){this._isNextGravityRestorationSkipped=true}}function gP(e,t){return pP(e,t)||bP(e,t)}function pP(e,t){const{nodeBefore:i,nodeAfter:n}=e;const o=i?i.hasAttribute(t):false;const r=n?n.hasAttribute(t):false;return r&&(!o||i.getAttribute(t)!==n.getAttribute(t))}function bP(e,t){const{nodeBefore:i,nodeAfter:n}=e;const o=i?i.hasAttribute(t):false;const r=n?n.hasAttribute(t):false;return o&&(!r||i.getAttribute(t)!==n.getAttribute(t))}function wP(e,t){const{nodeBefore:i,nodeAfter:n}=e;const o=i?i.hasAttribute(t):false;const r=n?n.hasAttribute(t):false;if(!r||!o){return}return n.getAttribute(t)!==i.getAttribute(t)}function _P(e,t){return gP(e.getShiftedBy(-1),t)}var kP=i(97);const vP="ck-link_selected";const yP="automatic";const xP="manual";const AP=/^(https?:)?\/\//;class CP extends Rw{static get pluginName(){return"LinkEditing"}constructor(e){super(e);e.config.define("link",{addTargetToExternalLinks:false})}init(){const e=this.editor;const t=e.locale;e.model.schema.extend("$text",{allowAttributes:"linkHref"});e.conversion.for("dataDowncast").attributeToElement({model:"linkHref",view:sP});e.conversion.for("editingDowncast").attributeToElement({model:"linkHref",view:(e,t)=>sP(aP(e),t)});e.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{href:true}},model:{key:"linkHref",value:e=>e.getAttribute("href")}});e.commands.add("link",new fE(e));e.commands.add("unlink",new mE(e));const i=cP(e.t,dP(e.config.get("link.decorators")));this._enableAutomaticDecorators(i.filter(e=>e.mode===yP));this._enableManualDecorators(i.filter(e=>e.mode===xP));fP({view:e.editing.view,model:e.model,emitter:this,attribute:"linkHref",locale:t});this._setupLinkHighlight();this._enableInsertContentSelectionAttributesFixer()}_enableAutomaticDecorators(e){const t=this.editor;const i=new uP;if(t.config.get("link.addTargetToExternalLinks")){i.add({id:"linkIsExternal",mode:yP,callback:e=>AP.test(e),attributes:{target:"_blank",rel:"noopener noreferrer"}})}i.add(e);if(i.length){t.conversion.for("downcast").add(i.getDispatcher())}}_enableManualDecorators(e){if(!e.length){return}const t=this.editor;const i=t.commands.get("link");const n=i.manualDecorators;e.forEach(e=>{t.model.schema.extend("$text",{allowAttributes:e.id});n.add(new hP(e));t.conversion.for("downcast").attributeToElement({model:e.id,view:(t,i)=>{if(t){const t=n.get(e.id).attributes;const o=i.createAttributeElement("a",t,{priority:5});i.setCustomProperty("link",true,o);return o}}});t.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:n.get(e.id).attributes},model:{key:e.id}})})}_setupLinkHighlight(){const e=this.editor;const t=e.editing.view;const i=new Set;t.document.registerPostFixer(t=>{const n=e.model.document.selection;let o=false;if(n.hasAttribute("linkHref")){const r=uE(n.getFirstPosition(),n.getAttribute("linkHref"),e.model);const s=e.editing.mapper.toViewRange(r);for(const e of s.getItems()){if(e.is("a")&&!e.hasClass(vP)){t.addClass(vP,e);i.add(e);o=true}}}return o});e.conversion.for("editingDowncast").add(e=>{e.on("insert",n,{priority:"highest"});e.on("remove",n,{priority:"highest"});e.on("attribute",n,{priority:"highest"});e.on("selection",n,{priority:"highest"});function n(){t.change(e=>{for(const t of i.values()){e.removeClass(vP,t);i.delete(t)}})}})}_enableInsertContentSelectionAttributesFixer(){const e=this.editor;const t=e.model;const i=t.document.selection;t.on("insertContent",()=>{const e=i.anchor.nodeBefore;const n=i.anchor.nodeAfter;if(!i.hasAttribute("linkHref")){return}if(!e){return}if(!e.hasAttribute("linkHref")){return}if(n&&n.hasAttribute("linkHref")){return}t.change(e=>{[...t.document.selection.getAttributeKeys()].filter(e=>e.startsWith("link")).forEach(t=>e.removeSelectionAttribute(t))})},{priority:"low"})}}class TP extends Ku{constructor(e){super(e);this.domEventType="click"}onDomEvent(e){this.fire(e.type,e)}}var EP=i(99);class PP extends _b{constructor(e,t){super(e);const i=e.t;this.focusTracker=new Ep;this.keystrokes=new mp;this.urlInputView=this._createUrlInput();this.saveButtonView=this._createButton(i("Save"),CA,"ck-button-save");this.saveButtonView.type="submit";this.cancelButtonView=this._createButton(i("Cancel"),TA,"ck-button-cancel","cancel");this._manualDecoratorSwitches=this._createManualDecoratorSwitches(t);this.children=this._createFormChildren(t.manualDecorators);this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});const n=["ck","ck-link-form"];if(t.manualDecorators.length){n.push("ck-link-form_layout-vertical")}this.setTemplate({tag:"form",attributes:{class:n,tabindex:"-1"},children:this.children})}getDecoratorSwitchesState(){return Array.from(this._manualDecoratorSwitches).reduce((e,t)=>{e[t.name]=t.isOn;return e},{})}render(){super.render();AA({view:this});const e=[this.urlInputView,...this._manualDecoratorSwitches,this.saveButtonView,this.cancelButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createUrlInput(){const e=this.locale.t;const t=new _A(this.locale,yA);t.label=e("Link URL");t.fieldView.placeholder="https://example.com";return t}_createButton(e,t,i,n){const o=new rw(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:i}});if(n){o.delegate("execute").to(this,n)}return o}_createManualDecoratorSwitches(e){const t=this.createCollection();for(const i of e.manualDecorators){const n=new fw(this.locale);n.set({name:i.id,label:i.label,withText:true});n.bind("isOn").toMany([i,e],"value",(e,t)=>t===undefined&&e===undefined?i.defaultValue:e);n.on("execute",()=>{i.set("value",!n.isOn)});t.add(n)}return t}_createFormChildren(e){const t=this.createCollection();t.add(this.urlInputView);if(e.length){const e=new _b;e.setTemplate({tag:"ul",children:this._manualDecoratorSwitches.map(e=>({tag:"li",children:[e],attributes:{class:["ck","ck-list__item"]}})),attributes:{class:["ck","ck-reset","ck-list"]}});t.add(e)}t.add(this.saveButtonView);t.add(this.cancelButtonView);return t}}var MP='';var SP='';var IP=i(101);class LP extends _b{constructor(e){super(e);const t=e.t;this.focusTracker=new Ep;this.keystrokes=new mp;this.previewButtonView=this._createPreviewButton();this.unlinkButtonView=this._createButton(t("Unlink"),MP,"unlink");this.editButtonView=this._createButton(t("Edit link"),SP,"edit");this.set("href");this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this.setTemplate({tag:"div",attributes:{class:["ck","ck-link-actions"],tabindex:"-1"},children:[this.previewButtonView,this.editButtonView,this.unlinkButtonView]})}render(){super.render();const e=[this.previewButtonView,this.editButtonView,this.unlinkButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createButton(e,t,i){const n=new rw(this.locale);n.set({label:e,icon:t,tooltip:true});n.delegate("execute").to(this,i);return n}_createPreviewButton(){const e=new rw(this.locale);const t=this.bindTemplate;const i=this.t;e.set({withText:true,tooltip:i("Open link in new tab")});e.extendTemplate({attributes:{class:["ck","ck-link-actions__preview"],href:t.to("href",e=>e&&aP(e)),target:"_blank",rel:"noopener noreferrer"}});e.bind("label").to(this,"href",e=>e||i("This link has no URL"));e.bind("isEnabled").to(this,"href",e=>!!e);e.template.tag="a";e.template.eventListeners={};return e}}var NP='';const OP="Ctrl+K";class RP extends Rw{static get requires(){return[OA]}static get pluginName(){return"LinkUI"}init(){const e=this.editor;e.editing.view.addObserver(TP);this.actionsView=this._createActionsView();this.formView=this._createFormView();this._balloon=e.plugins.get(OA);this._createToolbarLinkButton();this._enableUserBalloonInteractions()}destroy(){super.destroy();this.formView.destroy()}_createActionsView(){const e=this.editor;const t=new LP(e.locale);const i=e.commands.get("link");const n=e.commands.get("unlink");t.bind("href").to(i,"value");t.editButtonView.bind("isEnabled").to(i);t.unlinkButtonView.bind("isEnabled").to(n);this.listenTo(t,"edit",()=>{this._addFormView()});this.listenTo(t,"unlink",()=>{e.execute("unlink");this._hideUI()});t.keystrokes.set("Esc",(e,t)=>{this._hideUI();t()});t.keystrokes.set(OP,(e,t)=>{this._addFormView();t()});return t}_createFormView(){const e=this.editor;const t=e.commands.get("link");const i=new PP(e.locale,t);i.urlInputView.fieldView.bind("value").to(t,"value");i.urlInputView.bind("isReadOnly").to(t,"isEnabled",e=>!e);i.saveButtonView.bind("isEnabled").to(t);this.listenTo(i,"submit",()=>{e.execute("link",i.urlInputView.fieldView.element.value,i.getDecoratorSwitchesState());this._closeFormView()});this.listenTo(i,"cancel",()=>{this._closeFormView()});i.keystrokes.set("Esc",(e,t)=>{this._closeFormView();t()});return i}_createToolbarLinkButton(){const e=this.editor;const t=e.commands.get("link");const i=e.t;e.keystrokes.set(OP,(e,t)=>{t();this._showUI(true)});e.ui.componentFactory.add("link",e=>{const n=new rw(e);n.isEnabled=true;n.label=i("Link");n.icon=NP;n.keystroke=OP;n.tooltip=true;n.isToggleable=true;n.bind("isEnabled").to(t,"isEnabled");n.bind("isOn").to(t,"value",e=>!!e);this.listenTo(n,"execute",()=>this._showUI(true));return n})}_enableUserBalloonInteractions(){const e=this.editor.editing.view.document;this.listenTo(e,"click",()=>{const e=this._getSelectedLinkElement();if(e){this._showUI()}});this.editor.keystrokes.set("Tab",(e,t)=>{if(this._areActionsVisible&&!this.actionsView.focusTracker.isFocused){this.actionsView.focus();t()}},{priority:"high"});this.editor.keystrokes.set("Esc",(e,t)=>{if(this._isUIVisible){this._hideUI();t()}});mw({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:[this._balloon.view.element],callback:()=>this._hideUI()})}_addActionsView(){if(this._areActionsInPanel){return}this._balloon.add({view:this.actionsView,position:this._getBalloonPositionData()})}_addFormView(){if(this._isFormInPanel){return}const e=this.editor;const t=e.commands.get("link");this._balloon.add({view:this.formView,position:this._getBalloonPositionData()});if(this._balloon.visibleView===this.formView){this.formView.urlInputView.fieldView.select()}this.formView.urlInputView.fieldView.element.value=t.value||""}_closeFormView(){const e=this.editor.commands.get("link");e.restoreManualDecoratorStates();if(e.value!==undefined){this._removeFormView()}else{this._hideUI()}}_removeFormView(){if(this._isFormInPanel){this.formView.saveButtonView.focus();this._balloon.remove(this.formView);this.editor.editing.view.focus()}}_showUI(e=false){if(!this._getSelectedLinkElement()){this._addActionsView();if(e){this._balloon.showStack("main")}this._addFormView()}else{if(this._areActionsVisible){this._addFormView()}else{this._addActionsView()}if(e){this._balloon.showStack("main")}}this._startUpdatingUI()}_hideUI(){if(!this._isUIInPanel){return}const e=this.editor;this.stopListening(e.ui,"update");this.stopListening(this._balloon,"change:visibleView");e.editing.view.focus();this._removeFormView();this._balloon.remove(this.actionsView)}_startUpdatingUI(){const e=this.editor;const t=e.editing.view.document;let i=this._getSelectedLinkElement();let n=r();const o=()=>{const e=this._getSelectedLinkElement();const t=r();if(i&&!e||!i&&t!==n){this._hideUI()}else if(this._isUIVisible){this._balloon.updatePosition(this._getBalloonPositionData())}i=e;n=t};function r(){return t.selection.focus.getAncestors().reverse().find(e=>e.is("element"))}this.listenTo(e.ui,"update",o);this.listenTo(this._balloon,"change:visibleView",o)}get _isFormInPanel(){return this._balloon.hasView(this.formView)}get _areActionsInPanel(){return this._balloon.hasView(this.actionsView)}get _areActionsVisible(){return this._balloon.visibleView===this.actionsView}get _isUIInPanel(){return this._isFormInPanel||this._areActionsInPanel}get _isUIVisible(){const e=this._balloon.visibleView;return e==this.formView||this._areActionsVisible}_getBalloonPositionData(){const e=this.editor.editing.view;const t=e.document;const i=this._getSelectedLinkElement();const n=i?e.domConverter.mapViewToDom(i):e.domConverter.viewRangeToDom(t.selection.getFirstRange());return{target:n}}_getSelectedLinkElement(){const e=this.editor.editing.view;const t=e.document.selection;if(t.isCollapsed){return zP(t.getFirstPosition())}else{const i=t.getFirstRange().getTrimmed();const n=zP(i.start);const o=zP(i.end);if(!n||n!=o){return null}if(e.createRangeIn(n).getTrimmed().isEqual(i)){return n}else{return null}}}}function zP(e){return e.getAncestors().find(e=>rP(e))}class DP extends Rw{static get requires(){return[CP,RP]}static get pluginName(){return"Link"}}class jP extends Dw{constructor(e,t){super(e);this.type=t}refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(){const e=this.editor.model;const t=e.document;const i=Array.from(t.selection.getSelectedBlocks()).filter(t=>VP(t,e.schema));const n=this.value===true;e.change(e=>{if(n){let t=i[i.length-1].nextSibling;let n=Number.POSITIVE_INFINITY;let o=[];while(t&&t.name=="listItem"&&t.getAttribute("listIndent")!==0){const e=t.getAttribute("listIndent");if(e=i){if(r>o.getAttribute("listIndent")){r=o.getAttribute("listIndent")}if(o.getAttribute("listIndent")==r){e[t?"unshift":"push"](o)}o=o[t?"previousSibling":"nextSibling"]}}}function VP(e,t){return t.checkChild(e.parent,"listItem")&&!t.isObject(e)}class FP extends Dw{constructor(e,t){super(e);this._indentBy=t=="forward"?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor.model;const t=e.document;let i=Array.from(t.selection.getSelectedBlocks());e.change(e=>{const t=i[i.length-1];let n=t.nextSibling;while(n&&n.name=="listItem"&&n.getAttribute("listIndent")>t.getAttribute("listIndent")){i.push(n);n=n.nextSibling}if(this._indentBy<0){i=i.reverse()}for(const t of i){const i=t.getAttribute("listIndent")+this._indentBy;if(i<0){e.rename(t,"paragraph")}else{e.setAttribute("listIndent",i,t)}}})}_checkEnabled(){const e=Bw(this.editor.model.document.selection.getSelectedBlocks());if(!e||!e.is("listItem")){return false}if(this._indentBy>0){const t=e.getAttribute("listIndent");const i=e.getAttribute("listType");let n=e.previousSibling;while(n&&n.is("listItem")&&n.getAttribute("listIndent")>=t){if(n.getAttribute("listIndent")==t){return n.getAttribute("listType")==i}n=n.previousSibling}return false}return true}}function HP(e){const t=e.createContainerElement("li");t.getFillerOffset=KP;return t}function WP(e,t){const i=t.mapper;const n=t.writer;const o=e.getAttribute("listType")=="numbered"?"ol":"ul";const r=HP(n);const s=n.createContainerElement(o,null);n.insert(n.createPositionAt(s,0),r);i.bindElements(e,r);return r}function UP(e,t,i,n){const o=t.parent;const r=i.mapper;const s=i.writer;let a=r.toViewPosition(n.createPositionBefore(e));const l=GP(e.previousSibling,{sameIndent:true,smallerIndent:true,listIndent:e.getAttribute("listIndent")});const c=e.previousSibling;if(l&&l.getAttribute("listIndent")==e.getAttribute("listIndent")){const e=r.toViewElement(l);a=s.breakContainer(s.createPositionAfter(e))}else{if(c&&c.name=="listItem"){a=r.toViewPosition(n.createPositionAt(c,"end"))}else{a=r.toViewPosition(n.createPositionBefore(e))}}a=$P(a);s.insert(a,o);if(c&&c.name=="listItem"){const e=r.toViewElement(c);const i=s.createRange(s.createPositionAt(e,0),a);const n=i.getWalker({ignoreElementEnd:true});for(const e of n){if(e.item.is("li")){const i=s.breakContainer(s.createPositionBefore(e.item));const o=e.item.parent;const r=s.createPositionAt(t,"end");qP(s,r.nodeBefore,r.nodeAfter);s.move(s.createRangeOn(o),r);n.position=i}}}else{const i=o.nextSibling;if(i&&(i.is("ul")||i.is("ol"))){let n=null;for(const t of i.getChildren()){const i=r.toModelElement(t);if(i&&i.getAttribute("listIndent")>e.getAttribute("listIndent")){n=t}else{break}}if(n){s.breakContainer(s.createPositionAfter(n));s.move(s.createRangeOn(n.parent),s.createPositionAt(t,"end"))}}}qP(s,o,o.nextSibling);qP(s,o.previousSibling,o)}function qP(e,t,i){if(!t||!i||t.name!="ul"&&t.name!="ol"){return null}if(t.name!=i.name||t.getAttribute("class")!==i.getAttribute("class")){return null}return e.mergeContainers(e.createPositionAfter(t))}function $P(e){return e.getLastMatchingPosition(e=>e.item.is("uiElement"))}function GP(e,t){const i=!!t.sameIndent;const n=!!t.smallerIndent;const o=t.listIndent;let r=e;while(r&&r.name=="listItem"){const e=r.getAttribute("listIndent");if(i&&o==e||n&&o>e){return r}r=r.previousSibling}return null}function YP(e,t,i,n){e.ui.componentFactory.add(t,o=>{const r=e.commands.get(t);const s=new rw(o);s.set({label:i,icon:n,tooltip:true,isToggleable:true});s.bind("isOn","isEnabled").to(r,"value","isEnabled");s.on("execute",()=>{e.execute(t);e.editing.view.focus()});return s})}function KP(){const e=!this.isEmpty&&(this.getChild(0).name=="ul"||this.getChild(0).name=="ol");if(this.isEmpty||e){return 0}return Wl.call(this)}function JP(e){return(t,i,n)=>{const o=n.consumable;if(!o.test(i.item,"insert")||!o.test(i.item,"attribute:listType")||!o.test(i.item,"attribute:listIndent")){return}o.consume(i.item,"insert");o.consume(i.item,"attribute:listType");o.consume(i.item,"attribute:listIndent");const r=i.item;const s=WP(r,n);UP(r,s,n,e)}}function QP(e){return(t,i,n)=>{const o=n.mapper.toViewPosition(i.position).getLastMatchingPosition(e=>!e.item.is("li"));const r=o.nodeAfter;const s=n.writer;s.breakContainer(s.createPositionBefore(r));s.breakContainer(s.createPositionAfter(r));const a=r.parent;const l=a.previousSibling;const c=s.createRangeOn(a);const d=s.remove(c);if(l&&l.nextSibling){qP(s,l,l.nextSibling)}const u=n.mapper.toModelElement(r);hM(u.getAttribute("listIndent")+1,i.position,c.start,r,n,e);for(const e of s.createRangeIn(d).getItems()){n.mapper.unbindViewElement(e)}t.stop()}}function ZP(e,t,i){if(!i.consumable.consume(t.item,"attribute:listType")){return}const n=i.mapper.toViewElement(t.item);const o=i.writer;o.breakContainer(o.createPositionBefore(n));o.breakContainer(o.createPositionAfter(n));const r=n.parent;const s=t.attributeNewValue=="numbered"?"ol":"ul";o.rename(s,r)}function XP(e,t,i){const n=i.mapper.toViewElement(t.item);const o=n.parent;const r=i.writer;qP(r,o,o.nextSibling);qP(r,o.previousSibling,o);for(const e of t.item.getChildren()){i.consumable.consume(e,"insert")}}function eM(e){return(t,i,n)=>{if(!n.consumable.consume(i.item,"attribute:listIndent")){return}const o=n.mapper.toViewElement(i.item);const r=n.writer;r.breakContainer(r.createPositionBefore(o));r.breakContainer(r.createPositionAfter(o));const s=o.parent;const a=s.previousSibling;const l=r.createRangeOn(s);r.remove(l);if(a&&a.nextSibling){qP(r,a,a.nextSibling)}hM(i.attributeOldValue+1,i.range.start,l.start,o,n,e);UP(i.item,o,n,e);for(const e of i.item.getChildren()){n.consumable.consume(e,"insert")}}}function tM(e,t,i){if(t.item.name!="listItem"){let e=i.mapper.toViewPosition(t.range.start);const n=i.writer;const o=[];while(e.parent.name=="ul"||e.parent.name=="ol"){e=n.breakContainer(e);if(e.parent.name!="li"){break}const t=e;const i=n.createPositionAt(e.parent,"end");if(!t.isEqual(i)){const e=n.remove(n.createRange(t,i));o.push(e)}e=n.createPositionAfter(e.parent)}if(o.length>0){for(let t=0;t0){const t=qP(n,i,i.nextSibling);if(t&&t.parent==i){e.offset--}}}qP(n,e.nodeBefore,e.nodeAfter)}}}function iM(e,t,i){const n=i.mapper.toViewPosition(t.position);const o=n.nodeBefore;const r=n.nodeAfter;qP(i.writer,o,r)}function nM(e,t,i){if(i.consumable.consume(t.viewItem,{name:true})){const e=i.writer;const n=e.createElement("listItem");const o=mM(t.viewItem);e.setAttribute("listIndent",o,n);const r=t.viewItem.parent&&t.viewItem.parent.name=="ol"?"numbered":"bulleted";e.setAttribute("listType",r,n);const s=i.splitToAllowedParent(n,t.modelCursor);if(!s){return}e.insert(n,s.position);const a=dM(n,t.viewItem.getChildren(),i);t.modelRange=e.createRange(t.modelCursor,a);if(s.cursorParent){t.modelCursor=e.createPositionAt(s.cursorParent,0)}else{t.modelCursor=t.modelRange.end}}}function oM(e,t,i){if(i.consumable.test(t.viewItem,{name:true})){const e=Array.from(t.viewItem.getChildren());for(const t of e){const e=!(t.is("li")||fM(t));if(e){t._remove()}}}}function rM(e,t,i){if(i.consumable.test(t.viewItem,{name:true})){if(t.viewItem.childCount===0){return}const e=[...t.viewItem.getChildren()];let i=false;let n=true;for(const t of e){if(i&&!fM(t)){t._remove()}if(t.is("text")){if(n){t._data=t.data.replace(/^\s+/,"")}if(!t.nextSibling||fM(t.nextSibling)){t._data=t.data.replace(/\s+$/,"")}}else if(fM(t)){i=true}n=false}}}function sM(e){return(t,i)=>{if(i.isPhantom){return}const n=i.modelPosition.nodeBefore;if(n&&n.is("listItem")){const t=i.mapper.toViewElement(n);const o=t.getAncestors().find(fM);const r=e.createPositionAt(t,0).getWalker();for(const e of r){if(e.type=="elementStart"&&e.item.is("li")){i.viewPosition=e.previousPosition;break}else if(e.type=="elementEnd"&&e.item==o){i.viewPosition=e.nextPosition;break}}}}}function aM(e){return(t,i)=>{const n=i.viewPosition;const o=n.parent;const r=i.mapper;if(o.name=="ul"||o.name=="ol"){if(!n.isAtEnd){const t=r.toModelElement(n.nodeAfter);i.modelPosition=e.createPositionBefore(t)}else{const t=r.toModelElement(n.nodeBefore);const o=r.getModelLength(n.nodeBefore);i.modelPosition=e.createPositionBefore(t).getShiftedBy(o)}t.stop()}else if(o.name=="li"&&n.nodeBefore&&(n.nodeBefore.name=="ul"||n.nodeBefore.name=="ol")){const s=r.toModelElement(o);let a=1;let l=n.nodeBefore;while(l&&fM(l)){a+=r.getModelLength(l);l=l.previousSibling}i.modelPosition=e.createPositionBefore(s).getShiftedBy(a);t.stop()}}}function lM(e,t){const i=e.document.differ.getChanges();const n=new Map;let o=false;for(const n of i){if(n.type=="insert"&&n.name=="listItem"){r(n.position)}else if(n.type=="insert"&&n.name!="listItem"){if(n.name!="$text"){const i=n.position.nodeAfter;if(i.hasAttribute("listIndent")){t.removeAttribute("listIndent",i);o=true}if(i.hasAttribute("listType")){t.removeAttribute("listType",i);o=true}for(const t of Array.from(e.createRangeIn(i)).filter(e=>e.item.is("listItem"))){r(t.previousPosition)}}const i=n.position.getShiftedBy(n.length);r(i)}else if(n.type=="remove"&&n.name=="listItem"){r(n.position)}else if(n.type=="attribute"&&n.attributeKey=="listIndent"){r(n.range.start)}else if(n.type=="attribute"&&n.attributeKey=="listType"){r(n.range.start)}}for(const e of n.values()){s(e);a(e)}return o;function r(e){const t=e.nodeBefore;if(!t||!t.is("listItem")){const t=e.nodeAfter;if(t&&t.is("listItem")){n.set(t,t)}}else{let e=t;if(n.has(e)){return}for(let t=e.previousSibling;t&&t.is("listItem");t=e.previousSibling){e=t;if(n.has(e)){return}}n.set(t,e)}}function s(e){let i=0;let n=null;while(e&&e.is("listItem")){const r=e.getAttribute("listIndent");if(r>i){let s;if(n===null){n=r-i;s=i}else{if(n>r){n=r}s=r-n}t.setAttribute("listIndent",s,e);o=true}else{n=null;i=e.getAttribute("listIndent")+1}e=e.nextSibling}}function a(e){let i=[];let n=null;while(e&&e.is("listItem")){const r=e.getAttribute("listIndent");if(n&&n.getAttribute("listIndent")>r){i=i.slice(0,r+1)}if(r!=0){if(i[r]){const n=i[r];if(e.getAttribute("listType")!=n){t.setAttribute("listType",n,e);o=true}}else{i[r]=e.getAttribute("listType")}}n=e;e=e.nextSibling}}}function cM(e,[t,i]){let n=t.is("documentFragment")?t.getChild(0):t;let o;if(!i){o=this.document.selection}else{o=this.createSelection(i)}if(n&&n.is("listItem")){const e=o.getFirstPosition();let t=null;if(e.parent.is("listItem")){t=e.parent}else if(e.nodeBefore&&e.nodeBefore.is("listItem")){t=e.nodeBefore}if(t){const e=t.getAttribute("listIndent");if(e>0){while(n&&n.is("listItem")){n._setAttribute("listIndent",n.getAttribute("listIndent")+e);n=n.nextSibling}}}}}function dM(e,t,i){const{writer:n,schema:o}=i;let r=n.createPositionAfter(e);for(const s of t){if(s.name=="ul"||s.name=="ol"){r=i.convertItem(s,r).modelCursor}else{const t=i.convertItem(s,n.createPositionAt(e,"end"));const a=t.modelRange.start.nodeAfter;const l=a&&a.is("element")&&!o.checkChild(e,a.name);if(l){if(t.modelCursor.parent.is("listItem")){e=t.modelCursor.parent}else{e=uM(t.modelCursor)}r=n.createPositionAfter(e)}}}return r}function uM(e){const t=new Wh({startPosition:e});let i;do{i=t.next()}while(!i.value.item.is("listItem"));return i.value.item}function hM(e,t,i,n,o,r){const s=GP(t.nodeBefore,{sameIndent:true,smallerIndent:true,listIndent:e,foo:"b"});const a=o.mapper;const l=o.writer;const c=s?s.getAttribute("listIndent"):null;let d;if(!s){d=i}else if(c==e){const e=a.toViewElement(s).parent;d=l.createPositionAfter(e)}else{const e=r.createPositionAt(s,"end");d=a.toViewPosition(e)}d=$P(d);for(const e of[...n.getChildren()]){if(fM(e)){d=l.move(l.createRangeOn(e),d).end;qP(l,e,e.nextSibling);qP(l,e.previousSibling,e)}}}function fM(e){return e.is("ol")||e.is("ul")}function mM(e){let t=0;let i=e.parent;while(i){if(i.is("li")){t++}else{const e=i.previousSibling;if(e&&e.is("li")){t++}}i=i.parent}return t}class gM extends Rw{static get pluginName(){return"ListEditing"}static get requires(){return[Ty]}init(){const e=this.editor;e.model.schema.register("listItem",{inheritAllFrom:"$block",allowAttributes:["listType","listIndent"]});const t=e.data;const i=e.editing;e.model.document.registerPostFixer(t=>lM(e.model,t));i.mapper.registerViewToModelLength("li",pM);t.mapper.registerViewToModelLength("li",pM);i.mapper.on("modelToViewPosition",sM(i.view));i.mapper.on("viewToModelPosition",aM(e.model));t.mapper.on("modelToViewPosition",sM(i.view));e.conversion.for("editingDowncast").add(t=>{t.on("insert",tM,{priority:"high"});t.on("insert:listItem",JP(e.model));t.on("attribute:listType:listItem",ZP,{priority:"high"});t.on("attribute:listType:listItem",XP,{priority:"low"});t.on("attribute:listIndent:listItem",eM(e.model));t.on("remove:listItem",QP(e.model));t.on("remove",iM,{priority:"low"})});e.conversion.for("dataDowncast").add(t=>{t.on("insert",tM,{priority:"high"});t.on("insert:listItem",JP(e.model))});e.conversion.for("upcast").add(e=>{e.on("element:ul",oM,{priority:"high"});e.on("element:ol",oM,{priority:"high"});e.on("element:li",rM,{priority:"high"});e.on("element:li",nM)});e.model.on("insertContent",cM,{priority:"high"});e.commands.add("numberedList",new jP(e,"numbered"));e.commands.add("bulletedList",new jP(e,"bulleted"));e.commands.add("indentList",new FP(e,"forward"));e.commands.add("outdentList",new FP(e,"backward"));const n=i.view.document;this.listenTo(n,"enter",(e,t)=>{const i=this.editor.model.document;const n=i.selection.getLastPosition().parent;if(i.selection.isCollapsed&&n.name=="listItem"&&n.isEmpty){this.editor.execute("outdentList");t.preventDefault();e.stop()}});this.listenTo(n,"delete",(e,t)=>{if(t.direction!=="backward"){return}const i=this.editor.model.document.selection;if(!i.isCollapsed){return}const n=i.getFirstPosition();if(!n.isAtStart){return}const o=n.parent;if(o.name!=="listItem"){return}const r=o.previousSibling&&o.previousSibling.name==="listItem";if(r){return}this.editor.execute("outdentList");t.preventDefault();e.stop()},{priority:"high"});const o=e=>(t,i)=>{const n=this.editor.commands.get(e);if(n.isEnabled){this.editor.execute(e);i()}};e.keystrokes.set("Tab",o("indentList"));e.keystrokes.set("Shift+Tab",o("outdentList"))}afterInit(){const e=this.editor.commands;const t=e.get("indent");const i=e.get("outdent");if(t){t.registerChildCommand(e.get("indentList"))}if(i){i.registerChildCommand(e.get("outdentList"))}}}function pM(e){let t=1;for(const i of e.getChildren()){if(i.name=="ul"||i.name=="ol"){for(const e of i.getChildren()){t+=pM(e)}}}return t}var bM='';var wM='';class _M extends Rw{init(){const e=this.editor.t;YP(this.editor,"numberedList",e("Numbered List"),bM);YP(this.editor,"bulletedList",e("Bulleted List"),wM)}}class kM extends Rw{static get requires(){return[gM,_M]}static get pluginName(){return"List"}}class vM{constructor(e,t={}){this.namespaces=t.namespaces||[];this._domParser=new DOMParser;this._domConverter=new Dd(e,{blockFillerMode:"nbsp"});this._htmlWriter=new xp}toData(e){const t=this._domConverter.viewToDom(e,document);return this._htmlWriter.getHtml(t)}toView(e){const t=this._toDom(e);return this._domConverter.domToView(t,{keepOriginalCase:true})}_toDom(e){const t=this.namespaces.map(e=>`xmlns:${e}="nsp"`).join(" ");e=`${e}`;const i=this._domParser.parseFromString(e,"text/xml");const n=i.querySelector("parsererror");if(n){throw new Error("Parse error - "+n.textContent)}const o=i.createDocumentFragment();const r=i.documentElement.childNodes;while(r.length>0){o.appendChild(r[0])}return o}}class yM{static get safeXmlCharactersEntities(){return{tagOpener:"«",tagCloser:"»",doubleQuote:"¨",realDoubleQuote:"""}}static get safeBadBlackboardCharacters(){return{ltElement:"«mo»<«/mo»",gtElement:"«mo»>«/mo»",ampElement:"«mo»&«/mo»"}}static get safeGoodBlackboardCharacters(){return{ltElement:"«mo»§lt;«/mo»",gtElement:"«mo»§gt;«/mo»",ampElement:"«mo»§amp;«/mo»"}}static get xmlCharacters(){return{id:"xmlCharacters",tagOpener:"<",tagCloser:">",doubleQuote:'"',ampersand:"&",quote:"'"}}static get safeXmlCharacters(){return{id:"safeXmlCharacters",tagOpener:"«",tagCloser:"»",doubleQuote:"¨",ampersand:"§",quote:"`",realDoubleQuote:"¨"}}}class xM{static isMathmlInAttribute(e,t){const i="['\"][\\s]*=[\\s]*[\\w-]+";const n="\"[^\"]*\"|'[^']*'";const o=`[\\s]*(${n})[\\s]*=[\\s]*[\\w-]+[\\s]*`;const r=`('${o}')*`;const s=`^${i}${r}[\\s]+gmi<`;const a=new RegExp(s);const l=e.substring(0,t);const c=l.split("").reverse().join("");const d=a.test(c);return d}static safeXmlDecode(e){let{tagOpener:t}=yM.safeXmlCharactersEntities;let{tagCloser:i}=yM.safeXmlCharactersEntities;let{doubleQuote:n}=yM.safeXmlCharactersEntities;let{realDoubleQuote:o}=yM.safeXmlCharactersEntities;e=e.split(t).join(yM.safeXmlCharacters.tagOpener);e=e.split(i).join(yM.safeXmlCharacters.tagCloser);e=e.split(n).join(yM.safeXmlCharacters.doubleQuote);e=e.split(o).join(yM.safeXmlCharacters.realDoubleQuote);const{ltElement:r}=yM.safeBadBlackboardCharacters;const{gtElement:s}=yM.safeBadBlackboardCharacters;const{ampElement:a}=yM.safeBadBlackboardCharacters;if("_wrs_blackboard"in window&&window._wrs_blackboard){e=e.split(r).join(yM.safeGoodBlackboardCharacters.ltElement);e=e.split(s).join(yM.safeGoodBlackboardCharacters.gtElement);e=e.split(a).join(yM.safeGoodBlackboardCharacters.ampElement)}({tagOpener:t}=yM.safeXmlCharacters);({tagCloser:i}=yM.safeXmlCharacters);({doubleQuote:n}=yM.safeXmlCharacters);({realDoubleQuote:o}=yM.safeXmlCharacters);const{ampersand:l}=yM.safeXmlCharacters;const{quote:c}=yM.safeXmlCharacters;e=e.split(t).join(yM.xmlCharacters.tagOpener);e=e.split(i).join(yM.xmlCharacters.tagCloser);e=e.split(n).join(yM.xmlCharacters.doubleQuote);e=e.split(l).join(yM.xmlCharacters.ampersand);e=e.split(c).join(yM.xmlCharacters.quote);let d="";let u=null;for(let t=0;t128){t+=`&#${e.codePointAt(i)};`;if(e.codePointAt(i)>65535){i+=1}}else if(n==="&"){const o=e.indexOf(";",i+1);if(o>=0){const n=document.createElement("span");n.innerHTML=e.substring(i,o+1);t+=`&#${IM.fixedCharCodeAt(n.textContent||n.innerText,0)};`;i=o}else{t+=n}}else{t+=n}}return t}static addCustomEditorClassAttribute(e,t){let i="";const n=e.indexOf("");if(e.indexOf("class")===-1){i=`${e.substr(n,o)} class="wrs_${t}">`;i+=e.substr(o+1,e.length);return i}}return e}static removeCustomEditorClassAttribute(e,t){if(e.indexOf("class")===-1||e.indexOf(`wrs_${t}`)===-1){return e}if(e.indexOf(`class="wrs_${t}"`)!==-1){return e.replace(`class="wrs_${t}"`,"")}return e.replace(`wrs_${t}`,"")}static addAnnotation(e,t,i){const n=e.indexOf("");o=`${e.substring(0,n)}${t}${e.substring(n)}`}else if(xM.isEmpty(e)){const n=e.indexOf("/>");const r=e.indexOf(">");const s=r===n?n:r;o=`${e.substring(0,s)}>${t}`}else{const n=e.indexOf(">")+1;const r=e.lastIndexOf("");const s=e.substring(n,r);o=`${e.substring(0,n)}${s}${t}`}return o}static removeAnnotation(e,t){let i=e;const n=``;const o="";const r=e.indexOf(n);if(r!==-1){let t=false;let n=e.indexOf("",i);const o=e.substring(i,n);if(o.indexOf(t)!==-1){return true}return false}static isEmpty(e){const t=">";const i="/>";const n=e.indexOf(t);const o=e.indexOf(i);let r=false;if(o!==-1){if(o===n-1){r=true}}if(!r){const t=new RegExp("");const i=t.exec(e);if(i){r=n+1===i.index}}return r}static encodeProperties(e){const t=/\w+=".*?"/g;const i=e=>{const t=e.indexOf('"');const i=e.substring(t+1,e.length-1);const n=IM.htmlEntities(i);const o=`${e.substring(0,t+1)}${n}"`;return o};const n=e.replace(t,i);return n}}class AM{static addConfiguration(e){Object.assign(AM.properties,e)}static get properties(){return AM._properties}static set properties(e){AM._properties=e}static get(e){if(!Object.prototype.hasOwnProperty.call(AM.properties,e)){if(Object.prototype.hasOwnProperty.call(AM.properties,"_wrs_conf_")){return AM.properties[`_wrs_conf_${e}`]}return false}return AM.properties[e]}static set(e,t){AM.properties[e]=t}static update(e,t){if(!AM.get(e)){AM.set(e,t)}else{const i=Object.assign(AM.get(e),t);AM.set(e,i)}}}AM._properties={};class CM{constructor(){this.cache=[]}populate(e,t){this.cache[e]=t}get(e){if(Object.prototype.hasOwnProperty.call(this.cache,e)){return this.cache[e]}return false}}class TM{constructor(){this.listeners=[]}add(e){this.listeners.push(e)}fire(e,t){for(let i=0;i{const i=e||window.event;const n=i.srcElement?i.srcElement:i.target;t(n,i)})}if(i){IM.addEvent(e,"mousedown",e=>{const t=e||window.event;const n=t.srcElement?t.srcElement:t.target;i(n,t)})}if(n){IM.addEvent(e,"mouseup",e=>{const t=e||window.event;const i=t.srcElement?t.srcElement:t.target;n(i,t)})}}static addClass(e,t){if(!IM.containsClass(e,t)){e.className+=` ${t}`}}static containsClass(e,t){if(e==null||!("className"in e)){return false}const i=e.className.split(" ");for(let e=i.length-1;e>=0;e-=1){if(i[e]===t){return true}}return false}static removeClass(e,t){let i="";const n=e.className.split(" ");for(let e=0;e{o+=` ${e}="${IM.htmlEntities(t[e])}"`});o+=">";n=i.createElement(o)}catch(o){n=i.createElement(e);Object.keys(t).forEach(e=>{n.setAttribute(e,t[e])})}return n}static createObject(e,t){if(t===undefined){t=document}e=e.split("").join("").split("").join("");e=e.split("").join("
    ").split("").join("
    ");const i=IM.createElement("div",{},t);i.innerHTML=e;function n(e){if(e.getAttribute&&e.getAttribute("wirisObject")==="WirisParam"){const i={};for(let t=0;t0){t+=">";for(let i=0;i`}else if(e.nodeName==="DIV"||e.nodeName==="SCRIPT"){t+=`>`}else{t+="/>"}return t}if(e.nodeType===3){return IM.htmlEntities(e.nodeValue)}return""}static concatenateUrl(e,t){let i="";if(e.indexOf("/")!==e.length&&t.indexOf("/")!==0){i="/"}return(e+i+t).replace(/([^:]\/)\/+/g,"$1")}static htmlEntities(e){return e.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""")}static htmlEntitiesDecode(e){const t=document.createElement("textarea");t.innerHTML=e;return t.value}static createHttpRequest(){const e=window.location.toString().substr(0,window.location.toString().lastIndexOf("/")+1);if(e.substr(0,7)==="file://"){throw SM.get("exception_cross_site")}if(typeof XMLHttpRequest!=="undefined"){return new XMLHttpRequest}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){return null}}}static httpBuildQuery(e){let t="";Object.keys(e).forEach(i=>{if(e[i]!=null){t+=`${IM.urlEncode(i)}=${IM.urlEncode(e[i])}&`}});if(t.substring(t.length-1)==="&"){t=t.substring(0,t.length-1)}return t}static propertiesToString(e){const t=[];Object.keys(e).forEach(i=>{if(Object.prototype.hasOwnProperty.call(e,i)){t.push(i)}});const i=t.length;for(let e=0;e0){t[e]=o;t[n]=i}}}let n="";for(let o=0;oo?o:n;for(i=0;i=55296&&i<=56319){n=i;o=e.charCodeAt(t+1);if(Number.isNaN(o)){throw SM.get("exception_high_surrogate")}return(n-55296)*1024+(o-56320)+65536}if(i>=56320&&i<=57343){return false}return i}static urlToAssArray(e){let t;t=e.indexOf("?");if(t>0){const i=e.substring(t+1);const n=i.split("&");const o={};for(t=0;t1){o[i[0]]=decodeURIComponent(i[1].replace(/\+/g," "))}}return o}return{}}static urlEncode(e){let t="";t=encodeURIComponent(e);return t}static getWIRISImageOutput(e,t,i){const n=IM.createObject(e);if(n){if(n.className===AM.get("imageClassName")||n.getAttribute(AM.get("imageMathmlAttribute"))){if(!t){return e}const o=n.getAttribute(AM.get("imageMathmlAttribute"));let r=xM.safeXmlDecode(o);if(!AM.get("saveHandTraces")){r=xM.removeAnnotation(r,"application/json")}if(r==null){r=n.getAttribute("alt")}if(i){const e=xM.safeXmlEncode(r);return e}return r}}return e}static getNodeLength(e){const t={IMG:1,BR:1};if(e.nodeType===3){return e.nodeValue.length}if(e.nodeType===1){let i=t[e.nodeName.toUpperCase()];if(i===undefined){i=0}for(let t=0;t0){if(i.text.length===0){return IM.getSelectedItem(e,t,true)}return null}n.document.execCommand("InsertImage",false,"#");let o=i.parentElement();if(o.nodeName.toUpperCase()!=="IMG"){i.pasteHTML('');o=n.document.getElementById("wrs_openEditorWindow_temporalObject")}let r;let s;if(o.nextSibling&&o.nextSibling.nodeType===3){r=o.nextSibling;s=0}else if(o.previousSibling&&o.previousSibling.nodeType===3){r=o.previousSibling;s=r.nodeValue.length}else{r=n.document.createTextNode("");o.parentNode.insertBefore(r,o);s=0}o.parentNode.removeChild(o);return{node:r,caretPosition:s}}if(i.length>1){return null}return{node:i.item(0)}}if(n.getSelection){let e;const t=n.getSelection();try{e=t.getRangeAt(0)}catch(t){e=n.document.createRange()}const i=e.startContainer;if(i.nodeType===3){return{node:i,caretPosition:e.startOffset}}if(i!==e.endContainer){return null}if(i.nodeType===1){const t=e.startOffset;if(i.childNodes[t]){return{node:i.childNodes[t]}}}}return null}static getSelectedItemOnTextarea(e){const t=document.createTextNode(e.value);const i=PM.getLatexFromTextNode(t,e.selectionStart);if(i===null){return null}return{node:t,caretPosition:e.selectionStart,startPosition:i.startPosition,endPosition:i.endPosition}}static getElementsByNameFromString(e,t,i){const n=[];e=e.toLowerCase();t=t.toLowerCase();let o=e.indexOf(`<${t} `);while(o!==-1){let r;if(i){r=">"}else{r=``}let s=e.indexOf(r,o);if(s!==-1){s+=r.length;n.push({start:o,end:s})}else{s=o+1}o=e.indexOf(`<${t} `,s)}return n}static decode64(e){const t="+".charCodeAt(0);const i="/".charCodeAt(0);const n="0".charCodeAt(0);const o="a".charCodeAt(0);const r="A".charCodeAt(0);const s="-".charCodeAt(0);const a="_".charCodeAt(0);const l=e.charCodeAt(0);if(l===t||l===s){return 62}if(l===i||l===a){return 63}if(l0){throw new Error("Invalid string. Length must be a multiple of 4")}const n=[];let o;let r;if(!t){if(e.charAt(e.length-2)==="="){r=2}else if(e.charAt(e.length-1)==="="){r=1}else{r=0}o=r>0?e.length-4:e.length}else{o=t}let s;for(s=0;s>16&255);n.push(i>>8&255);n.push(i&255)}if(r){if(r===2){i=IM.decode64(e.charAt(s))<<2|IM.decode64(e.charAt(s+1))>>4;n.push(i&255)}else if(r===1){i=IM.decode64(e.charAt(s))<<10|IM.decode64(e.charAt(s+1))<<4|IM.decode64(e.charAt(s+2))>>2;n.push(i>>8&255);n.push(i&255)}}return n}static readInt32(e){if(e.length<4){return false}const t=e.splice(0,4);return t[0]<<24|t[1]<<16|t[2]<<8|t[3]<<0}static readByte(e){return e.shift()<<0}static readBytes(e,t,i){return e.splice(t,i)}static updateTextArea(e,t){if(e&&t){e.focus();if(e.selectionStart!=null){const{selectionEnd:i}=e;const n=e.value.substring(0,e.selectionStart);const o=e.value.substring(i,e.value.length);e.value=n+t+o;e.selectionEnd=i+t.length}else{const e=document.selection.createRange();e.text=t}}}static updateExistingTextOnTextarea(e,t,i,n){e.focus();const o=e.value.substring(0,i);e.value=o+t+e.value.substring(n,e.value.length);e.selectionEnd=i+t.length}static addArgument(e,t,i){let n;if(e.indexOf("?")>0){n="&"}else{n="?"}return`${e+n+t}=${i}`}}class LM{static removeImgDataAttributes(e){const t=[];const{attributes:i}=e;Object.keys(i).forEach(e=>{const n=i[e];if(n.name.indexOf("data-")===0){t.push(n.name)}});t.forEach(t=>{e.removeAttribute(t)})}static clone(e,t){const i=AM.get("imageCustomEditorName");if(!e.hasAttribute(i)){t.removeAttribute(i)}const n=AM.get("imageMathmlAttribute");const o=[n,i,"alt","height","width","style","src","role"];o.forEach(i=>{const n=e.getAttribute(i);if(n){t.setAttribute(i,n)}})}static setImgSize(e,t,i){let n;let o;let r;let s;if(i){if(AM.get("imageFormat")==="svg"){if(AM.get("saveMode")!=="base64"){n=LM.getMetricsFromSvgString(t)}else{o=e.src.substr(e.src.indexOf("base64,")+7,e.src.length);s="";r=IM.b64ToByteArray(o,o.length);for(let e=0;e=4){n=IM.readInt32(e);if(n===1229472850){t=IM.readInt32(e);i=IM.readInt32(e);IM.readInt32(e);IM.readByte(e)}else if(n===1650545477){o=IM.readInt32(e)}else if(n===1883789683){r=IM.readInt32(e);r=Math.round(r/39.37);IM.readInt32(e);IM.readByte(e)}IM.readInt32(e)}if(typeof t!=="undefined"){const e=[];e.cw=t;e.ch=i;e.dpi=r;if(o){e.cb=o}return e}return[]}}class NM{static get cache(){return NM._cache}static set cache(e){NM._cache=e}static mathMLToAccessible(e,t,i){if(typeof t==="undefined"){t="en"}if(xM.containClass(e,"wrs_chemistry")){i.mode="chemistry"}let n="";if(NM.cache.get(e)){n=NM.cache.get(e)}else{i.service="mathml2accessible";i.lang=t;const o=JSON.parse(EM.getService("service",i));if(o.status!=="error"){n=o.result.text;NM.cache.populate(e,n)}else{n=SM.get("error_convert_accessibility")}}return n}}NM._cache=new CM;var OM=i(103);class RM{static mathmlToImgObject(e,t,i,n){const o=e.createElement("img");o.align="middle";o.style.maxWidth="none";const r=i||{};r.mml=t;r.lang=n;r.metrics="true";r.centerbaseline="false";if(AM.get("saveMode")==="base64"&&AM.get("base64savemode")==="default"){r.base64=true}o.className=AM.get("imageClassName");if(t.indexOf('class="')!==-1){let e=t.substring(t.indexOf('class="')+'class="'.length,t.length);e=e.substring(0,e.indexOf('"'));e=e.substring(4,e.length);o.setAttribute(AM.get("imageCustomEditorName"),e)}if(AM.get("wirisPluginPerformance")&&(AM.get("saveMode")==="xml"||AM.get("saveMode")==="safeXml")){let e=JSON.parse(RM.createShowImageSrc(r,n));if(e.status==="warning"){try{e=JSON.parse(EM.getService("showimage",r))}catch(e){return null}}({result:e}=e);if(e.format==="png"){o.src=`data:image/png;base64,${e.content}`}else{o.src=`data:image/svg+xml;charset=utf8,${IM.urlEncode(e.content)}`}o.setAttribute(AM.get("imageMathmlAttribute"),xM.safeXmlEncode(t));LM.setImgSize(o,e.content,true);if(AM.get("enableAccessibility")){if(typeof e.alt==="undefined"){o.alt=NM.mathMLToAccessible(t,n,r)}else{o.alt=e.alt}}}else{const e=RM.createImageSrc(t,r);o.setAttribute(AM.get("imageMathmlAttribute"),xM.safeXmlEncode(t));o.src=e;LM.setImgSize(o,e,AM.get("saveMode")==="base64"&&AM.get("base64savemode")==="default");if(AM.get("enableAccessibility")){o.alt=NM.mathMLToAccessible(t,n,r)}}if(typeof RM.observer!=="undefined"){RM.observer.observe(o)}o.setAttribute("role","math");return o}static createImageSrc(e,t){if(AM.get("saveMode")==="base64"&&AM.get("base64savemode")==="default"){t.base64=true}let i=EM.getService("createimage",t);if(i.indexOf("@BASE@")!==-1){const e=EM.getServicePath("createimage").split("/");e.pop();i=i.split("@BASE@").join(e.join("/"))}return i}static initParse(e,t){e=RM.initParseSaveMode(e,t);return RM.initParseEditMode(e)}static initParseSaveMode(e,t){if(AM.get("saveMode")){e=PM.parseMathmlToLatex(e,yM.safeXmlCharacters);e=PM.parseMathmlToLatex(e,yM.xmlCharacters);e=RM.parseMathmlToImg(e,yM.safeXmlCharacters,t);e=RM.parseMathmlToImg(e,yM.xmlCharacters,t);if(AM.get("saveMode")==="base64"&&AM.get("base64savemode")==="image"){e=RM.codeImgTransform(e,"base642showimage")}}return e}static initParseEditMode(e){if(AM.get("parseModes").indexOf("latex")!==-1){const t=IM.getElementsByNameFromString(e,"img",true);const i='encoding="LaTeX">';let n=0;for(let o=0;o",d);const s=c.substring(d,r);const a=`$$${IM.htmlEntitiesDecode(s)}$$`;const l=e.substring(0,t[o].start+n);const u=e.substring(t[o].end+n);e=l+a+u;n+=a.length-(t[o].end-t[o].start)}}}}}return e}static endParse(e){const t=RM.endParseEditMode(e);const i=RM.endParseSaveMode(t);return i}static endParseEditMode(e){if(AM.get("parseModes").indexOf("latex")!==-1){let t="";let i=0;let n=e.indexOf("$$");while(n!==-1){t+=e.substring(i,n);i=e.indexOf("$$",n+2);if(i!==-1){const o=e.substring(n+2,i);const r=IM.htmlEntitiesDecode(o);let s=PM.getMathMLFromLatex(r,true);if(!AM.get("saveHandTraces")){s=xM.removeAnnotation(s,"application/json")}t+=s;i+=2}else{t+="$$";i=n+2}n=e.indexOf("$$",i)}t+=e.substring(i,e.length);e=t}return e}static endParseSaveMode(e){if(AM.get("saveMode")){if(AM.get("saveMode")==="safeXml"){e=RM.codeImgTransform(e,"img2mathml")}else if(AM.get("saveMode")==="xml"){e=RM.codeImgTransform(e,"img2mathml")}else if(AM.get("saveMode")==="base64"&&AM.get("base64savemode")==="image"){e=RM.codeImgTransform(e,"img264")}}return e}static createShowImageSrc(e,t){const i=[];const n=["mml","color","centerbaseline","zoom","dpi","fontSize","fontFamily","defaultStretchy","backgroundColor","format"];n.forEach(t=>{const o=n[t];if(typeof e[o]!=="undefined"){i[o]=e[o]}});const o={};Object.keys(e).forEach(t=>{if(t!=="mml"){o[t]=e[t]}});o.formula=com.wiris.js.JsPluginTools.md5encode(IM.propertiesToString(i));o.lang=typeof t==="undefined"?"en":t;o.version=AM.get("version");const r=EM.getService("showimage",IM.httpBuildQuery(o),true);return r}static codeImgTransform(e,t){let i="";let n=0;const o=/"){n=a+1}a+=1}if(n",s)}else{a+=r.length}if(!xM.isMathmlInAttribute(e,s)&&l===-1){let o=e.substring(s,a);o=t.id===yM.safeXmlCharacters.id?xM.safeXmlDecode(o):xM.mathMLEntities(o);n+=IM.createObjectCode(RM.mathmlToImgObject(document,o,null,i))}else{n+=e.substring(s,a)}s=e.indexOf(o,a)}n+=e.substring(a,e.length);return n}}if(typeof MutationObserver!=="undefined"){const e=new MutationObserver(e=>{e.forEach(e=>{if(e.oldValue===AM.get("imageClassName")&&e.attributeName==="class"&&e.target.className.indexOf(AM.get("imageClassName"))===-1){e.target.className=AM.get("imageClassName")}})});RM.observer=Object.create(e);RM.observer.Config={attributes:true,attributeOldValue:true};RM.observer.observe=function e(t){Object.getPrototypeOf(this).observe(t,this.Config)}}class zM{constructor(){this.isContentChanged=false;this.waitingForChanges=false}setIsContentChanged(e){this.isContentChanged=e}getIsContentChanged(){return this.isContentChanged}setWaitingForChanges(e){this.waitingForChanges=e}caretPositionChanged(e){}clipboardChanged(e){}contentChanged(e){if(this.waitingForChanges===true&&this.isContentChanged===false){this.isContentChanged=true}}styleChanged(e){}transformationReceived(e){}}class DM{constructor(e){this.editorAttributes={};if("editorAttributes"in e){this.editorAttributes=e.editorAttributes}else{throw new Error("ContentManager constructor error: editorAttributes property missed.")}this.customEditors=null;if("customEditors"in e){this.customEditors=e.customEditors}this.environment={};if("environment"in e){this.environment=e.environment}else{throw new Error("ContentManager constructor error: environment property missed")}this.language="";if("language"in e){this.language=e.language}else{throw new Error("ContentManager constructor error: language property missed")}this.editorListener=new zM;this.editor=null;this.ua=navigator.userAgent.toLowerCase();this.deviceProperties={};this.deviceProperties.isAndroid=this.ua.indexOf("android")>-1;this.deviceProperties.isIOS=this.ua.indexOf("ipad")>-1||this.ua.indexOf("iphone")>-1;this.toolbar=null;this.modalDialogInstance=null;this.listeners=new TM;this.mathML=null;this.isNewElement=true;this.integrationModel=null}addListener(e){this.listeners.add(e)}setIntegrationModel(e){this.integrationModel=e}setModalDialogInstance(e){this.modalDialogInstance=e}insert(){this.updateTitle(this.modalDialogInstance);this.insertEditor(this.modalDialogInstance)}insertEditor(){if(DM.isEditorLoaded()){this.editor=window.com.wiris.jsEditor.JsEditor.newInstance(this.editorAttributes);this.editor.insertInto(this.modalDialogInstance.contentContainer);this.editor.focus();if(this.modalDialogInstance.rtl){this.editor.action("rtl")}if(this.editor.getEditorModel().isRTL()){this.editor.element.style.direction="rtl"}this.editor.getEditorModel().addEditorListener(this.editorListener);if(this.modalDialogInstance.deviceProperties.isIOS){setTimeout((function e(){this.modalDialogInstance.hideKeyboard()}),400);const e=document.getElementsByClassName("wrs_formulaDisplay")[0];IM.addEvent(e,"focus",this.modalDialogInstance.handleOpenedIosSoftkeyboard);IM.addEvent(e,"blur",this.modalDialogInstance.handleClosedIosSoftkeyboard)}this.listeners.fire("onLoad",{})}else{setTimeout(DM.prototype.insertEditor.bind(this),100)}}init(){if(!DM.isEditorLoaded()){this.addEditorAsExternalDependency()}}addEditorAsExternalDependency(){const e=document.createElement("script");e.type="text/javascript";let t=AM.get("editorUrl");const i=document.createElement("a");DM.setHrefToAnchorElement(i,t);DM.setProtocolToAnchorElement(i);t=DM.getURLFromAnchorElement(i);const n=this.getEditorStats();e.src=`${t}?lang=${this.language}&stats-editor=${n.editor}&stats-mode=${n.mode}&stats-version=${n.version}`;document.getElementsByTagName("head")[0].appendChild(e)}static setHrefToAnchorElement(e,t){e.href=t}static setProtocolToAnchorElement(e){if(window.location.href.indexOf("https://")===0){if(e.protocol==="http:"){e.protocol="https:"}}}static getURLFromAnchorElement(e){if(e.port==="80"||e.port==="443"||e.port===""){return`${e.protocol}//${e.hostname}/${e.pathname}`}}getEditorStats(){const e={};if("editor"in this.environment){e.editor=this.environment.editor}else{e.editor="unknown"}if("mode"in this.environment){e.mode=this.environment.mode}else{e.mode=AM.get("saveMode")}if("version"in this.environment){e.version=this.environment.version}else{e.version=AM.get("version")}return e}static isEditorLoaded(){return window.com&&window.com.wiris&&window.com.wiris.jsEditor&&window.com.wiris.jsEditor.JsEditor&&window.com.wiris.jsEditor.JsEditor.newInstance}setInitialContent(){if(!this.isNewElement){this.setMathML(this.mathML)}}setMathML(e,t){if(typeof t==="undefined"){t=false}this.editor.setMathMLWithCallback(e,()=>{this.editorListener.setWaitingForChanges(true)});setTimeout(()=>{this.editorListener.setIsContentChanged(false)},500);if(!t){this.onFocus()}}onFocus(){if(typeof this.editor!=="undefined"&&this.editor!=null){this.editor.focus()}}submitAction(){if(!this.editor.isFormulaEmpty()){let e=this.editor.getMathMLWithSemantics();if(this.customEditors.getActiveEditor()!==null){const{toolbar:t}=this.customEditors.getActiveEditor();e=xM.addCustomEditorClassAttribute(e,t)}else{Object.keys(this.customEditors.editors).forEach(t=>{e=xM.removeCustomEditorClassAttribute(e,t)})}const t=xM.mathMLEntities(e);this.integrationModel.updateFormula(t)}else{this.integrationModel.updateFormula(null)}this.customEditors.disable();this.integrationModel.notifyWindowClosed();this.setEmptyMathML();this.customEditors.disable()}setEmptyMathML(){if(this.deviceProperties.isAndroid||this.deviceProperties.isIOS){if(this.editor.getEditorModel().isRTL()){this.setMathML('[]',true)}else{this.setMathML('[]',true)}}else if(this.editor.getEditorModel().isRTL()){this.setMathML('',true)}else{this.setMathML("",true)}}onOpen(){if(this.isNewElement){this.setEmptyMathML()}else{this.setMathML(this.mathML)}this.updateToolbar();this.onFocus()}updateToolbar(){this.updateTitle(this.modalDialogInstance);const e=this.customEditors.getActiveEditor();if(e){const t=e.toolbar?e.toolbar:_wrs_int_wirisProperties.toolbar;if(this.toolbar==null||this.toolbar!==t){this.setToolbar(t)}}else{const e=this.getToolbar();if(this.toolbar==null||this.toolbar!==e){this.setToolbar(e);this.customEditors.disable()}}}updateTitle(){const e=this.customEditors.getActiveEditor();if(e){this.modalDialogInstance.setTitle(e.title)}else{this.modalDialogInstance.setTitle("MathType")}}getToolbar(){let e="general";if("toolbar"in this.editorAttributes){({toolbar:e}=this.editorAttributes)}if(e==="general"){e=typeof _wrs_int_wirisProperties==="undefined"||typeof _wrs_int_wirisProperties.toolbar==="undefined"?"general":_wrs_int_wirisProperties.toolbar}return e}setToolbar(e){this.toolbar=e;this.editor.setParams({toolbar:this.toolbar})}hasChanges(){return!this.editor.isFormulaEmpty()&&this.editorListener.getIsContentChanged()}onKeyDown(e){if(e.key!==undefined&&e.repeat===false){if(e.key==="Escape"||e.key==="Esc"){let t=document.getElementsByClassName("wrs_expandButton wrs_expandButtonFor3RowsLayout wrs_pressed");if(t.length===0){t=document.getElementsByClassName("wrs_expandButton wrs_expandButtonFor2RowsLayout wrs_pressed");if(t.length===0){t=document.getElementsByClassName("wrs_select wrs_pressed");if(t.length===0){this.modalDialogInstance.cancelAction();e.stopPropagation();e.preventDefault()}}}}else if(e.shiftKey&&e.key==="Tab"){if(document.activeElement===this.modalDialogInstance.submitButton){this.editor.focus();e.stopPropagation();e.preventDefault()}else{const t=document.querySelector('[title="Manual"]');if(document.activeElement===t){this.modalDialogInstance.cancelButton.focus();e.stopPropagation();e.preventDefault()}}}else if(e.key==="Tab"){if(document.activeElement===this.modalDialogInstance.cancelButton){const t=document.querySelector('[title="Manual"]');t.focus();e.stopPropagation();e.preventDefault()}else{const t=document.getElementsByClassName("wrs_formulaDisplay")[0];if(t.getAttribute("class")==="wrs_formulaDisplay wrs_focused"){this.modalDialogInstance.submitButton.focus();e.stopPropagation();e.preventDefault()}}}}}}class jM{constructor(){this.editors=[];this.activeEditor="default"}addEditor(e,t){const i={};i.name=t.name;i.toolbar=t.toolbar;i.icon=t.icon;i.confVariable=t.confVariable;i.title=t.title;i.tooltip=t.tooltip;this.editors[e]=i}enable(e){this.activeEditor=e}disable(){this.activeEditor="default"}getActiveEditor(){if(this.activeEditor!=="default"){return this.editors[this.activeEditor]}return null}}const BM={imageCustomEditorName:"data-custom-editor",imageClassName:"Wirisformula",CASClassName:"Wiriscas"};var VM=BM;class FM{constructor(){this.cancelled=false;this.defaultPrevented=false}cancel(){this.cancelled=true}preventDefault(){this.defaultPrevented=true}}class HM{constructor(e){this.overlayElement=e.overlayElement;this.callbacks=e.callbacks;this.overlayWrapper=this.overlayElement.appendChild(document.createElement("div"));this.overlayWrapper.setAttribute("class","wrs_popupmessage_overlay_envolture");this.message=this.overlayWrapper.appendChild(document.createElement("div"));this.message.id="wrs_popupmessage";this.message.setAttribute("class","wrs_popupmessage_panel");this.message.setAttribute("role","dialog");this.message.setAttribute("aria-describedby","description_txt");const t=document.createElement("p");const i=document.createTextNode(e.strings.message);t.appendChild(i);t.id="description_txt";this.message.appendChild(t);const n=this.overlayWrapper.appendChild(document.createElement("div"));n.setAttribute("class","wrs_popupmessage_overlay");n.addEventListener("click",this.cancelAction.bind(this));this.buttonArea=this.message.appendChild(document.createElement("div"));this.buttonArea.setAttribute("class","wrs_popupmessage_button_area");this.buttonArea.id="wrs_popup_button_area";const o={class:"wrs_button_accept",innerHTML:e.strings.submitString,id:"wrs_popup_accept_button"};this.closeButton=this.createButton(o,this.closeAction.bind(this));this.buttonArea.appendChild(this.closeButton);const r={class:"wrs_button_cancel",innerHTML:e.strings.cancelString,id:"wrs_popup_cancel_button"};this.cancelButton=this.createButton(r,this.cancelAction.bind(this));this.buttonArea.appendChild(this.cancelButton)}createButton(e,t){let i={};i=document.createElement("button");i.setAttribute("id",e.id);i.setAttribute("class",e.class);i.innerHTML=e.innerHTML;i.addEventListener("click",t);return i}show(){if(this.overlayWrapper.style.display!=="block"){document.activeElement.blur();this.overlayWrapper.style.display="block";this.closeButton.focus()}else{this.overlayWrapper.style.display="none";_wrs_modalWindow.focus()}}cancelAction(){this.overlayWrapper.style.display="none";if(typeof this.callbacks.cancelCallback!=="undefined"){this.callbacks.cancelCallback()}}closeAction(){this.cancelAction();if(typeof this.callbacks.closeCallback!=="undefined"){this.callbacks.closeCallback()}}onKeyDown(e){if(e.key!==undefined){if(e.key==="Escape"||e.key==="Esc"){this.cancelAction();e.stopPropagation();e.preventDefault()}else if(e.key==="Tab"){if(document.activeElement===this.closeButton){this.cancelButton.focus()}else{this.closeButton.focus()}e.stopPropagation();e.preventDefault()}}}}var WM='\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n';var UM='\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n';var qM='\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n';var $M='\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n';var GM='\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n';var YM='\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n';var KM='\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n';var JM='\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n';var QM='\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n';var ZM='\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n';class XM{constructor(e){this.attributes=e;const t=navigator.userAgent.toLowerCase();const i=t.indexOf("android")>-1;const n=t.indexOf("ipad")>-1||t.indexOf("iphone")>-1;this.iosSoftkeyboardOpened=false;this.iosMeasureUnit=t.indexOf("crios")===-1?"%":"vh";this.iosDivHeight=`100%${this.iosMeasureUnit}`;const o=window.outerWidth;const r=window.outerHeight;const s=o>r;const a=or;const c=a&&this.attributes.width>o;const d=l||c;this.instanceId=document.getElementsByClassName("wrs_modal_dialogContainer").length;this.deviceProperties={orientation:s?"landscape":"portait",isAndroid:i,isIOS:n,isMobile:d,isDesktop:!d&&!n&&!i};this.properties={created:false,state:"",previousState:"",position:{bottom:0,right:10},size:{height:338,width:580}};this.websiteBeforeLockParameters=null;let u={};u.class="wrs_modal_overlay";u.id=this.getElementId(u.class);this.overlay=IM.createElement("div",u);u={};u.class="wrs_modal_title_bar";u.id=this.getElementId(u.class);this.titleBar=IM.createElement("div",u);u={};u.class="wrs_modal_title";u.id=this.getElementId(u.class);this.title=IM.createElement("div",u);this.title.innerHTML="";u={};u.class="wrs_modal_close_button";u.id=this.getElementId(u.class);u.title=SM.get("close");u.style={};this.closeDiv=IM.createElement("a",u);this.closeDiv.setAttribute("role","button");let h=`background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(WM)})`;let f=`background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(UM)})`;this.closeDiv.setAttribute("style",h);this.closeDiv.setAttribute("onmouseover",`this.style = "${f}";`);this.closeDiv.setAttribute("onmouseout",`this.style = "${h}";`);u={};u.class="wrs_modal_stack_button";u.id=this.getElementId(u.class);u.title=SM.get("exit_fullscreen");this.stackDiv=IM.createElement("a",u);this.stackDiv.setAttribute("role","button");h=`background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(KM)})`;f=`background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(JM)})`;this.stackDiv.setAttribute("style",h);this.stackDiv.setAttribute("onmouseover",`this.style = "${f}";`);this.stackDiv.setAttribute("onmouseout",`this.style = "${h}";`);u={};u.class="wrs_modal_maximize_button";u.id=this.getElementId(u.class);u.title=SM.get("fullscreen");this.maximizeDiv=IM.createElement("a",u);this.maximizeDiv.setAttribute("role","button");h=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(qM)})`;f=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa($M)})`;this.maximizeDiv.setAttribute("style",h);this.maximizeDiv.setAttribute("onmouseover",`this.style = "${f}";`);this.maximizeDiv.setAttribute("onmouseout",`this.style = "${h}";`);u={};u.class="wrs_modal_minimize_button";u.id=this.getElementId(u.class);u.title=SM.get("minimize");this.minimizeDiv=IM.createElement("a",u);this.minimizeDiv.setAttribute("role","button");h=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(GM)})`;f=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(YM)})`;this.minimizeDiv.setAttribute("style",h);this.minimizeDiv.setAttribute("onmouseover",`this.style = "${f}";`);this.minimizeDiv.setAttribute("onmouseout",`this.style = "${h}";`);u={};u.class="wrs_modal_dialogContainer";u.id=this.getElementId(u.class);u.role="dialog";this.container=IM.createElement("div",u);this.container.setAttribute("aria-labeledby","wrs_modal_title[0]");u={};u.class="wrs_modal_wrapper";u.id=this.getElementId(u.class);this.wrapper=IM.createElement("div",u);u={};u.class="wrs_content_container";u.id=this.getElementId(u.class);this.contentContainer=IM.createElement("div",u);u={};u.class="wrs_modal_controls";u.id=this.getElementId(u.class);this.controls=IM.createElement("div",u);u={};u.class="wrs_modal_buttons_container";u.id=this.getElementId(u.class);this.buttonContainer=IM.createElement("div",u);this.submitButton=this.createSubmitButton({id:this.getElementId("wrs_modal_button_accept"),class:"wrs_modal_button_accept",innerHTML:SM.get("accept")},this.submitAction.bind(this));this.cancelButton=this.createSubmitButton({id:this.getElementId("wrs_modal_button_cancel"),class:"wrs_modal_button_cancel",innerHTML:SM.get("cancel")},this.cancelAction.bind(this));this.contentManager=null;const m={cancelString:SM.get("cancel"),submitString:SM.get("close"),message:SM.get("close_modal_warning")};const g={closeCallback:()=>{this.close()},cancelCallback:()=>{this.focus()}};const p={overlayElement:this.container,callbacks:g,strings:m};this.popup=new HM(p);this.rtl=false;if("rtl"in this.attributes){this.rtl=this.attributes.rtl}this.handleOpenedIosSoftkeyboard=this.handleOpenedIosSoftkeyboard.bind(this);this.handleClosedIosSoftkeyboard=this.handleClosedIosSoftkeyboard.bind(this)}setContentManager(e){this.contentManager=e}getContentManager(){return this.contentManager}submitAction(){if(typeof this.contentManager.submitAction!=="undefined"){this.contentManager.submitAction()}this.close()}cancelAction(){if(typeof this.contentManager.hasChanges==="undefined"){this.close()}else if(!this.contentManager.hasChanges()){this.close()}else{this.showPopUpMessage()}}createSubmitButton(e,t){class i{constructor(){this.element=document.createElement("button");this.element.id=e.id;this.element.className=e.class;this.element.innerHTML=e.innerHTML;IM.addEvent(this.element,"click",t)}getElement(){return this.element}}return new i(e,t).getElement()}create(){this.titleBar.appendChild(this.closeDiv);this.titleBar.appendChild(this.stackDiv);this.titleBar.appendChild(this.maximizeDiv);this.titleBar.appendChild(this.minimizeDiv);this.titleBar.appendChild(this.title);if(this.deviceProperties.isDesktop){this.container.appendChild(this.titleBar)}this.wrapper.appendChild(this.contentContainer);this.wrapper.appendChild(this.controls);this.controls.appendChild(this.buttonContainer);this.buttonContainer.appendChild(this.submitButton);this.buttonContainer.appendChild(this.cancelButton);this.container.appendChild(this.wrapper);this.recalculateScrollBar();document.body.appendChild(this.container);document.body.appendChild(this.overlay);if(this.deviceProperties.isDesktop){this.createModalWindowDesktop();this.createResizeButtons();this.addListeners();if(AM.get("modalWindowFullScreen")){this.maximize()}}else if(this.deviceProperties.isAndroid){this.createModalWindowAndroid()}else if(this.deviceProperties.isIOS&&!this.deviceProperties.isMobile){this.createModalWindowIos()}if(this.contentManager!=null){this.contentManager.insert(this)}this.properties.open=true;this.properties.created=true;if(this.isRTL()){this.container.style.right=`${window.innerWidth-this.scrollbarWidth-this.container.offsetWidth}px`;this.container.className+=" wrs_modal_rtl"}}createResizeButtons(){this.resizerBR=document.createElement("div");this.resizerBR.className="wrs_bottom_right_resizer";this.resizerBR.innerHTML="◢";this.resizerTL=document.createElement("div");this.resizerTL.className="wrs_bottom_left_resizer";this.container.appendChild(this.resizerBR);this.titleBar.appendChild(this.resizerTL);IM.addEvent(this.resizerBR,"mousedown",this.activateResizeStateBR.bind(this));IM.addEvent(this.resizerTL,"mousedown",this.activateResizeStateTL.bind(this))}activateResizeStateBR(e){this.initializeResizeProperties(e,false)}activateResizeStateTL(e){this.initializeResizeProperties(e,true)}initializeResizeProperties(e,t){IM.addClass(document.body,"wrs_noselect");IM.addClass(this.overlay,"wrs_overlay_active");this.resizeDataObject={x:this.eventClient(e).X,y:this.eventClient(e).Y};this.initialWidth=parseInt(this.container.style.width,10);this.initialHeight=parseInt(this.container.style.height,10);if(!t){this.initialRight=parseInt(this.container.style.right,10);this.initialBottom=parseInt(this.container.style.bottom,10)}else{this.leftScale=true}if(!this.initialRight){this.initialRight=0}if(!this.initialBottom){this.initialBottom=0}document.body.style["user-select"]="none"}open(){this.removeClass("wrs_closed");const{isIOS:e}=this.deviceProperties;const{isAndroid:t}=this.deviceProperties;const{isMobile:i}=this.deviceProperties;if(e||t||i){this.restoreWebsiteScale();this.lockWebsiteScroll();setTimeout(()=>{this.hideKeyboard()},400)}if(!this.properties.created){this.create()}else{if(!this.properties.open){this.properties.open=true;if(!this.deviceProperties.isAndroid&&!this.deviceProperties.isIOS){this.restoreState()}}if(this.deviceProperties.isDesktop&&AM.get("modalWindowFullScreen")){this.maximize()}if(this.deviceProperties.isIOS){this.iosSoftkeyboardOpened=false;this.setContainerHeight(`${100+this.iosMeasureUnit}`)}}if(!DM.isEditorLoaded()){const e=TM.newListener("onLoad",()=>{this.contentManager.onOpen(this)});this.contentManager.addListener(e)}else{this.contentManager.onOpen(this)}}close(){this.removeClass("wrs_maximized");this.removeClass("wrs_minimized");this.removeClass("wrs_stack");this.addClass("wrs_closed");this.saveModalProperties();this.unlockWebsiteScroll();this.properties.open=false}restoreWebsiteScale(){let e=document.querySelector("meta[name=viewport]");const t=["initial-scale=","minimum-scale=","maximum-scale="];const i=["1.0","1.0","1.0"];const n=(e,t)=>{const n=e.getAttribute("content");if(n){const o=n.split(",");let r="";const s=[];for(let e=0;e=0||navigator.userAgent.search("Trident/")>=0||navigator.userAgent.search("Edge/")>=0){return true}return false}isRTL(){if(this.attributes.language==="ar"||this.attributes.language==="he"){return true}return this.rtl}addClass(e){IM.addClass(this.overlay,e);IM.addClass(this.titleBar,e);IM.addClass(this.overlay,e);IM.addClass(this.container,e);IM.addClass(this.contentContainer,e);IM.addClass(this.stackDiv,e);IM.addClass(this.minimizeDiv,e);IM.addClass(this.maximizeDiv,e);IM.addClass(this.wrapper,e)}removeClass(e){IM.removeClass(this.overlay,e);IM.removeClass(this.titleBar,e);IM.removeClass(this.overlay,e);IM.removeClass(this.container,e);IM.removeClass(this.contentContainer,e);IM.removeClass(this.stackDiv,e);IM.removeClass(this.minimizeDiv,e);IM.removeClass(this.maximizeDiv,e);IM.removeClass(this.wrapper,e)}createModalWindowDesktop(){this.addClass("wrs_modal_desktop");this.stack()}createModalWindowAndroid(){this.addClass("wrs_modal_android");window.addEventListener("resize",this.orientationChangeAndroidSoftkeyboard.bind(this))}createModalWindowIos(){this.addClass("wrs_modal_ios");window.addEventListener("resize",this.orientationChangeIosSoftkeyboard.bind(this))}restoreState(){if(this.properties.state==="maximized"){this.maximize()}else if(this.properties.state==="minimized"){this.properties.state=this.properties.previousState;this.properties.previousState="";this.minimize()}else{this.stack()}}stack(){this.properties.previousState=this.properties.state;this.properties.state="stack";this.removeClass("wrs_maximized");this.minimizeDiv.title=SM.get("minimize");this.removeClass("wrs_minimized");this.addClass("wrs_stack");const e=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(GM)})`;const t=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(YM)})`;this.minimizeDiv.setAttribute("style",e);this.minimizeDiv.setAttribute("onmouseover",`this.style = "${t}";`);this.minimizeDiv.setAttribute("onmouseout",`this.style = "${e}";`);this.restoreModalProperties();if(typeof this.resizerBR!=="undefined"&&typeof this.resizerTL!=="undefined"){this.setResizeButtonsVisibility()}this.recalculateScrollBar();this.recalculatePosition();this.recalculateScale();this.focus()}minimize(){this.saveModalProperties();this.title.style.cursor="pointer";if(this.properties.state==="minimized"&&this.properties.previousState==="stack"){this.stack()}else if(this.properties.state==="minimized"&&this.properties.previousState==="maximized"){this.maximize()}else{this.container.style.height="30px";this.container.style.width="250px";this.container.style.bottom="0px";this.container.style.right="10px";this.removeListeners();this.properties.previousState=this.properties.state;this.properties.state="minimized";this.setResizeButtonsVisibility();this.minimizeDiv.title=SM.get("maximize");if(IM.containsClass(this.overlay,"wrs_stack")){this.removeClass("wrs_stack")}else{this.removeClass("wrs_maximized")}this.addClass("wrs_minimized");const e=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(QM)})`;const t=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(ZM)})`;this.minimizeDiv.setAttribute("style",e);this.minimizeDiv.setAttribute("onmouseover",`this.style = "${t}";`);this.minimizeDiv.setAttribute("onmouseout",`this.style = "${e}";`)}}maximize(){this.saveModalProperties();if(this.properties.state!=="maximized"){this.properties.previousState=this.properties.state;this.properties.state="maximized"}this.setResizeButtonsVisibility();if(IM.containsClass(this.overlay,"wrs_minimized")){this.minimizeDiv.title=SM.get("minimize");this.removeClass("wrs_minimized")}else if(IM.containsClass(this.overlay,"wrs_stack")){this.container.style.left=null;this.container.style.top=null;this.removeClass("wrs_stack")}this.addClass("wrs_maximized");const e=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(GM)})`;const t=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(YM)})`;this.minimizeDiv.setAttribute("style",e);this.minimizeDiv.setAttribute("onmouseover",`this.style = "${t}";`);this.minimizeDiv.setAttribute("onmouseout",`this.style = "${e}";`);this.setSize(parseInt(window.innerHeight*.8,10),parseInt(window.innerWidth*.8,10));if(this.container.clientHeight>700){this.container.style.height="700px"}if(this.container.clientWidth>1200){this.container.style.width="1200px"}const{innerHeight:i}=window;const{innerWidth:n}=window;const{offsetHeight:o}=this.container;const{offsetWidth:r}=this.container;const s=i/2-o/2;const a=n/2-r/2;this.setPosition(s,a);this.recalculateScale();this.recalculatePosition();this.recalculateSize();this.focus()}reExpand(){if(this.properties.state==="minimized"){if(this.properties.previousState==="maximized"){this.maximize()}else{this.stack()}this.title.style.cursor=""}}setSize(e,t){this.container.style.height=`${e}px`;this.container.style.width=`${t}px`;this.recalculateSize()}setPosition(e,t){this.container.style.bottom=`${e}px`;this.container.style.right=`${t}px`}saveModalProperties(){if(this.properties.state==="stack"){this.properties.position.bottom=parseInt(this.container.style.bottom,10);this.properties.position.right=parseInt(this.container.style.right,10);this.properties.size.width=parseInt(this.container.style.width,10);this.properties.size.height=parseInt(this.container.style.height,10)}}restoreModalProperties(){if(this.properties.state==="stack"){this.setPosition(this.properties.position.bottom,this.properties.position.right);this.setSize(this.properties.size.height,this.properties.size.width)}}recalculateSize(){this.wrapper.style.width=`${this.container.clientWidth-12}px`;this.wrapper.style.height=`${this.container.clientHeight-38}px`;this.contentContainer.style.height=`${parseInt(this.wrapper.offsetHeight-50,10)}px`}setResizeButtonsVisibility(){if(this.properties.state==="stack"){this.resizerTL.style.visibility="visible";this.resizerBR.style.visibility="visible"}else{this.resizerTL.style.visibility="hidden";this.resizerBR.style.visibility="hidden"}}addListeners(){this.maximizeDiv.addEventListener("click",this.maximize.bind(this),true);this.stackDiv.addEventListener("click",this.stack.bind(this),true);this.minimizeDiv.addEventListener("click",this.minimize.bind(this),true);this.closeDiv.addEventListener("click",this.cancelAction.bind(this));this.title.addEventListener("click",this.reExpand.bind(this));this.overlay.addEventListener("click",this.cancelAction.bind(this));IM.addEvent(window,"mousedown",this.startDrag.bind(this));IM.addEvent(window,"mouseup",this.stopDrag.bind(this));IM.addEvent(window,"mousemove",this.drag.bind(this));IM.addEvent(window,"resize",this.onWindowResize.bind(this));IM.addEvent(this.container,"keydown",this.onKeyDown.bind(this))}removeListeners(){IM.removeEvent(window,"mousedown",this.startDrag);IM.removeEvent(window,"mouseup",this.stopDrag);IM.removeEvent(window,"mousemove",this.drag);IM.removeEvent(window,"resize",this.onWindowResize);IM.removeEvent(this.container,"keydown",this.onKeyDown)}eventClient(e){if(typeof e.clientX==="undefined"&&e.changedTouches){const t={X:e.changedTouches[0].clientX,Y:e.changedTouches[0].clientY};return t}const t={X:e.clientX,Y:e.clientY};return t}startDrag(e){if(this.properties.state==="minimized"){return}if(e.target===this.title){if(typeof this.dragDataObject==="undefined"||this.dragDataObject===null){this.dragDataObject={x:this.eventClient(e).X,y:this.eventClient(e).Y};this.lastDrag={x:"0px",y:"0px"};if(this.container.style.right===""){this.container.style.right="0px"}if(this.container.style.bottom===""){this.container.style.bottom="0px"}if(this.isIE11()){}IM.addClass(document.body,"wrs_noselect");IM.addClass(this.overlay,"wrs_overlay_active");this.limitWindow=this.getLimitWindow()}}}drag(e){if(this.dragDataObject){e.preventDefault();let t=Math.min(this.eventClient(e).Y,this.limitWindow.minPointer.y);t=Math.max(this.limitWindow.maxPointer.y,t);let i=Math.min(this.eventClient(e).X,this.limitWindow.minPointer.x);i=Math.max(this.limitWindow.maxPointer.x,i);const n=`${i-this.dragDataObject.x}px`;const o=`${t-this.dragDataObject.y}px`;this.lastDrag={x:n,y:o};this.container.style.transform=`translate3d(${n},${o},0)`}if(this.resizeDataObject){const{innerWidth:t}=window;const{innerHeight:i}=window;let n=Math.min(this.eventClient(e).X,t-this.scrollbarWidth-7);let o=Math.min(this.eventClient(e).Y,i-7);if(n<0){n=0}if(o<0){o=0}let r;if(this.leftScale){r=-1}else{r=1}this.container.style.width=`${this.initialWidth+r*(n-this.resizeDataObject.x)}px`;this.container.style.height=`${this.initialHeight+r*(o-this.resizeDataObject.y)}px`;if(!this.leftScale){if(this.resizeDataObject.x-n-this.initialWidth<-580){this.container.style.right=`${this.initialRight-(n-this.resizeDataObject.x)}px`}else{this.container.style.right=`${this.initialRight+this.initialWidth-580}px`;this.container.style.width="580px"}if(this.resizeDataObject.y-o580){this.container.style.width=`${Math.min(parseInt(this.container.style.width,10),window.innerWidth-this.scrollbarWidth)}px`;e=true}else{this.container.style.width="580px";e=true}if(parseInt(this.container.style.height,10)>338){this.container.style.height=`${Math.min(parseInt(this.container.style.height,10),window.innerHeight)}px`;e=true}else{this.container.style.height="338px";e=true}if(e){this.recalculateSize()}}recalculateScrollBar(){this.hasScrollBar=window.innerWidth>document.documentElement.clientWidth;if(this.hasScrollBar){this.scrollbarWidth=this.getScrollBarWidth()}else{this.scrollbarWidth=0}}hideKeyboard(){const e=document.createElement("input");this.container.appendChild(e);e.focus();e.blur();e.remove()}focus(){if(this.contentManager!=null&&typeof this.contentManager.onFocus!=="undefined"){this.contentManager.onFocus()}}portraitMode(){return window.innerHeight>window.innerWidth}handleOpenedIosSoftkeyboard(){if(!this.iosSoftkeyboardOpened&&this.iosDivHeight!=null&&this.iosDivHeight===`100${this.iosMeasureUnit}`){if(this.portraitMode()){this.setContainerHeight(`63${this.iosMeasureUnit}`)}else{this.setContainerHeight(`40${this.iosMeasureUnit}`)}}this.iosSoftkeyboardOpened=true}handleClosedIosSoftkeyboard(){this.iosSoftkeyboardOpened=false;this.setContainerHeight(`100${this.iosMeasureUnit}`)}orientationChangeIosSoftkeyboard(){if(this.iosSoftkeyboardOpened){if(this.portraitMode()){this.setContainerHeight(`63${this.iosMeasureUnit}`)}else{this.setContainerHeight(`40${this.iosMeasureUnit}`)}}else{this.setContainerHeight(`100${this.iosMeasureUnit}`)}}orientationChangeAndroidSoftkeyboard(){this.setContainerHeight("100%")}setContainerHeight(e){this.iosDivHeight=e;this.wrapper.style.height=e}showPopUpMessage(){if(this.properties.state==="minimized"){this.stack()}this.popup.show()}setTitle(e){this.title.innerHTML=e}getElementId(e){return`${e}[${this.instanceId}]`}}var eS;var tS=eS; +/*! http://mths.be/codepointat v0.1.0 by @mathias */if(!String.prototype.codePointAt){(function(){"use strict";var e=function(e){if(this==null){throw TypeError()}var t=String(this);var i=t.length;var n=e?Number(e):0;if(n!=n){n=0}if(n<0||n>=i){return undefined}var o=t.charCodeAt(n);var r;if(o>=55296&&o<=56319&&i>n+1){r=t.charCodeAt(n+1);if(r>=56320&&r<=57343){return(o-55296)*1024+r-56320+65536}}return o};if(Object.defineProperty){Object.defineProperty(String.prototype,"codePointAt",{value:e,configurable:true,writable:true})}else{String.prototype.codePointAt=e}})()}if(typeof Object.assign!="function"){Object.defineProperty(Object,"assign",{value:function e(t,i){"use strict";if(t==null){throw new TypeError("Cannot convert undefined or null to object")}var n=Object(t);for(var o=1;o{const e=navigator.userAgent;let t="none";if(e.search("Edge/")>=0){t="EDGE"}else if(e.search("Chrome/")>=0){t="CHROME"}else if(e.search("Trident/")>=0){t="IE"}else if(e.search("Firefox/")>=0){t="FIREFOX"}else if(e.search("Safari/")>=0){t="SAFARI"}return t})();this.listeners=new TM;this.serviceProviderProperties={};if("serviceProviderProperties"in e){this.serviceProviderProperties=e.serviceProviderProperties}else{throw new Error("serviceProviderProperties property missing.")}}static get globalListeners(){return nS._globalListeners}static set globalListeners(e){nS._globalListeners=e}static get initialized(){return nS._initialized}static set initialized(e){nS._initialized=e}setIntegrationModel(e){this.integrationModel=e}setEnvironment(e){if("editor"in e){this.environment.editor=e.editor}if("mode"in e){this.environment.mode=e.mode}if("version"in e){this.environment.version=e.version}}getModalDialog(){return this.modalDialog}init(){if(!nS.initialized){const e=TM.newListener("onInit",()=>{const e=EM.getService("configurationjs","","get");const t=JSON.parse(e);AM.addConfiguration(t);AM.addConfiguration(VM);SM.language=this.language;this.listeners.fire("onLoad",{})});EM.addListener(e);EM.init(this.serviceProviderProperties);nS.initialized=true}else{this.listeners.fire("onLoad",{})}}addListener(e){this.listeners.add(e)}static addGlobalListener(e){nS.globalListeners.add(e)}beforeUpdateFormula(e,t){const i=new FM;i.mathml=e;i.wirisProperties={};if(t!=null){Object.keys(t).forEach(e=>{i.wirisProperties[e]=t[e]})}i.language=this.language;i.editMode=this.editMode;if(this.listeners.fire("onBeforeFormulaInsertion",i)){return{}}if(nS.globalListeners.fire("onBeforeFormulaInsertion",i)){return{}}return{mathml:i.mathml,wirisProperties:i.wirisProperties}}insertFormula(e,t,i,n){const o={};if(!i){this.insertElementOnSelection(null,e,t)}else if(this.editMode==="latex"){o.latex=PM.getLatexFromMathML(i);if(!!this.integrationModel.fillNonLatexNode&&!o.latex){const n=new FM;n.editMode=this.editMode;n.windowTarget=t;n.focusElement=e;n.latex=o.latex;this.integrationModel.fillNonLatexNode(n,t,i)}else{o.node=t.document.createTextNode(`$$${o.latex}$$`)}this.insertElementOnSelection(o.node,e,t)}else{o.node=RM.mathmlToImgObject(t.document,i,n,this.language);this.insertElementOnSelection(o.node,e,t)}return o}afterUpdateFormula(e,t,i,n){const o=new FM;o.editMode=this.editMode;o.windowTarget=t;o.focusElement=e;o.node=i;o.latex=n;if(this.listeners.fire("onAfterFormulaInsertion",o)){return{}}if(nS.globalListeners.fire("onAfterFormulaInsertion",o)){return{}}return{}}placeCaretAfterNode(e){this.integrationModel.getSelection();const t=e.ownerDocument;if(typeof t.getSelection!=="undefined"&&!!e.parentElement){const i=t.createRange();i.setStartAfter(e);i.collapse(true);const n=t.getSelection();n.removeAllRanges();n.addRange(i);t.body.focus()}}insertElementOnSelection(e,t,i){if(this.editionProperties.isNewElement){if(e){if(t.type==="textarea"){IM.updateTextArea(t,e.textContent)}else if(document.selection&&document.getSelection===0){let t=i.document.selection.createRange();i.document.execCommand("InsertImage",false,e.src);if(!("parentElement"in t)){i.document.execCommand("delete",false);t=i.document.selection.createRange();i.document.execCommand("InsertImage",false,e.src)}if("parentElement"in t){const i=t.parentElement();if(i.nodeName.toUpperCase()==="IMG"){i.parentNode.replaceChild(e,i)}else{t.pasteHTML(IM.createObjectCode(e))}}}else{const t=this.integrationModel.getSelection();let i=null;if(this.editionProperties.range){({range:i}=this.editionProperties);this.editionProperties.range=null}else{i=t.getRangeAt(0)}i.deleteContents();let n=i.startContainer;const o=i.startOffset;if(n.nodeType===3){n=n.splitText(o);n.parentNode.insertBefore(e,n)}else if(n.nodeType===1){n.insertBefore(e,n.childNodes[o])}this.placeCaretAfterNode(e)}}else if(t.type==="textarea"){t.focus()}else{const e=this.integrationModel.getSelection();e.removeAllRanges();if(this.editionProperties.range){const{range:t}=this.editionProperties;this.editionProperties.range=null;e.addRange(t)}}}else if(this.editionProperties.latexRange){if(document.selection&&document.getSelection===0){this.editionProperties.isNewElement=true;this.editionProperties.latexRange.select();this.insertElementOnSelection(e,t,i)}else{this.editionProperties.latexRange.deleteContents();this.editionProperties.latexRange.insertNode(e);this.placeCaretAfterNode(e)}}else if(t.type==="textarea"){let i;if(typeof this.integrationModel.getSelectedItem!=="undefined"){i=this.integrationModel.getSelectedItem(t,false)}else{i=IM.getSelectedItemOnTextarea(t)}IM.updateExistingTextOnTextarea(t,e.textContent,i.startPosition,i.endPosition)}else{if(e&&e.nodeName.toLowerCase()==="img"){LM.removeImgDataAttributes(this.editionProperties.temporalImage);LM.clone(e,this.editionProperties.temporalImage)}else{this.editionProperties.temporalImage.remove()}this.placeCaretAfterNode(this.editionProperties.temporalImage)}}openModalDialog(e,t){this.editMode="images";try{if(t){e.contentWindow.focus();const t=e.contentWindow.getSelection();this.editionProperties.range=t.getRangeAt(0)}else{e.focus();const t=getSelection();this.editionProperties.range=t.getRangeAt(0)}}catch(e){this.editionProperties.range=null}if(t===undefined){t=true}this.editionProperties.latexRange=null;if(e){let i;if(typeof this.integrationModel.getSelectedItem!=="undefined"){i=this.integrationModel.getSelectedItem(e,t)}else{i=IM.getSelectedItem(e,t)}if(i){if(!i.caretPosition&&IM.containsClass(i.node,AM.get("imageClassName"))){this.editionProperties.temporalImage=i.node;this.editionProperties.isNewElement=false}else if(i.node.nodeType===3){if(this.integrationModel.getMathmlFromTextNode){const e=this.integrationModel.getMathmlFromTextNode(i.node,i.caretPosition);if(e){this.editMode="latex";this.editionProperties.isNewElement=false;this.editionProperties.temporalImage=document.createElement("img");this.editionProperties.temporalImage.setAttribute(AM.get("imageMathmlAttribute"),xM.safeXmlEncode(e))}}else{const n=PM.getLatexFromTextNode(i.node,i.caretPosition);if(n){const i=PM.getMathMLFromLatex(n.latex);this.editMode="latex";this.editionProperties.isNewElement=false;this.editionProperties.temporalImage=document.createElement("img");this.editionProperties.temporalImage.setAttribute(AM.get("imageMathmlAttribute"),xM.safeXmlEncode(i));const o=t?e.contentWindow:window;if(e.tagName.toLowerCase()!=="textarea"){if(document.selection){let e=0;let t=n.startNode.previousSibling;while(t){e+=IM.getNodeLength(t);t=t.previousSibling}this.editionProperties.latexRange=o.document.selection.createRange();this.editionProperties.latexRange.moveToElementText(n.startNode.parentNode);this.editionProperties.latexRange.move("character",e+n.startPosition);this.editionProperties.latexRange.moveEnd("character",n.latex.length+4)}else{this.editionProperties.latexRange=o.document.createRange();this.editionProperties.latexRange.setStart(n.startNode,n.startPosition);this.editionProperties.latexRange.setEnd(n.endNode,n.endPosition)}}}}}}else if(e.tagName.toLowerCase()==="textarea"){this.editMode="latex"}}const i=AM.get("editorAttributes").split(", ");const n={};for(let e=0,t=i.length;e{this.contentManager.isNewElement=this.editionProperties.isNewElement;if(this.editionProperties.temporalImage!=null){const e=xM.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(AM.get("imageMathmlAttribute")));this.contentManager.mathML=e}});this.contentManager.addListener(e);this.contentManager.init();this.modalDialog.setContentManager(this.contentManager);this.contentManager.setModalDialogInstance(this.modalDialog)}else{this.contentManager.isNewElement=this.editionProperties.isNewElement;if(this.editionProperties.temporalImage!=null){const e=xM.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(AM.get("imageMathmlAttribute")));this.contentManager.mathML=e}}this.contentManager.setIntegrationModel(this.integrationModel);this.modalDialog.open()}getCustomEditors(){return this.customEditors}}nS._globalListeners=new TM;nS._initialized=false;class oS{constructor(e){this.language="en";this.serviceProviderProperties={};if("serviceProviderProperties"in e){this.serviceProviderProperties=e.serviceProviderProperties}this.configurationService="";if("configurationService"in e){this.serviceProviderProperties.URI=e.configurationService;console.warn("Deprecated property configurationService. Use serviceParameters on instead.",[e.configurationService])}this.version="version"in e?e.version:"";this.target=null;if("target"in e){this.target=e.target}else{throw new Error("IntegrationModel constructor error: target property missed.")}if("scriptName"in e){this.scriptName=e.scriptName}this.callbackMethodArguments={};if("callbackMethodArguments"in e){this.callbackMethodArguments=e.callbackMethodArguments}this.environment={};if("environment"in e){this.environment=e.environment}this.isIframe=false;if(this.target!=null){this.isIframe=this.target.tagName.toUpperCase()==="IFRAME"}this.editorObject=null;if("editorObject"in e){this.editorObject=e.editorObject}this.rtl=false;if("rtl"in e){this.rtl=e.rtl}this.managesLanguage=false;if("managesLanguage"in e){this.managesLanguage=e.managesLanguage}this.temporalImageResizing=false;this.core=null;this.listeners=new TM;if("integrationParameters"in e){oS.integrationParameters.forEach(t=>{if(t in e.integrationParameters){const i=e.integrationParameters[t];if(Object.keys(i).length!==0){this[t]=i}}})}}init(){this.language=this.getLanguage();const e=TM.newListener("onLoad",()=>{this.callbackFunction(this.callbackMethodArguments)});if(this.serviceProviderProperties.URI.indexOf("configuration")!==-1){const e=this.serviceProviderProperties.URI;const t=EM.getServerLanguageFromService(e);this.serviceProviderProperties.server=t;const i=this.serviceProviderProperties.URI.indexOf("configuration");const n=this.serviceProviderProperties.URI.substring(0,i);this.serviceProviderProperties.URI=n}let t=this.serviceProviderProperties.URI;t=t.indexOf("/")===0||t.indexOf("http")===0?t:IM.concatenateUrl(this.getPath(),t);this.serviceProviderProperties.URI=t;const i={};i.serviceProviderProperties=this.serviceProviderProperties;this.setCore(new nS(i));this.core.addListener(e);this.core.language=this.language;this.core.init();this.core.setEnvironment(this.environment)}getPath(){if(typeof this.scriptName==="undefined"){throw new Error("scriptName property needed for getPath.")}const e=document.getElementsByTagName("script");let t="";for(let i=0;i=0){t=e[i].src.substr(0,n-1)}}return t}getVersion(){return this.version}setLanguage(e){this.language=e}setCore(e){this.core=e;e.setIntegrationModel(this)}getCore(){return this.core}setTarget(e){this.target=e;this.isIframe=this.target.tagName.toUpperCase()==="IFRAME"}setEditorObject(e){this.editorObject=e}openNewFormulaEditor(){this.core.editionProperties.isNewElement=true;this.core.openModalDialog(this.target,this.isIframe)}openExistingFormulaEditor(){this.core.editionProperties.isNewElement=false;this.core.openModalDialog(this.target,this.isIframe)}updateFormula(e){if(this.editorParameters){e=com.wiris.editor.util.EditorUtils.addAnnotation(e,"application/vnd.wiris.mtweb-params+json",JSON.stringify(this.editorParameters))}let t;let i;const n=null;if(this.isIframe){t=this.target.contentWindow;i=this.target.contentWindow}else{t=this.target;i=window}let o=this.core.beforeUpdateFormula(e,n);if(!o){return""}o=this.insertFormula(t,i,o.mathml,o.wirisProperties);if(!o){return""}return this.core.afterUpdateFormula(o.focusElement,o.windowTarget,o.node,o.latex)}insertFormula(e,t,i,n){return this.core.insertFormula(e,t,i,n)}getSelection(){if(this.isIframe){this.target.contentWindow.focus();return this.target.contentWindow.getSelection()}this.target.focus();return window.getSelection()}addEvents(){const e=this.isIframe?this.target.contentWindow.document:this.target;IM.addElementEvents(e,(e,t)=>{this.doubleClickHandler(e,t)},(e,t)=>{this.mousedownHandler(e,t)},(e,t)=>{this.mouseupHandler(e,t)})}doubleClickHandler(e){if(e.nodeName.toLowerCase()==="img"){this.core.getCustomEditors().disable();const t=AM.get("imageCustomEditorName");if(e.hasAttribute(t)){const i=e.getAttribute(t);this.core.getCustomEditors().enable(i)}if(IM.containsClass(e,AM.get("imageClassName"))){this.core.editionProperties.temporalImage=e;this.core.editionProperties.isNewElement=true;this.openExistingFormulaEditor()}}}mouseupHandler(){if(this.temporalImageResizing){setTimeout(()=>{LM.fixAfterResize(this.temporalImageResizing)},10)}}mousedownHandler(e){if(e.nodeName.toLowerCase()==="img"){if(IM.containsClass(e,AM.get("imageClassName"))){this.temporalImageResizing=e}}}getLanguage(){return this.getBrowserLanguage()}getBrowserLanguage(){let e="en";if(navigator.userLanguage){e=navigator.userLanguage.substring(0,2)}else if(navigator.language){e=navigator.language.substring(0,2)}else{e="en"}return e}callbackFunction(){const e=TM.newListener("onTargetReady",()=>{this.addEvents(this.target)});this.listeners.add(e)}notifyWindowClosed(){}getMathmlFromTextNode(e,t){}fillNonLatexNode(e,t,i){}getSelectedItem(e,t){}}oS.prototype.getMathmlFromTextNode=undefined;oS.prototype.fillNonLatexNode=undefined;oS.prototype.getSelectedItem=undefined;oS.integrationParameters=["serviceProviderProperties","editorParameters"];class rS extends oS{constructor(e){const t=e.editorObject;if(typeof t.config!="undefined"&&typeof t.config.get("mathTypeParameters")!="undefined"){e.integrationParameters=t.config.get("mathTypeParameters")}super(e);this.integrationFolderName="ckeditor_wiris"}getLanguage(){return this.editorObject.config.get("language")}addEditorListeners(){const e=this.editorObject;if(typeof e.config.wirislistenersdisabled=="undefined"||!e.config.wirislistenersdisabled){this.checkElement()}}checkElement(){const e=this.editorObject;const t=e.sourceElement;if(!t.wirisActive){this.setTarget(t);this.addEvents();t.wirisActive=true}}doubleClickHandler(e,t){if(e.nodeName.toLowerCase()=="img"){if(IM.containsClass(e,AM.get("imageClassName"))){if(typeof t.stopPropagation!="undefined"){t.stopPropagation()}else{t.returnValue=false}this.core.getCustomEditors().disable();const i=e.getAttribute(AM.get("imageCustomEditorName"));if(i){this.core.getCustomEditors().enable(i)}this.core.editionProperties.temporalImage=e;this.openExistingFormulaEditor()}}}getCorePath(){return null}callbackFunction(){super.callbackFunction();this.addEditorListeners()}openNewFormulaEditor(){this.core.editionProperties.selection=this.editorObject.editing.view.document.selection;return super.openNewFormulaEditor()}insertMathml(e){return this.editorObject.model.change(t=>{const i=this.getCore();const n=t.createElement("mathml",{formula:e});if(i.editionProperties.isNewElement){if(!e)return;let i=this.core.editionProperties.selection||this.editorObject.editing.view.document.selection;let o=this.editorObject.editing.mapper.toModelPosition(i.getLastPosition());t.insert(n,o);if(!i.isCollapsed){for(const e of i.getRanges()){t.remove(this.editorObject.editing.mapper.toModelRange(e))}}}else{const o=i.editionProperties.temporalImage;const r=this.editorObject.editing.view.domConverter.domToView(o).parent;const s=this.editorObject.editing.mapper.toModelElement(r);const a=this.editorObject.model.createPositionBefore(s);if(e){t.insert(n,a)}t.remove(s)}return n})}findText(e){let t=e;let i;while(!i){i=this.editorObject.editing.mapper.toModelElement(this.editorObject.editing.view.domConverter.domToView(t));t=t.parentElement}const n=this.editorObject.model.createRangeIn(i);const o=Array.from(n.getItems());for(const t of o){if(t.is("textProxy")&&t.data==e.data.replace(String.fromCharCode(160)," ")){return t.textNode}}}insertFormula(e,t,i,n){let o={};if(!i){this.insertMathml("")}else if(this.core.editMode=="latex"){o.latex=PM.getLatexFromMathML(i);o.node=t.document.createTextNode("$$"+o.latex+"$$");this.editorObject.model.change(e=>{const t=this.core.editionProperties.latexRange;const i=this.findText(t.startContainer);const n=this.findText(t.endContainer);const r=e.createPositionAt(i.parent,i.startOffset+t.startOffset);const s=e.createPositionAt(n.parent,n.startOffset+t.endOffset);const a=e.createRange(r,s);e.remove(a);e.insertText("$$"+o.latex+"$$",i.getAttributes(),r)})}else{o.node=this.editorObject.editing.view.domConverter.viewToDom(this.editorObject.editing.mapper.toViewElement(this.insertMathml(i)),t.document)}return o}notifyWindowClosed(){this.editorObject.editing.view.focus()}}class sS extends Dw{constructor(e){super(e)}execute(e={}){if(!e.hasOwnProperty("integration")||!(e.integration instanceof rS)){throw'Must pass a valid CKEditor5Integration instance as attribute "integration" of options'}this.integration=e.integration;this.setEditor();this.openEditor()}setEditor(){this.integration.core.getCustomEditors().disable()}openEditor(){const e=this._getSelectedImage();if(typeof e!=="undefined"&&e!==null&&e.classList.contains(WirisPlugin.Configuration.get("imageClassName"))){this.integration.core.editionProperties.temporalImage=e;this.integration.openExistingFormulaEditor()}else{this.integration.openNewFormulaEditor()}}_getSelectedImage(){const e=this.editor.editing.view.document.selection;if(e.isCollapsed||e.rangeCount!==1){return}const t=e.getFirstRange();let i;for(const e of t){if(e.item.name!=="span"){return}i=e.item.getChild(0);break}if(!i){return}return this.editor.editing.view.domConverter.mapViewToDom(i)}}class aS extends sS{setEditor(){this.integration.core.getCustomEditors().enable("chemistry")}}var lS='\n\x3c!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --\x3e\n\n\n\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n';var cS='\n\x3c!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --\x3e\n\n\n\n\n';class dS extends Rw{static get requires(){return[uA]}static get pluginName(){return"MathType"}init(){const e=this._addIntegration();this._addCommands();this._addViews(e);this._addSchema();this._addConverters();this._exposeWiris()}_addIntegration(){const e=this.editor;const t={};t.environment={};t.environment.editor="CKEditor5";t.editorObject=e;t.serviceProviderProperties={};t.serviceProviderProperties.URI="https://www.wiris.net/demo/plugins/app";t.serviceProviderProperties.server="java";t.target=e.sourceElement;t.scriptName="bundle.js";t.managesLanguage=true;let i;if(t.target){i=new rS(t);i.init();i.listeners.fire("onTargetReady",{});i.checkElement();this.listenTo(e.editing.view.document,"click",(e,t)=>{if(t.domEvent.detail==2){i.doubleClickHandler(t.domTarget,t.domEvent);e.stop()}},{priority:"highest"})}return i}_addCommands(){const e=this.editor;e.commands.add("MathType",new sS(e));e.commands.add("ChemType",new aS(e))}_addViews(e){const t=this.editor;t.ui.componentFactory.add("MathType",i=>{const n=new rw(i);n.bind("isEnabled").to(t.commands.get("MathType"),"isEnabled");n.set({label:"Insert a math equation - MathType",icon:lS,tooltip:true});n.on("execute",()=>{t.execute("MathType",{integration:e})});return n});t.ui.componentFactory.add("ChemType",i=>{const n=new rw(i);n.bind("isEnabled").to(t.commands.get("ChemType"),"isEnabled");n.set({label:"Insert a chemistry formula - ChemType",icon:cS,tooltip:true});n.on("execute",()=>{t.execute("ChemType",{integration:e})});return n});t.editing.view.addObserver(TP)}_addSchema(){const e=this.editor.model.schema;e.register("mathml",{allowWhere:"$text",isObject:true,isInline:true,allowAttributes:["formula"]})}_addConverters(){const e=this.editor;e.conversion.for("upcast").elementToElement({view:{name:"span",classes:"ck-math-widget"},model:(e,t)=>{const i=xM.safeXmlDecode(e.getChild(0).getAttribute("data-mathml"));return t.createElement("mathml",{formula:i})}});e.data.upcastDispatcher.on("element:math",(i,n,o)=>{const{consumable:r,writer:s}=o;const a=n.viewItem;if(!r.test(a,{name:true})){return}let l=t(a);const c=new vM(e.editing.view.document);const d=new mT(e.editing.view.document);const u=d.createDocumentFragment(a.getChildren());const h=[...a.getAttributes()].map(([e,t])=>` ${e}="${t}"`).join("");let f=c.toData(u)||"";f=`${f}`;const m=l?s.createText(RM.initParse(f,e.config.get("language"))):s.createElement("mathml",{formula:f});const g=o.splitToAllowedParent(m,n.modelCursor);if(!g){return}o.writer.insert(m,g.position);r.consume(a,{name:true});const p=o.getSplitParts(m);n.modelRange=s.createRange(o.writer.createPositionBefore(m),o.writer.createPositionAfter(p[p.length-1]));if(g.cursorParent){n.modelCursor=o.writer.createPositionAt(g.cursorParent,0)}else{n.modelCursor=n.modelRange.end}});function t(e){const t=e.getChild(0);if(!t||t.name!=="semantics")return false;for(const e of t.getChildren()){if(e.name==="annotation"&&e.getAttribute("encoding")==="LaTeX"){return true}}return false}e.conversion.for("editingDowncast").elementToElement({model:"mathml",view:o});e.conversion.for("dataDowncast").elementToElement({model:"mathml",view:n});function i(e,t){if(t.is("text")){return e.createText(t.data)}else if(t.is("element")){if(t.is("emptyElement")){return e.createEmptyElement(t.name,t.getAttributes())}else{const n=e.createContainerElement(t.name,t.getAttributes());for(const o of t.getChildren()){e.insert(e.createPositionAt(n,"end"),i(e,o))}return n}}throw new Exception("Given node has unsupported type.")}function n(e,t){const n=new Ap(t.document);let o=RM.endParseSaveMode(e.getAttribute("formula"));if(!AM.get("saveHandTraces")){o=xM.removeAnnotation(o,"application/json")}const r=n.toView(o).getChild(0);return i(t,r)}function o(e,t){const i=t.createContainerElement("span",{class:"ck-math-widget"});const n=r(e,t);t.insert(t.createPositionAt(i,0),n);return lx(i,t)}function r(t,i){const n=new Ap(i.document);const o=t.getAttribute("formula");const r=RM.initParse(o,e.config.get("language"));const s=n.toView(r).getChild(0);return i.createEmptyElement("img",s.getAttributes())}}_exposeWiris(){window.WirisPlugin={Core:nS,Parser:RM,Image:LM,MathML:xM,Util:IM,Configuration:AM,Listeners:TM,IntegrationModel:oS,Latex:PM}}}function uS(e,t){return e=>{e.on("attribute:url:media",i)};function i(i,n,o){if(!o.consumable.consume(n.item,i.name)){return}const r=n.attributeNewValue;const s=o.writer;const a=o.mapper.toViewElement(n.item);const l=[...a.getChildren()].find(e=>e.getCustomProperty("media-content"));s.remove(l);const c=e.getMediaViewElement(s,r,t);s.insert(s.createPositionAt(a,0),c)}}function hS(e,t,i){t.setCustomProperty("media",true,e);return lx(e,t,{label:i})}function fS(e){const t=e.getSelectedElement();if(t&&mS(t)){return t}return null}function mS(e){return!!e.getCustomProperty("media")&&ax(e)}function gS(e,t,i,n){const o=e.createContainerElement("figure",{class:"media"});o.getFillerOffset=wS;e.insert(e.createPositionAt(o,0),t.getMediaViewElement(e,i,n));return o}function pS(e){const t=e.getSelectedElement();if(t&&t.is("media")){return t}return null}function bS(e,t,i){e.change(n=>{const o=n.createElement("media",{url:t});e.insertContent(o,i);n.setSelection(o,"on")})}function wS(){return null}class _S extends Dw{refresh(){const e=this.editor.model;const t=e.document.selection;const i=e.schema;const n=t.getFirstPosition();const o=pS(t);let r=n.parent;if(r!=r.root){r=r.parent}this.value=o?o.getAttribute("url"):null;this.isEnabled=i.checkChild(r,"media")}execute(e){const t=this.editor.model;const i=t.document.selection;const n=pS(i);if(n){t.change(t=>{t.setAttribute("url",e,n)})}else{const n=fx(i,t);bS(t,e,n)}}}var kS='';const vS="0 0 64 42";class yS{constructor(e,t){const i=t.providers;const n=t.extraProviders||[];const o=new Set(t.removeProviders);const r=i.concat(n).filter(e=>{const t=e.name;if(!t){console.warn(Object(ss["a"])("media-embed-no-provider-name: The configured media provider has no name and cannot be used."),{provider:e});return false}return!o.has(t)});this.locale=e;this.providerDefinitions=r}hasMedia(e){return!!this._getMedia(e)}getMediaViewElement(e,t,i){return this._getMedia(t).getViewElement(e,i)}_getMedia(e){if(!e){return new xS(this.locale)}e=e.trim();for(const t of this.providerDefinitions){const i=t.html;let n=t.url;if(!Array.isArray(n)){n=[n]}for(const t of n){const n=this._getUrlMatches(e,t);if(n){return new xS(this.locale,e,n,i)}}}return null}_getUrlMatches(e,t){let i=e.match(t);if(i){return i}let n=e.replace(/^https?:\/\//,"");i=n.match(t);if(i){return i}n=n.replace(/^www\./,"");i=n.match(t);if(i){return i}return null}}class xS{constructor(e,t,i,n){this.url=this._getValidUrl(t);this._t=e.t;this._match=i;this._previewRenderer=n}getViewElement(e,t){const i={};let n;if(t.renderForEditingView||t.renderMediaPreview&&this.url&&this._previewRenderer){if(this.url){i["data-oembed-url"]=this.url}if(t.renderForEditingView){i.class="ck-media__wrapper"}const o=this._getPreviewHtml(t);n=e.createUIElement("div",i,(function(e){const t=this.toDomElement(e);t.innerHTML=o;return t}))}else{if(this.url){i.url=this.url}n=e.createEmptyElement("oembed",i)}e.setCustomProperty("media-content",true,n);return n}_getPreviewHtml(e){if(this._previewRenderer){return this._previewRenderer(this._match)}else{if(this.url&&e.renderForEditingView){return this._getPlaceholderHtml()}return""}}_getPlaceholderHtml(){const e=new nw;const t=new tw;e.text=this._t("Open media in new tab");t.content=kS;t.viewBox=vS;const i=new $p({tag:"div",attributes:{class:"ck ck-reset_all ck-media__placeholder"},children:[{tag:"div",attributes:{class:"ck-media__placeholder__icon"},children:[t]},{tag:"a",attributes:{class:"ck-media__placeholder__url",target:"_blank",rel:"noopener noreferrer",href:this.url},children:[{tag:"span",attributes:{class:"ck-media__placeholder__url__text"},children:[this.url]},e]}]}).render();return i.outerHTML}_getValidUrl(e){if(!e){return null}if(e.match(/^https?/)){return e}return"https://"+e}}var AS=i(106);class CS extends Rw{static get pluginName(){return"MediaEmbedEditing"}constructor(e){super(e);e.config.define("mediaEmbed",{providers:[{name:"dailymotion",url:/^dailymotion\.com\/video\/(\w+)/,html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"spotify",url:[/^open\.spotify\.com\/(artist\/\w+)/,/^open\.spotify\.com\/(album\/\w+)/,/^open\.spotify\.com\/(track\/\w+)/],html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"youtube",url:[/^(?:m\.)?youtube\.com\/watch\?v=([\w-]+)/,/^(?:m\.)?youtube\.com\/v\/([\w-]+)/,/^youtube\.com\/embed\/([\w-]+)/,/^youtu\.be\/([\w-]+)/],html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"vimeo",url:[/^vimeo\.com\/(\d+)/,/^vimeo\.com\/[^/]+\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/album\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/channels\/[^/]+\/(\d+)/,/^vimeo\.com\/groups\/[^/]+\/videos\/(\d+)/,/^vimeo\.com\/ondemand\/[^/]+\/(\d+)/,/^player\.vimeo\.com\/video\/(\d+)/],html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"instagram",url:/^instagram\.com\/p\/(\w+)/},{name:"twitter",url:/^twitter\.com/},{name:"googleMaps",url:/^google\.com\/maps/},{name:"flickr",url:/^flickr\.com/},{name:"facebook",url:/^facebook\.com/}]});this.registry=new yS(e.locale,e.config.get("mediaEmbed"))}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;const o=e.config.get("mediaEmbed.previewsInData");const r=this.registry;e.commands.add("mediaEmbed",new _S(e));t.register("media",{isObject:true,isBlock:true,allowWhere:"$block",allowAttributes:["url"]});n.for("dataDowncast").elementToElement({model:"media",view:(e,t)=>{const i=e.getAttribute("url");return gS(t,r,i,{renderMediaPreview:i&&o})}});n.for("dataDowncast").add(uS(r,{renderMediaPreview:o}));n.for("editingDowncast").elementToElement({model:"media",view:(e,t)=>{const n=e.getAttribute("url");const o=gS(t,r,n,{renderForEditingView:true});return hS(o,t,i("media widget"))}});n.for("editingDowncast").add(uS(r,{renderForEditingView:true}));n.for("upcast").elementToElement({view:{name:"oembed",attributes:{url:true}},model:(e,t)=>{const i=e.getAttribute("url");if(r.hasMedia(i)){return t.createElement("media",{url:i})}}}).elementToElement({view:{name:"div",attributes:{"data-oembed-url":true}},model:(e,t)=>{const i=e.getAttribute("data-oembed-url");if(r.hasMedia(i)){return t.createElement("media",{url:i})}}})}}const TS=/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w.-]+)+[\w\-._~:/?#[\]@!$&'()*+,;=]+$/;class ES extends Rw{static get requires(){return[vk,wv]}static get pluginName(){return"AutoMediaEmbed"}constructor(e){super(e);this._timeoutId=null;this._positionToInsert=null}init(){const e=this.editor;const t=e.model.document;this.listenTo(e.plugins.get(vk),"inputTransformation",()=>{const e=t.selection.getFirstRange();const i=Rg.fromPosition(e.start);i.stickiness="toPrevious";const n=Rg.fromPosition(e.end);n.stickiness="toNext";t.once("change:data",()=>{this._embedMediaBetweenPositions(i,n);i.detach();n.detach()},{priority:"high"})});e.commands.get("undo").on("execute",()=>{if(this._timeoutId){Ld.window.clearTimeout(this._timeoutId);this._positionToInsert.detach();this._timeoutId=null;this._positionToInsert=null}},{priority:"high"})}_embedMediaBetweenPositions(e,t){const i=this.editor;const n=i.plugins.get(CS).registry;const o=new lf(e,t);const r=o.getWalker({ignoreElementEnd:true});let s="";for(const e of r){if(e.item.is("textProxy")){s+=e.item.data}}s=s.trim();if(!s.match(TS)){o.detach();return}if(!n.hasMedia(s)){o.detach();return}const a=i.commands.get("mediaEmbed");if(!a.isEnabled){o.detach();return}this._positionToInsert=Rg.fromPosition(e);this._timeoutId=Ld.window.setTimeout(()=>{i.model.change(e=>{this._timeoutId=null;e.remove(o);o.detach();let t;if(this._positionToInsert.root.rootName!=="$graveyard"){t=this._positionToInsert}bS(i.model,s,t);this._positionToInsert.detach();this._positionToInsert=null})},100)}}var PS=i(108);class MS extends _b{constructor(e,t){super(t);const i=t.t;this.focusTracker=new Ep;this.keystrokes=new mp;this.urlInputView=this._createUrlInput();this.saveButtonView=this._createButton(i("Save"),CA,"ck-button-save");this.saveButtonView.type="submit";this.cancelButtonView=this._createButton(i("Cancel"),TA,"ck-button-cancel","cancel");this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this._validators=e;this.setTemplate({tag:"form",attributes:{class:["ck","ck-media-form"],tabindex:"-1"},children:[this.urlInputView,this.saveButtonView,this.cancelButtonView]})}render(){super.render();AA({view:this});const e=[this.urlInputView,this.saveButtonView,this.cancelButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element);const t=e=>e.stopPropagation();this.keystrokes.set("arrowright",t);this.keystrokes.set("arrowleft",t);this.keystrokes.set("arrowup",t);this.keystrokes.set("arrowdown",t);this.listenTo(this.urlInputView.element,"selectstart",(e,t)=>{t.stopPropagation()},{priority:"high"})}focus(){this._focusCycler.focusFirst()}get url(){return this.urlInputView.fieldView.element.value.trim()}set url(e){this.urlInputView.fieldView.element.value=e.trim()}isValid(){this.resetFormStatus();for(const e of this._validators){const t=e(this);if(t){this.urlInputView.errorText=t;return false}}return true}resetFormStatus(){this.urlInputView.errorText=null;this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){const e=this.locale.t;const t=new _A(this.locale,yA);const i=t.fieldView;this._urlInputViewInfoDefault=e("Paste the media URL in the input.");this._urlInputViewInfoTip=e("Tip: Paste the URL into the content to embed faster.");t.label=e("Media URL");t.infoText=this._urlInputViewInfoDefault;i.placeholder="https://example.com";i.on("input",()=>{t.infoText=i.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault});return t}_createButton(e,t,i,n){const o=new rw(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:i}});if(n){o.delegate("execute").to(this,n)}return o}}var SS='\n';class IS extends Rw{static get requires(){return[CS]}static get pluginName(){return"MediaEmbedUI"}init(){const e=this.editor;const t=e.commands.get("mediaEmbed");const i=e.plugins.get(CS).registry;e.ui.componentFactory.add("mediaEmbed",n=>{const o=bw(n);const r=new MS(LS(e.t,i),e.locale);this._setUpDropdown(o,r,t,e);this._setUpForm(o,r,t);return o})}_setUpDropdown(e,t,i){const n=this.editor;const o=n.t;const r=e.buttonView;e.bind("isEnabled").to(i);e.panelView.children.add(t);r.set({label:o("Insert media"),icon:SS,tooltip:true});r.on("open",()=>{t.url=i.value||"";t.urlInputView.fieldView.select();t.focus()},{priority:"low"});e.on("submit",()=>{if(t.isValid()){n.execute("mediaEmbed",t.url);s()}});e.on("change:isOpen",()=>t.resetFormStatus());e.on("cancel",()=>s());function s(){n.editing.view.focus();e.isOpen=false}}_setUpForm(e,t,i){t.delegate("submit","cancel").to(e);t.urlInputView.bind("value").to(i,"value");t.urlInputView.bind("isReadOnly").to(i,"isEnabled",e=>!e);t.saveButtonView.bind("isEnabled").to(i)}}function LS(e,t){return[t=>{if(!t.url.length){return e("The URL must not be empty.")}},i=>{if(!t.hasMedia(i.url)){return e("This media URL is not supported.")}}]}var NS=i(110);class OS extends Rw{static get requires(){return[CS,IS,ES,uA]}static get pluginName(){return"MediaEmbed"}}class RS extends Dw{refresh(){this.isEnabled=zS(this.editor.model)}execute(){const e=this.editor.model;e.change(t=>{const i=t.createElement("pageBreak");e.insertContent(i);let n=i.nextSibling;const o=n&&e.schema.checkChild(n,"$text");if(!o&&e.schema.checkChild(i.parent,"paragraph")){n=t.createElement("paragraph");e.insertContent(n,t.createPositionAfter(i))}if(n){t.setSelection(n,0)}})}}function zS(e){const t=e.schema;const i=e.document.selection;return DS(i,t,e)&&!jS(i,t)}function DS(e,t,i){const n=BS(e,i);return t.checkChild(n,"pageBreak")}function jS(e,t){const i=e.getSelectedElement();return i&&t.isObject(i)}function BS(e,t){const i=fx(e,t);const n=i.parent;if(n.isEmpty&&!n.is("$root")){return n.parent}return n}var VS=i(112);class FS extends Rw{static get pluginName(){return"PageBreakEditing"}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;t.register("pageBreak",{isObject:true,allowWhere:"$block"});n.for("dataDowncast").elementToElement({model:"pageBreak",view:(e,t)=>{const i=t.createContainerElement("div",{class:"page-break",style:"page-break-after: always"});const n=t.createContainerElement("span",{style:"display: none"});t.insert(t.createPositionAt(i,0),n);return i}});n.for("editingDowncast").elementToElement({model:"pageBreak",view:(e,t)=>{const n=i("Page break");const o=t.createContainerElement("div");const r=t.createContainerElement("span");const s=t.createText(i("Page break"));t.addClass("page-break",o);t.setCustomProperty("pageBreak",true,o);t.addClass("page-break__label",r);t.insert(t.createPositionAt(o,0),r);t.insert(t.createPositionAt(r,0),s);return HS(o,t,n)}});n.for("upcast").elementToElement({view:e=>{if(!e.is("div")||e.getStyle("page-break-after")!="always"||e.childCount!=1){return}const t=Bw(e.getChildren());if(!t.is("span")||t.getStyle("display")!="none"||t.childCount!=1){return}const i=Bw(t.getChildren());if(!i.is("text")||i.data!==" "){return}return{name:true}},model:"pageBreak"});e.commands.add("pageBreak",new RS(e))}}function HS(e,t,i){t.setCustomProperty("pageBreak",true,e);return lx(e,t,{label:i})}var WS='';class US extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("pageBreak",i=>{const n=e.commands.get("pageBreak");const o=new rw(i);o.set({label:t("Page break"),icon:WS,tooltip:true});o.bind("isEnabled").to(n,"isEnabled");this.listenTo(o,"execute",()=>{e.execute("pageBreak");e.editing.view.focus()});return o})}}class qS extends Rw{static get requires(){return[FS,US]}static get pluginName(){return"PageBreak"}}var $S='';const GS="removeFormat";class YS extends Rw{static get pluginName(){return"RemoveFormatUI"}init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(GS,i=>{const n=e.commands.get(GS);const o=new rw(i);o.set({label:t("Remove Format"),icon:$S,tooltip:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(GS);e.editing.view.focus()});return o})}}class KS extends Dw{refresh(){const e=this.editor.model;this.isEnabled=!!Bw(this._getFormattingItems(e.document.selection,e.schema))}execute(){const e=this.editor.model;const t=e.schema;e.change(i=>{for(const n of this._getFormattingItems(e.document.selection,t)){if(n.is("selection")){for(const e of this._getFormattingAttributes(n,t)){i.removeSelectionAttribute(e)}}else{const e=i.createRangeOn(n);for(const o of this._getFormattingAttributes(n,t)){i.removeAttribute(o,e)}}}})}*_getFormattingItems(e,t){const i=e=>!!Bw(this._getFormattingAttributes(e,t));for(const t of e.getRanges()){for(const e of t.getItems()){if(i(e)){yield e}}}if(i(e)){yield e}}*_getFormattingAttributes(e,t){for(const[i]of e.getAttributes()){const e=t.getAttributeProperties(i);if(e&&e.isFormatting){yield i}}}}class JS extends Rw{static get pluginName(){return"RemoveFormatEditing"}init(){const e=this.editor;e.commands.add("removeFormat",new KS(e))}}class QS extends Rw{static get requires(){return[JS,YS]}static get pluginName(){return"RemoveFormat"}}var ZS=i(114);class XS extends _b{constructor(e,t={}){super(e);const i=this.bindTemplate;this.set("label",t.label||"");this.set("class",t.class||null);this.children=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-form__header",i.to("class")]},children:this.children});const n=new _b(e);n.setTemplate({tag:"span",attributes:{class:["ck","ck-form__header__label"]},children:[{text:i.to("label")}]});this.children.add(n)}}class eI extends XS{constructor(e,t){super(e);const i=e.t;this.set("class","ck-special-characters-navigation");this.groupDropdownView=this._createGroupDropdown(t);this.groupDropdownView.panelPosition=e.uiLanguageDirection==="rtl"?"se":"sw";this.label=i("Special characters");this.children.add(this.groupDropdownView)}get currentGroupName(){return this.groupDropdownView.value}_createGroupDropdown(e){const t=this.locale;const i=t.t;const n=bw(t);const o=this._getCharacterGroupListItemDefinitions(n,e);n.set("value",o.first.model.label);n.buttonView.bind("label").to(n,"value");n.buttonView.set({isOn:false,withText:true,tooltip:i("Character categories"),class:["ck-dropdown__button_label-width_auto"]});n.on("execute",e=>{n.value=e.source.label});n.delegate("execute").to(this);_w(n,o);return n}_getCharacterGroupListItemDefinitions(e,t){const i=new xs;for(const n of t){const t={type:"button",model:new sk({label:n,withText:true})};t.model.bind("isOn").to(e,"value",e=>e===t.model.label);i.add(t)}return i}}var tI=i(116);class iI extends _b{constructor(e){super(e);this.tiles=this.createCollection();this.setTemplate({tag:"div",children:[{tag:"div",attributes:{class:["ck","ck-character-grid__tiles"]},children:this.tiles}],attributes:{class:["ck","ck-character-grid"]}})}createTile(e,t){const i=new rw(this.locale);i.set({label:e,withText:true,class:"ck-character-grid__tile"});i.extendTemplate({attributes:{title:t},on:{mouseover:i.bindTemplate.to("mouseover")}});i.on("mouseover",()=>{this.fire("tileHover",{name:t,character:e})});i.on("execute",()=>{this.fire("execute",{name:t,character:e})});return i}}var nI=i(118);class oI extends _b{constructor(e){super(e);const t=this.bindTemplate;this.set("character",null);this.set("name",null);this.bind("code").to(this,"character",rI);this.setTemplate({tag:"div",children:[{tag:"span",attributes:{class:["ck-character-info__name"]},children:[{text:t.to("name",e=>e?e:"​")}]},{tag:"span",attributes:{class:["ck-character-info__code"]},children:[{text:t.to("code")}]}],attributes:{class:["ck","ck-character-info"]}})}}function rI(e){if(e===null){return""}const t=e.codePointAt(0).toString(16);return"U+"+("0000"+t).slice(-4)}var sI='';var aI=i(120);const lI="All";class cI extends Rw{static get requires(){return[Jk]}static get pluginName(){return"SpecialCharacters"}constructor(e){super(e);this._characters=new Map;this._groups=new Map}init(){const e=this.editor;const t=e.t;const i=e.commands.get("input");e.ui.componentFactory.add("specialCharacters",n=>{const o=bw(n);let r;o.buttonView.set({label:t("Special characters"),icon:sI,tooltip:true});o.bind("isEnabled").to(i);o.on("execute",(t,i)=>{e.execute("input",{text:i.character});e.editing.view.focus()});o.on("change:isOpen",()=>{if(!r){r=this._createDropdownPanelContent(n,o);o.panelView.children.add(r.navigationView);o.panelView.children.add(r.gridView);o.panelView.children.add(r.infoView)}r.infoView.set({character:null,name:null})});return o})}addItems(e,t){if(e===lI){throw new ss["b"](`special-character-invalid-group-name: The name "${lI}" is reserved and cannot be used.`)}const i=this._getGroup(e);for(const e of t){i.add(e.title);this._characters.set(e.title,e.character)}}getGroups(){return this._groups.keys()}getCharactersForGroup(e){if(e===lI){return new Set(this._characters.keys())}return this._groups.get(e)}getCharacter(e){return this._characters.get(e)}_getGroup(e){if(!this._groups.has(e)){this._groups.set(e,new Set)}return this._groups.get(e)}_updateGrid(e,t){t.tiles.clear();const i=this.getCharactersForGroup(e);for(const e of i){const i=this.getCharacter(e);t.tiles.add(t.createTile(i,e))}}_createDropdownPanelContent(e,t){const i=[...this.getGroups()];i.unshift(lI);const n=new eI(e,i);const o=new iI(e);const r=new oI(e);o.delegate("execute").to(t);o.on("tileHover",(e,t)=>{r.set(t)});n.on("execute",()=>{this._updateGrid(n.currentGroupName,o)});this._updateGrid(n.currentGroupName,o);return{navigationView:n,gridView:o,infoView:r}}}class dI extends Rw{init(){const e=this.editor;const t=e.t;e.plugins.get("SpecialCharacters").addItems("Arrows",[{title:t("leftwards double arrow"),character:"⇐"},{title:t("rightwards double arrow"),character:"⇒"},{title:t("upwards double arrow"),character:"⇑"},{title:t("downwards double arrow"),character:"⇓"},{title:t("leftwards dashed arrow"),character:"⇠"},{title:t("rightwards dashed arrow"),character:"⇢"},{title:t("upwards dashed arrow"),character:"⇡"},{title:t("downwards dashed arrow"),character:"⇣"},{title:t("leftwards arrow to bar"),character:"⇤"},{title:t("rightwards arrow to bar"),character:"⇥"},{title:t("upwards arrow to bar"),character:"⤒"},{title:t("downwards arrow to bar"),character:"⤓"},{title:t("up down arrow with base"),character:"↨"},{title:t("back with leftwards arrow above"),character:"🔙"},{title:t("end with leftwards arrow above"),character:"🔚"},{title:t("on with exclamation mark with left right arrow above"),character:"🔛"},{title:t("soon with rightwards arrow above"),character:"🔜"},{title:t("top with upwards arrow above"),character:"🔝"}])}}class uI extends Rw{init(){const e=this.editor;const t=e.t;e.plugins.get("SpecialCharacters").addItems("Currency",[{character:"$",title:t("Dollar sign")},{character:"€",title:t("Euro sign")},{character:"¥",title:t("Yen sign")},{character:"£",title:t("Pound sign")},{character:"¢",title:t("Cent sign")},{character:"₠",title:t("Euro-currency sign")},{character:"₡",title:t("Colon sign")},{character:"₢",title:t("Cruzeiro sign")},{character:"₣",title:t("French franc sign")},{character:"₤",title:t("Lira sign")},{character:"¤",title:t("Currency sign")},{character:"₿",title:t("Bitcoin sign")},{character:"₥",title:t("Mill sign")},{character:"₦",title:t("Naira sign")},{character:"₧",title:t("Peseta sign")},{character:"₨",title:t("Rupee sign")},{character:"₩",title:t("Won sign")},{character:"₪",title:t("New sheqel sign")},{character:"₫",title:t("Dong sign")},{character:"₭",title:t("Kip sign")},{character:"₮",title:t("Tugrik sign")},{character:"₯",title:t("Drachma sign")},{character:"₰",title:t("German penny sign")},{character:"₱",title:t("Peso sign")},{character:"₲",title:t("Guarani sign")},{character:"₳",title:t("Austral sign")},{character:"₴",title:t("Hryvnia sign")},{character:"₵",title:t("Cedi sign")},{character:"₶",title:t("Livre tournois sign")},{character:"₷",title:t("Spesmilo sign")},{character:"₸",title:t("Tenge sign")},{character:"₹",title:t("Indian rupee sign")},{character:"₺",title:t("Turkish lira sign")},{character:"₻",title:t("Nordic mark sign")},{character:"₼",title:t("Manat sign")},{character:"₽",title:t("Ruble sign")}])}}class hI extends Rw{init(){const e=this.editor;const t=e.t;e.plugins.get("SpecialCharacters").addItems("Mathematical",[{character:"<",title:t("Less-than sign")},{character:">",title:t("Greater-than sign")},{character:"≤",title:t("Less-than or equal to")},{character:"≥",title:t("Greater-than or equal to")},{character:"–",title:t("En dash")},{character:"—",title:t("Em dash")},{character:"¯",title:t("Macron")},{character:"‾",title:t("Overline")},{character:"°",title:t("Degree sign")},{character:"−",title:t("Minus sign")},{character:"±",title:t("Plus-minus sign")},{character:"÷",title:t("Division sign")},{character:"⁄",title:t("Fraction slash")},{character:"×",title:t("Multiplication sign")},{character:"ƒ",title:t("Latin small letter f with hook")},{character:"∫",title:t("Integral")},{character:"∑",title:t("N-ary summation")},{character:"∞",title:t("Infinity")},{character:"√",title:t("Square root")},{character:"∼",title:t("Tilde operator")},{character:"≅",title:t("Approximately equal to")},{character:"≈",title:t("Almost equal to")},{character:"≠",title:t("Not equal to")},{character:"≡",title:t("Identical to")},{character:"∈",title:t("Element of")},{character:"∉",title:t("Not an element of")},{character:"∋",title:t("Contains as member")},{character:"∏",title:t("N-ary product")},{character:"∧",title:t("Logical and")},{character:"∨",title:t("Logical or")},{character:"¬",title:t("Not sign")},{character:"∩",title:t("Intersection")},{character:"∪",title:t("Union")},{character:"∂",title:t("Partial differential")},{character:"∀",title:t("For all")},{character:"∃",title:t("There exists")},{character:"∅",title:t("Empty set")},{character:"∇",title:t("Nabla")},{character:"∗",title:t("Asterisk operator")},{character:"∝",title:t("Proportional to")},{character:"∠",title:t("Angle")},{character:"¼",title:t("Vulgar fraction one quarter")},{character:"½",title:t("Vulgar fraction one half")},{character:"¾",title:t("Vulgar fraction three quarters")}])}}class fI extends Rw{init(){const e=this.editor;const t=e.t;e.plugins.get("SpecialCharacters").addItems("Latin",[{character:"Ā",title:t("Latin capital letter a with macron")},{character:"ā",title:t("Latin small letter a with macron")},{character:"Ă",title:t("Latin capital letter a with breve")},{character:"ă",title:t("Latin small letter a with breve")},{character:"Ą",title:t("Latin capital letter a with ogonek")},{character:"ą",title:t("Latin small letter a with ogonek")},{character:"Ć",title:t("Latin capital letter c with acute")},{character:"ć",title:t("Latin small letter c with acute")},{character:"Ĉ",title:t("Latin capital letter c with circumflex")},{character:"ĉ",title:t("Latin small letter c with circumflex")},{character:"Ċ",title:t("Latin capital letter c with dot above")},{character:"ċ",title:t("Latin small letter c with dot above")},{character:"Č",title:t("Latin capital letter c with caron")},{character:"č",title:t("Latin small letter c with caron")},{character:"Ď",title:t("Latin capital letter d with caron")},{character:"ď",title:t("Latin small letter d with caron")},{character:"Đ",title:t("Latin capital letter d with stroke")},{character:"đ",title:t("Latin small letter d with stroke")},{character:"Ē",title:t("Latin capital letter e with macron")},{character:"ē",title:t("Latin small letter e with macron")},{character:"Ĕ",title:t("Latin capital letter e with breve")},{character:"ĕ",title:t("Latin small letter e with breve")},{character:"Ė",title:t("Latin capital letter e with dot above")},{character:"ė",title:t("Latin small letter e with dot above")},{character:"Ę",title:t("Latin capital letter e with ogonek")},{character:"ę",title:t("Latin small letter e with ogonek")},{character:"Ě",title:t("Latin capital letter e with caron")},{character:"ě",title:t("Latin small letter e with caron")},{character:"Ĝ",title:t("Latin capital letter g with circumflex")},{character:"ĝ",title:t("Latin small letter g with circumflex")},{character:"Ğ",title:t("Latin capital letter g with breve")},{character:"ğ",title:t("Latin small letter g with breve")},{character:"Ġ",title:t("Latin capital letter g with dot above")},{character:"ġ",title:t("Latin small letter g with dot above")},{character:"Ģ",title:t("Latin capital letter g with cedilla")},{character:"ģ",title:t("Latin small letter g with cedilla")},{character:"Ĥ",title:t("Latin capital letter h with circumflex")},{character:"ĥ",title:t("Latin small letter h with circumflex")},{character:"Ħ",title:t("Latin capital letter h with stroke")},{character:"ħ",title:t("Latin small letter h with stroke")},{character:"Ĩ",title:t("Latin capital letter i with tilde")},{character:"ĩ",title:t("Latin small letter i with tilde")},{character:"Ī",title:t("Latin capital letter i with macron")},{character:"ī",title:t("Latin small letter i with macron")},{character:"Ĭ",title:t("Latin capital letter i with breve")},{character:"ĭ",title:t("Latin small letter i with breve")},{character:"Į",title:t("Latin capital letter i with ogonek")},{character:"į",title:t("Latin small letter i with ogonek")},{character:"İ",title:t("Latin capital letter i with dot above")},{character:"ı",title:t("Latin small letter dotless i")},{character:"IJ",title:t("Latin capital ligature ij")},{character:"ij",title:t("Latin small ligature ij")},{character:"Ĵ",title:t("Latin capital letter j with circumflex")},{character:"ĵ",title:t("Latin small letter j with circumflex")},{character:"Ķ",title:t("Latin capital letter k with cedilla")},{character:"ķ",title:t("Latin small letter k with cedilla")},{character:"ĸ",title:t("Latin small letter kra")},{character:"Ĺ",title:t("Latin capital letter l with acute")},{character:"ĺ",title:t("Latin small letter l with acute")},{character:"Ļ",title:t("Latin capital letter l with cedilla")},{character:"ļ",title:t("Latin small letter l with cedilla")},{character:"Ľ",title:t("Latin capital letter l with caron")},{character:"ľ",title:t("Latin small letter l with caron")},{character:"Ŀ",title:t("Latin capital letter l with middle dot")},{character:"ŀ",title:t("Latin small letter l with middle dot")},{character:"Ł",title:t("Latin capital letter l with stroke")},{character:"ł",title:t("Latin small letter l with stroke")},{character:"Ń",title:t("Latin capital letter n with acute")},{character:"ń",title:t("Latin small letter n with acute")},{character:"Ņ",title:t("Latin capital letter n with cedilla")},{character:"ņ",title:t("Latin small letter n with cedilla")},{character:"Ň",title:t("Latin capital letter n with caron")},{character:"ň",title:t("Latin small letter n with caron")},{character:"ʼn",title:t("Latin small letter n preceded by apostrophe")},{character:"Ŋ",title:t("Latin capital letter eng")},{character:"ŋ",title:t("Latin small letter eng")},{character:"Ō",title:t("Latin capital letter o with macron")},{character:"ō",title:t("Latin small letter o with macron")},{character:"Ŏ",title:t("Latin capital letter o with breve")},{character:"ŏ",title:t("Latin small letter o with breve")},{character:"Ő",title:t("Latin capital letter o with double acute")},{character:"ő",title:t("Latin small letter o with double acute")},{character:"Œ",title:t("Latin capital ligature oe")},{character:"œ",title:t("Latin small ligature oe")},{character:"Ŕ",title:t("Latin capital letter r with acute")},{character:"ŕ",title:t("Latin small letter r with acute")},{character:"Ŗ",title:t("Latin capital letter r with cedilla")},{character:"ŗ",title:t("Latin small letter r with cedilla")},{character:"Ř",title:t("Latin capital letter r with caron")},{character:"ř",title:t("Latin small letter r with caron")},{character:"Ś",title:t("Latin capital letter s with acute")},{character:"ś",title:t("Latin small letter s with acute")},{character:"Ŝ",title:t("Latin capital letter s with circumflex")},{character:"ŝ",title:t("Latin small letter s with circumflex")},{character:"Ş",title:t("Latin capital letter s with cedilla")},{character:"ş",title:t("Latin small letter s with cedilla")},{character:"Š",title:t("Latin capital letter s with caron")},{character:"š",title:t("Latin small letter s with caron")},{character:"Ţ",title:t("Latin capital letter t with cedilla")},{character:"ţ",title:t("Latin small letter t with cedilla")},{character:"Ť",title:t("Latin capital letter t with caron")},{character:"ť",title:t("Latin small letter t with caron")},{character:"Ŧ",title:t("Latin capital letter t with stroke")},{character:"ŧ",title:t("Latin small letter t with stroke")},{character:"Ũ",title:t("Latin capital letter u with tilde")},{character:"ũ",title:t("Latin small letter u with tilde")},{character:"Ū",title:t("Latin capital letter u with macron")},{character:"ū",title:t("Latin small letter u with macron")},{character:"Ŭ",title:t("Latin capital letter u with breve")},{character:"ŭ",title:t("Latin small letter u with breve")},{character:"Ů",title:t("Latin capital letter u with ring above")},{character:"ů",title:t("Latin small letter u with ring above")},{character:"Ű",title:t("Latin capital letter u with double acute")},{character:"ű",title:t("Latin small letter u with double acute")},{character:"Ų",title:t("Latin capital letter u with ogonek")},{character:"ų",title:t("Latin small letter u with ogonek")},{character:"Ŵ",title:t("Latin capital letter w with circumflex")},{character:"ŵ",title:t("Latin small letter w with circumflex")},{character:"Ŷ",title:t("Latin capital letter y with circumflex")},{character:"ŷ",title:t("Latin small letter y with circumflex")},{character:"Ÿ",title:t("Latin capital letter y with diaeresis")},{character:"Ź",title:t("Latin capital letter z with acute")},{character:"ź",title:t("Latin small letter z with acute")},{character:"Ż",title:t("Latin capital letter z with dot above")},{character:"ż",title:t("Latin small letter z with dot above")},{character:"Ž",title:t("Latin capital letter z with caron")},{character:"ž",title:t("Latin small letter z with caron")},{character:"ſ",title:t("Latin small letter long s")}])}}class mI extends Rw{init(){const e=this.editor;const t=e.t;e.plugins.get("SpecialCharacters").addItems("Text",[{character:"‹",title:t("Single left-pointing angle quotation mark")},{character:"›",title:t("Single right-pointing angle quotation mark")},{character:"«",title:t("Left-pointing double angle quotation mark")},{character:"»",title:t("Right-pointing double angle quotation mark")},{character:"‘",title:t("Left single quotation mark")},{character:"’",title:t("Right single quotation mark")},{character:"“",title:t("Left double quotation mark")},{character:"”",title:t("Right double quotation mark")},{character:"‚",title:t("Single low-9 quotation mark")},{character:"„",title:t("Double low-9 quotation mark")},{character:"¡",title:t("Inverted exclamation mark")},{character:"¿",title:t("Inverted question mark")},{character:"‥",title:t("Two dot leader")},{character:"…",title:t("Horizontal ellipsis")},{character:"‡",title:t("Double dagger")},{character:"‰",title:t("Per mille sign")},{character:"‱",title:t("Per ten thousand sign")},{character:"‼",title:t("Double exclamation mark")},{character:"⁈",title:t("Question exclamation mark")},{character:"⁉",title:t("Exclamation question mark")},{character:"⁇",title:t("Double question mark")},{character:"©",title:t("Copyright sign")},{character:"®",title:t("Registered sign")},{character:"™",title:t("Trade mark sign")},{character:"§",title:t("Section sign")},{character:"¶",title:t("Paragraph sign")},{character:"⁋",title:t("Reversed paragraph sign")}])}}class gI extends Rw{static get requires(){return[uI,mI,hI,dI,fI]}}const pI="strikethrough";class bI extends Rw{static get pluginName(){return"StrikethroughEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:pI});e.model.schema.setAttributeProperties(pI,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:pI,view:"s",upcastAlso:["del","strike",{styles:{"text-decoration":"line-through"}}]});e.commands.add(pI,new w_(e,pI));e.keystrokes.set("CTRL+SHIFT+X","strikethrough")}}var wI='';const _I="strikethrough";class kI extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(_I,i=>{const n=e.commands.get(_I);const o=new rw(i);o.set({label:t("Strikethrough"),icon:wI,keystroke:"CTRL+SHIFT+X",tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(_I);e.editing.view.focus()});return o})}}class vI extends Rw{static get requires(){return[bI,kI]}static get pluginName(){return"Strikethrough"}}function yI(e,t){let i=t.parent;while(i){if(i.name===e){return i}i=i.parent}}function xI(e,t,i,n,o=1){if(t>o){n.setAttribute(e,t,i)}else{n.removeAttribute(e,i)}}function AI(e,t,i={}){const n=e.createElement("tableCell",i);e.insertElement("paragraph",n);e.insert(n,t)}function CI(e){if(!e||!le(e)){return e}const{top:t,right:i,bottom:n,left:o}=e;if(t==i&&i==n&&n==o){return t}}function TI(e,t){const i=parseFloat(e);if(Number.isNaN(i)){return e}if(String(i)!==String(e)){return e}return`${i}${t}`}function EI(e,t){const i=t.parent.parent;const n=parseInt(i.getAttribute("headingColumns")||0);const{column:o}=e.getCellLocation(t);return!!n&&o{e.on("element:table",(e,t,i)=>{const n=t.viewItem;if(!i.consumable.test(n,{name:true})){return}const{rows:o,headingRows:r,headingColumns:s}=II(n);const a={};if(s){a.headingColumns=s}if(r){a.headingRows=r}const l=i.writer.createElement("table",a);const c=i.splitToAllowedParent(l,t.modelCursor);if(!c){return}i.writer.insert(l,c.position);i.consumable.consume(n,{name:true});o.forEach(e=>i.convertItem(e,i.writer.createPositionAt(l,"end")));if(l.isEmpty){const e=i.writer.createElement("tableRow");i.writer.insert(e,i.writer.createPositionAt(l,"end"));AI(i.writer,i.writer.createPositionAt(e,"end"))}t.modelRange=i.writer.createRange(i.writer.createPositionBefore(l),i.writer.createPositionAfter(l));if(c.cursorParent){t.modelCursor=i.writer.createPositionAt(c.cursorParent,0)}else{t.modelCursor=t.modelRange.end}})}}function MI(){return e=>{e.on("element:tr",(e,t)=>{if(t.viewItem.isEmpty){e.stop()}},{priority:"high"})}}function SI(e){return t=>{t.on(`element:${e}`,(e,t,i)=>{const n=t.viewItem;if(!i.consumable.test(n,{name:true})){return}const o=i.writer.createElement("tableCell");const r=i.splitToAllowedParent(o,t.modelCursor);if(!r){return}i.writer.insert(o,r.position);i.consumable.consume(n,{name:true});const s=i.writer.createPositionAt(o,0);i.convertChildren(n,s);if(!o.childCount){i.writer.insertElement("paragraph",s)}t.modelRange=i.writer.createRange(i.writer.createPositionBefore(o),i.writer.createPositionAfter(o));t.modelCursor=t.modelRange.end})}}function II(e){const t={headingRows:0,headingColumns:0};const i=[];const n=[];let o;for(const r of Array.from(e.getChildren())){if(r.name==="tbody"||r.name==="thead"||r.name==="tfoot"){if(r.name==="thead"&&!o){o=r}const e=Array.from(r.getChildren()).filter(e=>e.is("element","tr"));for(const r of e){if(r.parent.name==="thead"&&r.parent===o){t.headingRows++;i.push(r)}else{n.push(r);const e=LI(r,t,o);if(e>t.headingColumns){t.headingColumns=e}}}}}t.rows=[...i,...n];return t}function LI(e){let t=0;let i=0;const n=Array.from(e.getChildren()).filter(e=>e.name==="th"||e.name==="td");while(i1||r>1){this._recordSpans(this._row,this._column,r,o,t)}this._nextCellAtColumn=this._column+o;i=this._shouldSkipRow()||this._shouldSkipColumn();n=this._formatOutValue(t,this._column,false,r,o)}this._column++;if(this._column==this._nextCellAtColumn){this._cellIndex++}return i?this.next():n}skipRow(e){this._skipRows.add(e)}_isOverEndRow(){return this.endRow!==undefined&&this._row>this.endRow}_formatOutValue(e,t,i,n=1,o=1){return{done:false,value:{cell:e,row:this._row,column:t,isSpanned:i,rowspan:n,colspan:o,cellIndex:this._cellIndex}}}_shouldSkipRow(){const e=this._rowe.parent.index);return YI(t)}function HI(e){const t=yI("table",e[0]);const i=[...new NI(t)];const n=i.filter(t=>e.includes(t.cell)).map(e=>e.column);return YI(n)}function WI(e,t){if(e.length<2||!ZI(e)){return false}const i=new Set;const n=new Set;let o=0;for(const r of e){const{row:e,column:s}=t.getCellLocation(r);const a=parseInt(r.getAttribute("rowspan")||1);const l=parseInt(r.getAttribute("colspan")||1);i.add(e);n.add(s);if(a>1){i.add(e+a-1)}if(l>1){n.add(s+l-1)}o+=a*l}const r=QI(i,n);return r==o}function UI(e,t,i=0){const n=[];const o=new NI(e,{startRow:i,endRow:t-1});for(const e of o){const{row:i,rowspan:o}=e;const r=i+o-1;if(i1){l.rowspan=c}const d=parseInt(e.getAttribute("colspan")||1);if(d>1){l.colspan=d}const u=r;const h=u+a;const f=[...new NI(o,{startRow:u,endRow:h,includeSpanned:true})];let m;for(const{row:t,column:n,cell:r,cellIndex:s}of f){if(r===e&&m===undefined){m=n}if(m!==undefined&&m===n&&t===h){const e=o.getChild(t);const n=i.createPositionAt(e,s);AI(i,n,l)}}xI("rowspan",a,e,i)}function $I(e,t){const i=[];const n=new NI(e);for(const e of n){const{column:n,colspan:o}=e;const r=n+o-1;if(n1){s.colspan=a}const l=parseInt(e.getAttribute("rowspan")||1);if(l>1){s.rowspan=l}AI(n,n.createPositionAfter(e),s);xI("colspan",r,e,n)}function YI(e){const t=e.sort((e,t)=>e-t);const i=t[0];const n=t[t.length-1];return{first:i,last:n}}function KI(e){return Array.from(e).sort(JI)}function JI(e,t){const i=e.start;const n=t.start;return i.isBefore(n)?-1:1}function QI(e,t){const i=Array.from(e.values());const n=Array.from(t.values());const o=Math.max(...i);const r=Math.min(...i);const s=Math.max(...n);const a=Math.min(...n);return(o-r+1)*(s-a+1)}function ZI(e){const t=yI("table",e[0]);const i=FI(e);const n=parseInt(t.getAttribute("headingRows")||0);if(!XI(i,n)){return false}const o=parseInt(t.getAttribute("headingColumns")||0);const r=HI(e);return XI(r,o)}function XI({first:e,last:t},i){const n=et.on("insert:table",(t,i,n)=>{const o=i.item;if(!n.consumable.consume(o,"insert")){return}n.consumable.consume(o,"attribute:headingRows:table");n.consumable.consume(o,"attribute:headingColumns:table");const r=e&&e.asWidget;const s=n.writer.createContainerElement("figure",{class:"table"});const a=n.writer.createContainerElement("table");n.writer.insert(n.writer.createPositionAt(s,0),a);let l;if(r){l=OI(s,n.writer)}const c=new NI(o);const d={headingRows:o.getAttribute("headingRows")||0,headingColumns:o.getAttribute("headingColumns")||0};const u=new Map;for(const t of c){const{row:i,cell:r}=t;const s=hL(uL(i,d),a,n);const l=o.getChild(i);const c=u.get(i)||cL(l,i,s,n);u.set(i,c);n.consumable.consume(r,"insert");const h=n.writer.createPositionAt(c,"end");lL(t,d,h,n,e)}const h=n.mapper.toViewPosition(i.range.start);n.mapper.bindElements(o,r?l:s);n.writer.insert(h,r?l:s)})}function tL(e={}){return t=>t.on("insert:tableRow",(t,i,n)=>{const o=i.item;if(!n.consumable.consume(o,"insert")){return}const r=o.parent;const s=n.mapper.toViewElement(r);const a=bL(s);const l=r.getChildIndex(o);const c=new NI(r,{startRow:l,endRow:l});const d={headingRows:r.getAttribute("headingRows")||0,headingColumns:r.getAttribute("headingColumns")||0};const u=new Map;for(const t of c){const i=hL(uL(l,d),a,n);const r=u.get(l)||cL(o,l,i,n);u.set(l,r);n.consumable.consume(t.cell,"insert");const s=n.writer.createPositionAt(r,"end");lL(t,d,s,n,e)}})}function iL(e={}){return t=>t.on("insert:tableCell",(t,i,n)=>{const o=i.item;if(!n.consumable.consume(o,"insert")){return}const r=o.parent;const s=r.parent;const a=s.getChildIndex(r);const l=new NI(s,{startRow:a,endRow:a});const c={headingRows:s.getAttribute("headingRows")||0,headingColumns:s.getAttribute("headingColumns")||0};for(const t of l){if(t.cell===o){const i=n.mapper.toViewElement(r);const s=n.writer.createPositionAt(i,r.getChildIndex(o));lL(t,c,s,n,e);return}}})}function nL(e={}){const t=!!e.asWidget;return e=>e.on("attribute:headingRows:table",(e,i,n)=>{const o=i.item;if(!n.consumable.consume(i.item,e.name)){return}const r=n.mapper.toViewElement(o);const s=bL(r);const a=i.attributeOldValue;const l=i.attributeNewValue;if(l>a){const e=Array.from(o.getChildren()).filter(({index:e})=>c(e,a-1,l));const i=hL("thead",s,n);pL(e,i,n,"end");for(const i of e){for(const e of i.getChildren()){sL(e,"th",n,t)}}}else{const e=Array.from(o.getChildren()).filter(({index:e})=>c(e,l-1,a)).reverse();const i=hL("tbody",s,n);pL(e,i,n,0);const r=new NI(o,{startRow:l?l-1:l,endRow:a-1});const d={headingRows:o.getAttribute("headingRows")||0,headingColumns:o.getAttribute("headingColumns")||0};for(const e of r){aL(e,d,n,t)}}gL("thead",s,n);gL("tbody",s,n);function c(e,t,i){return e>t&&ee.on("attribute:headingColumns:table",(e,i,n)=>{const o=i.item;if(!n.consumable.consume(i.item,e.name)){return}const r={headingRows:o.getAttribute("headingRows")||0,headingColumns:o.getAttribute("headingColumns")||0};const s=i.attributeOldValue;const a=i.attributeNewValue;const l=(s>a?s:a)-1;for(const e of new NI(o)){if(e.column>l){continue}aL(e,r,n,t)}})}function rL(){return e=>e.on("remove:tableRow",(e,t,i)=>{e.stop();const n=i.writer;const o=i.mapper;const r=o.toViewPosition(t.position).getLastMatchingPosition(e=>!e.item.is("tr"));const s=r.nodeAfter;const a=s.parent;const l=a.parent;const c=n.createRangeOn(s);const d=n.remove(c);for(const e of n.createRangeIn(d).getItems()){o.unbindViewElement(e)}gL("thead",l,i);gL("tbody",l,i)},{priority:"higher"})}function sL(e,t,i,n){const o=i.writer;const r=i.mapper.toViewElement(e);if(!r){return}let s;if(n){const e=o.createEditableElement(t,r.getAttributes());s=hx(e,o);o.insert(o.createPositionAfter(r),s);o.move(o.createRangeIn(r),o.createPositionAt(s,0));o.remove(o.createRangeOn(r))}else{s=o.rename(t,r)}i.mapper.unbindViewElement(r);i.mapper.bindElements(e,s)}function aL(e,t,i,n){const{cell:o}=e;const r=dL(e,t);const s=i.mapper.toViewElement(o);if(s&&s.name!==r){sL(o,r,i,n)}}function lL(e,t,i,n,o){const r=o&&o.asWidget;const s=dL(e,t);const a=r?hx(n.writer.createEditableElement(s),n.writer):n.writer.createContainerElement(s);const l=e.cell;const c=l.getChild(0);const d=l.childCount===1&&c.name==="paragraph";n.writer.insert(i,a);if(d&&!wL(c)){const e=l.getChild(0);const t=n.writer.createPositionAt(a,"end");n.consumable.consume(e,"insert");if(o.asWidget){const i=n.writer.createContainerElement("span",{style:"display:inline-block"});n.mapper.bindElements(e,i);n.writer.insert(t,i);n.mapper.bindElements(l,a)}else{n.mapper.bindElements(l,a);n.mapper.bindElements(e,a)}}else{n.mapper.bindElements(l,a)}}function cL(e,t,i,n){n.consumable.consume(e,"insert");const o=n.writer.createContainerElement("tr");n.mapper.bindElements(e,o);const r=e.parent.getAttribute("headingRows")||0;const s=r>0&&t>=r?t-r:t;const a=n.writer.createPositionAt(i,s);n.writer.insert(a,o);return o}function dL(e,t){const{row:i,column:n}=e;const{headingColumns:o,headingRows:r}=t;const s=r&&r>i;if(s){return"th"}const a=o&&o>n;return a?"th":"td"}function uL(e,t){return e{const i=n.createTable(e,o,r);t.insertContent(i,s);e.setSelection(e.createPositionAt(i.getNodeByPath([0,0,0]),0))})}}function kL(e){const t=e.parent;return t===t.root?t:t.parent}class vL extends Dw{constructor(e,t={}){super(e);this.order=t.order||"below"}refresh(){const e=this.editor.model.document.selection;const t=yI("table",e.getFirstPosition());this.isEnabled=!!t}execute(){const e=this.editor;const t=e.model.document.selection;const i=e.plugins.get("TableUtils");const n=this.order==="above";const o=VI(t);const r=FI(o);const s=n?r.first:r.last;const a=yI("table",o[0]);i.insertRows(a,{at:n?s:s+1,copyStructureFromAbove:!n})}}class yL extends Dw{constructor(e,t={}){super(e);this.order=t.order||"right"}refresh(){const e=this.editor.model.document.selection;const t=yI("table",e.getFirstPosition());this.isEnabled=!!t}execute(){const e=this.editor;const t=e.model.document.selection;const i=e.plugins.get("TableUtils");const n=this.order==="left";const o=VI(t);const r=HI(o);const s=n?r.first:r.last;const a=yI("table",o[0]);i.insertColumns(a,{columns:1,at:n?s:s+1})}}class xL extends Dw{constructor(e,t={}){super(e);this.direction=t.direction||"horizontally"}refresh(){const e=VI(this.editor.model.document.selection);this.isEnabled=e.length===1}execute(){const e=VI(this.editor.model.document.selection)[0];const t=this.direction==="horizontally";const i=this.editor.plugins.get("TableUtils");if(t){i.splitCellHorizontally(e,2)}else{i.splitCellVertically(e,2)}}}class AL extends Dw{constructor(e,t){super(e);this.direction=t.direction;this.isHorizontal=this.direction=="right"||this.direction=="left"}refresh(){const e=this._getMergeableCell();this.value=e;this.isEnabled=!!e}execute(){const e=this.editor.model;const t=e.document;const i=BI(t.selection)[0];const n=this.value;const o=this.direction;e.change(e=>{const t=o=="right"||o=="down";const r=t?i:n;const s=t?n:i;const a=s.parent;EL(s,r,e);const l=this.isHorizontal?"colspan":"rowspan";const c=parseInt(i.getAttribute(l)||1);const d=parseInt(n.getAttribute(l)||1);e.setAttribute(l,c+d,r);e.setSelection(e.createRangeIn(r));if(!a.childCount){const t=this.editor.plugins.get("TableUtils");const i=yI("table",a);t.removeRows(i,{at:a.index,batch:e.batch})}})}_getMergeableCell(){const e=this.editor.model;const t=e.document;const i=BI(t.selection)[0];if(!i){return}const n=this.editor.plugins.get("TableUtils");const o=this.isHorizontal?CL(i,this.direction,n):TL(i,this.direction);if(!o){return}const r=this.isHorizontal?"rowspan":"colspan";const s=parseInt(i.getAttribute(r)||1);const a=parseInt(o.getAttribute(r)||1);if(a===s){return o}}}function CL(e,t,i){const n=e.parent;const o=n.parent;const r=t=="right"?e.nextSibling:e.previousSibling;const s=(o.getAttribute("headingColumns")||0)>0;if(!r){return}const a=t=="right"?e:r;const l=t=="right"?r:e;const{column:c}=i.getCellLocation(a);const{column:d}=i.getCellLocation(l);const u=parseInt(a.getAttribute("colspan")||1);const h=EI(i,a,o);const f=EI(i,l,o);if(s&&h!=f){return}const m=c+u===d;return m?r:undefined}function TL(e,t){const i=e.parent;const n=i.parent;const o=n.getChildIndex(i);if(t=="down"&&o===n.childCount-1||t=="up"&&o===0){return}const r=parseInt(e.getAttribute("rowspan")||1);const s=n.getAttribute("headingRows")||0;const a=t=="down"&&o+r===s;const l=t=="up"&&o===s;if(s&&(a||l)){return}const c=parseInt(e.getAttribute("rowspan")||1);const d=t=="down"?o+c:o;const u=[...new NI(n,{endRow:d})];const h=u.find(t=>t.cell===e);const f=h.column;const m=u.find(({row:e,rowspan:i,column:n})=>{if(n!==f){return false}if(t=="down"){return e===d}else{return d===e+i}});return m&&m.cell}function EL(e,t,i){if(!PL(e)){if(PL(t)){i.remove(i.createRangeIn(t))}i.move(i.createRangeIn(e),i.createPositionAt(t,"end"))}i.remove(e)}function PL(e){return e.childCount==1&&e.getChild(0).is("paragraph")&&e.getChild(0).isEmpty}class ML extends Dw{refresh(){const e=VI(this.editor.model.document.selection);const t=e[0];if(t){const i=yI("table",t);const n=this.editor.plugins.get("TableUtils").getRows(i);const o=n-1;const r=FI(e);const s=r.first===0&&r.last===o;this.isEnabled=!s}else{this.isEnabled=false}}execute(){const e=this.editor.model;const t=VI(e.document.selection);const i=FI(t);const n=t[0];const o=yI("table",n);const r=this.editor.plugins.get("TableUtils").getCellLocation(n).column;const s=e.createBatch();e.enqueueChange(s,e=>{e.setSelection(e.createSelection(o,"on"));const t=i.last-i.first+1;this.editor.plugins.get("TableUtils").removeRows(o,{at:i.first,rows:t,batch:s})});e.enqueueChange(s,e=>{const t=SL(o,i.first,r);e.setSelection(e.createPositionAt(t,0))})}}function SL(e,t,i){const n=e.getChild(t)||e.getChild(e.childCount-1);let o=n.getChild(0);let r=0;for(const e of n.getChildren()){if(r>i){return o}o=e;r+=parseInt(e.getAttribute("colspan")||1)}return o}class IL extends Dw{refresh(){const e=VI(this.editor.model.document.selection);const t=e[0];if(t){const i=yI("table",t);const n=this.editor.plugins.get("TableUtils").getColumns(i);const{first:o,last:r}=HI(e);this.isEnabled=r-ot.cell===e).column,last:n.find(e=>e.cell===t).column};const r=LL(n,e,t,o);this.editor.model.change(e=>{const t=o.last-o.first+1;this.editor.plugins.get("TableUtils").removeColumns(i,{at:o.first,columns:t});e.setSelection(e.createPositionAt(r,0))})}}function LL(e,t,i,n){const o=parseInt(i.getAttribute("colspan")||1);if(o>1){return i}else if(t.previousSibling||i.nextSibling){return i.nextSibling||t.previousSibling}else{if(n.first){return e.reverse().find(({column:e})=>ee>n.last).cell}}}function NL(e){const t=VI(e);const i=t[0];const n=t.pop();const o=[i,n];return i.isBefore(n)?o:o.reverse()}class OL extends Dw{refresh(){const e=this.editor.model;const t=VI(e.document.selection);const i=t.length>0;this.isEnabled=i;this.value=i&&t.every(e=>this._isInHeading(e,e.parent.parent))}execute(e={}){if(e.forceValue===this.value){return}const t=this.editor.model;const i=VI(t.document.selection);const n=yI("table",i[0]);const{first:o,last:r}=FI(i);const s=this.value?o:r+1;const a=n.getAttribute("headingRows")||0;t.change(e=>{if(s){const t=s>a?a:0;const i=UI(n,s,t);for(const{cell:t}of i){qI(t,s,e)}}xI("headingRows",s,n,e,0)})}_isInHeading(e,t){const i=parseInt(t.getAttribute("headingRows")||0);return!!i&&e.parent.index0;this.isEnabled=n;this.value=n&&t.every(e=>EI(i,e))}execute(e={}){if(e.forceValue===this.value){return}const t=this.editor.model;const i=VI(t.document.selection);const n=yI("table",i[0]);const{first:o,last:r}=HI(i);const s=this.value?o:r+1;t.change(e=>{if(s){const t=$I(n,s);for(const{cell:i,column:n}of t){GI(i,n,s,e)}}xI("headingColumns",s,n,e,0)})}}class zL extends Rw{static get pluginName(){return"TableUtils"}getCellLocation(e){const t=e.parent;const i=t.parent;const n=i.getChildIndex(t);const o=new NI(i,{startRow:n,endRow:n});for(const{cell:t,row:i,column:n}of o){if(t===e){return{row:i,column:n}}}}createTable(e,t,i){const n=e.createElement("table");DL(e,n,0,t,i);return n}insertRows(e,t={}){const i=this.editor.model;const n=t.at||0;const o=t.rows||1;const r=t.copyStructureFromAbove!==undefined;const s=t.copyStructureFromAbove?n-1:n;const a=this.getRows(e);const l=this.getColumns(e);i.change(t=>{const i=e.getAttribute("headingRows")||0;if(i>n){t.setAttribute("headingRows",i+o,e)}if(!r&&(n===0||n===a)){DL(t,e,n,o,l);return}const c=r?Math.max(n,s):n;const d=new NI(e,{endRow:c});const u=new Array(l).fill(1);for(const{row:e,column:i,rowspan:a,colspan:l,cell:c}of d){const d=e+a-1;const h=e0){AI(t,o,n>1?{colspan:n}:null)}e+=Math.abs(n)-1}}})}insertColumns(e,t={}){const i=this.editor.model;const n=t.at||0;const o=t.columns||1;i.change(t=>{const i=e.getAttribute("headingColumns");if(n1){t.setAttribute("colspan",c+o,r);s.skipRow(i);if(l>1){for(let e=i+1;e{const{cellsToMove:n,cellsToTrim:a}=HL(e,o,r);if(n.size){const i=r+1;WL(e,i,n,t)}for(let i=r;i>=o;i--){t.remove(e.getChild(i))}for(const{rowspan:e,cell:i}of a){xI("rowspan",e,i,t)}FL(e,o,r,i,s)})}removeColumns(e,t){const i=this.editor.model;const n=t.at;const o=t.columns||1;const r=t.at+o-1;i.change(t=>{VL(e,{first:n,last:r},t);const i=[];for(let o=r;o>=n;o--){for(const{cell:n,column:r,colspan:s}of[...new NI(e)]){if(r<=o&&s>1&&r+s>o){xI("colspan",s-1,n,t)}else if(r===o){const e=n.parent;t.remove(n);if(!e.childCount){i.push(e.index)}}}}i.reverse().forEach(i=>this.removeRows(e,{at:i,batch:t.batch}))})}splitCellVertically(e,t=2){const i=this.editor.model;const n=e.parent;const o=n.parent;const r=parseInt(e.getAttribute("rowspan")||1);const s=parseInt(e.getAttribute("colspan")||1);i.change(i=>{if(s>1){const{newCellsSpan:n,updatedSpan:o}=BL(s,t);xI("colspan",o,e,i);const a={};if(n>1){a.colspan=n}if(r>1){a.rowspan=r}const l=s>t?t-1:s-1;jL(l,i,i.createPositionAfter(e),a)}if(st===e);const c=a.filter(({cell:t,colspan:i,column:n})=>{const o=t!==e&&n===l;const r=nl;return o||r});for(const{cell:e,colspan:t}of c){i.setAttribute("colspan",t+n,e)}const d={};if(r>1){d.rowspan=r}jL(n,i,i.createPositionAfter(e),d);const u=o.getAttribute("headingColumns")||0;if(u>l){xI("headingColumns",u+n,o,i)}}})}splitCellHorizontally(e,t=2){const i=this.editor.model;const n=e.parent;const o=n.parent;const r=o.getChildIndex(n);const s=parseInt(e.getAttribute("rowspan")||1);const a=parseInt(e.getAttribute("colspan")||1);i.change(i=>{if(s>1){const n=[...new NI(o,{startRow:r,endRow:r+s-1,includeSpanned:true})];const{newCellsSpan:l,updatedSpan:c}=BL(s,t);xI("rowspan",c,e,i);const{column:d}=n.find(({cell:t})=>t===e);const u={};if(l>1){u.rowspan=l}if(a>1){u.colspan=a}for(const{column:e,row:t,cellIndex:s}of n){const n=t>=r+c;const a=e===d;const h=(t+r+c)%l===0;if(n&&a&&h){const e=i.createPositionAt(o.getChild(t),s);jL(1,i,e,u)}}}if(sr){const e=o+n;i.setAttribute("rowspan",e,t)}}const c={};if(a>1){c.colspan=a}DL(i,o,r+1,n,1,c);const d=o.getAttribute("headingRows")||0;if(d>r){xI("headingRows",d+n,o,i)}}})}getColumns(e){const t=e.getChild(0);return[...t.getChildren()].reduce((e,t)=>{const i=parseInt(t.getAttribute("colspan")||1);return e+i},0)}getRows(e){return e.childCount}}function DL(e,t,i,n,o,r={}){for(let s=0;s{const o=e.getAttribute("headingRows")||0;if(t=t&&r<=i&&e>i;if(c){const e=i-r+1;const t=a-e;n.set(s,{cell:l,rowspan:t})}const d=r=t;if(d){let n;if(e>=i){n=i-t+1}else{n=e-t+1}o.push({cell:l,rowspan:a-n})}}return{cellsToMove:n,cellsToTrim:o}}function WL(e,t,i,n){const o=new NI(e,{includeSpanned:true,startRow:t,endRow:t});const r=[...o];const s=e.getChild(t);let a;for(const{column:e,cell:t,isSpanned:o}of r){if(i.has(e)){const{cell:t,rowspan:o}=i.get(e);const r=a?n.createPositionAfter(a):n.createPositionAt(s,0);n.move(n.createRangeOn(t),r);xI("rowspan",o,t,n);a=t}else if(!o){a=t}}}class UL extends Dw{refresh(){const e=jI(this.editor.model.document.selection);this.isEnabled=WI(e,this.editor.plugins.get(zL))}execute(){const e=this.editor.model;const t=this.editor.plugins.get(zL);e.change(i=>{const n=jI(e.document.selection);const o=n.shift();i.setSelection(o,0);const{mergeWidth:r,mergeHeight:s}=GL(o,n,t);xI("colspan",r,o,i);xI("rowspan",s,o,i);const a=[];for(const e of n){const t=e.parent;qL(e,o,i);if(!t.childCount){a.push(t.index)}}if(a.length){const e=yI("table",o);a.reverse().forEach(n=>t.removeRows(e,{at:n,batch:i.batch}))}i.setSelection(o,"in")})}}function qL(e,t,i){if(!$L(e)){if($L(t)){i.remove(i.createRangeIn(t))}i.move(i.createRangeIn(e),i.createPositionAt(t,"end"))}i.remove(e)}function $L(e){return e.childCount==1&&e.getChild(0).is("paragraph")&&e.getChild(0).isEmpty}function GL(e,t,i){let n=0;let o=0;for(const e of t){const{row:t,column:r}=i.getCellLocation(e);n=YL(e,r,n,"colspan");o=YL(e,t,o,"rowspan")}const{row:r,column:s}=i.getCellLocation(e);const a=n-s;const l=o-r;return{mergeWidth:a,mergeHeight:l}}function YL(e,t,i,n){const o=parseInt(e.getAttribute(n)||1);return Math.max(i,t+o)}class KL extends Dw{refresh(){const e=VI(this.editor.model.document.selection);this.isEnabled=e.length>0}execute(){const e=this.editor.model;const t=VI(e.document.selection);const i=FI(t);const n=yI("table",t[0]);const o=[];for(let t=i.first;t<=i.last;t++){for(const i of n.getChild(t).getChildren()){o.push(e.createRangeOn(i))}}e.change(e=>{e.setSelection(o)})}}class JL extends Dw{refresh(){const e=VI(this.editor.model.document.selection);this.isEnabled=e.length>0}execute(){const e=this.editor.model;const t=VI(e.document.selection);const i=t[0];const n=t.pop();const o=this.editor.plugins.get("TableUtils");const r=o.getCellLocation(i);const s=o.getCellLocation(n);const a=Math.min(r.column,s.column);const l=Math.max(r.column,s.column);const c=[];for(const t of new NI(yI("table",i))){if(t.column>=a&&t.column<=l){c.push(e.createRangeOn(t.cell))}}e.change(e=>{e.setSelection(c)})}}function QL(e){e.document.registerPostFixer(t=>ZL(t,e))}function ZL(e,t){const i=t.document.differ.getChanges();let n=false;const o=new Set;for(const t of i){let i;if(t.name=="table"&&t.type=="insert"){i=t.position.nodeAfter}if(t.name=="tableRow"||t.name=="tableCell"){i=yI("table",t.position)}if(nN(t)){i=yI("table",t.range.start)}if(i&&!o.has(i)){n=XL(i,e)||n;n=eN(i,e)||n;o.add(i)}}return n}function XL(e,t){let i=false;const n=tN(e);if(n.length){i=true;for(const e of n){xI("rowspan",e.rowspan,e.cell,t,1)}}return i}function eN(e,t){let i=false;const n=iN(e);const o=[];for(const[e,t]of n.entries()){if(!t){o.push(e)}}if(o.length){i=true;for(const i of o.reverse()){t.remove(e.getChild(i));n.splice(i,1)}}const r=n[0];const s=n.every(e=>e===r);if(!s){const o=n.reduce((e,t)=>t>e?t:e,0);for(const[r,s]of n.entries()){const n=o-s;if(n){for(let i=0;ia){const e=a-o;n.push({cell:s,rowspan:e})}}return n}function iN(e){const t=new Array(e.childCount).fill(0);for(const{row:i}of new NI(e,{includeSpanned:true})){t[i]++}return t}function nN(e){const t=e.type==="attribute";const i=e.attributeKey;return t&&(i==="headingRows"||i==="colspan"||i==="rowspan")}function oN(e){e.document.registerPostFixer(t=>rN(t,e))}function rN(e,t){const i=t.document.differ.getChanges();let n=false;for(const t of i){if(t.type=="insert"&&t.name=="table"){n=sN(t.position.nodeAfter,e)||n}if(t.type=="insert"&&t.name=="tableRow"){n=aN(t.position.nodeAfter,e)||n}if(t.type=="insert"&&t.name=="tableCell"){n=lN(t.position.nodeAfter,e)||n}if(cN(t)){n=lN(t.position.parent,e)||n}}return n}function sN(e,t){let i=false;for(const n of e.getChildren()){i=aN(n,t)||i}return i}function aN(e,t){let i=false;for(const n of e.getChildren()){i=lN(n,t)||i}return i}function lN(e,t){if(e.childCount==0){t.insertElement("paragraph",e);return true}const i=Array.from(e.getChildren()).filter(e=>e.is("text"));for(const e of i){t.wrap(t.createRangeOn(e),"paragraph")}return!!i.length}function cN(e){if(!e.position||!e.position.parent.is("tableCell")){return false}return e.type=="insert"&&e.name=="$text"||e.type=="remove"}function dN(e){e.document.registerPostFixer(()=>uN(e))}function uN(e){const t=e.document.differ;const i=new Set;let n=0;for(const e of t.getChanges()){const t=e.type=="insert"||e.type=="remove"?e.position.parent:e.range.start.parent;if(!t.is("tableCell")){continue}if(e.type=="insert"){n++}if(hN(t,e.type,n)){i.add(t)}}if(i.size){for(const e of i.values()){t.refreshItem(e)}return true}return false}function hN(e,t,i){const n=Array.from(e.getChildren()).some(e=>e.is("paragraph"));if(!n){return false}if(t=="attribute"){const t=Array.from(e.getChild(0).getAttributeKeys()).length;return e.childCount===1&&t<2}return e.childCount<=(t=="insert"?i+1:1)}var fN=i(122);class mN extends Rw{static get pluginName(){return"TableEditing"}init(){const e=this.editor;const t=e.model;const i=t.schema;const n=e.conversion;i.register("table",{allowWhere:"$block",allowAttributes:["headingRows","headingColumns"],isLimit:true,isObject:true,isBlock:true});i.register("tableRow",{allowIn:"table",isLimit:true});i.register("tableCell",{allowIn:"tableRow",allowAttributes:["colspan","rowspan"],isObject:true});i.extend("$block",{allowIn:"tableCell"});i.addChildCheck((e,t)=>{if(t.name=="table"&&Array.from(e.getNames()).includes("table")){return false}});n.for("upcast").add(PI());n.for("editingDowncast").add(eL({asWidget:true}));n.for("dataDowncast").add(eL());n.for("upcast").elementToElement({model:"tableRow",view:"tr"});n.for("upcast").add(MI());n.for("editingDowncast").add(tL({asWidget:true}));n.for("dataDowncast").add(tL());n.for("downcast").add(rL());n.for("upcast").add(SI("td"));n.for("upcast").add(SI("th"));n.for("editingDowncast").add(iL({asWidget:true}));n.for("dataDowncast").add(iL());n.attributeToAttribute({model:"colspan",view:"colspan"});n.attributeToAttribute({model:"rowspan",view:"rowspan"});n.for("editingDowncast").add(oL({asWidget:true}));n.for("dataDowncast").add(oL());n.for("editingDowncast").add(nL({asWidget:true}));n.for("dataDowncast").add(nL());e.commands.add("insertTable",new _L(e));e.commands.add("insertTableRowAbove",new vL(e,{order:"above"}));e.commands.add("insertTableRowBelow",new vL(e,{order:"below"}));e.commands.add("insertTableColumnLeft",new yL(e,{order:"left"}));e.commands.add("insertTableColumnRight",new yL(e,{order:"right"}));e.commands.add("removeTableRow",new ML(e));e.commands.add("removeTableColumn",new IL(e));e.commands.add("splitTableCellVertically",new xL(e,{direction:"vertically"}));e.commands.add("splitTableCellHorizontally",new xL(e,{direction:"horizontally"}));e.commands.add("mergeTableCells",new UL(e));e.commands.add("mergeTableCellRight",new AL(e,{direction:"right"}));e.commands.add("mergeTableCellLeft",new AL(e,{direction:"left"}));e.commands.add("mergeTableCellDown",new AL(e,{direction:"down"}));e.commands.add("mergeTableCellUp",new AL(e,{direction:"up"}));e.commands.add("setTableColumnHeader",new RL(e));e.commands.add("setTableRowHeader",new OL(e));e.commands.add("selectTableRow",new KL(e));e.commands.add("selectTableColumn",new JL(e));QL(t);dN(t);oN(t)}static get requires(){return[zL]}}var gN=i(124);class pN extends _b{constructor(e){super(e);const t=this.bindTemplate;this.items=this._createGridCollection();this.set("rows",0);this.set("columns",0);this.bind("label").to(this,"columns",this,"rows",(e,t)=>`${t} × ${e}`);this.setTemplate({tag:"div",attributes:{class:["ck"]},children:[{tag:"div",attributes:{class:["ck-insert-table-dropdown__grid"]},on:{"mouseover@.ck-insert-table-dropdown-grid-box":t.to("boxover")},children:this.items},{tag:"div",attributes:{class:["ck-insert-table-dropdown__label"]},children:[{text:t.to("label")}]}],on:{mousedown:t.to(e=>{e.preventDefault()}),click:t.to(()=>{this.fire("execute")})}});this.on("boxover",(e,t)=>{const{row:i,column:n}=t.target.dataset;this.set({rows:parseInt(i),columns:parseInt(n)})});this.on("change:columns",()=>{this._highlightGridBoxes()});this.on("change:rows",()=>{this._highlightGridBoxes()})}focus(){}focusLast(){}_highlightGridBoxes(){const e=this.rows;const t=this.columns;this.items.map((i,n)=>{const o=Math.floor(n/10);const r=n%10;const s=o{const n=e.commands.get("insertTable");const o=bw(i);o.bind("isEnabled").to(n);o.buttonView.set({icon:wN,label:t("Insert table"),tooltip:true});let r;o.on("change:isOpen",()=>{if(r){return}r=new pN(i);o.panelView.children.add(r);r.delegate("execute").to(o);o.buttonView.on("open",()=>{r.rows=0;r.columns=0});o.on("execute",()=>{e.execute("insertTable",{rows:r.rows,columns:r.columns});e.editing.view.focus()})});return o});e.ui.componentFactory.add("tableColumn",e=>{const i=[{type:"switchbutton",model:{commandName:"setTableColumnHeader",label:t("Header column"),bindIsOn:true}},{type:"separator"},{type:"button",model:{commandName:n?"insertTableColumnLeft":"insertTableColumnRight",label:t("Insert column left")}},{type:"button",model:{commandName:n?"insertTableColumnRight":"insertTableColumnLeft",label:t("Insert column right")}},{type:"button",model:{commandName:"removeTableColumn",label:t("Delete column")}},{type:"button",model:{commandName:"selectTableColumn",label:t("Select column")}}];return this._prepareDropdown(t("Column"),_N,i,e)});e.ui.componentFactory.add("tableRow",e=>{const i=[{type:"switchbutton",model:{commandName:"setTableRowHeader",label:t("Header row"),bindIsOn:true}},{type:"separator"},{type:"button",model:{commandName:"insertTableRowAbove",label:t("Insert row above")}},{type:"button",model:{commandName:"insertTableRowBelow",label:t("Insert row below")}},{type:"button",model:{commandName:"removeTableRow",label:t("Delete row")}},{type:"button",model:{commandName:"selectTableRow",label:t("Select row")}}];return this._prepareDropdown(t("Row"),kN,i,e)});e.ui.componentFactory.add("mergeTableCells",e=>{const i=[{type:"button",model:{commandName:"mergeTableCellUp",label:t("Merge cell up")}},{type:"button",model:{commandName:n?"mergeTableCellRight":"mergeTableCellLeft",label:t("Merge cell right")}},{type:"button",model:{commandName:"mergeTableCellDown",label:t("Merge cell down")}},{type:"button",model:{commandName:n?"mergeTableCellLeft":"mergeTableCellRight",label:t("Merge cell left")}},{type:"separator"},{type:"button",model:{commandName:"splitTableCellVertically",label:t("Split cell vertically")}},{type:"button",model:{commandName:"splitTableCellHorizontally",label:t("Split cell horizontally")}}];return this._prepareMergeSplitButtonDropdown(t("Merge cells"),vN,i,e)})}_prepareDropdown(e,t,i,n){const o=this.editor;const r=bw(n);const s=this._fillDropdownWithListOptions(r,i);r.buttonView.set({label:e,icon:t,tooltip:true});r.bind("isEnabled").toMany(s,"isEnabled",(...e)=>e.some(e=>e));this.listenTo(r,"execute",e=>{o.execute(e.source.commandName);o.editing.view.focus()});return r}_prepareMergeSplitButtonDropdown(e,t,i,n){const o=this.editor;const r=bw(n,lk);const s="mergeTableCells";this._fillDropdownWithListOptions(r,i);r.buttonView.set({label:e,icon:t,tooltip:true,isEnabled:true});this.listenTo(r.buttonView,"execute",()=>{o.execute(s);o.editing.view.focus()});this.listenTo(r,"execute",e=>{o.execute(e.source.commandName);o.editing.view.focus()});return r}_fillDropdownWithListOptions(e,t){const i=this.editor;const n=[];const o=new xs;for(const e of t){xN(e,i,n,o)}_w(e,o,i.ui.componentFactory);return n}}function xN(e,t,i,n){const o=e.model=new sk(e.model);const{commandName:r,bindIsOn:s}=e.model;if(e.type==="button"||e.type==="switchbutton"){const e=t.commands.get(r);i.push(e);o.set({commandName:r});o.bind("isEnabled").to(e);if(s){o.bind("isOn").to(e,"value")}}o.set({withText:true});n.add(e)}class AN extends Ku{constructor(e){super(e);this.domEventType=["mousemove","mouseup","mouseleave"]}onDomEvent(e){this.fire(e.type,e)}}function CN(e,t,i,n){const{startRow:o,startColumn:r,endRow:s,endColumn:a}=t;const l=i.createElement("table");const c=s-o+1;for(let e=0;ea){continue}const d=e-o;const h=l.getChild(d);if(u){const{row:e,column:t}=n.getCellLocation(c);if(eo){const t=o-i+1;xI("colspan",t,e,r,1)}const c=t+a-1;if(c>n){const i=n-t+1;xI("rowspan",i,e,r,1)}}function EN(e,t,i,n,o){const r=parseInt(t.getAttribute("headingRows")||0);if(r>0){const t=r-i;xI("headingRows",t,e,o,0)}const s=parseInt(t.getAttribute("headingColumns")||0);if(s>0){const t=s-n;xI("headingColumns",t,e,o,0)}}var PN=i(126);class MN extends Rw{static get pluginName(){return"TableSelection"}static get requires(){return[zL]}init(){const e=this.editor;const t=e.model;this.listenTo(t,"deleteContent",(e,t)=>this._handleDeleteContent(e,t),{priority:"high"});e.editing.view.addObserver(AN);this._defineSelectionConverter();this._enableShiftClickSelection();this._enableMouseDragSelection();this._enablePluginDisabling()}getSelectedTableCells(){const e=this.editor.model.document.selection;const t=jI(e);if(t.length==0){return null}return t}getSelectionAsFragment(){const e=this.getSelectedTableCells();if(!e){return null}return this.editor.model.change(t=>{const i=t.createDocumentFragment();const{first:n,last:o}=HI(e);const{first:r,last:s}=FI(e);const a=yI("table",e[0]);const l={startRow:r,startColumn:n,endRow:s,endColumn:o};const c=CN(a,l,t,this.editor.plugins.get("TableUtils"));t.insert(c,i,0);return i})}setCellSelection(e,t){const i=this._getCellsToSelect(e,t);this.editor.model.change(e=>{e.setSelection(i.cells.map(t=>e.createRangeOn(t)),{backward:i.backward})})}getFocusCell(){const e=this.editor.model.document.selection;const t=[...e.getRanges()].pop();const i=t.getContainedElement();if(i&&i.is("tableCell")){return i}return null}getAnchorCell(){const e=this.editor.model.document.selection;const t=Bw(e.getRanges());const i=t.getContainedElement();if(i&&i.is("tableCell")){return i}return null}_defineSelectionConverter(){const e=this.editor;const t=new Set;e.conversion.for("editingDowncast").add(e=>e.on("selection",(e,n,o)=>{const r=o.writer;i(r);const s=this.getSelectedTableCells();if(!s){return}for(const e of s){const i=o.mapper.toViewElement(e);r.addClass("ck-editor__editable_selected",i);t.add(i)}const a=o.mapper.toViewElement(s[s.length-1]);r.setSelection(a,0)},{priority:"lowest"}));function i(e){for(const i of t){e.removeClass("ck-editor__editable_selected",i)}t.clear()}}_enableShiftClickSelection(){const e=this.editor;let t=false;this.listenTo(e.editing.view.document,"mousedown",(i,n)=>{if(!this.isEnabled){return}if(!n.domEvent.shiftKey){return}const o=this.getAnchorCell()||BI(e.model.document.selection)[0];if(!o){return}const r=this._getModelTableCellFromDomEvent(n);if(r&&SN(o,r)){t=true;this.setCellSelection(o,r);n.preventDefault()}});this.listenTo(e.editing.view.document,"mouseup",()=>{t=false});this.listenTo(e.editing.view.document,"selectionChange",e=>{if(t){e.stop()}},{priority:"highest"})}_enableMouseDragSelection(){const e=this.editor;let t,i;let n=false;let o=false;this.listenTo(e.editing.view.document,"mousedown",(e,i)=>{if(!this.isEnabled){return}if(i.domEvent.shiftKey||i.domEvent.ctrlKey||i.domEvent.altKey){return}t=this._getModelTableCellFromDomEvent(i)});this.listenTo(e.editing.view.document,"mousemove",(e,r)=>{if(!r.domEvent.buttons){return}if(!t){return}const s=this._getModelTableCellFromDomEvent(r);if(s&&SN(t,s)){i=s;if(!n&&i!=t){n=true}}if(!n){return}o=true;this.setCellSelection(t,i);r.preventDefault()});this.listenTo(e.editing.view.document,"mouseup",()=>{n=false;o=false;t=null;i=null});this.listenTo(e.editing.view.document,"selectionChange",e=>{if(o){e.stop()}},{priority:"highest"})}_enablePluginDisabling(){const e=this.editor;this.on("change:isEnabled",()=>{if(!this.isEnabled){const t=this.getSelectedTableCells();if(!t){return}e.model.change(i=>{const n=i.createPositionAt(t[0],0);const o=e.model.schema.getNearestSelectionRange(n);i.setSelection(o)})}})}_handleDeleteContent(e,t){const[i,n]=t;const o=this.editor.model;const r=!n||n.direction=="backward";const s=jI(i);if(!s.length){return}e.stop();o.change(e=>{const t=s[r?s.length-1:0];o.change(e=>{for(const t of s){o.deleteContent(e.createSelection(t,"in"))}});const n=o.schema.getNearestSelectionRange(e.createPositionAt(t,0));if(i.is("documentSelection")){e.setSelection(n)}else{i.setTo(n)}})}_getModelTableCellFromDomEvent(e){const t=e.target;const i=this.editor.editing.view.createPositionAt(t,0);const n=this.editor.editing.mapper.toModelPosition(i);const o=n.parent;if(o.is("tableCell")){return o}return yI("tableCell",o)}_getCellsToSelect(e,t){const i=this.editor.plugins.get("TableUtils");const n=i.getCellLocation(e);const o=i.getCellLocation(t);const r=Math.min(n.row,o.row);const s=Math.max(n.row,o.row);const a=Math.min(n.column,o.column);const l=Math.max(n.column,o.column);const c=new Array(s-r+1).fill(null).map(()=>[]);for(const t of new NI(yI("table",e),{startRow:r,endRow:s})){if(t.column>=a&&t.column<=l){c[t.row-r].push(t.cell)}}const d=o.rowe.reverse())}return{cells:c.flat(),backward:d||u}}}function SN(e,t){return e.parent.parent==t.parent.parent}class IN extends Rw{static get pluginName(){return"TableClipboard"}static get requires(){return[MN,zL]}init(){const e=this.editor;const t=e.editing.view.document;this.listenTo(t,"copy",(e,t)=>this._onCopyCut(e,t));this.listenTo(t,"cut",(e,t)=>this._onCopyCut(e,t));this.listenTo(e.model,"insertContent",(e,t)=>this._onInsertContent(e,...t),{priority:"high"})}_onCopyCut(e,t){const i=this.editor.plugins.get(MN);if(!i.getSelectedTableCells()){return}if(e.name=="cut"&&this.editor.isReadOnly){return}t.preventDefault();e.stop();const n=this.editor.data;const o=this.editor.editing.view.document;const r=n.toView(i.getSelectionAsFragment());o.fire("clipboardOutput",{dataTransfer:t.dataTransfer,content:r,method:e.name})}_onInsertContent(e,t,i){if(i&&!i.is("documentSelection")){return}const n=this.editor.model;const o=this.editor.plugins.get(zL);const r=VI(n.document.selection);if(!r.length){return}let s=ON(t);if(!s){return}e.stop();n.change(e=>{const t=HI(r);const i=FI(r);let{first:n,last:a}=t;let{first:l,last:c}=i;const d=o.getRows(s);const u=o.getColumns(s);const h=yI("table",r[0]);const f=r.length===1;if(f){c+=d-1;a+=u-1;NN(h,c+1,a+1,e,o)}if(f||!WI(r,o)){const t={firstRow:l,lastRow:c,firstColumn:n,lastColumn:a};zN(h,t,e)}else{c=VN(h,i,t);a=FN(h,i,t)}const m=c-l+1;const g=a-n+1;const p={startRow:0,startColumn:0,endRow:Math.min(m-1,d-1),endColumn:Math.min(g-1,u-1)};s=CN(s,p,e,o);const b={width:u,height:d};const w={firstColumnOfSelection:n,firstRowOfSelection:l,lastColumnOfSelection:a,lastRowOfSelection:c};LN(s,b,h,w,e)})}}function LN(e,t,i,n,o){const{firstColumnOfSelection:r,lastColumnOfSelection:s,firstRowOfSelection:a,lastRowOfSelection:l}=n;const{width:c,height:d}=t;const u=RN(e,c,d);const h=[...new NI(i,{startRow:a,endRow:l,includeSpanned:true})];const f=[];let m;for(const{row:e,column:t,cell:n,isSpanned:g}of h){if(t===0){m=null}if(ts){if(!g){m=n}continue}if(!g){o.remove(n)}const h=e-a;const p=t-r;const b=u[h%d][p%c];if(!b){continue}const w=b._clone(true);TN(w,e,t,l,s,o);let _;if(!m){_=o.createPositionAt(i.getChild(e),0)}else{_=o.createPositionAfter(m)}o.insert(w,_);f.push(w);m=w}o.setSelection(f.map(e=>o.createRangeOn(e)))}function NN(e,t,i,n,o){const r=o.getColumns(e);const s=o.getRows(e);if(i>r){o.insertColumns(e,{batch:n.batch,at:r,columns:i-r})}if(t>s){o.insertRows(e,{batch:n.batch,at:s,rows:t-s})}}function ON(e){if(e.is("table")){return e}if(e.childCount!=1||!e.getChild(0).is("table")){return null}return e.getChild(0)}function RN(e,t,i){const n=new Array(i).fill(null).map(()=>new Array(t).fill(null));for(const{column:t,row:i,cell:o}of new NI(e)){n[i][t]=o}return n}function zN(e,t,i){const{firstRow:n,lastRow:o,firstColumn:r,lastColumn:s}=t;const a={first:n,last:o};const l={first:r,last:s};jN(e,r,a,i);jN(e,s+1,a,i);DN(e,n,l,i);DN(e,o+1,l,i,n)}function DN(e,t,i,n,o=0){if(t<1){return}const r=UI(e,t,o);const s=r.filter(({column:e,colspan:t})=>BN(e,t,i));for(const{cell:e}of s){qI(e,t,n)}}function jN(e,t,i,n){if(t<1){return}const o=$I(e,t);const r=o.filter(({row:e,rowspan:t})=>BN(e,t,i));for(const{cell:e,column:i}of r){GI(e,i,t,n)}}function BN(e,t,i){const n=e+t-1;const{first:o,last:r}=i;const s=e>=o&&e<=r;const a=e=o;return s||a}function VN(e,t,i){const n=new NI(e,{startRow:t.last,endRow:t.last});const o=Array.from(n).filter(({column:e})=>i.first<=e&&e<=i.last);const r=o.every(({rowspan:e})=>e===1);if(r){return t.last}const s=o[0].rowspan-1;return t.last+s}function FN(e,t,i){const n=Array.from(new NI(e,{startRow:t.first,endRow:t.last,column:i.last}));const o=n.every(({colspan:e})=>e===1);if(o){return i.last}const r=n[0].colspan-1;return i.last+r}class HN extends Rw{static get pluginName(){return"TableNavigation"}static get requires(){return[MN]}init(){const e=this.editor.editing.view;const t=e.document;this.editor.keystrokes.set("Tab",(...e)=>this._handleTabOnSelectedTable(...e),{priority:"low"});this.editor.keystrokes.set("Tab",this._getTabHandler(true),{priority:"low"});this.editor.keystrokes.set("Shift+Tab",this._getTabHandler(false),{priority:"low"});this.listenTo(t,"keydown",(...e)=>this._onKeydown(...e),{priority:os.get("high")+1})}_handleTabOnSelectedTable(e,t){const i=this.editor;const n=i.model.document.selection;if(!n.isCollapsed&&n.rangeCount===1&&n.getFirstRange().isFlat){const e=n.getSelectedElement();if(!e||!e.is("table")){return}t();i.model.change(t=>{t.setSelection(t.createRangeIn(e.getChild(0).getChild(0)))})}}_getTabHandler(e){const t=this.editor;return(i,n)=>{const o=t.model.document.selection;const r=BI(o)[0];if(!r){return}n();const s=r.parent;const a=s.parent;const l=a.getChildIndex(s);const c=s.getChildIndex(r);const d=c===0;if(!e&&d&&l===0){return}const u=c===s.childCount-1;const h=l===a.childCount-1;if(e&&h&&u){t.execute("insertTableRowBelow");if(l===a.childCount-1){return}}let f;if(e&&u){const e=a.getChild(l+1);f=e.getChild(0)}else if(!e&&d){const e=a.getChild(l-1);f=e.getChild(e.childCount-1)}else{f=s.getChild(c+(e?1:-1))}t.model.change(e=>{e.setSelection(e.createRangeIn(f))})}}_onKeydown(e,t){const i=t.keyCode;if(!WN(i)){return}const n=UN(i,this.editor.locale.contentLanguageDirection);const o=this._handleArrowKeys(n,t.shiftKey);if(o){t.preventDefault();t.stopPropagation();e.stop()}}_handleArrowKeys(e,t){const i=this.editor.model;const n=i.document.selection;const o=["right","down"].includes(e);const r=jI(n);if(r.length){let i;if(t){i=this.editor.plugins.get("TableSelection").getFocusCell()}else{i=o?r[r.length-1]:r[0]}this._navigateFromCellInDirection(i,e,t);return true}const s=yI("tableCell",n.focus);if(!s){return false}const a=i.createRangeIn(s);if(this._isSelectionAtCellEdge(n,o)){this._navigateFromCellInDirection(s,e,t);return true}const l=n.getSelectedElement();if(l&&i.schema.isObject(l)){return false}if(this._isObjectElementNextToSelection(n,o)){return false}const c=this._findTextRangeFromSelection(a,n,o);if(!c){this._navigateFromCellInDirection(s,e,t);return true}if(["left","right"].includes(e)){return false}if(this._isSingleLineRange(c,o)){i.change(e=>{const r=o?a.end:a.start;if(t){const t=i.createSelection(n.anchor);t.setFocus(r);e.setSelection(t)}else{e.setSelection(r)}});return true}}_isSelectionAtCellEdge(e,t){const i=this.editor.model;const n=this.editor.model.schema;const o=t?e.getLastPosition():e.getFirstPosition();if(!n.getLimitElement(o).is("tableCell")){return false}const r=i.createSelection(o);i.modifySelection(r,{direction:t?"forward":"backward"});return o.isEqual(r.focus)}_isObjectElementNextToSelection(e,t){const i=this.editor.model;const n=i.schema;const o=i.createSelection(e);i.modifySelection(o,{direction:t?"forward":"backward"});const r=t?o.focus.nodeBefore:o.focus.nodeAfter;return r&&n.isObject(r)}_findTextRangeFromSelection(e,t,i){const n=this.editor.model;if(i){const i=t.getLastPosition();const o=this._getNearestVisibleTextPosition(e,"backward");if(o&&i.isBefore(o)){return n.createRange(i,o)}return null}else{const i=t.getFirstPosition();const o=this._getNearestVisibleTextPosition(e,"forward");if(o&&i.isAfter(o)){return n.createRange(o,i)}return null}}_getNearestVisibleTextPosition(e,t){const i=this.editor.model.schema;const n=this.editor.editing.mapper;for(const{nextPosition:o,item:r}of e.getWalker({direction:t})){if(i.checkChild(o,"$text")){const e=n.toViewElement(r);if(e&&!e.hasClass("ck-hidden")){return o}}}}_isSingleLineRange(e,t){const i=this.editor.model;const n=this.editor.editing;const o=n.view.domConverter;if(t){const t=i.createSelection(e.start);i.modifySelection(t);if(!t.focus.isAtEnd&&!e.start.isEqual(t.focus)){e=i.createRange(t.focus,e.end)}}const r=n.mapper.toViewRange(e);const s=o.viewRangeToDom(r);const a=vh.getDomRangeRects(s);let l;for(const e of a){if(l===undefined){l=Math.round(e.bottom);continue}if(Math.round(e.top)>=l){return false}l=Math.max(l,Math.round(e.bottom))}return true}_navigateFromCellInDirection(e,t,i=false){const n=this.editor.model;const o=yI("table",e);const r=[...new NI(o,{includeSpanned:true})];const{row:s,column:a}=r[r.length-1];const l=r.find(({cell:t})=>t==e);let{row:c,column:d}=l;switch(t){case"left":d--;break;case"up":c--;break;case"right":d+=l.colspan;break;case"down":c+=l.rowspan;break}const u=c<0||c>s;const h=d<0&&c<=0;const f=d>a&&c>=s;if(u||h||f){n.change(e=>{e.setSelection(e.createRangeOn(o))});return}if(d<0){d=i?0:a;c--}else if(d>a){d=i?a:0;c++}const m=r.find(e=>e.row==c&&e.column==d).cell;const g=["right","down"].includes(t);if(i){const t=this.editor.plugins.get("TableSelection");const i=t.getAnchorCell()||e;t.setCellSelection(i,m)}else{const e=n.createPositionAt(m,g?0:"end");n.change(t=>{t.setSelection(e)})}}}function WN(e){return e==Oc.arrowright||e==Oc.arrowleft||e==Oc.arrowup||e==Oc.arrowdown}function UN(e,t){const i=t==="ltr";switch(e){case Oc.arrowleft:return i?"left":"right";case Oc.arrowright:return i?"right":"left";case Oc.arrowup:return"up";case Oc.arrowdown:return"down"}}var qN=i(128);class $N extends Rw{static get requires(){return[mN,yN,MN,IN,HN,uA]}static get pluginName(){return"Table"}}var GN=i(130);class YN extends _b{constructor(e,t){super(e);const i=this.bindTemplate;this.set("value","");this.set("id");this.set("isReadOnly",false);this.set("hasError",false);this.set("ariaDescribedById");this.options=t;this._dropdownView=this._createDropdownView(e);this._inputView=this._createInputTextView(e);this._stillTyping=false;this.setTemplate({tag:"div",attributes:{class:["ck","ck-input-color",i.if("hasError","ck-error")],id:i.to("id"),"aria-invalid":i.if("hasError",true),"aria-describedby":i.to("ariaDescribedById")},children:[this._inputView,this._dropdownView]});this.on("change:value",(e,t,i)=>this._setInputValue(i))}focus(){this._inputView.focus()}_createDropdownView(){const e=this.locale;const t=e.t;const i=this.bindTemplate;const n=this._createColorGrid(e);const o=bw(e);const r=new _b;const s=this._createRemoveColorButton(e);r.setTemplate({tag:"span",attributes:{class:["ck","ck-input-color__button__preview"],style:{backgroundColor:i.to("value")}},children:[{tag:"span",attributes:{class:["ck","ck-input-color__button__preview__no-color-indicator",i.if("value","ck-hidden",e=>e!="")]}}]});o.buttonView.extendTemplate({attributes:{class:"ck-input-color__button"}});o.buttonView.children.add(r);o.buttonView.tooltip=t("Color picker");o.panelPosition=e.uiLanguageDirection==="rtl"?"se":"sw";o.panelView.children.add(s);o.panelView.children.add(n);o.bind("isEnabled").to(this,"isReadOnly",e=>!e);return o}_createInputTextView(){const e=this.locale;const t=new vA(e);t.extendTemplate({on:{blur:t.bindTemplate.to("blur")}});t.value=this.value;t.bind("isReadOnly").to(this);t.bind("hasError").to(this);t.on("input",()=>{const e=t.element.value;const i=this.options.colorDefinitions.find(t=>e===t.label);this._stillTyping=true;this.value=i&&i.color||e});t.on("blur",()=>{this._stillTyping=false;this._setInputValue(t.element.value)});t.delegate("input").to(this);return t}_createRemoveColorButton(){const e=this.locale;const t=e.t;const i=new rw(e);i.class="ck-input-color__remove-color";i.withText=true;i.icon=Tv;i.label=t("Remove color");i.on("execute",()=>{this.value="";this._dropdownView.isOpen=false;this.fire("input")});return i}_createColorGrid(e){const t=new Av(e,{colorDefinitions:this.options.colorDefinitions,columns:this.options.columns});t.on("execute",(e,t)=>{this.value=t.value;this._dropdownView.isOpen=false;this.fire("input")});t.bind("selectedColor").to(this,"value");return t}_setInputValue(e){if(!this._stillTyping){const t=KN(e);const i=this.options.colorDefinitions.find(e=>t===KN(e.color));if(i){this._inputView.value=i.label}else{this._inputView.value=e||""}}}}function KN(e){return e.replace(/([(,])\s+/g,"$1").replace(/^\s+|\s+(?=[),\s]|$)/g,"").replace(/,|\s/g," ")}const JN=ex.defaultPositions;const QN=[JN.northArrowSouth,JN.northArrowSouthWest,JN.northArrowSouthEast,JN.southArrowNorth,JN.southArrowNorthWest,JN.southArrowNorthEast];const ZN=[...QN,gx];const XN=e=>e==="";function eO(e,t){const i=e.plugins.get("ContextualBalloon");if(DI(e.editing.view.document.selection)){let n;if(t==="cell"){n=iO(e)}else{n=tO(e)}i.updatePosition(n)}}function tO(e){const t=e.model.document.selection.getFirstPosition();const i=yI("table",t);const n=e.editing.mapper.toViewElement(i);return{target:e.editing.view.domConverter.viewToDom(n),positions:ZN}}function iO(e){const t=e.editing.mapper;const i=e.editing.view.domConverter;const n=e.model.document.selection;if(n.rangeCount>1){return{target:()=>pO(n.getRanges(),e=>{const n=gO(e.start);const o=t.toViewElement(n);return new vh(i.viewToDom(o))}),positions:QN}}const o=gO(n.getFirstPosition());const r=t.toViewElement(o);return{target:i.viewToDom(r),positions:QN}}function nO(e){return{none:e("None"),solid:e("Solid"),dotted:e("Dotted"),dashed:e("Dashed"),double:e("Double"),groove:e("Groove"),ridge:e("Ridge"),inset:e("Inset"),outset:e("Outset")}}function oO(e){return e('The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".')}function rO(e){return e('The value is invalid. Try "10px" or "2em" or simply "2".')}function sO(e){e=e.trim();return XN(e)||DT(e)}function aO(e){e=e.trim();return XN(e)||fO(e)||FT(e)||WT(e)}function lO(e){e=e.trim();return XN(e)||fO(e)||FT(e)}function cO(e){const t=new xs;const i=nO(e.t);for(const n in i){const o={type:"button",model:new sk({_borderStyleValue:n==="none"?"":n,label:i[n],withText:true})};if(n==="none"){o.model.bind("isOn").to(e,"borderStyle",e=>!e)}else{o.model.bind("isOn").to(e,"borderStyle",e=>e===n)}t.add(o)}return t}function dO({view:e,icons:t,toolbar:i,labels:n,propertyName:o,nameToValue:r}){for(const s in n){const a=new rw(e.locale);a.set({label:n[s],icon:t[s],tooltip:n[s]});a.bind("isOn").to(e,o,e=>e===r(s));a.on("execute",()=>{e[o]=r(s)});i.items.add(a)}}const uO=[{color:"hsl(0, 0%, 0%)",label:"Black"},{color:"hsl(0, 0%, 30%)",label:"Dim grey"},{color:"hsl(0, 0%, 60%)",label:"Grey"},{color:"hsl(0, 0%, 90%)",label:"Light grey"},{color:"hsl(0, 0%, 100%)",label:"White",hasBorder:true},{color:"hsl(0, 75%, 60%)",label:"Red"},{color:"hsl(30, 75%, 60%)",label:"Orange"},{color:"hsl(60, 75%, 60%)",label:"Yellow"},{color:"hsl(90, 75%, 60%)",label:"Light green"},{color:"hsl(120, 75%, 60%)",label:"Green"},{color:"hsl(150, 75%, 60%)",label:"Aquamarine"},{color:"hsl(180, 75%, 60%)",label:"Turquoise"},{color:"hsl(210, 75%, 60%)",label:"Light blue"},{color:"hsl(240, 75%, 60%)",label:"Blue"},{color:"hsl(270, 75%, 60%)",label:"Purple"}];function hO(e){return(t,i,n)=>{const o=new YN(t.locale,{colorDefinitions:mO(e.colorConfig),columns:e.columns});o.set({id:i,ariaDescribedById:n});o.bind("isReadOnly").to(t,"isEnabled",e=>!e);o.bind("errorText").to(t);o.on("input",()=>{t.errorText=null});return o}}function fO(e){const t=parseFloat(e);return!Number.isNaN(t)&&e===String(t)}function mO(e){return e.map(e=>({color:e.model,label:e.label,options:{hasBorder:e.hasBorder}}))}function gO(e){const t=e.nodeAfter&&e.nodeAfter.is("tableCell");return t?e.nodeAfter:yI("tableCell",e)}function pO(e,t){const i={left:Number.POSITIVE_INFINITY,top:Number.POSITIVE_INFINITY,right:Number.NEGATIVE_INFINITY,bottom:Number.NEGATIVE_INFINITY};for(const n of e){const e=t(n);i.left=Math.min(i.left,e.left);i.top=Math.min(i.top,e.top);i.right=Math.max(i.right,e.right);i.bottom=Math.max(i.bottom,e.bottom)}i.width=i.right-i.left;i.height=i.bottom-i.top;return new vh(i)}var bO=i(132);class wO extends _b{constructor(e,t={}){super(e);const i=this.bindTemplate;this.set("class",t.class||null);this.children=this.createCollection();if(t.children){t.children.forEach(e=>this.children.add(e))}this.set("_role",null);this.set("_ariaLabelledBy",null);if(t.labelView){this.set({_role:"group",_ariaLabelledBy:t.labelView.id})}this.setTemplate({tag:"div",attributes:{class:["ck","ck-form__row",i.to("class")],role:i.to("_role"),"aria-labelledby":i.to("_ariaLabelledBy")},children:this.children})}}var _O='';var kO='';var vO='';var yO=i(13);var xO=i(14);var AO=i(136);const CO={left:Kw,center:Qw,right:Jw,justify:Zw,top:_O,middle:kO,bottom:vO};class TO extends _b{constructor(e,t){super(e);this.set({borderStyle:"",borderWidth:"",borderColor:"",padding:"",backgroundColor:"",width:"",height:"",horizontalAlignment:"",verticalAlignment:""});this.options=t;const{borderStyleDropdown:i,borderWidthInput:n,borderColorInput:o,borderRowLabel:r}=this._createBorderFields();const{widthInput:s,operatorLabel:a,heightInput:l,dimensionsLabel:c}=this._createDimensionFields();const{horizontalAlignmentToolbar:d,verticalAlignmentToolbar:u,alignmentLabel:h}=this._createAlignmentFields();this.focusTracker=new Ep;this.keystrokes=new mp;this.children=this.createCollection();this.borderStyleDropdown=i;this.borderWidthInput=n;this.borderColorInput=o;this.backgroundInput=this._createBackgroundField();this.paddingInput=this._createPaddingField();this.widthInput=s;this.heightInput=l;this.horizontalAlignmentToolbar=d;this.verticalAlignmentToolbar=u;const{saveButtonView:f,cancelButtonView:m}=this._createActionButtons();this.saveButtonView=f;this.cancelButtonView=m;this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this.children.add(new XS(e,{label:this.t("Cell properties")}));this.children.add(new wO(e,{labelView:r,children:[r,i,o,n],class:"ck-table-form__border-row"}));this.children.add(new wO(e,{children:[this.backgroundInput]}));this.children.add(new wO(e,{children:[new wO(e,{labelView:c,children:[c,s,a,l],class:"ck-table-form__dimensions-row"}),new wO(e,{children:[this.paddingInput],class:"ck-table-cell-properties-form__padding-row"})]}));this.children.add(new wO(e,{labelView:h,children:[h,d,u],class:"ck-table-cell-properties-form__alignment-row"}));this.children.add(new wO(e,{children:[this.saveButtonView,this.cancelButtonView],class:"ck-table-form__action-row"}));this.setTemplate({tag:"form",attributes:{class:["ck","ck-form","ck-table-form","ck-table-cell-properties-form"],tabindex:"-1"},children:this.children})}render(){super.render();AA({view:this});[this.borderStyleDropdown,this.borderColorInput,this.borderWidthInput,this.backgroundInput,this.widthInput,this.heightInput,this.paddingInput,this.horizontalAlignmentToolbar,this.verticalAlignmentToolbar,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createBorderFields(){const e=hO({colorConfig:this.options.borderColors,columns:5});const t=this.locale;const i=this.t;const n=new Pb(t);n.text=i("Border");const o=nO(i);const r=new _A(t,xA);r.set({label:i("Style"),class:"ck-table-form__border-style"});r.fieldView.buttonView.set({isOn:false,withText:true,tooltip:i("Style")});r.fieldView.buttonView.bind("label").to(this,"borderStyle",e=>o[e?e:"none"]);r.fieldView.on("execute",e=>{this.borderStyle=e.source._borderStyleValue});_w(r.fieldView,cO(this));const s=new _A(t,yA);s.set({label:i("Width"),class:"ck-table-form__border-width"});s.fieldView.bind("value").to(this,"borderWidth");s.bind("isEnabled").to(this,"borderStyle",EO);s.fieldView.on("input",()=>{this.borderWidth=s.fieldView.element.value});const a=new _A(t,e);a.set({label:i("Color"),class:"ck-table-form__border-color"});a.fieldView.bind("value").to(this,"borderColor");a.bind("isEnabled").to(this,"borderStyle",EO);a.fieldView.on("input",()=>{this.borderColor=a.fieldView.value});this.on("change:borderStyle",(e,t,i)=>{if(!EO(i)){this.borderColor="";this.borderWidth=""}});return{borderRowLabel:n,borderStyleDropdown:r,borderColorInput:a,borderWidthInput:s}}_createBackgroundField(){const e=this.locale;const t=this.t;const i=hO({colorConfig:this.options.backgroundColors,columns:5});const n=new _A(e,i);n.set({label:t("Background"),class:"ck-table-cell-properties-form__background"});n.fieldView.bind("value").to(this,"backgroundColor");n.fieldView.on("input",()=>{this.backgroundColor=n.fieldView.value});return n}_createDimensionFields(){const e=this.locale;const t=this.t;const i=new Pb(e);i.text=t("Dimensions");const n=new _A(e,yA);n.set({label:t("Width"),class:"ck-table-form__dimensions-row__width"});n.fieldView.bind("value").to(this,"width");n.fieldView.on("input",()=>{this.width=n.fieldView.element.value});const o=new _b(e);o.setTemplate({tag:"span",attributes:{class:["ck-table-form__dimension-operator"]},children:[{text:"×"}]});const r=new _A(e,yA);r.set({label:t("Height"),class:"ck-table-form__dimensions-row__height"});r.fieldView.bind("value").to(this,"height");r.fieldView.on("input",()=>{this.height=r.fieldView.element.value});return{dimensionsLabel:i,widthInput:n,operatorLabel:o,heightInput:r}}_createPaddingField(){const e=this.locale;const t=this.t;const i=new _A(e,yA);i.set({label:t("Padding"),class:"ck-table-cell-properties-form__padding"});i.fieldView.bind("value").to(this,"padding");i.fieldView.on("input",()=>{this.padding=i.fieldView.element.value});return i}_createAlignmentFields(){const e=this.locale;const t=this.t;const i=new Pb(e);i.text=t("Table cell text alignment");const n=new Tw(e);const o=this.locale.contentLanguageDirection==="rtl";n.set({isCompact:true,ariaLabel:t("Horizontal text alignment toolbar")});dO({view:this,icons:CO,toolbar:n,labels:this._horizontalAlignmentLabels,propertyName:"horizontalAlignment",nameToValue:e=>e===(o?"right":"left")?"":e});const r=new Tw(e);r.set({isCompact:true,ariaLabel:t("Vertical text alignment toolbar")});dO({view:this,icons:CO,toolbar:r,labels:this._verticalAlignmentLabels,propertyName:"verticalAlignment",nameToValue:e=>e==="middle"?"":e});return{horizontalAlignmentToolbar:n,verticalAlignmentToolbar:r,alignmentLabel:i}}_createActionButtons(){const e=this.locale;const t=this.t;const i=new rw(e);const n=new rw(e);const o=[this.borderWidthInput,this.borderColorInput,this.backgroundInput,this.paddingInput];i.set({label:t("Save"),icon:CA,class:"ck-button-save",type:"submit",withText:true});i.bind("isEnabled").toMany(o,"errorText",(...e)=>e.every(e=>!e));n.set({label:t("Cancel"),icon:TA,class:"ck-button-cancel",type:"cancel",withText:true});n.delegate("execute").to(this,"cancel");return{saveButtonView:i,cancelButtonView:n}}get _horizontalAlignmentLabels(){const e=this.locale;const t=this.t;const i=t("Align cell text to the left");const n=t("Align cell text to the center");const o=t("Align cell text to the right");const r=t("Justify cell text");if(e.uiLanguageDirection==="rtl"){return{right:o,center:n,left:i,justify:r}}else{return{left:i,center:n,right:o,justify:r}}}get _verticalAlignmentLabels(){const e=this.t;return{top:e("Align cell text to the top"),middle:e("Align cell text to the middle"),bottom:e("Align cell text to the bottom")}}}function EO(e){return!!e}var PO='';const MO=500;const SO={borderStyle:"tableCellBorderStyle",borderColor:"tableCellBorderColor",borderWidth:"tableCellBorderWidth",width:"tableCellWidth",height:"tableCellHeight",padding:"tableCellPadding",backgroundColor:"tableCellBackgroundColor",horizontalAlignment:"tableCellHorizontalAlignment",verticalAlignment:"tableCellVerticalAlignment"};class IO extends Rw{static get requires(){return[OA]}static get pluginName(){return"TableCellPropertiesUI"}constructor(e){super(e);e.config.define("table.tableCellProperties",{borderColors:uO,backgroundColors:uO})}init(){const e=this.editor;const t=e.t;this._balloon=e.plugins.get(OA);this.view=this._createPropertiesView();this._undoStepBatch=null;e.ui.componentFactory.add("tableCellProperties",i=>{const n=new rw(i);n.set({label:t("Cell properties"),icon:PO,tooltip:true});this.listenTo(n,"execute",()=>this._showView());const o=Object.values(SO).map(t=>e.commands.get(t));n.bind("isEnabled").toMany(o,"isEnabled",(...e)=>e.some(e=>e));return n})}destroy(){super.destroy();this.view.destroy()}_createPropertiesView(){const e=this.editor;const t=e.editing.view.document;const i=e.config.get("table.tableCellProperties");const n=Fv(i.borderColors);const o=Vv(e.locale,n);const r=Fv(i.backgroundColors);const s=Vv(e.locale,r);const a=new TO(e.locale,{borderColors:o,backgroundColors:s});const l=e.t;a.render();this.listenTo(a,"submit",()=>{this._hideView()});this.listenTo(a,"cancel",()=>{if(this._undoStepBatch.operations.length){e.execute("undo",this._undoStepBatch)}this._hideView()});a.keystrokes.set("Esc",(e,t)=>{this._hideView();t()});this.listenTo(e.ui,"update",()=>{if(!DI(t.selection)){this._hideView()}else if(this._isViewVisible){eO(e,"cell")}});mw({emitter:a,activator:()=>this._isViewInBalloon,contextElements:[this._balloon.view.element],callback:()=>this._hideView()});const c=oO(l);const d=rO(l);a.on("change:borderStyle",this._getPropertyChangeCallback("tableCellBorderStyle"));a.on("change:borderColor",this._getValidatedPropertyChangeCallback({viewField:a.borderColorInput,commandName:"tableCellBorderColor",errorText:c,validator:sO}));a.on("change:borderWidth",this._getValidatedPropertyChangeCallback({viewField:a.borderWidthInput,commandName:"tableCellBorderWidth",errorText:d,validator:lO}));a.on("change:padding",this._getValidatedPropertyChangeCallback({viewField:a.paddingInput,commandName:"tableCellPadding",errorText:d,validator:aO}));a.on("change:width",this._getValidatedPropertyChangeCallback({viewField:a.widthInput,commandName:"tableCellWidth",errorText:d,validator:aO}));a.on("change:height",this._getValidatedPropertyChangeCallback({viewField:a.heightInput,commandName:"tableCellHeight",errorText:d,validator:aO}));a.on("change:backgroundColor",this._getValidatedPropertyChangeCallback({viewField:a.backgroundInput,commandName:"tableCellBackgroundColor",errorText:c,validator:sO}));a.on("change:horizontalAlignment",this._getPropertyChangeCallback("tableCellHorizontalAlignment"));a.on("change:verticalAlignment",this._getPropertyChangeCallback("tableCellVerticalAlignment"));return a}_fillViewFormFromCommandValues(){const e=this.editor.commands;Object.entries(SO).map(([t,i])=>[t,e.get(i).value||""]).forEach(([e,t])=>this.view.set(e,t))}_showView(){const e=this.editor;this._balloon.add({view:this.view,position:iO(e)});this._undoStepBatch=e.model.createBatch();this._fillViewFormFromCommandValues();this.view.focus()}_hideView(){if(!this._isViewInBalloon){return}const e=this.editor;this.stopListening(e.ui,"update");this.view.saveButtonView.focus();this._balloon.remove(this.view);this.editor.editing.view.focus()}get _isViewVisible(){return this._balloon.visibleView===this.view}get _isViewInBalloon(){return this._balloon.hasView(this.view)}_getPropertyChangeCallback(e){return(t,i,n)=>{this.editor.execute(e,{value:n,batch:this._undoStepBatch})}}_getValidatedPropertyChangeCallback({commandName:e,viewField:t,validator:i,errorText:n}){const o=uh(()=>{t.errorText=n},MO);return(n,r,s)=>{o.cancel();if(i(s)){this.editor.execute(e,{value:s,batch:this._undoStepBatch});t.errorText=null}else{o()}}}}function LO(e){e.setNormalizer("border",NO);e.setNormalizer("border-top",OO("top"));e.setNormalizer("border-right",OO("right"));e.setNormalizer("border-bottom",OO("bottom"));e.setNormalizer("border-left",OO("left"));e.setNormalizer("border-color",RO("color"));e.setNormalizer("border-width",RO("width"));e.setNormalizer("border-style",RO("style"));e.setNormalizer("border-top-color",DO("color","top"));e.setNormalizer("border-top-style",DO("style","top"));e.setNormalizer("border-top-width",DO("width","top"));e.setNormalizer("border-right-color",DO("color","right"));e.setNormalizer("border-right-style",DO("style","right"));e.setNormalizer("border-right-width",DO("width","right"));e.setNormalizer("border-bottom-color",DO("color","bottom"));e.setNormalizer("border-bottom-style",DO("style","bottom"));e.setNormalizer("border-bottom-width",DO("width","bottom"));e.setNormalizer("border-left-color",DO("color","left"));e.setNormalizer("border-left-style",DO("style","left"));e.setNormalizer("border-left-width",DO("width","left"));e.setExtractor("border-top",jO("top"));e.setExtractor("border-right",jO("right"));e.setExtractor("border-bottom",jO("bottom"));e.setExtractor("border-left",jO("left"));e.setExtractor("border-top-color","border.color.top");e.setExtractor("border-right-color","border.color.right");e.setExtractor("border-bottom-color","border.color.bottom");e.setExtractor("border-left-color","border.color.left");e.setExtractor("border-top-width","border.width.top");e.setExtractor("border-right-width","border.width.right");e.setExtractor("border-bottom-width","border.width.bottom");e.setExtractor("border-left-width","border.width.left");e.setExtractor("border-top-style","border.style.top");e.setExtractor("border-right-style","border.style.right");e.setExtractor("border-bottom-style","border.style.bottom");e.setExtractor("border-left-style","border.style.left");e.setReducer("border-color",XT("border-color"));e.setReducer("border-style",XT("border-style"));e.setReducer("border-width",XT("border-width"));e.setReducer("border-top",HO("top"));e.setReducer("border-right",HO("right"));e.setReducer("border-bottom",HO("bottom"));e.setReducer("border-left",HO("left"));e.setReducer("border",FO);e.setStyleRelation("border",["border-color","border-style","border-width","border-top","border-right","border-bottom","border-left","border-top-color","border-right-color","border-bottom-color","border-left-color","border-top-style","border-right-style","border-bottom-style","border-left-style","border-top-width","border-right-width","border-bottom-width","border-left-width"]);e.setStyleRelation("border-color",["border-top-color","border-right-color","border-bottom-color","border-left-color"]);e.setStyleRelation("border-style",["border-top-style","border-right-style","border-bottom-style","border-left-style"]);e.setStyleRelation("border-width",["border-top-width","border-right-width","border-bottom-width","border-left-width"]);e.setStyleRelation("border-top",["border-top-color","border-top-style","border-top-width"]);e.setStyleRelation("border-right",["border-right-color","border-right-style","border-right-width"]);e.setStyleRelation("border-bottom",["border-bottom-color","border-bottom-style","border-bottom-width"]);e.setStyleRelation("border-left",["border-left-color","border-left-style","border-left-width"])}function NO(e){const{color:t,style:i,width:n}=VO(e);return{path:"border",value:{color:ZT(t),style:ZT(i),width:ZT(n)}}}function OO(e){return t=>{const{color:i,style:n,width:o}=VO(t);const r={};if(i!==undefined){r.color={[e]:i}}if(n!==undefined){r.style={[e]:n}}if(o!==undefined){r.width={[e]:o}}return{path:"border",value:r}}}function RO(e){return t=>({path:"border",value:zO(t,e)})}function zO(e,t){return{[t]:ZT(e)}}function DO(e,t){return i=>({path:"border",value:{[e]:{[t]:i}}})}function jO(e){return(t,i)=>{if(i.border){return BO(i.border,e)}}}function BO(e,t){const i={};if(e.width&&e.width[t]){i.width=e.width[t]}if(e.style&&e.style[t]){i.style=e.style[t]}if(e.color&&e.color[t]){i.color=e.color[t]}return i}function VO(e){const t={};const i=iE(e);for(const e of i){if(FT(e)||/thin|medium|thick/.test(e)){t.width=e}else if(BT(e)){t.style=e}else{t.color=e}}return t}function FO(e){const t=[];t.push(...WO(BO(e,"top"),"top"));t.push(...WO(BO(e,"right"),"right"));t.push(...WO(BO(e,"bottom"),"bottom"));t.push(...WO(BO(e,"left"),"left"));return t}function HO(e){return t=>WO(t,e)}function WO(e,t){const i=[];if(e&&e.width!==undefined){i.push(e.width)}if(e&&e.style!==undefined){i.push(e.style)}if(e&&e.color!==undefined){i.push(e.color)}if(i.length){return[[`border-${t}`,i.join(" ")]]}return[]}function UO(e){e.setNormalizer("padding",tE("padding"));e.setNormalizer("padding-top",e=>({path:"padding.top",value:e}));e.setNormalizer("padding-right",e=>({path:"padding.right",value:e}));e.setNormalizer("padding-bottom",e=>({path:"padding.bottom",value:e}));e.setNormalizer("padding-left",e=>({path:"padding.left",value:e}));e.setReducer("padding",XT("padding"));e.setStyleRelation("padding",["padding-top","padding-right","padding-bottom","padding-left"])}function qO(e){e.setNormalizer("background",$O);e.setNormalizer("background-color",e=>({path:"background.color",value:e}));e.setReducer("background",e=>{const t=[];t.push(["background-color",e.color]);return t})}function $O(e){const t={};const i=iE(e);for(const e of i){if(qT(e)){t.repeat=t.repeat||[];t.repeat.push(e)}else if(GT(e)){t.position=t.position||[];t.position.push(e)}else if(KT(e)){t.attachment=e}else if(DT(e)){t.color=e}else if(QT(e)){t.image=e}}return{path:"background",value:t}}function GO(e,t,i,n){e.for("upcast").attributeToAttribute({view:{styles:{[n]:/[\s\S]+/}},model:{name:t,key:i,value:e=>e.getNormalizedStyle(n)}})}function YO(e,t){e.for("upcast").add(e=>e.on("element:"+t,(e,t,i)=>{const n=["border-top","border-right","border-bottom","border-left"].filter(e=>t.viewItem.hasStyle(e));if(!n.length){return}const o={styles:n};if(!i.consumable.test(t.viewItem,o)){return}if(!t.modelRange){t=Object.assign(t,i.convertChildren(t.viewItem,t.modelCursor))}const r=[...t.modelRange.getItems({shallow:true})].pop();i.consumable.consume(t.viewItem,o);i.writer.setAttribute("borderStyle",t.viewItem.getNormalizedStyle("border-style"),r);i.writer.setAttribute("borderColor",t.viewItem.getNormalizedStyle("border-color"),r);i.writer.setAttribute("borderWidth",t.viewItem.getNormalizedStyle("border-width"),r)}))}function KO(e,t,i,n){e.for("downcast").attributeToAttribute({model:{name:t,key:i},view:e=>({key:"style",value:{[n]:e}})})}function JO(e,t,i){e.for("downcast").add(e=>e.on(`attribute:${t}:table`,(e,t,n)=>{const{item:o,attributeNewValue:r}=t;const{mapper:s,writer:a}=n;if(!n.consumable.consume(t.item,e.name)){return}const l=[...s.toViewElement(o).getChildren()].find(e=>e.is("table"));if(r){a.setStyle(i,r,l)}else{a.removeStyle(i,l)}}))}class QO extends Dw{constructor(e,t){super(e);this.attributeName=t}refresh(){const e=this.editor;const t=VI(e.model.document.selection);this.isEnabled=!!t.length;this.value=this._getSingleValue(t)}execute(e={}){const{value:t,batch:i}=e;const n=this.editor.model;const o=VI(n.document.selection);const r=this._getValueToSet(t);n.enqueueChange(i||"default",e=>{if(r){o.forEach(t=>e.setAttribute(this.attributeName,r,t))}else{o.forEach(t=>e.removeAttribute(this.attributeName,t))}})}_getAttribute(e){if(!e){return}return e.getAttribute(this.attributeName)}_getValueToSet(e){return e}_getSingleValue(e){const t=this._getAttribute(e[0]);const i=e.every(e=>this._getAttribute(e)===t);return i?t:undefined}}class ZO extends QO{constructor(e){super(e,"padding")}_getAttribute(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}_getValueToSet(e){return TI(e,"px")}}class XO extends QO{constructor(e){super(e,"width")}_getValueToSet(e){return TI(e,"px")}}class eR extends QO{constructor(e){super(e,"height")}_getValueToSet(e){return TI(e,"px")}}class tR extends QO{constructor(e){super(e,"backgroundColor")}}class iR extends QO{constructor(e){super(e,"verticalAlignment")}}class nR extends QO{constructor(e){super(e,"horizontalAlignment")}}class oR extends QO{constructor(e){super(e,"borderStyle")}_getAttribute(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}}class rR extends QO{constructor(e){super(e,"borderColor")}_getAttribute(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}}class sR extends QO{constructor(e){super(e,"borderWidth")}_getAttribute(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}_getValueToSet(e){return TI(e,"px")}}const aR=/^(top|bottom)$/;class lR extends Rw{static get pluginName(){return"TableCellPropertiesEditing"}static get requires(){return[mN]}init(){const e=this.editor;const t=e.model.schema;const i=e.conversion;const n=e.locale;e.data.addStyleProcessorRules(LO);cR(t,i);e.commands.add("tableCellBorderStyle",new oR(e));e.commands.add("tableCellBorderColor",new rR(e));e.commands.add("tableCellBorderWidth",new sR(e));dR(t,i,n);e.commands.add("tableCellHorizontalAlignment",new nR(e));hR(t,i,"width","width");e.commands.add("tableCellWidth",new XO(e));hR(t,i,"height","height");e.commands.add("tableCellHeight",new eR(e));e.data.addStyleProcessorRules(UO);hR(t,i,"padding","padding");e.commands.add("tableCellPadding",new ZO(e));e.data.addStyleProcessorRules(qO);hR(t,i,"backgroundColor","background-color");e.commands.add("tableCellBackgroundColor",new tR(e));uR(t,i);e.commands.add("tableCellVerticalAlignment",new iR(e))}}function cR(e,t){e.extend("tableCell",{allowAttributes:["borderWidth","borderColor","borderStyle"]});YO(t,"td");YO(t,"th");KO(t,"tableCell","borderStyle","border-style");KO(t,"tableCell","borderColor","border-color");KO(t,"tableCell","borderWidth","border-width")}function dR(e,t,i){e.extend("tableCell",{allowAttributes:["horizontalAlignment"]});const n=[i.contentLanguageDirection=="rtl"?"left":"right","center","justify"];t.attributeToAttribute({model:{name:"tableCell",key:"horizontalAlignment",values:n},view:n.reduce((e,t)=>({...e,[t]:{key:"style",value:{"text-align":t}}}),{})})}function uR(e,t){e.extend("tableCell",{allowAttributes:["verticalAlignment"]});t.attributeToAttribute({model:{name:"tableCell",key:"verticalAlignment",values:["top","bottom"]},view:{top:{key:"style",value:{"vertical-align":"top"}},bottom:{key:"style",value:{"vertical-align":"bottom"}}}});t.for("upcast").attributeToAttribute({view:{attributes:{valign:aR}},model:{name:"tableCell",key:"verticalAlignment",value:e=>e.getAttribute("valign")}})}function hR(e,t,i,n){e.extend("tableCell",{allowAttributes:[i]});GO(t,"tableCell",i,n);KO(t,"tableCell",i,n)}class fR extends Rw{static get pluginName(){return"TableCellProperties"}static get requires(){return[lR,IO]}}class mR extends Dw{constructor(e,t){super(e);this.attributeName=t}refresh(){const e=this.editor;const t=e.model.document.selection;const i=yI("table",t.getFirstPosition());this.isEnabled=!!i;this.value=this._getValue(i)}execute(e={}){const t=this.editor.model;const i=t.document.selection;const{value:n,batch:o}=e;const r=yI("table",i.getFirstPosition());const s=this._getValueToSet(n);t.enqueueChange(o||"default",e=>{if(s){e.setAttribute(this.attributeName,s,r)}else{e.removeAttribute(this.attributeName,r)}})}_getValue(e){if(!e){return}return e.getAttribute(this.attributeName)}_getValueToSet(e){return e}}class gR extends mR{constructor(e){super(e,"backgroundColor")}}class pR extends mR{constructor(e){super(e,"borderColor")}_getValue(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}}class bR extends mR{constructor(e){super(e,"borderStyle")}_getValue(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}}class wR extends mR{constructor(e){super(e,"borderWidth")}_getValue(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}_getValueToSet(e){return TI(e,"px")}}class _R extends mR{constructor(e){super(e,"width")}_getValueToSet(e){return TI(e,"px")}}class kR extends mR{constructor(e){super(e,"height")}_getValueToSet(e){return TI(e,"px")}}class vR extends mR{constructor(e){super(e,"alignment")}}const yR=/^(left|right)$/;class xR extends Rw{static get pluginName(){return"TablePropertiesEditing"}static get requires(){return[mN]}init(){const e=this.editor;const t=e.model.schema;const i=e.conversion;e.data.addStyleProcessorRules(LO);AR(t,i);e.commands.add("tableBorderColor",new pR(e));e.commands.add("tableBorderStyle",new bR(e));e.commands.add("tableBorderWidth",new wR(e));CR(t,i);e.commands.add("tableAlignment",new vR(e));ER(t,i,"width","width");e.commands.add("tableWidth",new _R(e));ER(t,i,"height","height");e.commands.add("tableHeight",new kR(e));e.data.addStyleProcessorRules(qO);TR(t,i,"backgroundColor","background-color");e.commands.add("tableBackgroundColor",new gR(e))}}function AR(e,t){e.extend("table",{allowAttributes:["borderWidth","borderColor","borderStyle"]});YO(t,"table");JO(t,"borderColor","border-color");JO(t,"borderStyle","border-style");JO(t,"borderWidth","border-width")}function CR(e,t){e.extend("table",{allowAttributes:["alignment"]});t.attributeToAttribute({model:{name:"table",key:"alignment",values:["left","right"]},view:{left:{key:"style",value:{float:"left"}},right:{key:"style",value:{float:"right"}}},converterPriority:"high"});t.for("upcast").attributeToAttribute({view:{attributes:{align:yR}},model:{name:"table",key:"alignment",value:e=>e.getAttribute("align")}})}function TR(e,t,i,n){e.extend("table",{allowAttributes:[i]});GO(t,"table",i,n);JO(t,i,n)}function ER(e,t,i,n){e.extend("table",{allowAttributes:[i]});GO(t,"table",i,n);KO(t,"table",i,n)}var PR=i(138);const MR={left:CC,center:TC,right:EC};class SR extends _b{constructor(e,t){super(e);this.set({borderStyle:"",borderWidth:"",borderColor:"",backgroundColor:"",width:"",height:"",alignment:""});this.options=t;const{borderStyleDropdown:i,borderWidthInput:n,borderColorInput:o,borderRowLabel:r}=this._createBorderFields();const{widthInput:s,operatorLabel:a,heightInput:l,dimensionsLabel:c}=this._createDimensionFields();const{alignmentToolbar:d,alignmentLabel:u}=this._createAlignmentFields();this.focusTracker=new Ep;this.keystrokes=new mp;this.children=this.createCollection();this.borderStyleDropdown=i;this.borderWidthInput=n;this.borderColorInput=o;this.backgroundInput=this._createBackgroundField();this.widthInput=s;this.heightInput=l;this.alignmentToolbar=d;const{saveButtonView:h,cancelButtonView:f}=this._createActionButtons();this.saveButtonView=h;this.cancelButtonView=f;this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this.children.add(new XS(e,{label:this.t("Table properties")}));this.children.add(new wO(e,{labelView:r,children:[r,i,o,n],class:"ck-table-form__border-row"}));this.children.add(new wO(e,{children:[this.backgroundInput]}));this.children.add(new wO(e,{children:[new wO(e,{labelView:c,children:[c,s,a,l],class:"ck-table-form__dimensions-row"}),new wO(e,{labelView:u,children:[u,d],class:"ck-table-properties-form__alignment-row"})]}));this.children.add(new wO(e,{children:[this.saveButtonView,this.cancelButtonView],class:"ck-table-form__action-row"}));this.setTemplate({tag:"form",attributes:{class:["ck","ck-form","ck-table-form","ck-table-properties-form"],tabindex:"-1"},children:this.children})}render(){super.render();AA({view:this});[this.borderStyleDropdown,this.borderColorInput,this.borderWidthInput,this.backgroundInput,this.widthInput,this.heightInput,this.alignmentToolbar,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createBorderFields(){const e=hO({colorConfig:this.options.borderColors,columns:5});const t=this.locale;const i=this.t;const n=new Pb(t);n.text=i("Border");const o=nO(this.t);const r=new _A(t,xA);r.set({label:i("Style"),class:"ck-table-form__border-style"});r.fieldView.buttonView.set({isOn:false,withText:true,tooltip:i("Style")});r.fieldView.buttonView.bind("label").to(this,"borderStyle",e=>o[e?e:"none"]);r.fieldView.on("execute",e=>{this.borderStyle=e.source._borderStyleValue});_w(r.fieldView,cO(this));const s=new _A(t,yA);s.set({label:i("Width"),class:"ck-table-form__border-width"});s.fieldView.bind("value").to(this,"borderWidth");s.bind("isEnabled").to(this,"borderStyle",IR);s.fieldView.on("input",()=>{this.borderWidth=s.fieldView.element.value});const a=new _A(t,e);a.set({label:i("Color"),class:"ck-table-form__border-color"});a.fieldView.bind("value").to(this,"borderColor");a.bind("isEnabled").to(this,"borderStyle",IR);a.fieldView.on("input",()=>{this.borderColor=a.fieldView.value});this.on("change:borderStyle",(e,t,i)=>{if(!IR(i)){this.borderColor="";this.borderWidth=""}});return{borderRowLabel:n,borderStyleDropdown:r,borderColorInput:a,borderWidthInput:s}}_createBackgroundField(){const e=hO({colorConfig:this.options.backgroundColors,columns:5});const t=this.locale;const i=this.t;const n=new _A(t,e);n.set({label:i("Background"),class:"ck-table-properties-form__background"});n.fieldView.bind("value").to(this,"backgroundColor");n.fieldView.on("input",()=>{this.backgroundColor=n.fieldView.value});return n}_createDimensionFields(){const e=this.locale;const t=this.t;const i=new Pb(e);i.text=t("Dimensions");const n=new _A(e,yA);n.set({label:t("Width"),class:"ck-table-form__dimensions-row__width"});n.fieldView.bind("value").to(this,"width");n.fieldView.on("input",()=>{this.width=n.fieldView.element.value});const o=new _b(e);o.setTemplate({tag:"span",attributes:{class:["ck-table-form__dimension-operator"]},children:[{text:"×"}]});const r=new _A(e,yA);r.set({label:t("Height"),class:"ck-table-form__dimensions-row__height"});r.fieldView.bind("value").to(this,"height");r.fieldView.on("input",()=>{this.height=r.fieldView.element.value});return{dimensionsLabel:i,widthInput:n,operatorLabel:o,heightInput:r}}_createAlignmentFields(){const e=this.locale;const t=this.t;const i=new Pb(e);i.text=t("Alignment");const n=new Tw(e);n.set({isCompact:true,ariaLabel:t("Table alignment toolbar")});dO({view:this,icons:MR,toolbar:n,labels:this._alignmentLabels,propertyName:"alignment",nameToValue:e=>e==="center"?"":e});return{alignmentLabel:i,alignmentToolbar:n}}_createActionButtons(){const e=this.locale;const t=this.t;const i=new rw(e);const n=new rw(e);const o=[this.borderWidthInput,this.borderColorInput,this.backgroundInput,this.widthInput,this.heightInput];i.set({label:t("Save"),icon:CA,class:"ck-button-save",type:"submit",withText:true});i.bind("isEnabled").toMany(o,"errorText",(...e)=>e.every(e=>!e));n.set({label:t("Cancel"),icon:TA,class:"ck-button-cancel",type:"cancel",withText:true});n.delegate("execute").to(this,"cancel");return{saveButtonView:i,cancelButtonView:n}}get _alignmentLabels(){const e=this.locale;const t=this.t;const i=t("Align table to the left");const n=t("Center table");const o=t("Align table to the right");if(e.uiLanguageDirection==="rtl"){return{right:o,center:n,left:i}}else{return{left:i,center:n,right:o}}}}function IR(e){return!!e}var LR='';const NR=500;const OR={borderStyle:"tableBorderStyle",borderColor:"tableBorderColor",borderWidth:"tableBorderWidth",backgroundColor:"tableBackgroundColor",width:"tableWidth",height:"tableHeight",alignment:"tableAlignment"};class RR extends Rw{static get requires(){return[OA]}static get pluginName(){return"TablePropertiesUI"}constructor(e){super(e);e.config.define("table.tableProperties",{borderColors:uO,backgroundColors:uO})}init(){const e=this.editor;const t=e.t;this._balloon=e.plugins.get(OA);this.view=this._createPropertiesView();this._undoStepBatch=null;e.ui.componentFactory.add("tableProperties",i=>{const n=new rw(i);n.set({label:t("Table properties"),icon:LR,tooltip:true});this.listenTo(n,"execute",()=>this._showView());const o=Object.values(OR).map(t=>e.commands.get(t));n.bind("isEnabled").toMany(o,"isEnabled",(...e)=>e.some(e=>e));return n})}destroy(){super.destroy();this.view.destroy()}_createPropertiesView(){const e=this.editor;const t=e.editing.view.document;const i=e.config.get("table.tableProperties");const n=Fv(i.borderColors);const o=Vv(e.locale,n);const r=Fv(i.backgroundColors);const s=Vv(e.locale,r);const a=new SR(e.locale,{borderColors:o,backgroundColors:s});const l=e.t;a.render();this.listenTo(a,"submit",()=>{this._hideView()});this.listenTo(a,"cancel",()=>{if(this._undoStepBatch.operations.length){e.execute("undo",this._undoStepBatch)}this._hideView()});a.keystrokes.set("Esc",(e,t)=>{this._hideView();t()});this.listenTo(e.ui,"update",()=>{if(!DI(t.selection)){this._hideView()}else if(this._isViewVisible){eO(e,"table")}});mw({emitter:a,activator:()=>this._isViewInBalloon,contextElements:[this._balloon.view.element],callback:()=>this._hideView()});const c=oO(l);const d=rO(l);a.on("change:borderStyle",this._getPropertyChangeCallback("tableBorderStyle"));a.on("change:borderColor",this._getValidatedPropertyChangeCallback({viewField:a.borderColorInput,commandName:"tableBorderColor",errorText:c,validator:sO}));a.on("change:borderWidth",this._getValidatedPropertyChangeCallback({viewField:a.borderWidthInput,commandName:"tableBorderWidth",errorText:d,validator:lO}));a.on("change:backgroundColor",this._getValidatedPropertyChangeCallback({viewField:a.backgroundInput,commandName:"tableBackgroundColor",errorText:c,validator:sO}));a.on("change:width",this._getValidatedPropertyChangeCallback({viewField:a.widthInput,commandName:"tableWidth",errorText:d,validator:aO}));a.on("change:height",this._getValidatedPropertyChangeCallback({viewField:a.heightInput,commandName:"tableHeight",errorText:d,validator:aO}));a.on("change:alignment",this._getPropertyChangeCallback("tableAlignment"));return a}_fillViewFormFromCommandValues(){const e=this.editor.commands;Object.entries(OR).map(([t,i])=>[t,e.get(i).value||""]).forEach(([e,t])=>this.view.set(e,t))}_showView(){const e=this.editor;this._balloon.add({view:this.view,position:tO(e)});this._undoStepBatch=e.model.createBatch();this._fillViewFormFromCommandValues();this.view.focus()}_hideView(){if(!this._isViewInBalloon){return}const e=this.editor;this.stopListening(e.ui,"update");this.view.saveButtonView.focus();this._balloon.remove(this.view);this.editor.editing.view.focus()}get _isViewVisible(){return this._balloon.visibleView===this.view}get _isViewInBalloon(){return this._balloon.hasView(this.view)}_getPropertyChangeCallback(e){return(t,i,n)=>{this.editor.execute(e,{value:n,batch:this._undoStepBatch})}}_getValidatedPropertyChangeCallback({commandName:e,viewField:t,validator:i,errorText:n}){const o=uh(()=>{t.errorText=n},NR);return(n,r,s)=>{o.cancel();if(i(s)){this.editor.execute(e,{value:s,batch:this._undoStepBatch});t.errorText=null}else{o()}}}}class zR extends Rw{static get pluginName(){return"TableProperties"}static get requires(){return[xR,RR]}}class DR extends Rw{static get requires(){return[DC]}static get pluginName(){return"TableToolbar"}afterInit(){const e=this.editor;const t=e.t;const i=e.plugins.get(DC);const n=e.config.get("table.contentToolbar");const o=e.config.get("table.tableToolbar");if(n){i.register("tableContent",{ariaLabel:t("Table toolbar"),items:n,getRelatedElement:DI})}if(o){i.register("table",{ariaLabel:t("Table toolbar"),items:o,getRelatedElement:zI})}}}function jR(e,t){let i=e.start;const n=Array.from(e.getItems()).reduce((e,n)=>{if(!(n.is("text")||n.is("textProxy"))){i=t.createPositionAfter(n);return""}return e+n.data},"");return{text:n,range:t.createRange(i,e.end)}}class BR{constructor(e,t){this.model=e;this.testCallback=t;this.hasMatch=false;this.set("isEnabled",true);this.on("change:isEnabled",()=>{if(this.isEnabled){this._startListening()}else{this.stopListening(e.document.selection);this.stopListening(e.document)}});this._startListening()}_startListening(){const e=this.model;const t=e.document;this.listenTo(t.selection,"change:range",(e,{directChange:i})=>{if(!i){return}if(!t.selection.isCollapsed){if(this.hasMatch){this.fire("unmatched");this.hasMatch=false}return}this._evaluateTextBeforeSelection("selection")});this.listenTo(t,"change:data",(e,t)=>{if(t.type=="transparent"){return}this._evaluateTextBeforeSelection("data",{batch:t})})}_evaluateTextBeforeSelection(e,t={}){const i=this.model;const n=i.document;const o=n.selection;const r=i.createRange(i.createPositionAt(o.focus.parent,0),o.focus);const{text:s,range:a}=jR(r,i);const l=this.testCallback(s);if(!l&&this.hasMatch){this.fire("unmatched")}this.hasMatch=!!l;if(l){const i=Object.assign(t,{text:s,range:a});if(typeof l=="object"){Object.assign(i,l)}this.fire(`matched:${e}`,i)}}}ys(BR,Jl);var VR=/[\\^$.*+?()[\]{}|]/g,FR=RegExp(VR.source);function HR(e){e=va(e);return e&&FR.test(e)?e.replace(VR,"\\$&"):e}var WR=HR;const UR={copyright:{from:"(c)",to:"©"},registeredTrademark:{from:"(r)",to:"®"},trademark:{from:"(tm)",to:"™"},oneHalf:{from:"1/2",to:"½"},oneThird:{from:"1/3",to:"⅓"},twoThirds:{from:"2/3",to:"⅔"},oneForth:{from:"1/4",to:"¼"},threeQuarters:{from:"3/4",to:"¾"},lessThanOrEqual:{from:"<=",to:"≤"},greaterThanOrEqual:{from:">=",to:"≥"},notEqual:{from:"!=",to:"≠"},arrowLeft:{from:"<-",to:"←"},arrowRight:{from:"->",to:"→"},horizontalEllipsis:{from:"...",to:"…"},enDash:{from:/(^| )(--)( )$/,to:[null,"–",null]},emDash:{from:/(^| )(---)( )$/,to:[null,"—",null]},quotesPrimary:{from:QR('"'),to:[null,"“",null,"”"]},quotesSecondary:{from:QR("'"),to:[null,"‘",null,"’"]},quotesPrimaryEnGb:{from:QR("'"),to:[null,"‘",null,"’"]},quotesSecondaryEnGb:{from:QR('"'),to:[null,"“",null,"”"]},quotesPrimaryPl:{from:QR('"'),to:[null,"„",null,"”"]},quotesSecondaryPl:{from:QR("'"),to:[null,"‚",null,"’"]}};const qR={symbols:["copyright","registeredTrademark","trademark"],mathematical:["oneHalf","oneThird","twoThirds","oneForth","threeQuarters","lessThanOrEqual","greaterThanOrEqual","notEqual","arrowLeft","arrowRight"],typography:["horizontalEllipsis","enDash","emDash"],quotes:["quotesPrimary","quotesSecondary"]};const $R=["symbols","mathematical","typography","quotes"];class GR extends Rw{static get pluginName(){return"TextTransformation"}constructor(e){super(e);e.config.define("typing",{transformations:{include:$R}})}init(){const e=this.editor.model;const t=e.document.selection;t.on("change:range",()=>{this.isEnabled=!t.anchor.parent.is("codeBlock")});this._enableTransformationWatchers()}_enableTransformationWatchers(){const e=this.editor;const t=e.model;const i=e.plugins.get("Input");const n=ZR(e.config.get("typing.transformations"));const o=e=>{for(const t of n){const i=t.from;const n=i.test(e);if(n){return{normalizedTransformation:t}}}};const r=(e,n)=>{if(!i.isInput(n.batch)){return}const{from:o,to:r}=n.normalizedTransformation;const s=o.exec(n.text);const a=r(s.slice(1));const l=n.range;let c=s.index;t.enqueueChange(e=>{for(let i=1;i[e]}else if(e instanceof Array){return()=>e}return e}function JR(e){const t=e.textNode?e.textNode:e.nodeAfter;return t.getAttributes()}function QR(e){return new RegExp(`(^|\\s)(${e})([^${e}]*)(${e})$`)}function ZR(e){const t=e.extra||[];const i=e.remove||[];const n=e=>!i.includes(e);const o=e.include.concat(t).filter(n);return XR(o).filter(n).map(e=>UR[e]||e).map(e=>({from:YR(e.from),to:KR(e.to)}))}function XR(e){const t=new Set;for(const i of e){if(qR[i]){for(const e of qR[i]){t.add(e)}}else{t.add(i)}}return Array.from(t)}const ez=new Set(["paragraph","heading1","heading2","heading3","heading4","heading5","heading6"]);class tz extends Rw{static get pluginName(){return"Title"}static get requires(){return[Ty]}init(){const e=this.editor;const t=e.model;this._bodyPlaceholder=null;t.schema.register("title",{isBlock:true,allowIn:"$root"});t.schema.register("title-content",{isBlock:true,allowIn:"title",allowAttributes:["alignment"]});t.schema.extend("$text",{allowIn:"title-content"});t.schema.addAttributeCheck(e=>{if(e.endsWith("title-content $text")){return false}});e.editing.mapper.on("modelToViewPosition",nz(e.editing.view));e.data.mapper.on("modelToViewPosition",nz(e.editing.view));e.conversion.for("downcast").elementToElement({model:"title-content",view:"h1"});e.data.upcastDispatcher.on("element:h1",iz,{priority:"high"});e.data.upcastDispatcher.on("element:h2",iz,{priority:"high"});e.data.upcastDispatcher.on("element:h3",iz,{priority:"high"});t.document.registerPostFixer(e=>this._fixTitleContent(e));t.document.registerPostFixer(e=>this._fixTitleElement(e));t.document.registerPostFixer(e=>this._fixBodyElement(e));t.document.registerPostFixer(e=>this._fixExtraParagraph(e));this._attachPlaceholders();this._attachTabPressHandling()}getTitle(){const e=this._getTitleElement();const t=e.getChild(0);return this.editor.data.stringify(t)}getBody(){const e=this.editor;const t=e.data;const i=e.model;const n=e.model.document.getRoot();const o=new $c(e.editing.view.document);const r=i.createRangeIn(n);const s=new Uc(e.editing.view.document);t.mapper.clearBindings();t.mapper.bindElements(n,s);t.downcastDispatcher.convertInsert(r,o);const a=i.createPositionAfter(n.getChild(0));const l=i.createRange(a,i.createPositionAt(n,"end"));for(const e of i.markers){const i=l.getIntersection(e.getRange());if(i){t.downcastDispatcher.convertMarkerAdd(e.name,i,o)}}o.remove(o.createRangeOn(s.getChild(0)));return e.data.processor.toData(s)}_getTitleElement(){const e=this.editor.model.document.getRoot();for(const t of e.getChildren()){if(oz(t)){return t}}}_fixTitleContent(e){const t=this._getTitleElement();if(!t||t.maxOffset===1){return false}const i=Array.from(t.getChildren());i.shift();for(const n of i){e.move(e.createRangeOn(n),t,"after");e.rename(n,"paragraph")}return true}_fixTitleElement(e){const t=this.editor.model;const i=t.document.getRoot();const n=Array.from(i.getChildren()).filter(oz);const o=n[0];const r=i.getChild(0);if(r.is("title")){return sz(n,e,t)}if(!o&&!ez.has(r.name)){const t=e.createElement("title");e.insert(t,i);e.insertElement("title-content",t);return true}if(ez.has(r.name)){rz(r,e,t)}else{e.move(e.createRangeOn(o),i,0)}sz(n,e,t);return true}_fixBodyElement(e){const t=this.editor.model.document.getRoot();if(t.childCount<2){this._bodyPlaceholder=e.createElement("paragraph");e.insert(this._bodyPlaceholder,t,1);return true}return false}_fixExtraParagraph(e){const t=this.editor.model.document.getRoot();const i=this._bodyPlaceholder;if(lz(i,t)){this._bodyPlaceholder=null;e.remove(i);return true}return false}_attachPlaceholders(){const e=this.editor;const t=e.t;const i=e.editing.view;const n=i.document.getRoot();const o=e.sourceElement;const r=e.config.get("title.placeholder")||t("Type your title");const s=e.config.get("placeholder")||o&&o.tagName.toLowerCase()==="textarea"&&o.getAttribute("placeholder")||t("Type or paste your content here.");e.editing.downcastDispatcher.on("insert:title-content",(e,t,n)=>{Np({view:i,element:n.mapper.toViewElement(t.item),text:r})});let a;i.document.registerPostFixer(e=>{const t=n.getChild(1);let i=false;if(t!==a){if(a){zp(e,a);e.removeAttribute("data-placeholder",a)}e.setAttribute("data-placeholder",s,t);a=t;i=true}if(Dp(t)&&n.childCount===2&&t.name==="p"){i=Rp(e,t)?true:i}else{i=zp(e,t)?true:i}return i})}_attachTabPressHandling(){const e=this.editor;const t=e.model;e.keystrokes.set("TAB",(e,i)=>{t.change(e=>{const n=t.document.selection;const o=Array.from(n.getSelectedBlocks());if(o.length===1&&o[0].is("title-content")){const n=t.document.getRoot().getChild(1);e.setSelection(n,0);i()}})});e.keystrokes.set("SHIFT + TAB",(i,n)=>{t.change(i=>{const o=t.document.selection;if(!o.isCollapsed){return}const r=e.model.document.getRoot();const s=Bw(o.getSelectedBlocks());const a=o.getFirstPosition();const l=r.getChild(0);const c=r.getChild(1);if(s===c&&a.isAtStart){i.setSelection(l.getChild(0),0);n()}})})}}function iz(e,t,i){const n=t.modelCursor;const o=t.viewItem;if(!n.isAtStart||!n.parent.is("$root")){return}if(!i.consumable.consume(o,{name:true})){return}const r=i.writer;const s=r.createElement("title");const a=r.createElement("title-content");r.append(a,s);r.insert(s,n);i.convertChildren(o,r.createPositionAt(a,0));t.modelRange=r.createRangeOn(s);t.modelCursor=r.createPositionAt(t.modelRange.end)}function nz(e){return(t,i)=>{const n=i.modelPosition.parent;if(!n.is("title")){return}const o=n.parent;const r=i.mapper.toViewElement(o);i.viewPosition=e.createPositionAt(r,0);t.stop()}}function oz(e){return e.is("title")}function rz(e,t,i){const n=t.createElement("title");t.insert(n,e,"before");t.insert(e,n,0);t.rename(e,"title-content");i.schema.removeDisallowedAttributes([e],t)}function sz(e,t,i){let n=false;for(const o of e){if(o.index!==0){az(o,t,i);n=true}}return n}function az(e,t,i){const n=e.getChild(0);if(n.isEmpty){t.remove(e);return}t.move(t.createRangeOn(n),e,"before");t.rename(n,"paragraph");t.remove(e);i.schema.removeDisallowedAttributes([n],t)}function lz(e,t){if(!e||!e.is("paragraph")||e.childCount){return false}if(t.childCount<=2||t.getChild(t.childCount-1)!==e){return false}return true}const cz="underline";class dz extends Rw{static get pluginName(){return"UnderlineEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:cz});e.model.schema.setAttributeProperties(cz,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:cz,view:"u",upcastAlso:{styles:{"text-decoration":"underline"}}});e.commands.add(cz,new w_(e,cz));e.keystrokes.set("CTRL+U","underline")}}var uz='';const hz="underline";class fz extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(hz,i=>{const n=e.commands.get(hz);const o=new rw(i);o.set({label:t("Underline"),icon:uz,keystroke:"CTRL+U",tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(hz);e.editing.view.focus()});return o})}}class mz extends Rw{static get requires(){return[dz,fz]}static get pluginName(){return"Underline"}}class gz extends Nw{}gz.builtinPlugins=[t_,a_,b_,A_,I_,hk,_v,$v,Qv,ay,yy,zy,$y,Px,WA,tC,_C,zC,FC,kT,TT,oE,dE,DP,kM,dS,OS,qS,Ty,QS,cI,dI,gI,hI,mI,vI,$N,fR,zR,DR,GR,tz,mz];var pz=t["default"]=gz}])["default"]})); +//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/ckeditor.js.map b/public/js/ckedit5/20.0.0_/ckeditor.js.map new file mode 100644 index 0000000..6094bd9 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/ckeditor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ckeditor.js","sources":["webpack://ClassicEditor/ckeditor.js"],"sourcesContent":["/*!\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md.\n */\n(function(e){const t=e[\"de\"]=e[\"de\"]||{};t.dictionary=Object.assign(t.dictionary||{},{\"%0 of %1\":\"%0 von %1\",\"Align cell text to the bottom\":\"Zellentext unten ausrichten\",\"Align cell text to the center\":\"Zellentext zentriert ausrichten\",\"Align cell text to the left\":\"Zellentext linksbündig ausrichten\",\"Align cell text to the middle\":\"Zellentext mittig ausrichten\",\"Align cell text to the right\":\"Zellentext rechtsbündig ausrichten\",\"Align cell text to the top\":\"Zellentext oben ausrichten\",\"Align center\":\"Zentriert\",\"Align left\":\"Linksbündig\",\"Align right\":\"Rechtsbündig\",\"Align table to the left\":\"Tabelle links ausrichten\",\"Align table to the right\":\"Tabelle rechts ausrichten\",Alignment:\"Ausrichtung\",\"Almost equal to\":\"Gerundet\",Angle:\"Winkel-Zeichen\",\"Approximately equal to\":\"Ungefähr gleich\",Aquamarine:\"Aquamarinblau\",\"Asterisk operator\":\"Hodge-Stern-Operator\",\"Austral sign\":\"Austral-Zeichen\",\"back with leftwards arrow above\":\"„Back“ darüber Pfeil nach links\",Background:\"Hintergrund\",Big:\"Groß\",\"Bitcoin sign\":\"Bitcoin-Zeichen\",Black:\"Schwarz\",\"Block quote\":\"Blockzitat\",Blue:\"Blau\",\"Blue marker\":\"Blauer Marker\",Bold:\"Fett\",Border:\"Rahmen\",\"Bulleted List\":\"Aufzählungsliste\",Cancel:\"Abbrechen\",\"Cedi sign\":\"Cedi-Zeichen\",\"Cell properties\":\"Zelleneigenschaften\",\"Cent sign\":\"Cent-Zeichen\",\"Center table\":\"Tabelle zentrieren\",\"Centered image\":\"zentriertes Bild\",\"Change image text alternative\":\"Alternativ Text ändern\",\"Character categories\":\"Zeichenkategorien\",\"Choose heading\":\"Überschrift auswählen\",Code:\"Code\",\"Colon sign\":\"Colón-Zeichen\",Color:\"Farbe\",\"Color picker\":\"Farbwähler\",Column:\"Spalte\",\"Contains as member\":\"Enthält als Element\",\"Copyright sign\":\"Copyright-Zeichen\",\"Cruzeiro sign\":\"Cruzeiro-Zeichen\",\"Currency sign\":\"Währungssymbol\",Dashed:\"Gestrichelt\",\"Decrease indent\":\"Einzug verkleinern\",Default:\"Standard\",\"Degree sign\":\"Grad-Zeichen\",\"Delete column\":\"Spalte löschen\",\"Delete row\":\"Zeile löschen\",\"Dim grey\":\"Dunkelgrau\",Dimensions:\"Größe\",\"Division sign\":\"Geteilt-Zeichen\",\"Document colors\":\"Dokumentfarben\",\"Dollar sign\":\"Dollar-Zeichen\",\"Dong sign\":\"Đồng-Zeichen\",Dotted:\"Gepunktet\",Double:\"Doppelt\",\"Double dagger\":\"Zweibalkenkreuz\",\"Double exclamation mark\":\"Doppeltes Ausrufezeichen\",\"Double low-9 quotation mark\":\"Doppelte Anführungszeichen links unten\",\"Double question mark\":\"Doppeltes Fragezeichen\",Downloadable:\"Herunterladbar\",\"downwards arrow to bar\":\"Pfeil nach unten zum Querstrich\",\"downwards dashed arrow\":\"Gestrichelter Pfeil nach unten\",\"downwards double arrow\":\"Doppelpfeil nach unten\",\"Drachma sign\":\"Drachme-Zeichen\",\"Dropdown toolbar\":\"Dropdown-Liste Werkzeugleiste\",\"Edit link\":\"Link bearbeiten\",\"Editor toolbar\":\"Editor Werkzeugleiste\",\"Element of\":\"Element von\",\"Em dash\":\"Geviertstrich\",\"Empty set\":\"Leere Menge\",\"En dash\":\"Halbgeviertstrich\",\"end with leftwards arrow above\":\"„End“ darüber Pfeil nach links\",\"Enter image caption\":\"Bildunterschrift eingeben\",\"Euro sign\":\"Euro-Zeichen\",\"Euro-currency sign\":\"Euro-Währungszeichen\",\"Exclamation question mark\":\"Ruf-Frage-Zeichen\",\"Font Background Color\":\"Hintergrundfarbe\",\"Font Color\":\"Schriftfarbe\",\"Font Family\":\"Schriftart\",\"Font Size\":\"Schriftgröße\",\"For all\":\"Allquantor\",\"Fraction slash\":\"Schrägstrich\",\"French franc sign\":\"Französischer Franc-Zeichen\",\"Full size image\":\"Bild in voller Größe\",\"German penny sign\":\"Pfennig-Zeichen\",\"Greater-than or equal to\":\"Größer als oder gleich\",\"Greater-than sign\":\"Größer-als-Zeichen\",Green:\"Grün\",\"Green marker\":\"Grüner Marker\",\"Green pen\":\"Grüne Schriftfarbe\",Grey:\"Grau\",Groove:\"Eingeritzt\",\"Guarani sign\":\"Guaraní-Zeichen\",\"Header column\":\"Kopfspalte\",\"Header row\":\"Kopfzeile\",Heading:\"Überschrift\",\"Heading 1\":\"Überschrift 1\",\"Heading 2\":\"Überschrift 2\",\"Heading 3\":\"Überschrift 3\",\"Heading 4\":\"Überschrift 4\",\"Heading 5\":\"Überschrift 5\",\"Heading 6\":\"Überschrift 6\",Height:\"Höhe\",Highlight:\"Texthervorhebung\",\"Horizontal ellipsis\":\"Auslassungspunkte\",\"Horizontal line\":\"Horizontale Linie\",\"Horizontal text alignment toolbar\":\"Werkzeugleiste für die horizontale Zellentext-Ausrichtung\",\"Hryvnia sign\":\"Hrywnja-Zeichen\",Huge:\"Sehr groß\",\"Identical to\":\"Identisch mit\",\"Image toolbar\":\"Bild Werkzeugleiste\",\"image widget\":\"Bild-Steuerelement\",\"Increase indent\":\"Einzug vergrößern\",\"Indian rupee sign\":\"Indische Rupie-Zeichen\",Infinity:\"Unendlich-Zeichen\",\"Insert code block\":\"Block einfügen\",\"Insert column left\":\"Spalte links einfügen\",\"Insert column right\":\"Spalte rechts einfügen\",\"Insert image\":\"Bild einfügen\",\"Insert media\":\"Medium einfügen\",\"Insert paragraph after block\":\"\",\"Insert paragraph before block\":\"\",\"Insert row above\":\"Zeile oben einfügen\",\"Insert row below\":\"Zeile unten einfügen\",\"Insert table\":\"Tabelle einfügen\",Inset:\"Eingelassen\",Integral:\"Integral-Zeichen\",Intersection:\"Schnitt\",\"Inverted exclamation mark\":\"Umgekehrtes Ausrufezeichen\",\"Inverted question mark\":\"Umgekehrtes Fragezeichen\",Italic:\"Kursiv\",Justify:\"Blocksatz\",\"Justify cell text\":\"Zellentext als Blocksatz ausrichten\",\"Kip sign\":\"Kip-Zeichen\",\"Latin capital letter a with breve\":\"Lateinischer Großbuchstabe a mit Breve\",\"Latin capital letter a with macron\":\"Lateinischer Großbuchstabe a mit Makron\",\"Latin capital letter a with ogonek\":\"Lateinischer Großbuchstabe a mit Ogonek\",\"Latin capital letter c with acute\":\"Lateinischer Großbuchstabe c mit Akut\",\"Latin capital letter c with caron\":\"Lateinischer Großbuchstabe c mit Hatschek\",\"Latin capital letter c with circumflex\":\"Lateinischer Großbuchstabe c mit Zirkumflex\",\"Latin capital letter c with dot above\":\"Lateinischer Großbuchstabe c mit Punkt darüber\",\"Latin capital letter d with caron\":\"Lateinischer Großbuchstabe d mit Hatschek\",\"Latin capital letter d with stroke\":\"Lateinischer Großbuchstabe d mit Querstrich\",\"Latin capital letter e with breve\":\"Lateinischer Großbuchstabe e mit Breve\",\"Latin capital letter e with caron\":\"Lateinischer Großbuchstabe e mit Hatschek\",\"Latin capital letter e with dot above\":\"Lateinischer Großbuchstabe e mit Punkt darüber\",\"Latin capital letter e with macron\":\"Lateinischer Großbuchstabe e mit Makron\",\"Latin capital letter e with ogonek\":\"Lateinischer Großbuchstabe e mit Ogonek\",\"Latin capital letter eng\":\"Lateinischer Großbuchstabe Eng\",\"Latin capital letter g with breve\":\"Lateinischer Großbuchstabe g mit Breve\",\"Latin capital letter g with cedilla\":\"Lateinischer Großbuchstabe g mit Cedille\",\"Latin capital letter g with circumflex\":\"Lateinischer Großbuchstabe g mit Zirkumflex\",\"Latin capital letter g with dot above\":\"Lateinischer Großbuchstabe g mit Punkt darüber\",\"Latin capital letter h with circumflex\":\"Lateinischer Großbuchstabe h mit Zirkumflex\",\"Latin capital letter h with stroke\":\"Lateinischer Großbuchstabe h mit Querstrich\",\"Latin capital letter i with breve\":\"Lateinischer Großbuchstabe i mit Breve\",\"Latin capital letter i with dot above\":\"Lateinischer Großbuchstabe i mit Punkt darüber\",\"Latin capital letter i with macron\":\"Lateinischer Großbuchstabe i mit Makron\",\"Latin capital letter i with ogonek\":\"Lateinischer Großbuchstabe i mit Ogonek\",\"Latin capital letter i with tilde\":\"Lateinischer Großbuchstabe i mit Tilde\",\"Latin capital letter j with circumflex\":\"Lateinischer Großbuchstabe j mit Zirkumflex\",\"Latin capital letter k with cedilla\":\"Lateinischer Großbuchstabe k mit Cedille\",\"Latin capital letter l with acute\":\"Lateinischer Großbuchstabe l mit Akut\",\"Latin capital letter l with caron\":\"Lateinischer Großbuchstabe l mit Hatschek\",\"Latin capital letter l with cedilla\":\"Lateinischer Großbuchstabe l mit Cedille\",\"Latin capital letter l with middle dot\":\"Lateinischer Großbuchstabe l mit Mittelpunkt\",\"Latin capital letter l with stroke\":\"Lateinischer Großbuchstabe l mit Querstrich\",\"Latin capital letter n with acute\":\"Lateinischer Großbuchstabe n mit Akut\",\"Latin capital letter n with caron\":\"Lateinischer Großbuchstabe n mit Hatschek\",\"Latin capital letter n with cedilla\":\"Lateinischer Großbuchstabe n mit Cedille\",\"Latin capital letter o with breve\":\"Lateinischer Großbuchstabe o mit Breve\",\"Latin capital letter o with double acute\":\"Lateinischer Großbuchstabe o mit doppeltem Akut\",\"Latin capital letter o with macron\":\"Lateinischer Großbuchstabe o mit Makron\",\"Latin capital letter r with acute\":\"Lateinischer Großbuchstabe r mit Akut\",\"Latin capital letter r with caron\":\"Lateinischer Großbuchstabe r mit Hatschek\",\"Latin capital letter r with cedilla\":\"Lateinischer Großbuchstabe r mit Cedille\",\"Latin capital letter s with acute\":\"Lateinischer Großbuchstabe s mit Akut\",\"Latin capital letter s with caron\":\"Lateinischer Großbuchstabe s mit Hatschek\",\"Latin capital letter s with cedilla\":\"Lateinischer Großbuchstabe s mit Cedille\",\"Latin capital letter s with circumflex\":\"Lateinischer Großbuchstabe s mit Zirkumflex\",\"Latin capital letter t with caron\":\"Lateinischer Großbuchstabe t mit Hatschek\",\"Latin capital letter t with cedilla\":\"Lateinischer Großbuchstabe t mit Cedille\",\"Latin capital letter t with stroke\":\"Lateinischer Großbuchstabe t mit Querstrich\",\"Latin capital letter u with breve\":\"Lateinischer Großbuchstabe u mit Breve\",\"Latin capital letter u with double acute\":\"Lateinischer Großbuchstabe u mit doppeltem Akut\",\"Latin capital letter u with macron\":\"Lateinischer Großbuchstabe u mit Makron\",\"Latin capital letter u with ogonek\":\"Lateinischer Großbuchstabe u mit Ogonek\",\"Latin capital letter u with ring above\":\"Lateinischer Großbuchstabe u mit Kroužek darüber\",\"Latin capital letter u with tilde\":\"Lateinischer Großbuchstabe u mit Tilde\",\"Latin capital letter w with circumflex\":\"Lateinischer Großbuchstabe w mit Zirkumflex\",\"Latin capital letter y with circumflex\":\"Lateinischer Großbuchstabe y mit Zirkumflex\",\"Latin capital letter y with diaeresis\":\"Lateinischer Großbuchstabe y mit Trema\",\"Latin capital letter z with acute\":\"Lateinischer Großbuchstabe z mit Akut\",\"Latin capital letter z with caron\":\"Lateinischer Großbuchstabe z mit Hatschek\",\"Latin capital letter z with dot above\":\"Lateinischer Großbuchstabe z mit Punkt darüber\",\"Latin capital ligature ij\":\"Große lateinische Ligatur ij\",\"Latin capital ligature oe\":\"Große lateinische Ligatur oe\",\"Latin small letter a with breve\":\"Lateinischer Kleinbuchstabe a mit Breve\",\"Latin small letter a with macron\":\"Lateinischer Kleinbuchstabe a mit Makron\",\"Latin small letter a with ogonek\":\"Lateinischer Kleinbuchstabe a mit Ogonek\",\"Latin small letter c with acute\":\"Lateinischer Kleinbuchstabe c mit Akut\",\"Latin small letter c with caron\":\"Lateinischer Kleinbuchstabe c mit Hatschek\",\"Latin small letter c with circumflex\":\"Lateinischer Kleinbuchstabe c mit Zirkumflex\",\"Latin small letter c with dot above\":\"Lateinischer Kleinbuchstabe c mit Punkt darüber\",\"Latin small letter d with caron\":\"Lateinischer Kleinbuchstabe d mit Hatschek\",\"Latin small letter d with stroke\":\"Lateinischer Kleinbuchstabe d mit Querstrich\",\"Latin small letter dotless i\":\"Lateinischer Kleinbuchstabe i ohne Punkt\",\"Latin small letter e with breve\":\"Lateinischer Kleinbuchstabe e mit Breve\",\"Latin small letter e with caron\":\"Lateinischer Kleinbuchstabe e mit Hatschek\",\"Latin small letter e with dot above\":\"Lateinischer Kleinbuchstabe e mit Punkt darüber\",\"Latin small letter e with macron\":\"Lateinischer Kleinbuchstabe e mit Makron\",\"Latin small letter e with ogonek\":\"Lateinischer Kleinbuchstabe e mit Ogonek\",\"Latin small letter eng\":\"Lateinischer Kleinbuchstabe Eng\",\"Latin small letter f with hook\":\"Lateinischer Kleinbuchstabe f mit Haken\",\"Latin small letter g with breve\":\"Lateinischer Kleinbuchstabe g mit Breve\",\"Latin small letter g with cedilla\":\"Lateinischer Kleinbuchstabe g mit Cedille\",\"Latin small letter g with circumflex\":\"Lateinischer Kleinbuchstabe g mit Zirkumflex\",\"Latin small letter g with dot above\":\"Lateinischer Kleinbuchstabe g mit Punkt darüber\",\"Latin small letter h with circumflex\":\"Lateinischer Kleinbuchstabe h mit Zirkumflex\",\"Latin small letter h with stroke\":\"Lateinischer Kleinbuchstabe h mit Querstrich\",\"Latin small letter i with breve\":\"Lateinischer Kleinbuchstabe i mit Breve\",\"Latin small letter i with macron\":\"Lateinischer Kleinbuchstabe i mit Makron\",\"Latin small letter i with ogonek\":\"Lateinischer Kleinbuchstabe i mit Ogonek\",\"Latin small letter i with tilde\":\"Lateinischer Kleinbuchstabe i mit Tilde\",\"Latin small letter j with circumflex\":\"Lateinischer Kleinbuchstabe j mit Zirkumflex\",\"Latin small letter k with cedilla\":\"Lateinischer Kleinbuchstabe k mit Cedille\",\"Latin small letter kra\":\"Lateinischer Kleinbuchstabe Kra\",\"Latin small letter l with acute\":\"Lateinischer Kleinbuchstabe l mit Akut\",\"Latin small letter l with caron\":\"Lateinischer Kleinbuchstabe l mit Hatschek\",\"Latin small letter l with cedilla\":\"Lateinischer Kleinbuchstabe l mit Cedille\",\"Latin small letter l with middle dot\":\"Lateinischer Kleinbuchstabe l mit Mittelpunkt\",\"Latin small letter l with stroke\":\"Lateinischer Kleinbuchstabe l mit Querstrich\",\"Latin small letter long s\":\"Lateinischer Kleinbuchstabe langes s\",\"Latin small letter n preceded by apostrophe\":\"Lateinischer Kleinbuchstabe n mit vorangestelltem Apostroph\",\"Latin small letter n with acute\":\"Lateinischer Kleinbuchstabe n mit Akut\",\"Latin small letter n with caron\":\"Lateinischer Kleinbuchstabe n mit Hatschek\",\"Latin small letter n with cedilla\":\"Lateinischer Kleinbuchstabe n mit Cedille\",\"Latin small letter o with breve\":\"Lateinischer Kleinbuchstabe o mit Breve\",\"Latin small letter o with double acute\":\"Lateinischer Kleinbuchstabe o mit doppeltem Akut\",\"Latin small letter o with macron\":\"Lateinischer Kleinbuchstabe o mit Makron\",\"Latin small letter r with acute\":\"Lateinischer Kleinbuchstabe r mit Akut\",\"Latin small letter r with caron\":\"Lateinischer Kleinbuchstabe r mit Hatschek\",\"Latin small letter r with cedilla\":\"Lateinischer Kleinbuchstabe r mit Cedille\",\"Latin small letter s with acute\":\"Lateinischer Kleinbuchstabe s mit Akut\",\"Latin small letter s with caron\":\"Lateinischer Kleinbuchstabe s mit Hatschek\",\"Latin small letter s with cedilla\":\"Lateinischer Kleinbuchstabe s mit Cedille\",\"Latin small letter s with circumflex\":\"Lateinischer Kleinbuchstabe s mit Zirkumflex\",\"Latin small letter t with caron\":\"Lateinischer Kleinbuchstabe t mit Hatschek\",\"Latin small letter t with cedilla\":\"Lateinischer Kleinbuchstabe t mit Cedille\",\"Latin small letter t with stroke\":\"Lateinischer Kleinbuchstabe t mit Querstrich\",\"Latin small letter u with breve\":\"Lateinischer Kleinbuchstabe u mit Breve\",\"Latin small letter u with double acute\":\"Lateinischer Kleinbuchstabe u mit doppeltem Akut\",\"Latin small letter u with macron\":\"Lateinischer Kleinbuchstabe u mit Makron\",\"Latin small letter u with ogonek\":\"Lateinischer Kleinbuchstabe u mit Ogonek\",\"Latin small letter u with ring above\":\"Lateinischer Kleinbuchstabe u mit Kroužek darüber\",\"Latin small letter u with tilde\":\"Lateinischer Kleinbuchstabe u mit Tilde\",\"Latin small letter w with circumflex\":\"Lateinischer Kleinbuchstabe w mit Zirkumflex\",\"Latin small letter y with circumflex\":\"Lateinischer Kleinbuchstabe y mit Zirkumflex\",\"Latin small letter z with acute\":\"Lateinischer Kleinbuchstabe z mit Akut\",\"Latin small letter z with caron\":\"Lateinischer Kleinbuchstabe z mit Hatschek\",\"Latin small letter z with dot above\":\"Lateinischer Kleinbuchstabe z mit Punkt darüber\",\"Latin small ligature ij\":\"Kleine lateinische Ligatur ij\",\"Latin small ligature oe\":\"Kleine lateinische Ligatur oe\",\"Left aligned image\":\"linksbündiges Bild\",\"Left double quotation mark\":\"Doppelte Anführungszeichen links\",\"Left single quotation mark\":\"Einfache Anführungszeichen links\",\"Left-pointing double angle quotation mark\":\"Doppelte Guillemets nach links\",\"leftwards arrow to bar\":\"Pfeil nach links zum Querstrich\",\"leftwards dashed arrow\":\"Gestrichelter Pfeil nach links\",\"leftwards double arrow\":\"Doppelpfeil nach links\",\"Less-than or equal to\":\"Kleiner als oder gleich\",\"Less-than sign\":\"Kleiner-als-Zeichen\",\"Light blue\":\"Hellblau\",\"Light green\":\"Hellgrün\",\"Light grey\":\"Hellgrau\",Link:\"Link\",\"Link URL\":\"Link Adresse\",\"Lira sign\":\"Lira-Zeichen\",\"Livre tournois sign\":\"Livre tournois-Zeichen\",\"Logical and\":\"Logisches und\",\"Logical or\":\"Logisches oder\",Macron:\"Makron\",\"Manat sign\":\"Manat-Zeichen\",\"Media URL\":\"Medien-Url\",\"media widget\":\"Medien-Widget\",\"Merge cell down\":\"Zelle unten verbinden\",\"Merge cell left\":\"Zelle links verbinden\",\"Merge cell right\":\"Zelle rechts verbinden\",\"Merge cell up\":\"Zelle verbinden\",\"Merge cells\":\"Zellen verbinden\",\"Mill sign\":\"Mill-Zeichen\",\"Minus sign\":\"Minus-Zeichen\",\"Multiplication sign\":\"Mal-Zeichen\",\"N-ary product\":\"Produkt-Zeichen\",\"N-ary summation\":\"Summen-Zeichen\",Nabla:\"Nabla\",\"Naira sign\":\"Naira-Zeichen\",\"New sheqel sign\":\"Schekel-Zeichen\",Next:\"Nächste\",None:\"Kein Rahmen\",\"Nordic mark sign\":\"Nordische Mark-Zeichen\",\"Not an element of\":\"Kein Element von\",\"Not equal to\":\"Ungleich\",\"Not sign\":\"Negations-Zeichen\",\"Numbered List\":\"Nummerierte Liste\",\"on with exclamation mark with left right arrow above\":\"„On“ mit Ausrufezeichen darüber Pfeil nach links und rechts\",\"Open in a new tab\":\"In neuem Tab öffnen\",\"Open link in new tab\":\"Link im neuen Tab öffnen\",Orange:\"Orange\",Outset:\"Geprägt\",Overline:\"Überstrich\",Padding:\"Innenabstand\",\"Page break\":\"Seitenumbruch\",Paragraph:\"Absatz\",\"Paragraph sign\":\"Absatz-Zeichen\",\"Partial differential\":\"Partielle Ableitung\",\"Paste the media URL in the input.\":\"Medien-URL in das Eingabefeld einfügen.\",\"Per mille sign\":\"Promille-Zeichen\",\"Per ten thousand sign\":\"Pro-Zehntausend-Zeichen\",\"Peseta sign\":\"Peseta-Zeichen\",\"Peso sign\":\"Philippinischer Peso-Zeichen\",\"Pink marker\":\"Pinker Marker\",\"Plain text\":\"Nur Text\",\"Plus-minus sign\":\"Plus-Minus-Zeichen\",\"Pound sign\":\"Pfund-Zeichen\",Previous:\"vorherige\",\"Proportional to\":\"Proportional zu\",Purple:\"Violett\",\"Question exclamation mark\":\"Frage-Ruf-Zeichen\",Red:\"Rot\",\"Red pen\":\"Rote Schriftfarbe\",Redo:\"Wiederherstellen\",\"Registered sign\":\"Registered-Trade-Mark-Zeichen\",\"Remove color\":\"Farbe entfernen\",\"Remove Format\":\"Formatierung entfernen\",\"Remove highlight\":\"Texthervorhebung entfernen\",\"Reversed paragraph sign\":\"Umgedrehtes Absatz-Zeichen\",\"Rich Text Editor\":\"Rich Text Editor\",\"Rich Text Editor, %0\":\"Rich-Text-Editor, %0\",Ridge:\"Hervorgehoben\",\"Right aligned image\":\"rechtsbündiges Bild\",\"Right double quotation mark\":\"Doppelte Anführungszeichen rechts\",\"Right single quotation mark\":\"Einfache Anführungszeichen rechts\",\"Right-pointing double angle quotation mark\":\"Doppelte Guillemets nach rechts\",\"rightwards arrow to bar\":\"Pfeil nach rechts zum Querstrich\",\"rightwards dashed arrow\":\"Gestrichelter Pfeil nach rechts\",\"rightwards double arrow\":\"Doppelpfeil nach rechts\",Row:\"Zeile\",\"Ruble sign\":\"Rubel-Zeichen\",\"Rupee sign\":\"Rupie-Zeichen\",Save:\"Speichern\",\"Section sign\":\"Paragraphen-Zeichen\",\"Select all\":\"Alles auswählen\",\"Select column\":\"Spalte auswählen\",\"Select row\":\"Zeile auswählen\",\"Show more items\":\"Mehr anzeigen\",\"Side image\":\"Seitenbild\",\"Single left-pointing angle quotation mark\":\"Einfache Guillemets nach links\",\"Single low-9 quotation mark\":\"Einfache Anführungszeichen links unten\",\"Single right-pointing angle quotation mark\":\"Einfache Guillemets nach rechts\",Small:\"Klein\",Solid:\"Durchgezogen\",\"soon with rightwards arrow above\":\"„Soon“ darüber Pfeil nach rechts\",\"Special characters\":\"Sonderzeichen\",\"Spesmilo sign\":\"Spesmilo-Zeichen\",\"Split cell horizontally\":\"Zelle horizontal teilen\",\"Split cell vertically\":\"Zelle vertikal teilen\",\"Square root\":\"Wurzel-Zeichen\",Strikethrough:\"Durchgestrichen\",Style:\"Rahmenart\",\"Table alignment toolbar\":\"Werkzeugleiste für die Tabellen-Ausrichtung\",\"Table cell text alignment\":\"Ausrichtung des Zellentextes\",\"Table properties\":\"Tabelleneigenschaften\",\"Table toolbar\":\"Tabelle Werkzeugleiste\",\"Tenge sign\":\"Tenge-Zeichen\",\"Text alignment\":\"Textausrichtung\",\"Text alignment toolbar\":\"Text-Ausrichtung Toolbar\",\"Text alternative\":\"Textalternative\",\"Text highlight toolbar\":\"Text hervorheben Werkzeugleiste\",'The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".':\"Die Farbe ist ungültig. Probieren Sie „#FF0000“ oder „rgb(255,0,0)“ oder „red“.\",\"The URL must not be empty.\":\"Die Url darf nicht leer sein\",'The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".':\"Der Wert ist ungültig. Probieren Sie „10px“ oder „2em“ oder „2“.\",\"There exists\":\"Existenzquantor\",\"This link has no URL\":\"Dieser Link hat keine Adresse\",\"This media URL is not supported.\":\"Diese Medien-Url wird nicht unterstützt\",\"Tilde operator\":\"Tilde-Operator\",Tiny:\"Sehr klein\",\"Tip: Paste the URL into the content to embed faster.\":\"Tipp: Zum schnelleren Einbetten können Sie die Medien-URL in den Inhalt einfügen.\",\"top with upwards arrow above\":\"„Top“ darüber Pfeil nach oben\",\"Trade mark sign\":\"Unregistered-Trade-Mark-Zeichen\",\"Tugrik sign\":\"Tugrik-Zeichen\",\"Turkish lira sign\":\"Türkische Lira-Zeichen\",Turquoise:\"Türkis\",\"Two dot leader\":\"Doppel-Punktlinie\",\"Type or paste your content here.\":\"Hier Inhalt einfügen.\",\"Type your title\":\"Titel eingeben\",Underline:\"Unterstrichen\",Undo:\"Rückgängig\",Union:\"Vereinigung\",Unlink:\"Link entfernen\",\"up down arrow with base\":\"Unterstrichener Pfeil nach oben und unten\",\"Upload failed\":\"Hochladen fehlgeschlagen\",\"Upload in progress\":\"Upload läuft\",\"upwards arrow to bar\":\"Pfeil nach oben zum Querstrich\",\"upwards dashed arrow\":\"Gestrichelter Pfeil nach oben\",\"upwards double arrow\":\"Doppelpfeil nach oben\",\"Vertical text alignment toolbar\":\"Werkzeugleiste für die vertikale Zellentext-Ausrichtung\",\"Vulgar fraction one half\":\"Gemeiner Bruch ein Halb\",\"Vulgar fraction one quarter\":\"Gemeiner Bruch ein Viertel\",\"Vulgar fraction three quarters\":\"Gemeiner Bruch drei Viertel\",White:\"Weiß\",\"Widget toolbar\":\"Widget Werkzeugleiste\",Width:\"Breite\",\"Won sign\":\"Won-Zeichen\",Yellow:\"Gelb\",\"Yellow marker\":\"Gelber Marker\",\"Yen sign\":\"Yen-Zeichen\"});t.getPluralForm=function(e){return e!=1}})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));(function e(t,i){if(typeof exports===\"object\"&&typeof module===\"object\")module.exports=i();else if(typeof define===\"function\"&&define.amd)define([],i);else if(typeof exports===\"object\")exports[\"ClassicEditor\"]=i();else t[\"ClassicEditor\"]=i()})(window,(function(){return function(e){var t={};function i(n){if(t[n]){return t[n].exports}var o=t[n]={i:n,l:false,exports:{}};e[n].call(o.exports,o,o.exports,i);o.l=true;return o.exports}i.m=e;i.c=t;i.d=function(e,t,n){if(!i.o(e,t)){Object.defineProperty(e,t,{enumerable:true,get:n})}};i.r=function(e){if(typeof Symbol!==\"undefined\"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"})}Object.defineProperty(e,\"__esModule\",{value:true})};i.t=function(e,t){if(t&1)e=i(e);if(t&8)return e;if(t&4&&typeof e===\"object\"&&e&&e.__esModule)return e;var n=Object.create(null);i.r(n);Object.defineProperty(n,\"default\",{enumerable:true,value:e});if(t&2&&typeof e!=\"string\")for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n};i.n=function(e){var t=e&&e.__esModule?function t(){return e[\"default\"]}:function t(){return e};i.d(t,\"a\",t);return t};i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};i.p=\"\";return i(i.s=140)}([function(e,t,i){\"use strict\";i.d(t,\"b\",(function(){return o}));i.d(t,\"a\",(function(){return r}));const n=\"https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html\";class o extends Error{constructor(e,t,i){e=r(e);if(i){e+=\" \"+JSON.stringify(i)}super(e);this.name=\"CKEditorError\";this.context=t;this.data=i}is(e){return e===\"CKEditorError\"}static rethrowUnexpectedError(e,t){if(e.is&&e.is(\"CKEditorError\")){throw e}const i=new o(e.message,t);i.stack=e.stack;throw i}}function r(e){const t=e.match(/^([^:]+):/);if(!t){return e}return e+` Read more: ${n}#error-${t[1]}\\n`}},function(e,t,i){\"use strict\";var n=function e(){var t;return function e(){if(typeof t===\"undefined\"){t=Boolean(window&&document&&document.all&&!window.atob)}return t}}();var o=function e(){var t={};return function e(i){if(typeof t[i]===\"undefined\"){var n=document.querySelector(i);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement){try{n=n.contentDocument.head}catch(e){n=null}}t[i]=n}return t[i]}}();var r=[];function s(e){var t=-1;for(var i=0;i:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-editor__editable_inline.ck-blurred ::selection{background:var(--ck-color-editable-blur-selection)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-base-foreground)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-base-foreground)}\"},function(e,t,i){var n=i(1);var o=i(24);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-label{display:block}.ck.ck-voice-label{display:none}.ck.ck-label{font-weight:700}\"},function(e,t,i){var n=i(1);var o=i(26);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-sticky-panel .ck-sticky-panel__content_sticky{z-index:var(--ck-z-modal);position:fixed;top:0}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{top:auto;position:absolute}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{box-shadow:var(--ck-drop-shadow),0 0;border-width:0 1px 1px;border-top-left-radius:0;border-top-right-radius:0}\"},function(e,t,i){var n=i(1);var o=i(28);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-dropdown{display:inline-block;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on .ck-tooltip{display:none}.ck.ck-dropdown .ck-dropdown__panel{-webkit-backface-visibility:hidden;display:none;z-index:var(--ck-z-modal);position:absolute}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{top:100%;bottom:auto}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}:root{--ck-dropdown-arrow-size:calc(0.5*var(--ck-icon-size))}.ck.ck-dropdown{font-size:inherit}.ck.ck-dropdown .ck-dropdown__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{width:7em;overflow:hidden;text-overflow:ellipsis}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-dropdown__button_label-width_auto .ck-button__label{width:auto}.ck.ck-dropdown__panel{border-radius:0}.ck-rounded-corners .ck.ck-dropdown__panel,.ck.ck-dropdown__panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-dropdown__panel{box-shadow:var(--ck-drop-shadow),0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);bottom:0;min-width:100%}.ck.ck-dropdown__panel.ck-dropdown__panel_se{border-top-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_sw{border-top-right-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_ne{border-bottom-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_nw{border-bottom-right-radius:0}\"},function(e,t,i){var n=i(1);var o=i(30);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-icon{vertical-align:middle}:root{--ck-icon-size:calc(var(--ck-line-height-base)*var(--ck-font-size-normal))}.ck.ck-icon{width:var(--ck-icon-size);height:var(--ck-icon-size);font-size:.8333350694em;will-change:transform}.ck.ck-icon,.ck.ck-icon *{color:inherit;cursor:inherit}.ck.ck-icon :not([fill]){fill:currentColor}\"},function(e,t,i){var n=i(1);var o=i(32);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck.ck-tooltip,.ck.ck-tooltip .ck-tooltip__text:after{position:absolute;pointer-events:none;-webkit-backface-visibility:hidden}.ck.ck-tooltip{visibility:hidden;opacity:0;display:none;z-index:var(--ck-z-modal)}.ck.ck-tooltip .ck-tooltip__text{display:inline-block}.ck.ck-tooltip .ck-tooltip__text:after{content:\"\";width:0;height:0}:root{--ck-tooltip-arrow-size:5px}.ck.ck-tooltip{left:50%;top:0;transition:opacity .2s ease-in-out .2s}.ck.ck-tooltip .ck-tooltip__text{border-radius:0}.ck-rounded-corners .ck.ck-tooltip .ck-tooltip__text,.ck.ck-tooltip .ck-tooltip__text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-tooltip .ck-tooltip__text{font-size:.9em;line-height:1.5;color:var(--ck-color-tooltip-text);padding:var(--ck-spacing-small) var(--ck-spacing-medium);background:var(--ck-color-tooltip-background);position:relative;left:-50%}.ck.ck-tooltip .ck-tooltip__text:after{transition:opacity .2s ease-in-out .2s;border-style:solid;left:50%}.ck.ck-tooltip.ck-tooltip_s{bottom:calc(-1*var(--ck-tooltip-arrow-size));transform:translateY(100%)}.ck.ck-tooltip.ck-tooltip_s .ck-tooltip__text:after{top:calc(-1*var(--ck-tooltip-arrow-size));transform:translateX(-50%);border-left-color:transparent;border-bottom-color:var(--ck-color-tooltip-background);border-right-color:transparent;border-top-color:transparent;border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:var(--ck-tooltip-arrow-size);border-right-width:var(--ck-tooltip-arrow-size);border-top-width:0}.ck.ck-tooltip.ck-tooltip_n{top:calc(-1*var(--ck-tooltip-arrow-size));transform:translateY(-100%)}.ck.ck-tooltip.ck-tooltip_n .ck-tooltip__text:after{bottom:calc(-1*var(--ck-tooltip-arrow-size));transform:translateX(-50%);border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent;border-top-color:var(--ck-color-tooltip-background);border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:0;border-right-width:var(--ck-tooltip-arrow-size);border-top-width:var(--ck-tooltip-arrow-size)}'},function(e,t,i){var n=i(1);var o=i(34);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-button,a.ck.ck-button{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:block}@media (hover:none){.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:none}}.ck.ck-button,a.ck.ck-button{position:relative;display:inline-flex;align-items:center;justify-content:left}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{display:none}.ck.ck-button.ck-button_with-text .ck-button__label,a.ck.ck-button.ck-button_with-text .ck-button__label{display:inline-block}.ck.ck-button:not(.ck-button_with-text),a.ck.ck-button:not(.ck-button_with-text){justify-content:center}.ck.ck-button:hover .ck-tooltip,a.ck.ck-button:hover .ck-tooltip{visibility:visible;opacity:1}.ck.ck-button:focus:not(:hover) .ck-tooltip,a.ck.ck-button:focus:not(:hover) .ck-tooltip{display:none}.ck.ck-button,a.ck.ck-button{background:var(--ck-color-button-default-background)}.ck.ck-button:not(.ck-disabled):hover,a.ck.ck-button:not(.ck-disabled):hover{background:var(--ck-color-button-default-hover-background)}.ck.ck-button:not(.ck-disabled):active,a.ck.ck-button:not(.ck-disabled):active{background:var(--ck-color-button-default-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-default-active-shadow)}.ck.ck-button.ck-disabled,a.ck.ck-button.ck-disabled{background:var(--ck-color-button-default-disabled-background)}.ck.ck-button,a.ck.ck-button{border-radius:0}.ck-rounded-corners .ck.ck-button,.ck-rounded-corners a.ck.ck-button,.ck.ck-button.ck-rounded-corners,a.ck.ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-button,a.ck.ck-button{white-space:nowrap;cursor:default;vertical-align:middle;padding:var(--ck-spacing-tiny);text-align:center;min-width:var(--ck-ui-component-min-height);min-height:var(--ck-ui-component-min-height);line-height:1;font-size:inherit;border:1px solid transparent;transition:box-shadow .2s ease-in-out,border .2s ease-in-out;-webkit-appearance:none}.ck.ck-button:active,.ck.ck-button:focus,a.ck.ck-button:active,a.ck.ck-button:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0}.ck.ck-button .ck-button__icon use,.ck.ck-button .ck-button__icon use *,a.ck.ck-button .ck-button__icon use,a.ck.ck-button .ck-button__icon use *{color:inherit}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{font-size:inherit;font-weight:inherit;color:inherit;cursor:inherit;vertical-align:middle}[dir=ltr] .ck.ck-button .ck-button__label,[dir=ltr] a.ck.ck-button .ck-button__label{text-align:left}[dir=rtl] .ck.ck-button .ck-button__label,[dir=rtl] a.ck.ck-button .ck-button__label{text-align:right}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{color:inherit}[dir=ltr] .ck.ck-button .ck-button__keystroke,[dir=ltr] a.ck.ck-button .ck-button__keystroke{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-button .ck-button__keystroke,[dir=rtl] a.ck.ck-button .ck-button__keystroke{margin-right:var(--ck-spacing-large)}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{font-weight:700;opacity:.7}.ck.ck-button.ck-disabled:active,.ck.ck-button.ck-disabled:focus,a.ck.ck-button.ck-disabled:active,a.ck.ck-button.ck-disabled:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-button.ck-disabled .ck-button__icon,a.ck.ck-button.ck-disabled .ck-button__icon{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__label,a.ck.ck-button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__keystroke,a.ck.ck-button.ck-disabled .ck-button__keystroke{opacity:.3}.ck.ck-button.ck-button_with-text,a.ck.ck-button.ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=ltr] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-left:calc(-1*var(--ck-spacing-small));margin-right:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=rtl] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-right:calc(-1*var(--ck-spacing-small));margin-left:var(--ck-spacing-small)}.ck.ck-button.ck-button_with-keystroke .ck-button__label,a.ck.ck-button.ck-button_with-keystroke .ck-button__label{flex-grow:1}.ck.ck-button.ck-on,a.ck.ck-button.ck-on{background:var(--ck-color-button-on-background)}.ck.ck-button.ck-on:not(.ck-disabled):hover,a.ck.ck-button.ck-on:not(.ck-disabled):hover{background:var(--ck-color-button-on-hover-background)}.ck.ck-button.ck-on:not(.ck-disabled):active,a.ck.ck-button.ck-on:not(.ck-disabled):active{background:var(--ck-color-button-on-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-on-active-shadow)}.ck.ck-button.ck-on.ck-disabled,a.ck.ck-button.ck-on.ck-disabled{background:var(--ck-color-button-on-disabled-background)}.ck.ck-button.ck-button-save,a.ck.ck-button.ck-button-save{color:var(--ck-color-button-save)}.ck.ck-button.ck-button-cancel,a.ck.ck-button.ck-button-cancel{color:var(--ck-color-button-cancel)}.ck.ck-button-action,a.ck.ck-button-action{background:var(--ck-color-button-action-background)}.ck.ck-button-action:not(.ck-disabled):hover,a.ck.ck-button-action:not(.ck-disabled):hover{background:var(--ck-color-button-action-hover-background)}.ck.ck-button-action:not(.ck-disabled):active,a.ck.ck-button-action:not(.ck-disabled):active{background:var(--ck-color-button-action-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-action-active-shadow)}.ck.ck-button-action.ck-disabled,a.ck.ck-button-action.ck-disabled{background:var(--ck-color-button-action-disabled-background)}.ck.ck-button-action,a.ck.ck-button-action{color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}\"},function(e,t,i){var n=i(1);var o=i(36);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-list{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{position:relative;z-index:var(--ck-z-default)}.ck.ck-list{border-radius:0}.ck-rounded-corners .ck.ck-list,.ck.ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-list{list-style-type:none;background:var(--ck-color-list-background)}.ck.ck-list__item{cursor:default;min-width:12em}.ck.ck-list__item .ck-button{min-height:unset;width:100%;text-align:left;border-radius:0;padding:calc(0.2*var(--ck-line-height-base)*var(--ck-font-size-base)) calc(0.4*var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item .ck-button .ck-button__label{line-height:calc(1.2*var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item .ck-button:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item .ck-button.ck-on:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item .ck-button.ck-on:focus:not(.ck-disabled){border-color:var(--ck-color-base-background)}.ck.ck-list__item .ck-button:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item .ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item .ck-switchbutton.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck.ck-list__separator{height:1px;width:100%;background:var(--ck-color-base-border)}\"},function(e,t,i){var n=i(1);var o=i(38);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}:root{--ck-switch-button-toggle-width:2.6153846154em;--ck-switch-button-toggle-inner-size:1.0769230769em;--ck-switch-button-toggle-spacing:1px;--ck-switch-button-translation:calc(var(--ck-switch-button-toggle-width) - var(--ck-switch-button-toggle-inner-size) - 2*var(--ck-switch-button-toggle-spacing))}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__label{margin-right:calc(2*var(--ck-spacing-large))}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__label{margin-left:calc(2*var(--ck-spacing-large))}.ck.ck-button.ck-switchbutton .ck-button__toggle{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle.ck-rounded-corners{border-radius:var(--ck-border-radius)}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-left:auto}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle{transition:background .4s ease;width:var(--ck-switch-button-toggle-width);background:var(--ck-color-switch-button-off-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:calc(0.5*var(--ck-border-radius))}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{margin:var(--ck-switch-button-toggle-spacing);width:var(--ck-switch-button-toggle-inner-size);height:var(--ck-switch-button-toggle-inner-size);background:var(--ck-color-switch-button-inner-background);transition:all .3s ease}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{box-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(var(--ck-switch-button-translation))}[dir=rtl] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(calc(-1*var(--ck-switch-button-translation)))}\"},function(e,t,i){var n=i(1);var o=i(40);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-toolbar-dropdown .ck.ck-toolbar .ck.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar-dropdown .ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}\"},function(e,t,i){var n=i(1);var o=i(42);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-dropdown .ck-dropdown__panel .ck-list{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list,.ck.ck-dropdown .ck-dropdown__panel .ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}\"},function(e,t,i){var n=i(1);var o=i(44);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-toolbar{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-flow:row nowrap;align-items:center}.ck.ck-toolbar>.ck-toolbar__items{display:flex;flex-flow:row wrap;align-items:center;flex-grow:1}.ck.ck-toolbar .ck.ck-toolbar__separator{display:inline-block}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-toolbar,.ck.ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-toolbar{background:var(--ck-color-toolbar-background);padding:0 var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border)}.ck.ck-toolbar .ck.ck-toolbar__separator{align-self:stretch;width:1px;min-width:1px;margin-top:0;margin-bottom:0;background:var(--ck-color-toolbar-border)}.ck.ck-toolbar>.ck-toolbar__items>*{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small);margin-right:var(--ck-spacing-small)}.ck.ck-toolbar>.ck-toolbar__items:empty+.ck.ck-toolbar__separator{display:none}.ck.ck-toolbar>.ck-toolbar__items>*,.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{width:100%;margin:0;border-radius:0;border:0}.ck.ck-toolbar.ck-toolbar_compact{padding:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*{margin:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>:not(:first-child):not(:last-child){border-radius:0}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck{margin-right:0}.ck.ck-toolbar[dir=rtl]:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-left:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_compact>.ck-toolbar__items>.ck:first-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_compact>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__separator,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl].ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=rtl] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr]>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-right:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_compact>.ck-toolbar__items>.ck:first-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_compact>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar[dir=ltr]>.ck.ck-toolbar__separator,[dir=ltr] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-right:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr].ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=ltr] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-right:var(--ck-spacing-small)}\"},function(e,t,i){var n=i(1);var o=i(46);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-editor{position:relative}.ck.ck-editor .ck-editor__top .ck-sticky-panel .ck-toolbar{z-index:var(--ck-z-modal)}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-bottom-width:0}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar{border-bottom-width:1px;border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:0}.ck.ck-editor__main>.ck-editor__editable{background:var(--ck-color-base-background);border-radius:0}.ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,.ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-editor__main>.ck-editor__editable:not(.ck-focused){border-color:var(--ck-color-base-border)}\"},function(e,t,i){var n=i(1);var o=i(48);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck-content blockquote{overflow:hidden;padding-right:1.5em;padding-left:1.5em;margin-left:0;margin-right:0;font-style:italic;border-left:5px solid #ccc}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}\"},function(e,t){e.exports=\".ck-content code{background-color:hsla(0,0%,78%,.3);padding:.15em;border-radius:2px}\"},function(e,t,i){var n=i(1);var o=i(51);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-splitbutton{font-size:inherit}.ck.ck-splitbutton .ck-splitbutton__action:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button .ck-tooltip{display:none}:root{--ck-color-split-button-hover-background:#ebebeb;--ck-color-split-button-hover-border:#b3b3b3}[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__action{border-top-right-radius:unset;border-bottom-right-radius:unset}[dir=rtl] .ck.ck-splitbutton>.ck-splitbutton__action{border-top-left-radius:unset;border-bottom-left-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow{min-width:unset}[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-radius:0}.ck-rounded-corners [dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow,[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:unset;border-bottom-left-radius:unset}[dir=rtl] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-top-right-radius:unset;border-bottom-right-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow svg{width:var(--ck-dropdown-arrow-size)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover),.ck.ck-splitbutton:hover>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover){background:var(--ck-color-split-button-hover-background)}[dir=ltr] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled),[dir=ltr] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled){border-left-color:var(--ck-color-split-button-hover-border)}[dir=rtl] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled),[dir=rtl] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled){border-right-color:var(--ck-color-split-button-hover-border)}.ck.ck-splitbutton.ck-splitbutton_open{border-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__action{border-bottom-left-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__arrow{border-bottom-right-radius:0}\"},function(e,t,i){var n=i(1);var o=i(53);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck-content pre{padding:1em;color:#353535;background:hsla(0,0%,78%,.3);border:1px solid #c4c4c4;border-radius:2px;text-align:left;direction:ltr;tab-size:4;white-space:pre-wrap;font-style:normal;min-width:200px}.ck-content pre code{background:unset;padding:0;border-radius:0}.ck.ck-editor__editable pre{position:relative}.ck.ck-editor__editable pre[data-language]:after{content:attr(data-language);position:absolute}:root{--ck-color-code-block-label-background:#757575}.ck.ck-editor__editable pre[data-language]:after{top:-1px;right:10px;background:var(--ck-color-code-block-label-background);font-size:10px;font-family:var(--ck-font-face);line-height:16px;padding:var(--ck-spacing-tiny) var(--ck-spacing-medium);color:#fff;white-space:nowrap}.ck.ck-code-block-dropdown .ck-dropdown__panel{max-height:250px;overflow-y:auto;overflow-x:hidden}\"},function(e,t,i){var n=i(1);var o=i(55);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-color-grid{display:grid}:root{--ck-color-grid-tile-size:24px;--ck-color-color-grid-check-icon:#000}.ck.ck-color-grid{grid-gap:5px;padding:8px}.ck.ck-color-grid__tile{width:var(--ck-color-grid-tile-size);height:var(--ck-color-grid-tile-size);min-width:var(--ck-color-grid-tile-size);min-height:var(--ck-color-grid-tile-size);padding:0;transition:box-shadow .2s ease;border:0}.ck.ck-color-grid__tile.ck-disabled{cursor:unset;transition:unset}.ck.ck-color-grid__tile.ck-color-table__color-tile_bordered{box-shadow:0 0 0 1px var(--ck-color-base-border)}.ck.ck-color-grid__tile .ck.ck-icon{display:none;color:var(--ck-color-color-grid-check-icon)}.ck.ck-color-grid__tile.ck-on{box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-base-text)}.ck.ck-color-grid__tile.ck-on .ck.ck-icon{display:block}.ck.ck-color-grid__tile.ck-on,.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){border:0}.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-color-grid__label{padding:0 var(--ck-spacing-standard)}\"},function(e,t,i){var n=i(1);var o=i(57);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck .ck-button.ck-color-table__remove-color{display:flex;align-items:center;width:100%}label.ck.ck-color-grid__label{font-weight:unset}.ck .ck-button.ck-color-table__remove-color{padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck .ck-button.ck-color-table__remove-color:not(:focus){border-bottom:1px solid var(--ck-color-base-border)}[dir=ltr] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-left:var(--ck-spacing-standard)}\"},function(e,t,i){var n=i(1);var o=i(59);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck-content .text-tiny{font-size:.7em}.ck-content .text-small{font-size:.85em}.ck-content .text-big{font-size:1.4em}.ck-content .text-huge{font-size:1.8em}\"},function(e,t){e.exports=\".ck.ck-heading_heading1{font-size:20px}.ck.ck-heading_heading2{font-size:17px}.ck.ck-heading_heading3{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}\"},function(e,t,i){var n=i(1);var o=i(62);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\":root{--ck-highlight-marker-yellow:#fdfd77;--ck-highlight-marker-green:#62f962;--ck-highlight-marker-pink:#fc7899;--ck-highlight-marker-blue:#72ccfd;--ck-highlight-pen-red:#e71313;--ck-highlight-pen-green:#128a00}.ck-content .marker-yellow{background-color:var(--ck-highlight-marker-yellow)}.ck-content .marker-green{background-color:var(--ck-highlight-marker-green)}.ck-content .marker-pink{background-color:var(--ck-highlight-marker-pink)}.ck-content .marker-blue{background-color:var(--ck-highlight-marker-blue)}.ck-content .pen-red{color:var(--ck-highlight-pen-red);background-color:transparent}.ck-content .pen-green{color:var(--ck-highlight-pen-green);background-color:transparent}\"},function(e,t,i){var n=i(1);var o=i(64);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=':root{--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{display:none;position:absolute;z-index:var(--ck-z-modal)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{content:\"\";position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}:root{--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px}.ck.ck-balloon-panel{border-radius:0}.ck-rounded-corners .ck.ck-balloon-panel,.ck.ck-balloon-panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-balloon-panel{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{width:0;height:0;border-style:solid}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:var(--ck-balloon-arrow-height);border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:0}.ck.ck-balloon-panel[class*=arrow_n]:before{border-bottom-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-color:transparent;border-right-color:transparent;border-top-color:transparent}.ck.ck-balloon-panel[class*=arrow_n]:after{border-bottom-color:var(--ck-color-panel-background);margin-top:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:0;border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-top-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent}.ck.ck-balloon-panel[class*=arrow_s]:after{border-top-color:var(--ck-color-panel-background);margin-bottom:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before{left:50%;margin-left:calc(-1*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before{left:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before{right:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before{left:50%;margin-left:calc(-1*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before{left:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before{right:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:before{right:25%;margin-right:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:before{left:25%;margin-left:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:before{right:25%;margin-right:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:before{left:25%;margin-left:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}'},function(e,t,i){var n=i(1);var o=i(66);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck-editor__editable .ck-horizontal-line{display:flow-root}.ck-content hr{border:solid #5e5e5e;border-width:1px 0 0;margin:0}.ck-editor__editable .ck-horizontal-line{padding:5px 0}\"},function(e,t,i){var n=i(1);var o=i(68);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck .ck-widget .ck-widget__type-around__button{display:block;position:absolute;overflow:hidden;z-index:var(--ck-z-default)}.ck .ck-widget .ck-widget__type-around__button svg{position:absolute;top:50%;left:50%;z-index:calc(var(--ck-z-default) + 2)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_before{top:calc(-0.5*var(--ck-widget-outline-thickness));left:min(10%,30px);transform:translateY(-50%)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_after{bottom:calc(-0.5*var(--ck-widget-outline-thickness));right:min(10%,30px);transform:translateY(50%)}.ck .ck-widget:not(.ck-widget_can-type-around_after)>.ck-widget__type-around>.ck-widget__type-around__button_after,.ck .ck-widget:not(.ck-widget_can-type-around_before)>.ck-widget__type-around>.ck-widget__type-around__button_before{display:none}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{content:\"\";display:block;position:absolute;top:1px;left:1px;z-index:calc(var(--ck-z-default) + 1)}.ck.ck-editor__editable.ck-read-only .ck-widget__type-around,.ck.ck-editor__editable.ck-restricted-editing_mode_restricted .ck-widget__type-around{display:none}:root{--ck-widget-type-around-button-size:20px;--ck-color-widget-type-around-button-active:var(--ck-color-focus-border);--ck-color-widget-type-around-button-hover:var(--ck-color-widget-hover-border);--ck-color-widget-type-around-button-blurred-editable:var(--ck-color-widget-blurred-border);--ck-color-widget-type-around-button-radar-start-alpha:0;--ck-color-widget-type-around-button-radar-end-alpha:.3;--ck-color-widget-type-around-button-icon:var(--ck-color-base-background)}.ck .ck-widget .ck-widget__type-around__button{width:var(--ck-widget-type-around-button-size);height:var(--ck-widget-type-around-button-size);background:var(--ck-color-widget-type-around-button);border-radius:100px;pointer-events:none;opacity:0;transition:opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget .ck-widget__type-around__button svg{width:10px;height:8px;transform:translate(-50%,-50%);transition:transform .5s ease;margin-top:1px}.ck .ck-widget .ck-widget__type-around__button svg *{stroke-dasharray:10;stroke-dashoffset:0;fill:none;stroke:var(--ck-color-widget-type-around-button-icon);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.ck .ck-widget .ck-widget__type-around__button svg line{stroke-dasharray:7}.ck .ck-widget .ck-widget__type-around__button:hover{animation:ck-widget-type-around-button-sonar 1s ease infinite}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline{animation:ck-widget-type-around-arrow-dash 2s linear}.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:ck-widget-type-around-arrow-tip-dash 2s linear}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{pointer-events:auto;opacity:1}.ck .ck-widget:not(.ck-widget_selected)>.ck-widget__type-around>.ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button-hover)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover{background:var(--ck-color-widget-type-around-button-active)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{width:calc(var(--ck-widget-type-around-button-size) - 2px);height:calc(var(--ck-widget-type-around-button-size) - 2px);border-radius:100px;background:linear-gradient(135deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.3))}.ck .ck-widget.ck-widget_with-selection-handle>.ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:20px}.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{pointer-events:none;opacity:0}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover){background:var(--ck-color-widget-type-around-button-blurred-editable)}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover) svg *{stroke:#999}@keyframes ck-widget-type-around-arrow-dash{0%{stroke-dashoffset:10}20%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-arrow-tip-dash{0%,20%{stroke-dashoffset:7}40%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-button-sonar{0%{box-shadow:0 0 0 0 hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}50%{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-end-alpha))}to{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}}'},function(e,t,i){var n=i(1);var o=i(70);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\":root{--ck-color-resizer:var(--ck-color-focus-border);--ck-resizer-size:10px;--ck-resizer-border-width:1px;--ck-resizer-border-radius:2px;--ck-resizer-offset:calc(var(--ck-resizer-size)/-2 - 2px);--ck-resizer-tooltip-offset:10px;--ck-color-resizer-tooltip-background:#262626;--ck-color-resizer-tooltip-text:#f2f2f2}.ck .ck-widget,.ck .ck-widget.ck-widget_with-selection-handle{position:relative}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{position:absolute}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{display:block}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle:hover .ck-widget__selection-handle{visibility:visible}.ck .ck-size-view{background:var(--ck-color-resizer-tooltip-background);color:var(--ck-color-resizer-tooltip-text);border:1px solid var(--ck-color-resizer-tooltip-text);border-radius:var(--ck-resizer-border-radius);font-size:var(--ck-font-size-tiny);display:block;padding:var(--ck-spacing-small)}.ck .ck-size-view.ck-orientation-bottom-left,.ck .ck-size-view.ck-orientation-bottom-right,.ck .ck-size-view.ck-orientation-top-left,.ck .ck-size-view.ck-orientation-top-right{position:absolute}.ck .ck-size-view.ck-orientation-top-left{top:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-top-right{top:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-right{bottom:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-left{bottom:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}:root{--ck-widget-outline-thickness:3px;--ck-widget-handler-icon-size:16px;--ck-widget-handler-animation-duration:200ms;--ck-widget-handler-animation-curve:ease;--ck-color-widget-blurred-border:#dedede;--ck-color-widget-hover-border:#ffc83d;--ck-color-widget-editable-focus-background:var(--ck-color-base-background);--ck-color-widget-drag-handler-icon-color:var(--ck-color-base-background)}.ck .ck-widget{outline-width:var(--ck-widget-outline-thickness);outline-style:solid;outline-color:transparent;transition:outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_selected,.ck .ck-widget.ck-widget_selected:hover{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border)}.ck .ck-widget:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-editor__nested-editable{border:1px solid transparent}.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0;background-color:var(--ck-color-widget-editable-focus-background)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{padding:4px;box-sizing:border-box;background-color:transparent;opacity:0;transition:background-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),visibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0;transform:translateY(-100%);left:calc(0px - var(--ck-widget-outline-thickness))}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{width:var(--ck-widget-handler-icon-size);height:var(--ck-widget-handler-icon-size);color:var(--ck-color-widget-drag-handler-icon-color)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:0;transition:opacity .3s var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle:hover .ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-widget-hover-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover .ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-focus-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:1}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{left:auto;right:calc(0px - var(--ck-widget-outline-thickness))}.ck.ck-editor__editable.ck-read-only .ck-widget{transition:none}.ck.ck-editor__editable.ck-read-only .ck-widget:not(.ck-widget_selected){--ck-widget-outline-thickness:0px}.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover{outline-color:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle .ck-widget__selection-handle:hover,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable>.ck-widget.ck-widget_with-selection-handle:first-child,.ck.ck-editor__editable blockquote>.ck-widget.ck-widget_with-selection-handle:first-child{margin-top:calc(1em + var(--ck-widget-handler-icon-size))}\"},function(e,t,i){var n=i(1);var o=i(72);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-labeled-field-view .ck-labeled-field-view__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-field-view .ck-labeled-field-view__status_error{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view>.ck.ck-label{width:100%;text-overflow:ellipsis;overflow:hidden}\"},function(e,t,i){var n=i(1);var o=i(74);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\":root{--ck-input-text-width:18em}.ck.ck-input-text{border-radius:0}.ck-rounded-corners .ck.ck-input-text,.ck.ck-input-text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-text{box-shadow:var(--ck-inner-shadow),0 0;background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);min-width:var(--ck-input-text-width);min-height:var(--ck-ui-component-min-height);transition:box-shadow .2s ease-in-out,border .2s ease-in-out}.ck.ck-input-text:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text[readonly]{border:1px solid var(--ck-color-input-disabled-border);background:var(--ck-color-input-disabled-background);color:var(--ck-color-input-disabled-text)}.ck.ck-input-text[readonly]:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text.ck-error{border-color:var(--ck-color-input-error-border);animation:ck-text-input-shake .3s ease both}.ck.ck-input-text.ck-error:focus{box-shadow:var(--ck-focus-error-outer-shadow),var(--ck-inner-shadow)}@keyframes ck-text-input-shake{20%{transform:translateX(-2px)}40%{transform:translateX(2px)}60%{transform:translateX(-1px)}80%{transform:translateX(1px)}}\"},function(e,t,i){var n=i(1);var o=i(76);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-text-alternative-form{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-text-alternative-form .ck-labeled-field-view{display:inline-block}.ck.ck-text-alternative-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-text-alternative-form{flex-wrap:wrap}.ck.ck-text-alternative-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-text-alternative-form .ck-button{flex-basis:50%}}.ck.ck-text-alternative-form{padding:var(--ck-spacing-standard)}.ck.ck-text-alternative-form:focus{outline:none}[dir=ltr] .ck.ck-text-alternative-form>:not(:first-child),[dir=rtl] .ck.ck-text-alternative-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-text-alternative-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-text-alternative-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-text-alternative-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-text-alternative-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-text-alternative-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-text-alternative-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-text-alternative-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-text-alternative-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}\"},function(e,t,i){var n=i(1);var o=i(78);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck .ck-balloon-rotator__navigation{display:flex;align-items:center;justify-content:center}.ck .ck-balloon-rotator__content .ck-toolbar{justify-content:center}.ck .ck-balloon-rotator__navigation{background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation>*{margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{box-shadow:none}\"},function(e,t,i){var n=i(1);var o=i(80);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck .ck-fake-panel{position:absolute;z-index:calc(var(--ck-z-modal) - 1)}.ck .ck-fake-panel div{position:absolute}.ck .ck-fake-panel div:first-child{z-index:2}.ck .ck-fake-panel div:nth-child(2){z-index:1}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);width:100%;height:100%}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical)}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*2)}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*3)}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}\"},function(e,t,i){var n=i(1);var o=i(82);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck-content .image{display:table;clear:both;text-align:center;margin:1em auto}.ck-content .image>img{display:block;margin:0 auto;max-width:100%;min-width:50px}\"},function(e,t,i){var n=i(1);var o=i(84);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck-content .image>figcaption{display:table-caption;caption-side:bottom;word-break:break-word;color:#333;background-color:#f7f7f7;padding:.6em;font-size:.75em;outline-offset:-1px}\"},function(e,t,i){var n=i(1);var o=i(86);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck .ck-widget_with-resizer{position:relative}.ck .ck-widget__resizer{display:none;position:absolute;pointer-events:none;left:0;top:0;outline:1px solid var(--ck-color-resizer)}.ck-focused .ck-widget_with-resizer.ck-widget_selected>.ck-widget__resizer{display:block}.ck .ck-widget__resizer__handle{position:absolute;pointer-events:all;width:var(--ck-resizer-size);height:var(--ck-resizer-size);background:var(--ck-color-focus-border);border:var(--ck-resizer-border-width) solid #fff;border-radius:var(--ck-resizer-border-radius)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{top:var(--ck-resizer-offset);left:var(--ck-resizer-offset);cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{top:var(--ck-resizer-offset);right:var(--ck-resizer-offset);cursor:nesw-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{bottom:var(--ck-resizer-offset);right:var(--ck-resizer-offset);cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{bottom:var(--ck-resizer-offset);left:var(--ck-resizer-offset);cursor:nesw-resize}\"},function(e,t,i){var n=i(1);var o=i(88);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck-content .image.image_resized{max-width:100%;display:block;box-sizing:border-box}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}\"},function(e,t,i){var n=i(1);var o=i(90);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\":root{--ck-image-style-spacing:1.5em}.ck-content .image-style-align-center,.ck-content .image-style-align-left,.ck-content .image-style-align-right,.ck-content .image-style-side{max-width:50%}.ck-content .image-style-side{float:right;margin-left:var(--ck-image-style-spacing)}.ck-content .image-style-align-left{float:left;margin-right:var(--ck-image-style-spacing)}.ck-content .image-style-align-center{margin-left:auto;margin-right:auto}.ck-content .image-style-align-right{float:right;margin-left:var(--ck-image-style-spacing)}\"},function(e,t,i){var n=i(1);var o=i(92);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-editor__editable .image{position:relative}.ck.ck-editor__editable .image .ck-progress-bar{position:absolute;top:0;left:0}.ck.ck-editor__editable .image.ck-appear{animation:fadeIn .7s}.ck.ck-editor__editable .image .ck-progress-bar{height:2px;width:0;background:var(--ck-color-upload-bar-background);transition:width .1s}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\"},function(e,t,i){var n=i(1);var o=i(94);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-image-upload-complete-icon{display:block;position:absolute;top:10px;right:10px;border-radius:50%}.ck-image-upload-complete-icon:after{content:\"\";position:absolute}:root{--ck-color-image-upload-icon:#fff;--ck-color-image-upload-icon-background:#008a00;--ck-image-upload-icon-size:20px;--ck-image-upload-icon-width:2px}.ck-image-upload-complete-icon{width:var(--ck-image-upload-icon-size);height:var(--ck-image-upload-icon-size);opacity:0;background:var(--ck-color-image-upload-icon-background);animation-name:ck-upload-complete-icon-show,ck-upload-complete-icon-hide;animation-fill-mode:forwards,forwards;animation-duration:.5s,.5s;font-size:var(--ck-image-upload-icon-size);animation-delay:0ms,3s}.ck-image-upload-complete-icon:after{left:25%;top:50%;opacity:0;height:0;width:0;transform:scaleX(-1) rotate(135deg);transform-origin:left top;border-top:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);border-right:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);animation-name:ck-upload-complete-icon-check;animation-duration:.5s;animation-delay:.5s;animation-fill-mode:forwards;box-sizing:border-box}@keyframes ck-upload-complete-icon-show{0%{opacity:0}to{opacity:1}}@keyframes ck-upload-complete-icon-hide{0%{opacity:1}to{opacity:0}}@keyframes ck-upload-complete-icon-check{0%{opacity:1;width:0;height:0}33%{width:.3em;height:0}to{opacity:1;width:.3em;height:.45em}}'},function(e,t,i){var n=i(1);var o=i(96);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck .ck-upload-placeholder-loader{position:absolute;display:flex;align-items:center;justify-content:center;top:0;left:0}.ck .ck-upload-placeholder-loader:before{content:\"\";position:relative}:root{--ck-color-upload-placeholder-loader:#b3b3b3;--ck-upload-placeholder-loader-size:32px}.ck .ck-image-upload-placeholder{width:100%;margin:0}.ck .ck-upload-placeholder-loader{width:100%;height:100%}.ck .ck-upload-placeholder-loader:before{width:var(--ck-upload-placeholder-loader-size);height:var(--ck-upload-placeholder-loader-size);border-radius:50%;border-top:3px solid var(--ck-color-upload-placeholder-loader);border-right:2px solid transparent;animation:ck-upload-placeholder-loader 1s linear infinite}@keyframes ck-upload-placeholder-loader{to{transform:rotate(1turn)}}'},function(e,t,i){var n=i(1);var o=i(98);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck .ck-link_selected{background:var(--ck-color-link-selected-background)}\"},function(e,t,i){var n=i(1);var o=i(100);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-link-form{display:flex}.ck.ck-link-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-link-form{flex-wrap:wrap}.ck.ck-link-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-link-form .ck-button{flex-basis:50%}}.ck.ck-link-form_layout-vertical{display:block}.ck.ck-link-form{padding:var(--ck-spacing-standard)}.ck.ck-link-form:focus{outline:none}[dir=ltr] .ck.ck-link-form>:not(:first-child),[dir=rtl] .ck.ck-link-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-link-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-link-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}.ck.ck-link-form_layout-vertical{padding:0;min-width:var(--ck-input-text-width)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) var(--ck-spacing-small)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-link-form_layout-vertical .ck-button{padding:var(--ck-spacing-standard);margin:0;border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border);width:50%}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-link-form_layout-vertical .ck.ck-list{margin-left:0}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton{border:0;width:100%}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton:hover{background:none}\"},function(e,t,i){var n=i(1);var o=i(102);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-link-actions{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-link-actions .ck-link-actions__preview{display:inline-block}.ck.ck-link-actions .ck-link-actions__preview .ck-button__label{overflow:hidden}@media screen and (max-width:600px){.ck.ck-link-actions{flex-wrap:wrap}.ck.ck-link-actions .ck-link-actions__preview{flex-basis:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){flex-basis:50%}}.ck.ck-link-actions{padding:var(--ck-spacing-standard)}.ck.ck-link-actions .ck-button.ck-link-actions__preview{padding-left:0;padding-right:0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{padding:0 var(--ck-spacing-medium);color:var(--ck-color-link-default);text-overflow:ellipsis;cursor:pointer;max-width:var(--ck-input-text-width);min-width:3em;text-align:center}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label:hover{text-decoration:underline}.ck.ck-link-actions .ck-button.ck-link-actions__preview,.ck.ck-link-actions .ck-button.ck-link-actions__preview:active,.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus,.ck.ck-link-actions .ck-button.ck-link-actions__preview:hover{background:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:active{box-shadow:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus .ck-button__label{text-decoration:underline}.ck.ck-link-actions:focus{outline:none}[dir=ltr] .ck.ck-link-actions .ck-button:not(:first-child),[dir=rtl] .ck.ck-link-actions .ck-button:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-actions{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-link-actions .ck-button.ck-link-actions__preview{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{min-width:0;max-width:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):last-of-type{border-right:1px solid var(--ck-color-base-border)}}\"},function(module,__webpack_exports__,__webpack_require__){\"use strict\";var md5;var _unused_webpack_default_export=md5;(function(){var HxOverrides=function(){};HxOverrides.__name__=true;HxOverrides.dateStr=function(e){var t=e.getMonth()+1;var i=e.getDate();var n=e.getHours();var o=e.getMinutes();var r=e.getSeconds();return e.getFullYear()+\"-\"+(t<10?\"0\"+t:\"\"+t)+\"-\"+(i<10?\"0\"+i:\"\"+i)+\" \"+(n<10?\"0\"+n:\"\"+n)+\":\"+(o<10?\"0\"+o:\"\"+o)+\":\"+(r<10?\"0\"+r:\"\"+r)};HxOverrides.strDate=function(e){switch(e.length){case 8:var t=e.split(\":\");var i=new Date;i.setTime(0);i.setUTCHours(t[0]);i.setUTCMinutes(t[1]);i.setUTCSeconds(t[2]);return i;case 10:var t=e.split(\"-\");return new Date(t[0],t[1]-1,t[2],0,0,0);case 19:var t=e.split(\" \");var n=t[0].split(\"-\");var o=t[1].split(\":\");return new Date(n[0],n[1]-1,n[2],o[0],o[1],o[2]);default:throw\"Invalid date format : \"+e}};HxOverrides.cca=function(e,t){var i=e.charCodeAt(t);if(i!=i)return undefined;return i};HxOverrides.substr=function(e,t,i){if(t!=null&&t!=0&&i!=null&&i<0)return\"\";if(i==null)i=e.length;if(t<0){t=e.length+t;if(t<0)t=0}else if(i<0)i=e.length+i-t;return e.substr(t,i)};HxOverrides.remove=function(e,t){var i=0;var n=e.length;while(i>>32-t},str2blks:function(e){var t=(e.length+8>>6)+1;var i=new Array;var n=0,o=t*16;while(n>2]|=HxOverrides.cca(e,r)<<(e.length*8+r)%4*8;r++}i[r>>2]|=128<<(e.length*8+r)%4*8;var s=e.length*8;var a=t*16-2;i[a]=s&255;i[a]|=(s>>>8&255)<<8;i[a]|=(s>>>16&255)<<16;i[a]|=(s>>>24&255)<<24;return i},rhex:function(e){var t=\"\";var i=\"0123456789abcdef\";var n=0;while(n<4){var o=n++;t+=i.charAt(e>>o*8+4&15)+i.charAt(e>>o*8&15)}return t},addme:function(e,t){var i=(e&65535)+(t&65535);var n=(e>>16)+(t>>16)+(i>>16);return n<<16|i&65535},bitAND:function(e,t){var i=e&1&(t&1);var n=e>>>1&t>>>1;return n<<1|i},bitXOR:function(e,t){var i=e&1^t&1;var n=e>>>1^t>>>1;return n<<1|i},bitOR:function(e,t){var i=e&1|t&1;var n=e>>>1|t>>>1;return n<<1|i},__class__:haxe.Md5};haxe.Timer=function(e){var t=this;this.id=window.setInterval((function(){t.run()}),e)};haxe.Timer.__name__=true;haxe.Timer.delay=function(e,t){var i=new haxe.Timer(t);i.run=function(){i.stop();e()};return i};haxe.Timer.measure=function(e,t){var i=haxe.Timer.stamp();var n=e();haxe.Log.trace(haxe.Timer.stamp()-i+\"s\",t);return n};haxe.Timer.stamp=function(){return(new Date).getTime()/1e3};haxe.Timer.prototype={run:function(){},stop:function(){if(this.id==null)return;window.clearInterval(this.id);this.id=null},__class__:haxe.Timer};var js=js||{};js.Boot=function(){};js.Boot.__name__=true;js.Boot.__unhtml=function(e){return e.split(\"&\").join(\"&\").split(\"<\").join(\"<\").split(\">\").join(\">\")};js.Boot.__trace=function(e,t){var i=t!=null?t.fileName+\":\"+t.lineNumber+\": \":\"\";i+=js.Boot.__string_rec(e,\"\");var n;if(typeof document!=\"undefined\"&&(n=document.getElementById(\"haxe:trace\"))!=null)n.innerHTML+=js.Boot.__unhtml(i)+\"
    \";else if(typeof console!=\"undefined\"&&console.log!=null)console.log(i)};js.Boot.__clear_trace=function(){var e=document.getElementById(\"haxe:trace\");if(e!=null)e.innerHTML=\"\"};js.Boot.isClass=function(e){return e.__name__};js.Boot.isEnum=function(e){return e.__ename__};js.Boot.getClass=function(e){return e.__class__};js.Boot.__string_rec=function(e,t){if(e==null)return\"null\";if(t.length>=5)return\"<...>\";var i=typeof e;if(i==\"function\"&&(e.__name__||e.__ename__))i=\"object\";switch(i){case\"object\":if(e instanceof Array){if(e.__enum__){if(e.length==2)return e[0];var n=e[0]+\"(\";t+=\"\\t\";var o=2,r=e.length;while(o0?\",\":\"\")+js.Boot.__string_rec(e[l],t)}n+=\"]\";return n}var c;try{c=e.toString}catch(e){return\"???\"}if(c!=null&&c!=Object.toString){var d=e.toString();if(d!=\"[object Object]\")return d}var u=null;var n=\"{\\n\";t+=\"\\t\";var h=e.hasOwnProperty!=null;for(var u in e){if(h&&!e.hasOwnProperty(u)){continue}if(u==\"prototype\"||u==\"__class__\"||u==\"__super__\"||u==\"__interfaces__\"||u==\"__properties__\"){continue}if(n.length!=2)n+=\", \\n\";n+=t+u+\" : \"+js.Boot.__string_rec(e[u],t)}t=t.substring(1);n+=\"\\n\"+t+\"}\";return n;case\"function\":return\"\";case\"string\":return e;default:return String(e)}};js.Boot.__interfLoop=function(e,t){if(e==null)return false;if(e==t)return true;var i=e.__interfaces__;if(i!=null){var n=0,o=i.length;while(n>>32-t},str2blks:function(e){var t=(e.length+8>>6)+1;var i=new Array;var n=0,o=t*16;while(n>2]|=HxOverrides.cca(e,r)<<(e.length*8+r)%4*8;r++}i[r>>2]|=128<<(e.length*8+r)%4*8;var s=e.length*8;var a=t*16-2;i[a]=s&255;i[a]|=(s>>>8&255)<<8;i[a]|=(s>>>16&255)<<16;i[a]|=(s>>>24&255)<<24;return i},rhex:function(e){var t=\"\";var i=\"0123456789abcdef\";var n=0;while(n<4){var o=n++;t+=i.charAt(e>>o*8+4&15)+i.charAt(e>>o*8&15)}return t},addme:function(e,t){var i=(e&65535)+(t&65535);var n=(e>>16)+(t>>16)+(i>>16);return n<<16|i&65535},bitAND:function(e,t){var i=e&1&(t&1);var n=e>>>1&t>>>1;return n<<1|i},bitXOR:function(e,t){var i=e&1^t&1;var n=e>>>1^t>>>1;return n<<1|i},bitOR:function(e,t){var i=e&1|t&1;var n=e>>>1|t>>>1;return n<<1|i},__class__:haxe.Md5};haxe.Timer=function(e){var t=this;this.id=window.setInterval((function(){t.run()}),e)};haxe.Timer.__name__=true;haxe.Timer.delay=function(e,t){var i=new haxe.Timer(t);i.run=function(){i.stop();e()};return i};haxe.Timer.measure=function(e,t){var i=haxe.Timer.stamp();var n=e();haxe.Log.trace(haxe.Timer.stamp()-i+\"s\",t);return n};haxe.Timer.stamp=function(){return(new Date).getTime()/1e3};haxe.Timer.prototype={run:function(){},stop:function(){if(this.id==null)return;window.clearInterval(this.id);this.id=null},__class__:haxe.Timer};var js=js||{};js.Boot=function(){};js.Boot.__name__=true;js.Boot.__unhtml=function(e){return e.split(\"&\").join(\"&\").split(\"<\").join(\"<\").split(\">\").join(\">\")};js.Boot.__trace=function(e,t){var i=t!=null?t.fileName+\":\"+t.lineNumber+\": \":\"\";i+=js.Boot.__string_rec(e,\"\");var n;if(typeof document!=\"undefined\"&&(n=document.getElementById(\"haxe:trace\"))!=null)n.innerHTML+=js.Boot.__unhtml(i)+\"
    \";else if(typeof console!=\"undefined\"&&console.log!=null)console.log(i)};js.Boot.__clear_trace=function(){var e=document.getElementById(\"haxe:trace\");if(e!=null)e.innerHTML=\"\"};js.Boot.isClass=function(e){return e.__name__};js.Boot.isEnum=function(e){return e.__ename__};js.Boot.getClass=function(e){return e.__class__};js.Boot.__string_rec=function(e,t){if(e==null)return\"null\";if(t.length>=5)return\"<...>\";var i=typeof e;if(i==\"function\"&&(e.__name__||e.__ename__))i=\"object\";switch(i){case\"object\":if(e instanceof Array){if(e.__enum__){if(e.length==2)return e[0];var n=e[0]+\"(\";t+=\"\\t\";var o=2,r=e.length;while(o0?\",\":\"\")+js.Boot.__string_rec(e[l],t)}n+=\"]\";return n}var c;try{c=e.toString}catch(e){return\"???\"}if(c!=null&&c!=Object.toString){var d=e.toString();if(d!=\"[object Object]\")return d}var u=null;var n=\"{\\n\";t+=\"\\t\";var h=e.hasOwnProperty!=null;for(var u in e){if(h&&!e.hasOwnProperty(u)){continue}if(u==\"prototype\"||u==\"__class__\"||u==\"__super__\"||u==\"__interfaces__\"||u==\"__properties__\"){continue}if(n.length!=2)n+=\", \\n\";n+=t+u+\" : \"+js.Boot.__string_rec(e[u],t)}t=t.substring(1);n+=\"\\n\"+t+\"}\";return n;case\"function\":return\"\";case\"string\":return e;default:return String(e)}};js.Boot.__interfLoop=function(e,t){if(e==null)return false;if(e==t)return true;var i=e.__interfaces__;if(i!=null){var n=0,o=i.length;while(ndiv:first-child,.wrs_content_container.wrs_modal_desktop>div:first-child,.wrs_content_container.wrs_modal_ios>div:first-child{flex-grow:1}.wrs_modal_wrapper.wrs_modal_android{margin:auto;display:flex;flex-direction:column;height:100%;width:100%}.wrs_content_container.wrs_modal_desktop,.wrs_content_container.wrs_modal_ios{width:100%;flex-grow:1;display:flex;flex-direction:column}.wrs_modal_wrapper.wrs_modal_ios{margin:auto;display:flex;flex-direction:column;height:100%;width:100%}.wrs_virtual_keyboard{height:100%;width:100%;top:0;left:50%;transform:translate(-50%)}@media (orientation:portrait){.wrs_modal_dialogContainer.wrs_modal_mobile{width:100vmin;height:100vmin;margin:auto;border-width:0}.wrs_modal_wrapper.wrs_modal_mobile{width:100vmin;height:100vmin;margin:auto}}@media (orientation:landscape){.wrs_modal_dialogContainer.wrs_modal_mobile{width:100vmin;height:100vmin;margin:auto;border-width:0}.wrs_modal_wrapper.wrs_modal_mobile{width:100vmin;height:100vmin;margin:auto}}.wrs_modal_dialogContainer.wrs_modal_badStock,.wrs_modal_wrapper.wrs_modal_badStock{width:100%;height:280px;margin:0 auto;border-width:0}.wrs_noselect{-khtml-user-select:none}.wrs_bottom_right_resizer,.wrs_noselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.wrs_bottom_right_resizer{width:10px;height:10px;color:#778e9a;position:absolute;right:4px;bottom:8px;cursor:se-resize}.wrs_bottom_left_resizer{width:15px;height:15px;color:#778e9a;position:absolute;left:0;top:0;cursor:se-resize}.wrs_modal_controls{height:42px;margin:3px 0;overflow:hidden;line-height:normal}.wrs_modal_links{margin:10px auto 0;font-family:arial,sans-serif;padding:6px;display:inline;float:right;text-align:right}.wrs_modal_links>a{text-decoration:none;color:#778e9a;font-size:16px}.wrs_modal_button_cancel,.wrs_modal_button_cancel:active,.wrs_modal_button_cancel:focus,.wrs_modal_button_cancel:hover,.wrs_modal_button_cancel:visited{min-width:80px;font-size:14px;border-radius:3px;border:1px solid #778e9a;padding:6px 8px;margin:10px auto 0 5px;cursor:pointer;font-family:arial,sans-serif;background-color:#ddd;height:32px}.wrs_modal_button_accept,.wrs_modal_button_accept:active,.wrs_modal_button_accept:focus,.wrs_modal_button_accept:hover,.wrs_modal_button_accept:visited{min-width:80px;font-size:14px;border-radius:3px;border:1px solid #778e9a;padding:6px 8px;margin:10px 5px 0 auto;color:#fff;background:#778e9a;cursor:pointer;font-family:arial,sans-serif;height:32px}.wrs_editor_vertical_bar{height:20px;float:right;background:none;width:20px;cursor:pointer}.wrs_modal_buttons_container{display:inline;float:left}.wrs_modal_buttons_container.wrs_modalAndroid{padding-left:6px}.wrs_modal_buttons_container.wrs_modalDesktop{padding-left:0}.wrs_modal_buttons_container>button{line-height:normal;background-image:none}.wrs_modal_wrapper{margin:6px;display:flex;flex-direction:column}.wrs_modal_wrapper.wrs_modal_desktop.wrs_minimized{display:none}@media only screen and (max-device-width:480px) and (orientation:portrait){#wrs_modal_wrapper{width:140%}}.wrs_popupmessage_overlay_envolture{display:none;width:100%}.wrs_popupmessage_overlay{position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);z-index:4;cursor:pointer}.wrs_popupmessage_panel{top:50%;left:50%;transform:translate(-50%,-50%);position:absolute;background:#fff;max-width:500px;width:75%;border-radius:2px;padding:20px;font-family:sans-serif;font-size:15px;text-align:left;color:#2e2e2e;z-index:5;max-height:75%;overflow:auto}.wrs_popupmessage_button_area{margin:10px 0 0}.wrs_panelContainer *{border:0}.wrs_button_cancel,.wrs_button_cancel:active,.wrs_button_cancel:focus,.wrs_button_cancel:hover,.wrs_button_cancel:visited{min-width:80px;font-size:14px;border-radius:3px;border:1px solid #778e9a;padding:6px 8px;margin:10px auto 0 5px;cursor:pointer;font-family:arial,sans-serif;background-color:#ddd;background-image:none;height:32px}.wrs_button_accept,.wrs_button_accept:active,.wrs_button_accept:focus,.wrs_button_accept:hover,.wrs_button_accept:visited{min-width:80px;font-size:14px;border-radius:3px;border:1px solid #778e9a;padding:6px 8px;margin:10px 5px 0 auto;color:#fff;background:#778e9a;cursor:pointer;font-family:arial,sans-serif;height:32px}.wrs_editor button{box-shadow:none}.wrs_editor .wrs_header button{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.wrs_modal_overlay.wrs_modal_desktop.wrs_stack.wrs_overlay_active{display:block}.wrs_toolbar tr:focus,.wrs_toolbar tr:hover{background:none}.wrs_modal_rtl .wrs_modal_button_cancel{margin-right:5px;margin-left:0}.wrs_modal_rtl .wrs_modal_button_accept{margin-right:0;margin-left:5px}.wrs_modal_rtl .wrs_button_cancel{margin-right:5px;margin-left:0}.wrs_modal_rtl .wrs_button_accept{margin-right:0;margin-left:5px}\"},function(e,t,i){var n=i(1);var o=i(107);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-media__wrapper .ck-media__placeholder{display:flex;flex-direction:column;align-items:center}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-tooltip{display:block}@media (hover:none){.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-tooltip{display:none}}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url{max-width:100%;position:relative}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url:hover .ck-tooltip{visibility:visible;opacity:1}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-media__placeholder__url__text{overflow:hidden;display:block}.ck-media__wrapper[data-oembed-url*=\"facebook.com\"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*=\"google.com/maps\"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*=\"instagram.com\"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*=\"twitter.com\"] .ck-media__placeholder__icon *{display:none}.ck-editor__editable:not(.ck-read-only) .ck-media__wrapper>:not(.ck-media__placeholder),.ck-editor__editable:not(.ck-read-only) .ck-widget:not(.ck-widget_selected) .ck-media__placeholder{pointer-events:none}:root{--ck-media-embed-placeholder-icon-size:3em;--ck-color-media-embed-placeholder-url-text:#757575;--ck-color-media-embed-placeholder-url-text-hover:var(--ck-color-base-text)}.ck-media__wrapper{margin:0 auto}.ck-media__wrapper .ck-media__placeholder{padding:calc(3*var(--ck-spacing-standard));background:var(--ck-color-base-foreground)}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon{min-width:var(--ck-media-embed-placeholder-icon-size);height:var(--ck-media-embed-placeholder-icon-size);margin-bottom:var(--ck-spacing-large);background-position:50%;background-size:cover}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon .ck-icon{width:100%;height:100%}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text{color:var(--ck-color-media-embed-placeholder-url-text);white-space:nowrap;text-align:center;font-style:italic;text-overflow:ellipsis}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:var(--ck-color-media-embed-placeholder-url-text-hover);cursor:pointer;text-decoration:underline}.ck-media__wrapper[data-oembed-url*=\"open.spotify.com\"]{max-width:300px;max-height:380px}.ck-media__wrapper[data-oembed-url*=\"google.com/maps\"] .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAuMzc4IiBoZWlnaHQ9IjI1NC4xNjciIHZpZXdCb3g9IjAgMCA2Ni4yNDYgNjcuMjQ4Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcyLjUzMSAtMjE4LjQ1NSkgc2NhbGUoLjk4MDEyKSI+PHJlY3Qgcnk9IjUuMjM4IiByeD0iNS4yMzgiIHk9IjIzMS4zOTkiIHg9IjE3Ni4wMzEiIGhlaWdodD0iNjAuMDk5IiB3aWR0aD0iNjAuMDk5IiBmaWxsPSIjMzRhNjY4IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0yMDYuNDc3IDI2MC45bC0yOC45ODcgMjguOTg3YTUuMjE4IDUuMjE4IDAgMDAzLjc4IDEuNjFoNDkuNjIxYzEuNjk0IDAgMy4xOS0uNzk4IDQuMTQ2LTIuMDM3eiIgZmlsbD0iIzVjODhjNSIvPjxwYXRoIGQ9Ik0yMjYuNzQyIDIyMi45ODhjLTkuMjY2IDAtMTYuNzc3IDcuMTctMTYuNzc3IDE2LjAxNC4wMDcgMi43NjIuNjYzIDUuNDc0IDIuMDkzIDcuODc1LjQzLjcwMy44MyAxLjQwOCAxLjE5IDIuMTA3LjMzMy41MDIuNjUgMS4wMDUuOTUgMS41MDguMzQzLjQ3Ny42NzMuOTU3Ljk4OCAxLjQ0IDEuMzEgMS43NjkgMi41IDMuNTAyIDMuNjM3IDUuMTY4Ljc5MyAxLjI3NSAxLjY4MyAyLjY0IDIuNDY2IDMuOTkgMi4zNjMgNC4wOTQgNC4wMDcgOC4wOTIgNC42IDEzLjkxNHYuMDEyYy4xODIuNDEyLjUxNi42NjYuODc5LjY2Ny40MDMtLjAwMS43NjgtLjMxNC45My0uNzk5LjYwMy01Ljc1NiAyLjIzOC05LjcyOSA0LjU4NS0xMy43OTQuNzgyLTEuMzUgMS42NzMtMi43MTUgMi40NjUtMy45OSAxLjEzNy0xLjY2NiAyLjMyOC0zLjQgMy42MzgtNS4xNjkuMzE1LS40ODIuNjQ1LS45NjIuOTg4LTEuNDM5LjMtLjUwMy42MTctMS4wMDYuOTUtMS41MDguMzU5LS43Ljc2LTEuNDA0IDEuMTktMi4xMDcgMS40MjYtMi40MDIgMi01LjExNCAyLjAwNC03Ljg3NSAwLTguODQ0LTcuNTExLTE2LjAxNC0xNi43NzYtMTYuMDE0eiIgZmlsbD0iI2RkNGIzZSIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48ZWxsaXBzZSByeT0iNS41NjQiIHJ4PSI1LjgyOCIgY3k9IjIzOS4wMDIiIGN4PSIyMjYuNzQyIiBmaWxsPSIjODAyZDI3IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0xOTAuMzAxIDIzNy4yODNjLTQuNjcgMC04LjQ1NyAzLjg1My04LjQ1NyA4LjYwNnMzLjc4NiA4LjYwNyA4LjQ1NyA4LjYwN2MzLjA0MyAwIDQuODA2LS45NTggNi4zMzctMi41MTYgMS41My0xLjU1NyAyLjA4Ny0zLjkxMyAyLjA4Ny02LjI5IDAtLjM2Mi0uMDIzLS43MjItLjA2NC0xLjA3OWgtOC4yNTd2My4wNDNoNC44NWMtLjE5Ny43NTktLjUzMSAxLjQ1LTEuMDU4IDEuOTg2LS45NDIuOTU4LTIuMDI4IDEuNTQ4LTMuOTAxIDEuNTQ4LTIuODc2IDAtNS4yMDgtMi4zNzItNS4yMDgtNS4yOTkgMC0yLjkyNiAyLjMzMi01LjI5OSA1LjIwOC01LjI5OSAxLjM5OSAwIDIuNjE4LjQwNyAzLjU4NCAxLjI5M2wyLjM4MS0yLjM4YzAtLjAwMi0uMDAzLS4wMDQtLjAwNC0uMDA1LTEuNTg4LTEuNTI0LTMuNjItMi4yMTUtNS45NTUtMi4yMTV6bTQuNDMgNS42NmwuMDAzLjAwNnYtLjAwM3oiIGZpbGw9IiNmZmYiIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTIxNS4xODQgMjUxLjkyOWwtNy45OCA3Ljk3OSAyOC40NzcgMjguNDc1YTUuMjMzIDUuMjMzIDAgMDAuNDQ5LTIuMTIzdi0zMS4xNjVjLS40NjkuNjc1LS45MzQgMS4zNDktMS4zODIgMi4wMDUtLjc5MiAxLjI3NS0xLjY4MiAyLjY0LTIuNDY1IDMuOTktMi4zNDcgNC4wNjUtMy45ODIgOC4wMzgtNC41ODUgMTMuNzk0LS4xNjIuNDg1LS41MjcuNzk4LS45My43OTktLjM2My0uMDAxLS42OTctLjI1NS0uODc5LS42Njd2LS4wMTJjLS41OTMtNS44MjItMi4yMzctOS44Mi00LjYtMTMuOTE0LS43ODMtMS4zNS0xLjY3My0yLjcxNS0yLjQ2Ni0zLjk5LTEuMTM3LTEuNjY2LTIuMzI3LTMuNC0zLjYzNy01LjE2OWwtLjAwMi0uMDAzeiIgZmlsbD0iI2MzYzNjMyIvPjxwYXRoIGQ9Ik0yMTIuOTgzIDI0OC40OTVsLTM2Ljk1MiAzNi45NTN2LjgxMmE1LjIyNyA1LjIyNyAwIDAwNS4yMzggNS4yMzhoMS4wMTVsMzUuNjY2LTM1LjY2NmExMzYuMjc1IDEzNi4yNzUgMCAwMC0yLjc2NC0zLjkgMzcuNTc1IDM3LjU3NSAwIDAwLS45ODktMS40NCAzNS4xMjcgMzUuMTI3IDAgMDAtLjk1LTEuNTA4Yy0uMDgzLS4xNjItLjE3Ni0uMzI2LS4yNjQtLjQ4OXoiIGZpbGw9IiNmZGRjNGYiIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTIxMS45OTggMjYxLjA4M2wtNi4xNTIgNi4xNTEgMjQuMjY0IDI0LjI2NGguNzgxYTUuMjI3IDUuMjI3IDAgMDA1LjIzOS01LjIzOHYtMS4wNDV6IiBmaWxsPSIjZmZmIiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjwvZz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*=\"facebook.com\"] .ck-media__placeholder{background:#4268b3}.ck-media__wrapper[data-oembed-url*=\"facebook.com\"] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05NjcuNDg0IDBINTYuNTE3QzI1LjMwNCAwIDAgMjUuMzA0IDAgNTYuNTE3djkxMC45NjZDMCA5OTguNjk0IDI1LjI5NyAxMDI0IDU2LjUyMiAxMDI0SDU0N1Y2MjhINDE0VjQ3M2gxMzNWMzU5LjAyOWMwLTEzMi4yNjIgODAuNzczLTIwNC4yODIgMTk4Ljc1Ni0yMDQuMjgyIDU2LjUxMyAwIDEwNS4wODYgNC4yMDggMTE5LjI0NCA2LjA4OVYyOTlsLTgxLjYxNi4wMzdjLTYzLjk5MyAwLTc2LjM4NCAzMC40OTItNzYuMzg0IDc1LjIzNlY0NzNoMTUzLjQ4N2wtMTkuOTg2IDE1NUg3MDd2Mzk2aDI2MC40ODRjMzEuMjEzIDAgNTYuNTE2LTI1LjMwMyA1Ni41MTYtNTYuNTE2VjU2LjUxNUMxMDI0IDI1LjMwMyA5OTguNjk3IDAgOTY3LjQ4NCAwIiBmaWxsPSIjRkZGRkZFIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*=\"facebook.com\"] .ck-media__placeholder .ck-media__placeholder__url__text{color:#cdf}.ck-media__wrapper[data-oembed-url*=\"facebook.com\"] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*=\"instagram.com\"] .ck-media__placeholder{background:linear-gradient(-135deg,#1400c7,#b800b1,#f50000)}.ck-media__wrapper[data-oembed-url*=\"instagram.com\"] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTA0IiBoZWlnaHQ9IjUwNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik0wIC4xNTloNTAzLjg0MVY1MDMuOTRIMHoiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjYSIvPjwvbWFzaz48cGF0aCBkPSJNMjUxLjkyMS4xNTljLTY4LjQxOCAwLTc2Ljk5Ny4yOS0xMDMuODY3IDEuNTE2LTI2LjgxNCAxLjIyMy00NS4xMjcgNS40ODItNjEuMTUxIDExLjcxLTE2LjU2NiA2LjQzNy0zMC42MTUgMTUuMDUxLTQ0LjYyMSAyOS4wNTYtMTQuMDA1IDE0LjAwNi0yMi42MTkgMjguMDU1LTI5LjA1NiA0NC42MjEtNi4yMjggMTYuMDI0LTEwLjQ4NyAzNC4zMzctMTEuNzEgNjEuMTUxQy4yOSAxNzUuMDgzIDAgMTgzLjY2MiAwIDI1Mi4wOGMwIDY4LjQxNy4yOSA3Ni45OTYgMS41MTYgMTAzLjg2NiAxLjIyMyAyNi44MTQgNS40ODIgNDUuMTI3IDExLjcxIDYxLjE1MSA2LjQzNyAxNi41NjYgMTUuMDUxIDMwLjYxNSAyOS4wNTYgNDQuNjIxIDE0LjAwNiAxNC4wMDUgMjguMDU1IDIyLjYxOSA0NC42MjEgMjkuMDU3IDE2LjAyNCA2LjIyNyAzNC4zMzcgMTAuNDg2IDYxLjE1MSAxMS43MDkgMjYuODcgMS4yMjYgMzUuNDQ5IDEuNTE2IDEwMy44NjcgMS41MTYgNjguNDE3IDAgNzYuOTk2LS4yOSAxMDMuODY2LTEuNTE2IDI2LjgxNC0xLjIyMyA0NS4xMjctNS40ODIgNjEuMTUxLTExLjcwOSAxNi41NjYtNi40MzggMzAuNjE1LTE1LjA1MiA0NC42MjEtMjkuMDU3IDE0LjAwNS0xNC4wMDYgMjIuNjE5LTI4LjA1NSAyOS4wNTctNDQuNjIxIDYuMjI3LTE2LjAyNCAxMC40ODYtMzQuMzM3IDExLjcwOS02MS4xNTEgMS4yMjYtMjYuODcgMS41MTYtMzUuNDQ5IDEuNTE2LTEwMy44NjYgMC02OC40MTgtLjI5LTc2Ljk5Ny0xLjUxNi0xMDMuODY3LTEuMjIzLTI2LjgxNC01LjQ4Mi00NS4xMjctMTEuNzA5LTYxLjE1MS02LjQzOC0xNi41NjYtMTUuMDUyLTMwLjYxNS0yOS4wNTctNDQuNjIxLTE0LjAwNi0xNC4wMDUtMjguMDU1LTIyLjYxOS00NC42MjEtMjkuMDU2LTE2LjAyNC02LjIyOC0zNC4zMzctMTAuNDg3LTYxLjE1MS0xMS43MUMzMjguOTE3LjQ0OSAzMjAuMzM4LjE1OSAyNTEuOTIxLjE1OXptMCA0NS4zOTFjNjcuMjY1IDAgNzUuMjMzLjI1NyAxMDEuNzk3IDEuNDY5IDI0LjU2MiAxLjEyIDM3LjkwMSA1LjIyNCA0Ni43NzggOC42NzQgMTEuNzU5IDQuNTcgMjAuMTUxIDEwLjAyOSAyOC45NjYgMTguODQ1IDguODE2IDguODE1IDE0LjI3NSAxNy4yMDcgMTguODQ1IDI4Ljk2NiAzLjQ1IDguODc3IDcuNTU0IDIyLjIxNiA4LjY3NCA0Ni43NzggMS4yMTIgMjYuNTY0IDEuNDY5IDM0LjUzMiAxLjQ2OSAxMDEuNzk4IDAgNjcuMjY1LS4yNTcgNzUuMjMzLTEuNDY5IDEwMS43OTctMS4xMiAyNC41NjItNS4yMjQgMzcuOTAxLTguNjc0IDQ2Ljc3OC00LjU3IDExLjc1OS0xMC4wMjkgMjAuMTUxLTE4Ljg0NSAyOC45NjYtOC44MTUgOC44MTYtMTcuMjA3IDE0LjI3NS0yOC45NjYgMTguODQ1LTguODc3IDMuNDUtMjIuMjE2IDcuNTU0LTQ2Ljc3OCA4LjY3NC0yNi41NiAxLjIxMi0zNC41MjcgMS40NjktMTAxLjc5NyAxLjQ2OS02Ny4yNzEgMC03NS4yMzctLjI1Ny0xMDEuNzk4LTEuNDY5LTI0LjU2Mi0xLjEyLTM3LjkwMS01LjIyNC00Ni43NzgtOC42NzQtMTEuNzU5LTQuNTctMjAuMTUxLTEwLjAyOS0yOC45NjYtMTguODQ1LTguODE1LTguODE1LTE0LjI3NS0xNy4yMDctMTguODQ1LTI4Ljk2Ni0zLjQ1LTguODc3LTcuNTU0LTIyLjIxNi04LjY3NC00Ni43NzgtMS4yMTItMjYuNTY0LTEuNDY5LTM0LjUzMi0xLjQ2OS0xMDEuNzk3IDAtNjcuMjY2LjI1Ny03NS4yMzQgMS40NjktMTAxLjc5OCAxLjEyLTI0LjU2MiA1LjIyNC0zNy45MDEgOC42NzQtNDYuNzc4IDQuNTctMTEuNzU5IDEwLjAyOS0yMC4xNTEgMTguODQ1LTI4Ljk2NiA4LjgxNS04LjgxNiAxNy4yMDctMTQuMjc1IDI4Ljk2Ni0xOC44NDUgOC44NzctMy40NSAyMi4yMTYtNy41NTQgNDYuNzc4LTguNjc0IDI2LjU2NC0xLjIxMiAzNC41MzItMS40NjkgMTAxLjc5OC0xLjQ2OXoiIGZpbGw9IiNGRkYiIG1hc2s9InVybCgjYikiLz48cGF0aCBkPSJNMjUxLjkyMSAzMzYuMDUzYy00Ni4zNzggMC04My45NzQtMzcuNTk2LTgzLjk3NC04My45NzMgMC00Ni4zNzggMzcuNTk2LTgzLjk3NCA4My45NzQtODMuOTc0IDQ2LjM3NyAwIDgzLjk3MyAzNy41OTYgODMuOTczIDgzLjk3NCAwIDQ2LjM3Ny0zNy41OTYgODMuOTczLTgzLjk3MyA4My45NzN6bTAtMjEzLjMzOGMtNzEuNDQ3IDAtMTI5LjM2NSA1Ny45MTgtMTI5LjM2NSAxMjkuMzY1IDAgNzEuNDQ2IDU3LjkxOCAxMjkuMzY0IDEyOS4zNjUgMTI5LjM2NCA3MS40NDYgMCAxMjkuMzY0LTU3LjkxOCAxMjkuMzY0LTEyOS4zNjQgMC03MS40NDctNTcuOTE4LTEyOS4zNjUtMTI5LjM2NC0xMjkuMzY1ek00MTYuNjI3IDExNy42MDRjMCAxNi42OTYtMTMuNTM1IDMwLjIzLTMwLjIzMSAzMC4yMy0xNi42OTUgMC0zMC4yMy0xMy41MzQtMzAuMjMtMzAuMjMgMC0xNi42OTYgMTMuNTM1LTMwLjIzMSAzMC4yMy0zMC4yMzEgMTYuNjk2IDAgMzAuMjMxIDEzLjUzNSAzMC4yMzEgMzAuMjMxIiBmaWxsPSIjRkZGIi8+PC9nPjwvc3ZnPg==)}.ck-media__wrapper[data-oembed-url*=\"instagram.com\"] .ck-media__placeholder .ck-media__placeholder__url__text{color:#ffe0fe}.ck-media__wrapper[data-oembed-url*=\"instagram.com\"] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*=\"twitter.com\"] .ck.ck-media__placeholder{background:linear-gradient(90deg,#71c6f4,#0d70a5)}.ck-media__wrapper[data-oembed-url*=\"twitter.com\"] .ck.ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDAwIj48cGF0aCBkPSJNNDAwIDIwMGMwIDExMC41LTg5LjUgMjAwLTIwMCAyMDBTMCAzMTAuNSAwIDIwMCA4OS41IDAgMjAwIDBzMjAwIDg5LjUgMjAwIDIwMHpNMTYzLjQgMzA1LjVjODguNyAwIDEzNy4yLTczLjUgMTM3LjItMTM3LjIgMC0yLjEgMC00LjItLjEtNi4yIDkuNC02LjggMTcuNi0xNS4zIDI0LjEtMjUtOC42IDMuOC0xNy45IDYuNC0yNy43IDcuNiAxMC02IDE3LjYtMTUuNCAyMS4yLTI2LjctOS4zIDUuNS0xOS42IDkuNS0zMC42IDExLjctOC44LTkuNC0yMS4zLTE1LjItMzUuMi0xNS4yLTI2LjYgMC00OC4yIDIxLjYtNDguMiA0OC4yIDAgMy44LjQgNy41IDEuMyAxMS00MC4xLTItNzUuNi0yMS4yLTk5LjQtNTAuNC00LjEgNy4xLTYuNSAxNS40LTYuNSAyNC4yIDAgMTYuNyA4LjUgMzEuNSAyMS41IDQwLjEtNy45LS4yLTE1LjMtMi40LTIxLjgtNnYuNmMwIDIzLjQgMTYuNiA0Mi44IDM4LjcgNDcuMy00IDEuMS04LjMgMS43LTEyLjcgMS43LTMuMSAwLTYuMS0uMy05LjEtLjkgNi4xIDE5LjIgMjMuOSAzMy4xIDQ1IDMzLjUtMTYuNSAxMi45LTM3LjMgMjAuNi01OS45IDIwLjYtMy45IDAtNy43LS4yLTExLjUtLjcgMjEuMSAxMy44IDQ2LjUgMjEuOCA3My43IDIxLjgiIGZpbGw9IiNmZmYiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*=\"twitter.com\"] .ck.ck-media__placeholder .ck-media__placeholder__url__text{color:#b8e6ff}.ck-media__wrapper[data-oembed-url*=\"twitter.com\"] .ck.ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}'},function(e,t,i){var n=i(1);var o=i(109);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-media-form{display:flex;align-items:flex-start;flex-direction:row;flex-wrap:nowrap}.ck.ck-media-form .ck-labeled-field-view{display:inline-block}.ck.ck-media-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-media-form{flex-wrap:wrap}.ck.ck-media-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-media-form .ck-button{flex-basis:50%}}.ck.ck-media-form{padding:var(--ck-spacing-standard)}.ck.ck-media-form:focus{outline:none}[dir=ltr] .ck.ck-media-form>:not(:first-child),[dir=rtl] .ck.ck-media-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-media-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-media-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-media-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-media-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-media-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-media-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-media-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-media-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-media-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}\"},function(e,t,i){var n=i(1);var o=i(111);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck-content .media{clear:both;margin:1em 0;display:block;min-width:15em}\"},function(e,t,i){var n=i(1);var o=i(113);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-content .page-break{position:relative;clear:both;padding:5px 0;display:flex;align-items:center;justify-content:center}.ck-content .page-break:after{content:\"\";position:absolute;border-bottom:2px dashed #c4c4c4;width:100%}.ck-content .page-break__label{position:relative;z-index:1;padding:.3em .6em;display:block;text-transform:uppercase;border:1px solid #c4c4c4;border-radius:2px;font-family:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;font-size:.75em;font-weight:700;color:#333;background:#fff;box-shadow:2px 2px 1px rgba(0,0,0,.15);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media print{.ck-content .page-break{padding:0}.ck-content .page-break:after{display:none}}'},function(e,t,i){var n=i(1);var o=i(115);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-form__header{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:space-between}:root{--ck-form-header-height:38px}.ck.ck-form__header{padding:var(--ck-spacing-small) var(--ck-spacing-large);height:var(--ck-form-header-height);line-height:var(--ck-form-header-height);border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-form__header .ck-form__header__label{font-weight:700}\"},function(e,t,i){var n=i(1);var o=i(117);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-character-grid .ck-character-grid__tiles{display:grid;grid-template-columns:repeat(10,1fr)}:root{--ck-character-grid-tile-size:24px}.ck.ck-character-grid{overflow-y:auto;overflow-x:hidden;width:350px;max-height:200px}.ck.ck-character-grid .ck-character-grid__tiles{margin:var(--ck-spacing-standard) var(--ck-spacing-large);grid-gap:var(--ck-spacing-standard)}.ck.ck-character-grid .ck-character-grid__tile{width:var(--ck-character-grid-tile-size);height:var(--ck-character-grid-tile-size);min-width:var(--ck-character-grid-tile-size);min-height:var(--ck-character-grid-tile-size);font-size:1.2em;padding:0;transition:box-shadow .2s ease;border:0}.ck.ck-character-grid .ck-character-grid__tile:focus:not(.ck-disabled),.ck.ck-character-grid .ck-character-grid__tile:hover:not(.ck-disabled){border:0;box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-character-grid .ck-character-grid__tile .ck-button__label{line-height:var(--ck-character-grid-tile-size);width:100%;text-align:center}\"},function(e,t,i){var n=i(1);var o=i(119);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-character-info{display:flex;justify-content:space-between;padding:var(--ck-spacing-small) var(--ck-spacing-large);border-top:1px solid var(--ck-color-base-border)}.ck.ck-character-info>*{text-transform:uppercase;font-size:var(--ck-font-size-small)}.ck.ck-character-info .ck-character-info__name{max-width:280px;text-overflow:ellipsis;overflow:hidden}.ck.ck-character-info .ck-character-info__code{opacity:.6}\"},function(e,t,i){var n=i(1);var o=i(121);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-special-characters-navigation>.ck-label{max-width:160px;text-overflow:ellipsis;overflow:hidden}.ck.ck-special-characters-navigation>.ck-dropdown .ck-dropdown__panel{max-height:250px;overflow-y:auto;overflow-x:hidden}\"},function(e,t,i){var n=i(1);var o=i(123);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\":root{--ck-color-table-focused-cell-background:rgba(158,207,250,0.3)}.ck-widget.table td.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table td.ck-editor__nested-editable:focus,.ck-widget.table th.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table th.ck-editor__nested-editable:focus{background:var(--ck-color-table-focused-cell-background);border-style:none;outline:1px solid var(--ck-color-focus-border);outline-offset:-1px}\"},function(e,t,i){var n=i(1);var o=i(125);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck .ck-insert-table-dropdown__grid{display:flex;flex-direction:row;flex-wrap:wrap}:root{--ck-insert-table-dropdown-padding:10px;--ck-insert-table-dropdown-box-height:11px;--ck-insert-table-dropdown-box-width:12px;--ck-insert-table-dropdown-box-margin:1px}.ck .ck-insert-table-dropdown__grid{width:calc(var(--ck-insert-table-dropdown-box-width)*10 + var(--ck-insert-table-dropdown-box-margin)*20 + var(--ck-insert-table-dropdown-padding)*2);padding:var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0}.ck .ck-insert-table-dropdown__label{text-align:center}.ck .ck-insert-table-dropdown-grid-box{width:var(--ck-insert-table-dropdown-box-width);height:var(--ck-insert-table-dropdown-box-height);margin:var(--ck-insert-table-dropdown-box-margin);border:1px solid var(--ck-color-base-border);border-radius:1px}.ck .ck-insert-table-dropdown-grid-box.ck-on{border-color:var(--ck-color-focus-border);background:var(--ck-color-focus-outer-shadow)}\"},function(e,t,i){var n=i(1);var o=i(127);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=':root{--ck-table-selected-cell-background:rgba(158,207,250,0.3)}.ck.ck-editor__editable .table table td.ck-editor__editable_selected,.ck.ck-editor__editable .table table th.ck-editor__editable_selected{position:relative;caret-color:transparent;outline:unset;box-shadow:unset}.ck.ck-editor__editable .table table td.ck-editor__editable_selected:after,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:after{content:\"\";pointer-events:none;background-color:var(--ck-table-selected-cell-background);position:absolute;top:0;left:0;right:0;bottom:0}.ck.ck-editor__editable .table table td.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table td.ck-editor__editable_selected:focus,.ck.ck-editor__editable .table table th.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:focus{background-color:transparent}.ck.ck-editor__editable .table table td.ck-editor__editable_selected .ck-widget_selected,.ck.ck-editor__editable .table table th.ck-editor__editable_selected .ck-widget_selected{outline:unset}'},function(e,t,i){var n=i(1);var o=i(129);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck-content .table{margin:1em auto;display:table}.ck-content .table table{border-collapse:collapse;border-spacing:0;width:100%;height:100%;border:1px double #b3b3b3}.ck-content .table table td,.ck-content .table table th{min-width:2em;padding:.4em;border:1px solid #bfbfbf}.ck-content .table table th{font-weight:700;background:hsla(0,0%,0%,5%)}.ck-content[dir=rtl] .table th{text-align:right}.ck-content[dir=ltr] .table th{text-align:left}\"},function(e,t,i){var n=i(1);var o=i(131);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-input-color{width:100%;display:flex}.ck.ck-input-color>input.ck.ck-input-text{min-width:auto;flex-grow:1}.ck.ck-input-color>input.ck.ck-input-text:active,.ck.ck-input-color>input.ck.ck-input-text:focus{z-index:var(--ck-z-default)}.ck.ck-input-color>div.ck.ck-dropdown{min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown>.ck-input-color__button .ck-dropdown__arrow{display:none}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview{position:relative;overflow:hidden}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{position:absolute;display:block}[dir=ltr] .ck.ck-input-color>.ck.ck-input-text{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .ck.ck-input-color>.ck.ck-input-text{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{padding:0}[dir=ltr] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}[dir=rtl] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-1px}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button.ck-disabled{background:var(--ck-color-input-disabled-background)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview{border-radius:0}.ck-rounded-corners .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview,.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview{width:20px;height:20px;border:1px solid var(--ck-color-input-border)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{top:-30%;left:50%;height:150%;width:8%;background:red;border-radius:2px;transform:rotate(45deg);transform-origin:50%}.ck.ck-input-color .ck.ck-input-color__remove-color{width:100%;border-bottom:1px solid var(--ck-color-input-border);padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);border-bottom-left-radius:0;border-bottom-right-radius:0}[dir=ltr] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-right-radius:0}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:0;margin-left:var(--ck-spacing-standard)}\"},function(e,t,i){var n=i(1);var o=i(133);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-form__row{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.ck.ck-form__row>:not(.ck-label){flex-grow:1}.ck.ck-form__row.ck-table-form__action-row .ck-button-cancel,.ck.ck-form__row.ck-table-form__action-row .ck-button-save{justify-content:center}.ck.ck-form__row{padding:var(--ck-spacing-standard) var(--ck-spacing-large) 0}[dir=ltr] .ck.ck-form__row>:not(.ck-label)+*{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-form__row>:not(.ck-label)+*{margin-right:var(--ck-spacing-large)}.ck.ck-form__row>.ck-label{width:100%;min-width:100%}.ck.ck-form__row.ck-table-form__action-row{margin-top:var(--ck-spacing-large)}.ck.ck-form__row.ck-table-form__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}\"},function(e,t){e.exports=\".ck.ck-form{padding:0 0 var(--ck-spacing-large)}.ck.ck-form:focus{outline:none}.ck.ck-form .ck.ck-input-text{min-width:100%;width:0}.ck.ck-form .ck.ck-dropdown{min-width:100%}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button .ck-button__label{width:100%}\"},function(e,t){e.exports='.ck.ck-table-form .ck-form__row.ck-table-form__border-row{flex-wrap:wrap}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view{display:flex;flex-direction:column-reverse}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view .ck.ck-dropdown,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{flex-grow:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{flex-wrap:wrap;align-items:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view{display:flex;flex-direction:column-reverse;align-items:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view .ck.ck-dropdown,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{flex-grow:0}.ck.ck-table-form .ck.ck-labeled-field-view{position:relative}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{position:absolute;left:50%;bottom:calc(-1*var(--ck-table-properties-error-arrow-size));transform:translate(-50%,100%);z-index:1}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{content:\"\";position:absolute;top:calc(-1*var(--ck-table-properties-error-arrow-size));left:50%;transform:translateX(-50%)}:root{--ck-table-properties-error-arrow-size:6px;--ck-table-properties-min-error-width:150px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style{width:80px;min-width:80px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{width:50px;min-width:50px}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{padding:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view>.ck-label{font-size:10px;text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width{margin:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{align-self:start;display:inline-block;height:var(--ck-ui-component-min-height);line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{border-radius:0}.ck-rounded-corners .ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status,.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{background:var(--ck-color-base-error);color:var(--ck-color-base-background);padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-width:var(--ck-table-properties-min-error-width);text-align:center}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-left:var(--ck-table-properties-error-arrow-size) solid transparent;border-bottom:var(--ck-table-properties-error-arrow-size) solid var(--ck-color-base-error);border-right:var(--ck-table-properties-error-arrow-size) solid transparent;border-top:0 solid transparent}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:ck-table-form-labeled-view-status-appear .15s ease both}.ck.ck-table-form .ck.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}@keyframes ck-table-form-labeled-view-status-appear{0%{opacity:0}to{opacity:1}}'},function(e,t,i){var n=i(1);var o=i(137);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row{flex-wrap:wrap}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{flex-grow:0}.ck.ck-table-cell-properties-form{width:320px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__padding-row{padding:0;width:35%}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{background:none}\"},function(e,t,i){var n=i(1);var o=i(139);o=o.__esModule?o.default:o;if(typeof o===\"string\"){o=[[e.i,o,\"\"]]}var r={injectType:\"singletonStyleTag\",attributes:{\"data-cke\":true}};r.insert=\"head\";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=\".ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{flex-wrap:wrap;flex-basis:0;align-content:baseline}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items{flex-wrap:nowrap}.ck.ck-table-properties-form{width:320px}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{padding:0}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar{background:none}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items>*{width:40px}\"},function(e,t,i){\"use strict\";i.r(t);var n=i(3);var o=n[\"a\"].Symbol;var r=o;var s=Object.prototype;var a=s.hasOwnProperty;var l=s.toString;var c=r?r.toStringTag:undefined;function d(e){var t=a.call(e,c),i=e[c];try{e[c]=undefined;var n=true}catch(e){}var o=l.call(e);if(n){if(t){e[c]=i}else{delete e[c]}}return o}var u=d;var h=Object.prototype;var f=h.toString;function m(e){return f.call(e)}var g=m;var p=\"[object Null]\",b=\"[object Undefined]\";var w=r?r.toStringTag:undefined;function _(e){if(e==null){return e===undefined?b:p}return w&&w in Object(e)?u(e):g(e)}var k=_;function v(e,t){return function(i){return e(t(i))}}var y=v;var x=y(Object.getPrototypeOf,Object);var A=x;function C(e){return e!=null&&typeof e==\"object\"}var T=C;var E=\"[object Object]\";var P=Function.prototype,M=Object.prototype;var S=P.toString;var I=M.hasOwnProperty;var L=S.call(Object);function N(e){if(!T(e)||k(e)!=E){return false}var t=A(e);if(t===null){return true}var i=I.call(t,\"constructor\")&&t.constructor;return typeof i==\"function\"&&i instanceof i&&S.call(i)==L}var O=N;function R(){this.__data__=[];this.size=0}var z=R;function D(e,t){return e===t||e!==e&&t!==t}var j=D;function B(e,t){var i=e.length;while(i--){if(j(e[i][0],t)){return i}}return-1}var V=B;var F=Array.prototype;var H=F.splice;function W(e){var t=this.__data__,i=V(t,e);if(i<0){return false}var n=t.length-1;if(i==n){t.pop()}else{H.call(t,i,1)}--this.size;return true}var U=W;function q(e){var t=this.__data__,i=V(t,e);return i<0?undefined:t[i][1]}var $=q;function G(e){return V(this.__data__,e)>-1}var Y=G;function K(e,t){var i=this.__data__,n=V(i,e);if(n<0){++this.size;i.push([e,t])}else{i[n][1]=t}return this}var J=K;function Q(e){var t=-1,i=e==null?0:e.length;this.clear();while(++t-1&&e%1==0&&e-1&&e%1==0&&e<=ti}var ni=ii;var oi=\"[object Arguments]\",ri=\"[object Array]\",si=\"[object Boolean]\",ai=\"[object Date]\",li=\"[object Error]\",ci=\"[object Function]\",di=\"[object Map]\",ui=\"[object Number]\",hi=\"[object Object]\",fi=\"[object RegExp]\",mi=\"[object Set]\",gi=\"[object String]\",pi=\"[object WeakMap]\";var bi=\"[object ArrayBuffer]\",wi=\"[object DataView]\",_i=\"[object Float32Array]\",ki=\"[object Float64Array]\",vi=\"[object Int8Array]\",yi=\"[object Int16Array]\",xi=\"[object Int32Array]\",Ai=\"[object Uint8Array]\",Ci=\"[object Uint8ClampedArray]\",Ti=\"[object Uint16Array]\",Ei=\"[object Uint32Array]\";var Pi={};Pi[_i]=Pi[ki]=Pi[vi]=Pi[yi]=Pi[xi]=Pi[Ai]=Pi[Ci]=Pi[Ti]=Pi[Ei]=true;Pi[oi]=Pi[ri]=Pi[bi]=Pi[si]=Pi[wi]=Pi[ai]=Pi[li]=Pi[ci]=Pi[di]=Pi[ui]=Pi[hi]=Pi[fi]=Pi[mi]=Pi[gi]=Pi[pi]=false;function Mi(e){return T(e)&&ni(e.length)&&!!Pi[k(e)]}var Si=Mi;function Ii(e){return function(t){return e(t)}}var Li=Ii;var Ni=i(5);var Oi=Ni[\"a\"]&&Ni[\"a\"].isTypedArray;var Ri=Oi?Li(Oi):Si;var zi=Ri;var Di=Object.prototype;var ji=Di.hasOwnProperty;function Bi(e,t){var i=Kt(e),n=!i&&Gt(e),o=!i&&!n&&Object(Jt[\"a\"])(e),r=!i&&!n&&!o&&zi(e),s=i||n||o||r,a=s?Bt(e.length,String):[],l=a.length;for(var c in e){if((t||ji.call(e,c))&&!(s&&(c==\"length\"||o&&(c==\"offset\"||c==\"parent\")||r&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||ei(c,l)))){a.push(c)}}return a}var Vi=Bi;var Fi=Object.prototype;function Hi(e){var t=e&&e.constructor,i=typeof t==\"function\"&&t.prototype||Fi;return e===i}var Wi=Hi;var Ui=y(Object.keys,Object);var qi=Ui;var $i=Object.prototype;var Gi=$i.hasOwnProperty;function Yi(e){if(!Wi(e)){return qi(e)}var t=[];for(var i in Object(e)){if(Gi.call(e,i)&&i!=\"constructor\"){t.push(i)}}return t}var Ki=Yi;function Ji(e){return e!=null&&ni(e.length)&&!me(e)}var Qi=Ji;function Zi(e){return Qi(e)?Vi(e):Ki(e)}var Xi=Zi;function en(e,t){return e&&Dt(t,Xi(t),e)}var tn=en;function nn(e){var t=[];if(e!=null){for(var i in Object(e)){t.push(i)}}return t}var on=nn;var rn=Object.prototype;var sn=rn.hasOwnProperty;function an(e){if(!le(e)){return on(e)}var t=Wi(e),i=[];for(var n in e){if(!(n==\"constructor\"&&(t||!sn.call(e,n)))){i.push(n)}}return i}var ln=an;function cn(e){return Qi(e)?Vi(e,true):ln(e)}var dn=cn;function un(e,t){return e&&Dt(t,dn(t),e)}var hn=un;var fn=i(8);function mn(e,t){var i=-1,n=e.length;t||(t=Array(n));while(++i{this._setToTarget(e,n,t[n],i)})}}function Jr(e){return $r(e,Qr)}function Qr(e){return Yr(e)?e:undefined}function Zr(){return function e(){e.called=true}}var Xr=Zr;class es{constructor(e,t){this.source=e;this.name=t;this.path=[];this.stop=Xr();this.off=Xr()}}const ts=new Array(256).fill().map((e,t)=>(\"0\"+t.toString(16)).slice(-2));function is(){const e=Math.random()*4294967296>>>0;const t=Math.random()*4294967296>>>0;const i=Math.random()*4294967296>>>0;const n=Math.random()*4294967296>>>0;return\"e\"+ts[e>>0&255]+ts[e>>8&255]+ts[e>>16&255]+ts[e>>24&255]+ts[t>>0&255]+ts[t>>8&255]+ts[t>>16&255]+ts[t>>24&255]+ts[i>>0&255]+ts[i>>8&255]+ts[i>>16&255]+ts[i>>24&255]+ts[n>>0&255]+ts[n>>8&255]+ts[n>>16&255]+ts[n>>24&255]}const ns={get(e){if(typeof e!=\"number\"){return this[e]||this.normal}else{return e}},highest:1e5,high:1e3,normal:0,low:-1e3,lowest:-1e5};var os=ns;var rs=i(6);var ss=i(0);const as=Symbol(\"listeningTo\");const ls=Symbol(\"emitterId\");const cs={on(e,t,i={}){this.listenTo(this,e,t,i)},once(e,t,i){let n=false;const o=function(e,...i){if(!n){n=true;e.off();t.call(this,e,...i)}};this.listenTo(this,e,o,i)},off(e,t){this.stopListening(this,e,t)},listenTo(e,t,i,n={}){let o,r;if(!this[as]){this[as]={}}const s=this[as];if(!fs(e)){hs(e)}const a=fs(e);if(!(o=s[a])){o=s[a]={emitter:e,callbacks:{}}}if(!(r=o.callbacks[t])){r=o.callbacks[t]=[]}r.push(i);ps(e,t);const l=bs(e,t);const c=os.get(n.priority);const d={callback:i,priority:c};for(const e of l){let t=false;for(let i=0;i{if(!this._delegations){this._delegations=new Map}e.forEach(e=>{const n=this._delegations.get(e);if(!n){this._delegations.set(e,new Map([[t,i]]))}else{n.set(t,i)}})}}},stopDelegating(e,t){if(!this._delegations){return}if(!e){this._delegations.clear()}else if(!t){this._delegations.delete(e)}else{const i=this._delegations.get(e);if(i){i.delete(t)}}}};var ds=cs;function us(e,t){if(e[as]&&e[as][t]){return e[as][t].emitter}return null}function hs(e,t){if(!e[ls]){e[ls]=t||is()}}function fs(e){return e[ls]}function ms(e){if(!e._events){Object.defineProperty(e,\"_events\",{value:{}})}return e._events}function gs(){return{callbacks:[],childEvents:[]}}function ps(e,t){const i=ms(e);if(i[t]){return}let n=t;let o=null;const r=[];while(n!==\"\"){if(i[n]){break}i[n]=gs();r.push(i[n]);if(o){i[n].childEvents.push(o)}o=n;n=n.substr(0,n.lastIndexOf(\":\"))}if(n!==\"\"){for(const e of r){e.callbacks=i[n].callbacks.slice()}i[n].childEvents.push(o)}}function bs(e,t){const i=ms(e)[t];if(!i){return[]}let n=[i.callbacks];for(let t=0;t-1){return ws(e,t.substr(0,t.lastIndexOf(\":\")))}else{return null}}return i.callbacks}function _s(e,t,i){for(let[n,o]of e){if(!o){o=t.name}else if(typeof o==\"function\"){o=o(t.name)}const e=new es(t.source,o);e.path=[...t.path];n.fire(e,...i)}}function ks(e,t,i){const n=bs(e,t);for(const e of n){for(let t=0;t{Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t)).forEach(i=>{if(i in e.prototype){return}const n=Object.getOwnPropertyDescriptor(t,i);n.enumerable=false;Object.defineProperty(e.prototype,i,n)})})}class xs{constructor(e={},t={}){const i=vs(e);if(!i){t=e}this._items=[];this._itemMap=new Map;this._idProperty=t.idProperty||\"id\";this._bindToExternalToInternalMap=new WeakMap;this._bindToInternalToExternalMap=new WeakMap;this._skippedIndexesFromExternal=[];if(i){for(const t of e){this._items.push(t);this._itemMap.set(this._getItemIdBeforeAdding(t),t)}}}get length(){return this._items.length}get first(){return this._items[0]||null}get last(){return this._items[this.length-1]||null}add(e,t){const i=this._getItemIdBeforeAdding(e);if(t===undefined){t=this._items.length}else if(t>this._items.length||t<0){throw new ss[\"b\"](\"collection-add-item-invalid-index\",this)}this._items.splice(t,0,e);this._itemMap.set(i,e);this.fire(\"add\",e,t);return this}get(e){let t;if(typeof e==\"string\"){t=this._itemMap.get(e)}else if(typeof e==\"number\"){t=this._items[e]}else{throw new ss[\"b\"](\"collection-get-invalid-arg: Index or id must be given.\",this)}return t||null}has(e){if(typeof e==\"string\"){return this._itemMap.has(e)}else{const t=this._idProperty;const i=e[t];return this._itemMap.has(i)}}getIndex(e){let t;if(typeof e==\"string\"){t=this._itemMap.get(e)}else{t=e}return this._items.indexOf(t)}remove(e){let t,i,n;let o=false;const r=this._idProperty;if(typeof e==\"string\"){i=e;n=this._itemMap.get(i);o=!n;if(n){t=this._items.indexOf(n)}}else if(typeof e==\"number\"){t=e;n=this._items[t];o=!n;if(n){i=n[r]}}else{n=e;i=n[r];t=this._items.indexOf(n);o=t==-1||!this._itemMap.get(i)}if(o){throw new ss[\"b\"](\"collection-remove-404: Item not found.\",this)}this._items.splice(t,1);this._itemMap.delete(i);const s=this._bindToInternalToExternalMap.get(n);this._bindToInternalToExternalMap.delete(n);this._bindToExternalToInternalMap.delete(s);this.fire(\"remove\",n,t);return n}map(e,t){return this._items.map(e,t)}find(e,t){return this._items.find(e,t)}filter(e,t){return this._items.filter(e,t)}clear(){if(this._bindToCollection){this.stopListening(this._bindToCollection);this._bindToCollection=null}while(this.length){this.remove(0)}}bindTo(e){if(this._bindToCollection){throw new ss[\"b\"](\"collection-bind-to-rebind: The collection cannot be bound more than once.\",this)}this._bindToCollection=e;return{as:e=>{this._setUpBindToBinding(t=>new e(t))},using:e=>{if(typeof e==\"function\"){this._setUpBindToBinding(t=>e(t))}else{this._setUpBindToBinding(t=>t[e])}}}}_setUpBindToBinding(e){const t=this._bindToCollection;const i=(i,n,o)=>{const r=t._bindToCollection==this;const s=t._bindToInternalToExternalMap.get(n);if(r&&s){this._bindToExternalToInternalMap.set(n,s);this._bindToInternalToExternalMap.set(s,n)}else{const i=e(n);if(!i){this._skippedIndexesFromExternal.push(o);return}let r=o;for(const e of this._skippedIndexesFromExternal){if(o>e){r--}}for(const e of t._skippedIndexesFromExternal){if(r>=e){r++}}this._bindToExternalToInternalMap.set(n,i);this._bindToInternalToExternalMap.set(i,n);this.add(i,r);for(let e=0;e{const n=this._bindToExternalToInternalMap.get(t);if(n){this.remove(n)}this._skippedIndexesFromExternal=this._skippedIndexesFromExternal.reduce((e,t)=>{if(it){e.push(t)}return e},[])})}_getItemIdBeforeAdding(e){const t=this._idProperty;let i;if(t in e){i=e[t];if(typeof i!=\"string\"){throw new ss[\"b\"](\"collection-add-invalid-id\",this)}if(this.get(i)){throw new ss[\"b\"](\"collection-add-item-already-exists\",this)}}else{e[t]=i=is()}return i}[Symbol.iterator](){return this._items[Symbol.iterator]()}}ys(xs,ds);class As{constructor(e,t=[],i=[]){this._context=e;this._plugins=new Map;this._availablePlugins=new Map;for(const e of t){if(e.pluginName){this._availablePlugins.set(e.pluginName,e)}}this._contextPlugins=new Map;for(const[e,t]of i){this._contextPlugins.set(e,t);this._contextPlugins.set(t,e);if(e.pluginName){this._availablePlugins.set(e.pluginName,e)}}}*[Symbol.iterator](){for(const e of this._plugins){if(typeof e[0]==\"function\"){yield e}}}get(e){const t=this._plugins.get(e);if(!t){const t=\"plugincollection-plugin-not-loaded: The requested plugin is not loaded.\";let i=e;if(typeof e==\"function\"){i=e.pluginName||e.name}throw new ss[\"b\"](t,this._context,{plugin:i})}return t}has(e){return this._plugins.has(e)}init(e,t=[]){const i=this;const n=this._context;const o=new Set;const r=[];const s=m(e);const a=m(t);const l=f(e);if(l){const e=\"plugincollection-plugin-not-found: Some plugins are not available and could not be loaded.\";console.error(Object(ss[\"a\"])(e),{plugins:l});return Promise.reject(new ss[\"b\"](e,n,{plugins:l}))}return Promise.all(s.map(c)).then(()=>d(r,\"init\")).then(()=>d(r,\"afterInit\")).then(()=>r);function c(e){if(a.includes(e)){return}if(i._plugins.has(e)||o.has(e)){return}return u(e).catch(t=>{console.error(Object(ss[\"a\"])(\"plugincollection-load: It was not possible to load the plugin.\"),{plugin:e});throw t})}function d(e,t){return e.reduce((e,n)=>{if(!n[t]){return e}if(i._contextPlugins.has(n)){return e}return e.then(n[t].bind(n))},Promise.resolve())}function u(e){return new Promise(s=>{o.add(e);if(e.requires){e.requires.forEach(i=>{const o=h(i);if(e.isContextPlugin&&!o.isContextPlugin){throw new ss[\"b\"](\"plugincollection-context-required: Context plugin can not require plugin which is not a context plugin\",null,{plugin:o.name,requiredBy:e.name})}if(t.includes(o)){throw new ss[\"b\"](\"plugincollection-required: Cannot load a plugin because one of its dependencies is listed in\"+\"the `removePlugins` option.\",n,{plugin:o.name,requiredBy:e.name})}c(o)})}const a=i._contextPlugins.get(e)||new e(n);i._add(e,a);r.push(a);s()})}function h(e){if(typeof e==\"function\"){return e}return i._availablePlugins.get(e)}function f(e){const t=[];for(const i of e){if(!h(i)){t.push(i)}}return t.length?t:null}function m(e){return e.map(e=>h(e)).filter(e=>!!e)}}destroy(){const e=[];for(const[,t]of this){if(typeof t.destroy==\"function\"&&!this._contextPlugins.has(t)){e.push(t.destroy())}}return Promise.all(e)}_add(e,t){this._plugins.set(e,t);const i=e.pluginName;if(!i){return}if(this._plugins.has(i)){throw new ss[\"b\"](\"plugincollection-plugin-name-conflict: Two plugins with the same name were loaded.\",null,{pluginName:i,plugin1:this._plugins.get(i).constructor,plugin2:e})}this._plugins.set(i,t)}}ys(As,ds);if(!window.CKEDITOR_TRANSLATIONS){window.CKEDITOR_TRANSLATIONS={}}function Cs(e,t,i){if(!window.CKEDITOR_TRANSLATIONS[e]){window.CKEDITOR_TRANSLATIONS[e]={}}const n=window.CKEDITOR_TRANSLATIONS[e];n.dictionary=n.dictionary||{};n.getPluralForm=i||n.getPluralForm;Object.assign(n.dictionary,t)}function Ts(e,t,i=1){if(typeof i!==\"number\"){throw new ss[\"b\"](\"translation-service-quantity-not-a-number: Expecting `quantity` to be a number.\",null,{quantity:i})}const n=Ms();if(n===1){e=Object.keys(window.CKEDITOR_TRANSLATIONS)[0]}const o=t.id||t.string;if(n===0||!Ps(e,o)){if(i!==1){return t.plural}return t.string}const r=window.CKEDITOR_TRANSLATIONS[e].dictionary;const s=window.CKEDITOR_TRANSLATIONS[e].getPluralForm||(e=>e===1?0:1);if(typeof r[o]===\"string\"){return r[o]}const a=Number(s(i));return r[o][a]}function Es(){window.CKEDITOR_TRANSLATIONS={}}function Ps(e,t){return!!window.CKEDITOR_TRANSLATIONS[e]&&!!window.CKEDITOR_TRANSLATIONS[e].dictionary[t]}function Ms(){return Object.keys(window.CKEDITOR_TRANSLATIONS).length}const Ss=[\"ar\",\"fa\",\"he\",\"ku\",\"ug\"];class Is{constructor(e={}){this.uiLanguage=e.uiLanguage||\"en\";this.contentLanguage=e.contentLanguage||this.uiLanguage;this.uiLanguageDirection=Ns(this.uiLanguage);this.contentLanguageDirection=Ns(this.contentLanguage);this.t=(e,t)=>this._t(e,t)}get language(){console.warn(\"locale-deprecated-language-property: \"+\"The Locale#language property has been deprecated and will be removed in the near future. \"+\"Please use #uiLanguage and #contentLanguage properties instead.\");return this.uiLanguage}_t(e,t=[]){if(!Array.isArray(t)){t=[t]}if(typeof e===\"string\"){e={string:e}}const i=!!e.plural;const n=i?t[0]:1;const o=Ts(this.uiLanguage,e,n);return Ls(o,t)}}function Ls(e,t){return e.replace(/%(\\d+)/g,(e,i)=>ie.destroy())).then(()=>this.plugins.destroy())}_addEditor(e,t){if(this._contextOwner){throw new ss[\"b\"](\"context-addEditor-private-context: Cannot add multiple editors to the context which is created by the editor.\")}this.editors.add(e);if(t){this._contextOwner=e}}_removeEditor(e){if(this.editors.has(e)){this.editors.remove(e)}if(this._contextOwner===e){return this.destroy()}return Promise.resolve()}_getEditorConfig(){const e={};for(const t of this.config.names()){if(![\"plugins\",\"removePlugins\",\"extraPlugins\"].includes(t)){e[t]=this.config.get(t)}}return e}static create(e){return new Promise(t=>{const i=new this(e);t(i.initPlugins().then(()=>i))})}}function Rs(e,t){const i=Math.min(e.length,t.length);for(let n=0;ne.data.length){throw new ss[\"b\"](\"view-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.\",this)}if(i<0||t+i>e.data.length){throw new ss[\"b\"](\"view-textproxy-wrong-length: Given length value is incorrect.\",this)}this.data=e.data.substring(t,t+i);this.offsetInText=t}get offsetSize(){return this.data.length}get isPartial(){return this.data.length!==this.textNode.data.length}get parent(){return this.textNode.parent}get root(){return this.textNode.root}get document(){return this.textNode.document}is(e){return e===\"textProxy\"||e===\"view:textProxy\"}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let i=e.includeSelf?this.textNode:this.parent;while(i!==null){t[e.parentFirst?\"push\":\"unshift\"](i);i=i.parent}return t}}function Hs(e){const t=new Map;for(const i in e){t.set(i,e[i])}return t}function Ws(e){if(vs(e)){return new Map(e)}else{return Hs(e)}}class Us{constructor(...e){this._patterns=[];this.add(...e)}add(...e){for(let t of e){if(typeof t==\"string\"||t instanceof RegExp){t={name:t}}if(t.classes&&(typeof t.classes==\"string\"||t.classes instanceof RegExp)){t.classes=[t.classes]}this._patterns.push(t)}}match(...e){for(const t of e){for(const e of this._patterns){const i=qs(t,e);if(i){return{element:t,pattern:e,match:i}}}}return null}matchAll(...e){const t=[];for(const i of e){for(const e of this._patterns){const n=qs(i,e);if(n){t.push({element:i,pattern:e,match:n})}}}return t.length>0?t:null}getElementName(){if(this._patterns.length!==1){return null}const e=this._patterns[0];const t=e.name;return typeof e!=\"function\"&&t&&!(t instanceof RegExp)?t:null}}function qs(e,t){if(typeof t==\"function\"){return t(e)}const i={};if(t.name){i.name=$s(t.name,e.name);if(!i.name){return null}}if(t.attributes){i.attributes=Gs(t.attributes,e);if(!i.attributes){return null}}if(t.classes){i.classes=Ys(t.classes,e);if(!i.classes){return false}}if(t.styles){i.styles=Ks(t.styles,e);if(!i.styles){return false}}return i}function $s(e,t){if(e instanceof RegExp){return e.test(t)}return e===t}function Gs(e,t){const i=[];for(const n in e){const o=e[n];if(t.hasAttribute(n)){const e=t.getAttribute(n);if(o===true){i.push(n)}else if(o instanceof RegExp){if(o.test(e)){i.push(n)}else{return null}}else if(e===o){i.push(n)}else{return null}}else{return null}}return i}function Ys(e,t){const i=[];for(const n of e){if(n instanceof RegExp){const e=t.getClassNames();for(const t of e){if(n.test(t)){i.push(t)}}if(i.length===0){return null}}else if(t.hasClass(n)){i.push(n)}else{return null}}return i}function Ks(e,t){const i=[];for(const n in e){const o=e[n];if(t.hasStyle(n)){const e=t.getStyle(n);if(o instanceof RegExp){if(o.test(e)){i.push(n)}else{return null}}else if(e===o){i.push(n)}else{return null}}else{return null}}return i}var Js=\"[object Symbol]\";function Qs(e){return typeof e==\"symbol\"||T(e)&&k(e)==Js}var Zs=Qs;var Xs=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,ea=/^\\w*$/;function ta(e,t){if(Kt(e)){return false}var i=typeof e;if(i==\"number\"||i==\"symbol\"||i==\"boolean\"||e==null||Zs(e)){return true}return ea.test(e)||!Xs.test(e)||t!=null&&e in Object(t)}var ia=ta;var na=\"Expected a function\";function oa(e,t){if(typeof e!=\"function\"||t!=null&&typeof t!=\"function\"){throw new TypeError(na)}var i=function(){var n=arguments,o=t?t.apply(this,n):n[0],r=i.cache;if(r.has(o)){return r.get(o)}var s=e.apply(this,n);i.cache=r.set(o,s)||r;return s};i.cache=new(oa.Cache||kt);return i}oa.Cache=kt;var ra=oa;var sa=500;function aa(e){var t=ra(e,(function(e){if(i.size===sa){i.clear()}return e}));var i=t.cache;return t}var la=aa;var ca=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;var da=/\\\\(\\\\)?/g;var ua=la((function(e){var t=[];if(e.charCodeAt(0)===46){t.push(\"\")}e.replace(ca,(function(e,i,n,o){t.push(n?o.replace(da,\"$1\"):i||e)}));return t}));var ha=ua;function fa(e,t){var i=-1,n=e==null?0:e.length,o=Array(n);while(++io?0:o+t}i=i>o?o:i;if(i<0){i+=o}o=t>i?0:i-t>>>0;t>>>=0;var r=Array(o);while(++n0){if(++t>=ml){return arguments[0]}}else{t=0}return e.apply(undefined,arguments)}}var wl=bl;var _l=wl(fl);var kl=_l;function vl(e,t){return kl(cl(e,t,ol),e+\"\")}var yl=vl;function xl(e,t,i){if(!le(i)){return false}var n=typeof t;if(n==\"number\"?Qi(i)&&ei(t,i.length):n==\"string\"&&t in i){return j(i[t],e)}return false}var Al=xl;function Cl(e){return yl((function(t,i){var n=-1,o=i.length,r=o>1?i[o-1]:undefined,s=o>2?i[2]:undefined;r=e.length>3&&typeof r==\"function\"?(o--,r):undefined;if(s&&Al(i[0],i[1],s)){r=o<3?undefined:r;o=1}t=Object(t);while(++nt===e);return Array.isArray(i)}set(e,t){if(le(e)){for(const[t,i]of Object.entries(e)){this._styleProcessor.toNormalizedForm(t,i,this._styles)}}else{this._styleProcessor.toNormalizedForm(e,t,this._styles)}}remove(e){const t=zl(e);ja(this._styles,t);delete this._styles[e];this._cleanEmptyObjectsOnPath(t)}getNormalized(e){return this._styleProcessor.getNormalized(e,this._styles)}toString(){if(this.isEmpty){return\"\"}return this._getStylesEntries().map(e=>e.join(\":\")).sort().join(\";\")+\";\"}getAsString(e){if(this.isEmpty){return}if(this._styles[e]&&!le(this._styles[e])){return this._styles[e]}const t=this._styleProcessor.getReducedForm(e,this._styles);const i=t.find(([t])=>t===e);if(Array.isArray(i)){return i[1]}}getStyleNames(){if(this.isEmpty){return[]}const e=this._getStylesEntries();return e.map(([e])=>e)}clear(){this._styles={}}_getStylesEntries(){const e=[];const t=Object.keys(this._styles);for(const i of t){e.push(...this._styleProcessor.getReducedForm(i,this._styles))}return e}_cleanEmptyObjectsOnPath(e){const t=e.split(\".\");const i=t.length>1;if(!i){return}const n=t.splice(0,t.length-1).join(\".\");const o=Va(this._styles,n);if(!o){return}const r=!Array.from(Object.keys(o)).length;if(r){this.remove(n)}}}class Ol{constructor(){this._normalizers=new Map;this._extractors=new Map;this._reducers=new Map;this._consumables=new Map}toNormalizedForm(e,t,i){if(le(t)){Dl(i,zl(e),t);return}if(this._normalizers.has(e)){const n=this._normalizers.get(e);const{path:o,value:r}=n(t);Dl(i,o,r)}else{Dl(i,e,t)}}getNormalized(e,t){if(!e){return Pl({},t)}if(t[e]!==undefined){return t[e]}if(this._extractors.has(e)){const i=this._extractors.get(e);if(typeof i===\"string\"){return Va(t,i)}const n=i(e,t);if(n){return n}}return Va(t,zl(e))}getReducedForm(e,t){const i=this.getNormalized(e,t);if(i===undefined){return[]}if(this._reducers.has(e)){const t=this._reducers.get(e);return t(i)}return[[e,i]]}getRelatedStyles(e){return this._consumables.get(e)||[]}setNormalizer(e,t){this._normalizers.set(e,t)}setExtractor(e,t){this._extractors.set(e,t)}setReducer(e,t){this._reducers.set(e,t)}setStyleRelation(e,t){this._mapStyleNames(e,t);for(const i of t){this._mapStyleNames(i,[e])}}_mapStyleNames(e,t){if(!this._consumables.has(e)){this._consumables.set(e,[])}this._consumables.get(e).push(...t)}}function Rl(e){let t=null;let i=0;let n=0;let o=null;const r=new Map;if(e===\"\"){return r}if(e.charAt(e.length-1)!=\";\"){e=e+\";\"}for(let s=0;s0){yield\"class\"}if(!this._styles.isEmpty){yield\"style\"}yield*this._attrs.keys()}*getAttributes(){yield*this._attrs.entries();if(this._classes.size>0){yield[\"class\",this.getAttribute(\"class\")]}if(!this._styles.isEmpty){yield[\"style\",this.getAttribute(\"style\")]}}getAttribute(e){if(e==\"class\"){if(this._classes.size>0){return[...this._classes].join(\" \")}return undefined}if(e==\"style\"){const e=this._styles.toString();return e==\"\"?undefined:e}return this._attrs.get(e)}hasAttribute(e){if(e==\"class\"){return this._classes.size>0}if(e==\"style\"){return!this._styles.isEmpty}return this._attrs.has(e)}isSimilar(e){if(!(e instanceof jl)){return false}if(this===e){return true}if(this.name!=e.name){return false}if(this._attrs.size!==e._attrs.size||this._classes.size!==e._classes.size||this._styles.size!==e._styles.size){return false}for(const[t,i]of this._attrs){if(!e._attrs.has(t)||e._attrs.get(t)!==i){return false}}for(const t of this._classes){if(!e._classes.has(t)){return false}}for(const t of this._styles.getStyleNames()){if(!e._styles.has(t)||e._styles.getAsString(t)!==this._styles.getAsString(t)){return false}}return true}hasClass(...e){for(const t of e){if(!this._classes.has(t)){return false}}return true}getClassNames(){return this._classes.keys()}getStyle(e){return this._styles.getAsString(e)}getNormalizedStyle(e){return this._styles.getNormalized(e)}getStyleNames(){return this._styles.getStyleNames()}hasStyle(...e){for(const t of e){if(!this._styles.has(t)){return false}}return true}findAncestor(...e){const t=new Us(...e);let i=this.parent;while(i){if(t.match(i)){return i}i=i.parent}return null}getCustomProperty(e){return this._customProperties.get(e)}*getCustomProperties(){yield*this._customProperties.entries()}getIdentity(){const e=Array.from(this._classes).sort().join(\",\");const t=this._styles.toString();const i=Array.from(this._attrs).map(e=>`${e[0]}=\"${e[1]}\"`).sort().join(\" \");return this.name+(e==\"\"?\"\":` class=\"${e}\"`)+(!t?\"\":` style=\"${t}\"`)+(i==\"\"?\"\":` ${i}`)}_clone(e=false){const t=[];if(e){for(const i of this.getChildren()){t.push(i._clone(e))}}const i=new this.constructor(this.document,this.name,this._attrs,t);i._classes=new Set(this._classes);i._styles.set(this._styles.getNormalized());i._customProperties=new Map(this._customProperties);i.getFillerOffset=this.getFillerOffset;return i}_appendChild(e){return this._insertChild(this.childCount,e)}_insertChild(e,t){this._fireChange(\"children\",this);let i=0;const n=Fl(this.document,t);for(const t of n){if(t.parent!==null){t._remove()}t.parent=this;t.document=this.document;this._children.splice(e,0,t);e++;i++}return i}_removeChildren(e,t=1){this._fireChange(\"children\",this);for(let i=e;i0){this._classes.clear();return true}return false}if(e==\"style\"){if(!this._styles.isEmpty){this._styles.clear();return true}return false}return this._attrs.delete(e)}_addClass(e){this._fireChange(\"attributes\",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._classes.add(e))}_removeClass(e){this._fireChange(\"attributes\",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._classes.delete(e))}_setStyle(e,t){this._fireChange(\"attributes\",this);this._styles.set(e,t)}_removeStyle(e){this._fireChange(\"attributes\",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._styles.remove(e))}_setCustomProperty(e,t){this._customProperties.set(e,t)}_removeCustomProperty(e){return this._customProperties.delete(e)}}function Bl(e){e=Ws(e);for(const[t,i]of e){if(i===null){e.delete(t)}else if(typeof i!=\"string\"){e.set(t,String(i))}}return e}function Vl(e,t){const i=t.split(/\\s+/);e.clear();i.forEach(t=>e.add(t))}function Fl(e,t){if(typeof t==\"string\"){return[new Vs(e,t)]}if(!vs(t)){t=[t]}return Array.from(t).map(t=>{if(typeof t==\"string\"){return new Vs(e,t)}if(t instanceof Fs){return new Vs(e,t.data)}return t})}class Hl extends jl{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=Wl}is(e,t=null){if(!t){return e===\"containerElement\"||e===\"view:containerElement\"||e===this.name||e===\"view:\"+this.name||e===\"element\"||e===\"view:element\"||e===\"node\"||e===\"view:node\"}else{return t===this.name&&(e===\"containerElement\"||e===\"view:containerElement\"||e===\"element\"||e===\"view:element\")}}}function Wl(){const e=[...this.getChildren()];const t=e[this.childCount-1];if(t&&t.is(\"element\",\"br\")){return this.childCount}for(const t of e){if(!t.is(\"uiElement\")){return null}}return this.childCount}var Ul=Tl((function(e,t){Dt(t,dn(t),e)}));var ql=Ul;const $l=Symbol(\"observableProperties\");const Gl=Symbol(\"boundObservables\");const Yl=Symbol(\"boundProperties\");const Kl={set(e,t){if(le(e)){Object.keys(e).forEach(t=>{this.set(t,e[t])},this);return}Ql(this);const i=this[$l];if(e in this&&!i.has(e)){throw new ss[\"b\"](\"observable-set-cannot-override: Cannot override an existing property.\",this)}Object.defineProperty(this,e,{enumerable:true,configurable:true,get(){return i.get(e)},set(t){const n=i.get(e);let o=this.fire(\"set:\"+e,e,t,n);if(o===undefined){o=t}if(n!==o||!i.has(e)){i.set(e,o);this.fire(\"change:\"+e,e,o,n)}}});this[e]=t},bind(...e){if(!e.length||!tc(e)){throw new ss[\"b\"](\"observable-bind-wrong-properties: All properties must be strings.\",this)}if(new Set(e).size!==e.length){throw new ss[\"b\"](\"observable-bind-duplicate-properties: Properties must be unique.\",this)}Ql(this);const t=this[Yl];e.forEach(e=>{if(t.has(e)){throw new ss[\"b\"](\"observable-bind-rebind: Cannot bind the same property more than once.\",this)}});const i=new Map;e.forEach(e=>{const n={property:e,to:[]};t.set(e,n);i.set(e,n)});return{to:Zl,toMany:Xl,_observable:this,_bindProperties:e,_to:[],_bindings:i}},unbind(...e){if(!this[$l]){return}const t=this[Yl];const i=this[Gl];if(e.length){if(!tc(e)){throw new ss[\"b\"](\"observable-unbind-wrong-properties: Properties must be strings.\",this)}e.forEach(e=>{const n=t.get(e);if(!n){return}let o,r,s,a;n.to.forEach(e=>{o=e[0];r=e[1];s=i.get(o);a=s[r];a.delete(n);if(!a.size){delete s[r]}if(!Object.keys(s).length){i.delete(o);this.stopListening(o,\"change\")}});t.delete(e)})}else{i.forEach((e,t)=>{this.stopListening(t,\"change\")});i.clear();t.clear()}},decorate(e){const t=this[e];if(!t){throw new ss[\"b\"](\"observablemixin-cannot-decorate-undefined: Cannot decorate an undefined method.\",this,{object:this,methodName:e})}this.on(e,(e,i)=>{e.return=t.apply(this,i)});this[e]=function(...t){return this.fire(e,t)}}};ql(Kl,ds);var Jl=Kl;function Ql(e){if(e[$l]){return}Object.defineProperty(e,$l,{value:new Map});Object.defineProperty(e,Gl,{value:new Map});Object.defineProperty(e,Yl,{value:new Map})}function Zl(...e){const t=ic(...e);const i=Array.from(this._bindings.keys());const n=i.length;if(!t.callback&&t.to.length>1){throw new ss[\"b\"](\"observable-bind-to-no-callback: Binding multiple observables only possible with callback.\",this)}if(n>1&&t.callback){throw new ss[\"b\"](\"observable-bind-to-extra-callback: Cannot bind multiple properties and use a callback in one binding.\",this)}t.to.forEach(e=>{if(e.properties.length&&e.properties.length!==n){throw new ss[\"b\"](\"observable-bind-to-properties-length: The number of properties must match.\",this)}if(!e.properties.length){e.properties=this._bindProperties}});this._to=t.to;if(t.callback){this._bindings.get(i[0]).callback=t.callback}sc(this._observable,this._to);oc(this);this._bindProperties.forEach(e=>{rc(this._observable,e)})}function Xl(e,t,i){if(this._bindings.size>1){throw new ss[\"b\"](\"observable-bind-to-many-not-one-binding: Cannot bind multiple properties with toMany().\",this)}this.to(...ec(e,t),i)}function ec(e,t){const i=e.map(e=>[e,t]);return Array.prototype.concat.apply([],i)}function tc(e){return e.every(e=>typeof e==\"string\")}function ic(...e){if(!e.length){throw new ss[\"b\"](\"observable-bind-to-parse-error: Invalid argument syntax in `to()`.\",null)}const t={to:[]};let i;if(typeof e[e.length-1]==\"function\"){t.callback=e.pop()}e.forEach(e=>{if(typeof e==\"string\"){i.properties.push(e)}else if(typeof e==\"object\"){i={observable:e,properties:[]};t.to.push(i)}else{throw new ss[\"b\"](\"observable-bind-to-parse-error: Invalid argument syntax in `to()`.\",null)}});return t}function nc(e,t,i,n){const o=e[Gl];const r=o.get(i);const s=r||{};if(!s[n]){s[n]=new Set}s[n].add(t);if(!r){o.set(i,s)}}function oc(e){let t;e._bindings.forEach((i,n)=>{e._to.forEach(o=>{t=o.properties[i.callback?0:e._bindProperties.indexOf(n)];i.to.push([o.observable,t]);nc(e._observable,i,o.observable,t)})})}function rc(e,t){const i=e[Yl];const n=i.get(t);let o;if(n.callback){o=n.callback.apply(e,n.to.map(e=>e[0][e[1]]))}else{o=n.to[0];o=o[0][o[1]]}if(e.hasOwnProperty(t)){e[t]=o}else{e.set(t,o)}}function sc(e,t){t.forEach(t=>{const i=e[Gl];let n;if(!i.get(t.observable)){e.listenTo(t.observable,\"change\",(o,r)=>{n=i.get(t.observable)[r];if(n){n.forEach(t=>{rc(e,t.property)})}})}})}class ac extends Hl{constructor(e,t,i,n){super(e,t,i,n);this.set(\"isReadOnly\",false);this.set(\"isFocused\",false);this.bind(\"isReadOnly\").to(e);this.bind(\"isFocused\").to(e,\"isFocused\",t=>t&&e.selection.editableElement==this);this.listenTo(e.selection,\"change\",()=>{this.isFocused=e.isFocused&&e.selection.editableElement==this})}is(e,t=null){if(!t){return e===\"editableElement\"||e===\"view:editableElement\"||e===\"containerElement\"||e===\"view:containerElement\"||e===this.name||e===\"view:\"+this.name||e===\"element\"||e===\"view:element\"||e===\"node\"||e===\"view:node\"}else{return t===this.name&&(e===\"editableElement\"||e===\"view:editableElement\"||e===\"containerElement\"||e===\"view:containerElement\"||e===\"element\"||e===\"view:element\")}}destroy(){this.stopListening()}}ys(ac,Jl);const lc=Symbol(\"rootName\");class cc extends ac{constructor(e,t){super(e,t);this.rootName=\"main\"}is(e,t=null){if(!t){return e===\"rootElement\"||e===\"view:rootElement\"||e===\"editableElement\"||e===\"view:editableElement\"||e===\"containerElement\"||e===\"view:containerElement\"||e===this.name||e===\"view:\"+this.name||e===\"element\"||e===\"view:element\"||e===\"node\"||e===\"view:node\"}else{return t===this.name&&(e===\"rootElement\"||e===\"view:rootElement\"||e===\"editableElement\"||e===\"view:editableElement\"||e===\"containerElement\"||e===\"view:containerElement\"||e===\"element\"||e===\"view:element\")}}get rootName(){return this.getCustomProperty(lc)}set rootName(e){this._setCustomProperty(lc,e)}set _name(e){this.name=e}}class dc{constructor(e={}){if(!e.boundaries&&!e.startPosition){throw new ss[\"b\"](\"view-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.\",null)}if(e.direction&&e.direction!=\"forward\"&&e.direction!=\"backward\"){throw new ss[\"b\"](\"view-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.\",e.startPosition,{direction:e.direction})}this.boundaries=e.boundaries||null;if(e.startPosition){this.position=uc._createAt(e.startPosition)}else{this.position=uc._createAt(e.boundaries[e.direction==\"backward\"?\"end\":\"start\"])}this.direction=e.direction||\"forward\";this.singleCharacters=!!e.singleCharacters;this.shallow=!!e.shallow;this.ignoreElementEnd=!!e.ignoreElementEnd;this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null;this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null}[Symbol.iterator](){return this}skip(e){let t,i,n;do{n=this.position;({done:t,value:i}=this.next())}while(!t&&e(i));if(!t){this.position=n}}next(){if(this.direction==\"forward\"){return this._next()}else{return this._previous()}}_next(){let e=this.position.clone();const t=this.position;const i=e.parent;if(i.parent===null&&e.offset===i.childCount){return{done:true}}if(i===this._boundaryEndParent&&e.offset==this.boundaries.end.offset){return{done:true}}let n;if(i instanceof Vs){if(e.isAtEnd){this.position=uc._createAfter(i);return this._next()}n=i.data[e.offset]}else{n=i.getChild(e.offset)}if(n instanceof jl){if(!this.shallow){e=new uc(n,0)}else{e.offset++}this.position=e;return this._formatReturnValue(\"elementStart\",n,t,e,1)}else if(n instanceof Vs){if(this.singleCharacters){e=new uc(n,0);this.position=e;return this._next()}else{let i=n.data.length;let o;if(n==this._boundaryEndParent){i=this.boundaries.end.offset;o=new Fs(n,0,i);e=uc._createAfter(o)}else{o=new Fs(n,0,n.data.length);e.offset++}this.position=e;return this._formatReturnValue(\"text\",o,t,e,i)}}else if(typeof n==\"string\"){let n;if(this.singleCharacters){n=1}else{const t=i===this._boundaryEndParent?this.boundaries.end.offset:i.data.length;n=t-e.offset}const o=new Fs(i,e.offset,n);e.offset+=n;this.position=e;return this._formatReturnValue(\"text\",o,t,e,n)}else{e=uc._createAfter(i);this.position=e;if(this.ignoreElementEnd){return this._next()}else{return this._formatReturnValue(\"elementEnd\",i,t,e)}}}_previous(){let e=this.position.clone();const t=this.position;const i=e.parent;if(i.parent===null&&e.offset===0){return{done:true}}if(i==this._boundaryStartParent&&e.offset==this.boundaries.start.offset){return{done:true}}let n;if(i instanceof Vs){if(e.isAtStart){this.position=uc._createBefore(i);return this._previous()}n=i.data[e.offset-1]}else{n=i.getChild(e.offset-1)}if(n instanceof jl){if(!this.shallow){e=new uc(n,n.childCount);this.position=e;if(this.ignoreElementEnd){return this._previous()}else{return this._formatReturnValue(\"elementEnd\",n,t,e)}}else{e.offset--;this.position=e;return this._formatReturnValue(\"elementStart\",n,t,e,1)}}else if(n instanceof Vs){if(this.singleCharacters){e=new uc(n,n.data.length);this.position=e;return this._previous()}else{let i=n.data.length;let o;if(n==this._boundaryStartParent){const t=this.boundaries.start.offset;o=new Fs(n,t,n.data.length-t);i=o.data.length;e=uc._createBefore(o)}else{o=new Fs(n,0,n.data.length);e.offset--}this.position=e;return this._formatReturnValue(\"text\",o,t,e,i)}}else if(typeof n==\"string\"){let n;if(!this.singleCharacters){const t=i===this._boundaryStartParent?this.boundaries.start.offset:0;n=e.offset-t}else{n=1}e.offset-=n;const o=new Fs(i,e.offset,n);this.position=e;return this._formatReturnValue(\"text\",o,t,e,n)}else{e=uc._createBefore(i);this.position=e;return this._formatReturnValue(\"elementStart\",i,t,e,1)}}_formatReturnValue(e,t,i,n,o){if(t instanceof Fs){if(t.offsetInText+t.data.length==t.textNode.data.length){if(this.direction==\"forward\"&&!(this.boundaries&&this.boundaries.end.isEqual(this.position))){n=uc._createAfter(t.textNode);this.position=n}else{i=uc._createAfter(t.textNode)}}if(t.offsetInText===0){if(this.direction==\"backward\"&&!(this.boundaries&&this.boundaries.start.isEqual(this.position))){n=uc._createBefore(t.textNode);this.position=n}else{i=uc._createBefore(t.textNode)}}}return{done:false,value:{type:e,item:t,previousPosition:i,nextPosition:n,length:o}}}}class uc{constructor(e,t){this.parent=e;this.offset=t}get nodeAfter(){if(this.parent.is(\"text\")){return null}return this.parent.getChild(this.offset)||null}get nodeBefore(){if(this.parent.is(\"text\")){return null}return this.parent.getChild(this.offset-1)||null}get isAtStart(){return this.offset===0}get isAtEnd(){const e=this.parent.is(\"text\")?this.parent.data.length:this.parent.childCount;return this.offset===e}get root(){return this.parent.root}get editableElement(){let e=this.parent;while(!(e instanceof ac)){if(e.parent){e=e.parent}else{return null}}return e}getShiftedBy(e){const t=uc._createAt(this);const i=t.offset+e;t.offset=i<0?0:i;return t}getLastMatchingPosition(e,t={}){t.startPosition=this;const i=new dc(t);i.skip(e);return i.position}getAncestors(){if(this.parent.is(\"documentFragment\")){return[this.parent]}else{return this.parent.getAncestors({includeSelf:true})}}getCommonAncestor(e){const t=this.getAncestors();const i=e.getAncestors();let n=0;while(t[n]==i[n]&&t[n]){n++}return n===0?null:t[n-1]}is(e){return e===\"position\"||e===\"view:position\"}isEqual(e){return this.parent==e.parent&&this.offset==e.offset}isBefore(e){return this.compareWith(e)==\"before\"}isAfter(e){return this.compareWith(e)==\"after\"}compareWith(e){if(this.root!==e.root){return\"different\"}if(this.isEqual(e)){return\"same\"}const t=this.parent.is(\"node\")?this.parent.getPath():[];const i=e.parent.is(\"node\")?e.parent.getPath():[];t.push(this.offset);i.push(e.offset);const n=Rs(t,i);switch(n){case\"prefix\":return\"before\";case\"extension\":return\"after\";default:return t[n]0?new this(i,n):new this(n,i)}static _createIn(e){return this._createFromParentsAndOffsets(e,0,e,e.childCount)}static _createOn(e){const t=e.is(\"textProxy\")?e.offsetSize:1;return this._createFromPositionAndShift(uc._createBefore(e),t)}}function fc(e){if(e.item.is(\"attributeElement\")||e.item.is(\"uiElement\")){return true}return false}function mc(e){let t=0;for(const i of e){t++}return t}class gc{constructor(e=null,t,i){this._ranges=[];this._lastRangeBackward=false;this._isFake=false;this._fakeSelectionLabel=\"\";this.setTo(e,t,i)}get isFake(){return this._isFake}get fakeSelectionLabel(){return this._fakeSelectionLabel}get anchor(){if(!this._ranges.length){return null}const e=this._ranges[this._ranges.length-1];const t=this._lastRangeBackward?e.end:e.start;return t.clone()}get focus(){if(!this._ranges.length){return null}const e=this._ranges[this._ranges.length-1];const t=this._lastRangeBackward?e.start:e.end;return t.clone()}get isCollapsed(){return this.rangeCount===1&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}get editableElement(){if(this.anchor){return this.anchor.editableElement}return null}*getRanges(){for(const e of this._ranges){yield e.clone()}}getFirstRange(){let e=null;for(const t of this._ranges){if(!e||t.start.isBefore(e.start)){e=t}}return e?e.clone():null}getLastRange(){let e=null;for(const t of this._ranges){if(!e||t.end.isAfter(e.end)){e=t}}return e?e.clone():null}getFirstPosition(){const e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){const e=this.getLastRange();return e?e.end.clone():null}isEqual(e){if(this.isFake!=e.isFake){return false}if(this.isFake&&this.fakeSelectionLabel!=e.fakeSelectionLabel){return false}if(this.rangeCount!=e.rangeCount){return false}else if(this.rangeCount===0){return true}if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus)){return false}for(const t of this._ranges){let i=false;for(const n of e._ranges){if(t.isEqual(n)){i=true;break}}if(!i){return false}}return true}isSimilar(e){if(this.isBackward!=e.isBackward){return false}const t=mc(this.getRanges());const i=mc(e.getRanges());if(t!=i){return false}if(t==0){return true}for(let t of this.getRanges()){t=t.getTrimmed();let i=false;for(let n of e.getRanges()){n=n.getTrimmed();if(t.start.isEqual(n.start)&&t.end.isEqual(n.end)){i=true;break}}if(!i){return false}}return true}getSelectedElement(){if(this.rangeCount!==1){return null}return this.getFirstRange().getContainedElement()}setTo(e,t,i){if(e===null){this._setRanges([]);this._setFakeOptions(t)}else if(e instanceof gc||e instanceof pc){this._setRanges(e.getRanges(),e.isBackward);this._setFakeOptions({fake:e.isFake,label:e.fakeSelectionLabel})}else if(e instanceof hc){this._setRanges([e],t&&t.backward);this._setFakeOptions(t)}else if(e instanceof uc){this._setRanges([new hc(e)]);this._setFakeOptions(t)}else if(e instanceof Bs){const n=!!i&&!!i.backward;let o;if(t===undefined){throw new ss[\"b\"](\"view-selection-setTo-required-second-parameter: \"+\"selection.setTo requires the second parameter when the first parameter is a node.\",this)}else if(t==\"in\"){o=hc._createIn(e)}else if(t==\"on\"){o=hc._createOn(e)}else{o=new hc(uc._createAt(e,t))}this._setRanges([o],n);this._setFakeOptions(i)}else if(vs(e)){this._setRanges(e,t&&t.backward);this._setFakeOptions(t)}else{throw new ss[\"b\"](\"view-selection-setTo-not-selectable: Cannot set selection to given place.\",this)}this.fire(\"change\")}setFocus(e,t){if(this.anchor===null){throw new ss[\"b\"](\"view-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.\",this)}const i=uc._createAt(e,t);if(i.compareWith(this.focus)==\"same\"){return}const n=this.anchor;this._ranges.pop();if(i.compareWith(n)==\"before\"){this._addRange(new hc(i,n),true)}else{this._addRange(new hc(n,i))}this.fire(\"change\")}is(e){return e===\"selection\"||e===\"view:selection\"}_setRanges(e,t=false){e=Array.from(e);this._ranges=[];for(const t of e){this._addRange(t)}this._lastRangeBackward=!!t}_setFakeOptions(e={}){this._isFake=!!e.fake;this._fakeSelectionLabel=e.fake?e.label||\"\":\"\"}_addRange(e,t=false){if(!(e instanceof hc)){throw new ss[\"b\"](\"view-selection-add-range-not-range: \"+\"Selection range set to an object that is not an instance of view.Range\",this)}this._pushRange(e);this._lastRangeBackward=!!t}_pushRange(e){for(const t of this._ranges){if(e.isIntersecting(t)){throw new ss[\"b\"](\"view-selection-range-intersects: Trying to add a range that intersects with another range from selection.\",this,{addedRange:e,intersectingRange:t})}}this._ranges.push(new hc(e.start,e.end))}}ys(gc,ds);class pc{constructor(e=null,t,i){this._selection=new gc;this._selection.delegate(\"change\").to(this);this._selection.setTo(e,t,i)}get isFake(){return this._selection.isFake}get fakeSelectionLabel(){return this._selection.fakeSelectionLabel}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get isCollapsed(){return this._selection.isCollapsed}get rangeCount(){return this._selection.rangeCount}get isBackward(){return this._selection.isBackward}get editableElement(){return this._selection.editableElement}get _ranges(){return this._selection._ranges}*getRanges(){yield*this._selection.getRanges()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getSelectedElement(){return this._selection.getSelectedElement()}isEqual(e){return this._selection.isEqual(e)}isSimilar(e){return this._selection.isSimilar(e)}is(e){return e===\"selection\"||e==\"documentSelection\"||e==\"view:selection\"||e==\"view:documentSelection\"}_setTo(e,t,i){this._selection.setTo(e,t,i)}_setFocus(e,t){this._selection.setFocus(e,t)}}ys(pc,ds);class bc{constructor(e){this.selection=new pc;this.roots=new xs({idProperty:\"rootName\"});this.stylesProcessor=e;this.set(\"isReadOnly\",false);this.set(\"isFocused\",false);this.set(\"isComposing\",false);this._postFixers=new Set}getRoot(e=\"main\"){return this.roots.get(e)}registerPostFixer(e){this._postFixers.add(e)}destroy(){this.roots.map(e=>e.destroy());this.stopListening()}_callPostFixers(e){let t=false;do{for(const i of this._postFixers){t=i(e);if(t){break}}}while(t)}}ys(bc,Jl);const wc=10;class _c extends jl{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=kc;this._priority=wc;this._id=null;this._clonesGroup=null}get priority(){return this._priority}get id(){return this._id}getElementsWithSameId(){if(this.id===null){throw new ss[\"b\"](\"attribute-element-get-elements-with-same-id-no-id: \"+\"Cannot get elements with the same id for an attribute element without id.\",this)}return new Set(this._clonesGroup)}is(e,t=null){if(!t){return e===\"attributeElement\"||e===\"view:attributeElement\"||e===this.name||e===\"view:\"+this.name||e===\"element\"||e===\"view:element\"||e===\"node\"||e===\"view:node\"}else{return t===this.name&&(e===\"attributeElement\"||e===\"view:attributeElement\"||e===\"element\"||e===\"view:element\")}}isSimilar(e){if(this.id!==null||e.id!==null){return this.id===e.id}return super.isSimilar(e)&&this.priority==e.priority}_clone(e){const t=super._clone(e);t._priority=this._priority;t._id=this._id;return t}}_c.DEFAULT_PRIORITY=wc;function kc(){if(vc(this)){return null}let e=this.parent;while(e&&e.is(\"attributeElement\")){if(vc(e)>1){return null}e=e.parent}if(!e||vc(e)>1){return null}return this.childCount}function vc(e){return Array.from(e.getChildren()).filter(e=>!e.is(\"uiElement\")).length}class yc extends jl{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=xc}is(e,t=null){if(!t){return e===\"emptyElement\"||e===\"view:emptyElement\"||e===this.name||e===\"view:\"+this.name||e===\"element\"||e===\"view:element\"||e===\"node\"||e===\"view:node\"}else{return t===this.name&&(e===\"emptyElement\"||e===\"view:emptyElement\"||e===\"element\"||e===\"view:element\")}}_insertChild(e,t){if(t&&(t instanceof Bs||Array.from(t).length>0)){throw new ss[\"b\"](\"view-emptyelement-cannot-add: Cannot add child nodes to EmptyElement instance.\",[this,t])}}}function xc(){return null}const Ac=navigator.userAgent.toLowerCase();const Cc={isMac:Ec(Ac),isGecko:Pc(Ac),isSafari:Mc(Ac),isAndroid:Sc(Ac),features:{isRegExpUnicodePropertySupported:Ic()}};var Tc=Cc;function Ec(e){return e.indexOf(\"macintosh\")>-1}function Pc(e){return!!e.match(/gecko\\/\\d+/)}function Mc(e){return e.indexOf(\" applewebkit/\")>-1&&e.indexOf(\"chrome\")===-1}function Sc(e){return e.indexOf(\"android\")>-1}function Ic(){let e=false;try{e=\"ć\".search(new RegExp(\"[\\\\p{L}]\",\"u\"))===0}catch(e){}return e}const Lc={\"⌘\":\"ctrl\",\"⇧\":\"shift\",\"⌥\":\"alt\"};const Nc={ctrl:\"⌘\",shift:\"⇧\",alt:\"⌥\"};const Oc=jc();function Rc(e){let t;if(typeof e==\"string\"){t=Oc[e.toLowerCase()];if(!t){throw new ss[\"b\"](\"keyboard-unknown-key: Unknown key name.\",null,{key:e})}}else{t=e.keyCode+(e.altKey?Oc.alt:0)+(e.ctrlKey?Oc.ctrl:0)+(e.shiftKey?Oc.shift:0)}return t}function zc(e){if(typeof e==\"string\"){e=Bc(e)}return e.map(e=>typeof e==\"string\"?Rc(e):e).reduce((e,t)=>t+e,0)}function Dc(e){if(!Tc.isMac){return e}return Bc(e).map(e=>Nc[e.toLowerCase()]||e).reduce((e,t)=>{if(e.slice(-1)in Lc){return e+t}else{return e+\"+\"+t}})}function jc(){const e={arrowleft:37,arrowup:38,arrowright:39,arrowdown:40,backspace:8,delete:46,enter:13,space:32,esc:27,tab:9,ctrl:1114112,cmd:1114112,shift:2228224,alt:4456448};for(let t=65;t<=90;t++){const i=String.fromCharCode(t);e[i.toLowerCase()]=t}for(let t=48;t<=57;t++){e[t-48]=t}for(let t=112;t<=123;t++){e[\"f\"+(t-111)]=t}return e}function Bc(e){return e.split(/\\s*\\+\\s*/)}class Vc extends jl{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=Hc}is(e,t=null){if(!t){return e===\"uiElement\"||e===\"view:uiElement\"||e===this.name||e===\"view:\"+this.name||e===\"element\"||e===\"view:element\"||e===\"node\"||e===\"view:node\"}else{return t===this.name&&(e===\"uiElement\"||e===\"view:uiElement\"||e===\"element\"||e===\"view:element\")}}_insertChild(e,t){if(t&&(t instanceof Bs||Array.from(t).length>0)){throw new ss[\"b\"](\"view-uielement-cannot-add: Cannot add child nodes to UIElement instance.\",this)}}render(e){return this.toDomElement(e)}toDomElement(e){const t=e.createElement(this.name);for(const e of this.getAttributeKeys()){t.setAttribute(e,this.getAttribute(e))}return t}}function Fc(e){e.document.on(\"keydown\",(t,i)=>Wc(t,i,e.domConverter))}function Hc(){return null}function Wc(e,t,i){if(t.keyCode==Oc.arrowright){const e=t.domTarget.ownerDocument.defaultView.getSelection();const n=e.rangeCount==1&&e.getRangeAt(0).collapsed;if(n||t.shiftKey){const t=e.focusNode;const o=e.focusOffset;const r=i.domPositionToView(t,o);if(r===null){return}let s=false;const a=r.getLastMatchingPosition(e=>{if(e.item.is(\"uiElement\")){s=true}if(e.item.is(\"uiElement\")||e.item.is(\"attributeElement\")){return true}return false});if(s){const t=i.viewPositionToDom(a);if(n){e.collapse(t.parent,t.offset)}else{e.extend(t.parent,t.offset)}}}}}class Uc{constructor(e,t){this.document=e;this._children=[];if(t){this._insertChild(0,t)}}[Symbol.iterator](){return this._children[Symbol.iterator]()}get childCount(){return this._children.length}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}is(e){return e===\"documentFragment\"||e===\"view:documentFragment\"}_appendChild(e){return this._insertChild(this.childCount,e)}getChild(e){return this._children[e]}getChildIndex(e){return this._children.indexOf(e)}getChildren(){return this._children[Symbol.iterator]()}_insertChild(e,t){this._fireChange(\"children\",this);let i=0;const n=qc(this.document,t);for(const t of n){if(t.parent!==null){t._remove()}t.parent=this;this._children.splice(e,0,t);e++;i++}return i}_removeChildren(e,t=1){this._fireChange(\"children\",this);for(let i=e;i{if(typeof t==\"string\"){return new Vs(e,t)}if(t instanceof Fs){return new Vs(e,t.data)}return t})}class $c{constructor(e){this.document=e;this._cloneGroups=new Map}setSelection(e,t,i){this.document.selection._setTo(e,t,i)}setSelectionFocus(e,t){this.document.selection._setFocus(e,t)}createText(e){return new Vs(this.document,e)}createAttributeElement(e,t,i={}){const n=new _c(this.document,e,t);if(i.priority){n._priority=i.priority}if(i.id){n._id=i.id}return n}createContainerElement(e,t){return new Hl(this.document,e,t)}createEditableElement(e,t){const i=new ac(this.document,e,t);i._document=this.document;return i}createEmptyElement(e,t){return new yc(this.document,e,t)}createUIElement(e,t,i){const n=new Vc(this.document,e,t);if(i){n.render=i}return n}setAttribute(e,t,i){i._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,i){if(O(e)&&i===undefined){i=t}i._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,i){i._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}breakAttributes(e){if(e instanceof uc){return this._breakAttributes(e)}else{return this._breakAttributesRange(e)}}breakContainer(e){const t=e.parent;if(!t.is(\"containerElement\")){throw new ss[\"b\"](\"view-writer-break-non-container-element: Trying to break an element which is not a container element.\",this.document)}if(!t.parent){throw new ss[\"b\"](\"view-writer-break-root: Trying to break root element.\",this.document)}if(e.isAtStart){return uc._createBefore(t)}else if(!e.isAtEnd){const i=t._clone(false);this.insert(uc._createAfter(t),i);const n=new hc(e,uc._createAt(t,\"end\"));const o=new uc(i,0);this.move(n,o)}return uc._createAfter(t)}mergeAttributes(e){const t=e.offset;const i=e.parent;if(i.is(\"text\")){return e}if(i.is(\"attributeElement\")&&i.childCount===0){const e=i.parent;const t=i.index;i._remove();this._removeFromClonedElementsGroup(i);return this.mergeAttributes(new uc(e,t))}const n=i.getChild(t-1);const o=i.getChild(t);if(!n||!o){return e}if(n.is(\"text\")&&o.is(\"text\")){return Zc(n,o)}else if(n.is(\"attributeElement\")&&o.is(\"attributeElement\")&&n.isSimilar(o)){const e=n.childCount;n._appendChild(o.getChildren());o._remove();this._removeFromClonedElementsGroup(o);return this.mergeAttributes(new uc(n,e))}return e}mergeContainers(e){const t=e.nodeBefore;const i=e.nodeAfter;if(!t||!i||!t.is(\"containerElement\")||!i.is(\"containerElement\")){throw new ss[\"b\"](\"view-writer-merge-containers-invalid-position: \"+\"Element before and after given position cannot be merged.\",this.document)}const n=t.getChild(t.childCount-1);const o=n instanceof Vs?uc._createAt(n,\"end\"):uc._createAt(t,\"end\");this.move(hc._createIn(i),uc._createAt(t,\"end\"));this.remove(hc._createOn(i));return o}insert(e,t){t=vs(t)?[...t]:[t];Xc(t,this.document);const i=Yc(e);if(!i){throw new ss[\"b\"](\"view-writer-invalid-position-container\",this.document)}const n=this._breakAttributes(e,true);const o=i._insertChild(n.offset,t);for(const e of t){this._addToClonedElementsGroup(e)}const r=n.getShiftedBy(o);const s=this.mergeAttributes(n);if(o===0){return new hc(s,s)}else{if(!s.isEqual(n)){r.offset--}const e=this.mergeAttributes(r);return new hc(s,e)}}remove(e){const t=e instanceof hc?e:hc._createOn(e);id(t,this.document);if(t.isCollapsed){return new Uc(this.document)}const{start:i,end:n}=this._breakAttributesRange(t,true);const o=i.parent;const r=n.offset-i.offset;const s=o._removeChildren(i.offset,r);for(const e of s){this._removeFromClonedElementsGroup(e)}const a=this.mergeAttributes(i);t.start=a;t.end=a.clone();return new Uc(this.document,s)}clear(e,t){id(e,this.document);const i=e.getWalker({direction:\"backward\",ignoreElementEnd:true});for(const n of i){const i=n.item;let o;if(i.is(\"element\")&&t.isSimilar(i)){o=hc._createOn(i)}else if(!n.nextPosition.isAfter(e.start)&&i.is(\"textProxy\")){const e=i.getAncestors().find(e=>e.is(\"element\")&&t.isSimilar(e));if(e){o=hc._createIn(e)}}if(o){if(o.end.isAfter(e.end)){o.end=e.end}if(o.start.isBefore(e.start)){o.start=e.start}this.remove(o)}}}move(e,t){let i;if(t.isAfter(e.end)){t=this._breakAttributes(t,true);const n=t.parent;const o=n.childCount;e=this._breakAttributesRange(e,true);i=this.remove(e);t.offset+=n.childCount-o}else{i=this.remove(e)}return this.insert(t,i)}wrap(e,t){if(!(t instanceof _c)){throw new ss[\"b\"](\"view-writer-wrap-invalid-attribute\",this.document)}id(e,this.document);if(!e.isCollapsed){return this._wrapRange(e,t)}else{let i=e.start;if(i.parent.is(\"element\")&&!Gc(i.parent)){i=i.getLastMatchingPosition(e=>e.item.is(\"uiElement\"))}i=this._wrapPosition(i,t);const n=this.document.selection;if(n.isCollapsed&&n.getFirstPosition().isEqual(e.start)){this.setSelection(i)}return new hc(i)}}unwrap(e,t){if(!(t instanceof _c)){throw new ss[\"b\"](\"view-writer-unwrap-invalid-attribute\",this.document)}id(e,this.document);if(e.isCollapsed){return e}const{start:i,end:n}=this._breakAttributesRange(e,true);const o=i.parent;const r=this._unwrapChildren(o,i.offset,n.offset,t);const s=this.mergeAttributes(r.start);if(!s.isEqual(r.start)){r.end.offset--}const a=this.mergeAttributes(r.end);return new hc(s,a)}rename(e,t){const i=new Hl(this.document,e,t.getAttributes());this.insert(uc._createAfter(t),i);this.move(hc._createIn(t),uc._createAt(i,0));this.remove(hc._createOn(t));return i}clearClonedElementsGroup(e){this._cloneGroups.delete(e)}createPositionAt(e,t){return uc._createAt(e,t)}createPositionAfter(e){return uc._createAfter(e)}createPositionBefore(e){return uc._createBefore(e)}createRange(e,t){return new hc(e,t)}createRangeOn(e){return hc._createOn(e)}createRangeIn(e){return hc._createIn(e)}createSelection(e,t,i){return new gc(e,t,i)}_wrapChildren(e,t,i,n){let o=t;const r=[];while(ofalse;e.parent._insertChild(e.offset,i);const n=new hc(e,e.getShiftedBy(1));this.wrap(n,t);const o=new uc(i.parent,i.index);i._remove();const r=o.nodeBefore;const s=o.nodeAfter;if(r instanceof Vs&&s instanceof Vs){return Zc(r,s)}return Jc(o)}_wrapAttributeElement(e,t){if(!nd(e,t)){return false}if(e.name!==t.name||e.priority!==t.priority){return false}for(const i of e.getAttributeKeys()){if(i===\"class\"||i===\"style\"){continue}if(t.hasAttribute(i)&&t.getAttribute(i)!==e.getAttribute(i)){return false}}for(const i of e.getStyleNames()){if(t.hasStyle(i)&&t.getStyle(i)!==e.getStyle(i)){return false}}for(const i of e.getAttributeKeys()){if(i===\"class\"||i===\"style\"){continue}if(!t.hasAttribute(i)){this.setAttribute(i,e.getAttribute(i),t)}}for(const i of e.getStyleNames()){if(!t.hasStyle(i)){this.setStyle(i,e.getStyle(i),t)}}for(const i of e.getClassNames()){if(!t.hasClass(i)){this.addClass(i,t)}}return true}_unwrapAttributeElement(e,t){if(!nd(e,t)){return false}if(e.name!==t.name||e.priority!==t.priority){return false}for(const i of e.getAttributeKeys()){if(i===\"class\"||i===\"style\"){continue}if(!t.hasAttribute(i)||t.getAttribute(i)!==e.getAttribute(i)){return false}}if(!t.hasClass(...e.getClassNames())){return false}for(const i of e.getStyleNames()){if(!t.hasStyle(i)||t.getStyle(i)!==e.getStyle(i)){return false}}for(const i of e.getAttributeKeys()){if(i===\"class\"||i===\"style\"){continue}this.removeAttribute(i,t)}this.removeClass(Array.from(e.getClassNames()),t);this.removeStyle(Array.from(e.getStyleNames()),t);return true}_breakAttributesRange(e,t=false){const i=e.start;const n=e.end;id(e,this.document);if(e.isCollapsed){const i=this._breakAttributes(e.start,t);return new hc(i,i)}const o=this._breakAttributes(n,t);const r=o.parent.childCount;const s=this._breakAttributes(i,t);o.offset+=o.parent.childCount-r;return new hc(s,o)}_breakAttributes(e,t=false){const i=e.offset;const n=e.parent;if(e.parent.is(\"emptyElement\")){throw new ss[\"b\"](\"view-writer-cannot-break-empty-element\",this.document)}if(e.parent.is(\"uiElement\")){throw new ss[\"b\"](\"view-writer-cannot-break-ui-element\",this.document)}if(!t&&n.is(\"text\")&&td(n.parent)){return e.clone()}if(td(n)){return e.clone()}if(n.is(\"text\")){return this._breakAttributes(Qc(e),t)}const o=n.childCount;if(i==o){const e=new uc(n.parent,n.index+1);return this._breakAttributes(e,t)}else{if(i===0){const e=new uc(n.parent,n.index);return this._breakAttributes(e,t)}else{const e=n.index+1;const o=n._clone();n.parent._insertChild(e,o);this._addToClonedElementsGroup(o);const r=n.childCount-i;const s=n._removeChildren(i,r);o._appendChild(s);const a=new uc(n.parent,e);return this._breakAttributes(a,t)}}}_addToClonedElementsGroup(e){if(!e.root.is(\"rootElement\")){return}if(e.is(\"element\")){for(const t of e.getChildren()){this._addToClonedElementsGroup(t)}}const t=e.id;if(!t){return}let i=this._cloneGroups.get(t);if(!i){i=new Set;this._cloneGroups.set(t,i)}i.add(e);e._clonesGroup=i}_removeFromClonedElementsGroup(e){if(e.is(\"element\")){for(const t of e.getChildren()){this._removeFromClonedElementsGroup(t)}}const t=e.id;if(!t){return}const i=this._cloneGroups.get(t);if(!i){return}i.delete(e)}}function Gc(e){return Array.from(e.getChildren()).some(e=>!e.is(\"uiElement\"))}function Yc(e){let t=e.parent;while(!td(t)){if(!t){return undefined}t=t.parent}return t}function Kc(e,t){if(e.priorityt.priority){return false}return e.getIdentity()i instanceof e)){throw new ss[\"b\"](\"view-writer-insert-invalid-node\",t)}if(!i.is(\"text\")){Xc(i.getChildren(),t)}}}const ed=[Vs,_c,Hl,yc,Vc];function td(e){return e&&(e.is(\"containerElement\")||e.is(\"documentFragment\"))}function id(e,t){const i=Yc(e.start);const n=Yc(e.end);if(!i||!n||i!==n){throw new ss[\"b\"](\"view-writer-invalid-range-container\",t)}}function nd(e,t){return e.id===null&&t.id===null}function od(e){return Object.prototype.toString.call(e)==\"[object Text]\"}const rd=e=>e.createTextNode(\" \");const sd=e=>{const t=e.createElement(\"br\");t.dataset.ckeFiller=true;return t};const ad=7;const ld=(()=>{let e=\"\";for(let t=0;t0){i.push({index:n,type:\"insert\",values:e.slice(n,r)})}if(o-n>0){i.push({index:n+(r-n),type:\"delete\",howMany:o-n})}return i}function _d(e,t){const{firstIndex:i,lastIndexOld:n,lastIndexNew:o}=e;if(i===-1){return Array(t).fill(\"equal\")}let r=[];if(i>0){r=r.concat(Array(i).fill(\"equal\"))}if(o-i>0){r=r.concat(Array(o-i).fill(\"insert\"))}if(n-i>0){r=r.concat(Array(n-i).fill(\"delete\"))}if(o200||o>200||n+o>300){return kd.fastDiff(e,t,i,true)}let r,s;if(oc?-1:1;if(d[n+h]){d[n]=d[n+h].slice(0)}if(!d[n]){d[n]=[]}d[n].push(o>c?r:s);let f=Math.max(o,c);let m=f-n;while(mc;m--){u[m]=h(m)}u[c]=h(c);f++}while(u[c]!==l);return d[c].slice(1)}kd.fastDiff=md;function vd(e,t,i){e.insertBefore(i,e.childNodes[t]||null)}function yd(e){const t=e.parentNode;if(t){t.removeChild(e)}}function xd(e){if(e){if(e.defaultView){return e instanceof e.defaultView.Document}else if(e.ownerDocument&&e.ownerDocument.defaultView){return e instanceof e.ownerDocument.defaultView.Node}}return false}class Ad{constructor(e,t){this.domDocuments=new Set;this.domConverter=e;this.markedAttributes=new Set;this.markedChildren=new Set;this.markedTexts=new Set;this.selection=t;this.isFocused=false;this._inlineFiller=null;this._fakeSelectionContainer=null}markToSync(e,t){if(e===\"text\"){if(this.domConverter.mapViewToDom(t.parent)){this.markedTexts.add(t)}}else{if(!this.domConverter.mapViewToDom(t)){return}if(e===\"attributes\"){this.markedAttributes.add(t)}else if(e===\"children\"){this.markedChildren.add(t)}else{throw new ss[\"b\"](\"view-renderer-unknown-type: Unknown type passed to Renderer.markToSync.\",this)}}}render(){let e;for(const e of this.markedChildren){this._updateChildrenMappings(e)}if(this._inlineFiller&&!this._isSelectionInInlineFiller()){this._removeInlineFiller()}if(this._inlineFiller){e=this._getInlineFillerPosition()}else if(this._needsInlineFillerAtSelection()){e=this.selection.getFirstPosition();this.markedChildren.add(e.parent)}for(const e of this.markedAttributes){this._updateAttrs(e)}for(const t of this.markedChildren){this._updateChildren(t,{inlineFillerPosition:e})}for(const t of this.markedTexts){if(!this.markedChildren.has(t.parent)&&this.domConverter.mapViewToDom(t.parent)){this._updateText(t,{inlineFillerPosition:e})}}if(e){const t=this.domConverter.viewPositionToDom(e);const i=t.parent.ownerDocument;if(!cd(t.parent)){this._inlineFiller=Td(i,t.parent,t.offset)}else{this._inlineFiller=t.parent}}else{this._inlineFiller=null}this._updateSelection();this._updateFocus();this.markedTexts.clear();this.markedAttributes.clear();this.markedChildren.clear()}_updateChildrenMappings(e){const t=this.domConverter.mapViewToDom(e);if(!t){return}const i=this.domConverter.mapViewToDom(e).childNodes;const n=Array.from(this.domConverter.viewChildrenToDom(e,t.ownerDocument,{withChildren:false}));const o=this._diffNodeLists(i,n);const r=this._findReplaceActions(o,i,n);if(r.indexOf(\"replace\")!==-1){const t={equal:0,insert:0,delete:0};for(const o of r){if(o===\"replace\"){const o=t.equal+t.insert;const r=t.equal+t.delete;const s=e.getChild(o);if(s&&!s.is(\"uiElement\")){this._updateElementMappings(s,i[r])}yd(n[o]);t.equal++}else{t[o]++}}}}_updateElementMappings(e,t){this.domConverter.unbindDomElement(t);this.domConverter.bindElements(t,e);this.markedChildren.add(e);this.markedAttributes.add(e)}_getInlineFillerPosition(){const e=this.selection.getFirstPosition();if(e.parent.is(\"text\")){return uc._createBefore(this.selection.getFirstPosition().parent)}else{return e}}_isSelectionInInlineFiller(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed){return false}const e=this.selection.getFirstPosition();const t=this.domConverter.viewPositionToDom(e);if(t&&od(t.parent)&&cd(t.parent)){return true}return false}_removeInlineFiller(){const e=this._inlineFiller;if(!cd(e)){throw new ss[\"b\"](\"view-renderer-filler-was-lost: The inline filler node was lost.\",this)}if(dd(e)){e.parentNode.removeChild(e)}else{e.data=e.data.substr(ad)}this._inlineFiller=null}_needsInlineFillerAtSelection(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed){return false}const e=this.selection.getFirstPosition();const t=e.parent;const i=e.offset;if(!this.domConverter.mapViewToDom(t.root)){return false}if(!t.is(\"element\")){return false}if(!Cd(t)){return false}if(i===t.getFillerOffset()){return false}const n=e.nodeBefore;const o=e.nodeAfter;if(n instanceof Vs||o instanceof Vs){return false}return true}_updateText(e,t){const i=this.domConverter.findCorrespondingDomText(e);const n=this.domConverter.viewToDom(e,i.ownerDocument);const o=i.data;let r=n.data;const s=t.inlineFillerPosition;if(s&&s.parent==e.parent&&s.offset==e.index){r=ld+r}if(o!=r){const e=md(o,r);for(const t of e){if(t.type===\"insert\"){i.insertData(t.index,t.values.join(\"\"))}else{i.deleteData(t.index,t.howMany)}}}}_updateAttrs(e){const t=this.domConverter.mapViewToDom(e);if(!t){return}const i=Array.from(t.attributes).map(e=>e.name);const n=e.getAttributeKeys();for(const i of n){t.setAttribute(i,e.getAttribute(i))}for(const n of i){if(!e.hasAttribute(n)){t.removeAttribute(n)}}}_updateChildren(e,t){const i=this.domConverter.mapViewToDom(e);if(!i){return}const n=t.inlineFillerPosition;const o=this.domConverter.mapViewToDom(e).childNodes;const r=Array.from(this.domConverter.viewChildrenToDom(e,i.ownerDocument,{bind:true,inlineFillerPosition:n}));if(n&&n.parent===e){Td(i.ownerDocument,r,n.offset)}const s=this._diffNodeLists(o,r);let a=0;const l=new Set;for(const e of s){if(e===\"delete\"){l.add(o[a]);yd(o[a])}else if(e===\"equal\"){a++}}a=0;for(const e of s){if(e===\"insert\"){vd(i,a,r[a]);a++}else if(e===\"equal\"){this._markDescendantTextToSync(this.domConverter.domToView(r[a]));a++}}for(const e of l){if(!e.parentNode){this.domConverter.unbindDomElement(e)}}}_diffNodeLists(e,t){e=Sd(e,this._fakeSelectionContainer);return kd(e,t,Pd.bind(null,this.domConverter))}_findReplaceActions(e,t,i){if(e.indexOf(\"insert\")===-1||e.indexOf(\"delete\")===-1){return e}let n=[];let o=[];let r=[];const s={equal:0,insert:0,delete:0};for(const a of e){if(a===\"insert\"){r.push(i[s.equal+s.insert])}else if(a===\"delete\"){o.push(t[s.equal+s.delete])}else{n=n.concat(kd(o,r,Ed).map(e=>e===\"equal\"?\"replace\":e));n.push(\"equal\");o=[];r=[]}s[a]++}return n.concat(kd(o,r,Ed).map(e=>e===\"equal\"?\"replace\":e))}_markDescendantTextToSync(e){if(!e){return}if(e.is(\"text\")){this.markedTexts.add(e)}else if(e.is(\"element\")){for(const t of e.getChildren()){this._markDescendantTextToSync(t)}}}_updateSelection(){if(this.selection.rangeCount===0){this._removeDomSelection();this._removeFakeSelection();return}const e=this.domConverter.mapViewToDom(this.selection.editableElement);if(!this.isFocused||!e){return}if(this.selection.isFake){this._updateFakeSelection(e)}else{this._removeFakeSelection();this._updateDomSelection(e)}}_updateFakeSelection(e){const t=e.ownerDocument;if(!this._fakeSelectionContainer){this._fakeSelectionContainer=Id(t)}const i=this._fakeSelectionContainer;this.domConverter.bindFakeSelection(i,this.selection);if(!this._fakeSelectionNeedsUpdate(e)){return}if(!i.parentElement||i.parentElement!=e){e.appendChild(i)}i.textContent=this.selection.fakeSelectionLabel||\" \";const n=t.getSelection();const o=t.createRange();n.removeAllRanges();o.selectNodeContents(i);n.addRange(o)}_updateDomSelection(e){const t=e.ownerDocument.defaultView.getSelection();if(!this._domSelectionNeedsUpdate(t)){return}const i=this.domConverter.viewPositionToDom(this.selection.anchor);const n=this.domConverter.viewPositionToDom(this.selection.focus);e.focus();t.collapse(i.parent,i.offset);t.extend(n.parent,n.offset);if(Tc.isGecko){Md(n,t)}}_domSelectionNeedsUpdate(e){if(!this.domConverter.isDomSelectionCorrect(e)){return true}const t=e&&this.domConverter.domSelectionToView(e);if(t&&this.selection.isEqual(t)){return false}if(!this.selection.isCollapsed&&this.selection.isSimilar(t)){return false}return true}_fakeSelectionNeedsUpdate(e){const t=this._fakeSelectionContainer;const i=e.ownerDocument.getSelection();if(!t||t.parentElement!==e){return true}if(i.anchorNode!==t&&!t.contains(i.anchorNode)){return true}return t.textContent!==this.selection.fakeSelectionLabel}_removeDomSelection(){for(const e of this.domDocuments){const t=e.getSelection();if(t.rangeCount){const t=e.activeElement;const i=this.domConverter.mapDomToView(t);if(t&&i){e.getSelection().removeAllRanges()}}}}_removeFakeSelection(){const e=this._fakeSelectionContainer;if(e){e.remove()}}_updateFocus(){if(this.isFocused){const e=this.selection.editableElement;if(e){this.domConverter.focus(e)}}}}ys(Ad,Jl);function Cd(e){if(e.getAttribute(\"contenteditable\")==\"false\"){return false}const t=e.findAncestor(e=>e.hasAttribute(\"contenteditable\"));return!t||t.getAttribute(\"contenteditable\")==\"true\"}function Td(e,t,i){const n=t instanceof Array?t:t.childNodes;const o=n[i];if(od(o)){o.data=ld+o.data;return o}else{const o=e.createTextNode(ld);if(Array.isArray(t)){n.splice(i,0,o)}else{vd(t,i,o)}return o}}function Ed(e,t){return xd(e)&&xd(t)&&!od(e)&&!od(t)&&e.tagName.toLowerCase()===t.tagName.toLowerCase()}function Pd(e,t,i){if(t===i){return true}else if(od(t)&&od(i)){return t.data===i.data}else if(e.isBlockFiller(t)&&e.isBlockFiller(i)){return true}return false}function Md(e,t){const i=e.parent;if(i.nodeType!=Node.ELEMENT_NODE||e.offset!=i.childNodes.length-1){return}const n=i.childNodes[e.offset];if(n&&n.tagName==\"BR\"){t.addRange(t.getRangeAt(0))}}function Sd(e,t){const i=Array.from(e);if(i.length==0||!t){return i}const n=i[i.length-1];if(n==t){i.pop()}return i}function Id(e){const t=e.createElement(\"div\");Object.assign(t.style,{position:\"fixed\",top:0,left:\"-9999px\",width:\"42px\"});t.textContent=\" \";return t}var Ld={window:window,document:document};function Nd(e){let t=0;while(e.previousSibling){e=e.previousSibling;t++}return t}function Od(e){const t=[];while(e&&e.nodeType!=Node.DOCUMENT_NODE){t.unshift(e);e=e.parentNode}return t}function Rd(e,t){const i=Od(e);const n=Od(t);let o=0;while(i[o]==n[o]&&i[o]){o++}return o===0?null:i[o-1]}const zd=sd(document);class Dd{constructor(e,t={}){this.document=e;this.blockFillerMode=t.blockFillerMode||\"br\";this.preElements=[\"pre\"];this.blockElements=[\"p\",\"div\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"li\",\"dd\",\"dt\",\"figcaption\"];this._blockFiller=this.blockFillerMode==\"br\"?sd:rd;this._domToViewMapping=new WeakMap;this._viewToDomMapping=new WeakMap;this._fakeSelectionMapping=new WeakMap}bindFakeSelection(e,t){this._fakeSelectionMapping.set(e,new gc(t))}fakeSelectionToView(e){return this._fakeSelectionMapping.get(e)}bindElements(e,t){this._domToViewMapping.set(e,t);this._viewToDomMapping.set(t,e)}unbindDomElement(e){const t=this._domToViewMapping.get(e);if(t){this._domToViewMapping.delete(e);this._viewToDomMapping.delete(t);for(const t of e.childNodes){this.unbindDomElement(t)}}}bindDocumentFragments(e,t){this._domToViewMapping.set(e,t);this._viewToDomMapping.set(t,e)}viewToDom(e,t,i={}){if(e.is(\"text\")){const i=this._processDataFromViewText(e);return t.createTextNode(i)}else{if(this.mapViewToDom(e)){return this.mapViewToDom(e)}let n;if(e.is(\"documentFragment\")){n=t.createDocumentFragment();if(i.bind){this.bindDocumentFragments(n,e)}}else if(e.is(\"uiElement\")){n=e.render(t);if(i.bind){this.bindElements(n,e)}return n}else{if(e.hasAttribute(\"xmlns\")){n=t.createElementNS(e.getAttribute(\"xmlns\"),e.name)}else{n=t.createElement(e.name)}if(i.bind){this.bindElements(n,e)}for(const t of e.getAttributeKeys()){n.setAttribute(t,e.getAttribute(t))}}if(i.withChildren||i.withChildren===undefined){for(const o of this.viewChildrenToDom(e,t,i)){n.appendChild(o)}}return n}}*viewChildrenToDom(e,t,i={}){const n=e.getFillerOffset&&e.getFillerOffset();let o=0;for(const r of e.getChildren()){if(n===o){yield this._blockFiller(t)}yield this.viewToDom(r,t,i);o++}if(n===o){yield this._blockFiller(t)}}viewRangeToDom(e){const t=this.viewPositionToDom(e.start);const i=this.viewPositionToDom(e.end);const n=document.createRange();n.setStart(t.parent,t.offset);n.setEnd(i.parent,i.offset);return n}viewPositionToDom(e){const t=e.parent;if(t.is(\"text\")){const i=this.findCorrespondingDomText(t);if(!i){return null}let n=e.offset;if(cd(i)){n+=ad}return{parent:i,offset:n}}else{let i,n,o;if(e.offset===0){i=this.mapViewToDom(t);if(!i){return null}o=i.childNodes[0]}else{const t=e.nodeBefore;n=t.is(\"text\")?this.findCorrespondingDomText(t):this.mapViewToDom(e.nodeBefore);if(!n){return null}i=n.parentNode;o=n.nextSibling}if(od(o)&&cd(o)){return{parent:o,offset:ad}}const r=n?Nd(n)+1:0;return{parent:i,offset:r}}}domToView(e,t={}){if(this.isBlockFiller(e,this.blockFillerMode)){return null}const i=this.getParentUIElement(e,this._domToViewMapping);if(i){return i}if(od(e)){if(dd(e)){return null}else{const t=this._processDataFromDomText(e);return t===\"\"?null:new Vs(this.document,t)}}else if(this.isComment(e)){return null}else{if(this.mapDomToView(e)){return this.mapDomToView(e)}let i;if(this.isDocumentFragment(e)){i=new Uc(this.document);if(t.bind){this.bindDocumentFragments(e,i)}}else{const n=t.keepOriginalCase?e.tagName:e.tagName.toLowerCase();i=new jl(this.document,n);if(t.bind){this.bindElements(e,i)}const o=e.attributes;for(let e=o.length-1;e>=0;e--){i._setAttribute(o[e].name,o[e].value)}}if(t.withChildren||t.withChildren===undefined){for(const n of this.domChildrenToView(e,t)){i._appendChild(n)}}return i}}*domChildrenToView(e,t={}){for(let i=0;i{const{scrollLeft:t,scrollTop:i}=e;n.push([t,i])});t.focus();Bd(t,e=>{const[t,i]=n.shift();e.scrollLeft=t;e.scrollTop=i});Ld.window.scrollTo(e,i)}}isElement(e){return e&&e.nodeType==Node.ELEMENT_NODE}isDocumentFragment(e){return e&&e.nodeType==Node.DOCUMENT_FRAGMENT_NODE}isComment(e){return e&&e.nodeType==Node.COMMENT_NODE}isBlockFiller(e){if(this.blockFillerMode==\"br\"){return e.isEqualNode(zd)}if(e.tagName===\"BR\"&&Fd(e,this.blockElements)&&e.parentNode.childNodes.length===1){return true}return Vd(e,this.blockElements)}isDomSelectionBackward(e){if(e.isCollapsed){return false}const t=document.createRange();t.setStart(e.anchorNode,e.anchorOffset);t.setEnd(e.focusNode,e.focusOffset);const i=t.collapsed;t.detach();return i}getParentUIElement(e){const t=Od(e);t.pop();while(t.length){const e=t.pop();const i=this._domToViewMapping.get(e);if(i&&i.is(\"uiElement\")){return i}}return null}isDomSelectionCorrect(e){return this._isDomSelectionPositionCorrect(e.anchorNode,e.anchorOffset)&&this._isDomSelectionPositionCorrect(e.focusNode,e.focusOffset)}_isDomSelectionPositionCorrect(e,t){if(od(e)&&cd(e)&&tthis.preElements.includes(e.name))){return t}if(t.charAt(0)==\" \"){const i=this._getTouchingViewTextNode(e,false);const n=i&&this._nodeEndsWithSpace(i);if(n||!i){t=\" \"+t.substr(1)}}if(t.charAt(t.length-1)==\" \"){const i=this._getTouchingViewTextNode(e,true);if(t.charAt(t.length-2)==\" \"||!i||i.data.charAt(0)==\" \"){t=t.substr(0,t.length-1)+\" \"}}return t.replace(/ {2}/g,\"  \")}_nodeEndsWithSpace(e){if(e.getAncestors().some(e=>this.preElements.includes(e.name))){return false}const t=this._processDataFromViewText(e);return t.charAt(t.length-1)==\" \"}_processDataFromDomText(e){let t=e.data;if(jd(e,this.preElements)){return ud(e)}t=t.replace(/[ \\n\\t\\r]{1,}/g,\" \");const i=this._getTouchingInlineDomNode(e,false);const n=this._getTouchingInlineDomNode(e,true);const o=this._checkShouldLeftTrimDomText(i);const r=this._checkShouldRightTrimDomText(e,n);if(o){t=t.replace(/^ /,\"\")}if(r){t=t.replace(/ $/,\"\")}t=ud(new Text(t));t=t.replace(/ \\u00A0/g,\" \");if(/( |\\u00A0)\\u00A0$/.test(t)||!n||n.data&&n.data.charAt(0)==\" \"){t=t.replace(/\\u00A0$/,\" \")}if(o){t=t.replace(/^\\u00A0/,\" \")}return t}_checkShouldLeftTrimDomText(e){if(!e){return true}if(Yr(e)){return true}return/[^\\S\\u00A0]/.test(e.data.charAt(e.data.length-1))}_checkShouldRightTrimDomText(e,t){if(t){return false}return!cd(e)}_getTouchingViewTextNode(e,t){const i=new dc({startPosition:t?uc._createAfter(e):uc._createBefore(e),direction:t?\"forward\":\"backward\"});for(const e of i){if(e.item.is(\"containerElement\")){return null}else if(e.item.is(\"br\")){return null}else if(e.item.is(\"textProxy\")){return e.item}}return null}_getTouchingInlineDomNode(e,t){if(!e.parentNode){return null}const i=t?\"nextNode\":\"previousNode\";const n=e.ownerDocument;const o=Od(e)[0];const r=n.createTreeWalker(o,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,{acceptNode(e){if(od(e)){return NodeFilter.FILTER_ACCEPT}if(e.tagName==\"BR\"){return NodeFilter.FILTER_ACCEPT}return NodeFilter.FILTER_SKIP}});r.currentNode=e;const s=r[i]();if(s!==null){const t=Rd(e,s);if(t&&!jd(e,this.blockElements,t)&&!jd(s,this.blockElements,t)){return s}}return null}}function jd(e,t,i){let n=Od(e);if(i){n=n.slice(n.indexOf(i)+1)}return n.some(e=>e.tagName&&t.includes(e.tagName.toLowerCase()))}function Bd(e,t){while(e&&e!=Ld.document){t(e);e=e.parentNode}}function Vd(e,t){const i=od(e)&&e.data==\" \";return i&&Fd(e,t)&&e.parentNode.childNodes.length===1}function Fd(e,t){const i=e.parentNode;return i&&i.tagName&&t.includes(i.tagName.toLowerCase())}function Hd(e){const t=Object.prototype.toString.apply(e);if(t==\"[object Window]\"){return true}if(t==\"[object global]\"){return true}return false}const Wd=ql({},ds,{listenTo(e,...t){if(xd(e)||Hd(e)){const i=this._getProxyEmitter(e)||new qd(e);i.attach(...t);e=i}ds.listenTo.call(this,e,...t)},stopListening(e,t,i){if(xd(e)||Hd(e)){const t=this._getProxyEmitter(e);if(!t){return}e=t}ds.stopListening.call(this,e,t,i);if(e instanceof qd){e.detach(t)}},_getProxyEmitter(e){return us(this,$d(e))}});var Ud=Wd;class qd{constructor(e){hs(this,$d(e));this._domNode=e}}ql(qd.prototype,ds,{attach(e,t,i={}){if(this._domListeners&&this._domListeners[e]){return}const n=this._createDomListener(e,!!i.useCapture);this._domNode.addEventListener(e,n,!!i.useCapture);if(!this._domListeners){this._domListeners={}}this._domListeners[e]=n},detach(e){let t;if(this._domListeners[e]&&(!(t=this._events[e])||!t.callbacks.length)){this._domListeners[e].removeListener()}},_createDomListener(e,t){const i=t=>{this.fire(e,t)};i.removeListener=()=>{this._domNode.removeEventListener(e,i,t);delete this._domListeners[e]};return i}});function $d(e){return e[\"data-ck-expando\"]||(e[\"data-ck-expando\"]=is())}class Gd{constructor(e){this.view=e;this.document=e.document;this.isEnabled=false}enable(){this.isEnabled=true}disable(){this.isEnabled=false}destroy(){this.disable();this.stopListening()}}ys(Gd,Ud);var Yd=\"__lodash_hash_undefined__\";function Kd(e){this.__data__.set(e,Yd);return this}var Jd=Kd;function Qd(e){return this.__data__.has(e)}var Zd=Qd;function Xd(e){var t=-1,i=e==null?0:e.length;this.__data__=new kt;while(++ta)){return false}var c=r.get(e);if(c&&r.get(t)){return c==t}var d=-1,u=true,h=i&su?new eu:undefined;r.set(e,t);r.set(t,e);while(++d{this.listenTo(e,t,(e,t)=>{if(this.isEnabled){this.onDomEvent(t)}},{useCapture:this.useCapture})})}fire(e,t,i){if(this.isEnabled){this.document.fire(e,new Yu(this.view,t,i))}}}class Ju extends Ku{constructor(e){super(e);this.domEventType=[\"keydown\",\"keyup\"]}onDomEvent(e){this.fire(e.type,e,{keyCode:e.keyCode,altKey:e.altKey,ctrlKey:e.ctrlKey||e.metaKey,shiftKey:e.shiftKey,get keystroke(){return Rc(this)}})}}var Qu=function(){return n[\"a\"].Date.now()};var Zu=Qu;var Xu=0/0;var eh=/^\\s+|\\s+$/g;var th=/^[-+]0x[0-9a-f]+$/i;var ih=/^0b[01]+$/i;var nh=/^0o[0-7]+$/i;var oh=parseInt;function rh(e){if(typeof e==\"number\"){return e}if(Zs(e)){return Xu}if(le(e)){var t=typeof e.valueOf==\"function\"?e.valueOf():e;e=le(t)?t+\"\":t}if(typeof e!=\"string\"){return e===0?e:+e}e=e.replace(eh,\"\");var i=ih.test(e);return i||nh.test(e)?oh(e.slice(2),i?2:8):th.test(e)?Xu:+e}var sh=rh;var ah=\"Expected a function\";var lh=Math.max,ch=Math.min;function dh(e,t,i){var n,o,r,s,a,l,c=0,d=false,u=false,h=true;if(typeof e!=\"function\"){throw new TypeError(ah)}t=sh(t)||0;if(le(i)){d=!!i.leading;u=\"maxWait\"in i;r=u?lh(sh(i.maxWait)||0,t):r;h=\"trailing\"in i?!!i.trailing:h}function f(t){var i=n,r=o;n=o=undefined;c=t;s=e.apply(r,i);return s}function m(e){c=e;a=setTimeout(b,t);return d?f(e):s}function g(e){var i=e-l,n=e-c,o=t-i;return u?ch(o,r-n):o}function p(e){var i=e-l,n=e-c;return l===undefined||i>=t||i<0||u&&n>=r}function b(){var e=Zu();if(p(e)){return w(e)}a=setTimeout(b,g(e))}function w(e){a=undefined;if(h&&n){return f(e)}n=o=undefined;return s}function _(){if(a!==undefined){clearTimeout(a)}c=0;n=l=o=a=undefined}function k(){return a===undefined?s:w(Zu())}function v(){var e=Zu(),i=p(e);n=arguments;o=this;l=e;if(i){if(a===undefined){return m(l)}if(u){clearTimeout(a);a=setTimeout(b,t);return f(l)}}if(a===undefined){a=setTimeout(b,t)}return s}v.cancel=_;v.flush=k;return v}var uh=dh;class hh extends Gd{constructor(e){super(e);this._fireSelectionChangeDoneDebounced=uh(e=>this.document.fire(\"selectionChangeDone\",e),200)}observe(){const e=this.document;e.on(\"keydown\",(t,i)=>{const n=e.selection;if(n.isFake&&fh(i.keyCode)&&this.isEnabled){i.preventDefault();this._handleSelectionMove(i.keyCode)}},{priority:\"lowest\"})}destroy(){super.destroy();this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionMove(e){const t=this.document.selection;const i=new gc(t.getRanges(),{backward:t.isBackward,fake:false});if(e==Oc.arrowleft||e==Oc.arrowup){i.setTo(i.getFirstPosition())}if(e==Oc.arrowright||e==Oc.arrowdown){i.setTo(i.getLastPosition())}const n={oldSelection:t,newSelection:i,domSelection:null};this.document.fire(\"selectionChange\",n);this._fireSelectionChangeDoneDebounced(n)}}function fh(e){return e==Oc.arrowright||e==Oc.arrowleft||e==Oc.arrowup||e==Oc.arrowdown}class mh extends Gd{constructor(e){super(e);this.mutationObserver=e.getObserver(Gu);this.selection=this.document.selection;this.domConverter=e.domConverter;this._documents=new WeakSet;this._fireSelectionChangeDoneDebounced=uh(e=>this.document.fire(\"selectionChangeDone\",e),200);this._clearInfiniteLoopInterval=setInterval(()=>this._clearInfiniteLoop(),1e3);this._loopbackCounter=0}observe(e){const t=e.ownerDocument;if(this._documents.has(t)){return}this.listenTo(t,\"selectionchange\",()=>{this._handleSelectionChange(t)});this._documents.add(t)}destroy(){super.destroy();clearInterval(this._clearInfiniteLoopInterval);this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionChange(e){if(!this.isEnabled){return}this.mutationObserver.flush();const t=e.defaultView.getSelection();const i=this.domConverter.domSelectionToView(t);if(i.rangeCount==0){this.view.hasDomSelection=false;return}this.view.hasDomSelection=true;if(this.selection.isEqual(i)&&this.domConverter.isDomSelectionCorrect(t)){return}if(++this._loopbackCounter>60){return}if(this.selection.isSimilar(i)){this.view.forceRender()}else{const e={oldSelection:this.selection,newSelection:i,domSelection:t};this.document.fire(\"selectionChange\",e);this._fireSelectionChangeDoneDebounced(e)}}_clearInfiniteLoop(){this._loopbackCounter=0}}class gh extends Ku{constructor(e){super(e);this.domEventType=[\"focus\",\"blur\"];this.useCapture=true;const t=this.document;t.on(\"focus\",()=>{t.isFocused=true;this._renderTimeoutId=setTimeout(()=>e.forceRender(),50)});t.on(\"blur\",(i,n)=>{const o=t.selection.editableElement;if(o===null||o===n.target){t.isFocused=false;e.forceRender()}})}onDomEvent(e){this.fire(e.type,e)}destroy(){if(this._renderTimeoutId){clearTimeout(this._renderTimeoutId)}super.destroy()}}class ph extends Ku{constructor(e){super(e);this.domEventType=[\"compositionstart\",\"compositionupdate\",\"compositionend\"];const t=this.document;t.on(\"compositionstart\",()=>{t.isComposing=true});t.on(\"compositionend\",()=>{t.isComposing=false})}onDomEvent(e){this.fire(e.type,e)}}class bh extends Ku{constructor(e){super(e);this.domEventType=[\"beforeinput\"]}onDomEvent(e){this.fire(e.type,e)}}function wh(e){return Object.prototype.toString.apply(e)==\"[object Range]\"}function _h(e){const t=e.ownerDocument.defaultView.getComputedStyle(e);return{top:parseInt(t.borderTopWidth,10),right:parseInt(t.borderRightWidth,10),bottom:parseInt(t.borderBottomWidth,10),left:parseInt(t.borderLeftWidth,10)}}const kh=[\"top\",\"right\",\"bottom\",\"left\",\"width\",\"height\"];class vh{constructor(e){const t=wh(e);Object.defineProperty(this,\"_source\",{value:e._source||e,writable:true,enumerable:false});if(Yr(e)||t){if(t){yh(this,vh.getDomRangeRects(e)[0])}else{yh(this,e.getBoundingClientRect())}}else if(Hd(e)){const{innerWidth:t,innerHeight:i}=e;yh(this,{top:0,right:t,bottom:i,left:0,width:t,height:i})}else{yh(this,e)}}clone(){return new vh(this)}moveTo(e,t){this.top=t;this.right=e+this.width;this.bottom=t+this.height;this.left=e;return this}moveBy(e,t){this.top+=t;this.right+=e;this.left+=e;this.bottom+=t;return this}getIntersection(e){const t={top:Math.max(this.top,e.top),right:Math.min(this.right,e.right),bottom:Math.min(this.bottom,e.bottom),left:Math.max(this.left,e.left)};t.width=t.right-t.left;t.height=t.bottom-t.top;if(t.width<0||t.height<0){return null}else{return new vh(t)}}getIntersectionArea(e){const t=this.getIntersection(e);if(t){return t.getArea()}else{return 0}}getArea(){return this.width*this.height}getVisible(){const e=this._source;let t=this.clone();if(!xh(e)){let i=e.parentNode||e.commonAncestorContainer;while(i&&!xh(i)){const e=new vh(i);const n=t.getIntersection(e);if(n){if(n.getArea()Rh(e,n));const s=Rh(e,n);Eh(n,s,t);if(n.parent!=n){o=n.frameElement;n=n.parent;if(!o){return}}else{n=null}}}function Th(e){const t=Oh(e);Ph(t,()=>new vh(e))}Object.assign(Ah,{scrollViewportToShowTarget:Ch,scrollAncestorsToShowTarget:Th});function Eh(e,t,i){const n=t.clone().moveBy(0,i);const o=t.clone().moveBy(0,-i);const r=new vh(e).excludeScrollbarsAndBorders();const s=[o,n];if(!s.every(e=>r.contains(e))){let{scrollX:s,scrollY:a}=e;if(Sh(o,r)){a-=r.top-t.top+i}else if(Mh(n,r)){a+=t.bottom-r.bottom+i}if(Ih(t,r)){s-=r.left-t.left+i}else if(Lh(t,r)){s+=t.right-r.right+i}e.scrollTo(s,a)}}function Ph(e,t){const i=Nh(e);let n,o;while(e!=i.document.body){o=t();n=new vh(e).excludeScrollbarsAndBorders();if(!n.contains(o)){if(Sh(o,n)){e.scrollTop-=n.top-o.top}else if(Mh(o,n)){e.scrollTop+=o.bottom-n.bottom}if(Ih(o,n)){e.scrollLeft-=n.left-o.left}else if(Lh(o,n)){e.scrollLeft+=o.right-n.right}}e=e.parentNode}}function Mh(e,t){return e.bottom>t.bottom}function Sh(e,t){return e.topt.right}function Nh(e){if(wh(e)){return e.startContainer.ownerDocument.defaultView}else{return e.ownerDocument.defaultView}}function Oh(e){if(wh(e)){let t=e.commonAncestorContainer;if(od(t)){t=t.parentNode}return t}else{return e.parentNode}}function Rh(e,t){const i=Nh(e);const n=new vh(e);if(i===t){return n}else{let e=i;while(e!=t){const t=e.frameElement;const i=new vh(t).excludeScrollbarsAndBorders();n.moveBy(i.left,i.top);e=e.parent}}return n}class zh{constructor(e){this.document=new bc(e);this.domConverter=new Dd(this.document);this.domRoots=new Map;this.set(\"isRenderingInProgress\",false);this.set(\"hasDomSelection\",false);this._renderer=new Ad(this.domConverter,this.document.selection);this._renderer.bind(\"isFocused\").to(this.document);this._initialDomRootAttributes=new WeakMap;this._observers=new Map;this._ongoingChange=false;this._postFixersInProgress=false;this._renderingDisabled=false;this._hasChangedSinceTheLastRendering=false;this._writer=new $c(this.document);this.addObserver(Gu);this.addObserver(mh);this.addObserver(gh);this.addObserver(Ju);this.addObserver(hh);this.addObserver(ph);if(Tc.isAndroid){this.addObserver(bh)}hd(this);Fc(this);this.on(\"render\",()=>{this._render();this.document.fire(\"layoutChanged\");this._hasChangedSinceTheLastRendering=false});this.listenTo(this.document.selection,\"change\",()=>{this._hasChangedSinceTheLastRendering=true})}attachDomRoot(e,t=\"main\"){const i=this.document.getRoot(t);i._name=e.tagName.toLowerCase();const n={};for(const{name:t,value:o}of Array.from(e.attributes)){n[t]=o;if(t===\"class\"){this._writer.addClass(o.split(\" \"),i)}else{this._writer.setAttribute(t,o,i)}}this._initialDomRootAttributes.set(e,n);const o=()=>{this._writer.setAttribute(\"contenteditable\",!i.isReadOnly,i);if(i.isReadOnly){this._writer.addClass(\"ck-read-only\",i)}else{this._writer.removeClass(\"ck-read-only\",i)}};o();this.domRoots.set(t,e);this.domConverter.bindElements(e,i);this._renderer.markToSync(\"children\",i);this._renderer.markToSync(\"attributes\",i);this._renderer.domDocuments.add(e.ownerDocument);i.on(\"change:children\",(e,t)=>this._renderer.markToSync(\"children\",t));i.on(\"change:attributes\",(e,t)=>this._renderer.markToSync(\"attributes\",t));i.on(\"change:text\",(e,t)=>this._renderer.markToSync(\"text\",t));i.on(\"change:isReadOnly\",()=>this.change(o));i.on(\"change\",()=>{this._hasChangedSinceTheLastRendering=true});for(const i of this._observers.values()){i.observe(e,t)}}detachDomRoot(e){const t=this.domRoots.get(e);Array.from(t.attributes).forEach(({name:e})=>t.removeAttribute(e));const i=this._initialDomRootAttributes.get(t);for(const e in i){t.setAttribute(e,i[e])}this.domRoots.delete(e);this.domConverter.unbindDomElement(t)}getDomRoot(e=\"main\"){return this.domRoots.get(e)}addObserver(e){let t=this._observers.get(e);if(t){return t}t=new e(this);this._observers.set(e,t);for(const[e,i]of this.domRoots){t.observe(i,e)}t.enable();return t}getObserver(e){return this._observers.get(e)}disableObservers(){for(const e of this._observers.values()){e.disable()}}enableObservers(){for(const e of this._observers.values()){e.enable()}}scrollToTheSelection(){const e=this.document.selection.getFirstRange();if(e){Ch({target:this.domConverter.viewRangeToDom(e),viewportOffset:20})}}focus(){if(!this.document.isFocused){const e=this.document.selection.editableElement;if(e){this.domConverter.focus(e);this.forceRender()}else{}}}change(e){if(this.isRenderingInProgress||this._postFixersInProgress){throw new ss[\"b\"](\"cannot-change-view-tree: \"+\"Attempting to make changes to the view when it is in an incorrect state: rendering or post-fixers are in progress. \"+\"This may cause some unexpected behavior and inconsistency between the DOM and the view.\",this)}try{if(this._ongoingChange){return e(this._writer)}this._ongoingChange=true;const t=e(this._writer);this._ongoingChange=false;if(!this._renderingDisabled&&this._hasChangedSinceTheLastRendering){this._postFixersInProgress=true;this.document._callPostFixers(this._writer);this._postFixersInProgress=false;this.fire(\"render\")}return t}catch(e){ss[\"b\"].rethrowUnexpectedError(e,this)}}forceRender(){this._hasChangedSinceTheLastRendering=true;this.change(()=>{})}destroy(){for(const e of this._observers.values()){e.destroy()}this.document.destroy();this.stopListening()}createPositionAt(e,t){return uc._createAt(e,t)}createPositionAfter(e){return uc._createAfter(e)}createPositionBefore(e){return uc._createBefore(e)}createRange(e,t){return new hc(e,t)}createRangeOn(e){return hc._createOn(e)}createRangeIn(e){return hc._createIn(e)}createSelection(e,t,i){return new gc(e,t,i)}_disableRendering(e){this._renderingDisabled=e;if(e==false){this.change(()=>{})}}_render(){this.isRenderingInProgress=true;this.disableObservers();this._renderer.render();this.enableObservers();this.isRenderingInProgress=false}}ys(zh,Jl);class Dh{constructor(e){this.parent=null;this._attrs=Ws(e)}get index(){let e;if(!this.parent){return null}if((e=this.parent.getChildIndex(this))===null){throw new ss[\"b\"](\"model-node-not-found-in-parent: The node's parent does not contain this node.\",this)}return e}get startOffset(){let e;if(!this.parent){return null}if((e=this.parent.getChildStartOffset(this))===null){throw new ss[\"b\"](\"model-node-not-found-in-parent: The node's parent does not contain this node.\",this)}return e}get offsetSize(){return 1}get endOffset(){if(!this.parent){return null}return this.startOffset+this.offsetSize}get nextSibling(){const e=this.index;return e!==null&&this.parent.getChild(e+1)||null}get previousSibling(){const e=this.index;return e!==null&&this.parent.getChild(e-1)||null}get root(){let e=this;while(e.parent){e=e.parent}return e}isAttached(){return this.root.is(\"rootElement\")}getPath(){const e=[];let t=this;while(t.parent){e.unshift(t.startOffset);t=t.parent}return e}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let i=e.includeSelf?this:this.parent;while(i){t[e.parentFirst?\"push\":\"unshift\"](i);i=i.parent}return t}getCommonAncestor(e,t={}){const i=this.getAncestors(t);const n=e.getAncestors(t);let o=0;while(i[o]==n[o]&&i[o]){o++}return o===0?null:i[o-1]}isBefore(e){if(this==e){return false}if(this.root!==e.root){return false}const t=this.getPath();const i=e.getPath();const n=Rs(t,i);switch(n){case\"prefix\":return true;case\"extension\":return false;default:return t[n]{e[t[0]]=t[1];return e},{})}return e}is(e){return e===\"node\"||e===\"model:node\"}_clone(){return new Dh(this._attrs)}_remove(){this.parent._removeChildren(this.index)}_setAttribute(e,t){this._attrs.set(e,t)}_setAttributesTo(e){this._attrs=Ws(e)}_removeAttribute(e){return this._attrs.delete(e)}_clearAttributes(){this._attrs.clear()}}class jh extends Dh{constructor(e,t){super(t);this._data=e||\"\"}get offsetSize(){return this.data.length}get data(){return this._data}is(e){return e===\"text\"||e===\"model:text\"||e===\"node\"||e===\"model:node\"}toJSON(){const e=super.toJSON();e.data=this.data;return e}_clone(){return new jh(this.data,this.getAttributes())}static fromJSON(e){return new jh(e.data,e.attributes)}}class Bh{constructor(e,t,i){this.textNode=e;if(t<0||t>e.offsetSize){throw new ss[\"b\"](\"model-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.\",this)}if(i<0||t+i>e.offsetSize){throw new ss[\"b\"](\"model-textproxy-wrong-length: Given length value is incorrect.\",this)}this.data=e.data.substring(t,t+i);this.offsetInText=t}get startOffset(){return this.textNode.startOffset!==null?this.textNode.startOffset+this.offsetInText:null}get offsetSize(){return this.data.length}get endOffset(){return this.startOffset!==null?this.startOffset+this.offsetSize:null}get isPartial(){return this.offsetSize!==this.textNode.offsetSize}get parent(){return this.textNode.parent}get root(){return this.textNode.root}is(e){return e===\"textProxy\"||e===\"model:textProxy\"}getPath(){const e=this.textNode.getPath();if(e.length>0){e[e.length-1]+=this.offsetInText}return e}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let i=e.includeSelf?this:this.parent;while(i){t[e.parentFirst?\"push\":\"unshift\"](i);i=i.parent}return t}hasAttribute(e){return this.textNode.hasAttribute(e)}getAttribute(e){return this.textNode.getAttribute(e)}getAttributes(){return this.textNode.getAttributes()}getAttributeKeys(){return this.textNode.getAttributeKeys()}}class Vh{constructor(e){this._nodes=[];if(e){this._insertNodes(0,e)}}[Symbol.iterator](){return this._nodes[Symbol.iterator]()}get length(){return this._nodes.length}get maxOffset(){return this._nodes.reduce((e,t)=>e+t.offsetSize,0)}getNode(e){return this._nodes[e]||null}getNodeIndex(e){const t=this._nodes.indexOf(e);return t==-1?null:t}getNodeStartOffset(e){const t=this.getNodeIndex(e);return t===null?null:this._nodes.slice(0,t).reduce((e,t)=>e+t.offsetSize,0)}indexToOffset(e){if(e==this._nodes.length){return this.maxOffset}const t=this._nodes[e];if(!t){throw new ss[\"b\"](\"model-nodelist-index-out-of-bounds: Given index cannot be found in the node list.\",this)}return this.getNodeStartOffset(t)}offsetToIndex(e){let t=0;for(const i of this._nodes){if(e>=t&&ee.toJSON())}}class Fh extends Dh{constructor(e,t,i){super(t);this.name=e;this._children=new Vh;if(i){this._insertChild(0,i)}}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}is(e,t=null){if(!t){return e===\"element\"||e===\"model:element\"||e===this.name||e===\"model:\"+this.name||e===\"node\"||e===\"model:node\"}return t===this.name&&(e===\"element\"||e===\"model:element\")}getChild(e){return this._children.getNode(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}offsetToIndex(e){return this._children.offsetToIndex(e)}getNodeByPath(e){let t=this;for(const i of e){t=t.getChild(t.offsetToIndex(i))}return t}toJSON(){const e=super.toJSON();e.name=this.name;if(this._children.length>0){e.children=[];for(const t of this._children){e.children.push(t.toJSON())}}return e}_clone(e=false){const t=e?Array.from(this._children).map(e=>e._clone(true)):null;return new Fh(this.name,this.getAttributes(),t)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){const i=Hh(t);for(const e of i){if(e.parent!==null){e._remove()}e.parent=this}this._children._insertNodes(e,i)}_removeChildren(e,t=1){const i=this._children._removeNodes(e,t);for(const e of i){e.parent=null}return i}static fromJSON(e){let t=null;if(e.children){t=[];for(const i of e.children){if(i.name){t.push(Fh.fromJSON(i))}else{t.push(jh.fromJSON(i))}}}return new Fh(e.name,e.attributes,t)}}function Hh(e){if(typeof e==\"string\"){return[new jh(e)]}if(!vs(e)){e=[e]}return Array.from(e).map(e=>{if(typeof e==\"string\"){return new jh(e)}if(e instanceof Bh){return new jh(e.data,e.getAttributes())}return e})}class Wh{constructor(e={}){if(!e.boundaries&&!e.startPosition){throw new ss[\"b\"](\"model-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.\",null)}const t=e.direction||\"forward\";if(t!=\"forward\"&&t!=\"backward\"){throw new ss[\"b\"](\"model-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.\",e,{direction:t})}this.direction=t;this.boundaries=e.boundaries||null;if(e.startPosition){this.position=e.startPosition.clone()}else{this.position=qh._createAt(this.boundaries[this.direction==\"backward\"?\"end\":\"start\"])}this.position.stickiness=\"toNone\";this.singleCharacters=!!e.singleCharacters;this.shallow=!!e.shallow;this.ignoreElementEnd=!!e.ignoreElementEnd;this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null;this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null;this._visitedParent=this.position.parent}[Symbol.iterator](){return this}skip(e){let t,i,n,o;do{n=this.position;o=this._visitedParent;({done:t,value:i}=this.next())}while(!t&&e(i));if(!t){this.position=n;this._visitedParent=o}}next(){if(this.direction==\"forward\"){return this._next()}else{return this._previous()}}_next(){const e=this.position;const t=this.position.clone();const i=this._visitedParent;if(i.parent===null&&t.offset===i.maxOffset){return{done:true}}if(i===this._boundaryEndParent&&t.offset==this.boundaries.end.offset){return{done:true}}const n=t.parent;const o=$h(t,n);const r=o?o:Gh(t,n,o);if(r instanceof Fh){if(!this.shallow){t.path.push(0);this._visitedParent=r}else{t.offset++}this.position=t;return Uh(\"elementStart\",r,e,t,1)}else if(r instanceof jh){let n;if(this.singleCharacters){n=1}else{let e=r.endOffset;if(this._boundaryEndParent==i&&this.boundaries.end.offsete){e=this.boundaries.start.offset}n=t.offset-e}const o=t.offset-r.startOffset;const s=new Bh(r,o-n,n);t.offset-=n;this.position=t;return Uh(\"text\",s,e,t,n)}else{t.path.pop();this.position=t;this._visitedParent=i.parent;return Uh(\"elementStart\",i,e,t,1)}}}function Uh(e,t,i,n,o){return{done:false,value:{type:e,item:t,previousPosition:i,nextPosition:n,length:o}}}class qh{constructor(e,t,i=\"toNone\"){if(!e.is(\"element\")&&!e.is(\"documentFragment\")){throw new ss[\"b\"](\"model-position-root-invalid: Position root invalid.\",e)}if(!(t instanceof Array)||t.length===0){throw new ss[\"b\"](\"model-position-path-incorrect-format: Position path must be an array with at least one item.\",e,{path:t})}if(e.is(\"rootElement\")){t=t.slice()}else{t=[...e.getPath(),...t];e=e.root}this.root=e;this.path=t;this.stickiness=i}get offset(){return this.path[this.path.length-1]}set offset(e){this.path[this.path.length-1]=e}get parent(){let e=this.root;for(let t=0;ti.path.length){if(t.offset!==o.maxOffset){return false}t.path=t.path.slice(0,-1);o=o.parent;t.offset++}else{if(i.offset!==0){return false}i.path=i.path.slice(0,-1)}}}is(e){return e===\"position\"||e===\"model:position\"}hasSameParentAs(e){if(this.root!==e.root){return false}const t=this.getParentPath();const i=e.getParentPath();return Rs(t,i)==\"same\"}getTransformedByOperation(e){let t;switch(e.type){case\"insert\":t=this._getTransformedByInsertOperation(e);break;case\"move\":case\"remove\":case\"reinsert\":t=this._getTransformedByMoveOperation(e);break;case\"split\":t=this._getTransformedBySplitOperation(e);break;case\"merge\":t=this._getTransformedByMergeOperation(e);break;default:t=qh._createAt(this);break}return t}_getTransformedByInsertOperation(e){return this._getTransformedByInsertion(e.position,e.howMany)}_getTransformedByMoveOperation(e){return this._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany)}_getTransformedBySplitOperation(e){const t=e.movedRange;const i=t.containsPosition(this)||t.start.isEqual(this)&&this.stickiness==\"toNext\";if(i){return this._getCombined(e.splitPosition,e.moveTargetPosition)}else{if(e.graveyardPosition){return this._getTransformedByMove(e.graveyardPosition,e.insertionPosition,1)}else{return this._getTransformedByInsertion(e.insertionPosition,1)}}}_getTransformedByMergeOperation(e){const t=e.movedRange;const i=t.containsPosition(this)||t.start.isEqual(this);let n;if(i){n=this._getCombined(e.sourcePosition,e.targetPosition);if(e.sourcePosition.isBefore(e.targetPosition)){n=n._getTransformedByDeletion(e.deletionPosition,1)}}else if(this.isEqual(e.deletionPosition)){n=qh._createAt(e.deletionPosition)}else{n=this._getTransformedByMove(e.deletionPosition,e.graveyardPosition,1)}return n}_getTransformedByDeletion(e,t){const i=qh._createAt(this);if(this.root!=e.root){return i}if(Rs(e.getParentPath(),this.getParentPath())==\"same\"){if(e.offsetthis.offset){return null}else{i.offset-=t}}}else if(Rs(e.getParentPath(),this.getParentPath())==\"prefix\"){const n=e.path.length-1;if(e.offset<=this.path[n]){if(e.offset+t>this.path[n]){return null}else{i.path[n]-=t}}}return i}_getTransformedByInsertion(e,t){const i=qh._createAt(this);if(this.root!=e.root){return i}if(Rs(e.getParentPath(),this.getParentPath())==\"same\"){if(e.offsett+1){const t=n.maxOffset-i.offset;if(t!==0){e.push(new Kh(i,i.getShiftedBy(t)))}i.path=i.path.slice(0,-1);i.offset++;n=n.parent}while(i.path.length<=this.end.path.length){const t=this.end.path[i.path.length-1];const n=t-i.offset;if(n!==0){e.push(new Kh(i,i.getShiftedBy(n)))}i.offset=t;i.path.push(0)}return e}getWalker(e={}){e.boundaries=this;return new Wh(e)}*getItems(e={}){e.boundaries=this;e.ignoreElementEnd=true;const t=new Wh(e);for(const e of t){yield e.item}}*getPositions(e={}){e.boundaries=this;const t=new Wh(e);yield t.position;for(const e of t){yield e.nextPosition}}getTransformedByOperation(e){switch(e.type){case\"insert\":return this._getTransformedByInsertOperation(e);case\"move\":case\"remove\":case\"reinsert\":return this._getTransformedByMoveOperation(e);case\"split\":return[this._getTransformedBySplitOperation(e)];case\"merge\":return[this._getTransformedByMergeOperation(e)]}return[new Kh(this.start,this.end)]}getTransformedByOperations(e){const t=[new Kh(this.start,this.end)];for(const i of e){for(let e=0;e0?new this(i,n):new this(n,i)}static _createIn(e){return new this(qh._createAt(e,0),qh._createAt(e,e.maxOffset))}static _createOn(e){return this._createFromPositionAndShift(qh._createBefore(e),e.offsetSize)}static _createFromRanges(e){if(e.length===0){throw new ss[\"b\"](\"range-create-from-ranges-empty-array: At least one range has to be passed.\",null)}else if(e.length==1){return e[0].clone()}const t=e[0];e.sort((e,t)=>e.start.isAfter(t.start)?1:-1);const i=e.indexOf(t);const n=new this(t.start,t.end);if(i>0){for(let t=i-1;true;t++){if(e[t].end.isEqual(n.start)){n.start=qh._createAt(e[t].start)}else{break}}}for(let t=i+1;t{if(t.viewPosition){return}const i=this._modelToViewMapping.get(t.modelPosition.parent);t.viewPosition=this._findPositionIn(i,t.modelPosition.offset)},{priority:\"low\"});this.on(\"viewToModelPosition\",(e,t)=>{if(t.modelPosition){return}const i=this.findMappedViewAncestor(t.viewPosition);const n=this._viewToModelMapping.get(i);const o=this._toModelOffset(t.viewPosition.parent,t.viewPosition.offset,i);t.modelPosition=qh._createAt(n,o)},{priority:\"low\"})}bindElements(e,t){this._modelToViewMapping.set(e,t);this._viewToModelMapping.set(t,e)}unbindViewElement(e){const t=this.toModelElement(e);this._viewToModelMapping.delete(e);if(this._elementToMarkerNames.has(e)){for(const t of this._elementToMarkerNames.get(e)){this._unboundMarkerNames.add(t)}}if(this._modelToViewMapping.get(t)==e){this._modelToViewMapping.delete(t)}}unbindModelElement(e){const t=this.toViewElement(e);this._modelToViewMapping.delete(e);if(this._viewToModelMapping.get(t)==e){this._viewToModelMapping.delete(t)}}bindElementToMarker(e,t){const i=this._markerNameToElements.get(t)||new Set;i.add(e);const n=this._elementToMarkerNames.get(e)||new Set;n.add(t);this._markerNameToElements.set(t,i);this._elementToMarkerNames.set(e,n)}unbindElementFromMarkerName(e,t){const i=this._markerNameToElements.get(t);if(i){i.delete(e);if(i.size==0){this._markerNameToElements.delete(t)}}const n=this._elementToMarkerNames.get(e);if(n){n.delete(t);if(n.size==0){this._elementToMarkerNames.delete(e)}}}flushUnboundMarkerNames(){const e=Array.from(this._unboundMarkerNames);this._unboundMarkerNames.clear();return e}clearBindings(){this._modelToViewMapping=new WeakMap;this._viewToModelMapping=new WeakMap;this._markerNameToElements=new Map;this._elementToMarkerNames=new Map;this._unboundMarkerNames=new Set}toModelElement(e){return this._viewToModelMapping.get(e)}toViewElement(e){return this._modelToViewMapping.get(e)}toModelRange(e){return new Kh(this.toModelPosition(e.start),this.toModelPosition(e.end))}toViewRange(e){return new hc(this.toViewPosition(e.start),this.toViewPosition(e.end))}toModelPosition(e){const t={viewPosition:e,mapper:this};this.fire(\"viewToModelPosition\",t);return t.modelPosition}toViewPosition(e,t={isPhantom:false}){const i={modelPosition:e,mapper:this,isPhantom:t.isPhantom};this.fire(\"modelToViewPosition\",i);return i.viewPosition}markerNameToElements(e){const t=this._markerNameToElements.get(e);if(!t){return null}const i=new Set;for(const e of t){if(e.is(\"attributeElement\")){for(const t of e.getElementsWithSameId()){i.add(t)}}else{i.add(e)}}return i}registerViewToModelLength(e,t){this._viewToModelLengthCallbacks.set(e,t)}findMappedViewAncestor(e){let t=e.parent;while(!this._viewToModelMapping.has(t)){t=t.parent}return t}_toModelOffset(e,t,i){if(i!=e){const n=this._toModelOffset(e.parent,e.index,i);const o=this._toModelOffset(e,t,e);return n+o}if(e.is(\"text\")){return t}let n=0;for(let i=0;i1?t[0]+\":\"+t[1]:t[0]}class Xh{constructor(e){this.conversionApi=ql({dispatcher:this},e)}convertChanges(e,t,i){for(const t of e.getMarkersToRemove()){this.convertMarkerRemove(t.name,t.range,i)}for(const t of e.getChanges()){if(t.type==\"insert\"){this.convertInsert(Kh._createFromPositionAndShift(t.position,t.length),i)}else if(t.type==\"remove\"){this.convertRemove(t.position,t.length,t.name,i)}else{this.convertAttribute(t.range,t.attributeKey,t.attributeOldValue,t.attributeNewValue,i)}}for(const e of this.conversionApi.mapper.flushUnboundMarkerNames()){const n=t.get(e).getRange();this.convertMarkerRemove(e,n,i);this.convertMarkerAdd(e,n,i)}for(const t of e.getMarkersToAdd()){this.convertMarkerAdd(t.name,t.range,i)}}convertInsert(e,t){this.conversionApi.writer=t;this.conversionApi.consumable=this._createInsertConsumable(e);for(const t of e){const e=t.item;const i=Kh._createFromPositionAndShift(t.previousPosition,t.length);const n={item:e,range:i};this._testAndFire(\"insert\",n);for(const t of e.getAttributeKeys()){n.attributeKey=t;n.attributeOldValue=null;n.attributeNewValue=e.getAttribute(t);this._testAndFire(`attribute:${t}`,n)}}this._clearConversionApi()}convertRemove(e,t,i,n){this.conversionApi.writer=n;this.fire(\"remove:\"+i,{position:e,length:t},this.conversionApi);this._clearConversionApi()}convertAttribute(e,t,i,n,o){this.conversionApi.writer=o;this.conversionApi.consumable=this._createConsumableForRange(e,`attribute:${t}`);for(const o of e){const e=o.item;const r=Kh._createFromPositionAndShift(o.previousPosition,o.length);const s={item:e,range:r,attributeKey:t,attributeOldValue:i,attributeNewValue:n};this._testAndFire(`attribute:${t}`,s)}this._clearConversionApi()}convertSelection(e,t,i){const n=Array.from(t.getMarkersAtPosition(e.getFirstPosition()));this.conversionApi.writer=i;this.conversionApi.consumable=this._createSelectionConsumable(e,n);this.fire(\"selection\",{selection:e},this.conversionApi);if(!e.isCollapsed){return}for(const t of n){const i=t.getRange();if(!ef(e.getFirstPosition(),t,this.conversionApi.mapper)){continue}const n={item:e,markerName:t.name,markerRange:i};if(this.conversionApi.consumable.test(e,\"addMarker:\"+t.name)){this.fire(\"addMarker:\"+t.name,n,this.conversionApi)}}for(const t of e.getAttributeKeys()){const i={item:e,range:e.getFirstRange(),attributeKey:t,attributeOldValue:null,attributeNewValue:e.getAttribute(t)};if(this.conversionApi.consumable.test(e,\"attribute:\"+i.attributeKey)){this.fire(\"attribute:\"+i.attributeKey+\":$text\",i,this.conversionApi)}}this._clearConversionApi()}convertMarkerAdd(e,t,i){if(!t.root.document||t.root.rootName==\"$graveyard\"){return}this.conversionApi.writer=i;const n=\"addMarker:\"+e;const o=new Qh;o.add(t,n);this.conversionApi.consumable=o;this.fire(n,{markerName:e,markerRange:t},this.conversionApi);if(!o.test(t,n)){return}this.conversionApi.consumable=this._createConsumableForRange(t,n);for(const i of t.getItems()){if(!this.conversionApi.consumable.test(i,n)){continue}const o={item:i,range:Kh._createOn(i),markerName:e,markerRange:t};this.fire(n,o,this.conversionApi)}this._clearConversionApi()}convertMarkerRemove(e,t,i){if(!t.root.document||t.root.rootName==\"$graveyard\"){return}this.conversionApi.writer=i;this.fire(\"removeMarker:\"+e,{markerName:e,markerRange:t},this.conversionApi);this._clearConversionApi()}_createInsertConsumable(e){const t=new Qh;for(const i of e){const e=i.item;t.add(e,\"insert\");for(const i of e.getAttributeKeys()){t.add(e,\"attribute:\"+i)}}return t}_createConsumableForRange(e,t){const i=new Qh;for(const n of e.getItems()){i.add(n,t)}return i}_createSelectionConsumable(e,t){const i=new Qh;i.add(e,\"selection\");for(const n of t){i.add(e,\"addMarker:\"+n.name)}for(const t of e.getAttributeKeys()){i.add(e,\"attribute:\"+t)}return i}_testAndFire(e,t){if(!this.conversionApi.consumable.test(t.item,e)){return}const i=t.item.name||\"$text\";this.fire(e+\":\"+i,t,this.conversionApi)}_clearConversionApi(){delete this.conversionApi.writer;delete this.conversionApi.consumable}}ys(Xh,ds);function ef(e,t,i){const n=t.getRange();const o=Array.from(e.getAncestors());o.shift();o.reverse();const r=o.some(e=>{if(n.containsItem(e)){const t=i.toViewElement(e);return!!t.getCustomProperty(\"addHighlight\")}});return!r}class tf{constructor(e,t,i){this._lastRangeBackward=false;this._ranges=[];this._attrs=new Map;if(e){this.setTo(e,t,i)}}get anchor(){if(this._ranges.length>0){const e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.end:e.start}return null}get focus(){if(this._ranges.length>0){const e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.start:e.end}return null}get isCollapsed(){const e=this._ranges.length;if(e===1){return this._ranges[0].isCollapsed}else{return false}}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}isEqual(e){if(this.rangeCount!=e.rangeCount){return false}else if(this.rangeCount===0){return true}if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus)){return false}for(const t of this._ranges){let i=false;for(const n of e._ranges){if(t.isEqual(n)){i=true;break}}if(!i){return false}}return true}*getRanges(){for(const e of this._ranges){yield new Kh(e.start,e.end)}}getFirstRange(){let e=null;for(const t of this._ranges){if(!e||t.start.isBefore(e.start)){e=t}}return e?new Kh(e.start,e.end):null}getLastRange(){let e=null;for(const t of this._ranges){if(!e||t.end.isAfter(e.end)){e=t}}return e?new Kh(e.start,e.end):null}getFirstPosition(){const e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){const e=this.getLastRange();return e?e.end.clone():null}setTo(e,t,i){if(e===null){this._setRanges([])}else if(e instanceof tf){this._setRanges(e.getRanges(),e.isBackward)}else if(e&&typeof e.getRanges==\"function\"){this._setRanges(e.getRanges(),e.isBackward)}else if(e instanceof Kh){this._setRanges([e],!!t&&!!t.backward)}else if(e instanceof qh){this._setRanges([new Kh(e)])}else if(e instanceof Dh){const n=!!i&&!!i.backward;let o;if(t==\"in\"){o=Kh._createIn(e)}else if(t==\"on\"){o=Kh._createOn(e)}else if(t!==undefined){o=new Kh(qh._createAt(e,t))}else{throw new ss[\"b\"](\"model-selection-setTo-required-second-parameter: \"+\"selection.setTo requires the second parameter when the first parameter is a node.\",[this,e])}this._setRanges([o],n)}else if(vs(e)){this._setRanges(e,t&&!!t.backward)}else{throw new ss[\"b\"](\"model-selection-setTo-not-selectable: Cannot set the selection to the given place.\",[this,e])}}_setRanges(e,t=false){e=Array.from(e);const i=e.some(t=>{if(!(t instanceof Kh)){throw new ss[\"b\"](\"model-selection-set-ranges-not-range: \"+\"Selection range set to an object that is not an instance of model.Range.\",[this,e])}return this._ranges.every(e=>!e.isEqual(t))});if(e.length===this._ranges.length&&!i){return}this._removeAllRanges();for(const t of e){this._pushRange(t)}this._lastRangeBackward=!!t;this.fire(\"change:range\",{directChange:true})}setFocus(e,t){if(this.anchor===null){throw new ss[\"b\"](\"model-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.\",[this,e])}const i=qh._createAt(e,t);if(i.compareWith(this.focus)==\"same\"){return}const n=this.anchor;if(this._ranges.length){this._popRange()}if(i.compareWith(n)==\"before\"){this._pushRange(new Kh(i,n));this._lastRangeBackward=true}else{this._pushRange(new Kh(n,i));this._lastRangeBackward=false}this.fire(\"change:range\",{directChange:true})}getAttribute(e){return this._attrs.get(e)}getAttributes(){return this._attrs.entries()}getAttributeKeys(){return this._attrs.keys()}hasAttribute(e){return this._attrs.has(e)}removeAttribute(e){if(this.hasAttribute(e)){this._attrs.delete(e);this.fire(\"change:attribute\",{attributeKeys:[e],directChange:true})}}setAttribute(e,t){if(this.getAttribute(e)!==t){this._attrs.set(e,t);this.fire(\"change:attribute\",{attributeKeys:[e],directChange:true})}}getSelectedElement(){if(this.rangeCount!==1){return null}return this.getFirstRange().getContainedElement()}is(e){return e===\"selection\"||e===\"model:selection\"}*getSelectedBlocks(){const e=new WeakSet;for(const t of this.getRanges()){const i=rf(t.start,e);if(i&&sf(i,t)){yield i}for(const i of t.getWalker()){const n=i.item;if(i.type==\"elementEnd\"&&of(n,e,t)){yield n}}const n=rf(t.end,e);if(n&&!t.end.isTouching(qh._createAt(n,0))&&sf(n,t)){yield n}}}containsEntireContent(e=this.anchor.root){const t=qh._createAt(e,0);const i=qh._createAt(e,\"end\");return t.isTouching(this.getFirstPosition())&&i.isTouching(this.getLastPosition())}_pushRange(e){this._checkRange(e);this._ranges.push(new Kh(e.start,e.end))}_checkRange(e){for(let t=0;t0){this._popRange()}}_popRange(){this._ranges.pop()}}ys(tf,ds);function nf(e,t){if(t.has(e)){return false}t.add(e);return e.root.document.model.schema.isBlock(e)&&e.parent}function of(e,t,i){return nf(e,t)&&sf(e,i)}function rf(e,t){const i=e.parent;const n=i.root.document.model.schema;const o=e.parent.getAncestors({parentFirst:true,includeSelf:true});let r=false;const s=o.find(e=>{if(r){return false}r=n.isLimit(e);return!r&&nf(e,t)});o.forEach(e=>t.add(e));return s}function sf(e,t){const i=af(e);if(!i){return true}const n=t.containsRange(Kh._createOn(i),true);return!n}function af(e){const t=e.root.document.model.schema;let i=e.parent;while(i){if(t.isBlock(i)){return i}i=i.parent}}class lf extends Kh{constructor(e,t){super(e,t);cf.call(this)}detach(){this.stopListening()}is(e){return e===\"liveRange\"||e===\"model:liveRange\"||e==\"range\"||e===\"model:range\"}toRange(){return new Kh(this.start,this.end)}static fromRange(e){return new lf(e.start,e.end)}}function cf(){this.listenTo(this.root.document.model,\"applyOperation\",(e,t)=>{const i=t[0];if(!i.isDocumentOperation){return}df.call(this,i)},{priority:\"low\"})}function df(e){const t=this.getTransformedByOperation(e);const i=Kh._createFromRanges(t);const n=!i.isEqual(this);const o=uf(this,e);let r=null;if(n){if(i.root.rootName==\"$graveyard\"){if(e.type==\"remove\"){r=e.sourcePosition}else{r=e.deletionPosition}}const t=this.toRange();this.start=i.start;this.end=i.end;this.fire(\"change:range\",t,{deletionPosition:r})}else if(o){this.fire(\"change:content\",this.toRange(),{deletionPosition:r})}}function uf(e,t){switch(t.type){case\"insert\":return e.containsPosition(t.position);case\"move\":case\"remove\":case\"reinsert\":case\"merge\":return e.containsPosition(t.sourcePosition)||e.start.isEqual(t.sourcePosition)||e.containsPosition(t.targetPosition);case\"split\":return e.containsPosition(t.splitPosition)||e.containsPosition(t.insertionPosition)}return false}ys(lf,ds);const hf=\"selection:\";class ff{constructor(e){this._selection=new mf(e);this._selection.delegate(\"change:range\").to(this);this._selection.delegate(\"change:attribute\").to(this);this._selection.delegate(\"change:marker\").to(this)}get isCollapsed(){return this._selection.isCollapsed}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get rangeCount(){return this._selection.rangeCount}get hasOwnRange(){return this._selection.hasOwnRange}get isBackward(){return this._selection.isBackward}get isGravityOverridden(){return this._selection.isGravityOverridden}get markers(){return this._selection.markers}get _ranges(){return this._selection._ranges}getRanges(){return this._selection.getRanges()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getSelectedBlocks(){return this._selection.getSelectedBlocks()}getSelectedElement(){return this._selection.getSelectedElement()}containsEntireContent(e){return this._selection.containsEntireContent(e)}destroy(){this._selection.destroy()}getAttributeKeys(){return this._selection.getAttributeKeys()}getAttributes(){return this._selection.getAttributes()}getAttribute(e){return this._selection.getAttribute(e)}hasAttribute(e){return this._selection.hasAttribute(e)}refresh(){this._selection._updateMarkers();this._selection._updateAttributes(false)}is(e){return e===\"selection\"||e==\"model:selection\"||e==\"documentSelection\"||e==\"model:documentSelection\"}_setFocus(e,t){this._selection.setFocus(e,t)}_setTo(e,t,i){this._selection.setTo(e,t,i)}_setAttribute(e,t){this._selection.setAttribute(e,t)}_removeAttribute(e){this._selection.removeAttribute(e)}_getStoredAttributes(){return this._selection._getStoredAttributes()}_overrideGravity(){return this._selection.overrideGravity()}_restoreGravity(e){this._selection.restoreGravity(e)}static _getStoreAttributeKey(e){return hf+e}static _isStoreAttributeKey(e){return e.startsWith(hf)}}ys(ff,ds);class mf extends tf{constructor(e){super();this.markers=new xs({idProperty:\"name\"});this._model=e.model;this._document=e;this._attributePriority=new Map;this._fixGraveyardRangesData=[];this._hasChangedRange=false;this._overriddenGravityRegister=new Set;this.listenTo(this._model,\"applyOperation\",(e,t)=>{const i=t[0];if(!i.isDocumentOperation||i.type==\"marker\"||i.type==\"rename\"||i.type==\"noop\"){return}while(this._fixGraveyardRangesData.length){const{liveRange:e,sourcePosition:t}=this._fixGraveyardRangesData.shift();this._fixGraveyardSelection(e,t)}if(this._hasChangedRange){this._hasChangedRange=false;this.fire(\"change:range\",{directChange:false})}},{priority:\"lowest\"});this.on(\"change:range\",()=>{for(const e of this.getRanges()){if(!this._document._validateSelectionRange(e)){throw new ss[\"b\"](\"document-selection-wrong-position: Range from document selection starts or ends at incorrect position.\",this,{range:e})}}});this.listenTo(this._model.markers,\"update\",()=>this._updateMarkers());this.listenTo(this._document,\"change\",(e,t)=>{pf(this._model,t)})}get isCollapsed(){const e=this._ranges.length;return e===0?this._document._getDefaultRange().isCollapsed:super.isCollapsed}get anchor(){return super.anchor||this._document._getDefaultRange().start}get focus(){return super.focus||this._document._getDefaultRange().end}get rangeCount(){return this._ranges.length?this._ranges.length:1}get hasOwnRange(){return this._ranges.length>0}get isGravityOverridden(){return!!this._overriddenGravityRegister.size}destroy(){for(let e=0;e{this._hasChangedRange=true;if(t.root==this._document.graveyard){this._fixGraveyardRangesData.push({liveRange:t,sourcePosition:n.deletionPosition})}});return t}_updateMarkers(){const e=[];let t=false;for(const t of this._model.markers){const i=t.getRange();for(const n of this.getRanges()){if(i.containsRange(n,!n.isCollapsed)){e.push(t)}}}const i=Array.from(this.markers);for(const i of e){if(!this.markers.has(i)){this.markers.add(i);t=true}}for(const i of Array.from(this.markers)){if(!e.includes(i)){this.markers.remove(i);t=true}}if(t){this.fire(\"change:marker\",{oldMarkers:i,directChange:false})}}_updateAttributes(e){const t=Ws(this._getSurroundingAttributes());const i=Ws(this.getAttributes());if(e){this._attributePriority=new Map;this._attrs=new Map}else{for(const[e,t]of this._attributePriority){if(t==\"low\"){this._attrs.delete(e);this._attributePriority.delete(e)}}}this._setAttributesTo(t);const n=[];for(const[e,t]of this.getAttributes()){if(!i.has(e)||i.get(e)!==t){n.push(e)}}for(const[e]of i){if(!this.hasAttribute(e)){n.push(e)}}if(n.length>0){this.fire(\"change:attribute\",{attributeKeys:n,directChange:false})}}_setAttribute(e,t,i=true){const n=i?\"normal\":\"low\";if(n==\"low\"&&this._attributePriority.get(e)==\"normal\"){return false}const o=super.getAttribute(e);if(o===t){return false}this._attrs.set(e,t);this._attributePriority.set(e,n);return true}_removeAttribute(e,t=true){const i=t?\"normal\":\"low\";if(i==\"low\"&&this._attributePriority.get(e)==\"normal\"){return false}this._attributePriority.set(e,i);if(!super.hasAttribute(e)){return false}this._attrs.delete(e);return true}_setAttributesTo(e){const t=new Set;for(const[t,i]of this.getAttributes()){if(e.get(t)===i){continue}this._removeAttribute(t,false)}for(const[i,n]of e){const e=this._setAttribute(i,n,false);if(e){t.add(i)}}return t}*_getStoredAttributes(){const e=this.getFirstPosition().parent;if(this.isCollapsed&&e.isEmpty){for(const t of e.getAttributeKeys()){if(t.startsWith(hf)){const i=t.substr(hf.length);yield[i,e.getAttribute(t)]}}}}_getSurroundingAttributes(){const e=this.getFirstPosition();const t=this._model.schema;let i=null;if(!this.isCollapsed){const e=this.getFirstRange();for(const n of e){if(n.item.is(\"element\")&&t.isObject(n.item)){break}if(n.type==\"text\"){i=n.item.getAttributes();break}}}else{const t=e.textNode?e.textNode:e.nodeBefore;const n=e.textNode?e.textNode:e.nodeAfter;if(!this.isGravityOverridden){i=gf(t)}if(!i){i=gf(n)}if(!this.isGravityOverridden&&!i){let e=t;while(e&&!i){e=e.previousSibling;i=gf(e)}}if(!i){let e=n;while(e&&!i){e=e.nextSibling;i=gf(e)}}if(!i){i=this._getStoredAttributes()}}return i}_fixGraveyardSelection(e,t){const i=t.clone();const n=this._model.schema.getNearestSelectionRange(i);const o=this._ranges.indexOf(e);this._ranges.splice(o,1);e.detach();if(n&&!bf(n,this)){const e=this._prepareRange(n);this._ranges.splice(o,0,e)}}}function gf(e){if(e instanceof Bh||e instanceof jh){return e.getAttributes()}return null}function pf(e,t){const i=e.document.differ;for(const n of i.getChanges()){if(n.type!=\"insert\"){continue}const i=n.position.parent;const o=n.length===i.maxOffset;if(o){e.enqueueChange(t,e=>{const t=Array.from(i.getAttributeKeys()).filter(e=>e.startsWith(hf));for(const n of t){e.removeAttribute(n,i)}})}}}function bf(e,t){return!t._ranges.every(t=>!e.isEqual(t))}class wf{constructor(e){this._dispatchers=e}add(e){for(const t of this._dispatchers){e(t)}return this}}var _f=1,kf=4;function vf(e){return Hr(e,_f|kf)}var yf=vf;class xf extends wf{elementToElement(e){return this.add(jf(e))}attributeToElement(e){return this.add(Bf(e))}attributeToAttribute(e){return this.add(Vf(e))}markerToElement(e){return this.add(Ff(e))}markerToHighlight(e){return this.add(Hf(e))}}function Af(){return(e,t,i)=>{if(!i.consumable.consume(t.item,\"insert\")){return}const n=i.writer;const o=i.mapper.toViewPosition(t.range.start);const r=n.createText(t.item.data);n.insert(o,r)}}function Cf(){return(e,t,i)=>{const n=i.mapper.toViewPosition(t.position);const o=t.position.getShiftedBy(t.length);const r=i.mapper.toViewPosition(o,{isPhantom:true});const s=i.writer.createRange(n,r);const a=i.writer.remove(s.getTrimmed());for(const e of i.writer.createRangeIn(a).getItems()){i.mapper.unbindViewElement(e)}}}function Tf(e,t){const i=e.createAttributeElement(\"span\",t.attributes);if(t.classes){i._addClass(t.classes)}if(t.priority){i._priority=t.priority}i._id=t.id;return i}function Ef(){return(e,t,i)=>{const n=t.selection;if(n.isCollapsed){return}if(!i.consumable.consume(n,\"selection\")){return}const o=[];for(const e of n.getRanges()){const t=i.mapper.toViewRange(e);o.push(t)}i.writer.setSelection(o,{backward:n.isBackward})}}function Pf(){return(e,t,i)=>{const n=t.selection;if(!n.isCollapsed){return}if(!i.consumable.consume(n,\"selection\")){return}const o=i.writer;const r=n.getFirstPosition();const s=i.mapper.toViewPosition(r);const a=o.breakAttributes(s);o.setSelection(a)}}function Mf(){return(e,t,i)=>{const n=i.writer;const o=n.document.selection;for(const e of o.getRanges()){if(e.isCollapsed){if(e.end.parent.isAttached()){i.writer.mergeAttributes(e.start)}}}n.setSelection(null)}}function Sf(e){return(t,i,n)=>{const o=e(i.attributeOldValue,n.writer);const r=e(i.attributeNewValue,n.writer);if(!o&&!r){return}if(!n.consumable.consume(i.item,t.name)){return}const s=n.writer;const a=s.document.selection;if(i.item instanceof tf||i.item instanceof ff){s.wrap(a.getFirstRange(),r)}else{let e=n.mapper.toViewRange(i.range);if(i.attributeOldValue!==null&&o){e=s.unwrap(e,o)}if(i.attributeNewValue!==null&&r){s.wrap(e,r)}}}}function If(e){return(t,i,n)=>{const o=e(i.item,n.writer);if(!o){return}if(!n.consumable.consume(i.item,\"insert\")){return}const r=n.mapper.toViewPosition(i.range.start);n.mapper.bindElements(i.item,o);n.writer.insert(r,o)}}function Lf(e){return(t,i,n)=>{i.isOpening=true;const o=e(i,n.writer);i.isOpening=false;const r=e(i,n.writer);if(!o||!r){return}const s=i.markerRange;if(s.isCollapsed&&!n.consumable.consume(s,t.name)){return}for(const e of s){if(!n.consumable.consume(e.item,t.name)){return}}const a=n.mapper;const l=n.writer;l.insert(a.toViewPosition(s.start),o);n.mapper.bindElementToMarker(o,i.markerName);if(!s.isCollapsed){l.insert(a.toViewPosition(s.end),r);n.mapper.bindElementToMarker(r,i.markerName)}t.stop()}}function Nf(){return(e,t,i)=>{const n=i.mapper.markerNameToElements(t.markerName);if(!n){return}for(const e of n){i.mapper.unbindElementFromMarkerName(e,t.markerName);i.writer.clear(i.writer.createRangeOn(e),e)}i.writer.clearClonedElementsGroup(t.markerName);e.stop()}}function Of(e){return(t,i,n)=>{const o=e(i.attributeOldValue,i);const r=e(i.attributeNewValue,i);if(!o&&!r){return}if(!n.consumable.consume(i.item,t.name)){return}const s=n.mapper.toViewElement(i.item);const a=n.writer;if(!s){throw new ss[\"b\"](\"conversion-attribute-to-attribute-on-text: \"+\"Trying to convert text node's attribute with attribute-to-attribute converter.\",[i,n])}if(i.attributeOldValue!==null&&o){if(o.key==\"class\"){const e=Array.isArray(o.value)?o.value:[o.value];for(const t of e){a.removeClass(t,s)}}else if(o.key==\"style\"){const e=Object.keys(o.value);for(const t of e){a.removeStyle(t,s)}}else{a.removeAttribute(o.key,s)}}if(i.attributeNewValue!==null&&r){if(r.key==\"class\"){const e=Array.isArray(r.value)?r.value:[r.value];for(const t of e){a.addClass(t,s)}}else if(r.key==\"style\"){const e=Object.keys(r.value);for(const t of e){a.setStyle(t,r.value[t],s)}}else{a.setAttribute(r.key,r.value,s)}}}}function Rf(e){return(t,i,n)=>{if(!i.item){return}if(!(i.item instanceof tf||i.item instanceof ff)&&!i.item.is(\"textProxy\")){return}const o=Gf(e,i,n);if(!o){return}if(!n.consumable.consume(i.item,t.name)){return}const r=n.writer;const s=Tf(r,o);const a=r.document.selection;if(i.item instanceof tf||i.item instanceof ff){r.wrap(a.getFirstRange(),s,a)}else{const e=n.mapper.toViewRange(i.range);const t=r.wrap(e,s);for(const e of t.getItems()){if(e.is(\"attributeElement\")&&e.isSimilar(s)){n.mapper.bindElementToMarker(e,i.markerName);break}}}}}function zf(e){return(t,i,n)=>{if(!i.item){return}if(!(i.item instanceof Fh)){return}const o=Gf(e,i,n);if(!o){return}if(!n.consumable.test(i.item,t.name)){return}const r=n.mapper.toViewElement(i.item);if(r&&r.getCustomProperty(\"addHighlight\")){n.consumable.consume(i.item,t.name);for(const e of Kh._createIn(i.item)){n.consumable.consume(e.item,t.name)}r.getCustomProperty(\"addHighlight\")(r,o,n.writer);n.mapper.bindElementToMarker(r,i.markerName)}}}function Df(e){return(t,i,n)=>{if(i.markerRange.isCollapsed){return}const o=Gf(e,i,n);if(!o){return}const r=Tf(n.writer,o);const s=n.mapper.markerNameToElements(i.markerName);if(!s){return}for(const e of s){n.mapper.unbindElementFromMarkerName(e,i.markerName);if(e.is(\"attributeElement\")){n.writer.unwrap(n.writer.createRangeOn(e),r)}else{e.getCustomProperty(\"removeHighlight\")(e,o.id,n.writer)}}n.writer.clearClonedElementsGroup(i.markerName);t.stop()}}function jf(e){e=yf(e);e.view=Wf(e.view,\"container\");return t=>{t.on(\"insert:\"+e.model,If(e.view),{priority:e.converterPriority||\"normal\"})}}function Bf(e){e=yf(e);const t=e.model.key?e.model.key:e.model;let i=\"attribute:\"+t;if(e.model.name){i+=\":\"+e.model.name}if(e.model.values){for(const t of e.model.values){e.view[t]=Wf(e.view[t],\"attribute\")}}else{e.view=Wf(e.view,\"attribute\")}const n=qf(e);return t=>{t.on(i,Sf(n),{priority:e.converterPriority||\"normal\"})}}function Vf(e){e=yf(e);const t=e.model.key?e.model.key:e.model;let i=\"attribute:\"+t;if(e.model.name){i+=\":\"+e.model.name}if(e.model.values){for(const t of e.model.values){e.view[t]=$f(e.view[t])}}else{e.view=$f(e.view)}const n=qf(e);return t=>{t.on(i,Of(n),{priority:e.converterPriority||\"normal\"})}}function Ff(e){e=yf(e);e.view=Wf(e.view,\"ui\");return t=>{t.on(\"addMarker:\"+e.model,Lf(e.view),{priority:e.converterPriority||\"normal\"});t.on(\"removeMarker:\"+e.model,Nf(e.view),{priority:e.converterPriority||\"normal\"})}}function Hf(e){return t=>{t.on(\"addMarker:\"+e.model,Rf(e.view),{priority:e.converterPriority||\"normal\"});t.on(\"addMarker:\"+e.model,zf(e.view),{priority:e.converterPriority||\"normal\"});t.on(\"removeMarker:\"+e.model,Df(e.view),{priority:e.converterPriority||\"normal\"})}}function Wf(e,t){if(typeof e==\"function\"){return e}return(i,n)=>Uf(e,n,t)}function Uf(e,t,i){if(typeof e==\"string\"){e={name:e}}let n;const o=Object.assign({},e.attributes);if(i==\"container\"){n=t.createContainerElement(e.name,o)}else if(i==\"attribute\"){const i={priority:e.priority||_c.DEFAULT_PRIORITY};n=t.createAttributeElement(e.name,o,i)}else{n=t.createUIElement(e.name,o)}if(e.styles){const i=Object.keys(e.styles);for(const o of i){t.setStyle(o,e.styles[o],n)}}if(e.classes){const i=e.classes;if(typeof i==\"string\"){t.addClass(i,n)}else{for(const e of i){t.addClass(e,n)}}}return n}function qf(e){if(e.model.values){return(t,i)=>{const n=e.view[t];if(n){return n(t,i)}return null}}else{return e.view}}function $f(e){if(typeof e==\"string\"){return t=>({key:e,value:t})}else if(typeof e==\"object\"){if(e.value){return()=>e}else{return t=>({key:e.key,value:t})}}else{return e}}function Gf(e,t,i){const n=typeof e==\"function\"?e(t,i):e;if(!n){return null}if(!n.priority){n.priority=10}if(!n.id){n.id=t.markerName}return n}class Yf extends wf{elementToElement(e){return this.add(Zf(e))}elementToAttribute(e){return this.add(Xf(e))}attributeToAttribute(e){return this.add(em(e))}elementToMarker(e){return this.add(tm(e))}}function Kf(){return(e,t,i)=>{if(!t.modelRange&&i.consumable.consume(t.viewItem,{name:true})){const{modelRange:e,modelCursor:n}=i.convertChildren(t.viewItem,t.modelCursor);t.modelRange=e;t.modelCursor=n}}}function Jf(){return(e,t,i)=>{if(i.schema.checkChild(t.modelCursor,\"$text\")){if(i.consumable.consume(t.viewItem)){const e=i.writer.createText(t.viewItem.data);i.writer.insert(e,t.modelCursor);t.modelRange=Kh._createFromPositionAndShift(t.modelCursor,e.offsetSize);t.modelCursor=t.modelRange.end}}}}function Qf(e,t){return(i,n)=>{const o=n.newSelection;const r=new tf;const s=[];for(const e of o.getRanges()){s.push(t.toModelRange(e))}r.setTo(s,{backward:o.isBackward});if(!r.isEqual(e.document.selection)){e.change(e=>{e.setSelection(r)})}}}function Zf(e){e=yf(e);const t=nm(e);const i=im(e.view);const n=i?\"element:\"+i:\"element\";return i=>{i.on(n,t,{priority:e.converterPriority||\"normal\"})}}function Xf(e){e=yf(e);sm(e);const t=am(e,false);const i=im(e.view);const n=i?\"element:\"+i:\"element\";return i=>{i.on(n,t,{priority:e.converterPriority||\"low\"})}}function em(e){e=yf(e);let t=null;if(typeof e.view==\"string\"||e.view.key){t=rm(e)}sm(e,t);const i=am(e,true);return t=>{t.on(\"element\",i,{priority:e.converterPriority||\"low\"})}}function tm(e){e=yf(e);dm(e);return Zf(e)}function im(e){if(typeof e==\"string\"){return e}if(typeof e==\"object\"&&typeof e.name==\"string\"){return e.name}return null}function nm(e){const t=e.view?new Us(e.view):null;return(i,n,o)=>{let r={};if(t){const e=t.match(n.viewItem);if(!e){return}r=e.match}r.name=true;const s=om(e.model,n.viewItem,o.writer);if(!s){return}if(!o.consumable.test(n.viewItem,r)){return}const a=o.splitToAllowedParent(s,n.modelCursor);if(!a){return}o.writer.insert(s,a.position);o.convertChildren(n.viewItem,o.writer.createPositionAt(s,0));o.consumable.consume(n.viewItem,r);const l=o.getSplitParts(s);n.modelRange=new Kh(o.writer.createPositionBefore(s),o.writer.createPositionAfter(l[l.length-1]));if(a.cursorParent){n.modelCursor=o.writer.createPositionAt(a.cursorParent,0)}else{n.modelCursor=n.modelRange.end}}}function om(e,t,i){if(e instanceof Function){return e(t,i)}else{return i.createElement(e)}}function rm(e){if(typeof e.view==\"string\"){e.view={key:e.view}}const t=e.view.key;let i;if(t==\"class\"||t==\"style\"){const n=t==\"class\"?\"classes\":\"styles\";i={[n]:e.view.value}}else{const n=typeof e.view.value==\"undefined\"?/[\\s\\S]*/:e.view.value;i={attributes:{[t]:n}}}if(e.view.name){i.name=e.view.name}e.view=i;return t}function sm(e,t=null){const i=t===null?true:e=>e.getAttribute(t);const n=typeof e.model!=\"object\"?e.model:e.model.key;const o=typeof e.model!=\"object\"||typeof e.model.value==\"undefined\"?i:e.model.value;e.model={key:n,value:o}}function am(e,t){const i=new Us(e.view);return(n,o,r)=>{const s=i.match(o.viewItem);if(!s){return}const a=e.model.key;const l=typeof e.model.value==\"function\"?e.model.value(o.viewItem):e.model.value;if(l===null){return}if(lm(e.view,o.viewItem)){s.match.name=true}else{delete s.match.name}if(!r.consumable.test(o.viewItem,s.match)){return}if(!o.modelRange){o=Object.assign(o,r.convertChildren(o.viewItem,o.modelCursor))}const c=cm(o.modelRange,{key:a,value:l},t,r);if(c){r.consumable.consume(o.viewItem,s.match)}}}function lm(e,t){const i=typeof e==\"function\"?e(t):e;if(typeof i==\"object\"&&!im(i)){return false}return!i.classes&&!i.attributes&&!i.styles}function cm(e,t,i,n){let o=false;for(const r of Array.from(e.getItems({shallow:i}))){if(n.schema.checkAttribute(r,t.key)){n.writer.setAttribute(t.key,t.value,r);o=true}}return o}function dm(e){const t=e.model;e.model=(e,i)=>{const n=typeof t==\"string\"?t:t(e);return i.createElement(\"$marker\",{\"data-name\":n})}}class um{constructor(e,t){this.model=e;this.view=new zh(t);this.mapper=new Jh;this.downcastDispatcher=new Xh({mapper:this.mapper});const i=this.model.document;const n=i.selection;const o=this.model.markers;this.listenTo(this.model,\"_beforeChanges\",()=>{this.view._disableRendering(true)},{priority:\"highest\"});this.listenTo(this.model,\"_afterChanges\",()=>{this.view._disableRendering(false)},{priority:\"lowest\"});this.listenTo(i,\"change\",()=>{this.view.change(e=>{this.downcastDispatcher.convertChanges(i.differ,o,e);this.downcastDispatcher.convertSelection(n,o,e)})},{priority:\"low\"});this.listenTo(this.view.document,\"selectionChange\",Qf(this.model,this.mapper));this.downcastDispatcher.on(\"insert:$text\",Af(),{priority:\"lowest\"});this.downcastDispatcher.on(\"remove\",Cf(),{priority:\"low\"});this.downcastDispatcher.on(\"selection\",Mf(),{priority:\"low\"});this.downcastDispatcher.on(\"selection\",Ef(),{priority:\"low\"});this.downcastDispatcher.on(\"selection\",Pf(),{priority:\"low\"});this.view.document.roots.bindTo(this.model.document.roots).using(e=>{if(e.rootName==\"$graveyard\"){return null}const t=new cc(this.view.document,e.name);t.rootName=e.rootName;this.mapper.bindElements(e,t);return t})}destroy(){this.view.destroy();this.stopListening()}}ys(um,Jl);class hm{constructor(){this._commands=new Map}add(e,t){this._commands.set(e,t)}get(e){return this._commands.get(e)}execute(e,...t){const i=this.get(e);if(!i){throw new ss[\"b\"](\"commandcollection-command-not-found: Command does not exist.\",this,{commandName:e})}i.execute(...t)}*names(){yield*this._commands.keys()}*commands(){yield*this._commands.values()}[Symbol.iterator](){return this._commands[Symbol.iterator]()}destroy(){for(const e of this.commands()){e.destroy()}}}class fm{constructor(){this._consumables=new Map}add(e,t){let i;if(e.is(\"text\")||e.is(\"documentFragment\")){this._consumables.set(e,true);return}if(!this._consumables.has(e)){i=new mm(e);this._consumables.set(e,i)}else{i=this._consumables.get(e)}i.add(t)}test(e,t){const i=this._consumables.get(e);if(i===undefined){return null}if(e.is(\"text\")||e.is(\"documentFragment\")){return i}return i.test(t)}consume(e,t){if(this.test(e,t)){if(e.is(\"text\")||e.is(\"documentFragment\")){this._consumables.set(e,false)}else{this._consumables.get(e).consume(t)}return true}return false}revert(e,t){const i=this._consumables.get(e);if(i!==undefined){if(e.is(\"text\")||e.is(\"documentFragment\")){this._consumables.set(e,true)}else{i.revert(t)}}}static consumablesFromElement(e){const t={element:e,name:true,attributes:[],classes:[],styles:[]};const i=e.getAttributeKeys();for(const e of i){if(e==\"style\"||e==\"class\"){continue}t.attributes.push(e)}const n=e.getClassNames();for(const e of n){t.classes.push(e)}const o=e.getStyleNames();for(const e of o){t.styles.push(e)}return t}static createFrom(e,t){if(!t){t=new fm(e)}if(e.is(\"text\")){t.add(e);return t}if(e.is(\"element\")){t.add(e,fm.consumablesFromElement(e))}if(e.is(\"documentFragment\")){t.add(e)}for(const i of e.getChildren()){t=fm.createFrom(i,t)}return t}}class mm{constructor(e){this.element=e;this._canConsumeName=null;this._consumables={attributes:new Map,styles:new Map,classes:new Map}}add(e){if(e.name){this._canConsumeName=true}for(const t in this._consumables){if(t in e){this._add(t,e[t])}}}test(e){if(e.name&&!this._canConsumeName){return this._canConsumeName}for(const t in this._consumables){if(t in e){const i=this._test(t,e[t]);if(i!==true){return i}}}return true}consume(e){if(e.name){this._canConsumeName=false}for(const t in this._consumables){if(t in e){this._consume(t,e[t])}}}revert(e){if(e.name){this._canConsumeName=true}for(const t in this._consumables){if(t in e){this._revert(t,e[t])}}}_add(e,t){const i=Kt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e===\"attributes\"&&(t===\"class\"||t===\"style\")){throw new ss[\"b\"](\"viewconsumable-invalid-attribute: Classes and styles should be handled separately.\",this)}n.set(t,true);if(e===\"styles\"){for(const e of this.element.document.stylesProcessor.getRelatedStyles(t)){n.set(e,true)}}}}_test(e,t){const i=Kt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e===\"attributes\"&&(t===\"class\"||t===\"style\")){const e=t==\"class\"?\"classes\":\"styles\";const i=this._test(e,[...this._consumables[e].keys()]);if(i!==true){return i}}else{const e=n.get(t);if(e===undefined){return null}if(!e){return false}}}return true}_consume(e,t){const i=Kt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e===\"attributes\"&&(t===\"class\"||t===\"style\")){const e=t==\"class\"?\"classes\":\"styles\";this._consume(e,[...this._consumables[e].keys()])}else{n.set(t,false);if(e==\"styles\"){for(const e of this.element.document.stylesProcessor.getRelatedStyles(t)){n.set(e,false)}}}}}_revert(e,t){const i=Kt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e===\"attributes\"&&(t===\"class\"||t===\"style\")){const e=t==\"class\"?\"classes\":\"styles\";this._revert(e,[...this._consumables[e].keys()])}else{const e=n.get(t);if(e===false){n.set(t,true)}}}}}class gm{constructor(){this._sourceDefinitions={};this._attributeProperties={};this.decorate(\"checkChild\");this.decorate(\"checkAttribute\");this.on(\"checkAttribute\",(e,t)=>{t[0]=new pm(t[0])},{priority:\"highest\"});this.on(\"checkChild\",(e,t)=>{t[0]=new pm(t[0]);t[1]=this.getDefinition(t[1])},{priority:\"highest\"})}register(e,t){if(this._sourceDefinitions[e]){throw new ss[\"b\"](\"schema-cannot-register-item-twice: A single item cannot be registered twice in the schema.\",this,{itemName:e})}this._sourceDefinitions[e]=[Object.assign({},t)];this._clearCache()}extend(e,t){if(!this._sourceDefinitions[e]){throw new ss[\"b\"](\"schema-cannot-extend-missing-item: Cannot extend an item which was not registered yet.\",this,{itemName:e})}this._sourceDefinitions[e].push(Object.assign({},t));this._clearCache()}getDefinitions(){if(!this._compiledDefinitions){this._compile()}return this._compiledDefinitions}getDefinition(e){let t;if(typeof e==\"string\"){t=e}else if(e.is&&(e.is(\"text\")||e.is(\"textProxy\"))){t=\"$text\"}else{t=e.name}return this.getDefinitions()[t]}isRegistered(e){return!!this.getDefinition(e)}isBlock(e){const t=this.getDefinition(e);return!!(t&&t.isBlock)}isLimit(e){const t=this.getDefinition(e);if(!t){return false}return!!(t.isLimit||t.isObject)}isObject(e){const t=this.getDefinition(e);return!!(t&&t.isObject)}isInline(e){const t=this.getDefinition(e);return!!(t&&t.isInline)}checkChild(e,t){if(!t){return false}return this._checkContextMatch(t,e)}checkAttribute(e,t){const i=this.getDefinition(e.last);if(!i){return false}return i.allowAttributes.includes(t)}checkMerge(e,t=null){if(e instanceof qh){const t=e.nodeBefore;const i=e.nodeAfter;if(!(t instanceof Fh)){throw new ss[\"b\"](\"schema-check-merge-no-element-before: The node before the merge position must be an element.\",this)}if(!(i instanceof Fh)){throw new ss[\"b\"](\"schema-check-merge-no-element-after: The node after the merge position must be an element.\",this)}return this.checkMerge(t,i)}for(const i of t.getChildren()){if(!this.checkChild(e,i)){return false}}return true}addChildCheck(e){this.on(\"checkChild\",(t,[i,n])=>{if(!n){return}const o=e(i,n);if(typeof o==\"boolean\"){t.stop();t.return=o}},{priority:\"high\"})}addAttributeCheck(e){this.on(\"checkAttribute\",(t,[i,n])=>{const o=e(i,n);if(typeof o==\"boolean\"){t.stop();t.return=o}},{priority:\"high\"})}setAttributeProperties(e,t){this._attributeProperties[e]=Object.assign(this.getAttributeProperties(e),t)}getAttributeProperties(e){return this._attributeProperties[e]||{}}getLimitElement(e){let t;if(e instanceof qh){t=e.parent}else{const i=e instanceof Kh?[e]:Array.from(e.getRanges());t=i.reduce((e,t)=>{const i=t.getCommonAncestor();if(!e){return i}return e.getCommonAncestor(i,{includeSelf:true})},null)}while(!this.isLimit(t)){if(t.parent){t=t.parent}else{break}}return t}checkAttributeInSelection(e,t){if(e.isCollapsed){const i=e.getFirstPosition();const n=[...i.getAncestors(),new jh(\"\",e.getAttributes())];return this.checkAttribute(n,t)}else{const i=e.getRanges();for(const e of i){for(const i of e){if(this.checkAttribute(i.item,t)){return true}}}}return false}*getValidRanges(e,t){e=Im(e);for(const i of e){yield*this._getValidRangesForRange(i,t)}}getNearestSelectionRange(e,t=\"both\"){if(this.checkChild(e,\"$text\")){return new Kh(e)}let i,n;const o=e.getAncestors().reverse().find(e=>this.isLimit(e))||e.root;if(t==\"both\"||t==\"backward\"){i=new Wh({boundaries:Kh._createIn(o),startPosition:e,direction:\"backward\"})}if(t==\"both\"||t==\"forward\"){n=new Wh({boundaries:Kh._createIn(o),startPosition:e})}for(const e of Sm(i,n)){const t=e.walker==i?\"elementEnd\":\"elementStart\";const n=e.value;if(n.type==t&&this.isObject(n.item)){return Kh._createOn(n.item)}if(this.checkChild(n.nextPosition,\"$text\")){return new Kh(n.nextPosition)}}return null}findAllowedParent(e,t){let i=e.parent;while(i){if(this.checkChild(i,t)){return i}if(this.isLimit(i)){return null}i=i.parent}return null}removeDisallowedAttributes(e,t){for(const i of e){if(i.is(\"text\")){Lm(this,i,t)}else{const e=Kh._createIn(i);const n=e.getPositions();for(const e of n){const i=e.nodeBefore||e.parent;Lm(this,i,t)}}}}createContext(e){return new pm(e)}_clearCache(){this._compiledDefinitions=null}_compile(){const e={};const t=this._sourceDefinitions;const i=Object.keys(t);for(const n of i){e[n]=bm(t[n],n)}for(const t of i){wm(e,t)}for(const t of i){_m(e,t)}for(const t of i){km(e,t);vm(e,t)}for(const t of i){ym(e,t);xm(e,t)}this._compiledDefinitions=e}_checkContextMatch(e,t,i=t.length-1){const n=t.getItem(i);if(e.allowIn.includes(n.name)){if(i==0){return true}else{const e=this.getDefinition(n);return this._checkContextMatch(e,t,i-1)}}else{return false}}*_getValidRangesForRange(e,t){let i=e.start;let n=e.start;for(const o of e.getItems({shallow:true})){if(o.is(\"element\")){yield*this._getValidRangesForRange(Kh._createIn(o),t)}if(!this.checkAttribute(o,t)){if(!i.isEqual(n)){yield new Kh(i,n)}i=qh._createAfter(o)}n=qh._createAfter(o)}if(!i.isEqual(n)){yield new Kh(i,n)}}}ys(gm,Jl);class pm{constructor(e){if(e instanceof pm){return e}if(typeof e==\"string\"){e=[e]}else if(!Array.isArray(e)){e=e.getAncestors({includeSelf:true})}if(e[0]&&typeof e[0]!=\"string\"&&e[0].is(\"documentFragment\")){e.shift()}this._items=e.map(Mm)}get length(){return this._items.length}get last(){return this._items[this._items.length-1]}[Symbol.iterator](){return this._items[Symbol.iterator]()}push(e){const t=new pm([e]);t._items=[...this._items,...t._items];return t}getItem(e){return this._items[e]}*getNames(){yield*this._items.map(e=>e.name)}endsWith(e){return Array.from(this.getNames()).join(\" \").endsWith(e)}startsWith(e){return Array.from(this.getNames()).join(\" \").startsWith(e)}}function bm(e,t){const i={name:t,allowIn:[],allowContentOf:[],allowWhere:[],allowAttributes:[],allowAttributesOf:[],inheritTypesFrom:[]};Am(e,i);Cm(e,i,\"allowIn\");Cm(e,i,\"allowContentOf\");Cm(e,i,\"allowWhere\");Cm(e,i,\"allowAttributes\");Cm(e,i,\"allowAttributesOf\");Cm(e,i,\"inheritTypesFrom\");Tm(e,i);return i}function wm(e,t){for(const i of e[t].allowContentOf){if(e[i]){const n=Em(e,i);n.forEach(e=>{e.allowIn.push(t)})}}delete e[t].allowContentOf}function _m(e,t){for(const i of e[t].allowWhere){const n=e[i];if(n){const i=n.allowIn;e[t].allowIn.push(...i)}}delete e[t].allowWhere}function km(e,t){for(const i of e[t].allowAttributesOf){const n=e[i];if(n){const i=n.allowAttributes;e[t].allowAttributes.push(...i)}}delete e[t].allowAttributesOf}function vm(e,t){const i=e[t];for(const t of i.inheritTypesFrom){const n=e[t];if(n){const e=Object.keys(n).filter(e=>e.startsWith(\"is\"));for(const t of e){if(!(t in i)){i[t]=n[t]}}}}delete i.inheritTypesFrom}function ym(e,t){const i=e[t];const n=i.allowIn.filter(t=>e[t]);i.allowIn=Array.from(new Set(n))}function xm(e,t){const i=e[t];i.allowAttributes=Array.from(new Set(i.allowAttributes))}function Am(e,t){for(const i of e){const e=Object.keys(i).filter(e=>e.startsWith(\"is\"));for(const n of e){t[n]=i[n]}}}function Cm(e,t,i){for(const n of e){if(typeof n[i]==\"string\"){t[i].push(n[i])}else if(Array.isArray(n[i])){t[i].push(...n[i])}}}function Tm(e,t){for(const i of e){const e=i.inheritAllFrom;if(e){t.allowContentOf.push(e);t.allowWhere.push(e);t.allowAttributesOf.push(e);t.inheritTypesFrom.push(e)}}}function Em(e,t){const i=e[t];return Pm(e).filter(e=>e.allowIn.includes(i.name))}function Pm(e){return Object.keys(e).map(t=>e[t])}function Mm(e){if(typeof e==\"string\"){return{name:e,*getAttributeKeys(){},getAttribute(){}}}else{return{name:e.is(\"element\")?e.name:\"$text\",*getAttributeKeys(){yield*e.getAttributeKeys()},getAttribute(t){return e.getAttribute(t)}}}}function*Sm(e,t){let i=false;while(!i){i=true;if(e){const t=e.next();if(!t.done){i=false;yield{walker:e,value:t.value}}}if(t){const e=t.next();if(!e.done){i=false;yield{walker:t,value:e.value}}}}}function*Im(e){for(const t of e){yield*t.getMinimalFlatRanges()}}function Lm(e,t,i){for(const n of t.getAttributeKeys()){if(!e.checkAttribute(t,n)){i.removeAttribute(n,t)}}}class Nm{constructor(e={}){this._splitParts=new Map;this._modelCursor=null;this.conversionApi=Object.assign({},e);this.conversionApi.convertItem=this._convertItem.bind(this);this.conversionApi.convertChildren=this._convertChildren.bind(this);this.conversionApi.splitToAllowedParent=this._splitToAllowedParent.bind(this);this.conversionApi.getSplitParts=this._getSplitParts.bind(this)}convert(e,t,i=[\"$root\"]){this.fire(\"viewCleanup\",e);this._modelCursor=Rm(i,t);this.conversionApi.writer=t;this.conversionApi.consumable=fm.createFrom(e);this.conversionApi.store={};const{modelRange:n}=this._convertItem(e,this._modelCursor);const o=t.createDocumentFragment();if(n){this._removeEmptyElements();for(const e of Array.from(this._modelCursor.parent.getChildren())){t.append(e,o)}o.markers=Om(o,t)}this._modelCursor=null;this._splitParts.clear();this.conversionApi.writer=null;this.conversionApi.store=null;return o}_convertItem(e,t){const i=Object.assign({viewItem:e,modelCursor:t,modelRange:null});if(e.is(\"element\")){this.fire(\"element:\"+e.name,i,this.conversionApi)}else if(e.is(\"text\")){this.fire(\"text\",i,this.conversionApi)}else{this.fire(\"documentFragment\",i,this.conversionApi)}if(i.modelRange&&!(i.modelRange instanceof Kh)){throw new ss[\"b\"](\"view-conversion-dispatcher-incorrect-result: Incorrect conversion result was dropped.\",this)}return{modelRange:i.modelRange,modelCursor:i.modelCursor}}_convertChildren(e,t){const i=new Kh(t);let n=t;for(const t of Array.from(e.getChildren())){const e=this._convertItem(t,n);if(e.modelRange instanceof Kh){i.end=e.modelRange.end;n=e.modelCursor}}return{modelRange:i,modelCursor:n}}_splitToAllowedParent(e,t){const i=this.conversionApi.schema.findAllowedParent(t,e);if(!i){return null}if(i===t.parent){return{position:t}}if(this._modelCursor.parent.getAncestors().includes(i)){return null}const n=this.conversionApi.writer.split(t,i);const o=[];for(const e of n.range.getWalker()){if(e.type==\"elementEnd\"){o.push(e.item)}else{const t=o.pop();const i=e.item;this._registerSplitPair(t,i)}}return{position:n.position,cursorParent:n.range.end.parent}}_registerSplitPair(e,t){if(!this._splitParts.has(e)){this._splitParts.set(e,[e])}const i=this._splitParts.get(e);this._splitParts.set(t,i);i.push(t)}_getSplitParts(e){let t;if(!this._splitParts.has(e)){t=[e]}else{t=this._splitParts.get(e)}return t}_removeEmptyElements(){let e=false;for(const t of this._splitParts.keys()){if(t.isEmpty){this.conversionApi.writer.remove(t);this._splitParts.delete(t);e=true}}if(e){this._removeEmptyElements()}}}ys(Nm,ds);function Om(e,t){const i=new Set;const n=new Map;const o=Kh._createIn(e).getItems();for(const e of o){if(e.name==\"$marker\"){i.add(e)}}for(const e of i){const i=e.getAttribute(\"data-name\");const o=t.createPositionBefore(e);if(!n.has(i)){n.set(i,new Kh(o.clone()))}else{n.get(i).end=o.clone()}t.remove(e)}return n}function Rm(e,t){let i;for(const n of new pm(e)){const e={};for(const t of n.getAttributeKeys()){e[t]=n.getAttribute(t)}const o=t.createElement(n.name,e);if(i){t.append(o,i)}i=qh._createAt(o,0)}return i}class zm{constructor(e,t){this.model=e;this.stylesProcessor=t;this.processor;this.mapper=new Jh;this.downcastDispatcher=new Xh({mapper:this.mapper});this.downcastDispatcher.on(\"insert:$text\",Af(),{priority:\"lowest\"});this.upcastDispatcher=new Nm({schema:e.schema});this.viewDocument=new bc(t);this._viewWriter=new $c(this.viewDocument);this.upcastDispatcher.on(\"text\",Jf(),{priority:\"lowest\"});this.upcastDispatcher.on(\"element\",Kf(),{priority:\"lowest\"});this.upcastDispatcher.on(\"documentFragment\",Kf(),{priority:\"lowest\"});this.decorate(\"init\");this.on(\"init\",()=>{this.fire(\"ready\")},{priority:\"lowest\"})}get(e){const{rootName:t=\"main\",trim:i=\"empty\"}=e||{};if(!this._checkIfRootsExists([t])){throw new ss[\"b\"](\"datacontroller-get-non-existent-root: Attempting to get data from a non-existing root.\",this)}const n=this.model.document.getRoot(t);if(i===\"empty\"&&!this.model.hasContent(n,{ignoreWhitespaces:true})){return\"\"}return this.stringify(n)}stringify(e){const t=this.toView(e);return this.processor.toData(t)}toView(e){const t=this.viewDocument;const i=this._viewWriter;this.mapper.clearBindings();const n=Kh._createIn(e);const o=new Uc(t);this.mapper.bindElements(e,o);this.downcastDispatcher.convertInsert(n,i);if(!e.is(\"documentFragment\")){const t=Dm(e);for(const[e,n]of t){this.downcastDispatcher.convertMarkerAdd(e,n,i)}}return o}init(e){if(this.model.document.version){throw new ss[\"b\"](\"datacontroller-init-document-not-empty: Trying to set initial data to not empty document.\",this)}let t={};if(typeof e===\"string\"){t.main=e}else{t=e}if(!this._checkIfRootsExists(Object.keys(t))){throw new ss[\"b\"](\"datacontroller-init-non-existent-root: Attempting to init data on a non-existing root.\",this)}this.model.enqueueChange(\"transparent\",e=>{for(const i of Object.keys(t)){const n=this.model.document.getRoot(i);e.insert(this.parse(t[i],n),n,0)}});return Promise.resolve()}set(e){let t={};if(typeof e===\"string\"){t.main=e}else{t=e}if(!this._checkIfRootsExists(Object.keys(t))){throw new ss[\"b\"](\"datacontroller-set-non-existent-root: Attempting to set data on a non-existing root.\",this)}this.model.enqueueChange(\"transparent\",e=>{e.setSelection(null);e.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());for(const i of Object.keys(t)){const n=this.model.document.getRoot(i);e.remove(e.createRangeIn(n));e.insert(this.parse(t[i],n),n,0)}})}parse(e,t=\"$root\"){const i=this.processor.toView(e);return this.toModel(i,t)}toModel(e,t=\"$root\"){return this.model.change(i=>this.upcastDispatcher.convert(e,i,t))}addStyleProcessorRules(e){e(this.stylesProcessor)}destroy(){this.stopListening()}_checkIfRootsExists(e){for(const t of e){if(!this.model.document.getRootNames().includes(t)){return false}}return true}}ys(zm,Jl);function Dm(e){const t=[];const i=e.root.document;if(!i){return[]}const n=Kh._createIn(e);for(const e of i.model.markers){const i=n.getIntersection(e.getRange());if(i){t.push([e.name,i])}}return t}class jm{constructor(e,t){this._helpers=new Map;this._downcast=Array.isArray(e)?e:[e];this._createConversionHelpers({name:\"downcast\",dispatchers:this._downcast,isDowncast:true});this._upcast=Array.isArray(t)?t:[t];this._createConversionHelpers({name:\"upcast\",dispatchers:this._upcast,isDowncast:false})}addAlias(e,t){const i=this._downcast.includes(t);const n=this._upcast.includes(t);if(!n&&!i){throw new ss[\"b\"](\"conversion-add-alias-dispatcher-not-registered: \"+\"Trying to register and alias for a dispatcher that nas not been registered.\",this)}this._createConversionHelpers({name:e,dispatchers:[t],isDowncast:i})}for(e){if(!this._helpers.has(e)){throw new ss[\"b\"](\"conversion-for-unknown-group: Trying to add a converter to an unknown dispatchers group.\",this)}return this._helpers.get(e)}elementToElement(e){this.for(\"downcast\").elementToElement(e);for(const{model:t,view:i}of Bm(e)){this.for(\"upcast\").elementToElement({model:t,view:i,converterPriority:e.converterPriority})}}attributeToElement(e){this.for(\"downcast\").attributeToElement(e);for(const{model:t,view:i}of Bm(e)){this.for(\"upcast\").elementToAttribute({view:i,model:t,converterPriority:e.converterPriority})}}attributeToAttribute(e){this.for(\"downcast\").attributeToAttribute(e);for(const{model:t,view:i}of Bm(e)){this.for(\"upcast\").attributeToAttribute({view:i,model:t})}}_createConversionHelpers({name:e,dispatchers:t,isDowncast:i}){if(this._helpers.has(e)){throw new ss[\"b\"](\"conversion-group-exists: Trying to register a group name that has already been registered.\",this)}const n=i?new xf(t):new Yf(t);this._helpers.set(e,n)}}function*Bm(e){if(e.model.values){for(const t of e.model.values){const i={key:e.model.key,value:t};const n=e.view[t];const o=e.upcastAlso?e.upcastAlso[t]:undefined;yield*Vm(i,n,o)}}else{yield*Vm(e.model,e.view,e.upcastAlso)}}function*Vm(e,t,i){yield{model:e,view:t};if(i){i=Array.isArray(i)?i:[i];for(const t of i){yield{model:e,view:t}}}}class Fm{constructor(e=\"default\"){this.operations=[];this.type=e}get baseVersion(){for(const e of this.operations){if(e.baseVersion!==null){return e.baseVersion}}return null}addOperation(e){e.batch=this;this.operations.push(e);return e}}class Hm{constructor(e){this.baseVersion=e;this.isDocumentOperation=this.baseVersion!==null;this.batch=null}_validate(){}toJSON(){const e=Object.assign({},this);e.__className=this.constructor.className;delete e.batch;delete e.isDocumentOperation;return e}static get className(){return\"Operation\"}static fromJSON(e){return new this(e.baseVersion)}}class Wm{constructor(e){this.markers=new Map;this._children=new Vh;if(e){this._insertChild(0,e)}}[Symbol.iterator](){return this.getChildren()}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}is(e){return e===\"documentFragment\"||e===\"model:documentFragment\"}getChild(e){return this._children.getNode(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}getPath(){return[]}getNodeByPath(e){let t=this;for(const i of e){t=t.getChild(t.offsetToIndex(i))}return t}offsetToIndex(e){return this._children.offsetToIndex(e)}toJSON(){const e=[];for(const t of this._children){e.push(t.toJSON())}return e}static fromJSON(e){const t=[];for(const i of e){if(i.name){t.push(Fh.fromJSON(i))}else{t.push(jh.fromJSON(i))}}return new Wm(t)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){const i=Um(t);for(const e of i){if(e.parent!==null){e._remove()}e.parent=this}this._children._insertNodes(e,i)}_removeChildren(e,t=1){const i=this._children._removeNodes(e,t);for(const e of i){e.parent=null}return i}}function Um(e){if(typeof e==\"string\"){return[new jh(e)]}if(!vs(e)){e=[e]}return Array.from(e).map(e=>{if(typeof e==\"string\"){return new jh(e)}if(e instanceof Bh){return new jh(e.data,e.getAttributes())}return e})}function qm(e,t){t=Km(t);const i=t.reduce((e,t)=>e+t.offsetSize,0);const n=e.parent;Qm(e);const o=e.index;n._insertChild(o,t);Jm(n,o+t.length);Jm(n,o);return new Kh(e,e.getShiftedBy(i))}function $m(e){if(!e.isFlat){throw new ss[\"b\"](\"operation-utils-remove-range-not-flat: \"+\"Trying to remove a range which starts and ends in different element.\",this)}const t=e.start.parent;Qm(e.start);Qm(e.end);const i=t._removeChildren(e.start.index,e.end.index-e.start.index);Jm(t,e.start.index);return i}function Gm(e,t){if(!e.isFlat){throw new ss[\"b\"](\"operation-utils-move-range-not-flat: \"+\"Trying to move a range which starts and ends in different element.\",this)}const i=$m(e);t=t._getTransformedByDeletion(e.start,e.end.offset-e.start.offset);return qm(t,i)}function Ym(e,t,i){Qm(e.start);Qm(e.end);for(const n of e.getItems({shallow:true})){const e=n.is(\"textProxy\")?n.textNode:n;if(i!==null){e._setAttribute(t,i)}else{e._removeAttribute(t)}Jm(e.parent,e.index)}Jm(e.end.parent,e.end.index)}function Km(e){const t=[];if(!(e instanceof Array)){e=[e]}for(let i=0;ie.maxOffset){throw new ss[\"b\"](\"move-operation-nodes-do-not-exist: The nodes which should be moved do not exist.\",this)}else if(e===t&&i=i&&this.targetPosition.path[e]e._clone(true)));const t=new og(this.position,e,this.baseVersion);t.shouldReceiveAttributes=this.shouldReceiveAttributes;return t}getReversed(){const e=this.position.root.document.graveyard;const t=new qh(e,[0]);return new ng(this.position,this.nodes.maxOffset,t,this.baseVersion+1)}_validate(){const e=this.position.parent;if(!e||e.maxOffsete._clone(true)));qm(this.position,e)}toJSON(){const e=super.toJSON();e.position=this.position.toJSON();e.nodes=this.nodes.toJSON();return e}static get className(){return\"InsertOperation\"}static fromJSON(e,t){const i=[];for(const t of e.nodes){if(t.name){i.push(Fh.fromJSON(t))}else{i.push(jh.fromJSON(t))}}const n=new og(qh.fromJSON(e.position,t),i,e.baseVersion);n.shouldReceiveAttributes=e.shouldReceiveAttributes;return n}}class rg extends Hm{constructor(e,t,i,n,o,r){super(r);this.name=e;this.oldRange=t?t.clone():null;this.newRange=i?i.clone():null;this.affectsData=o;this._markers=n}get type(){return\"marker\"}clone(){return new rg(this.name,this.oldRange,this.newRange,this._markers,this.affectsData,this.baseVersion)}getReversed(){return new rg(this.name,this.newRange,this.oldRange,this._markers,this.affectsData,this.baseVersion+1)}_execute(){const e=this.newRange?\"_set\":\"_remove\";this._markers[e](this.name,this.newRange,true,this.affectsData)}toJSON(){const e=super.toJSON();if(this.oldRange){e.oldRange=this.oldRange.toJSON()}if(this.newRange){e.newRange=this.newRange.toJSON()}delete e._markers;return e}static get className(){return\"MarkerOperation\"}static fromJSON(e,t){return new rg(e.name,e.oldRange?Kh.fromJSON(e.oldRange,t):null,e.newRange?Kh.fromJSON(e.newRange,t):null,t.model.markers,e.affectsData,e.baseVersion)}}class sg extends Hm{constructor(e,t,i,n){super(n);this.position=e;this.position.stickiness=\"toNext\";this.oldName=t;this.newName=i}get type(){return\"rename\"}clone(){return new sg(this.position.clone(),this.oldName,this.newName,this.baseVersion)}getReversed(){return new sg(this.position.clone(),this.newName,this.oldName,this.baseVersion+1)}_validate(){const e=this.position.nodeAfter;if(!(e instanceof Fh)){throw new ss[\"b\"](\"rename-operation-wrong-position: Given position is invalid or node after it is not an instance of Element.\",this)}else if(e.name!==this.oldName){throw new ss[\"b\"](\"rename-operation-wrong-name: Element to change has different name than operation's old name.\",this)}}_execute(){const e=this.position.nodeAfter;e.name=this.newName}toJSON(){const e=super.toJSON();e.position=this.position.toJSON();return e}static get className(){return\"RenameOperation\"}static fromJSON(e,t){return new sg(qh.fromJSON(e.position,t),e.oldName,e.newName,e.baseVersion)}}class ag extends Hm{constructor(e,t,i,n,o){super(o);this.root=e;this.key=t;this.oldValue=i;this.newValue=n}get type(){if(this.oldValue===null){return\"addRootAttribute\"}else if(this.newValue===null){return\"removeRootAttribute\"}else{return\"changeRootAttribute\"}}clone(){return new ag(this.root,this.key,this.oldValue,this.newValue,this.baseVersion)}getReversed(){return new ag(this.root,this.key,this.newValue,this.oldValue,this.baseVersion+1)}_validate(){if(this.root!=this.root.root||this.root.is(\"documentFragment\")){throw new ss[\"b\"](\"rootattribute-operation-not-a-root: The element to change is not a root element.\",this,{root:this.root,key:this.key})}if(this.oldValue!==null&&this.root.getAttribute(this.key)!==this.oldValue){throw new ss[\"b\"](\"rootattribute-operation-wrong-old-value: Changed node has different attribute value than operation's \"+\"old attribute value.\",this,{root:this.root,key:this.key})}if(this.oldValue===null&&this.newValue!==null&&this.root.hasAttribute(this.key)){throw new ss[\"b\"](\"rootattribute-operation-attribute-exists: The attribute with given key already exists.\",this,{root:this.root,key:this.key})}}_execute(){if(this.newValue!==null){this.root._setAttribute(this.key,this.newValue)}else{this.root._removeAttribute(this.key)}}toJSON(){const e=super.toJSON();e.root=this.root.toJSON();return e}static get className(){return\"RootAttributeOperation\"}static fromJSON(e,t){if(!t.getRoot(e.root)){throw new ss[\"b\"](\"rootattribute-operation-fromjson-no-root: Cannot create RootAttributeOperation. Root with specified name does not exist.\",this,{rootName:e.root})}return new ag(t.getRoot(e.root),e.key,e.oldValue,e.newValue,e.baseVersion)}}class lg extends Hm{constructor(e,t,i,n,o){super(o);this.sourcePosition=e.clone();this.sourcePosition.stickiness=\"toPrevious\";this.howMany=t;this.targetPosition=i.clone();this.targetPosition.stickiness=\"toNext\";this.graveyardPosition=n.clone()}get type(){return\"merge\"}get deletionPosition(){return new qh(this.sourcePosition.root,this.sourcePosition.path.slice(0,-1))}get movedRange(){const e=this.sourcePosition.getShiftedBy(Number.POSITIVE_INFINITY);return new Kh(this.sourcePosition,e)}clone(){return new this.constructor(this.sourcePosition,this.howMany,this.targetPosition,this.graveyardPosition,this.baseVersion)}getReversed(){const e=this.targetPosition._getTransformedByMergeOperation(this);const t=this.sourcePosition.path.slice(0,-1);const i=new qh(this.sourcePosition.root,t)._getTransformedByMergeOperation(this);const n=new cg(e,this.howMany,this.graveyardPosition,this.baseVersion+1);n.insertionPosition=i;return n}_validate(){const e=this.sourcePosition.parent;const t=this.targetPosition.parent;if(!e.parent){throw new ss[\"b\"](\"merge-operation-source-position-invalid: Merge source position is invalid.\",this)}else if(!t.parent){throw new ss[\"b\"](\"merge-operation-target-position-invalid: Merge target position is invalid.\",this)}else if(this.howMany!=e.maxOffset){throw new ss[\"b\"](\"merge-operation-how-many-invalid: Merge operation specifies wrong number of nodes to move.\",this)}}_execute(){const e=this.sourcePosition.parent;const t=Kh._createIn(e);Gm(t,this.targetPosition);Gm(Kh._createOn(e),this.graveyardPosition)}toJSON(){const e=super.toJSON();e.sourcePosition=e.sourcePosition.toJSON();e.targetPosition=e.targetPosition.toJSON();e.graveyardPosition=e.graveyardPosition.toJSON();return e}static get className(){return\"MergeOperation\"}static fromJSON(e,t){const i=qh.fromJSON(e.sourcePosition,t);const n=qh.fromJSON(e.targetPosition,t);const o=qh.fromJSON(e.graveyardPosition,t);return new this(i,e.howMany,n,o,e.baseVersion)}}class cg extends Hm{constructor(e,t,i,n){super(n);this.splitPosition=e.clone();this.splitPosition.stickiness=\"toNext\";this.howMany=t;this.insertionPosition=cg.getInsertionPosition(e);this.insertionPosition.stickiness=\"toNone\";this.graveyardPosition=i?i.clone():null;if(this.graveyardPosition){this.graveyardPosition.stickiness=\"toNext\"}}get type(){return\"split\"}get moveTargetPosition(){const e=this.insertionPosition.path.slice();e.push(0);return new qh(this.insertionPosition.root,e)}get movedRange(){const e=this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);return new Kh(this.splitPosition,e)}clone(){const e=new this.constructor(this.splitPosition,this.howMany,this.graveyardPosition,this.baseVersion);e.insertionPosition=this.insertionPosition;return e}getReversed(){const e=this.splitPosition.root.document.graveyard;const t=new qh(e,[0]);return new lg(this.moveTargetPosition,this.howMany,this.splitPosition,t,this.baseVersion+1)}_validate(){const e=this.splitPosition.parent;const t=this.splitPosition.offset;if(!e||e.maxOffset{for(const t of e.getAttributeKeys()){this.removeAttribute(t,e)}};if(!(e instanceof Kh)){t(e)}else{for(const i of e.getItems()){t(i)}}}move(e,t,i){this._assertWriterUsedCorrectly();if(!(e instanceof Kh)){throw new ss[\"b\"](\"writer-move-invalid-range: Invalid range to move.\",this)}if(!e.isFlat){throw new ss[\"b\"](\"writer-move-range-not-flat: Range to move is not flat.\",this)}const n=qh._createAt(t,i);if(n.isEqual(e.start)){return}this._addOperationForAffectedMarkers(\"move\",e);if(!pg(e.root,n.root)){throw new ss[\"b\"](\"writer-move-different-document: Range is going to be moved between different documents.\",this)}const o=e.root.document?e.root.document.version:null;const r=new ng(e.start,e.end.offset-e.start.offset,n,o);this.batch.addOperation(r);this.model.applyOperation(r)}remove(e){this._assertWriterUsedCorrectly();const t=e instanceof Kh?e:Kh._createOn(e);const i=t.getMinimalFlatRanges().reverse();for(const e of i){this._addOperationForAffectedMarkers(\"move\",e);gg(e.start,e.end.offset-e.start.offset,this.batch,this.model)}}merge(e){this._assertWriterUsedCorrectly();const t=e.nodeBefore;const i=e.nodeAfter;this._addOperationForAffectedMarkers(\"merge\",e);if(!(t instanceof Fh)){throw new ss[\"b\"](\"writer-merge-no-element-before: Node before merge position must be an element.\",this)}if(!(i instanceof Fh)){throw new ss[\"b\"](\"writer-merge-no-element-after: Node after merge position must be an element.\",this)}if(!e.root.document){this._mergeDetached(e)}else{this._merge(e)}}createPositionFromPath(e,t,i){return this.model.createPositionFromPath(e,t,i)}createPositionAt(e,t){return this.model.createPositionAt(e,t)}createPositionAfter(e){return this.model.createPositionAfter(e)}createPositionBefore(e){return this.model.createPositionBefore(e)}createRange(e,t){return this.model.createRange(e,t)}createRangeIn(e){return this.model.createRangeIn(e)}createRangeOn(e){return this.model.createRangeOn(e)}createSelection(e,t,i){return this.model.createSelection(e,t,i)}_mergeDetached(e){const t=e.nodeBefore;const i=e.nodeAfter;this.move(Kh._createIn(i),qh._createAt(t,\"end\"));this.remove(i)}_merge(e){const t=qh._createAt(e.nodeBefore,\"end\");const i=qh._createAt(e.nodeAfter,0);const n=e.root.document.graveyard;const o=new qh(n,[0]);const r=e.root.document.version;const s=new lg(i,e.nodeAfter.maxOffset,t,o,r);this.batch.addOperation(s);this.model.applyOperation(s)}rename(e,t){this._assertWriterUsedCorrectly();if(!(e instanceof Fh)){throw new ss[\"b\"](\"writer-rename-not-element-instance: Trying to rename an object which is not an instance of Element.\",this)}const i=e.root.document?e.root.document.version:null;const n=new sg(qh._createBefore(e),e.name,t,i);this.batch.addOperation(n);this.model.applyOperation(n)}split(e,t){this._assertWriterUsedCorrectly();let i=e.parent;if(!i.parent){throw new ss[\"b\"](\"writer-split-element-no-parent: Element with no parent can not be split.\",this)}if(!t){t=i.parent}if(!e.parent.getAncestors({includeSelf:true}).includes(t)){throw new ss[\"b\"](\"writer-split-invalid-limit-element: Limit element is not a position ancestor.\",this)}let n,o;do{const t=i.root.document?i.root.document.version:null;const r=i.maxOffset-e.offset;const s=new cg(e,r,null,t);this.batch.addOperation(s);this.model.applyOperation(s);if(!n&&!o){n=i;o=e.parent.nextSibling}e=this.createPositionAfter(e.parent);i=e.parent}while(i!==t);return{position:e,range:new Kh(qh._createAt(n,\"end\"),qh._createAt(o,0))}}wrap(e,t){this._assertWriterUsedCorrectly();if(!e.isFlat){throw new ss[\"b\"](\"writer-wrap-range-not-flat: Range to wrap is not flat.\",this)}const i=t instanceof Fh?t:new Fh(t);if(i.childCount>0){throw new ss[\"b\"](\"writer-wrap-element-not-empty: Element to wrap with is not empty.\",this)}if(i.parent!==null){throw new ss[\"b\"](\"writer-wrap-element-attached: Element to wrap with is already attached to tree model.\",this)}this.insert(i,e.start);const n=new Kh(e.start.getShiftedBy(1),e.end.getShiftedBy(1));this.move(n,qh._createAt(i,0))}unwrap(e){this._assertWriterUsedCorrectly();if(e.parent===null){throw new ss[\"b\"](\"writer-unwrap-element-no-parent: Trying to unwrap an element which has no parent.\",this)}this.move(Kh._createIn(e),this.createPositionAfter(e));this.remove(e)}addMarker(e,t){this._assertWriterUsedCorrectly();if(!t||typeof t.usingOperation!=\"boolean\"){throw new ss[\"b\"](\"writer-addMarker-no-usingOperation: The options.usingOperation parameter is required when adding a new marker.\",this)}const i=t.usingOperation;const n=t.range;const o=t.affectsData===undefined?false:t.affectsData;if(this.model.markers.has(e)){throw new ss[\"b\"](\"writer-addMarker-marker-exists: Marker with provided name already exists.\",this)}if(!n){throw new ss[\"b\"](\"writer-addMarker-no-range: Range parameter is required when adding a new marker.\",this)}if(!i){return this.model.markers._set(e,n,i,o)}mg(this,e,null,n,o);return this.model.markers.get(e)}updateMarker(e,t){this._assertWriterUsedCorrectly();const i=typeof e==\"string\"?e:e.name;const n=this.model.markers.get(i);if(!n){throw new ss[\"b\"](\"writer-updateMarker-marker-not-exists: Marker with provided name does not exists.\",this)}if(!t){this.model.markers._refresh(n);return}const o=typeof t.usingOperation==\"boolean\";const r=typeof t.affectsData==\"boolean\";const s=r?t.affectsData:n.affectsData;if(!o&&!t.range&&!r){throw new ss[\"b\"](\"writer-updateMarker-wrong-options: One of the options is required - provide range, usingOperations or affectsData.\",this)}const a=n.getRange();const l=t.range?t.range:a;if(o&&t.usingOperation!==n.managedUsingOperations){if(t.usingOperation){mg(this,i,null,l,s)}else{mg(this,i,a,null,s);this.model.markers._set(i,l,undefined,s)}return}if(n.managedUsingOperations){mg(this,i,a,l,s)}else{this.model.markers._set(i,l,undefined,s)}}removeMarker(e){this._assertWriterUsedCorrectly();const t=typeof e==\"string\"?e:e.name;if(!this.model.markers.has(t)){throw new ss[\"b\"](\"writer-removeMarker-no-marker: Trying to remove marker which does not exist.\",this)}const i=this.model.markers.get(t);if(!i.managedUsingOperations){this.model.markers._remove(t);return}const n=i.getRange();mg(this,t,n,null,i.affectsData)}setSelection(e,t,i){this._assertWriterUsedCorrectly();this.model.document.selection._setTo(e,t,i)}setSelectionFocus(e,t){this._assertWriterUsedCorrectly();this.model.document.selection._setFocus(e,t)}setSelectionAttribute(e,t){this._assertWriterUsedCorrectly();if(typeof e===\"string\"){this._setSelectionAttribute(e,t)}else{for(const[t,i]of Ws(e)){this._setSelectionAttribute(t,i)}}}removeSelectionAttribute(e){this._assertWriterUsedCorrectly();if(typeof e===\"string\"){this._removeSelectionAttribute(e)}else{for(const t of e){this._removeSelectionAttribute(t)}}}overrideSelectionGravity(){return this.model.document.selection._overrideGravity()}restoreSelectionGravity(e){this.model.document.selection._restoreGravity(e)}_setSelectionAttribute(e,t){const i=this.model.document.selection;if(i.isCollapsed&&i.anchor.parent.isEmpty){const n=ff._getStoreAttributeKey(e);this.setAttribute(n,t,i.anchor.parent)}i._setAttribute(e,t)}_removeSelectionAttribute(e){const t=this.model.document.selection;if(t.isCollapsed&&t.anchor.parent.isEmpty){const i=ff._getStoreAttributeKey(e);this.removeAttribute(i,t.anchor.parent)}t._removeAttribute(e)}_assertWriterUsedCorrectly(){if(this.model._currentWriter!==this){throw new ss[\"b\"](\"writer-incorrect-use: Trying to use a writer outside the change() block.\",this)}}_addOperationForAffectedMarkers(e,t){for(const i of this.model.markers){if(!i.managedUsingOperations){continue}const n=i.getRange();let o=false;if(e===\"move\"){o=t.containsPosition(n.start)||t.start.isEqual(n.start)||t.containsPosition(n.end)||t.end.isEqual(n.end)}else{const e=t.nodeBefore;const i=t.nodeAfter;const r=n.start.parent==e&&n.start.isAtEnd;const s=n.end.parent==i&&n.end.offset==0;const a=n.end.nodeAfter==i;const l=n.start.nodeAfter==i;o=r||s||a||l}if(o){this.updateMarker(i.name,{range:n})}}}}function hg(e,t,i,n){const o=e.model;const r=o.document;let s=n.start;let a;let l;let c;for(const e of n.getWalker({shallow:true})){c=e.item.getAttribute(t);if(a&&l!=c){if(l!=i){d()}s=a}a=e.nextPosition;l=c}if(a instanceof qh&&a!=s&&l!=i){d()}function d(){const n=new Kh(s,a);const c=n.root.document?r.version:null;const d=new tg(n,t,l,i,c);e.batch.addOperation(d);o.applyOperation(d)}}function fg(e,t,i,n){const o=e.model;const r=o.document;const s=n.getAttribute(t);let a,l;if(s!=i){const c=n.root===n;if(c){const e=n.document?r.version:null;l=new ag(n,t,s,i,e)}else{a=new Kh(qh._createBefore(n),e.createPositionAfter(n));const o=a.root.document?r.version:null;l=new tg(a,t,s,i,o)}e.batch.addOperation(l);o.applyOperation(l)}}function mg(e,t,i,n,o){const r=e.model;const s=r.document;const a=new rg(t,i,n,r.markers,o,s.version);e.batch.addOperation(a);r.applyOperation(a)}function gg(e,t,i,n){let o;if(e.root.document){const i=n.document;const r=new qh(i.graveyard,[0]);o=new ng(e,t,r,i.version)}else{o=new ig(e,t)}i.addOperation(o);n.applyOperation(o)}function pg(e,t){if(e===t){return true}if(e instanceof dg&&t instanceof dg){return true}return false}class bg{constructor(e){this._markerCollection=e;this._changesInElement=new Map;this._elementSnapshots=new Map;this._changedMarkers=new Map;this._changeCount=0;this._cachedChanges=null;this._cachedChangesWithGraveyard=null}get isEmpty(){return this._changesInElement.size==0&&this._changedMarkers.size==0}refreshItem(e){if(this._isInInsertedElement(e.parent)){return}this._markRemove(e.parent,e.startOffset,e.offsetSize);this._markInsert(e.parent,e.startOffset,e.offsetSize);const t=Kh._createOn(e);for(const e of this._markerCollection.getMarkersIntersectingRange(t)){const t=e.getRange();this.bufferMarkerChange(e.name,t,t,e.affectsData)}this._cachedChanges=null}bufferOperation(e){switch(e.type){case\"insert\":{if(this._isInInsertedElement(e.position.parent)){return}this._markInsert(e.position.parent,e.position.offset,e.nodes.maxOffset);break}case\"addAttribute\":case\"removeAttribute\":case\"changeAttribute\":{for(const t of e.range.getItems({shallow:true})){if(this._isInInsertedElement(t.parent)){continue}this._markAttribute(t)}break}case\"remove\":case\"move\":case\"reinsert\":{if(e.sourcePosition.isEqual(e.targetPosition)||e.sourcePosition.getShiftedBy(e.howMany).isEqual(e.targetPosition)){return}const t=this._isInInsertedElement(e.sourcePosition.parent);const i=this._isInInsertedElement(e.targetPosition.parent);if(!t){this._markRemove(e.sourcePosition.parent,e.sourcePosition.offset,e.howMany)}if(!i){this._markInsert(e.targetPosition.parent,e.getMovedRangeStart().offset,e.howMany)}break}case\"rename\":{if(this._isInInsertedElement(e.position.parent)){return}this._markRemove(e.position.parent,e.position.offset,1);this._markInsert(e.position.parent,e.position.offset,1);const t=Kh._createFromPositionAndShift(e.position,1);for(const e of this._markerCollection.getMarkersIntersectingRange(t)){const t=e.getRange();this.bufferMarkerChange(e.name,t,t,e.affectsData)}break}case\"split\":{const t=e.splitPosition.parent;if(!this._isInInsertedElement(t)){this._markRemove(t,e.splitPosition.offset,e.howMany)}if(!this._isInInsertedElement(e.insertionPosition.parent)){this._markInsert(e.insertionPosition.parent,e.insertionPosition.offset,1)}if(e.graveyardPosition){this._markRemove(e.graveyardPosition.parent,e.graveyardPosition.offset,1)}break}case\"merge\":{const t=e.sourcePosition.parent;if(!this._isInInsertedElement(t.parent)){this._markRemove(t.parent,t.startOffset,1)}const i=e.graveyardPosition.parent;this._markInsert(i,e.graveyardPosition.offset,1);const n=e.targetPosition.parent;if(!this._isInInsertedElement(n)){this._markInsert(n,e.targetPosition.offset,t.maxOffset)}break}}this._cachedChanges=null}bufferMarkerChange(e,t,i,n){const o=this._changedMarkers.get(e);if(!o){this._changedMarkers.set(e,{oldRange:t,newRange:i,affectsData:n})}else{o.newRange=i;o.affectsData=n;if(o.oldRange==null&&o.newRange==null){this._changedMarkers.delete(e)}}}getMarkersToRemove(){const e=[];for(const[t,i]of this._changedMarkers){if(i.oldRange!=null){e.push({name:t,range:i.oldRange})}}return e}getMarkersToAdd(){const e=[];for(const[t,i]of this._changedMarkers){if(i.newRange!=null){e.push({name:t,range:i.newRange})}}return e}getChangedMarkers(){return Array.from(this._changedMarkers).map(e=>({name:e[0],data:{oldRange:e[1].oldRange,newRange:e[1].newRange}}))}hasDataChanges(){for(const[,e]of this._changedMarkers){if(e.affectsData){return true}}return this._changesInElement.size>0}getChanges(e={includeChangesInGraveyard:false}){if(this._cachedChanges){if(e.includeChangesInGraveyard){return this._cachedChangesWithGraveyard.slice()}else{return this._cachedChanges.slice()}}const t=[];for(const e of this._changesInElement.keys()){const i=this._changesInElement.get(e).sort((e,t)=>{if(e.offset===t.offset){if(e.type!=t.type){return e.type==\"remove\"?-1:1}return 0}return e.offset{if(e.position.root!=t.position.root){return e.position.root.rootNamei.offset){if(n>o){const e={type:\"attribute\",offset:o,howMany:n-o,count:this._changeCount++};this._handleChange(e,t);t.push(e)}e.nodesToHandle=i.offset-e.offset;e.howMany=e.nodesToHandle}else if(e.offset>=i.offset&&e.offseto){e.nodesToHandle=n-o;e.offset=o}else{e.nodesToHandle=0}}}if(i.type==\"remove\"){if(e.offseti.offset){const o={type:\"attribute\",offset:i.offset,howMany:n-i.offset,count:this._changeCount++};this._handleChange(o,t);t.push(o);e.nodesToHandle=i.offset-e.offset;e.howMany=e.nodesToHandle}}if(i.type==\"attribute\"){if(e.offset>=i.offset&&n<=o){e.nodesToHandle=0;e.howMany=0;e.offset=0}else if(e.offset<=i.offset&&n>=o){i.howMany=0}}}}e.howMany=e.nodesToHandle;delete e.nodesToHandle}_getInsertDiff(e,t,i){return{type:\"insert\",position:qh._createAt(e,t),name:i,length:1,changeCount:this._changeCount++}}_getRemoveDiff(e,t,i){return{type:\"remove\",position:qh._createAt(e,t),name:i,length:1,changeCount:this._changeCount++}}_getAttributesDiff(e,t,i){const n=[];i=new Map(i);for(const[o,r]of t){const t=i.has(o)?i.get(o):null;if(t!==r){n.push({type:\"attribute\",position:e.start,range:e.clone(),length:1,attributeKey:o,attributeOldValue:r,attributeNewValue:t,changeCount:this._changeCount++})}i.delete(o)}for(const[t,o]of i){n.push({type:\"attribute\",position:e.start,range:e.clone(),length:1,attributeKey:t,attributeOldValue:null,attributeNewValue:o,changeCount:this._changeCount++})}return n}_isInInsertedElement(e){const t=e.parent;if(!t){return false}const i=this._changesInElement.get(t);const n=e.startOffset;if(i){for(const e of i){if(e.type==\"insert\"&&n>=e.offset&&nn){for(let t=0;t{const i=t[0];if(i.isDocumentOperation&&i.baseVersion!==this.version){throw new ss[\"b\"](\"model-document-applyOperation-wrong-version: Only operations with matching versions can be applied.\",this,{operation:i})}},{priority:\"highest\"});this.listenTo(e,\"applyOperation\",(e,t)=>{const i=t[0];if(i.isDocumentOperation){this.differ.bufferOperation(i)}},{priority:\"high\"});this.listenTo(e,\"applyOperation\",(e,t)=>{const i=t[0];if(i.isDocumentOperation){this.version++;this.history.addOperation(i)}},{priority:\"low\"});this.listenTo(this.selection,\"change\",()=>{this._hasSelectionChangedFromTheLastChangeBlock=true});this.listenTo(e.markers,\"update\",(e,t,i,n)=>{this.differ.bufferMarkerChange(t.name,i,n,t.affectsData);if(i===null){t.on(\"change\",(e,i)=>{this.differ.bufferMarkerChange(t.name,i,t.getRange(),t.affectsData)})}})}get graveyard(){return this.getRoot(Eg)}createRoot(e=\"$root\",t=\"main\"){if(this.roots.get(t)){throw new ss[\"b\"](\"model-document-createRoot-name-exists: Root with specified name already exists.\",this,{name:t})}const i=new dg(this,e,t);this.roots.add(i);return i}destroy(){this.selection.destroy();this.stopListening()}getRoot(e=\"main\"){return this.roots.get(e)}getRootNames(){return Array.from(this.roots,e=>e.rootName).filter(e=>e!=Eg)}registerPostFixer(e){this._postFixers.add(e)}toJSON(){const e=js(this);e.selection=\"[engine.model.DocumentSelection]\";e.model=\"[engine.model.Model]\";return e}_handleChangeBlock(e){if(this._hasDocumentChangedFromTheLastChangeBlock()){this._callPostFixers(e);this.selection.refresh();if(this.differ.hasDataChanges()){this.fire(\"change:data\",e.batch)}else{this.fire(\"change\",e.batch)}this.selection.refresh();this.differ.reset()}this._hasSelectionChangedFromTheLastChangeBlock=false}_hasDocumentChangedFromTheLastChangeBlock(){return!this.differ.isEmpty||this._hasSelectionChangedFromTheLastChangeBlock}_getDefaultRoot(){for(const e of this.roots){if(e!==this.graveyard){return e}}return this.graveyard}_getDefaultRange(){const e=this._getDefaultRoot();const t=this.model;const i=t.schema;const n=t.createPositionFromPath(e,[0]);const o=i.getNearestSelectionRange(n);return o||t.createRange(n)}_validateSelectionRange(e){return Mg(e.start)&&Mg(e.end)}_callPostFixers(e){let t=false;do{for(const i of this._postFixers){this.selection.refresh();t=i(e);if(t){break}}}while(t)}}ys(Pg,ds);function Mg(e){const t=e.textNode;if(t){const i=t.data;const n=e.offset-t.startOffset;return!Cg(i,n)&&!Tg(i,n)}return true}class Sg{constructor(){this._markers=new Map}[Symbol.iterator](){return this._markers.values()}has(e){return this._markers.has(e)}get(e){return this._markers.get(e)||null}_set(e,t,i=false,n=false){const o=e instanceof Ig?e.name:e;const r=this._markers.get(o);if(r){const e=r.getRange();let s=false;if(!e.isEqual(t)){r._attachLiveRange(lf.fromRange(t));s=true}if(i!=r.managedUsingOperations){r._managedUsingOperations=i;s=true}if(typeof n===\"boolean\"&&n!=r.affectsData){r._affectsData=n;s=true}if(s){this.fire(\"update:\"+o,r,e,t)}return r}const s=lf.fromRange(t);const a=new Ig(o,s,i,n);this._markers.set(o,a);this.fire(\"update:\"+o,a,null,t);return a}_remove(e){const t=e instanceof Ig?e.name:e;const i=this._markers.get(t);if(i){this._markers.delete(t);this.fire(\"update:\"+t,i,i.getRange(),null);this._destroyMarker(i);return true}return false}_refresh(e){const t=e instanceof Ig?e.name:e;const i=this._markers.get(t);if(!i){throw new ss[\"b\"](\"markercollection-refresh-marker-not-exists: Marker with provided name does not exists.\",this)}const n=i.getRange();this.fire(\"update:\"+t,i,n,n,i.managedUsingOperations,i.affectsData)}*getMarkersAtPosition(e){for(const t of this){if(t.getRange().containsPosition(e)){yield t}}}*getMarkersIntersectingRange(e){for(const t of this){if(t.getRange().getIntersection(e)!==null){yield t}}}destroy(){for(const e of this._markers.values()){this._destroyMarker(e)}this._markers=null;this.stopListening()}*getMarkersGroup(e){for(const t of this._markers.values()){if(t.name.startsWith(e+\":\")){yield t}}}_destroyMarker(e){e.stopListening();e._detachLiveRange()}}ys(Sg,ds);class Ig{constructor(e,t,i,n){this.name=e;this._liveRange=this._attachLiveRange(t);this._managedUsingOperations=i;this._affectsData=n}get managedUsingOperations(){if(!this._liveRange){throw new ss[\"b\"](\"marker-destroyed: Cannot use a destroyed marker instance.\",this)}return this._managedUsingOperations}get affectsData(){if(!this._liveRange){throw new ss[\"b\"](\"marker-destroyed: Cannot use a destroyed marker instance.\",this)}return this._affectsData}getStart(){if(!this._liveRange){throw new ss[\"b\"](\"marker-destroyed: Cannot use a destroyed marker instance.\",this)}return this._liveRange.start.clone()}getEnd(){if(!this._liveRange){throw new ss[\"b\"](\"marker-destroyed: Cannot use a destroyed marker instance.\",this)}return this._liveRange.end.clone()}getRange(){if(!this._liveRange){throw new ss[\"b\"](\"marker-destroyed: Cannot use a destroyed marker instance.\",this)}return this._liveRange.toRange()}is(e){return e===\"marker\"||e===\"model:marker\"}_attachLiveRange(e){if(this._liveRange){this._detachLiveRange()}e.delegate(\"change:range\").to(this);e.delegate(\"change:content\").to(this);this._liveRange=e;return e}_detachLiveRange(){this._liveRange.stopDelegating(\"change:range\",this);this._liveRange.stopDelegating(\"change:content\",this);this._liveRange.detach();this._liveRange=null}}ys(Ig,ds);class Lg extends Hm{get type(){return\"noop\"}clone(){return new Lg(this.baseVersion)}getReversed(){return new Lg(this.baseVersion+1)}_execute(){}static get className(){return\"NoOperation\"}}const Ng={};Ng[tg.className]=tg;Ng[og.className]=og;Ng[rg.className]=rg;Ng[ng.className]=ng;Ng[Lg.className]=Lg;Ng[Hm.className]=Hm;Ng[sg.className]=sg;Ng[ag.className]=ag;Ng[cg.className]=cg;Ng[lg.className]=lg;class Og{static fromJSON(e,t){return Ng[e.__className].fromJSON(e,t)}}class Rg extends qh{constructor(e,t,i=\"toNone\"){super(e,t,i);if(!this.root.is(\"rootElement\")){throw new ss[\"b\"](\"model-liveposition-root-not-rootelement: LivePosition's root has to be an instance of RootElement.\",e)}zg.call(this)}detach(){this.stopListening()}is(e){return e===\"livePosition\"||e===\"model:livePosition\"||e==\"position\"||e===\"model:position\"}toPosition(){return new qh(this.root,this.path.slice(),this.stickiness)}static fromPosition(e,t){return new this(e.root,e.path.slice(),t?t:e.stickiness)}}function zg(){this.listenTo(this.root.document.model,\"applyOperation\",(e,t)=>{const i=t[0];if(!i.isDocumentOperation){return}Dg.call(this,i)},{priority:\"low\"})}function Dg(e){const t=this.getTransformedByOperation(e);if(!this.isEqual(t)){const e=this.toPosition();this.path=t.path;this.root=t.root;this.fire(\"change\",e)}}ys(Rg,ds);function jg(e,t,i,n){return e.change(o=>{let r;if(!i){r=e.document.selection}else if(i instanceof tf||i instanceof ff){r=i}else{r=o.createSelection(i,n)}if(!r.isCollapsed){e.deleteContent(r,{doNotAutoparagraph:true})}const s=new Bg(e,o,r.anchor);let a;if(t.is(\"documentFragment\")){a=t.getChildren()}else{a=[t]}s.handleNodes(a,{isFirst:true,isLast:true});const l=s.getSelectionRange();if(l){if(r instanceof ff){o.setSelection(l)}else{r.setTo(l)}}else{}const c=s.getAffectedRange()||e.createRange(r.anchor);s.destroy();return c})}class Bg{constructor(e,t,i){this.model=e;this.writer=t;this.position=i;this.canMergeWith=new Set([this.position.parent]);this.schema=e.schema;this._filterAttributesOf=[];this._affectedStart=null;this._affectedEnd=null}handleNodes(e,t){e=Array.from(e);for(let i=0;i{if(!i.doNotResetEntireContent&&$g(o,t)){qg(e,t,o);return}const r=n.start;const s=Rg.fromPosition(n.end,\"toNext\");if(!n.start.isTouching(n.end)){e.remove(n)}if(!i.leaveUnmerged){Fg(e,r,s);o.removeDisallowedAttributes(r.parent.getChildren(),e)}Gg(e,t,r);if(!i.doNotAutoparagraph&&Hg(o,r)){Ug(e,r,t)}s.detach()})}function Fg(e,t,i){const n=t.parent;const o=i.parent;if(n==o){return}if(e.model.schema.isLimit(n)||e.model.schema.isLimit(o)){return}if(!Wg(t,i,e.model.schema)){return}t=e.createPositionAfter(n);i=e.createPositionBefore(o);if(!i.isEqual(t)){e.insert(o,t)}e.merge(t);while(i.parent.isEmpty){const t=i.parent;i=e.createPositionBefore(t);e.remove(t)}Fg(e,t,i)}function Hg(e,t){const i=e.checkChild(t,\"$text\");const n=e.checkChild(t,\"paragraph\");return!i&&n}function Wg(e,t,i){const n=new Kh(e,t);for(const e of n.getWalker()){if(i.isLimit(e.item)){return false}}return true}function Ug(e,t,i){const n=e.createElement(\"paragraph\");e.insert(n,t);Gg(e,i,e.createPositionAt(n,0))}function qg(e,t){const i=e.model.schema.getLimitElement(t);e.remove(e.createRangeIn(i));Ug(e,e.createPositionAt(i,0),t)}function $g(e,t){const i=e.getLimitElement(t);if(!t.containsEntireContent(i)){return false}const n=t.getFirstRange();if(n.start.parent==n.end.parent){return false}return e.checkChild(i,\"paragraph\")}function Gg(e,t,i){if(t instanceof ff){e.setSelection(i)}else{t.setTo(i)}}const Yg=' ,.?!:;\"-()';function Kg(e,t,i={}){const n=e.schema;const o=i.direction!=\"backward\";const r=i.unit?i.unit:\"character\";const s=t.focus;const a=new Wh({boundaries:Xg(s,o),singleCharacters:true,direction:o?\"forward\":\"backward\"});const l={walker:a,schema:n,isForward:o,unit:r};let c;while(c=a.next()){if(c.done){return}const i=Jg(l,c.value);if(i){if(t instanceof ff){e.change(e=>{e.setSelectionFocus(i)})}else{t.setFocus(i)}return}}}function Jg(e,t){if(t.type==\"text\"){if(e.unit===\"word\"){return Zg(e.walker,e.isForward)}return Qg(e.walker,e.unit,e.isForward)}if(t.type==(e.isForward?\"elementStart\":\"elementEnd\")){if(e.schema.isObject(t.item)){return qh._createAt(t.item,e.isForward?\"after\":\"before\")}if(e.schema.checkChild(t.nextPosition,\"$text\")){return t.nextPosition}}else{if(e.schema.isLimit(t.item)){e.walker.skip(()=>true);return}if(e.schema.checkChild(t.nextPosition,\"$text\")){return t.nextPosition}}}function Qg(e,t){const i=e.position.textNode;if(i){const n=i.data;let o=e.position.offset-i.startOffset;while(Cg(n,o)||t==\"character\"&&Tg(n,o)){e.next();o=e.position.offset-i.startOffset}}return e.position}function Zg(e,t){let i=e.position.textNode;if(i){let n=e.position.offset-i.startOffset;while(!ep(i.data,n,t)&&!tp(i,n,t)){e.next();const o=t?e.position.nodeAfter:e.position.nodeBefore;if(o&&o.is(\"text\")){const n=o.data.charAt(t?0:o.data.length-1);if(!Yg.includes(n)){e.next();i=e.position.textNode}}n=e.position.offset-i.startOffset}}return e.position}function Xg(e,t){const i=e.root;const n=qh._createAt(i,t?\"end\":0);if(t){return new Kh(e,n)}else{return new Kh(n,e)}}function ep(e,t,i){const n=t+(i?0:-1);return Yg.includes(e.charAt(n))}function tp(e,t,i){return t===(i?e.endOffset:0)}function ip(e,t){return e.change(e=>{const i=e.createDocumentFragment();const n=t.getFirstRange();if(!n||n.isCollapsed){return i}const o=n.start.root;const r=n.start.getCommonPath(n.end);const s=o.getNodeByPath(r);let a;if(n.start.parent==n.end.parent){a=n}else{a=e.createRange(e.createPositionAt(s,n.start.path[r.length]),e.createPositionAt(s,n.end.path[r.length]+1))}const l=a.end.offset-a.start.offset;for(const t of a.getItems({shallow:true})){if(t.is(\"textProxy\")){e.appendText(t.data,t.getAttributes(),i)}else{e.append(t._clone(true),i)}}if(a!=n){const t=n._getTransformedByMove(a.start,e.createPositionAt(i,0),l)[0];const o=e.createRange(e.createPositionAt(i,0),t.start);const r=e.createRange(t.end,e.createPositionAt(i,\"end\"));np(r,e);np(o,e)}return i})}function np(e,t){const i=[];Array.from(e.getItems({direction:\"backward\"})).map(e=>t.createRangeOn(e)).filter(t=>{const i=(t.start.isAfter(e.start)||t.start.isEqual(e.start))&&(t.end.isBefore(e.end)||t.end.isEqual(e.end));return i}).forEach(e=>{i.push(e.start.parent);t.remove(e)});i.forEach(e=>{let i=e;while(i.parent&&i.isEmpty){const e=t.createRangeOn(i);i=i.parent;t.remove(e)}})}function op(e){e.document.registerPostFixer(t=>rp(t,e))}function rp(e,t){const i=t.document.selection;const n=t.schema;const o=[];let r=false;for(const e of i.getRanges()){const t=sp(e,n);if(t){o.push(t);r=true}else{o.push(e)}}if(r){e.setSelection(up(o),{backward:i.isBackward})}}function sp(e,t){if(e.isCollapsed){return ap(e,t)}return lp(e,t)}function ap(e,t){const i=e.start;const n=t.getNearestSelectionRange(i);if(!n){return null}if(!n.isCollapsed){return n}const o=n.start;if(i.isEqual(o)){return null}return new Kh(o)}function lp(e,t){const i=e.start;const n=e.end;const o=t.checkChild(i,\"$text\");const r=t.checkChild(n,\"$text\");const s=t.getLimitElement(i);const a=t.getLimitElement(n);if(s===a){if(o&&r){return null}if(dp(i,n,t)){const e=i.nodeAfter&&t.isObject(i.nodeAfter);const o=e?null:t.getNearestSelectionRange(i,\"forward\");const r=n.nodeBefore&&t.isObject(n.nodeBefore);const s=r?null:t.getNearestSelectionRange(n,\"backward\");const a=o?o.start:i;const l=s?s.start:n;return new Kh(a,l)}}const l=s&&!s.is(\"rootElement\");const c=a&&!a.is(\"rootElement\");if(l||c){const e=i.nodeAfter&&n.nodeBefore&&i.nodeAfter.parent===n.nodeBefore.parent;const o=l&&(!e||!hp(i.nodeAfter,t));const r=c&&(!e||!hp(n.nodeBefore,t));let d=i;let u=n;if(o){d=qh._createBefore(cp(s,t))}if(r){u=qh._createAfter(cp(a,t))}return new Kh(d,u)}return null}function cp(e,t){let i=e;let n=i;while(t.isLimit(n)&&n.parent){i=n;n=n.parent}return i}function dp(e,t,i){const n=e.nodeAfter&&!i.isLimit(e.nodeAfter)||i.checkChild(e,\"$text\");const o=t.nodeBefore&&!i.isLimit(t.nodeBefore)||i.checkChild(t,\"$text\");return n||o}function up(e){const t=[];t.push(e.shift());for(const i of e){const e=t.pop();if(i.isIntersecting(e)){const n=e.start.isAfter(i.start)?i.start:e.start;const o=e.end.isAfter(i.end)?e.end:i.end;const r=new Kh(n,o);t.push(r)}else{t.push(e);t.push(i)}}return t}function hp(e,t){return e&&t.isObject(e)}class fp{constructor(){this.markers=new Sg;this.document=new Pg(this);this.schema=new gm;this._pendingChanges=[];this._currentWriter=null;[\"insertContent\",\"deleteContent\",\"modifySelection\",\"getSelectedContent\",\"applyOperation\"].forEach(e=>this.decorate(e));this.on(\"applyOperation\",(e,t)=>{const i=t[0];i._validate()},{priority:\"highest\"});this.schema.register(\"$root\",{isLimit:true});this.schema.register(\"$block\",{allowIn:\"$root\",isBlock:true});this.schema.register(\"$text\",{allowIn:\"$block\",isInline:true});this.schema.register(\"$clipboardHolder\",{allowContentOf:\"$root\",isLimit:true});this.schema.extend(\"$text\",{allowIn:\"$clipboardHolder\"});this.schema.register(\"$marker\");this.schema.addChildCheck((e,t)=>{if(t.name===\"$marker\"){return true}});op(this)}change(e){try{if(this._pendingChanges.length===0){this._pendingChanges.push({batch:new Fm,callback:e});return this._runPendingChanges()[0]}else{return e(this._currentWriter)}}catch(e){ss[\"b\"].rethrowUnexpectedError(e,this)}}enqueueChange(e,t){try{if(typeof e===\"string\"){e=new Fm(e)}else if(typeof e==\"function\"){t=e;e=new Fm}this._pendingChanges.push({batch:e,callback:t});if(this._pendingChanges.length==1){this._runPendingChanges()}}catch(e){ss[\"b\"].rethrowUnexpectedError(e,this)}}applyOperation(e){e._execute()}insertContent(e,t,i){return jg(this,e,t,i)}deleteContent(e,t){Vg(this,e,t)}modifySelection(e,t){Kg(this,e,t)}getSelectedContent(e){return ip(this,e)}hasContent(e,t){const i=e instanceof Fh?Kh._createIn(e):e;if(i.isCollapsed){return false}for(const e of this.markers.getMarkersIntersectingRange(i)){if(e.affectsData){return true}}const{ignoreWhitespaces:n=false}=t||{};for(const e of i.getItems()){if(e.is(\"textProxy\")){if(!n){return true}else if(e.data.search(/\\S/)!==-1){return true}}else if(this.schema.isObject(e)){return true}}return false}createPositionFromPath(e,t,i){return new qh(e,t,i)}createPositionAt(e,t){return qh._createAt(e,t)}createPositionAfter(e){return qh._createAfter(e)}createPositionBefore(e){return qh._createBefore(e)}createRange(e,t){return new Kh(e,t)}createRangeIn(e){return Kh._createIn(e)}createRangeOn(e){return Kh._createOn(e)}createSelection(e,t,i){return new tf(e,t,i)}createBatch(e){return new Fm(e)}createOperationFromJSON(e){return Og.fromJSON(e,this.document)}destroy(){this.document.destroy();this.stopListening()}_runPendingChanges(){const e=[];this.fire(\"_beforeChanges\");while(this._pendingChanges.length){const t=this._pendingChanges[0].batch;this._currentWriter=new ug(this,t);const i=this._pendingChanges[0].callback(this._currentWriter);e.push(i);this.document._handleChangeBlock(this._currentWriter);this._pendingChanges.shift();this._currentWriter=null}this.fire(\"_afterChanges\");return e}}ys(fp,Jl);class mp{constructor(){this._listener=Object.create(Ud)}listenTo(e){this._listener.listenTo(e,\"keydown\",(e,t)=>{this._listener.fire(\"_keydown:\"+Rc(t),t)})}set(e,t,i={}){const n=zc(e);const o=i.priority;this._listener.listenTo(this._listener,\"_keydown:\"+n,(e,i)=>{t(i,()=>{i.preventDefault();i.stopPropagation();e.stop()});e.return=true},{priority:o})}press(e){return!!this._listener.fire(\"_keydown:\"+Rc(e),e)}destroy(){this._listener.stopListening()}}class gp extends mp{constructor(e){super();this.editor=e}set(e,t,i={}){if(typeof t==\"string\"){const e=t;t=(t,i)=>{this.editor.execute(e);i()}}super.set(e,t,i)}}class pp{constructor(e={}){this._context=e.context||new Os({language:e.language});this._context._addEditor(this,!e.context);const t=Array.from(this.constructor.builtinPlugins||[]);this.config=new Kr(e,this.constructor.defaultConfig);this.config.define(\"plugins\",t);this.config.define(this._context._getEditorConfig());this.plugins=new As(this,t,this._context.plugins);this.locale=this._context.locale;this.t=this.locale.t;this.commands=new hm;this.set(\"state\",\"initializing\");this.once(\"ready\",()=>this.state=\"ready\",{priority:\"high\"});this.once(\"destroy\",()=>this.state=\"destroyed\",{priority:\"high\"});this.set(\"isReadOnly\",false);this.model=new fp;const i=new Ol;this.data=new zm(this.model,i);this.editing=new um(this.model,i);this.editing.view.document.bind(\"isReadOnly\").to(this);this.conversion=new jm([this.editing.downcastDispatcher,this.data.downcastDispatcher],this.data.upcastDispatcher);this.conversion.addAlias(\"dataDowncast\",this.data.downcastDispatcher);this.conversion.addAlias(\"editingDowncast\",this.editing.downcastDispatcher);this.keystrokes=new gp(this);this.keystrokes.listenTo(this.editing.view.document)}initPlugins(){const e=this.config;const t=e.get(\"plugins\");const i=e.get(\"removePlugins\")||[];const n=e.get(\"extraPlugins\")||[];return this.plugins.init(t.concat(n),i)}destroy(){let e=Promise.resolve();if(this.state==\"initializing\"){e=new Promise(e=>this.once(\"ready\",e))}return e.then(()=>{this.fire(\"destroy\");this.stopListening();this.commands.destroy()}).then(()=>this.plugins.destroy()).then(()=>{this.model.destroy();this.data.destroy();this.editing.destroy();this.keystrokes.destroy()}).then(()=>this._context._removeEditor(this))}execute(...e){try{this.commands.execute(...e)}catch(e){ss[\"b\"].rethrowUnexpectedError(e,this)}}}ys(pp,Jl);const bp={setData(e){this.data.set(e)},getData(e){return this.data.get(e)}};var wp=bp;function _p(e,t){if(e instanceof HTMLTextAreaElement){e.value=t}e.innerHTML=t}const kp={updateSourceElement(){if(!this.sourceElement){throw new ss[\"b\"](\"editor-missing-sourceelement: Cannot update the source element of a detached editor.\",this)}_p(this.sourceElement,this.data.get())}};var vp=kp;function yp(e){if(!me(e.updateSourceElement)){throw new ss[\"b\"](\"attachtoform-missing-elementapi-interface: Editor passed to attachToForm() must implement ElementApi.\",e)}const t=e.sourceElement;if(t&&t.tagName.toLowerCase()===\"textarea\"&&t.form){let i;const n=t.form;const o=()=>e.updateSourceElement();if(me(n.submit)){i=n.submit;n.submit=()=>{o();i.apply(n)}}n.addEventListener(\"submit\",o);e.on(\"destroy\",()=>{n.removeEventListener(\"submit\",o);if(i){n.submit=i}})}}class xp{getHtml(e){const t=document.implementation.createHTMLDocument(\"\");const i=t.createElement(\"div\");i.appendChild(e);return i.innerHTML}}class Ap{constructor(e){this._domParser=new DOMParser;this._domConverter=new Dd(e,{blockFillerMode:\"nbsp\"});this._htmlWriter=new xp}toData(e){const t=this._domConverter.viewToDom(e,document);return this._htmlWriter.getHtml(t)}toView(e){const t=this._toDom(e);return this._domConverter.domToView(t)}_toDom(e){const t=this._domParser.parseFromString(e,\"text/html\");const i=t.createDocumentFragment();const n=t.body.childNodes;while(n.length>0){i.appendChild(n[0])}return i}}class Cp{constructor(e){this.editor=e;this._components=new Map}*names(){for(const e of this._components.values()){yield e.originalName}}add(e,t){if(this.has(e)){throw new ss[\"b\"](\"componentfactory-item-exists: The item already exists in the component factory.\",this,{name:e})}this._components.set(Tp(e),{callback:t,originalName:e})}create(e){if(!this.has(e)){throw new ss[\"b\"](\"componentfactory-item-missing: The required component is not registered in the factory.\",this,{name:e})}return this._components.get(Tp(e)).callback(this.editor.locale)}has(e){return this._components.has(Tp(e))}}function Tp(e){return String(e).toLowerCase()}class Ep{constructor(){this.set(\"isFocused\",false);this.set(\"focusedElement\",null);this._elements=new Set;this._nextEventLoopTimeout=null}add(e){if(this._elements.has(e)){throw new ss[\"b\"](\"focusTracker-add-element-already-exist\",this)}this.listenTo(e,\"focus\",()=>this._focus(e),{useCapture:true});this.listenTo(e,\"blur\",()=>this._blur(),{useCapture:true});this._elements.add(e)}remove(e){if(e===this.focusedElement){this._blur(e)}if(this._elements.has(e)){this.stopListening(e);this._elements.delete(e)}}destroy(){this.stopListening()}_focus(e){clearTimeout(this._nextEventLoopTimeout);this.focusedElement=e;this.isFocused=true}_blur(){clearTimeout(this._nextEventLoopTimeout);this._nextEventLoopTimeout=setTimeout(()=>{this.focusedElement=null;this.isFocused=false},0)}}ys(Ep,Ud);ys(Ep,Jl);class Pp{constructor(e){this.editor=e;this.componentFactory=new Cp(e);this.focusTracker=new Ep;this._editableElementsMap=new Map;this.listenTo(e.editing.view.document,\"layoutChanged\",()=>this.update())}get element(){return null}update(){this.fire(\"update\")}destroy(){this.stopListening();this.focusTracker.destroy();for(const e of this._editableElementsMap.values()){e.ckeditorInstance=null}this._editableElementsMap=new Map}setEditableElement(e,t){this._editableElementsMap.set(e,t);if(!t.ckeditorInstance){t.ckeditorInstance=this.editor}}getEditableElement(e=\"main\"){return this._editableElementsMap.get(e)}getEditableElementsNames(){return this._editableElementsMap.keys()}get _editableElements(){console.warn(\"editor-ui-deprecated-editable-elements: \"+\"The EditorUI#_editableElements property has been deprecated and will be removed in the near future.\",{editorUI:this});return this._editableElementsMap}}ys(Pp,ds);function Mp({origin:e,originKeystrokeHandler:t,originFocusTracker:i,toolbar:n,beforeFocus:o,afterBlur:r}){i.add(n.element);t.set(\"Alt+F10\",(e,t)=>{if(i.isFocused&&!n.focusTracker.isFocused){if(o){o()}n.focus();t()}});n.keystrokes.set(\"Esc\",(t,i)=>{if(n.focusTracker.isFocused){e.focus();if(r){r()}i()}})}function Sp(e){if(Array.isArray(e)){return{items:e}}if(!e){return{items:[]}}return Object.assign({items:[]},e)}var Ip=i(17);const Lp=new WeakMap;function Np(e){const{view:t,element:i,text:n,isDirectHost:o=true}=e;const r=t.document;if(!Lp.has(r)){Lp.set(r,new Map);r.registerPostFixer(e=>jp(r,e))}Lp.get(r).set(i,{text:n,isDirectHost:o});t.change(e=>jp(r,e))}function Op(e,t){const i=t.document;e.change(e=>{if(!Lp.has(i)){return}const n=Lp.get(i);const o=n.get(t);e.removeAttribute(\"data-placeholder\",o.hostElement);zp(e,o.hostElement);n.delete(t)})}function Rp(e,t){if(!t.hasClass(\"ck-placeholder\")){e.addClass(\"ck-placeholder\",t);return true}return false}function zp(e,t){if(t.hasClass(\"ck-placeholder\")){e.removeClass(\"ck-placeholder\",t);return true}return false}function Dp(e){if(!e.isAttached()){return false}const t=!Array.from(e.getChildren()).some(e=>!e.is(\"uiElement\"));const i=e.document;if(!i.isFocused&&t){return true}const n=i.selection;const o=n.anchor;if(t&&o&&o.parent!==e){return true}return false}function jp(e,t){const i=Lp.get(e);let n=false;for(const[e,o]of i){if(Bp(t,e,o)){n=true}}return n}function Bp(e,t,i){const{text:n,isDirectHost:o}=i;const r=o?t:Vp(t);let s=false;if(!r){return false}i.hostElement=r;if(r.getAttribute(\"data-placeholder\")!==n){e.setAttribute(\"data-placeholder\",n,r);s=true}if(Dp(r)){if(Rp(e,r)){s=true}}else if(zp(e,r)){s=true}return s}function Vp(e){if(e.childCount===1){const t=e.getChild(0);if(t.is(\"element\")&&!t.is(\"uiElement\")){return t}}return null}class Fp{constructor(){this._replacedElements=[]}replace(e,t){this._replacedElements.push({element:e,newElement:t});e.style.display=\"none\";if(t){e.parentNode.insertBefore(t,e.nextSibling)}}restore(){this._replacedElements.forEach(({element:e,newElement:t})=>{e.style.display=\"\";if(t){t.remove()}});this._replacedElements=[]}}class Hp extends Pp{constructor(e,t){super(e);this.view=t;this._toolbarConfig=Sp(e.config.get(\"toolbar\"));this._elementReplacer=new Fp}get element(){return this.view.element}init(e){const t=this.editor;const i=this.view;const n=t.editing.view;const o=i.editable;const r=n.document.getRoot();o.name=r.rootName;i.render();const s=o.element;this.setEditableElement(o.name,s);this.focusTracker.add(s);i.editable.bind(\"isFocused\").to(this.focusTracker);n.attachDomRoot(s);if(e){this._elementReplacer.replace(e,this.element)}this._initPlaceholder();this._initToolbar();this.fire(\"ready\")}destroy(){const e=this.view;const t=this.editor.editing.view;this._elementReplacer.restore();t.detachDomRoot(e.editable.name);e.destroy();super.destroy()}_initToolbar(){const e=this.editor;const t=this.view;const i=e.editing.view;t.stickyPanel.bind(\"isActive\").to(this.focusTracker,\"isFocused\");t.stickyPanel.limiterElement=t.element;if(this._toolbarConfig.viewportTopOffset){t.stickyPanel.viewportTopOffset=this._toolbarConfig.viewportTopOffset}t.toolbar.fillFromConfig(this._toolbarConfig.items,this.componentFactory);Mp({origin:i,originFocusTracker:this.focusTracker,originKeystrokeHandler:e.keystrokes,toolbar:t.toolbar})}_initPlaceholder(){const e=this.editor;const t=e.editing.view;const i=t.document.getRoot();const n=e.sourceElement;const o=e.config.get(\"placeholder\")||n&&n.tagName.toLowerCase()===\"textarea\"&&n.getAttribute(\"placeholder\");if(o){Np({view:t,element:i,text:o,isDirectHost:false})}}}class Wp extends xs{constructor(e=[]){super(e,{idProperty:\"viewUid\"});this.on(\"add\",(e,t,i)=>{this._renderViewIntoCollectionParent(t,i)});this.on(\"remove\",(e,t)=>{if(t.element&&this._parentElement){t.element.remove()}});this._parentElement=null}destroy(){this.map(e=>e.destroy())}setParent(e){this._parentElement=e;for(const e of this){this._renderViewIntoCollectionParent(e)}}delegate(...e){if(!e.length||!Up(e)){throw new ss[\"b\"](\"ui-viewcollection-delegate-wrong-events: All event names must be strings.\",this)}return{to:t=>{for(const i of this){for(const n of e){i.delegate(n).to(t)}}this.on(\"add\",(i,n)=>{for(const i of e){n.delegate(i).to(t)}});this.on(\"remove\",(i,n)=>{for(const i of e){n.stopDelegating(i,t)}})}}}_renderViewIntoCollectionParent(e,t){if(!e.isRendered){e.render()}if(e.element&&this._parentElement){this._parentElement.insertBefore(e.element,this._parentElement.children[t])}}}function Up(e){return e.every(e=>typeof e==\"string\")}const qp=\"http://www.w3.org/1999/xhtml\";class $p{constructor(e){Object.assign(this,nb(ib(e)));this._isRendered=false;this._revertData=null}render(){const e=this._renderNode({intoFragment:true});this._isRendered=true;return e}apply(e){this._revertData=pb();this._renderNode({node:e,isApplying:true,revertData:this._revertData});return e}revert(e){if(!this._revertData){throw new ss[\"b\"](\"ui-template-revert-not-applied: Attempting to revert a template which has not been applied yet.\",[this,e])}this._revertTemplateFromNode(e,this._revertData)}*getViews(){function*e(t){if(t.children){for(const i of t.children){if(fb(i)){yield i}else if(mb(i)){yield*e(i)}}}}yield*e(this)}static bind(e,t){return{to(i,n){return new Yp({eventNameOrFunction:i,attribute:i,observable:e,emitter:t,callback:n})},if(i,n,o){return new Kp({observable:e,emitter:t,attribute:i,valueIfTrue:n,callback:o})}}}static extend(e,t){if(e._isRendered){throw new ss[\"b\"](\"template-extend-render: Attempting to extend a template which has already been rendered.\",[this,e])}ub(e,nb(ib(t)))}_renderNode(e){let t;if(e.node){t=this.tag&&this.text}else{t=this.tag?this.text:!this.text}if(t){throw new ss[\"b\"]('ui-template-wrong-syntax: Node definition must have either \"tag\" or \"text\" when rendering a new Node.',this)}if(this.text){return this._renderText(e)}else{return this._renderElement(e)}}_renderElement(e){let t=e.node;if(!t){t=e.node=document.createElementNS(this.ns||qp,this.tag)}this._renderAttributes(e);this._renderElementChildren(e);this._setUpListeners(e);return t}_renderText(e){let t=e.node;if(t){e.revertData.text=t.textContent}else{t=e.node=document.createTextNode(\"\")}if(Jp(this.text)){this._bindToObservable({schema:this.text,updater:Xp(t),data:e})}else{t.textContent=this.text.join(\"\")}return t}_renderAttributes(e){let t,i,n,o;if(!this.attributes){return}const r=e.node;const s=e.revertData;for(t in this.attributes){n=r.getAttribute(t);i=this.attributes[t];if(s){s.attributes[t]=n}o=le(i[0])&&i[0].ns?i[0].ns:null;if(Jp(i)){const a=o?i[0].value:i;if(s&&bb(t)){a.unshift(n)}this._bindToObservable({schema:a,updater:eb(r,t,o),data:e})}else if(t==\"style\"&&typeof i[0]!==\"string\"){this._renderStyleAttribute(i[0],e)}else{if(s&&n&&bb(t)){i.unshift(n)}i=i.map(e=>e?e.value||e:e).reduce((e,t)=>e.concat(t),[]).reduce(cb,\"\");if(!hb(i)){r.setAttributeNS(o,t,i)}}}}_renderStyleAttribute(e,t){const i=t.node;for(const n in e){const o=e[n];if(Jp(o)){this._bindToObservable({schema:[o],updater:tb(i,n),data:t})}else{i.style[n]=o}}}_renderElementChildren(e){const t=e.node;const i=e.intoFragment?document.createDocumentFragment():t;const n=e.isApplying;let o=0;for(const r of this.children){if(gb(r)){if(!n){r.setParent(t);for(const e of r){i.appendChild(e.element)}}}else if(fb(r)){if(!n){if(!r.isRendered){r.render()}i.appendChild(r.element)}}else if(xd(r)){i.appendChild(r)}else{if(n){const t=e.revertData;const n=pb();t.children.push(n);r._renderNode({node:i.childNodes[o++],isApplying:true,revertData:n})}else{i.appendChild(r.render())}}}if(e.intoFragment){t.appendChild(i)}}_setUpListeners(e){if(!this.eventListeners){return}for(const t in this.eventListeners){const i=this.eventListeners[t].map(i=>{const[n,o]=t.split(\"@\");return i.activateDomEventListener(n,o,e)});if(e.revertData){e.revertData.bindings.push(i)}}}_bindToObservable({schema:e,updater:t,data:i}){const n=i.revertData;Zp(e,t,i);const o=e.filter(e=>!hb(e)).filter(e=>e.observable).map(n=>n.activateAttributeListener(e,t,i));if(n){n.bindings.push(o)}}_revertTemplateFromNode(e,t){for(const e of t.bindings){for(const t of e){t()}}if(t.text){e.textContent=t.text;return}for(const i in t.attributes){const n=t.attributes[i];if(n===null){e.removeAttribute(i)}else{e.setAttribute(i,n)}}for(let i=0;iZp(e,t,i);this.emitter.listenTo(this.observable,\"change:\"+this.attribute,n);return()=>{this.emitter.stopListening(this.observable,\"change:\"+this.attribute,n)}}}class Yp extends Gp{activateDomEventListener(e,t,i){const n=(e,i)=>{if(!t||i.target.matches(t)){if(typeof this.eventNameOrFunction==\"function\"){this.eventNameOrFunction(i)}else{this.observable.fire(this.eventNameOrFunction,i)}}};this.emitter.listenTo(i.node,e,n);return()=>{this.emitter.stopListening(i.node,e,n)}}}class Kp extends Gp{getValue(e){const t=super.getValue(e);return hb(t)?false:this.valueIfTrue||true}}function Jp(e){if(!e){return false}if(e.value){e=e.value}if(Array.isArray(e)){return e.some(Jp)}else if(e instanceof Gp){return true}return false}function Qp(e,t){return e.map(e=>{if(e instanceof Gp){return e.getValue(t)}return e})}function Zp(e,t,{node:i}){let n=Qp(e,i);if(e.length==1&&e[0]instanceof Kp){n=n[0]}else{n=n.reduce(cb,\"\")}if(hb(n)){t.remove()}else{t.set(n)}}function Xp(e){return{set(t){e.textContent=t},remove(){e.textContent=\"\"}}}function eb(e,t,i){return{set(n){e.setAttributeNS(i,t,n)},remove(){e.removeAttributeNS(i,t)}}}function tb(e,t){return{set(i){e.style[t]=i},remove(){e.style[t]=null}}}function ib(e){const t=$r(e,e=>{if(e&&(e instanceof Gp||mb(e)||fb(e)||gb(e))){return e}});return t}function nb(e){if(typeof e==\"string\"){e=sb(e)}else if(e.text){ab(e)}if(e.on){e.eventListeners=rb(e.on);delete e.on}if(!e.text){if(e.attributes){ob(e.attributes)}const t=[];if(e.children){if(gb(e.children)){t.push(e.children)}else{for(const i of e.children){if(mb(i)||fb(i)||xd(i)){t.push(i)}else{t.push(new $p(i))}}}}e.children=t}return e}function ob(e){for(const t in e){if(e[t].value){e[t].value=[].concat(e[t].value)}lb(e,t)}}function rb(e){for(const t in e){lb(e,t)}return e}function sb(e){return{text:[e]}}function ab(e){if(!Array.isArray(e.text)){e.text=[e.text]}}function lb(e,t){if(!Array.isArray(e[t])){e[t]=[e[t]]}}function cb(e,t){if(hb(t)){return e}else if(hb(e)){return t}else{return`${e} ${t}`}}function db(e,t){for(const i in t){if(e[i]){e[i].push(...t[i])}else{e[i]=t[i]}}}function ub(e,t){if(t.attributes){if(!e.attributes){e.attributes={}}db(e.attributes,t.attributes)}if(t.eventListeners){if(!e.eventListeners){e.eventListeners={}}db(e.eventListeners,t.eventListeners)}if(t.text){e.text.push(...t.text)}if(t.children&&t.children.length){if(e.children.length!=t.children.length){throw new ss[\"b\"](\"ui-template-extend-children-mismatch: The number of children in extended definition does not match.\",e)}let i=0;for(const n of t.children){ub(e.children[i++],n)}}}function hb(e){return!e&&e!==0}function fb(e){return e instanceof _b}function mb(e){return e instanceof $p}function gb(e){return e instanceof Wp}function pb(){return{children:[],bindings:[],attributes:{}}}function bb(e){return e==\"class\"||e==\"style\"}var wb=i(19);class _b{constructor(e){this.element=null;this.isRendered=false;this.locale=e;this.t=e&&e.t;this._viewCollections=new xs;this._unboundChildren=this.createCollection();this._viewCollections.on(\"add\",(t,i)=>{i.locale=e});this.decorate(\"render\")}get bindTemplate(){if(this._bindTemplate){return this._bindTemplate}return this._bindTemplate=$p.bind(this,this)}createCollection(e){const t=new Wp(e);this._viewCollections.add(t);return t}registerChild(e){if(!vs(e)){e=[e]}for(const t of e){this._unboundChildren.add(t)}}deregisterChild(e){if(!vs(e)){e=[e]}for(const t of e){this._unboundChildren.remove(t)}}setTemplate(e){this.template=new $p(e)}extendTemplate(e){$p.extend(this.template,e)}render(){if(this.isRendered){throw new ss[\"b\"](\"ui-view-render-already-rendered: This View has already been rendered.\",this)}if(this.template){this.element=this.template.render();this.registerChild(this.template.getViews())}this.isRendered=true}destroy(){this.stopListening();this._viewCollections.map(e=>e.destroy());if(this.template&&this.template._revertData){this.template.revert(this.element)}}}ys(_b,Ud);ys(_b,Jl);var kb=\"[object String]\";function vb(e){return typeof e==\"string\"||!Kt(e)&&T(e)&&k(e)==kb}var yb=vb;function xb(e,t,i={},n=[]){const o=i&&i.xmlns;const r=o?e.createElementNS(o,t):e.createElement(t);for(const e in i){r.setAttribute(e,i[e])}if(yb(n)||!vs(n)){n=[n]}for(let t of n){if(yb(t)){t=e.createTextNode(t)}r.appendChild(t)}return r}class Ab extends Wp{constructor(e,t=[]){super(t);this.locale=e}attachToDom(){this._bodyCollectionContainer=new $p({tag:\"div\",attributes:{class:[\"ck\",\"ck-reset_all\",\"ck-body\",\"ck-rounded-corners\"],dir:this.locale.uiLanguageDirection},children:this}).render();let e=document.querySelector(\".ck-body-wrapper\");if(!e){e=xb(document,\"div\",{class:\"ck-body-wrapper\"});document.body.appendChild(e)}e.appendChild(this._bodyCollectionContainer)}detachFromDom(){super.destroy();if(this._bodyCollectionContainer){this._bodyCollectionContainer.remove()}const e=document.querySelector(\".ck-body-wrapper\");if(e&&e.childElementCount==0){e.remove()}}}var Cb=i(21);class Tb extends _b{constructor(e){super(e);this.body=new Ab(e)}render(){super.render();this.body.attachToDom()}destroy(){this.body.detachFromDom();return super.destroy()}}var Eb=i(23);class Pb extends _b{constructor(e){super(e);this.set(\"text\");this.set(\"for\");this.id=`ck-editor__label_${is()}`;const t=this.bindTemplate;this.setTemplate({tag:\"label\",attributes:{class:[\"ck\",\"ck-label\"],id:this.id,for:t.to(\"for\")},children:[{text:t.to(\"text\")}]})}}class Mb extends Tb{constructor(e){super(e);this.top=this.createCollection();this.main=this.createCollection();this._voiceLabelView=this._createVoiceLabel();this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-reset\",\"ck-editor\",\"ck-rounded-corners\"],role:\"application\",dir:e.uiLanguageDirection,lang:e.uiLanguage,\"aria-labelledby\":this._voiceLabelView.id},children:[this._voiceLabelView,{tag:\"div\",attributes:{class:[\"ck\",\"ck-editor__top\",\"ck-reset_all\"],role:\"presentation\"},children:this.top},{tag:\"div\",attributes:{class:[\"ck\",\"ck-editor__main\"],role:\"presentation\"},children:this.main}]})}_createVoiceLabel(){const e=this.t;const t=new Pb;t.text=e(\"Rich Text Editor\");t.extendTemplate({attributes:{class:\"ck-voice-label\"}});return t}}class Sb extends _b{constructor(e,t,i){super(e);this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-content\",\"ck-editor__editable\",\"ck-rounded-corners\"],lang:e.contentLanguage,dir:e.contentLanguageDirection}});this.name=null;this.set(\"isFocused\",false);this._editableElement=i;this._hasExternalElement=!!this._editableElement;this._editingView=t}render(){super.render();if(this._hasExternalElement){this.template.apply(this.element=this._editableElement)}else{this._editableElement=this.element}this.on(\"change:isFocused\",()=>this._updateIsFocusedClasses());this._updateIsFocusedClasses()}destroy(){if(this._hasExternalElement){this.template.revert(this._editableElement)}super.destroy()}_updateIsFocusedClasses(){const e=this._editingView;if(e.isRenderingInProgress){i(this)}else{t(this)}function t(t){e.change(i=>{const n=e.document.getRoot(t.name);i.addClass(t.isFocused?\"ck-focused\":\"ck-blurred\",n);i.removeClass(t.isFocused?\"ck-blurred\":\"ck-focused\",n)})}function i(n){e.once(\"change:isRenderingInProgress\",(e,o,r)=>{if(!r){t(n)}else{i(n)}})}}}class Ib extends Sb{constructor(e,t,i){super(e,t,i);this.extendTemplate({attributes:{role:\"textbox\",class:\"ck-editor__editable_inline\"}})}render(){super.render();const e=this._editingView;const t=this.t;e.change(i=>{const n=e.document.getRoot(this.name);i.setAttribute(\"aria-label\",t(\"Rich Text Editor, %0\",[this.name]),n)})}}function Lb(e){return t=>t+e}var Nb=i(25);const Ob=Lb(\"px\");class Rb extends _b{constructor(e){super(e);const t=this.bindTemplate;this.set(\"isActive\",false);this.set(\"isSticky\",false);this.set(\"limiterElement\",null);this.set(\"limiterBottomOffset\",50);this.set(\"viewportTopOffset\",0);this.set(\"_marginLeft\",null);this.set(\"_isStickyToTheLimiter\",false);this.set(\"_hasViewportTopOffset\",false);this.content=this.createCollection();this._contentPanelPlaceholder=new $p({tag:\"div\",attributes:{class:[\"ck\",\"ck-sticky-panel__placeholder\"],style:{display:t.to(\"isSticky\",e=>e?\"block\":\"none\"),height:t.to(\"isSticky\",e=>e?Ob(this._panelRect.height):null)}}}).render();this._contentPanel=new $p({tag:\"div\",attributes:{class:[\"ck\",\"ck-sticky-panel__content\",t.if(\"isSticky\",\"ck-sticky-panel__content_sticky\"),t.if(\"_isStickyToTheLimiter\",\"ck-sticky-panel__content_sticky_bottom-limit\")],style:{width:t.to(\"isSticky\",e=>e?Ob(this._contentPanelPlaceholder.getBoundingClientRect().width):null),top:t.to(\"_hasViewportTopOffset\",e=>e?Ob(this.viewportTopOffset):null),bottom:t.to(\"_isStickyToTheLimiter\",e=>e?Ob(this.limiterBottomOffset):null),marginLeft:t.to(\"_marginLeft\")}},children:this.content}).render();this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-sticky-panel\"]},children:[this._contentPanelPlaceholder,this._contentPanel]})}render(){super.render();this._checkIfShouldBeSticky();this.listenTo(Ld.window,\"scroll\",()=>{this._checkIfShouldBeSticky()});this.listenTo(this,\"change:isActive\",()=>{this._checkIfShouldBeSticky()})}_checkIfShouldBeSticky(){const e=this._panelRect=this._contentPanel.getBoundingClientRect();let t;if(!this.limiterElement){this.isSticky=false}else{t=this._limiterRect=this.limiterElement.getBoundingClientRect();this.isSticky=this.isActive&&t.top{this[t]();i()})}}}}get first(){return this.focusables.find(Db)||null}get last(){return this.focusables.filter(Db).slice(-1)[0]||null}get next(){return this._getFocusableItem(1)}get previous(){return this._getFocusableItem(-1)}get current(){let e=null;if(this.focusTracker.focusedElement===null){return null}this.focusables.find((t,i)=>{const n=t.element===this.focusTracker.focusedElement;if(n){e=i}return n});return e}focusFirst(){this._focus(this.first)}focusLast(){this._focus(this.last)}focusNext(){this._focus(this.next)}focusPrevious(){this._focus(this.previous)}_focus(e){if(e){e.focus()}}_getFocusableItem(e){const t=this.current;const i=this.focusables.length;if(!i){return null}if(t===null){return this[e===1?\"first\":\"last\"]}let n=(t+i+e)%i;do{const t=this.focusables.get(n);if(Db(t)){return t}n=(n+i+e)%i}while(n!==t);return null}}function Db(e){return!!(e.focus&&Ld.window.getComputedStyle(e.element).display!=\"none\")}class jb extends _b{constructor(e){super(e);this.setTemplate({tag:\"span\",attributes:{class:[\"ck\",\"ck-toolbar__separator\"]}})}}const Bb=100;class Vb{constructor(e,t){if(!Vb._observerInstance){Vb._createObserver()}this._element=e;this._callback=t;Vb._addElementCallback(e,t);Vb._observerInstance.observe(e)}destroy(){Vb._deleteElementCallback(this._element,this._callback)}static _addElementCallback(e,t){if(!Vb._elementCallbacks){Vb._elementCallbacks=new Map}let i=Vb._elementCallbacks.get(e);if(!i){i=new Set;Vb._elementCallbacks.set(e,i)}i.add(t)}static _deleteElementCallback(e,t){const i=Vb._getElementCallbacks(e);if(i){i.delete(t);if(!i.size){Vb._elementCallbacks.delete(e);Vb._observerInstance.unobserve(e)}}if(Vb._elementCallbacks&&!Vb._elementCallbacks.size){Vb._observerInstance=null;Vb._elementCallbacks=null}}static _getElementCallbacks(e){if(!Vb._elementCallbacks){return null}return Vb._elementCallbacks.get(e)}static _createObserver(){let e;if(typeof Ld.window.ResizeObserver===\"function\"){e=Ld.window.ResizeObserver}else{e=Fb}Vb._observerInstance=new e(e=>{for(const t of e){if(!t.target.offsetParent){continue}const e=Vb._getElementCallbacks(t.target);if(e){for(const i of e){i(t)}}}})}}Vb._observerInstance=null;Vb._elementCallbacks=null;class Fb{constructor(e){this._callback=e;this._elements=new Set;this._previousRects=new Map;this._periodicCheckTimeout=null}observe(e){this._elements.add(e);this._checkElementRectsAndExecuteCallback();if(this._elements.size===1){this._startPeriodicCheck()}}unobserve(e){this._elements.delete(e);this._previousRects.delete(e);if(!this._elements.size){this._stopPeriodicCheck()}}_startPeriodicCheck(){const e=()=>{this._checkElementRectsAndExecuteCallback();this._periodicCheckTimeout=setTimeout(e,Bb)};this.listenTo(Ld.window,\"resize\",()=>{this._checkElementRectsAndExecuteCallback()});this._periodicCheckTimeout=setTimeout(e,Bb)}_stopPeriodicCheck(){clearTimeout(this._periodicCheckTimeout);this.stopListening();this._previousRects.clear()}_checkElementRectsAndExecuteCallback(){const e=[];for(const t of this._elements){if(this._hasRectChanged(t)){e.push({target:t,contentRect:this._previousRects.get(t)})}}if(e.length){this._callback(e)}}_hasRectChanged(e){if(!e.ownerDocument.body.contains(e)){return false}const t=new vh(e);const i=this._previousRects.get(e);const n=!i||!i.isEqual(t);this._previousRects.set(e,t);return n}}ys(Fb,Ud);function Hb(e){return e.bindTemplate.to(t=>{if(t.target===e.element){t.preventDefault()}})}class Wb extends _b{constructor(e){super(e);const t=this.bindTemplate;this.set(\"isVisible\",false);this.set(\"position\",\"se\");this.children=this.createCollection();this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-reset\",\"ck-dropdown__panel\",t.to(\"position\",e=>`ck-dropdown__panel_${e}`),t.if(\"isVisible\",\"ck-dropdown__panel-visible\")]},children:this.children,on:{selectstart:t.to(e=>e.preventDefault())}})}focus(){if(this.children.length){this.children.first.focus()}}focusLast(){if(this.children.length){const e=this.children.last;if(typeof e.focusLast===\"function\"){e.focusLast()}else{e.focus()}}}}var Ub=i(27);function qb(e){if(!e||!e.parentNode){return null}if(e.offsetParent===Ld.document.body){return null}return e.offsetParent}function $b({element:e,target:t,positions:i,limiter:n,fitInViewport:o}){if(me(t)){t=t()}if(me(n)){n=n()}const r=qb(e);const s=new vh(e);const a=new vh(t);let l;let c;if(!n&&!o){[c,l]=Gb(i[0],a,s)}else{const e=n&&new vh(n).getVisible();const t=o&&new vh(Ld.window);const r=Yb(i,{targetRect:a,elementRect:s,limiterRect:e,viewportRect:t});[c,l]=r||Gb(i[0],a,s)}let d=Zb(l);if(r){d=Qb(d,r)}return{left:d.left,top:d.top,name:c}}function Gb(e,t,i){const n=e(t,i);if(!n){return null}const{left:o,top:r,name:s}=n;return[s,i.clone().moveTo(o,r)]}function Yb(e,t){const{elementRect:i,viewportRect:n}=t;const o=i.getArea();const r=Kb(e,t);if(n){const e=r.filter(({viewportIntersectArea:e})=>e===o);const t=Jb(e,o);if(t){return t}}return Jb(r,o)}function Kb(e,{targetRect:t,elementRect:i,limiterRect:n,viewportRect:o}){const r=[];const s=i.getArea();for(const a of e){const e=Gb(a,t,i);if(!e){continue}const[l,c]=e;let d=0;let u=0;if(n){if(o){const e=n.getIntersection(o);if(e){d=e.getIntersectionArea(c)}}else{d=n.getIntersectionArea(c)}}if(o){u=o.getIntersectionArea(c)}const h={positionName:l,positionRect:c,limiterIntersectArea:d,viewportIntersectArea:u};if(d===s){return[h]}r.push(h)}return r}function Jb(e,t){let i=0;let n;let o;for(const{positionName:r,positionRect:s,limiterIntersectArea:a,viewportIntersectArea:l}of e){if(a===t){return[r,s]}const e=l**2+a**2;if(e>i){i=e;n=s;o=r}}return n?[o,n]:null}function Qb({left:e,top:t},i){const n=Zb(new vh(i));const o=_h(i);e-=n.left;t-=n.top;e+=i.scrollLeft;t+=i.scrollTop;e-=o.left;t-=o.top;return{left:e,top:t}}function Zb({left:e,top:t}){const{scrollX:i,scrollY:n}=Ld.window;return{left:e+i,top:t+n}}class Xb extends _b{constructor(e,t,i){super(e);const n=this.bindTemplate;this.buttonView=t;this.panelView=i;this.set(\"isOpen\",false);this.set(\"isEnabled\",true);this.set(\"class\");this.set(\"id\");this.set(\"panelPosition\",\"auto\");this.keystrokes=new mp;this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-dropdown\",n.to(\"class\"),n.if(\"isEnabled\",\"ck-disabled\",e=>!e)],id:n.to(\"id\"),\"aria-describedby\":n.to(\"ariaDescribedById\")},children:[t,i]});t.extendTemplate({attributes:{class:[\"ck-dropdown__button\"]}})}render(){super.render();this.listenTo(this.buttonView,\"open\",()=>{this.isOpen=!this.isOpen});this.panelView.bind(\"isVisible\").to(this,\"isOpen\");this.on(\"change:isOpen\",()=>{if(!this.isOpen){return}if(this.panelPosition===\"auto\"){this.panelView.position=Xb._getOptimalPosition({element:this.panelView.element,target:this.buttonView.element,fitInViewport:true,positions:this._panelPositions}).name}else{this.panelView.position=this.panelPosition}});this.keystrokes.listenTo(this.element);const e=(e,t)=>{if(this.isOpen){this.buttonView.focus();this.isOpen=false;t()}};this.keystrokes.set(\"arrowdown\",(e,t)=>{if(this.buttonView.isEnabled&&!this.isOpen){this.isOpen=true;t()}});this.keystrokes.set(\"arrowright\",(e,t)=>{if(this.isOpen){t()}});this.keystrokes.set(\"arrowleft\",e);this.keystrokes.set(\"esc\",e)}focus(){this.buttonView.focus()}get _panelPositions(){const{southEast:e,southWest:t,northEast:i,northWest:n}=Xb.defaultPanelPositions;if(this.locale.uiLanguageDirection===\"ltr\"){return[e,t,i,n]}else{return[t,e,n,i]}}}Xb.defaultPanelPositions={southEast:e=>({top:e.bottom,left:e.left,name:\"se\"}),southWest:(e,t)=>({top:e.bottom,left:e.left-t.width+e.width,name:\"sw\"}),northEast:(e,t)=>({top:e.top-t.height,left:e.left,name:\"ne\"}),northWest:(e,t)=>({top:e.bottom-t.height,left:e.left-t.width+e.width,name:\"nw\"})};Xb._getOptimalPosition=$b;var ew=i(29);class tw extends _b{constructor(){super();const e=this.bindTemplate;this.set(\"content\",\"\");this.set(\"viewBox\",\"0 0 20 20\");this.set(\"fillColor\",\"\");this.setTemplate({tag:\"svg\",ns:\"http://www.w3.org/2000/svg\",attributes:{class:[\"ck\",\"ck-icon\"],viewBox:e.to(\"viewBox\")}})}render(){super.render();this._updateXMLContent();this._colorFillPaths();this.on(\"change:content\",()=>{this._updateXMLContent();this._colorFillPaths()});this.on(\"change:fillColor\",()=>{this._colorFillPaths()})}_updateXMLContent(){if(this.content){const e=(new DOMParser).parseFromString(this.content.trim(),\"image/svg+xml\");const t=e.querySelector(\"svg\");const i=t.getAttribute(\"viewBox\");if(i){this.viewBox=i}this.element.innerHTML=\"\";while(t.childNodes.length>0){this.element.appendChild(t.childNodes[0])}}}_colorFillPaths(){if(this.fillColor){this.element.querySelectorAll(\".ck-icon__fill\").forEach(e=>{e.style.fill=this.fillColor})}}}var iw=i(31);class nw extends _b{constructor(e){super(e);this.set(\"text\",\"\");this.set(\"position\",\"s\");const t=this.bindTemplate;this.setTemplate({tag:\"span\",attributes:{class:[\"ck\",\"ck-tooltip\",t.to(\"position\",e=>\"ck-tooltip_\"+e),t.if(\"text\",\"ck-hidden\",e=>!e.trim())]},children:[{tag:\"span\",attributes:{class:[\"ck\",\"ck-tooltip__text\"]},children:[{text:t.to(\"text\")}]}]})}}var ow=i(33);class rw extends _b{constructor(e){super(e);const t=this.bindTemplate;const i=is();this.set(\"class\");this.set(\"labelStyle\");this.set(\"icon\");this.set(\"isEnabled\",true);this.set(\"isOn\",false);this.set(\"isVisible\",true);this.set(\"isToggleable\",false);this.set(\"keystroke\");this.set(\"label\");this.set(\"tabindex\",-1);this.set(\"tooltip\");this.set(\"tooltipPosition\",\"s\");this.set(\"type\",\"button\");this.set(\"withText\",false);this.set(\"withKeystroke\",false);this.children=this.createCollection();this.tooltipView=this._createTooltipView();this.labelView=this._createLabelView(i);this.iconView=new tw;this.iconView.extendTemplate({attributes:{class:\"ck-button__icon\"}});this.keystrokeView=this._createKeystrokeView();this.bind(\"_tooltipString\").to(this,\"tooltip\",this,\"label\",this,\"keystroke\",this._getTooltipString.bind(this));this.setTemplate({tag:\"button\",attributes:{class:[\"ck\",\"ck-button\",t.to(\"class\"),t.if(\"isEnabled\",\"ck-disabled\",e=>!e),t.if(\"isVisible\",\"ck-hidden\",e=>!e),t.to(\"isOn\",e=>e?\"ck-on\":\"ck-off\"),t.if(\"withText\",\"ck-button_with-text\"),t.if(\"withKeystroke\",\"ck-button_with-keystroke\")],type:t.to(\"type\",e=>e?e:\"button\"),tabindex:t.to(\"tabindex\"),\"aria-labelledby\":`ck-editor__aria-label_${i}`,\"aria-disabled\":t.if(\"isEnabled\",true,e=>!e),\"aria-pressed\":t.to(\"isOn\",e=>this.isToggleable?String(e):false)},children:this.children,on:{mousedown:t.to(e=>{e.preventDefault()}),click:t.to(e=>{if(this.isEnabled){this.fire(\"execute\")}else{e.preventDefault()}})}})}render(){super.render();if(this.icon){this.iconView.bind(\"content\").to(this,\"icon\");this.children.add(this.iconView)}this.children.add(this.tooltipView);this.children.add(this.labelView);if(this.withKeystroke){this.children.add(this.keystrokeView)}}focus(){this.element.focus()}_createTooltipView(){const e=new nw;e.bind(\"text\").to(this,\"_tooltipString\");e.bind(\"position\").to(this,\"tooltipPosition\");return e}_createLabelView(e){const t=new _b;const i=this.bindTemplate;t.setTemplate({tag:\"span\",attributes:{class:[\"ck\",\"ck-button__label\"],style:i.to(\"labelStyle\"),id:`ck-editor__aria-label_${e}`},children:[{text:this.bindTemplate.to(\"label\")}]});return t}_createKeystrokeView(){const e=new _b;e.setTemplate({tag:\"span\",attributes:{class:[\"ck\",\"ck-button__keystroke\"]},children:[{text:this.bindTemplate.to(\"keystroke\",e=>Dc(e))}]});return e}_getTooltipString(e,t,i){if(e){if(typeof e==\"string\"){return e}else{if(i){i=Dc(i)}if(e instanceof Function){return e(t,i)}else{return`${t}${i?` (${i})`:\"\"}`}}}return\"\"}}var sw='';class aw extends rw{constructor(e){super(e);this.arrowView=this._createArrowView();this.extendTemplate({attributes:{\"aria-haspopup\":true}});this.delegate(\"execute\").to(this,\"open\")}render(){super.render();this.children.add(this.arrowView)}_createArrowView(){const e=new tw;e.content=sw;e.extendTemplate({attributes:{class:\"ck-dropdown__arrow\"}});return e}}var lw=i(35);class cw extends _b{constructor(){super();this.items=this.createCollection();this.focusTracker=new Ep;this.keystrokes=new mp;this._focusCycler=new zb({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:\"arrowup\",focusNext:\"arrowdown\"}});this.setTemplate({tag:\"ul\",attributes:{class:[\"ck\",\"ck-reset\",\"ck-list\"]},children:this.items})}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on(\"add\",(e,t)=>{this.focusTracker.add(t.element)});this.items.on(\"remove\",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}}class dw extends _b{constructor(e){super(e);this.children=this.createCollection();this.setTemplate({tag:\"li\",attributes:{class:[\"ck\",\"ck-list__item\"]},children:this.children})}focus(){this.children.first.focus()}}class uw extends _b{constructor(e){super(e);this.setTemplate({tag:\"li\",attributes:{class:[\"ck\",\"ck-list__separator\"]}})}}var hw=i(37);class fw extends rw{constructor(e){super(e);this.isToggleable=true;this.toggleSwitchView=this._createToggleView();this.extendTemplate({attributes:{class:\"ck-switchbutton\"}})}render(){super.render();this.children.add(this.toggleSwitchView)}_createToggleView(){const e=new _b;e.setTemplate({tag:\"span\",attributes:{class:[\"ck\",\"ck-button__toggle\"]},children:[{tag:\"span\",attributes:{class:[\"ck\",\"ck-button__toggle__inner\"]}}]});return e}}function mw({emitter:e,activator:t,callback:i,contextElements:n}){e.listenTo(document,\"mousedown\",(e,{target:o})=>{if(!t()){return}for(const e of n){if(e.contains(o)){return}}i()})}var gw=i(39);var pw=i(41);function bw(e,t=aw){const i=new t(e);const n=new Wb(e);const o=new Xb(e,i,n);i.bind(\"isEnabled\").to(o);if(i instanceof aw){i.bind(\"isOn\").to(o,\"isOpen\")}else{i.arrowView.bind(\"isOn\").to(o,\"isOpen\")}kw(o);return o}function ww(e,t){const i=e.locale;const n=i.t;const o=e.toolbarView=new Tw(i);o.set(\"ariaLabel\",n(\"Dropdown toolbar\"));e.extendTemplate({attributes:{class:[\"ck-toolbar-dropdown\"]}});t.map(e=>o.items.add(e));e.panelView.children.add(o);o.items.delegate(\"execute\").to(e)}function _w(e,t){const i=e.locale;const n=e.listView=new cw(i);n.items.bindTo(t).using(({type:e,model:t})=>{if(e===\"separator\"){return new uw(i)}else if(e===\"button\"||e===\"switchbutton\"){const n=new dw(i);let o;if(e===\"button\"){o=new rw(i)}else{o=new fw(i)}o.bind(...Object.keys(t)).to(t);o.delegate(\"execute\").to(n);n.children.add(o);return n}});e.panelView.children.add(n);n.items.delegate(\"execute\").to(e)}function kw(e){vw(e);yw(e);xw(e)}function vw(e){e.on(\"render\",()=>{mw({emitter:e,activator:()=>e.isOpen,callback:()=>{e.isOpen=false},contextElements:[e.element]})})}function yw(e){e.on(\"execute\",t=>{if(t.source instanceof fw){return}e.isOpen=false})}function xw(e){e.keystrokes.set(\"arrowdown\",(t,i)=>{if(e.isOpen){e.panelView.focus();i()}});e.keystrokes.set(\"arrowup\",(t,i)=>{if(e.isOpen){e.panelView.focusLast();i()}})}var Aw='';var Cw=i(43);class Tw extends _b{constructor(e,t){super(e);const i=this.bindTemplate;const n=this.t;this.options=t||{};this.set(\"ariaLabel\",n(\"Editor toolbar\"));this.set(\"maxWidth\",\"auto\");this.items=this.createCollection();this.focusTracker=new Ep;this.keystrokes=new mp;this.set(\"class\");this.set(\"isCompact\",false);this.itemsView=new Ew(e);this.children=this.createCollection();this.children.add(this.itemsView);this.focusables=this.createCollection();this._focusCycler=new zb({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:[\"arrowleft\",\"arrowup\"],focusNext:[\"arrowright\",\"arrowdown\"]}});this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-toolbar\",i.to(\"class\"),i.if(\"isCompact\",\"ck-toolbar_compact\")],role:\"toolbar\",\"aria-label\":i.to(\"ariaLabel\"),style:{maxWidth:i.to(\"maxWidth\")}},children:this.children,on:{mousedown:Hb(this)}});this._behavior=this.options.shouldGroupWhenFull?new Mw(this):new Pw(this)}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on(\"add\",(e,t)=>{this.focusTracker.add(t.element)});this.items.on(\"remove\",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element);this._behavior.render(this)}destroy(){this._behavior.destroy();return super.destroy()}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}fillFromConfig(e,t){e.map(e=>{if(e==\"|\"){this.items.add(new jb)}else if(t.has(e)){this.items.add(t.create(e))}else{console.warn(Object(ss[\"a\"])(\"toolbarview-item-unavailable: The requested toolbar item is unavailable.\"),{name:e})}})}}class Ew extends _b{constructor(e){super(e);this.children=this.createCollection();this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-toolbar__items\"]},children:this.children})}}class Pw{constructor(e){const t=e.bindTemplate;e.set(\"isVertical\",false);e.itemsView.children.bindTo(e.items).using(e=>e);e.focusables.bindTo(e.items).using(e=>e);e.extendTemplate({attributes:{class:[t.if(\"isVertical\",\"ck-toolbar_vertical\")]}})}render(){}destroy(){}}class Mw{constructor(e){this.viewChildren=e.children;this.viewFocusables=e.focusables;this.viewItemsView=e.itemsView;this.viewFocusTracker=e.focusTracker;this.viewLocale=e.locale;this.ungroupedItems=e.createCollection();this.groupedItems=e.createCollection();this.groupedItemsDropdown=this._createGroupedItemsDropdown();this.resizeObserver=null;this.cachedPadding=null;this.shouldUpdateGroupingOnNextResize=false;e.itemsView.children.bindTo(this.ungroupedItems).using(e=>e);this.ungroupedItems.on(\"add\",this._updateFocusCycleableItems.bind(this));this.ungroupedItems.on(\"remove\",this._updateFocusCycleableItems.bind(this));e.children.on(\"add\",this._updateFocusCycleableItems.bind(this));e.children.on(\"remove\",this._updateFocusCycleableItems.bind(this));e.items.on(\"add\",(e,t,i)=>{if(i>this.ungroupedItems.length){this.groupedItems.add(t,i-this.ungroupedItems.length)}else{this.ungroupedItems.add(t,i)}this._updateGrouping()});e.items.on(\"remove\",(e,t,i)=>{if(i>this.ungroupedItems.length){this.groupedItems.remove(t)}else{this.ungroupedItems.remove(t)}this._updateGrouping()});e.extendTemplate({attributes:{class:[\"ck-toolbar_grouping\"]}})}render(e){this.viewElement=e.element;this._enableGroupingOnResize();this._enableGroupingOnMaxWidthChange(e)}destroy(){this.groupedItemsDropdown.destroy();this.resizeObserver.destroy()}_updateGrouping(){if(!this.viewElement.ownerDocument.body.contains(this.viewElement)){return}if(!this.viewElement.offsetParent){this.shouldUpdateGroupingOnNextResize=true;return}let e;while(this._areItemsOverflowing){this._groupLastItem();e=true}if(!e&&this.groupedItems.length){while(this.groupedItems.length&&!this._areItemsOverflowing){this._ungroupFirstItem()}if(this._areItemsOverflowing){this._groupLastItem()}}}get _areItemsOverflowing(){if(!this.ungroupedItems.length){return false}const e=this.viewElement;const t=this.viewLocale.uiLanguageDirection;const i=new vh(e.lastChild);const n=new vh(e);if(!this.cachedPadding){const i=Ld.window.getComputedStyle(e);const n=t===\"ltr\"?\"paddingRight\":\"paddingLeft\";this.cachedPadding=Number.parseInt(i[n])}if(t===\"ltr\"){return i.right>n.right-this.cachedPadding}else{return i.left{if(!e||e!==t.contentRect.width||this.shouldUpdateGroupingOnNextResize){this.shouldUpdateGroupingOnNextResize=false;this._updateGrouping();e=t.contentRect.width}});this._updateGrouping()}_enableGroupingOnMaxWidthChange(e){e.on(\"change:maxWidth\",()=>{this._updateGrouping()})}_groupLastItem(){if(!this.groupedItems.length){this.viewChildren.add(new jb);this.viewChildren.add(this.groupedItemsDropdown);this.viewFocusTracker.add(this.groupedItemsDropdown.element)}this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last),0)}_ungroupFirstItem(){this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first));if(!this.groupedItems.length){this.viewChildren.remove(this.groupedItemsDropdown);this.viewChildren.remove(this.viewChildren.last);this.viewFocusTracker.remove(this.groupedItemsDropdown.element)}}_createGroupedItemsDropdown(){const e=this.viewLocale;const t=e.t;const i=bw(e);i.class=\"ck-toolbar__grouped-dropdown\";i.panelPosition=e.uiLanguageDirection===\"ltr\"?\"sw\":\"se\";ww(i,[]);i.buttonView.set({label:t(\"Show more items\"),tooltip:true,icon:Aw});i.toolbarView.items.bindTo(this.groupedItems).using(e=>e);return i}_updateFocusCycleableItems(){this.viewFocusables.clear();this.ungroupedItems.map(e=>{this.viewFocusables.add(e)});if(this.groupedItems.length){this.viewFocusables.add(this.groupedItemsDropdown)}}}var Sw=i(45);class Iw extends Mb{constructor(e,t,i={}){super(e);this.stickyPanel=new Rb(e);this.toolbar=new Tw(e,{shouldGroupWhenFull:i.shouldToolbarGroupWhenFull});this.editable=new Ib(e,t)}render(){super.render();this.stickyPanel.content.add(this.toolbar);this.top.add(this.stickyPanel);this.main.add(this.editable)}}function Lw(e){if(e instanceof HTMLTextAreaElement){return e.value}return e.innerHTML}class Nw extends pp{constructor(e,t){super(t);if(Yr(e)){this.sourceElement=e}this.data.processor=new Ap(this.data.viewDocument);this.model.document.createRoot();const i=!this.config.get(\"toolbar.shouldNotGroupWhenFull\");const n=new Iw(this.locale,this.editing.view,{shouldToolbarGroupWhenFull:i});this.ui=new Hp(this,n);yp(this)}destroy(){if(this.sourceElement){this.updateSourceElement()}this.ui.destroy();return super.destroy()}static create(e,t={}){return new Promise(i=>{const n=new this(e,t);i(n.initPlugins().then(()=>n.ui.init(Yr(e)?e:null)).then(()=>{if(!Yr(e)&&t.initialData){throw new ss[\"b\"](\"editor-create-initial-data: \"+\"The config.initialData option cannot be used together with initial data passed in Editor.create().\",null)}const i=t.initialData||Ow(e);return n.data.init(i)}).then(()=>n.fire(\"ready\")).then(()=>n))})}}ys(Nw,wp);ys(Nw,vp);function Ow(e){return Yr(e)?Lw(e):e}class Rw{constructor(e){this.editor=e;this.set(\"isEnabled\",true);this._disableStack=new Set}forceDisabled(e){this._disableStack.add(e);if(this._disableStack.size==1){this.on(\"set:isEnabled\",zw,{priority:\"highest\"});this.isEnabled=false}}clearForceDisabled(e){this._disableStack.delete(e);if(this._disableStack.size==0){this.off(\"set:isEnabled\",zw);this.isEnabled=true}}destroy(){this.stopListening()}static get isContextPlugin(){return false}}ys(Rw,Jl);function zw(e){e.return=false;e.stop()}class Dw{constructor(e){this.editor=e;this.set(\"value\",undefined);this.set(\"isEnabled\",false);this._disableStack=new Set;this.decorate(\"execute\");this.listenTo(this.editor.model.document,\"change\",()=>{this.refresh()});this.on(\"execute\",e=>{if(!this.isEnabled){e.stop()}},{priority:\"high\"});this.listenTo(e,\"change:isReadOnly\",(e,t,i)=>{if(i){this.forceDisabled(\"readOnlyMode\")}else{this.clearForceDisabled(\"readOnlyMode\")}})}refresh(){this.isEnabled=true}forceDisabled(e){this._disableStack.add(e);if(this._disableStack.size==1){this.on(\"set:isEnabled\",jw,{priority:\"highest\"});this.isEnabled=false}}clearForceDisabled(e){this._disableStack.delete(e);if(this._disableStack.size==0){this.off(\"set:isEnabled\",jw);this.refresh()}}execute(){}destroy(){this.stopListening()}}ys(Dw,Jl);function jw(e){e.return=false;e.stop()}function Bw(e){const t=e.next();if(t.done){return null}return t.value}const Vw=[\"left\",\"right\",\"center\",\"justify\"];function Fw(e){return Vw.includes(e)}function Hw(e,t){if(t.contentLanguageDirection==\"rtl\"){return e===\"right\"}else{return e===\"left\"}}const Ww=\"alignment\";class Uw extends Dw{refresh(){const e=this.editor;const t=e.locale;const i=Bw(this.editor.model.document.selection.getSelectedBlocks());this.isEnabled=!!i&&this._canBeAligned(i);if(this.isEnabled&&i.hasAttribute(\"alignment\")){this.value=i.getAttribute(\"alignment\")}else{this.value=t.contentLanguageDirection===\"rtl\"?\"right\":\"left\"}}execute(e={}){const t=this.editor;const i=t.locale;const n=t.model;const o=n.document;const r=e.value;n.change(e=>{const t=Array.from(o.selection.getSelectedBlocks()).filter(e=>this._canBeAligned(e));const n=t[0].getAttribute(\"alignment\");const s=Hw(r,i)||n===r||!r;if(s){qw(t,e)}else{$w(t,e,r)}})}_canBeAligned(e){return this.editor.model.schema.checkAttribute(e,Ww)}}function qw(e,t){for(const i of e){t.removeAttribute(Ww,i)}}function $w(e,t,i){for(const n of e){t.setAttribute(Ww,i,n)}}class Gw extends Rw{static get pluginName(){return\"AlignmentEditing\"}constructor(e){super(e);e.config.define(\"alignment\",{options:[...Vw]})}init(){const e=this.editor;const t=e.locale;const i=e.model.schema;const n=e.config.get(\"alignment.options\").filter(Fw);i.extend(\"$block\",{allowAttributes:\"alignment\"});e.model.schema.setAttributeProperties(\"alignment\",{isFormatting:true});const o=Yw(n.filter(e=>!Hw(e,t)));e.conversion.attributeToAttribute(o);e.commands.add(\"alignment\",new Uw(e))}}function Yw(e){const t={model:{key:\"alignment\",values:e.slice()},view:{}};for(const i of e){t.view[i]={key:\"style\",value:{\"text-align\":i}}}return t}var Kw='';var Jw='';var Qw='';var Zw='';const Xw=new Map([[\"left\",Kw],[\"right\",Jw],[\"center\",Qw],[\"justify\",Zw]]);class e_ extends Rw{get localizedOptionTitles(){const e=this.editor.t;return{left:e(\"Align left\"),right:e(\"Align right\"),center:e(\"Align center\"),justify:e(\"Justify\")}}static get pluginName(){return\"AlignmentUI\"}init(){const e=this.editor;const t=e.ui.componentFactory;const i=e.t;const n=e.config.get(\"alignment.options\");n.filter(Fw).forEach(e=>this._addButton(e));t.add(\"alignment\",e=>{const o=bw(e);const r=n.map(e=>t.create(`alignment:${e}`));ww(o,r);o.buttonView.set({label:i(\"Text alignment\"),tooltip:true});o.toolbarView.isVertical=true;o.toolbarView.ariaLabel=i(\"Text alignment toolbar\");o.extendTemplate({attributes:{class:\"ck-alignment-dropdown\"}});const s=e.contentLanguageDirection===\"rtl\"?Jw:Kw;o.buttonView.bind(\"icon\").toMany(r,\"isOn\",(...e)=>{const t=e.findIndex(e=>e);if(t<0){return s}return r[t].icon});o.bind(\"isEnabled\").toMany(r,\"isEnabled\",(...e)=>e.some(e=>e));return o})}_addButton(e){const t=this.editor;t.ui.componentFactory.add(`alignment:${e}`,i=>{const n=t.commands.get(\"alignment\");const o=new rw(i);o.set({label:this.localizedOptionTitles[e],icon:Xw.get(e),tooltip:true,isToggleable:true});o.bind(\"isEnabled\").to(n);o.bind(\"isOn\").to(n,\"value\",t=>t===e);this.listenTo(o,\"execute\",()=>{t.execute(\"alignment\",{value:e});t.editing.view.focus()});return o})}}class t_ extends Rw{static get requires(){return[Gw,e_]}static get pluginName(){return\"Alignment\"}}class i_{constructor(e){this.context=e}destroy(){this.stopListening()}static get isContextPlugin(){return true}}ys(i_,Jl);class n_ extends i_{static get pluginName(){return\"PendingActions\"}init(){this.set(\"hasAny\",false);this._actions=new xs({idProperty:\"_id\"});this._actions.delegate(\"add\",\"remove\").to(this)}add(e){if(typeof e!==\"string\"){throw new ss[\"b\"](\"pendingactions-add-invalid-message: The message must be a string.\",this)}const t=Object.create(Jl);t.set(\"message\",e);this._actions.add(t);this.hasAny=true;return t}remove(e){this._actions.remove(e);this.hasAny=!!this._actions.length}get first(){return this._actions.get(0)}[Symbol.iterator](){return this._actions[Symbol.iterator]()}}class o_{constructor(){const e=new window.FileReader;this._reader=e;this._data=undefined;this.set(\"loaded\",0);e.onprogress=e=>{this.loaded=e.loaded}}get error(){return this._reader.error}get data(){return this._data}read(e){const t=this._reader;this.total=e.size;return new Promise((i,n)=>{t.onload=()=>{const e=t.result;this._data=e;i(e)};t.onerror=()=>{n(\"error\")};t.onabort=()=>{n(\"aborted\")};this._reader.readAsDataURL(e)})}abort(){this._reader.abort()}}ys(o_,Jl);class r_ extends Rw{static get pluginName(){return\"FileRepository\"}static get requires(){return[n_]}init(){this.loaders=new xs;this.loaders.on(\"add\",()=>this._updatePendingAction());this.loaders.on(\"remove\",()=>this._updatePendingAction());this._loadersMap=new Map;this._pendingAction=null;this.set(\"uploaded\",0);this.set(\"uploadTotal\",null);this.bind(\"uploadedPercent\").to(this,\"uploaded\",this,\"uploadTotal\",(e,t)=>t?e/t*100:0)}getLoader(e){return this._loadersMap.get(e)||null}createLoader(e){if(!this.createUploadAdapter){console.warn(Object(ss[\"a\"])(\"filerepository-no-upload-adapter: Upload adapter is not defined.\"));return null}const t=new s_(Promise.resolve(e),this.createUploadAdapter);this.loaders.add(t);this._loadersMap.set(e,t);if(e instanceof Promise){t.file.then(e=>{this._loadersMap.set(e,t)}).catch(()=>{})}t.on(\"change:uploaded\",()=>{let e=0;for(const t of this.loaders){e+=t.uploaded}this.uploaded=e});t.on(\"change:uploadTotal\",()=>{let e=0;for(const t of this.loaders){if(t.uploadTotal){e+=t.uploadTotal}}this.uploadTotal=e});return t}destroyLoader(e){const t=e instanceof s_?e:this.getLoader(e);t._destroy();this.loaders.remove(t);this._loadersMap.forEach((e,i)=>{if(e===t){this._loadersMap.delete(i)}})}_updatePendingAction(){const e=this.editor.plugins.get(n_);if(this.loaders.length){if(!this._pendingAction){const t=this.editor.t;const i=e=>`${t(\"Upload in progress\")} ${parseInt(e)}%.`;this._pendingAction=e.add(i(this.uploadedPercent));this._pendingAction.bind(\"message\").to(this,\"uploadedPercent\",i)}}else{e.remove(this._pendingAction);this._pendingAction=null}}}ys(r_,Jl);class s_{constructor(e,t){this.id=is();this._filePromiseWrapper=this._createFilePromiseWrapper(e);this._adapter=t(this);this._reader=new o_;this.set(\"status\",\"idle\");this.set(\"uploaded\",0);this.set(\"uploadTotal\",null);this.bind(\"uploadedPercent\").to(this,\"uploaded\",this,\"uploadTotal\",(e,t)=>t?e/t*100:0);this.set(\"uploadResponse\",null)}get file(){if(!this._filePromiseWrapper){return Promise.resolve(null)}else{return this._filePromiseWrapper.promise.then(e=>this._filePromiseWrapper?e:null)}}get data(){return this._reader.data}read(){if(this.status!=\"idle\"){throw new ss[\"b\"](\"filerepository-read-wrong-status: You cannot call read if the status is different than idle.\",this)}this.status=\"reading\";return this.file.then(e=>this._reader.read(e)).then(e=>{if(this.status!==\"reading\"){throw this.status}this.status=\"idle\";return e}).catch(e=>{if(e===\"aborted\"){this.status=\"aborted\";throw\"aborted\"}this.status=\"error\";throw this._reader.error?this._reader.error:e})}upload(){if(this.status!=\"idle\"){throw new ss[\"b\"](\"filerepository-upload-wrong-status: You cannot call upload if the status is different than idle.\",this)}this.status=\"uploading\";return this.file.then(()=>this._adapter.upload()).then(e=>{this.uploadResponse=e;this.status=\"idle\";return e}).catch(e=>{if(this.status===\"aborted\"){throw\"aborted\"}this.status=\"error\";throw e})}abort(){const e=this.status;this.status=\"aborted\";if(!this._filePromiseWrapper.isFulfilled){this._filePromiseWrapper.promise.catch(()=>{});this._filePromiseWrapper.rejecter(\"aborted\")}else if(e==\"reading\"){this._reader.abort()}else if(e==\"uploading\"&&this._adapter.abort){this._adapter.abort()}this._destroy()}_destroy(){this._filePromiseWrapper=undefined;this._reader=undefined;this._adapter=undefined;this.uploadResponse=undefined}_createFilePromiseWrapper(e){const t={};t.promise=new Promise((i,n)=>{t.rejecter=n;t.isFulfilled=false;e.then(e=>{t.isFulfilled=true;i(e)}).catch(e=>{t.isFulfilled=true;n(e)})});return t}}ys(s_,Jl);class a_ extends Rw{static get requires(){return[r_]}static get pluginName(){return\"Base64UploadAdapter\"}init(){this.editor.plugins.get(r_).createUploadAdapter=e=>new l_(e)}}class l_{constructor(e){this.loader=e}upload(){return new Promise((e,t)=>{const i=this.reader=new window.FileReader;i.addEventListener(\"load\",()=>{e({default:i.result})});i.addEventListener(\"error\",e=>{t(e)});i.addEventListener(\"abort\",()=>{t()});this.loader.file.then(e=>{i.readAsDataURL(e)})})}abort(){this.reader.abort()}}class c_ extends Dw{refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(e={}){const t=this.editor.model;const i=t.schema;const n=t.document.selection;const o=Array.from(n.getSelectedBlocks());const r=e.forceValue===undefined?!this.value:e.forceValue;t.change(e=>{if(!r){this._removeQuote(e,o.filter(d_))}else{const t=o.filter(e=>d_(e)||h_(i,e));this._applyQuote(e,t)}})}_getValue(){const e=this.editor.model.document.selection;const t=Bw(e.getSelectedBlocks());return!!(t&&d_(t))}_checkEnabled(){if(this.value){return true}const e=this.editor.model.document.selection;const t=this.editor.model.schema;const i=Bw(e.getSelectedBlocks());if(!i){return false}return h_(t,i)}_removeQuote(e,t){u_(e,t).reverse().forEach(t=>{if(t.start.isAtStart&&t.end.isAtEnd){e.unwrap(t.start.parent);return}if(t.start.isAtStart){const i=e.createPositionBefore(t.start.parent);e.move(t,i);return}if(!t.end.isAtEnd){e.split(t.end)}const i=e.createPositionAfter(t.end.parent);e.move(t,i)})}_applyQuote(e,t){const i=[];u_(e,t).reverse().forEach(t=>{let n=d_(t.start);if(!n){n=e.createElement(\"blockQuote\");e.wrap(t,n)}i.push(n)});i.reverse().reduce((t,i)=>{if(t.nextSibling==i){e.merge(e.createPositionAfter(t));return t}return i})}}function d_(e){return e.parent.name==\"blockQuote\"?e.parent:null}function u_(e,t){let i;let n=0;const o=[];while(n{if(e.endsWith(\"blockQuote\")&&t.name==\"blockQuote\"){return false}});e.conversion.elementToElement({model:\"blockQuote\",view:\"blockquote\"});e.model.document.registerPostFixer(i=>{const n=e.model.document.differ.getChanges();for(const e of n){if(e.type==\"insert\"){const n=e.position.nodeAfter;if(!n){continue}if(n.is(\"blockQuote\")&&n.isEmpty){i.remove(n);return true}else if(n.is(\"blockQuote\")&&!t.checkChild(e.position,n)){i.unwrap(n);return true}else if(n.is(\"element\")){const e=i.createRangeIn(n);for(const n of e.getItems()){if(n.is(\"blockQuote\")&&!t.checkChild(i.createPositionBefore(n),n)){i.unwrap(n);return true}}}}else if(e.type==\"remove\"){const t=e.position.parent;if(t.is(\"blockQuote\")&&t.isEmpty){i.remove(t);return true}}}return false})}afterInit(){const e=this.editor;const t=e.commands.get(\"blockQuote\");this.listenTo(this.editor.editing.view.document,\"enter\",(e,i)=>{const n=this.editor.model.document;const o=n.selection.getLastPosition().parent;if(n.selection.isCollapsed&&o.isEmpty&&t.value){this.editor.execute(\"blockQuote\");this.editor.editing.view.scrollToTheSelection();i.preventDefault();e.stop()}})}}var m_='';var g_=i(47);class p_ extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(\"blockQuote\",i=>{const n=e.commands.get(\"blockQuote\");const o=new rw(i);o.set({label:t(\"Block quote\"),icon:m_,tooltip:true,isToggleable:true});o.bind(\"isOn\",\"isEnabled\").to(n,\"value\",\"isEnabled\");this.listenTo(o,\"execute\",()=>{e.execute(\"blockQuote\");e.editing.view.focus()});return o})}}class b_ extends Rw{static get requires(){return[f_,p_]}static get pluginName(){return\"BlockQuote\"}}class w_ extends Dw{constructor(e,t){super(e);this.attributeKey=t}refresh(){const e=this.editor.model;const t=e.document;this.value=this._getValueFromFirstAllowedNode();this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){const t=this.editor.model;const i=t.document;const n=i.selection;const o=e.forceValue===undefined?!this.value:e.forceValue;t.change(e=>{if(n.isCollapsed){if(o){e.setSelectionAttribute(this.attributeKey,true)}else{e.removeSelectionAttribute(this.attributeKey)}}else{const i=t.schema.getValidRanges(n.getRanges(),this.attributeKey);for(const t of i){if(o){e.setAttribute(this.attributeKey,o,t)}else{e.removeAttribute(this.attributeKey,t)}}}})}_getValueFromFirstAllowedNode(){const e=this.editor.model;const t=e.schema;const i=e.document.selection;if(i.isCollapsed){return i.hasAttribute(this.attributeKey)}for(const e of i.getRanges()){for(const i of e.getItems()){if(t.checkAttribute(i,this.attributeKey)){return i.hasAttribute(this.attributeKey)}}}return false}}const __=\"bold\";class k_ extends Rw{static get pluginName(){return\"BoldEditing\"}init(){const e=this.editor;e.model.schema.extend(\"$text\",{allowAttributes:__});e.model.schema.setAttributeProperties(__,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:__,view:\"strong\",upcastAlso:[\"b\",e=>{const t=e.getStyle(\"font-weight\");if(!t){return null}if(t==\"bold\"||Number(t)>=600){return{name:true,styles:[\"font-weight\"]}}}]});e.commands.add(__,new w_(e,__));e.keystrokes.set(\"CTRL+B\",__)}}var v_='';const y_=\"bold\";class x_ extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(y_,i=>{const n=e.commands.get(y_);const o=new rw(i);o.set({label:t(\"Bold\"),icon:v_,keystroke:\"CTRL+B\",tooltip:true,isToggleable:true});o.bind(\"isOn\",\"isEnabled\").to(n,\"value\",\"isEnabled\");this.listenTo(o,\"execute\",()=>{e.execute(y_);e.editing.view.focus()});return o})}}class A_ extends Rw{static get requires(){return[k_,x_]}static get pluginName(){return\"Bold\"}}const C_=\"code\";class T_ extends Rw{static get pluginName(){return\"CodeEditing\"}init(){const e=this.editor;e.model.schema.extend(\"$text\",{allowAttributes:C_});e.model.schema.setAttributeProperties(C_,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:C_,view:\"code\",upcastAlso:{styles:{\"word-wrap\":\"break-word\"}}});e.commands.add(C_,new w_(e,C_))}}var E_='';var P_=i(11);const M_=\"code\";class S_ extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(M_,i=>{const n=e.commands.get(M_);const o=new rw(i);o.set({label:t(\"Code\"),icon:E_,tooltip:true,isToggleable:true});o.bind(\"isOn\",\"isEnabled\").to(n,\"value\",\"isEnabled\");this.listenTo(o,\"execute\",()=>{e.execute(M_);e.editing.view.focus()});return o})}}class I_ extends Rw{static get requires(){return[T_,S_]}static get pluginName(){return\"Code\"}}function*L_(e,t){for(const i of t){if(i&&e.getAttributeProperties(i[0]).copyOnEnter){yield i}}}class N_ extends Dw{execute(){const e=this.editor.model;const t=e.document;e.change(i=>{R_(e,i,t.selection);this.fire(\"afterExecute\",{writer:i})})}refresh(){const e=this.editor.model;const t=e.document;this.isEnabled=O_(e.schema,t.selection)}}function O_(e,t){if(t.rangeCount>1){return false}const i=t.anchor;if(!i||!e.checkChild(i,\"softBreak\")){return false}const n=t.getFirstRange();const o=n.start.parent;const r=n.end.parent;if((D_(o,e)||D_(r,e))&&o!==r){return false}return true}function R_(e,t,i){const n=i.isCollapsed;const o=i.getFirstRange();const r=o.start.parent;const s=o.end.parent;const a=r==s;if(n){const n=L_(e.schema,i.getAttributes());z_(e,t,o.end);t.removeSelectionAttribute(i.getAttributeKeys());t.setSelectionAttribute(n)}else{const n=!(o.start.isAtStart&&o.end.isAtEnd);e.deleteContent(i,{leaveUnmerged:n});if(a){z_(e,t,i.focus)}else{if(n){t.setSelection(s,0)}}}}function z_(e,t,i){const n=t.createElement(\"softBreak\");e.insertContent(n,i);t.setSelection(n,\"after\")}function D_(e,t){if(e.is(\"rootElement\")){return false}return t.isLimit(e)||D_(e.parent,t)}class j_ extends Gd{constructor(e){super(e);const t=this.document;t.on(\"keydown\",(e,i)=>{if(this.isEnabled&&i.keyCode==Oc.enter){let n;t.once(\"enter\",e=>n=e,{priority:\"highest\"});t.fire(\"enter\",new Yu(t,i.domEvent,{isSoft:i.shiftKey}));if(n&&n.stop.called){e.stop()}}})}observe(){}}class B_ extends Rw{static get pluginName(){return\"ShiftEnter\"}init(){const e=this.editor;const t=e.model.schema;const i=e.conversion;const n=e.editing.view;const o=n.document;t.register(\"softBreak\",{allowWhere:\"$text\",isInline:true});i.for(\"upcast\").elementToElement({model:\"softBreak\",view:\"br\"});i.for(\"downcast\").elementToElement({model:\"softBreak\",view:(e,t)=>t.createEmptyElement(\"br\")});n.addObserver(j_);e.commands.add(\"shiftEnter\",new N_(e));this.listenTo(o,\"enter\",(t,i)=>{i.preventDefault();if(!i.isSoft){return}e.execute(\"shiftEnter\");n.scrollToTheSelection()},{priority:\"low\"})}}function V_(e){const t=e.t;const i=e.config.get(\"codeBlock.languages\");for(const e of i){if(e.label===\"Plain text\"){e.label=t(\"Plain text\")}if(e.class===undefined){e.class=`language-${e.language}`}}return i}function F_(e,t,i){const n={};for(const o of e){if(t===\"class\"){n[o[t].split(\" \").shift()]=o[i]}else{n[o[t]]=o[i]}}return n}function H_(e){return e.data.match(/^(\\s*)/)[0]}function W_(e,t){const i=e.createDocumentFragment();const n=t.split(\"\\n\").map(t=>e.createText(t));const o=n[n.length-1];for(const t of n){e.append(t,i);if(t!==o){e.appendElement(\"softBreak\",i)}}return i}function U_(e){const t=e.document.selection;const i=[];if(t.isCollapsed){i.push(t.anchor)}else{const n=t.getFirstRange().getWalker({ignoreElementEnd:true,direction:\"backward\"});for(const{item:t}of n){if(t.is(\"textProxy\")&&t.parent.is(\"codeBlock\")){const n=H_(t.textNode);const{parent:o,startOffset:r}=t.textNode;const s=e.createPositionAt(o,r+n.length);i.push(s)}}}return i}function q_(e){const t=Bw(e.getSelectedBlocks());return t&&t.is(\"codeBlock\")}class $_ extends Dw{refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(e={}){const t=this.editor;const i=t.model;const n=i.document.selection;const o=V_(t);const r=o[0];const s=Array.from(n.getSelectedBlocks());const a=e.forceValue===undefined?!this.value:e.forceValue;const l=e.language||r.language;i.change(e=>{if(a){this._applyCodeBlock(e,s,l)}else{this._removeCodeBlock(e,s)}})}_getValue(){const e=this.editor.model.document.selection;const t=Bw(e.getSelectedBlocks());const i=!!(t&&t.is(\"codeBlock\"));return i?t.getAttribute(\"language\"):false}_checkEnabled(){if(this.value){return true}const e=this.editor.model.document.selection;const t=this.editor.model.schema;const i=Bw(e.getSelectedBlocks());if(!i){return false}return G_(t,i)}_applyCodeBlock(e,t,i){const n=this.editor.model.schema;const o=t.filter(e=>G_(n,e));for(const t of o){e.rename(t,\"codeBlock\");e.setAttribute(\"language\",i,t);n.removeDisallowedAttributes([t],e)}o.reverse().forEach((t,i)=>{const n=o[i+1];if(t.previousSibling===n){e.appendElement(\"softBreak\",n);e.merge(e.createPositionBefore(t))}})}_removeCodeBlock(e,t){const i=t.filter(e=>e.is(\"codeBlock\"));for(const t of i){const i=e.createRangeOn(t);for(const t of Array.from(i.getItems()).reverse()){if(t.is(\"softBreak\")&&t.parent.is(\"codeBlock\")){const{position:i}=e.split(e.createPositionBefore(t));e.rename(i.nodeAfter,\"paragraph\");e.removeAttribute(\"language\",i.nodeAfter);e.remove(t)}}e.rename(t,\"paragraph\");e.removeAttribute(\"language\",t)}}}function G_(e,t){if(t.is(\"rootElement\")||e.isLimit(t)){return false}return e.checkChild(t.parent,\"codeBlock\")}class Y_ extends Dw{constructor(e){super(e);this._indentSequence=e.config.get(\"codeBlock.indentSequence\")}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor;const t=e.model;t.change(e=>{const i=U_(t);for(const t of i){e.insertText(this._indentSequence,t)}})}_checkEnabled(){if(!this._indentSequence){return false}return q_(this.editor.model.document.selection)}}class K_ extends Dw{constructor(e){super(e);this._indentSequence=e.config.get(\"codeBlock.indentSequence\")}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor;const t=e.model;t.change(e=>{const i=U_(t);for(const t of i){const i=J_(this.editor.model,t,this._indentSequence);if(i){e.remove(i)}}})}_checkEnabled(){if(!this._indentSequence){return false}const e=this.editor.model;if(!q_(e.document.selection)){return false}return U_(e).some(t=>J_(e,t,this._indentSequence))}}function J_(e,t,i){const n=Q_(t);if(!n){return null}const o=H_(n);const r=o.lastIndexOf(i);if(r+i.length!==o.length){return null}if(r===-1){return null}const{parent:s,startOffset:a}=n;return e.createRange(e.createPositionAt(s,a+r),e.createPositionAt(s,a+r+i.length))}function Q_(e){let t=e.parent.getChild(e.index);if(!t||t.is(\"softBreak\")){t=e.nodeBefore}if(!t||t.is(\"softBreak\")){return null}return t}function Z_(e,t,i=false){const n=F_(t,\"language\",\"class\");const o=F_(t,\"language\",\"label\");return(t,r,s)=>{const{writer:a,mapper:l,consumable:c}=s;if(!c.consume(r.item,\"insert\")){return}const d=r.item.getAttribute(\"language\");const u=l.toViewPosition(e.createPositionBefore(r.item));const h={};if(i){h[\"data-language\"]=o[d];h.spellcheck=\"false\"}const f=a.createContainerElement(\"pre\",h);const m=a.createContainerElement(\"code\",{class:n[d]||null});a.insert(a.createPositionAt(f,0),m);a.insert(u,f);l.bindElements(r.item,m)}}function X_(e){return(t,i,n)=>{if(i.item.parent.name!==\"codeBlock\"){return}const{writer:o,mapper:r,consumable:s}=n;if(!s.consume(i.item,\"insert\")){return}const a=r.toViewPosition(e.createPositionBefore(i.item));o.insert(a,o.createText(\"\\n\"))}}function ek(e,t){const i=F_(t,\"class\",\"language\");const n=t[0].language;return(t,o,r)=>{const s=o.viewItem;const a=s.getChild(0);if(!a||!a.is(\"code\")){return}const{consumable:l,writer:c}=r;if(!l.test(s,{name:true})||!l.test(a,{name:true})){return}const d=c.createElement(\"codeBlock\");const u=[...a.getClassNames()];if(!u.length){u.push(\"\")}for(const e of u){const t=i[e];if(t){c.setAttribute(\"language\",t,d);break}}if(!d.hasAttribute(\"language\")){c.setAttribute(\"language\",n,d)}const h=[...e.createRangeIn(a)].filter(e=>e.type===\"text\").map(({item:e})=>e.data).join(\"\");const f=W_(c,h);c.append(f,d);const m=r.splitToAllowedParent(d,o.modelCursor);if(!m){return}c.insert(d,m.position);l.consume(s,{name:true});l.consume(a,{name:true});const g=r.getSplitParts(d);o.modelRange=c.createRange(r.writer.createPositionBefore(d),r.writer.createPositionAfter(g[g.length-1]));if(m.cursorParent){o.modelCursor=c.createPositionAt(m.cursorParent,0)}else{o.modelCursor=o.modelRange.end}}}const tk=\"paragraph\";class ik extends Rw{static get pluginName(){return\"CodeBlockEditing\"}static get requires(){return[B_]}constructor(e){super(e);e.config.define(\"codeBlock\",{languages:[{language:\"plaintext\",label:\"Plain text\"},{language:\"c\",label:\"C\"},{language:\"cs\",label:\"C#\"},{language:\"cpp\",label:\"C++\"},{language:\"css\",label:\"CSS\"},{language:\"diff\",label:\"Diff\"},{language:\"html\",label:\"HTML\"},{language:\"java\",label:\"Java\"},{language:\"javascript\",label:\"JavaScript\"},{language:\"php\",label:\"PHP\"},{language:\"python\",label:\"Python\"},{language:\"ruby\",label:\"Ruby\"},{language:\"typescript\",label:\"TypeScript\"},{language:\"xml\",label:\"XML\"}],indentSequence:\"\\t\"})}init(){const e=this.editor;const t=e.model.schema;const i=e.model;const n=V_(e);e.commands.add(\"codeBlock\",new $_(e));e.commands.add(\"indentCodeBlock\",new Y_(e));e.commands.add(\"outdentCodeBlock\",new K_(e));const o=e=>(t,i)=>{const n=this.editor.commands.get(e);if(n.isEnabled){this.editor.execute(e);i()}};e.keystrokes.set(\"Tab\",o(\"indentCodeBlock\"));e.keystrokes.set(\"Shift+Tab\",o(\"outdentCodeBlock\"));t.register(\"codeBlock\",{allowWhere:\"$block\",isBlock:true,allowAttributes:[\"language\"]});t.extend(\"$text\",{allowIn:\"codeBlock\"});t.addAttributeCheck(e=>{if(e.endsWith(\"codeBlock $text\")){return false}});e.editing.downcastDispatcher.on(\"insert:codeBlock\",Z_(i,n,true));e.data.downcastDispatcher.on(\"insert:codeBlock\",Z_(i,n));e.data.downcastDispatcher.on(\"insert:softBreak\",X_(i),{priority:\"high\"});e.data.upcastDispatcher.on(\"element:pre\",ek(e.editing.view,n));this.listenTo(e.editing.view.document,\"clipboardInput\",(e,t)=>{const n=i.document.selection;if(!n.anchor.parent.is(\"codeBlock\")){return}const o=t.dataTransfer.getData(\"text/plain\");i.change(t=>{i.insertContent(W_(t,o),n);e.stop()})});this.listenTo(i,\"getSelectedContent\",(e,[n])=>{const o=n.anchor;if(n.isCollapsed||!o.parent.is(\"codeBlock\")||!o.hasSameParentAs(n.focus)){return}i.change(i=>{const r=e.return;if(r.childCount>1||n.containsEntireContent(o.parent)){const t=i.createElement(\"codeBlock\",o.parent.getAttributes());i.append(r,t);const n=i.createDocumentFragment();i.append(t,n);e.return=n}else{const e=r.getChild(0);if(t.checkAttribute(e,\"code\")){i.setAttribute(\"code\",true,e)}}})})}afterInit(){const e=this.editor;const t=e.commands;const i=t.get(\"indent\");const n=t.get(\"outdent\");if(i){i.registerChildCommand(t.get(\"indentCodeBlock\"))}if(n){n.registerChildCommand(t.get(\"outdentCodeBlock\"))}this.listenTo(e.editing.view.document,\"enter\",(t,i)=>{const n=e.model.document.selection.getLastPosition().parent;if(!n.is(\"codeBlock\")){return}ok(e,i.isSoft)||rk(e,i.isSoft)||nk(e);i.preventDefault();t.stop()})}}function nk(e){const t=e.model;const i=t.document;const n=i.selection.getLastPosition();const o=n.nodeBefore||n.textNode;let r;if(o&&o.is(\"text\")){r=H_(o)}e.model.change(t=>{e.execute(\"shiftEnter\");if(r){t.insertText(r,i.selection.anchor)}})}function ok(e,t){const i=e.model;const n=i.document;const o=e.editing.view;const r=n.selection.getLastPosition();const s=r.nodeAfter;if(t||!n.selection.isCollapsed||!r.isAtStart){return false}if(!s||!s.is(\"softBreak\")){return false}e.model.change(t=>{e.execute(\"enter\");const i=n.selection.anchor.parent.previousSibling;t.rename(i,tk);t.setSelection(i,\"in\");e.model.schema.removeDisallowedAttributes([i],t);t.remove(s)});o.scrollToTheSelection();return true}function rk(e,t){const i=e.model;const n=i.document;const o=e.editing.view;const r=n.selection.getLastPosition();const s=r.nodeBefore;let a;if(t||!n.selection.isCollapsed||!r.isAtEnd||!s){return false}if(s.is(\"softBreak\")){a=i.createRangeOn(s)}else if(s.is(\"text\")&&!s.data.match(/\\S/)&&s.previousSibling&&s.previousSibling.is(\"softBreak\")){a=i.createRange(i.createPositionBefore(s.previousSibling),i.createPositionAfter(s))}else{return false}e.model.change(t=>{t.remove(a);e.execute(\"enter\");const i=n.selection.anchor.parent;t.rename(i,tk);e.model.schema.removeDisallowedAttributes([i],t)});o.scrollToTheSelection();return true}class sk{constructor(e,t){if(t){ql(this,t)}if(e){this.set(e)}}}ys(sk,Jl);var ak=i(50);class lk extends _b{constructor(e){super(e);const t=this.bindTemplate;this.set(\"icon\");this.set(\"isEnabled\",true);this.set(\"isOn\",false);this.set(\"isToggleable\",false);this.set(\"isVisible\",true);this.set(\"keystroke\");this.set(\"label\");this.set(\"tabindex\",-1);this.set(\"tooltip\");this.set(\"tooltipPosition\",\"s\");this.set(\"type\",\"button\");this.set(\"withText\",false);this.children=this.createCollection();this.actionView=this._createActionView();this.arrowView=this._createArrowView();this.keystrokes=new mp;this.focusTracker=new Ep;this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-splitbutton\",t.if(\"isVisible\",\"ck-hidden\",e=>!e),this.arrowView.bindTemplate.if(\"isOn\",\"ck-splitbutton_open\")]},children:this.children})}render(){super.render();this.children.add(this.actionView);this.children.add(this.arrowView);this.focusTracker.add(this.actionView.element);this.focusTracker.add(this.arrowView.element);this.keystrokes.listenTo(this.element);this.keystrokes.set(\"arrowright\",(e,t)=>{if(this.focusTracker.focusedElement===this.actionView.element){this.arrowView.focus();t()}});this.keystrokes.set(\"arrowleft\",(e,t)=>{if(this.focusTracker.focusedElement===this.arrowView.element){this.actionView.focus();t()}})}focus(){this.actionView.focus()}_createActionView(){const e=new rw;e.bind(\"icon\",\"isEnabled\",\"isOn\",\"isToggleable\",\"keystroke\",\"label\",\"tabindex\",\"tooltip\",\"tooltipPosition\",\"type\",\"withText\").to(this);e.extendTemplate({attributes:{class:\"ck-splitbutton__action\"}});e.delegate(\"execute\").to(this);return e}_createArrowView(){const e=new rw;const t=e.bindTemplate;e.icon=sw;e.extendTemplate({attributes:{class:\"ck-splitbutton__arrow\",\"aria-haspopup\":true,\"aria-expanded\":t.to(\"isOn\",e=>String(e))}});e.bind(\"isEnabled\").to(this);e.delegate(\"execute\").to(this,\"open\");return e}}var ck='';var dk=i(52);class uk extends Rw{init(){const e=this.editor;const t=e.t;const i=e.ui.componentFactory;const n=V_(e);const o=n[0];i.add(\"codeBlock\",i=>{const r=e.commands.get(\"codeBlock\");const s=bw(i,lk);const a=s.buttonView;a.set({label:t(\"Insert code block\"),tooltip:true,icon:ck,isToggleable:true});a.bind(\"isOn\").to(r,\"value\",e=>!!e);a.on(\"execute\",()=>{e.execute(\"codeBlock\",{language:o.language});e.editing.view.focus()});s.on(\"execute\",t=>{e.execute(\"codeBlock\",{language:t.source._codeBlockLanguage,forceValue:true});e.editing.view.focus()});s.class=\"ck-code-block-dropdown\";s.bind(\"isEnabled\").to(r);_w(s,this._getLanguageListItemDefinitions(n));return s})}_getLanguageListItemDefinitions(e){const t=this.editor;const i=t.commands.get(\"codeBlock\");const n=new xs;for(const t of e){const e={type:\"button\",model:new sk({_codeBlockLanguage:t.language,label:t.label,withText:true})};e.model.bind(\"isOn\").to(i,\"value\",t=>t===e.model._codeBlockLanguage);n.add(e)}return n}}class hk extends Rw{static get requires(){return[ik,uk]}static get pluginName(){return\"CodeBlock\"}}class fk{constructor(e){this.files=mk(e);this._native=e}get types(){return this._native.types}getData(e){return this._native.getData(e)}setData(e,t){this._native.setData(e,t)}}function mk(e){const t=e.files?Array.from(e.files):[];const i=e.items?Array.from(e.items):[];if(t.length){return t}return i.filter(e=>e.kind===\"file\").map(e=>e.getAsFile())}class gk extends Ku{constructor(e){super(e);const t=this.document;this.domEventType=[\"paste\",\"copy\",\"cut\",\"drop\",\"dragover\"];this.listenTo(t,\"paste\",i,{priority:\"low\"});this.listenTo(t,\"drop\",i,{priority:\"low\"});function i(e,i){i.preventDefault();const n=i.dropRange?[i.dropRange]:Array.from(t.selection.getRanges());const o=new es(t,\"clipboardInput\");t.fire(o,{dataTransfer:i.dataTransfer,targetRanges:n});if(o.stop.called){i.stopPropagation()}}}onDomEvent(e){const t={dataTransfer:new fk(e.clipboardData?e.clipboardData:e.dataTransfer)};if(e.type==\"drop\"){t.dropRange=pk(this.view,e)}this.fire(e.type,e,t)}}function pk(e,t){const i=t.target.ownerDocument;const n=t.clientX;const o=t.clientY;let r;if(i.caretRangeFromPoint&&i.caretRangeFromPoint(n,o)){r=i.caretRangeFromPoint(n,o)}else if(t.rangeParent){r=i.createRange();r.setStart(t.rangeParent,t.rangeOffset);r.collapse(true)}if(r){return e.domConverter.domRangeToView(r)}else{return e.document.selection.getFirstRange()}}function bk(e){e=e.replace(//g,\">\").replace(/\\n/g,\"

    \").replace(/^\\s/,\" \").replace(/\\s$/,\" \").replace(/\\s\\s/g,\"  \");if(e.indexOf(\"

    \")>-1){e=`

    ${e}

    `}return e}function wk(e){return e.replace(/(\\s+)<\\/span>/g,(e,t)=>{if(t.length==1){return\" \"}return t})}const _k=[\"figcaption\",\"li\"];function kk(e){let t=\"\";if(e.is(\"text\")||e.is(\"textProxy\")){t=e.data}else if(e.is(\"img\")&&e.hasAttribute(\"alt\")){t=e.getAttribute(\"alt\")}else{let i=null;for(const n of e.getChildren()){const e=kk(n);if(i&&(i.is(\"containerElement\")||n.is(\"containerElement\"))){if(_k.includes(i.name)||_k.includes(n.name)){t+=\"\\n\"}else{t+=\"\\n\\n\"}}t+=e;i=n}}return t}class vk extends Rw{static get pluginName(){return\"Clipboard\"}init(){const e=this.editor;const t=e.model.document;const i=e.editing.view;const n=i.document;this._htmlDataProcessor=new Ap(n);i.addObserver(gk);this.listenTo(n,\"clipboardInput\",t=>{if(e.isReadOnly){t.stop()}},{priority:\"highest\"});this.listenTo(n,\"clipboardInput\",(e,t)=>{const n=t.dataTransfer;let o=\"\";if(n.getData(\"text/html\")){o=wk(n.getData(\"text/html\"))}else if(n.getData(\"text/plain\")){o=bk(n.getData(\"text/plain\"))}o=this._htmlDataProcessor.toView(o);const r=new es(this,\"inputTransformation\");this.fire(r,{content:o,dataTransfer:n});if(r.stop.called){e.stop()}i.scrollToTheSelection()},{priority:\"low\"});this.listenTo(this,\"inputTransformation\",(e,t)=>{if(!t.content.isEmpty){const i=this.editor.data;const n=this.editor.model;const o=i.toModel(t.content,\"$clipboardHolder\");if(o.childCount==0){return}n.insertContent(o);e.stop()}},{priority:\"low\"});function o(i,o){const r=o.dataTransfer;o.preventDefault();const s=e.data.toView(e.model.getSelectedContent(t.selection));n.fire(\"clipboardOutput\",{dataTransfer:r,content:s,method:i.name})}this.listenTo(n,\"copy\",o,{priority:\"low\"});this.listenTo(n,\"cut\",(t,i)=>{if(e.isReadOnly){i.preventDefault()}else{o(t,i)}},{priority:\"low\"});this.listenTo(n,\"clipboardOutput\",(i,n)=>{if(!n.content.isEmpty){n.dataTransfer.setData(\"text/html\",this._htmlDataProcessor.toData(n.content));n.dataTransfer.setData(\"text/plain\",kk(n.content))}if(n.method==\"cut\"){e.model.deleteContent(t.selection)}},{priority:\"low\"})}}class yk extends Dw{execute(){const e=this.editor.model;const t=e.document;e.change(i=>{xk(this.editor.model,i,t.selection,e.schema);this.fire(\"afterExecute\",{writer:i})})}}function xk(e,t,i,n){const o=i.isCollapsed;const r=i.getFirstRange();const s=r.start.parent;const a=r.end.parent;if(n.isLimit(s)||n.isLimit(a)){if(!o&&s==a){e.deleteContent(i)}return}if(o){const e=L_(t.model.schema,i.getAttributes());Ak(t,r.start);t.setSelectionAttribute(e)}else{const n=!(r.start.isAtStart&&r.end.isAtEnd);const o=s==a;e.deleteContent(i,{leaveUnmerged:n});if(n){if(o){Ak(t,i.focus)}else{t.setSelection(a,0)}}}}function Ak(e,t){e.split(t);e.setSelection(t.parent.nextSibling,0)}class Ck extends Rw{static get pluginName(){return\"Enter\"}init(){const e=this.editor;const t=e.editing.view;const i=t.document;t.addObserver(j_);e.commands.add(\"enter\",new yk(e));this.listenTo(i,\"enter\",(i,n)=>{n.preventDefault();if(n.isSoft){return}e.execute(\"enter\");t.scrollToTheSelection()},{priority:\"low\"})}}class Tk extends Dw{execute(){const e=this.editor.model;const t=e.schema.getLimitElement(e.document.selection);e.change(e=>{e.setSelection(t,\"in\")})}}const Ek=zc(\"Ctrl+A\");class Pk extends Rw{static get pluginName(){return\"SelectAllEditing\"}init(){const e=this.editor;const t=e.editing.view;const i=t.document;e.commands.add(\"selectAll\",new Tk(e));this.listenTo(i,\"keydown\",(t,i)=>{if(Rc(i)===Ek){e.execute(\"selectAll\");i.preventDefault()}})}}var Mk='';class Sk extends Rw{static get pluginName(){return\"SelectAllUI\"}init(){const e=this.editor;e.ui.componentFactory.add(\"selectAll\",t=>{const i=e.commands.get(\"selectAll\");const n=new rw(t);const o=t.t;n.set({label:o(\"Select all\"),icon:Mk,keystroke:\"Ctrl+A\",tooltip:true});n.bind(\"isOn\",\"isEnabled\").to(i,\"value\",\"isEnabled\");this.listenTo(n,\"execute\",()=>{e.execute(\"selectAll\");e.editing.view.focus()});return n})}}class Ik extends Rw{static get requires(){return[Pk,Sk]}static get pluginName(){return\"SelectAll\"}}class Lk{constructor(e,t=20){this.model=e;this.size=0;this.limit=t;this.isLocked=false;this._changeCallback=(e,t)=>{if(t.type!=\"transparent\"&&t!==this._batch){this._reset(true)}};this._selectionChangeCallback=()=>{this._reset()};this.model.document.on(\"change\",this._changeCallback);this.model.document.selection.on(\"change:range\",this._selectionChangeCallback);this.model.document.selection.on(\"change:attribute\",this._selectionChangeCallback)}get batch(){if(!this._batch){this._batch=this.model.createBatch()}return this._batch}input(e){this.size+=e;if(this.size>=this.limit){this._reset(true)}}lock(){this.isLocked=true}unlock(){this.isLocked=false}destroy(){this.model.document.off(\"change\",this._changeCallback);this.model.document.selection.off(\"change:range\",this._selectionChangeCallback);this.model.document.selection.off(\"change:attribute\",this._selectionChangeCallback)}_reset(e){if(!this.isLocked||e){this._batch=null;this.size=0}}}class Nk extends Dw{constructor(e,t){super(e);this._buffer=new Lk(e.model,t);this._batches=new WeakSet}get buffer(){return this._buffer}destroy(){super.destroy();this._buffer.destroy()}execute(e={}){const t=this.editor.model;const i=t.document;const n=e.text||\"\";const o=n.length;const r=e.range?t.createSelection(e.range):i.selection;const s=e.resultRange;t.enqueueChange(this._buffer.batch,e=>{this._buffer.lock();t.deleteContent(r);if(n){t.insertContent(e.createText(n,i.selection.getAttributes()),r)}if(s){e.setSelection(s)}else if(!r.is(\"documentSelection\")){e.setSelection(r)}this._buffer.unlock();this._buffer.input(o);this._batches.add(this._buffer.batch)})}}function Ok(e){let t=null;const i=e.model;const n=e.editing.view;const o=e.commands.get(\"input\");if(Tc.isAndroid){n.document.on(\"beforeinput\",(e,t)=>r(t),{priority:\"lowest\"})}else{n.document.on(\"keydown\",(e,t)=>r(t),{priority:\"lowest\"})}n.document.on(\"compositionstart\",s,{priority:\"lowest\"});n.document.on(\"compositionend\",()=>{t=i.createSelection(i.document.selection)},{priority:\"lowest\"});function r(e){const r=i.document;const s=n.document.isComposing;const l=t&&t.isEqual(r.selection);t=null;if(!o.isEnabled){return}if(zk(e)||r.selection.isCollapsed){return}if(s&&e.keyCode===229){return}if(!s&&e.keyCode===229&&l){return}a()}function s(){const e=i.document;const t=e.selection.rangeCount===1?e.selection.getFirstRange().isFlat:true;if(e.selection.isCollapsed||t){return}a()}function a(){const e=o.buffer;e.lock();i.enqueueChange(e.batch,()=>{i.deleteContent(i.document.selection)});e.unlock()}}const Rk=[Rc(\"arrowUp\"),Rc(\"arrowRight\"),Rc(\"arrowDown\"),Rc(\"arrowLeft\"),9,16,17,18,19,20,27,33,34,35,36,45,91,93,144,145,173,174,175,176,177,178,179,255];for(let e=112;e<=135;e++){Rk.push(e)}function zk(e){if(e.ctrlKey){return true}return Rk.includes(e.keyCode)}function Dk(e,t){const i=[];let n=0;let o;e.forEach(e=>{if(e==\"equal\"){r();n++}else if(e==\"insert\"){if(s(\"insert\")){o.values.push(t[n])}else{r();o={type:\"insert\",index:n,values:[t[n]]}}n++}else{if(s(\"delete\")){o.howMany++}else{r();o={type:\"delete\",index:n,howMany:1}}}});r();return i;function r(){if(o){i.push(o);o=null}}function s(e){return o&&o.type==e}}function jk(e){if(e.length==0){return false}for(const t of e){if(t.type===\"children\"&&!Bk(t)){return true}}return false}function Bk(e){if(e.newChildren.length-e.oldChildren.length!=1){return}const t=kd(e.oldChildren,e.newChildren,Vk);const i=Dk(t,e.newChildren);if(i.length>1){return}const n=i[0];if(!(!!n.values[0]&&n.values[0].is(\"text\"))){return}return n}function Vk(e,t){if(!!e&&e.is(\"text\")&&!!t&&t.is(\"text\")){return e.data===t.data}else{return e===t}}function Fk(e){e.editing.view.document.on(\"mutations\",(t,i,n)=>{new Hk(e).handle(i,n)})}class Hk{constructor(e){this.editor=e;this.editing=this.editor.editing}handle(e,t){if(jk(e)){this._handleContainerChildrenMutations(e,t)}else{for(const i of e){this._handleTextMutation(i,t);this._handleTextNodeInsertion(i)}}}_handleContainerChildrenMutations(e,t){const i=Wk(e);if(!i){return}const n=this.editor.editing.view.domConverter;const o=n.mapViewToDom(i);const r=new Dd(this.editor.editing.view.document);const s=this.editor.data.toModel(r.domToView(o)).getChild(0);const a=this.editor.editing.mapper.toModelElement(i);if(!a){return}const l=Array.from(s.getChildren());const c=Array.from(a.getChildren());const d=l[l.length-1];const u=c[c.length-1];if(d&&d.is(\"softBreak\")&&u&&!u.is(\"softBreak\")){l.pop()}const h=this.editor.model.schema;if(!Uk(l,h)||!Uk(c,h)){return}const f=l.map(e=>e.is(\"text\")?e.data:\"@\").join(\"\").replace(/\\u00A0/g,\" \");const m=c.map(e=>e.is(\"text\")?e.data:\"@\").join(\"\").replace(/\\u00A0/g,\" \");if(m===f){return}const g=kd(m,f);const{firstChangeAt:p,insertions:b,deletions:w}=qk(g);let _=null;if(t){_=this.editing.mapper.toModelRange(t.getFirstRange())}const k=f.substr(p,b);const v=this.editor.model.createRange(this.editor.model.createPositionAt(a,p),this.editor.model.createPositionAt(a,p+w));this.editor.execute(\"input\",{text:k,range:v,resultRange:_})}_handleTextMutation(e,t){if(e.type!=\"text\"){return}const i=e.newText.replace(/\\u00A0/g,\" \");const n=e.oldText.replace(/\\u00A0/g,\" \");if(n===i){return}const o=kd(n,i);const{firstChangeAt:r,insertions:s,deletions:a}=qk(o);let l=null;if(t){l=this.editing.mapper.toModelRange(t.getFirstRange())}const c=this.editing.view.createPositionAt(e.node,r);const d=this.editing.mapper.toModelPosition(c);const u=this.editor.model.createRange(d,d.getShiftedBy(a));const h=i.substr(r,s);this.editor.execute(\"input\",{text:h,range:u,resultRange:l})}_handleTextNodeInsertion(e){if(e.type!=\"children\"){return}const t=Bk(e);const i=this.editing.view.createPositionAt(e.node,t.index);const n=this.editing.mapper.toModelPosition(i);const o=t.values[0].data;this.editor.execute(\"input\",{text:o.replace(/\\u00A0/g,\" \"),range:this.editor.model.createRange(n)})}}function Wk(e){const t=e.map(e=>e.node).reduce((e,t)=>e.getCommonAncestor(t,{includeSelf:true}));if(!t){return}return t.getAncestors({includeSelf:true,parentFirst:true}).find(e=>e.is(\"containerElement\")||e.is(\"rootElement\"))}function Uk(e,t){return e.every(e=>t.isInline(e))}function qk(e){let t=null;let i=null;for(let n=0;n{this._buffer.lock();const o=n.createSelection(e.selection||i.selection);const r=o.isCollapsed;if(o.isCollapsed){t.modifySelection(o,{direction:this.direction,unit:e.unit})}if(this._shouldEntireContentBeReplacedWithParagraph(e.sequence||1)){this._replaceEntireContentWithParagraph(n);return}if(o.isCollapsed){return}let s=0;o.getFirstRange().getMinimalFlatRanges().forEach(e=>{s+=mc(e.getWalker({singleCharacters:true,ignoreElementEnd:true,shallow:true}))});t.deleteContent(o,{doNotResetEntireContent:r,direction:this.direction});this._buffer.input(s);n.setSelection(o);this._buffer.unlock()})}_shouldEntireContentBeReplacedWithParagraph(e){if(e>1){return false}const t=this.editor.model;const i=t.document;const n=i.selection;const o=t.schema.getLimitElement(n);const r=n.isCollapsed&&n.containsEntireContent(o);if(!r){return false}if(!t.schema.checkChild(o,\"paragraph\")){return false}const s=o.getChild(0);if(s&&s.name===\"paragraph\"){return false}return true}_replaceEntireContentWithParagraph(e){const t=this.editor.model;const i=t.document;const n=i.selection;const o=t.schema.getLimitElement(n);const r=e.createElement(\"paragraph\");e.remove(e.createRangeIn(o));e.insert(r,o);e.setSelection(r,0)}}class Yk extends Gd{constructor(e){super(e);const t=e.document;let i=0;t.on(\"keyup\",(e,t)=>{if(t.keyCode==Oc.delete||t.keyCode==Oc.backspace){i=0}});t.on(\"keydown\",(e,t)=>{const o={};if(t.keyCode==Oc.delete){o.direction=\"forward\";o.unit=\"character\"}else if(t.keyCode==Oc.backspace){o.direction=\"backward\";o.unit=\"codePoint\"}else{return}const r=Tc.isMac?t.altKey:t.ctrlKey;o.unit=r?\"word\":o.unit;o.sequence=++i;n(e,t.domEvent,o)});if(Tc.isAndroid){t.on(\"beforeinput\",(t,i)=>{if(i.domEvent.inputType!=\"deleteContentBackward\"){return}const o={unit:\"codepoint\",direction:\"backward\",sequence:1};const r=i.domTarget.ownerDocument.defaultView.getSelection();if(r.anchorNode==r.focusNode&&r.anchorOffset+1!=r.focusOffset){o.selectionToRemove=e.domConverter.domSelectionToView(r)}n(t,i.domEvent,o)})}function n(e,i,n){let o;t.once(\"delete\",e=>o=e,{priority:Number.POSITIVE_INFINITY});t.fire(\"delete\",new Yu(t,i,n));if(o&&o.stop.called){e.stop()}}}observe(){}}class Kk extends Rw{static get pluginName(){return\"Delete\"}init(){const e=this.editor;const t=e.editing.view;const i=t.document;t.addObserver(Yk);e.commands.add(\"forwardDelete\",new Gk(e,\"forward\"));e.commands.add(\"delete\",new Gk(e,\"backward\"));this.listenTo(i,\"delete\",(i,n)=>{const o={unit:n.unit,sequence:n.sequence};if(n.selectionToRemove){const t=e.model.createSelection();const i=[];for(const t of n.selectionToRemove.getRanges()){i.push(e.editing.mapper.toModelRange(t))}t.setTo(i);o.selection=t}e.execute(n.direction==\"forward\"?\"forwardDelete\":\"delete\",o);n.preventDefault();t.scrollToTheSelection()});if(Tc.isAndroid){let e=null;this.listenTo(i,\"delete\",(t,i)=>{const n=i.domTarget.ownerDocument.defaultView.getSelection();e={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}},{priority:\"lowest\"});this.listenTo(i,\"keyup\",(t,i)=>{if(e){const t=i.domTarget.ownerDocument.defaultView.getSelection();t.collapse(e.anchorNode,e.anchorOffset);t.extend(e.focusNode,e.focusOffset);e=null}})}}}class Jk extends Rw{static get requires(){return[$k,Kk]}static get pluginName(){return\"Typing\"}}const Qk=new Map;function Zk(e,t,i){let n=Qk.get(e);if(!n){n=new Map;Qk.set(e,n)}n.set(t,i)}function Xk(e,t){const i=Qk.get(e);if(i&&i.has(t)){return i.get(t)}return ev}function ev(e){return[e]}function tv(e,t,i={}){const n=Xk(e.constructor,t.constructor);try{e=e.clone();return n(e,t,i)}catch(e){throw e}}function iv(e,t,i){e=e.slice();t=t.slice();const n=new nv(i.document,i.useRelations,i.forceWeakRemove);n.setOriginalOperations(e);n.setOriginalOperations(t);const o=n.originalOperations;if(e.length==0||t.length==0){return{operationsA:e,operationsB:t,originalOperations:o}}const r=new WeakMap;for(const t of e){r.set(t,0)}const s={nextBaseVersionA:e[e.length-1].baseVersion+1,nextBaseVersionB:t[t.length-1].baseVersion+1,originalOperationsACount:e.length,originalOperationsBCount:t.length};let a=0;while(a{if(e.key===t.key&&e.range.start.hasSameParentAs(t.range.start)){const n=e.range.getDifference(t.range).map(t=>new tg(t,e.key,e.oldValue,e.newValue,0));const o=e.range.getIntersection(t.range);if(o){if(i.aIsStrong){n.push(new tg(o,t.key,t.newValue,e.newValue,0))}}if(n.length==0){return[new Lg(0)]}return n}else{return[e]}});Zk(tg,og,(e,t)=>{if(e.range.start.hasSameParentAs(t.position)&&e.range.containsPosition(t.position)){const i=e.range._getTransformedByInsertion(t.position,t.howMany,!t.shouldReceiveAttributes);const n=i.map(t=>new tg(t,e.key,e.oldValue,e.newValue,e.baseVersion));if(t.shouldReceiveAttributes){const i=sv(t,e.key,e.oldValue);if(i){n.unshift(i)}}return n}e.range=e.range._getTransformedByInsertion(t.position,t.howMany,false)[0];return[e]});function sv(e,t,i){const n=e.nodes;const o=n.getNode(0).getAttribute(t);if(o==i){return null}const r=new Kh(e.position,e.position.getShiftedBy(e.howMany));return new tg(r,t,o,i,0)}Zk(tg,lg,(e,t)=>{const i=[];if(e.range.start.hasSameParentAs(t.deletionPosition)){if(e.range.containsPosition(t.deletionPosition)||e.range.start.isEqual(t.deletionPosition)){i.push(Kh._createFromPositionAndShift(t.graveyardPosition,1))}}const n=e.range._getTransformedByMergeOperation(t);if(!n.isCollapsed){i.push(n)}return i.map(t=>new tg(t,e.key,e.oldValue,e.newValue,e.baseVersion))});Zk(tg,ng,(e,t)=>{const i=av(e.range,t);return i.map(t=>new tg(t,e.key,e.oldValue,e.newValue,e.baseVersion))});function av(e,t){const i=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);let n=null;let o=[];if(i.containsRange(e,true)){n=e}else if(e.start.hasSameParentAs(i.start)){o=e.getDifference(i);n=e.getIntersection(i)}else{o=[e]}const r=[];for(let e of o){e=e._getTransformedByDeletion(t.sourcePosition,t.howMany);const i=t.getMovedRangeStart();const n=e.start.hasSameParentAs(i);e=e._getTransformedByInsertion(i,t.howMany,n);r.push(...e)}if(n){r.push(n._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany,false)[0])}return r}Zk(tg,cg,(e,t)=>{if(e.range.end.isEqual(t.insertionPosition)){if(!t.graveyardPosition){e.range.end.offset++}return[e]}if(e.range.start.hasSameParentAs(t.splitPosition)&&e.range.containsPosition(t.splitPosition)){const i=e.clone();i.range=new Kh(t.moveTargetPosition.clone(),e.range.end._getCombined(t.splitPosition,t.moveTargetPosition));e.range.end=t.splitPosition.clone();e.range.end.stickiness=\"toPrevious\";return[e,i]}e.range=e.range._getTransformedBySplitOperation(t);return[e]});Zk(og,tg,(e,t)=>{const i=[e];if(e.shouldReceiveAttributes&&e.position.hasSameParentAs(t.range.start)&&t.range.containsPosition(e.position)){const n=sv(e,t.key,t.newValue);if(n){i.push(n)}}return i});Zk(og,og,(e,t,i)=>{if(e.position.isEqual(t.position)&&i.aIsStrong){return[e]}e.position=e.position._getTransformedByInsertOperation(t);return[e]});Zk(og,ng,(e,t)=>{e.position=e.position._getTransformedByMoveOperation(t);return[e]});Zk(og,cg,(e,t)=>{e.position=e.position._getTransformedBySplitOperation(t);return[e]});Zk(og,lg,(e,t)=>{e.position=e.position._getTransformedByMergeOperation(t);return[e]});Zk(rg,og,(e,t)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedByInsertOperation(t)[0]}if(e.newRange){e.newRange=e.newRange._getTransformedByInsertOperation(t)[0]}return[e]});Zk(rg,rg,(e,t,i)=>{if(e.name==t.name){if(i.aIsStrong){e.oldRange=t.newRange?t.newRange.clone():null}else{return[new Lg(0)]}}return[e]});Zk(rg,lg,(e,t)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedByMergeOperation(t)}if(e.newRange){e.newRange=e.newRange._getTransformedByMergeOperation(t)}return[e]});Zk(rg,ng,(e,t,i)=>{if(e.oldRange){e.oldRange=Kh._createFromRanges(e.oldRange._getTransformedByMoveOperation(t))}if(e.newRange){if(i.abRelation){const n=Kh._createFromRanges(e.newRange._getTransformedByMoveOperation(t));if(i.abRelation.side==\"left\"&&t.targetPosition.isEqual(e.newRange.start)){e.newRange.start.path=i.abRelation.path;e.newRange.end=n.end;return[e]}else if(i.abRelation.side==\"right\"&&t.targetPosition.isEqual(e.newRange.end)){e.newRange.start=n.start;e.newRange.end.path=i.abRelation.path;return[e]}}e.newRange=Kh._createFromRanges(e.newRange._getTransformedByMoveOperation(t))}return[e]});Zk(rg,cg,(e,t,i)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedBySplitOperation(t)}if(e.newRange){if(i.abRelation){const n=e.newRange._getTransformedBySplitOperation(t);if(e.newRange.start.isEqual(t.splitPosition)&&i.abRelation.wasStartBeforeMergedElement){e.newRange.start=qh._createAt(t.insertionPosition)}else if(e.newRange.start.isEqual(t.splitPosition)&&!i.abRelation.wasInLeftElement){e.newRange.start=qh._createAt(t.moveTargetPosition)}if(e.newRange.end.isEqual(t.splitPosition)&&i.abRelation.wasInRightElement){e.newRange.end=qh._createAt(t.moveTargetPosition)}else if(e.newRange.end.isEqual(t.splitPosition)&&i.abRelation.wasEndBeforeMergedElement){e.newRange.end=qh._createAt(t.insertionPosition)}else{e.newRange.end=n.end}return[e]}e.newRange=e.newRange._getTransformedBySplitOperation(t)}return[e]});Zk(lg,og,(e,t)=>{if(e.sourcePosition.hasSameParentAs(t.position)){e.howMany+=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByInsertOperation(t);e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t);return[e]});Zk(lg,lg,(e,t,i)=>{if(e.sourcePosition.isEqual(t.sourcePosition)&&e.targetPosition.isEqual(t.targetPosition)){if(!i.bWasUndone){return[new Lg(0)]}else{const i=t.graveyardPosition.path.slice();i.push(0);e.sourcePosition=new qh(t.graveyardPosition.root,i);e.howMany=0;return[e]}}if(e.sourcePosition.isEqual(t.sourcePosition)&&!e.targetPosition.isEqual(t.targetPosition)&&!i.bWasUndone&&i.abRelation!=\"splitAtSource\"){const n=e.targetPosition.root.rootName==\"$graveyard\";const o=t.targetPosition.root.rootName==\"$graveyard\";const r=n&&!o;const s=o&&!n;const a=s||!r&&i.aIsStrong;if(a){const i=t.targetPosition._getTransformedByMergeOperation(t);const n=e.targetPosition._getTransformedByMergeOperation(t);return[new ng(i,e.howMany,n,0)]}else{return[new Lg(0)]}}if(e.sourcePosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByMergeOperation(t);e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);if(!e.graveyardPosition.isEqual(t.graveyardPosition)||!i.aIsStrong){e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)}return[e]});Zk(lg,ng,(e,t,i)=>{const n=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);if(t.type==\"remove\"&&!i.bWasUndone&&!i.forceWeakRemove){if(e.deletionPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(e.sourcePosition)){return[new Lg(0)]}}if(e.sourcePosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}if(e.sourcePosition.hasSameParentAs(t.sourcePosition)){e.howMany-=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByMoveOperation(t);e.targetPosition=e.targetPosition._getTransformedByMoveOperation(t);if(!e.graveyardPosition.isEqual(t.targetPosition)){e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)}return[e]});Zk(lg,cg,(e,t,i)=>{if(t.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedByDeletion(t.graveyardPosition,1);if(e.deletionPosition.isEqual(t.graveyardPosition)){e.howMany=t.howMany}}if(e.targetPosition.isEqual(t.splitPosition)){const n=t.howMany!=0;const o=t.graveyardPosition&&e.deletionPosition.isEqual(t.graveyardPosition);if(n||o||i.abRelation==\"mergeTargetNotMoved\"){e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t);return[e]}}if(e.sourcePosition.isEqual(t.splitPosition)){if(i.abRelation==\"mergeSourceNotMoved\"){e.howMany=0;e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]}if(i.abRelation==\"mergeSameElement\"||e.sourcePosition.offset>0){e.sourcePosition=t.moveTargetPosition.clone();e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]}}if(e.sourcePosition.hasSameParentAs(t.splitPosition)){e.howMany=t.splitPosition.offset}e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t);e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]});Zk(ng,og,(e,t)=>{const i=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);const n=i._getTransformedByInsertOperation(t,false)[0];e.sourcePosition=n.start;e.howMany=n.end.offset-n.start.offset;if(!e.targetPosition.isEqual(t.position)){e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t)}return[e]});Zk(ng,ng,(e,t,i)=>{const n=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);const o=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);let r=i.aIsStrong;let s=!i.aIsStrong;if(i.abRelation==\"insertBefore\"||i.baRelation==\"insertAfter\"){s=true}else if(i.abRelation==\"insertAfter\"||i.baRelation==\"insertBefore\"){s=false}let a;if(e.targetPosition.isEqual(t.targetPosition)&&s){a=e.targetPosition._getTransformedByDeletion(t.sourcePosition,t.howMany)}else{a=e.targetPosition._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany)}if(lv(e,t)&&lv(t,e)){return[t.getReversed()]}const l=n.containsPosition(t.targetPosition);if(l&&n.containsRange(o,true)){n.start=n.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);n.end=n.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);return cv([n],a)}const c=o.containsPosition(e.targetPosition);if(c&&o.containsRange(n,true)){n.start=n.start._getCombined(t.sourcePosition,t.getMovedRangeStart());n.end=n.end._getCombined(t.sourcePosition,t.getMovedRangeStart());return cv([n],a)}const d=Rs(e.sourcePosition.getParentPath(),t.sourcePosition.getParentPath());if(d==\"prefix\"||d==\"extension\"){n.start=n.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);n.end=n.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);return cv([n],a)}if(e.type==\"remove\"&&t.type!=\"remove\"&&!i.aWasUndone&&!i.forceWeakRemove){r=true}else if(e.type!=\"remove\"&&t.type==\"remove\"&&!i.bWasUndone&&!i.forceWeakRemove){r=false}const u=[];const h=n.getDifference(o);for(const e of h){e.start=e.start._getTransformedByDeletion(t.sourcePosition,t.howMany);e.end=e.end._getTransformedByDeletion(t.sourcePosition,t.howMany);const i=Rs(e.start.getParentPath(),t.getMovedRangeStart().getParentPath())==\"same\";const n=e._getTransformedByInsertion(t.getMovedRangeStart(),t.howMany,i);u.push(...n)}const f=n.getIntersection(o);if(f!==null&&r){f.start=f.start._getCombined(t.sourcePosition,t.getMovedRangeStart());f.end=f.end._getCombined(t.sourcePosition,t.getMovedRangeStart());if(u.length===0){u.push(f)}else if(u.length==1){if(o.start.isBefore(n.start)||o.start.isEqual(n.start)){u.unshift(f)}else{u.push(f)}}else{u.splice(1,0,f)}}if(u.length===0){return[new Lg(e.baseVersion)]}return cv(u,a)});Zk(ng,cg,(e,t,i)=>{let n=e.targetPosition.clone();if(!e.targetPosition.isEqual(t.insertionPosition)||!t.graveyardPosition||i.abRelation==\"moveTargetAfter\"){n=e.targetPosition._getTransformedBySplitOperation(t)}const o=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);if(o.end.isEqual(t.insertionPosition)){if(!t.graveyardPosition){e.howMany++}e.targetPosition=n;return[e]}if(o.start.hasSameParentAs(t.splitPosition)&&o.containsPosition(t.splitPosition)){let e=new Kh(t.splitPosition,o.end);e=e._getTransformedBySplitOperation(t);const i=[new Kh(o.start,t.splitPosition),e];return cv(i,n)}if(e.targetPosition.isEqual(t.splitPosition)&&i.abRelation==\"insertAtSource\"){n=t.moveTargetPosition}if(e.targetPosition.isEqual(t.insertionPosition)&&i.abRelation==\"insertBetween\"){n=e.targetPosition}const r=o._getTransformedBySplitOperation(t);const s=[r];if(t.graveyardPosition){const n=o.start.isEqual(t.graveyardPosition)||o.containsPosition(t.graveyardPosition);if(e.howMany>1&&n&&!i.aWasUndone){s.push(Kh._createFromPositionAndShift(t.insertionPosition,1))}}return cv(s,n)});Zk(ng,lg,(e,t,i)=>{const n=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);if(t.deletionPosition.hasSameParentAs(e.sourcePosition)&&n.containsPosition(t.sourcePosition)){if(e.type==\"remove\"&&!i.forceWeakRemove){if(!i.aWasUndone){const i=[];let n=t.graveyardPosition.clone();let o=t.targetPosition._getTransformedByMergeOperation(t);if(e.howMany>1){i.push(new ng(e.sourcePosition,e.howMany-1,e.targetPosition,0));n=n._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany-1);o=o._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany-1)}const r=t.deletionPosition._getCombined(e.sourcePosition,e.targetPosition);const s=new ng(n,1,r,0);const a=s.getMovedRangeStart().path.slice();a.push(0);const l=new qh(s.targetPosition.root,a);o=o._getTransformedByMove(n,r,1);const c=new ng(o,t.howMany,l,0);i.push(s);i.push(c);return i}}else{if(e.howMany==1){if(!i.bWasUndone){return[new Lg(0)]}else{e.sourcePosition=t.graveyardPosition.clone();e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);return[e]}}}}const o=Kh._createFromPositionAndShift(e.sourcePosition,e.howMany);const r=o._getTransformedByMergeOperation(t);e.sourcePosition=r.start;e.howMany=r.end.offset-r.start.offset;e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);return[e]});Zk(sg,og,(e,t)=>{e.position=e.position._getTransformedByInsertOperation(t);return[e]});Zk(sg,lg,(e,t)=>{if(e.position.isEqual(t.deletionPosition)){e.position=t.graveyardPosition.clone();e.position.stickiness=\"toNext\";return[e]}e.position=e.position._getTransformedByMergeOperation(t);return[e]});Zk(sg,ng,(e,t)=>{e.position=e.position._getTransformedByMoveOperation(t);return[e]});Zk(sg,sg,(e,t,i)=>{if(e.position.isEqual(t.position)){if(i.aIsStrong){e.oldName=t.newName}else{return[new Lg(0)]}}return[e]});Zk(sg,cg,(e,t)=>{const i=e.position.path;const n=t.splitPosition.getParentPath();if(Rs(i,n)==\"same\"&&!t.graveyardPosition){const t=new sg(e.position.getShiftedBy(1),e.oldName,e.newName,0);return[e,t]}e.position=e.position._getTransformedBySplitOperation(t);return[e]});Zk(ag,ag,(e,t,i)=>{if(e.root===t.root&&e.key===t.key){if(!i.aIsStrong||e.newValue===t.newValue){return[new Lg(0)]}else{e.oldValue=t.newValue}}return[e]});Zk(cg,og,(e,t)=>{if(e.splitPosition.hasSameParentAs(t.position)&&e.splitPosition.offset{if(!e.graveyardPosition&&!i.bWasUndone&&e.splitPosition.hasSameParentAs(t.sourcePosition)){const i=t.graveyardPosition.path.slice();i.push(0);const n=new qh(t.graveyardPosition.root,i);const o=cg.getInsertionPosition(new qh(t.graveyardPosition.root,i));const r=new cg(n,0,null,0);r.insertionPosition=o;e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t);e.insertionPosition=cg.getInsertionPosition(e.splitPosition);e.graveyardPosition=r.insertionPosition.clone();e.graveyardPosition.stickiness=\"toNext\";return[r,e]}if(e.splitPosition.hasSameParentAs(t.deletionPosition)&&!e.splitPosition.isAfter(t.deletionPosition)){e.howMany--}if(e.splitPosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t);e.insertionPosition=cg.getInsertionPosition(e.splitPosition);if(e.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)}return[e]});Zk(cg,ng,(e,t,i)=>{const n=Kh._createFromPositionAndShift(t.sourcePosition,t.howMany);if(e.graveyardPosition){const o=n.start.isEqual(e.graveyardPosition)||n.containsPosition(e.graveyardPosition);if(!i.bWasUndone&&o){const i=e.splitPosition._getTransformedByMoveOperation(t);const n=e.graveyardPosition._getTransformedByMoveOperation(t);const o=n.path.slice();o.push(0);const r=new qh(n.root,o);const s=new ng(i,e.howMany,r,0);return[s]}e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)}if(e.splitPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(e.splitPosition)){const i=t.howMany-(e.splitPosition.offset-t.sourcePosition.offset);e.howMany-=i;if(e.splitPosition.hasSameParentAs(t.targetPosition)&&e.splitPosition.offset{if(e.splitPosition.isEqual(t.splitPosition)){if(!e.graveyardPosition&&!t.graveyardPosition){return[new Lg(0)]}if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition)){return[new Lg(0)]}if(i.abRelation==\"splitBefore\"){e.howMany=0;e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t);return[e]}}if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition)){const n=e.splitPosition.root.rootName==\"$graveyard\";const o=t.splitPosition.root.rootName==\"$graveyard\";const r=n&&!o;const s=o&&!n;const a=s||!r&&i.aIsStrong;if(a){const i=[];if(t.howMany){i.push(new ng(t.moveTargetPosition,t.howMany,t.splitPosition,0))}if(e.howMany){i.push(new ng(e.splitPosition,e.howMany,e.moveTargetPosition,0))}return i}else{return[new Lg(0)]}}if(e.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t)}if(e.splitPosition.isEqual(t.insertionPosition)&&i.abRelation==\"splitBefore\"){e.howMany++;return[e]}if(t.splitPosition.isEqual(e.insertionPosition)&&i.baRelation==\"splitBefore\"){const i=t.insertionPosition.path.slice();i.push(0);const n=new qh(t.insertionPosition.root,i);const o=new ng(e.insertionPosition,1,n,0);return[e,o]}if(e.splitPosition.hasSameParentAs(t.splitPosition)&&e.splitPosition.offset0}addBatch(e){const t=this.editor.model.document.selection;const i={ranges:t.hasOwnRange?Array.from(t.getRanges()):[],isBackward:t.isBackward};this._stack.push({batch:e,selection:i});this.refresh()}clearStack(){this._stack=[];this.refresh()}_restoreSelection(e,t,i){const n=this.editor.model;const o=n.document;const r=[];for(const t of e){const e=uv(t,i);const n=e.find(e=>e.start.root!=o.graveyard);if(n){r.push(n)}}if(r.length){n.change(e=>{e.setSelection(r,{backward:t})})}}_undo(e,t){const i=this.editor.model;const n=i.document;this._createdBatches.add(t);const o=e.operations.slice().filter(e=>e.isDocumentOperation);o.reverse();for(const e of o){const o=e.baseVersion+1;const r=Array.from(n.history.getOperations(o));const s=iv([e.getReversed()],r,{useRelations:true,document:this.editor.model.document,padWithNoOps:false,forceWeakRemove:true});const a=s.operationsA;for(const o of a){t.addOperation(o);i.applyOperation(o);n.history.setOperationAsUndone(e,o)}}}}function uv(e,t){const i=e.getTransformedByOperations(t);i.sort((e,t)=>e.start.isBefore(t.start)?-1:1);for(let e=1;et.batch==e):this._stack.length-1;const i=this._stack.splice(t,1)[0];const n=this.editor.model.createBatch(\"transparent\");this.editor.model.enqueueChange(n,()=>{this._undo(i.batch,n);const e=this.editor.model.document.history.getOperations(i.batch.baseVersion);this._restoreSelection(i.selection.ranges,i.selection.isBackward,e);this.fire(\"revert\",i.batch,n)});this.refresh()}}class fv extends dv{execute(){const e=this._stack.pop();const t=this.editor.model.createBatch(\"transparent\");this.editor.model.enqueueChange(t,()=>{const i=e.batch.operations[e.batch.operations.length-1];const n=i.baseVersion+1;const o=this.editor.model.document.history.getOperations(n);this._restoreSelection(e.selection.ranges,e.selection.isBackward,o);this._undo(e.batch,t)});this.refresh()}}class mv extends Rw{static get pluginName(){return\"UndoEditing\"}constructor(e){super(e);this._batchRegistry=new WeakSet}init(){const e=this.editor;this._undoCommand=new hv(e);this._redoCommand=new fv(e);e.commands.add(\"undo\",this._undoCommand);e.commands.add(\"redo\",this._redoCommand);this.listenTo(e.model,\"applyOperation\",(e,t)=>{const i=t[0];if(!i.isDocumentOperation){return}const n=i.batch;const o=this._redoCommand._createdBatches.has(n);const r=this._undoCommand._createdBatches.has(n);const s=this._batchRegistry.has(n);if(s||n.type==\"transparent\"&&!o&&!r){return}else{if(o){this._undoCommand.addBatch(n)}else if(!r){this._undoCommand.addBatch(n);this._redoCommand.clearStack()}}this._batchRegistry.add(n)},{priority:\"highest\"});this.listenTo(this._undoCommand,\"revert\",(e,t,i)=>{this._redoCommand.addBatch(i)});e.keystrokes.set(\"CTRL+Z\",\"undo\");e.keystrokes.set(\"CTRL+Y\",\"redo\");e.keystrokes.set(\"CTRL+SHIFT+Z\",\"redo\")}}var gv='';var pv='';class bv extends Rw{init(){const e=this.editor;const t=e.locale;const i=e.t;const n=t.uiLanguageDirection==\"ltr\"?gv:pv;const o=t.uiLanguageDirection==\"ltr\"?pv:gv;this._addButton(\"undo\",i(\"Undo\"),\"CTRL+Z\",n);this._addButton(\"redo\",i(\"Redo\"),\"CTRL+Y\",o)}_addButton(e,t,i,n){const o=this.editor;o.ui.componentFactory.add(e,r=>{const s=o.commands.get(e);const a=new rw(r);a.set({label:t,icon:n,keystroke:i,tooltip:true});a.bind(\"isEnabled\").to(s,\"isEnabled\");this.listenTo(a,\"execute\",()=>{o.execute(e);o.editing.view.focus()});return a})}}class wv extends Rw{static get requires(){return[mv,bv]}static get pluginName(){return\"Undo\"}}class _v extends Rw{static get requires(){return[vk,Ck,Ik,B_,Jk,wv]}static get pluginName(){return\"Essentials\"}}class kv extends Dw{constructor(e,t){super(e);this.attributeKey=t}refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute(this.attributeKey);this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){const t=this.editor.model;const i=t.document;const n=i.selection;const o=e.value;t.change(e=>{if(n.isCollapsed){if(o){e.setSelectionAttribute(this.attributeKey,o)}else{e.removeSelectionAttribute(this.attributeKey)}}else{const i=t.schema.getValidRanges(n.getRanges(),this.attributeKey);for(const t of i){if(o){e.setAttribute(this.attributeKey,o,t)}else{e.removeAttribute(this.attributeKey,t)}}}})}}var vv='';class yv extends rw{constructor(e){super(e);const t=this.bindTemplate;this.set(\"color\");this.set(\"hasBorder\");this.icon=vv;this.extendTemplate({attributes:{style:{backgroundColor:t.to(\"color\")},class:[\"ck\",\"ck-color-grid__tile\",t.if(\"hasBorder\",\"ck-color-table__color-tile_bordered\")]}})}render(){super.render();this.iconView.fillColor=\"hsl(0, 0%, 100%)\"}}var xv=i(54);class Av extends _b{constructor(e,t){super(e);const i=t&&t.colorDefinitions||[];const n={};if(t&&t.columns){n.gridTemplateColumns=`repeat( ${t.columns}, 1fr)`}this.set(\"selectedColor\");this.items=this.createCollection();this.focusTracker=new Ep;this.keystrokes=new mp;this._focusCycler=new zb({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:\"arrowleft\",focusNext:\"arrowright\"}});this.items.on(\"add\",(e,t)=>{t.isOn=t.color===this.selectedColor});i.forEach(e=>{const t=new yv;t.set({color:e.color,label:e.label,tooltip:true,hasBorder:e.options.hasBorder});t.on(\"execute\",()=>{this.fire(\"execute\",{value:e.color,hasBorder:e.options.hasBorder,label:e.label})});this.items.add(t)});this.setTemplate({tag:\"div\",children:this.items,attributes:{class:[\"ck\",\"ck-color-grid\"],style:n}});this.on(\"change:selectedColor\",(e,t,i)=>{for(const e of this.items){e.isOn=e.color===i}})}focus(){if(this.items.length){this.items.first.focus()}}focusLast(){if(this.items.length){this.items.last.focus()}}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on(\"add\",(e,t)=>{this.focusTracker.add(t.element)});this.items.on(\"remove\",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element)}}class Cv extends xs{constructor(e){super(e);this.set(\"isEmpty\",true)}add(e,t){if(this.find(t=>t.color===e.color)){return}super.add(e,t);this.set(\"isEmpty\",false)}remove(e){const t=super.remove(e);if(this.length===0){this.set(\"isEmpty\",true)}return t}hasColor(e){return!!this.find(t=>t.color===e)}}ys(Cv,Jl);var Tv='';var Ev=i(56);class Pv extends _b{constructor(e,{colors:t,columns:i,removeButtonLabel:n,documentColorsLabel:o,documentColorsCount:r}){super(e);this.items=this.createCollection();this.colorDefinitions=t;this.focusTracker=new Ep;this.keystrokes=new mp;this.set(\"selectedColor\");this.removeButtonLabel=n;this.columns=i;this.documentColors=new Cv;this.documentColorsCount=r;this._focusCycler=new zb({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:\"arrowup\",focusNext:\"arrowdown\"}});this._documentColorsLabel=o;this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-color-table\"]},children:this.items});this.items.add(this._removeColorButton())}updateDocumentColors(e,t){const i=e.document;const n=this.documentColorsCount;this.documentColors.clear();for(const o of i.getRootNames()){const r=i.getRoot(o);const s=e.createRangeIn(r);for(const e of s.getItems()){if(e.is(\"textProxy\")&&e.hasAttribute(t)){this._addColorToDocumentColors(e.getAttribute(t));if(this.documentColors.length>=n){return}}}}}updateSelectedColors(){const e=this.documentColorsGrid;const t=this.staticColorsGrid;const i=this.selectedColor;t.selectedColor=i;if(e){e.selectedColor=i}}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.keystrokes.listenTo(this.element)}appendGrids(){if(this.staticColorsGrid){return}this.staticColorsGrid=this._createStaticColorsGrid();this.items.add(this.staticColorsGrid);if(this.documentColorsCount){const e=$p.bind(this.documentColors,this.documentColors);const t=new Pb(this.locale);t.text=this._documentColorsLabel;t.extendTemplate({attributes:{class:[\"ck\",\"ck-color-grid__label\",e.if(\"isEmpty\",\"ck-hidden\")]}});this.items.add(t);this.documentColorsGrid=this._createDocumentColorsGrid();this.items.add(this.documentColorsGrid)}}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}_removeColorButton(){const e=new rw;e.set({withText:true,icon:Tv,tooltip:true,label:this.removeButtonLabel});e.class=\"ck-color-table__remove-color\";e.on(\"execute\",()=>{this.fire(\"execute\",{value:null})});return e}_createStaticColorsGrid(){const e=new Av(this.locale,{colorDefinitions:this.colorDefinitions,columns:this.columns});e.delegate(\"execute\").to(this);return e}_createDocumentColorsGrid(){const e=$p.bind(this.documentColors,this.documentColors);const t=new Av(this.locale,{columns:this.columns});t.delegate(\"execute\").to(this);t.extendTemplate({attributes:{class:e.if(\"isEmpty\",\"ck-hidden\")}});t.items.bindTo(this.documentColors).using(e=>{const t=new yv;t.set({color:e.color,hasBorder:e.options&&e.options.hasBorder});if(e.label){t.set({label:e.label,tooltip:true})}t.on(\"execute\",()=>{this.fire(\"execute\",{value:e.color})});return t});this.documentColors.on(\"change:isEmpty\",(e,i,n)=>{if(n){t.selectedColor=null}});return t}_addColorToDocumentColors(e){const t=this.colorDefinitions.find(t=>t.color===e);if(!t){this.documentColors.add({color:e,label:e,options:{hasBorder:false}})}else{this.documentColors.add(Object.assign({},t))}}}const Mv=\"fontSize\";const Sv=\"fontFamily\";const Iv=\"fontColor\";const Lv=\"fontBackgroundColor\";function Nv(e,t){const i={model:{key:e,values:[]},view:{},upcastAlso:{}};for(const e of t){i.model.values.push(e.model);i.view[e.model]=e.view;if(e.upcastAlso){i.upcastAlso[e.model]=e.upcastAlso}}return i}function Ov(e){return t=>Dv(t.getStyle(e))}function Rv(e){return(t,i)=>i.createAttributeElement(\"span\",{style:`${e}:${t}`},{priority:7})}function zv({dropdownView:e,colors:t,columns:i,removeButtonLabel:n,documentColorsLabel:o,documentColorsCount:r}){const s=e.locale;const a=new Pv(s,{colors:t,columns:i,removeButtonLabel:n,documentColorsLabel:o,documentColorsCount:r});e.colorTableView=a;e.panelView.children.add(a);a.delegate(\"execute\").to(e,\"execute\");return a}function Dv(e){return e.replace(/\\s/g,\"\")}class jv extends kv{constructor(e){super(e,Lv)}}class Bv extends Rw{static get pluginName(){return\"FontBackgroundColorEditing\"}constructor(e){super(e);e.config.define(Lv,{colors:[{color:\"hsl(0, 0%, 0%)\",label:\"Black\"},{color:\"hsl(0, 0%, 30%)\",label:\"Dim grey\"},{color:\"hsl(0, 0%, 60%)\",label:\"Grey\"},{color:\"hsl(0, 0%, 90%)\",label:\"Light grey\"},{color:\"hsl(0, 0%, 100%)\",label:\"White\",hasBorder:true},{color:\"hsl(0, 75%, 60%)\",label:\"Red\"},{color:\"hsl(30, 75%, 60%)\",label:\"Orange\"},{color:\"hsl(60, 75%, 60%)\",label:\"Yellow\"},{color:\"hsl(90, 75%, 60%)\",label:\"Light green\"},{color:\"hsl(120, 75%, 60%)\",label:\"Green\"},{color:\"hsl(150, 75%, 60%)\",label:\"Aquamarine\"},{color:\"hsl(180, 75%, 60%)\",label:\"Turquoise\"},{color:\"hsl(210, 75%, 60%)\",label:\"Light blue\"},{color:\"hsl(240, 75%, 60%)\",label:\"Blue\"},{color:\"hsl(270, 75%, 60%)\",label:\"Purple\"}],columns:5});e.conversion.for(\"upcast\").elementToAttribute({view:{name:\"span\",styles:{\"background-color\":/[\\s\\S]+/}},model:{key:Lv,value:Ov(\"background-color\")}});e.conversion.for(\"downcast\").attributeToElement({model:Lv,view:Rv(\"background-color\")});e.commands.add(Lv,new jv(e));e.model.schema.extend(\"$text\",{allowAttributes:Lv});e.model.schema.setAttributeProperties(Lv,{isFormatting:true,copyOnEnter:true})}}function Vv(e,t){const i=e.t;const n={Black:i(\"Black\"),\"Dim grey\":i(\"Dim grey\"),Grey:i(\"Grey\"),\"Light grey\":i(\"Light grey\"),White:i(\"White\"),Red:i(\"Red\"),Orange:i(\"Orange\"),Yellow:i(\"Yellow\"),\"Light green\":i(\"Light green\"),Green:i(\"Green\"),Aquamarine:i(\"Aquamarine\"),Turquoise:i(\"Turquoise\"),\"Light blue\":i(\"Light blue\"),Blue:i(\"Blue\"),Purple:i(\"Purple\")};return t.map(e=>{const t=n[e.label];if(t&&t!=e.label){e.label=t}return e})}function Fv(e){return e.map(Hv).filter(e=>!!e)}function Hv(e){if(typeof e===\"string\"){return{model:e,label:e,hasBorder:false,view:{name:\"span\",styles:{color:e}}}}else{return{model:e.color,label:e.label||e.color,hasBorder:e.hasBorder===undefined?false:e.hasBorder,view:{name:\"span\",styles:{color:`${e.color}`}}}}}class Wv extends Rw{constructor(e,{commandName:t,icon:i,componentName:n,dropdownLabel:o}){super(e);this.commandName=t;this.componentName=n;this.icon=i;this.dropdownLabel=o;this.columns=e.config.get(`${this.componentName}.columns`);this.colorTableView}init(){const e=this.editor;const t=e.locale;const i=t.t;const n=e.commands.get(this.commandName);const o=Fv(e.config.get(this.componentName).colors);const r=Vv(t,o);const s=e.config.get(`${this.componentName}.documentColors`);e.ui.componentFactory.add(this.componentName,t=>{const o=bw(t);this.colorTableView=zv({dropdownView:o,colors:r.map(e=>({label:e.label,color:e.model,options:{hasBorder:e.hasBorder}})),columns:this.columns,removeButtonLabel:i(\"Remove color\"),documentColorsLabel:s!==0?i(\"Document colors\"):undefined,documentColorsCount:s===undefined?this.columns:s});this.colorTableView.bind(\"selectedColor\").to(n,\"value\");o.buttonView.set({label:this.dropdownLabel,icon:this.icon,tooltip:true});o.extendTemplate({attributes:{class:\"ck-color-ui-dropdown\"}});o.bind(\"isEnabled\").to(n);o.on(\"execute\",(t,i)=>{e.execute(this.commandName,i);e.editing.view.focus()});o.on(\"change:isOpen\",(t,i,n)=>{o.colorTableView.appendGrids();if(n){if(s!==0){this.colorTableView.updateDocumentColors(e.model,this.componentName)}this.colorTableView.updateSelectedColors()}});return o})}}var Uv='';class qv extends Wv{constructor(e){const t=e.locale.t;super(e,{commandName:Lv,componentName:Lv,icon:Uv,dropdownLabel:t(\"Font Background Color\")})}static get pluginName(){return\"FontBackgroundColorUI\"}}class $v extends Rw{static get requires(){return[Bv,qv]}static get pluginName(){return\"FontBackgroundColor\"}}class Gv extends kv{constructor(e){super(e,Iv)}}class Yv extends Rw{static get pluginName(){return\"FontColorEditing\"}constructor(e){super(e);e.config.define(Iv,{colors:[{color:\"hsl(0, 0%, 0%)\",label:\"Black\"},{color:\"hsl(0, 0%, 30%)\",label:\"Dim grey\"},{color:\"hsl(0, 0%, 60%)\",label:\"Grey\"},{color:\"hsl(0, 0%, 90%)\",label:\"Light grey\"},{color:\"hsl(0, 0%, 100%)\",label:\"White\",hasBorder:true},{color:\"hsl(0, 75%, 60%)\",label:\"Red\"},{color:\"hsl(30, 75%, 60%)\",label:\"Orange\"},{color:\"hsl(60, 75%, 60%)\",label:\"Yellow\"},{color:\"hsl(90, 75%, 60%)\",label:\"Light green\"},{color:\"hsl(120, 75%, 60%)\",label:\"Green\"},{color:\"hsl(150, 75%, 60%)\",label:\"Aquamarine\"},{color:\"hsl(180, 75%, 60%)\",label:\"Turquoise\"},{color:\"hsl(210, 75%, 60%)\",label:\"Light blue\"},{color:\"hsl(240, 75%, 60%)\",label:\"Blue\"},{color:\"hsl(270, 75%, 60%)\",label:\"Purple\"}],columns:5});e.conversion.for(\"upcast\").elementToAttribute({view:{name:\"span\",styles:{color:/[\\s\\S]+/}},model:{key:Iv,value:Ov(\"color\")}});e.conversion.for(\"downcast\").attributeToElement({model:Iv,view:Rv(\"color\")});e.commands.add(Iv,new Gv(e));e.model.schema.extend(\"$text\",{allowAttributes:Iv});e.model.schema.setAttributeProperties(Iv,{isFormatting:true,copyOnEnter:true})}}var Kv='';class Jv extends Wv{constructor(e){const t=e.locale.t;super(e,{commandName:Iv,componentName:Iv,icon:Kv,dropdownLabel:t(\"Font Color\")})}static get pluginName(){return\"FontColorUI\"}}class Qv extends Rw{static get requires(){return[Yv,Jv]}static get pluginName(){return\"FontColor\"}}class Zv extends kv{constructor(e){super(e,Sv)}}function Xv(e){return e.map(ey).filter(e=>!!e)}function ey(e){if(typeof e===\"object\"){return e}if(e===\"default\"){return{title:\"Default\",model:undefined}}if(typeof e!==\"string\"){return}return ty(e)}function ty(e){const t=e.replace(/\"|'/g,\"\").split(\",\");const i=t[0];const n=t.map(iy).join(\", \");return{title:i,model:i,view:{name:\"span\",styles:{\"font-family\":n},priority:7}}}function iy(e){e=e.trim();if(e.indexOf(\" \")>0){e=`'${e}'`}return e}class ny extends Rw{static get pluginName(){return\"FontFamilyEditing\"}constructor(e){super(e);e.config.define(Sv,{options:[\"default\",\"Arial, Helvetica, sans-serif\",\"Courier New, Courier, monospace\",\"Georgia, serif\",\"Lucida Sans Unicode, Lucida Grande, sans-serif\",\"Tahoma, Geneva, sans-serif\",\"Times New Roman, Times, serif\",\"Trebuchet MS, Helvetica, sans-serif\",\"Verdana, Geneva, sans-serif\"],supportAllValues:false})}init(){const e=this.editor;e.model.schema.extend(\"$text\",{allowAttributes:Sv});e.model.schema.setAttributeProperties(Sv,{isFormatting:true,copyOnEnter:true});const t=Xv(e.config.get(\"fontFamily.options\")).filter(e=>e.model);const i=Nv(Sv,t);if(e.config.get(\"fontFamily.supportAllValues\")){this._prepareAnyValueConverters()}else{e.conversion.attributeToElement(i)}e.commands.add(Sv,new Zv(e))}_prepareAnyValueConverters(){const e=this.editor;e.conversion.for(\"downcast\").attributeToElement({model:Sv,view:(e,t)=>t.createAttributeElement(\"span\",{style:\"font-family:\"+e},{priority:7})});e.conversion.for(\"upcast\").attributeToAttribute({model:{key:Sv,value:e=>e.getStyle(\"font-family\")},view:{name:\"span\",styles:{\"font-family\":/.*/}}})}}var oy='';class ry extends Rw{init(){const e=this.editor;const t=e.t;const i=this._getLocalizedOptions();const n=e.commands.get(Sv);e.ui.componentFactory.add(Sv,o=>{const r=bw(o);_w(r,sy(i,n));r.buttonView.set({label:t(\"Font Family\"),icon:oy,tooltip:true});r.extendTemplate({attributes:{class:\"ck-font-family-dropdown\"}});r.bind(\"isEnabled\").to(n);this.listenTo(r,\"execute\",t=>{e.execute(t.source.commandName,{value:t.source.commandParam});e.editing.view.focus()});return r})}_getLocalizedOptions(){const e=this.editor;const t=e.t;const i=Xv(e.config.get(Sv).options);return i.map(e=>{if(e.title===\"Default\"){e.title=t(\"Default\")}return e})}}function sy(e,t){const i=new xs;for(const n of e){const e={type:\"button\",model:new sk({commandName:Sv,commandParam:n.model,label:n.title,withText:true})};e.model.bind(\"isOn\").to(t,\"value\",e=>{if(e===n.model){return true}if(!e||!n.model){return false}return e.split(\",\")[0].replace(/'/g,\"\").toLowerCase()===n.model.toLowerCase()});if(n.view&&n.view.styles){e.model.set(\"labelStyle\",`font-family: ${n.view.styles[\"font-family\"]}`)}i.add(e)}return i}class ay extends Rw{static get requires(){return[ny,ry]}static get pluginName(){return\"FontFamily\"}}class ly extends kv{constructor(e){super(e,Mv)}}function cy(e){return e.map(e=>uy(e)).filter(e=>!!e)}const dy={get tiny(){return{title:\"Tiny\",model:\"tiny\",view:{name:\"span\",classes:\"text-tiny\",priority:7}}},get small(){return{title:\"Small\",model:\"small\",view:{name:\"span\",classes:\"text-small\",priority:7}}},get big(){return{title:\"Big\",model:\"big\",view:{name:\"span\",classes:\"text-big\",priority:7}}},get huge(){return{title:\"Huge\",model:\"huge\",view:{name:\"span\",classes:\"text-huge\",priority:7}}}};function uy(e){if(gy(e)){return fy(e)}const t=my(e);if(t){return fy(t)}if(e===\"default\"){return{model:undefined,title:\"Default\"}}if(py(e)){return}return hy(e)}function hy(e){if(typeof e===\"number\"||typeof e===\"string\"){e={title:String(e),model:`${parseFloat(e)}px`}}e.view={name:\"span\",styles:{\"font-size\":e.model}};return fy(e)}function fy(e){if(!e.view.priority){e.view.priority=7}return e}function my(e){return dy[e]||dy[e.model]}function gy(e){return typeof e===\"object\"&&e.title&&e.model&&e.view}function py(e){let t;if(typeof e===\"object\"){if(!e.model){throw new ss[\"b\"](\"font-size-invalid-definition: Provided font size definition is invalid.\",null,e)}else{t=parseFloat(e.model)}}else{t=parseFloat(e)}return isNaN(t)}class by extends Rw{static get pluginName(){return\"FontSizeEditing\"}constructor(e){super(e);e.config.define(Mv,{options:[\"tiny\",\"small\",\"default\",\"big\",\"huge\"],supportAllValues:false})}init(){const e=this.editor;e.model.schema.extend(\"$text\",{allowAttributes:Mv});e.model.schema.setAttributeProperties(Mv,{isFormatting:true,copyOnEnter:true});const t=e.config.get(\"fontSize.supportAllValues\");const i=cy(this.editor.config.get(\"fontSize.options\")).filter(e=>e.model);const n=Nv(Mv,i);if(t){this._prepareAnyValueConverters(n)}else{e.conversion.attributeToElement(n)}e.commands.add(Mv,new ly(e))}_prepareAnyValueConverters(e){const t=this.editor;const i=e.model.values.filter(e=>!String(e).match(/[\\d.]+[\\w%]+/));if(i.length){throw new ss[\"b\"](\"font-size-invalid-use-of-named-presets: \"+\"If config.fontSize.supportAllValues is set to true, you need to use numerical values as font size options.\",null,{presets:i})}t.conversion.for(\"downcast\").attributeToElement({model:Mv,view:(e,t)=>{if(!e){return}return t.createAttributeElement(\"span\",{style:\"font-size:\"+e},{priority:7})}});t.conversion.for(\"upcast\").attributeToAttribute({model:{key:Mv,value:e=>e.getStyle(\"font-size\")},view:{name:\"span\"}})}}var wy='';var _y=i(58);class ky extends Rw{init(){const e=this.editor;const t=e.t;const i=this._getLocalizedOptions();const n=e.commands.get(Mv);e.ui.componentFactory.add(Mv,o=>{const r=bw(o);_w(r,vy(i,n));r.buttonView.set({label:t(\"Font Size\"),icon:wy,tooltip:true});r.extendTemplate({attributes:{class:[\"ck-font-size-dropdown\"]}});r.bind(\"isEnabled\").to(n);this.listenTo(r,\"execute\",t=>{e.execute(t.source.commandName,{value:t.source.commandParam});e.editing.view.focus()});return r})}_getLocalizedOptions(){const e=this.editor;const t=e.t;const i={Default:t(\"Default\"),Tiny:t(\"Tiny\"),Small:t(\"Small\"),Big:t(\"Big\"),Huge:t(\"Huge\")};const n=cy(e.config.get(Mv).options);return n.map(e=>{const t=i[e.title];if(t&&t!=e.title){e=Object.assign({},e,{title:t})}return e})}}function vy(e,t){const i=new xs;for(const n of e){const e={type:\"button\",model:new sk({commandName:Mv,commandParam:n.model,label:n.title,class:\"ck-fontsize-option\",withText:true})};if(n.view&&n.view.styles){e.model.set(\"labelStyle\",`font-size:${n.view.styles[\"font-size\"]}`)}if(n.view&&n.view.classes){e.model.set(\"class\",`${e.model.class} ${n.view.classes}`)}e.model.bind(\"isOn\").to(t,\"value\",e=>e===n.model);i.add(e)}return i}class yy extends Rw{static get requires(){return[by,ky]}static get pluginName(){return\"FontSize\"}}class xy extends Dw{refresh(){const e=this.editor.model;const t=e.document;const i=Bw(t.selection.getSelectedBlocks());this.value=!!i&&i.is(\"paragraph\");this.isEnabled=!!i&&Ay(i,e.schema)}execute(e={}){const t=this.editor.model;const i=t.document;t.change(n=>{const o=(e.selection||i.selection).getSelectedBlocks();for(const e of o){if(!e.is(\"paragraph\")&&Ay(e,t.schema)){n.rename(e,\"paragraph\")}}})}}function Ay(e,t){return t.checkChild(e.parent,\"paragraph\")&&!t.isObject(e)}class Cy extends Dw{execute(e){const t=this.editor.model;if(!t.schema.checkChild(e.position,\"paragraph\")){return}t.change(i=>{const n=i.createElement(\"paragraph\");t.insertContent(n,e.position);i.setSelection(n,\"in\")})}}class Ty extends Rw{static get pluginName(){return\"Paragraph\"}init(){const e=this.editor;const t=e.model;const i=e.data;e.commands.add(\"paragraph\",new xy(e));e.commands.add(\"insertParagraph\",new Cy(e));t.schema.register(\"paragraph\",{inheritAllFrom:\"$block\"});e.conversion.elementToElement({model:\"paragraph\",view:\"p\"});e.conversion.for(\"upcast\").elementToElement({model:(e,t)=>{if(!Ty.paragraphLikeElements.has(e.name)){return null}if(e.isEmpty){return null}return t.createElement(\"paragraph\")},converterPriority:\"low\"});i.upcastDispatcher.on(\"element\",(e,t,i)=>{if(!i.consumable.test(t.viewItem,{name:t.viewItem.name})){return}if(Py(t.viewItem,t.modelCursor,i.schema)){Object.assign(t,Ey(t.viewItem,t.modelCursor,i))}},{priority:\"low\"});i.upcastDispatcher.on(\"text\",(e,t,i)=>{if(t.modelRange){return}if(Py(t.viewItem,t.modelCursor,i.schema)){Object.assign(t,Ey(t.viewItem,t.modelCursor,i))}},{priority:\"lowest\"});t.document.registerPostFixer(e=>this._autoparagraphEmptyRoots(e));e.data.on(\"ready\",()=>{t.enqueueChange(\"transparent\",e=>this._autoparagraphEmptyRoots(e))},{priority:\"lowest\"})}_autoparagraphEmptyRoots(e){const t=this.editor.model;for(const i of t.document.getRootNames()){const n=t.document.getRoot(i);if(n.isEmpty&&n.rootName!=\"$graveyard\"){if(t.schema.checkChild(n,\"paragraph\")){e.insertElement(\"paragraph\",n);return true}}}}}Ty.paragraphLikeElements=new Set([\"blockquote\",\"dd\",\"div\",\"dt\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"li\",\"p\",\"td\"]);function Ey(e,t,i){const n=i.writer.createElement(\"paragraph\");i.writer.insert(n,t);return i.convertItem(e,i.writer.createPositionAt(n,0))}function Py(e,t,i){const n=i.createContext(t);if(!i.checkChild(n,\"paragraph\")){return false}if(!i.checkChild(n.push(\"paragraph\"),e)){return false}return true}class My extends Dw{constructor(e,t){super(e);this.modelElements=t}refresh(){const e=Bw(this.editor.model.document.selection.getSelectedBlocks());this.value=!!e&&this.modelElements.includes(e.name)&&e.name;this.isEnabled=!!e&&this.modelElements.some(t=>Sy(e,t,this.editor.model.schema))}execute(e){const t=this.editor.model;const i=t.document;const n=e.value;t.change(e=>{const o=Array.from(i.selection.getSelectedBlocks()).filter(e=>Sy(e,n,t.schema));for(const t of o){if(!t.is(n)){e.rename(t,n)}}})}}function Sy(e,t,i){return i.checkChild(e.parent,t)&&!i.isObject(e)}const Iy=\"paragraph\";class Ly extends Rw{static get pluginName(){return\"HeadingEditing\"}constructor(e){super(e);e.config.define(\"heading\",{options:[{model:\"paragraph\",title:\"Paragraph\",class:\"ck-heading_paragraph\"},{model:\"heading1\",view:\"h2\",title:\"Heading 1\",class:\"ck-heading_heading1\"},{model:\"heading2\",view:\"h3\",title:\"Heading 2\",class:\"ck-heading_heading2\"},{model:\"heading3\",view:\"h4\",title:\"Heading 3\",class:\"ck-heading_heading3\"}]})}static get requires(){return[Ty]}init(){const e=this.editor;const t=e.config.get(\"heading.options\");const i=[];for(const n of t){if(n.model!==Iy){e.model.schema.register(n.model,{inheritAllFrom:\"$block\"});e.conversion.elementToElement(n);i.push(n.model)}}this._addDefaultH1Conversion(e);e.commands.add(\"heading\",new My(e,i))}afterInit(){const e=this.editor;const t=e.commands.get(\"enter\");const i=e.config.get(\"heading.options\");if(t){this.listenTo(t,\"afterExecute\",(t,n)=>{const o=e.model.document.selection.getFirstPosition().parent;const r=i.some(e=>o.is(e.model));if(r&&!o.is(Iy)&&o.childCount===0){n.writer.rename(o,Iy)}})}}_addDefaultH1Conversion(e){e.conversion.for(\"upcast\").elementToElement({model:\"heading1\",view:\"h1\",converterPriority:os.get(\"low\")+1})}}function Ny(e){const t=e.t;const i={Paragraph:t(\"Paragraph\"),\"Heading 1\":t(\"Heading 1\"),\"Heading 2\":t(\"Heading 2\"),\"Heading 3\":t(\"Heading 3\"),\"Heading 4\":t(\"Heading 4\"),\"Heading 5\":t(\"Heading 5\"),\"Heading 6\":t(\"Heading 6\")};return e.config.get(\"heading.options\").map(e=>{const t=i[e.title];if(t&&t!=e.title){e.title=t}return e})}var Oy=i(12);class Ry extends Rw{init(){const e=this.editor;const t=e.t;const i=Ny(e);const n=t(\"Choose heading\");const o=t(\"Heading\");e.ui.componentFactory.add(\"heading\",t=>{const r={};const s=new xs;const a=e.commands.get(\"heading\");const l=e.commands.get(\"paragraph\");const c=[a];for(const e of i){const t={type:\"button\",model:new sk({label:e.title,class:e.class,withText:true})};if(e.model===\"paragraph\"){t.model.bind(\"isOn\").to(l,\"value\");t.model.set(\"commandName\",\"paragraph\");c.push(l)}else{t.model.bind(\"isOn\").to(a,\"value\",t=>t===e.model);t.model.set({commandName:\"heading\",commandValue:e.model})}s.add(t);r[e.model]=e.title}const d=bw(t);_w(d,s);d.buttonView.set({isOn:false,withText:true,tooltip:o});d.extendTemplate({attributes:{class:[\"ck-heading-dropdown\"]}});d.bind(\"isEnabled\").toMany(c,\"isEnabled\",(...e)=>e.some(e=>e));d.buttonView.bind(\"label\").to(a,\"value\",l,\"value\",(e,t)=>{const i=e||t&&\"paragraph\";return r[i]?r[i]:n});this.listenTo(d,\"execute\",t=>{e.execute(t.source.commandName,t.source.commandValue?{value:t.source.commandValue}:undefined);e.editing.view.focus()});return d})}}class zy extends Rw{static get requires(){return[Ly,Ry]}static get pluginName(){return\"Heading\"}}class Dy extends Dw{refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute(\"highlight\");this.isEnabled=e.schema.checkAttributeInSelection(t.selection,\"highlight\")}execute(e={}){const t=this.editor.model;const i=t.document;const n=i.selection;const o=e.value;t.change(e=>{const i=t.schema.getValidRanges(n.getRanges(),\"highlight\");if(n.isCollapsed){const t=n.getFirstPosition();if(n.hasAttribute(\"highlight\")){const i=e=>e.item.hasAttribute(\"highlight\")&&e.item.getAttribute(\"highlight\")===this.value;const n=t.getLastMatchingPosition(i,{direction:\"backward\"});const r=t.getLastMatchingPosition(i);const s=e.createRange(n,r);if(!o||this.value===o){e.removeAttribute(\"highlight\",s);e.removeSelectionAttribute(\"highlight\")}else{e.setAttribute(\"highlight\",o,s);e.setSelectionAttribute(\"highlight\",o)}}else if(o){e.setSelectionAttribute(\"highlight\",o)}}else{for(const t of i){if(o){e.setAttribute(\"highlight\",o,t)}else{e.removeAttribute(\"highlight\",t)}}}})}}class jy extends Rw{static get pluginName(){return\"HighlightEditing\"}constructor(e){super(e);e.config.define(\"highlight\",{options:[{model:\"yellowMarker\",class:\"marker-yellow\",title:\"Yellow marker\",color:\"var(--ck-highlight-marker-yellow)\",type:\"marker\"},{model:\"greenMarker\",class:\"marker-green\",title:\"Green marker\",color:\"var(--ck-highlight-marker-green)\",type:\"marker\"},{model:\"pinkMarker\",class:\"marker-pink\",title:\"Pink marker\",color:\"var(--ck-highlight-marker-pink)\",type:\"marker\"},{model:\"blueMarker\",class:\"marker-blue\",title:\"Blue marker\",color:\"var(--ck-highlight-marker-blue)\",type:\"marker\"},{model:\"redPen\",class:\"pen-red\",title:\"Red pen\",color:\"var(--ck-highlight-pen-red)\",type:\"pen\"},{model:\"greenPen\",class:\"pen-green\",title:\"Green pen\",color:\"var(--ck-highlight-pen-green)\",type:\"pen\"}]})}init(){const e=this.editor;e.model.schema.extend(\"$text\",{allowAttributes:\"highlight\"});const t=e.config.get(\"highlight.options\");e.conversion.attributeToElement(By(t));e.commands.add(\"highlight\",new Dy(e))}}function By(e){const t={model:{key:\"highlight\",values:[]},view:{}};for(const i of e){t.model.values.push(i.model);t.view[i.model]={name:\"mark\",classes:i.class}}return t}var Vy='';var Fy='';var Hy=i(61);class Wy extends Rw{get localizedOptionTitles(){const e=this.editor.t;return{\"Yellow marker\":e(\"Yellow marker\"),\"Green marker\":e(\"Green marker\"),\"Pink marker\":e(\"Pink marker\"),\"Blue marker\":e(\"Blue marker\"),\"Red pen\":e(\"Red pen\"),\"Green pen\":e(\"Green pen\")}}static get pluginName(){return\"HighlightUI\"}init(){const e=this.editor.config.get(\"highlight.options\");for(const t of e){this._addHighlighterButton(t)}this._addRemoveHighlightButton();this._addDropdown(e)}_addRemoveHighlightButton(){const e=this.editor.t;this._addButton(\"removeHighlight\",e(\"Remove highlight\"),Tv)}_addHighlighterButton(e){const t=this.editor.commands.get(\"highlight\");this._addButton(\"highlight:\"+e.model,e.title,qy(e.type),e.model,i);function i(i){i.bind(\"isEnabled\").to(t,\"isEnabled\");i.bind(\"isOn\").to(t,\"value\",t=>t===e.model);i.iconView.fillColor=e.color;i.isToggleable=true}}_addButton(e,t,i,n,o=(()=>{})){const r=this.editor;r.ui.componentFactory.add(e,e=>{const s=new rw(e);const a=this.localizedOptionTitles[t]?this.localizedOptionTitles[t]:t;s.set({label:a,icon:i,tooltip:true});s.on(\"execute\",()=>{r.execute(\"highlight\",{value:n});r.editing.view.focus()});o(s);return s})}_addDropdown(e){const t=this.editor;const i=t.t;const n=t.ui.componentFactory;const o=e[0];const r=e.reduce((e,t)=>{e[t.model]=t;return e},{});n.add(\"highlight\",s=>{const a=t.commands.get(\"highlight\");const l=bw(s,lk);const c=l.buttonView;c.set({tooltip:i(\"Highlight\"),lastExecuted:o.model,commandValue:o.model,isToggleable:true});c.bind(\"icon\").to(a,\"value\",e=>qy(u(e,\"type\")));c.bind(\"color\").to(a,\"value\",e=>u(e,\"color\"));c.bind(\"commandValue\").to(a,\"value\",e=>u(e,\"model\"));c.bind(\"isOn\").to(a,\"value\",e=>!!e);c.delegate(\"execute\").to(l);const d=e.map(e=>{const t=n.create(\"highlight:\"+e.model);this.listenTo(t,\"execute\",()=>l.buttonView.set({lastExecuted:e.model}));return t});l.bind(\"isEnabled\").toMany(d,\"isEnabled\",(...e)=>e.some(e=>e));d.push(new jb);d.push(n.create(\"removeHighlight\"));ww(l,d);Uy(l);l.toolbarView.ariaLabel=i(\"Text highlight toolbar\");c.on(\"execute\",()=>{t.execute(\"highlight\",{value:c.commandValue});t.editing.view.focus()});function u(e,t){const i=!e||e===c.lastExecuted?c.lastExecuted:e;return r[i][t]}return l})}}function Uy(e){const t=e.buttonView.actionView;t.iconView.bind(\"fillColor\").to(e.buttonView,\"color\")}function qy(e){return e===\"marker\"?Vy:Fy}class $y extends Rw{static get requires(){return[jy,Wy]}static get pluginName(){return\"Highlight\"}}class Gy{constructor(){this._stack=[]}add(e,t){const i=this._stack;const n=i[0];this._insertDescriptor(e);const o=i[0];if(n!==o&&!Yy(n,o)){this.fire(\"change:top\",{oldDescriptor:n,newDescriptor:o,writer:t})}}remove(e,t){const i=this._stack;const n=i[0];this._removeDescriptor(e);const o=i[0];if(n!==o&&!Yy(n,o)){this.fire(\"change:top\",{oldDescriptor:n,newDescriptor:o,writer:t})}}_insertDescriptor(e){const t=this._stack;const i=t.findIndex(t=>t.id===e.id);if(Yy(e,t[i])){return}if(i>-1){t.splice(i,1)}let n=0;while(t[n]&&Ky(t[n],e)){n++}t.splice(n,0,e)}_removeDescriptor(e){const t=this._stack;const i=t.findIndex(t=>t.id===e);if(i>-1){t.splice(i,1)}}}ys(Gy,ds);function Yy(e,t){return e&&t&&e.priority==t.priority&&Jy(e.classes)==Jy(t.classes)}function Ky(e,t){if(e.priority>t.priority){return true}else if(e.priorityJy(t.classes)}function Jy(e){return Array.isArray(e)?e.sort().join(\",\"):e}var Qy=i(63);const Zy=Lb(\"px\");const Xy=Ld.document.body;class ex extends _b{constructor(e){super(e);const t=this.bindTemplate;this.set(\"top\",0);this.set(\"left\",0);this.set(\"position\",\"arrow_nw\");this.set(\"isVisible\",false);this.set(\"withArrow\",true);this.set(\"class\");this.content=this.createCollection();this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-balloon-panel\",t.to(\"position\",e=>`ck-balloon-panel_${e}`),t.if(\"isVisible\",\"ck-balloon-panel_visible\"),t.if(\"withArrow\",\"ck-balloon-panel_with-arrow\"),t.to(\"class\")],style:{top:t.to(\"top\",Zy),left:t.to(\"left\",Zy)}},children:this.content})}show(){this.isVisible=true}hide(){this.isVisible=false}attachTo(e){this.show();const t=ex.defaultPositions;const i=Object.assign({},{element:this.element,positions:[t.southArrowNorth,t.southArrowNorthMiddleWest,t.southArrowNorthMiddleEast,t.southArrowNorthWest,t.southArrowNorthEast,t.northArrowSouth,t.northArrowSouthMiddleWest,t.northArrowSouthMiddleEast,t.northArrowSouthWest,t.northArrowSouthEast],limiter:Xy,fitInViewport:true},e);const n=ex._getOptimalPosition(i);const o=parseInt(n.left);const r=parseInt(n.top);const s=n.name;Object.assign(this,{top:r,left:o,position:s})}pin(e){this.unpin();this._pinWhenIsVisibleCallback=()=>{if(this.isVisible){this._startPinning(e)}else{this._stopPinning()}};this._startPinning(e);this.listenTo(this,\"change:isVisible\",this._pinWhenIsVisibleCallback)}unpin(){if(this._pinWhenIsVisibleCallback){this._stopPinning();this.stopListening(this,\"change:isVisible\",this._pinWhenIsVisibleCallback);this._pinWhenIsVisibleCallback=null;this.hide()}}_startPinning(e){this.attachTo(e);const t=tx(e.target);const i=e.limiter?tx(e.limiter):Xy;this.listenTo(Ld.document,\"scroll\",(n,o)=>{const r=o.target;const s=t&&r.contains(t);const a=i&&r.contains(i);if(s||a||!t||!i){this.attachTo(e)}},{useCapture:true});this.listenTo(Ld.window,\"resize\",()=>{this.attachTo(e)})}_stopPinning(){this.stopListening(Ld.document,\"scroll\");this.stopListening(Ld.window,\"resize\")}}function tx(e){if(Yr(e)){return e}if(wh(e)){return e.commonAncestorContainer}if(typeof e==\"function\"){return tx(e())}return null}ex.arrowHorizontalOffset=25;ex.arrowVerticalOffset=10;ex._getOptimalPosition=$b;ex.defaultPositions={northWestArrowSouthWest:(e,t)=>({top:ix(e,t),left:e.left-ex.arrowHorizontalOffset,name:\"arrow_sw\"}),northWestArrowSouthMiddleWest:(e,t)=>({top:ix(e,t),left:e.left-t.width*.25-ex.arrowHorizontalOffset,name:\"arrow_smw\"}),northWestArrowSouth:(e,t)=>({top:ix(e,t),left:e.left-t.width/2,name:\"arrow_s\"}),northWestArrowSouthMiddleEast:(e,t)=>({top:ix(e,t),left:e.left-t.width*.75+ex.arrowHorizontalOffset,name:\"arrow_sme\"}),northWestArrowSouthEast:(e,t)=>({top:ix(e,t),left:e.left-t.width+ex.arrowHorizontalOffset,name:\"arrow_se\"}),northArrowSouthWest:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-ex.arrowHorizontalOffset,name:\"arrow_sw\"}),northArrowSouthMiddleWest:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width*.25-ex.arrowHorizontalOffset,name:\"arrow_smw\"}),northArrowSouth:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width/2,name:\"arrow_s\"}),northArrowSouthMiddleEast:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width*.75+ex.arrowHorizontalOffset,name:\"arrow_sme\"}),northArrowSouthEast:(e,t)=>({top:ix(e,t),left:e.left+e.width/2-t.width+ex.arrowHorizontalOffset,name:\"arrow_se\"}),northEastArrowSouthWest:(e,t)=>({top:ix(e,t),left:e.right-ex.arrowHorizontalOffset,name:\"arrow_sw\"}),northEastArrowSouthMiddleWest:(e,t)=>({top:ix(e,t),left:e.right-t.width*.25-ex.arrowHorizontalOffset,name:\"arrow_smw\"}),northEastArrowSouth:(e,t)=>({top:ix(e,t),left:e.right-t.width/2,name:\"arrow_s\"}),northEastArrowSouthMiddleEast:(e,t)=>({top:ix(e,t),left:e.right-t.width*.75+ex.arrowHorizontalOffset,name:\"arrow_sme\"}),northEastArrowSouthEast:(e,t)=>({top:ix(e,t),left:e.right-t.width+ex.arrowHorizontalOffset,name:\"arrow_se\"}),southWestArrowNorthWest:(e,t)=>({top:nx(e,t),left:e.left-ex.arrowHorizontalOffset,name:\"arrow_nw\"}),southWestArrowNorthMiddleWest:(e,t)=>({top:nx(e,t),left:e.left-t.width*.25-ex.arrowHorizontalOffset,name:\"arrow_nmw\"}),southWestArrowNorth:(e,t)=>({top:nx(e,t),left:e.left-t.width/2,name:\"arrow_n\"}),southWestArrowNorthMiddleEast:(e,t)=>({top:nx(e,t),left:e.left-t.width*.75+ex.arrowHorizontalOffset,name:\"arrow_nme\"}),southWestArrowNorthEast:(e,t)=>({top:nx(e,t),left:e.left-t.width+ex.arrowHorizontalOffset,name:\"arrow_ne\"}),southArrowNorthWest:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-ex.arrowHorizontalOffset,name:\"arrow_nw\"}),southArrowNorthMiddleWest:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width*.25-ex.arrowHorizontalOffset,name:\"arrow_nmw\"}),southArrowNorth:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width/2,name:\"arrow_n\"}),southArrowNorthMiddleEast:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width*.75+ex.arrowHorizontalOffset,name:\"arrow_nme\"}),southArrowNorthEast:(e,t)=>({top:nx(e,t),left:e.left+e.width/2-t.width+ex.arrowHorizontalOffset,name:\"arrow_ne\"}),southEastArrowNorthWest:(e,t)=>({top:nx(e,t),left:e.right-ex.arrowHorizontalOffset,name:\"arrow_nw\"}),southEastArrowNorthMiddleWest:(e,t)=>({top:nx(e,t),left:e.right-t.width*.25-ex.arrowHorizontalOffset,name:\"arrow_nmw\"}),southEastArrowNorth:(e,t)=>({top:nx(e,t),left:e.right-t.width/2,name:\"arrow_n\"}),southEastArrowNorthMiddleEast:(e,t)=>({top:nx(e,t),left:e.right-t.width*.75+ex.arrowHorizontalOffset,name:\"arrow_nme\"}),southEastArrowNorthEast:(e,t)=>({top:nx(e,t),left:e.right-t.width+ex.arrowHorizontalOffset,name:\"arrow_ne\"})};function ix(e,t){return e.top-t.height-ex.arrowVerticalOffset}function nx(e){return e.bottom+ex.arrowVerticalOffset}var ox='';const rx=\"ck-widget\";const sx=\"ck-widget_selected\";function ax(e){if(!e.is(\"element\")){return false}return!!e.getCustomProperty(\"widget\")}function lx(e,t,i={}){t.setAttribute(\"contenteditable\",\"false\",e);t.addClass(rx,e);t.setCustomProperty(\"widget\",true,e);e.getFillerOffset=px;if(i.label){dx(e,i.label,t)}if(i.hasSelectionHandle){bx(e,t)}cx(e,t,(e,t,i)=>i.addClass(n(t.classes),e),(e,t,i)=>i.removeClass(n(t.classes),e));return e;function n(e){return Array.isArray(e)?e:[e]}}function cx(e,t,i,n){const o=new Gy;o.on(\"change:top\",(t,o)=>{if(o.oldDescriptor){n(e,o.oldDescriptor,o.writer)}if(o.newDescriptor){i(e,o.newDescriptor,o.writer)}});t.setCustomProperty(\"addHighlight\",(e,t,i)=>o.add(t,i),e);t.setCustomProperty(\"removeHighlight\",(e,t,i)=>o.remove(t,i),e)}function dx(e,t,i){i.setCustomProperty(\"widgetLabel\",t,e)}function ux(e){const t=e.getCustomProperty(\"widgetLabel\");if(!t){return\"\"}return typeof t==\"function\"?t():t}function hx(e,t){t.addClass([\"ck-editor__editable\",\"ck-editor__nested-editable\"],e);t.setAttribute(\"contenteditable\",e.isReadOnly?\"false\":\"true\",e);e.on(\"change:isReadOnly\",(i,n,o)=>{t.setAttribute(\"contenteditable\",o?\"false\":\"true\",e)});e.on(\"change:isFocused\",(i,n,o)=>{if(o){t.addClass(\"ck-editor__nested-editable_focused\",e)}else{t.removeClass(\"ck-editor__nested-editable_focused\",e)}});return e}function fx(e,t){const i=e.getSelectedElement();if(i&&t.schema.isBlock(i)){return t.createPositionAfter(i)}const n=e.getSelectedBlocks().next().value;if(n){if(n.isEmpty){return t.createPositionAt(n,0)}const i=t.createPositionAfter(n);if(e.focus.isTouching(i)){return i}return t.createPositionBefore(n)}return e.focus}function mx(e,t){return(i,n)=>{const{mapper:o,viewPosition:r}=n;const s=o.findMappedViewAncestor(r);if(!t(s)){return}const a=o.toModelElement(s);n.modelPosition=e.createPositionAt(a,r.isAtStart?\"before\":\"after\")}}function gx(e,t){const i=new vh(Ld.window);const n=i.getIntersection(e);const o=t.height+ex.arrowVerticalOffset;if(e.top-o>i.top||e.bottom+o{const i=t.createElement(\"horizontalLine\");e.insertContent(i);let n=i.nextSibling;const o=n&&e.schema.checkChild(n,\"$text\");if(!o&&e.schema.checkChild(i.parent,\"paragraph\")){n=t.createElement(\"paragraph\");e.insertContent(n,t.createPositionAfter(i))}if(n){t.setSelection(n,0)}})}}function _x(e){const t=e.schema;const i=e.document.selection;return kx(i,t,e)&&!vx(i,t)}function kx(e,t,i){const n=yx(e,i);return t.checkChild(n,\"horizontalLine\")}function vx(e,t){const i=e.getSelectedElement();return i&&t.isObject(i)}function yx(e,t){const i=fx(e,t);const n=i.parent;if(n.isEmpty&&!n.is(\"$root\")){return n.parent}return n}var xx=i(65);class Ax extends Rw{static get pluginName(){return\"HorizontalLineEditing\"}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;t.register(\"horizontalLine\",{isObject:true,allowWhere:\"$block\"});n.for(\"dataDowncast\").elementToElement({model:\"horizontalLine\",view:(e,t)=>t.createEmptyElement(\"hr\")});n.for(\"editingDowncast\").elementToElement({model:\"horizontalLine\",view:(e,t)=>{const n=i(\"Horizontal line\");const o=t.createContainerElement(\"div\");const r=t.createEmptyElement(\"hr\");t.addClass(\"ck-horizontal-line\",o);t.setCustomProperty(\"hr\",true,o);t.insert(t.createPositionAt(o,0),r);return Cx(o,t,n)}});n.for(\"upcast\").elementToElement({view:\"hr\",model:\"horizontalLine\"});e.commands.add(\"horizontalLine\",new wx(e))}}function Cx(e,t,i){t.setCustomProperty(\"horizontalLine\",true,e);return lx(e,t,{label:i})}var Tx='';class Ex extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(\"horizontalLine\",i=>{const n=e.commands.get(\"horizontalLine\");const o=new rw(i);o.set({label:t(\"Horizontal line\"),icon:Tx,tooltip:true});o.bind(\"isEnabled\").to(n,\"isEnabled\");this.listenTo(o,\"execute\",()=>{e.execute(\"horizontalLine\");e.editing.view.focus()});return o})}}class Px extends Rw{static get requires(){return[Ax,Ex]}static get pluginName(){return\"HorizontalLine\"}}class Mx extends Gd{observe(e){this.listenTo(e,\"load\",(e,t)=>{const i=t.target;if(i.tagName==\"IMG\"){this._fireEvents(t)}},{useCapture:true})}_fireEvents(e){if(this.isEnabled){this.document.fire(\"layoutChanged\");this.document.fire(\"imageLoaded\",e)}}}function Sx(e,t,i){t.setCustomProperty(\"image\",true,e);return lx(e,t,{label:n});function n(){const t=zx(e);const n=t.getAttribute(\"alt\");return n?`${n} ${i}`:i}}function Ix(e){return!!e.getCustomProperty(\"image\")&&ax(e)}function Lx(e){const t=e.getSelectedElement();if(t&&Ix(t)){return t}return null}function Nx(e){return!!e&&e.is(\"image\")}function Ox(e,t,i={}){const n=e.createElement(\"image\",i);const o=fx(t.document.selection,t);t.insertContent(n,o);if(n.parent){e.setSelection(n,\"on\")}}function Rx(e){const t=e.schema;const i=e.document.selection;return Dx(i,t,e)&&!jx(i,t)&&Bx(i)}function zx(e){return Array.from(e.getChildren()).find(e=>e.is(\"img\"))}function Dx(e,t,i){const n=Vx(e,i);return t.checkChild(n,\"image\")}function jx(e,t){const i=e.getSelectedElement();return i&&t.isObject(i)}function Bx(e){return[...e.focus.getAncestors()].every(e=>!e.is(\"image\"))}function Vx(e,t){const i=fx(e,t);const n=i.parent;if(n.isEmpty&&!n.is(\"$root\")){return n.parent}return n}function Fx(){return t=>{t.on(\"element:figure\",e)};function e(e,t,i){if(!i.consumable.test(t.viewItem,{name:true,classes:\"image\"})){return}const n=zx(t.viewItem);if(!n||!n.hasAttribute(\"src\")||!i.consumable.test(n,{name:true})){return}const o=i.convertItem(n,t.modelCursor);const r=Bw(o.modelRange.getItems());if(!r){return}i.convertChildren(t.viewItem,i.writer.createPositionAt(r,0));t.modelRange=o.modelRange;t.modelCursor=o.modelCursor}}function Hx(){return t=>{t.on(\"attribute:srcset:image\",e)};function e(e,t,i){if(!i.consumable.consume(t.item,e.name)){return}const n=i.writer;const o=i.mapper.toViewElement(t.item);const r=zx(o);if(t.attributeNewValue===null){const e=t.attributeOldValue;if(e.data){n.removeAttribute(\"srcset\",r);n.removeAttribute(\"sizes\",r);if(e.width){n.removeAttribute(\"width\",r)}}}else{const e=t.attributeNewValue;if(e.data){n.setAttribute(\"srcset\",e.data,r);n.setAttribute(\"sizes\",\"100vw\",r);if(e.width){n.setAttribute(\"width\",e.width,r)}}}}}function Wx(e){return i=>{i.on(`attribute:${e}:image`,t)};function t(e,t,i){if(!i.consumable.consume(t.item,e.name)){return}const n=i.writer;const o=i.mapper.toViewElement(t.item);const r=zx(o);if(t.attributeNewValue!==null){n.setAttribute(t.attributeKey,t.attributeNewValue,r)}else{n.removeAttribute(t.attributeKey,r)}}}class Ux extends Dw{refresh(){this.isEnabled=Rx(this.editor.model)}execute(e){const t=this.editor.model;t.change(i=>{const n=Array.isArray(e.source)?e.source:[e.source];for(const e of n){Ox(i,t,{src:e})}})}}class qx extends Rw{static get pluginName(){return\"ImageEditing\"}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;e.editing.view.addObserver(Mx);t.register(\"image\",{isObject:true,isBlock:true,allowWhere:\"$block\",allowAttributes:[\"alt\",\"src\",\"srcset\"]});n.for(\"dataDowncast\").elementToElement({model:\"image\",view:(e,t)=>$x(t)});n.for(\"editingDowncast\").elementToElement({model:\"image\",view:(e,t)=>Sx($x(t),t,i(\"image widget\"))});n.for(\"downcast\").add(Wx(\"src\")).add(Wx(\"alt\")).add(Hx());n.for(\"upcast\").elementToElement({view:{name:\"img\",attributes:{src:true}},model:(e,t)=>t.createElement(\"image\",{src:e.getAttribute(\"src\")})}).attributeToAttribute({view:{name:\"img\",key:\"alt\"},model:\"alt\"}).attributeToAttribute({view:{name:\"img\",key:\"srcset\"},model:{key:\"srcset\",value:e=>{const t={data:e.getAttribute(\"srcset\")};if(e.hasAttribute(\"width\")){t.width=e.getAttribute(\"width\")}return t}}}).add(Fx());e.commands.add(\"imageInsert\",new Ux(e))}}function $x(e){const t=e.createEmptyElement(\"img\");const i=e.createContainerElement(\"figure\",{class:\"image\"});e.insert(e.createPositionAt(i,0),t);return i}class Gx extends Ku{constructor(e){super(e);this.domEventType=\"mousedown\"}onDomEvent(e){this.fire(e.type,e)}}function Yx(e,t,i){return e&&ax(e)&&!i.isInline(t)}function Kx(e){return e.closest(\".ck-widget__type-around__button\")}function Jx(e){return e.classList.contains(\"ck-widget__type-around__button_before\")?\"before\":\"after\"}function Qx(e,t){const i=e.closest(\".ck-widget\");return t.mapDomToView(i)}function Zx(e){const t=[];if(Xx(e)||tA(e)){t.push(\"before\")}if(eA(e)||iA(e)){t.push(\"after\")}return t}function Xx(e){return!e.previousSibling}function eA(e){return!e.nextSibling}function tA(e){return e.previousSibling&&ax(e.previousSibling)}function iA(e){return e.nextSibling&&ax(e.nextSibling)}var nA='\\n';var oA=i(67);const rA=[\"before\",\"after\"];const sA=(new DOMParser).parseFromString(nA,\"image/svg+xml\").firstChild;class aA extends Rw{static get requires(){return[Ty]}static get pluginName(){return\"WidgetTypeAround\"}constructor(e){super(e);this._widgetsWithTypeAroundUI=new Set}destroy(){this._widgetsWithTypeAroundUI.clear()}init(){this._enableTypeAroundUIInjection();this._enableDetectionOfTypeAroundWidgets();this._enableInsertingParagraphsOnButtonClick()}_insertParagraph(e,t){const i=this.editor;const n=i.editing.view;const o=i.editing.mapper.toModelElement(e);let r;if(t===\"before\"){r=i.model.createPositionBefore(o)}else{r=i.model.createPositionAfter(o)}i.execute(\"insertParagraph\",{position:r});n.focus();n.scrollToTheSelection()}_enableTypeAroundUIInjection(){const e=this.editor;const t=e.model.schema;const i=e.locale.t;const n={before:i(\"Insert paragraph before block\"),after:i(\"Insert paragraph after block\")};e.editing.downcastDispatcher.on(\"insert\",(e,i,o)=>{const r=o.mapper.toViewElement(i.item);if(Yx(r,i.item,t)){lA(o.writer,n,r);this._widgetsWithTypeAroundUI.add(r)}},{priority:\"low\"})}_enableDetectionOfTypeAroundWidgets(){const e=this.editor;const t=e.editing.view;function i(e){return`ck-widget_can-type-around_${e}`}t.document.registerPostFixer(e=>{for(const t of this._widgetsWithTypeAroundUI){if(!t.isAttached()){this._widgetsWithTypeAroundUI.delete(t)}else{const n=Zx(t);e.removeClass(rA.map(i),t);e.addClass(n.map(i),t)}}})}_enableInsertingParagraphsOnButtonClick(){const e=this.editor;const t=e.editing.view;t.document.on(\"mousedown\",(e,i)=>{const n=Kx(i.domTarget);if(!n){return}const o=Jx(n);const r=Qx(n,t.domConverter);this._insertParagraph(r,o);i.preventDefault();e.stop()})}}function lA(e,t,i){const n=e.createUIElement(\"div\",{class:\"ck ck-reset_all ck-widget__type-around\"},(function(e){const i=this.toDomElement(e);cA(i,t);return i}));e.insert(e.createPositionAt(i,\"end\"),n)}function cA(e,t){for(const i of rA){const n=new $p({tag:\"div\",attributes:{class:[\"ck\",\"ck-widget__type-around__button\",`ck-widget__type-around__button_${i}`],title:t[i]},children:[e.ownerDocument.importNode(sA,true)]});e.appendChild(n.render())}}var dA=i(69);class uA extends Rw{static get pluginName(){return\"Widget\"}static get requires(){return[aA]}init(){const e=this.editor.editing.view;const t=e.document;this._previouslySelected=new Set;this.editor.editing.downcastDispatcher.on(\"selection\",(e,t,i)=>{this._clearPreviouslySelectedWidgets(i.writer);const n=i.writer;const o=n.document.selection;const r=o.getSelectedElement();let s=null;for(const e of o.getRanges()){for(const t of e){const e=t.item;if(ax(e)&&!mA(e,s)){n.addClass(sx,e);this._previouslySelected.add(e);s=e;if(e==r){n.setSelection(o.getRanges(),{fake:true,label:ux(r)})}}}}},{priority:\"low\"});e.addObserver(Gx);this.listenTo(t,\"mousedown\",(...e)=>this._onMousedown(...e));this.listenTo(t,\"keydown\",(...e)=>this._onKeydown(...e),{priority:\"high\"});this.listenTo(t,\"delete\",(e,t)=>{if(this._handleDelete(t.direction==\"forward\")){t.preventDefault();e.stop()}},{priority:\"high\"})}_onMousedown(e,t){const i=this.editor;const n=i.editing.view;const o=n.document;let r=t.target;if(fA(r)){if(Tc.isSafari&&t.domEvent.detail>=3){const e=i.editing.mapper;const n=e.toModelElement(r);this.editor.model.change(e=>{t.preventDefault();e.setSelection(n,\"in\")})}return}if(!ax(r)){r=r.findAncestor(ax);if(!r){return}}t.preventDefault();if(!o.isFocused){n.focus()}const s=i.editing.mapper.toModelElement(r);this._setSelectionOverElement(s)}_onKeydown(e,t){const i=t.keyCode;const n=this.editor.locale.contentLanguageDirection===\"ltr\";const o=i==Oc.arrowdown||i==Oc[n?\"arrowright\":\"arrowleft\"];let r=false;if(hA(i)){r=this._handleArrowKeys(o)}else if(i===Oc.enter){r=this._handleEnterKey(t.shiftKey)}if(r){t.preventDefault();e.stop()}}_handleDelete(e){if(this.editor.isReadOnly){return}const t=this.editor.model.document;const i=t.selection;if(!i.isCollapsed){return}const n=this._getObjectElementNextToSelection(e);if(n){this.editor.model.change(e=>{let t=i.anchor.parent;while(t.isEmpty){const i=t;t=i.parent;e.remove(i)}this._setSelectionOverElement(n)});return true}}_handleArrowKeys(e){const t=this.editor.model;const i=t.schema;const n=t.document;const o=n.selection;const r=o.getSelectedElement();if(r&&i.isObject(r)){const n=e?o.getLastPosition():o.getFirstPosition();const r=i.getNearestSelectionRange(n,e?\"forward\":\"backward\");if(r){t.change(e=>{e.setSelection(r)})}return true}if(!o.isCollapsed){return}const s=this._getObjectElementNextToSelection(e);if(!!s&&i.isObject(s)){this._setSelectionOverElement(s);return true}}_handleEnterKey(e){const t=this.editor.model;const i=t.document.selection;const n=i.getSelectedElement();if(gA(n,t.schema)){t.change(i=>{let o=i.createPositionAt(n,e?\"before\":\"after\");const r=i.createElement(\"paragraph\");if(t.schema.isBlock(n.parent)){const e=t.schema.findAllowedParent(o,r);o=i.split(o,e).position}i.insert(r,o);i.setSelection(r,\"in\")});return true}}_setSelectionOverElement(e){this.editor.model.change(t=>{t.setSelection(t.createRangeOn(e))})}_getObjectElementNextToSelection(e){const t=this.editor.model;const i=t.schema;const n=t.document.selection;const o=t.createSelection(n);t.modifySelection(o,{direction:e?\"forward\":\"backward\"});const r=e?o.focus.nodeBefore:o.focus.nodeAfter;if(!!r&&i.isObject(r)){return r}return null}_clearPreviouslySelectedWidgets(e){for(const t of this._previouslySelected){e.removeClass(sx,t)}this._previouslySelected.clear()}}function hA(e){return e==Oc.arrowright||e==Oc.arrowleft||e==Oc.arrowup||e==Oc.arrowdown}function fA(e){while(e){if(e.is(\"editableElement\")&&!e.is(\"rootElement\")){return true}if(ax(e)){return false}e=e.parent}return false}function mA(e,t){if(!t){return false}return Array.from(e.getAncestors()).includes(t)}function gA(e,t){return e&&t.isObject(e)&&!t.isInline(e)}class pA extends Dw{refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=Nx(e);if(Nx(e)&&e.hasAttribute(\"alt\")){this.value=e.getAttribute(\"alt\")}else{this.value=false}}execute(e){const t=this.editor.model;const i=t.document.selection.getSelectedElement();t.change(t=>{t.setAttribute(\"alt\",e.newValue,i)})}}class bA extends Rw{static get pluginName(){return\"ImageTextAlternativeEditing\"}init(){this.editor.commands.add(\"imageTextAlternative\",new pA(this.editor))}}var wA=i(71);class _A extends _b{constructor(e,t){super(e);const i=`ck-labeled-field-view-${is()}`;const n=`ck-labeled-field-view-status-${is()}`;this.fieldView=t(this,i,n);this.set(\"label\");this.set(\"isEnabled\",true);this.set(\"errorText\",null);this.set(\"infoText\",null);this.set(\"class\");this.labelView=this._createLabelView(i);this.statusView=this._createStatusView(n);this.bind(\"_statusText\").to(this,\"errorText\",this,\"infoText\",(e,t)=>e||t);const o=this.bindTemplate;this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-labeled-field-view\",o.to(\"class\"),o.if(\"isEnabled\",\"ck-disabled\",e=>!e)]},children:[this.labelView,this.fieldView,this.statusView]})}_createLabelView(e){const t=new Pb(this.locale);t.for=e;t.bind(\"text\").to(this,\"label\");return t}_createStatusView(e){const t=new _b(this.locale);const i=this.bindTemplate;t.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-labeled-field-view__status\",i.if(\"errorText\",\"ck-labeled-field-view__status_error\"),i.if(\"_statusText\",\"ck-hidden\",e=>!e)],id:e,role:i.if(\"errorText\",\"alert\")},children:[{text:i.to(\"_statusText\")}]});return t}focus(){this.fieldView.focus()}}var kA=i(73);class vA extends _b{constructor(e){super(e);this.set(\"value\");this.set(\"id\");this.set(\"placeholder\");this.set(\"isReadOnly\",false);this.set(\"hasError\",false);this.set(\"ariaDescribedById\");const t=this.bindTemplate;this.setTemplate({tag:\"input\",attributes:{type:\"text\",class:[\"ck\",\"ck-input\",\"ck-input-text\",t.if(\"hasError\",\"ck-error\")],id:t.to(\"id\"),placeholder:t.to(\"placeholder\"),readonly:t.to(\"isReadOnly\"),\"aria-invalid\":t.if(\"hasError\",true),\"aria-describedby\":t.to(\"ariaDescribedById\")},on:{input:t.to(\"input\")}})}render(){super.render();const e=e=>{this.element.value=!e&&e!==0?\"\":e};e(this.value);this.on(\"change:value\",(t,i,n)=>{e(n)})}select(){this.element.select()}focus(){this.element.focus()}}function yA(e,t,i){const n=new vA(e.locale);n.set({id:t,ariaDescribedById:i});n.bind(\"isReadOnly\").to(e,\"isEnabled\",e=>!e);n.bind(\"hasError\").to(e,\"errorText\",e=>!!e);n.on(\"input\",()=>{e.errorText=null});return n}function xA(e,t,i){const n=bw(e.locale);n.set({id:t,ariaDescribedById:i});n.bind(\"isEnabled\").to(e);return n}function AA({view:e}){e.listenTo(e.element,\"submit\",(t,i)=>{i.preventDefault();e.fire(\"submit\")},{useCapture:true})}var CA='';var TA='';var EA=i(75);class PA extends _b{constructor(e){super(e);const t=this.locale.t;this.focusTracker=new Ep;this.keystrokes=new mp;this.labeledInput=this._createLabeledInputView();this.saveButtonView=this._createButton(t(\"Save\"),CA,\"ck-button-save\");this.saveButtonView.type=\"submit\";this.cancelButtonView=this._createButton(t(\"Cancel\"),TA,\"ck-button-cancel\",\"cancel\");this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:\"shift + tab\",focusNext:\"tab\"}});this.setTemplate({tag:\"form\",attributes:{class:[\"ck\",\"ck-text-alternative-form\"],tabindex:\"-1\"},children:[this.labeledInput,this.saveButtonView,this.cancelButtonView]})}render(){super.render();this.keystrokes.listenTo(this.element);AA({view:this});[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)})}_createButton(e,t,i,n){const o=new rw(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:i}});if(n){o.delegate(\"execute\").to(this,n)}return o}_createLabeledInputView(){const e=this.locale.t;const t=new _A(this.locale,yA);t.label=e(\"Text alternative\");t.fieldView.placeholder=e(\"Text alternative\");return t}}var MA='';var SA='';var IA=i(77);var LA=i(79);const NA=Lb(\"px\");class OA extends Rw{static get pluginName(){return\"ContextualBalloon\"}constructor(e){super(e);this.positionLimiter=()=>{const e=this.editor.editing.view;const t=e.document;const i=t.selection.editableElement;if(i){return e.domConverter.mapViewToDom(i.root)}return null};this.set(\"visibleView\",null);this.view=new ex(e.locale);e.ui.view.body.add(this.view);e.ui.focusTracker.add(this.view.element);this._viewToStack=new Map;this._idToStack=new Map;this.set(\"_numberOfStacks\",0);this.set(\"_singleViewMode\",false);this._rotatorView=this._createRotatorView();this._fakePanelsView=this._createFakePanelsView()}hasView(e){return Array.from(this._viewToStack.keys()).includes(e)}add(e){if(this.hasView(e.view)){throw new ss[\"b\"](\"contextualballoon-add-view-exist: Cannot add configuration of the same view twice.\",[this,e])}const t=e.stackId||\"main\";if(!this._idToStack.has(t)){this._idToStack.set(t,new Map([[e.view,e]]));this._viewToStack.set(e.view,this._idToStack.get(t));this._numberOfStacks=this._idToStack.size;if(!this._visibleStack||e.singleViewMode){this.showStack(t)}return}const i=this._idToStack.get(t);if(e.singleViewMode){this.showStack(t)}i.set(e.view,e);this._viewToStack.set(e.view,i);if(i===this._visibleStack){this._showView(e)}}remove(e){if(!this.hasView(e)){throw new ss[\"b\"](\"contextualballoon-remove-view-not-exist: Cannot remove the configuration of a non-existent view.\",[this,e])}const t=this._viewToStack.get(e);if(this._singleViewMode&&this.visibleView===e){this._singleViewMode=false}if(this.visibleView===e){if(t.size===1){if(this._idToStack.size>1){this._showNextStack()}else{this.view.hide();this.visibleView=null;this._rotatorView.hideView()}}else{this._showView(Array.from(t.values())[t.size-2])}}if(t.size===1){this._idToStack.delete(this._getStackId(t));this._numberOfStacks=this._idToStack.size}else{t.delete(e)}this._viewToStack.delete(e)}updatePosition(e){if(e){this._visibleStack.get(this.visibleView).position=e}this.view.pin(this._getBalloonPosition());this._fakePanelsView.updatePosition()}showStack(e){this.visibleStack=e;const t=this._idToStack.get(e);if(!t){throw new ss[\"b\"](\"contextualballoon-showstack-stack-not-exist: Cannot show a stack that does not exist.\",this)}if(this._visibleStack===t){return}this._showView(Array.from(t.values()).pop())}get _visibleStack(){return this._viewToStack.get(this.visibleView)}_getStackId(e){const t=Array.from(this._idToStack.entries()).find(t=>t[1]===e);return t[0]}_showNextStack(){const e=Array.from(this._idToStack.values());let t=e.indexOf(this._visibleStack)+1;if(!e[t]){t=0}this.showStack(this._getStackId(e[t]))}_showPrevStack(){const e=Array.from(this._idToStack.values());let t=e.indexOf(this._visibleStack)-1;if(!e[t]){t=e.length-1}this.showStack(this._getStackId(e[t]))}_createRotatorView(){const e=new RA(this.editor.locale);const t=this.editor.locale.t;this.view.content.add(e);e.bind(\"isNavigationVisible\").to(this,\"_numberOfStacks\",this,\"_singleViewMode\",(e,t)=>!t&&e>1);e.on(\"change:isNavigationVisible\",()=>this.updatePosition(),{priority:\"low\"});e.bind(\"counter\").to(this,\"visibleView\",this,\"_numberOfStacks\",(e,i)=>{if(i<2){return\"\"}const n=Array.from(this._idToStack.values()).indexOf(this._visibleStack)+1;return t(\"%0 of %1\",[n,i])});e.buttonNextView.on(\"execute\",()=>{if(e.focusTracker.isFocused){this.editor.editing.view.focus()}this._showNextStack()});e.buttonPrevView.on(\"execute\",()=>{if(e.focusTracker.isFocused){this.editor.editing.view.focus()}this._showPrevStack()});return e}_createFakePanelsView(){const e=new zA(this.editor.locale,this.view);e.bind(\"numberOfPanels\").to(this,\"_numberOfStacks\",this,\"_singleViewMode\",(e,t)=>{const i=!t&&e>=2;return i?Math.min(e-1,2):0});e.listenTo(this.view,\"change:top\",()=>e.updatePosition());e.listenTo(this.view,\"change:left\",()=>e.updatePosition());this.editor.ui.view.body.add(e);return e}_showView({view:e,balloonClassName:t=\"\",withArrow:i=true,singleViewMode:n=false}){this.view.class=t;this.view.withArrow=i;this._rotatorView.showView(e);this.visibleView=e;this.view.pin(this._getBalloonPosition());this._fakePanelsView.updatePosition();if(n){this._singleViewMode=true}}_getBalloonPosition(){let e=Array.from(this._visibleStack.values()).pop().position;if(e&&!e.limiter){e=Object.assign({},e,{limiter:this.positionLimiter})}return e}}class RA extends _b{constructor(e){super(e);const t=e.t;const i=this.bindTemplate;this.set(\"isNavigationVisible\",true);this.focusTracker=new Ep;this.buttonPrevView=this._createButtonView(t(\"Previous\"),MA);this.buttonNextView=this._createButtonView(t(\"Next\"),SA);this.content=this.createCollection();this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-balloon-rotator\"],\"z-index\":\"-1\"},children:[{tag:\"div\",attributes:{class:[\"ck-balloon-rotator__navigation\",i.to(\"isNavigationVisible\",e=>e?\"\":\"ck-hidden\")]},children:[this.buttonPrevView,{tag:\"span\",attributes:{class:[\"ck-balloon-rotator__counter\"]},children:[{text:i.to(\"counter\")}]},this.buttonNextView]},{tag:\"div\",attributes:{class:\"ck-balloon-rotator__content\"},children:this.content}]})}render(){super.render();this.focusTracker.add(this.element)}showView(e){this.hideView();this.content.add(e)}hideView(){this.content.clear()}_createButtonView(e,t){const i=new rw(this.locale);i.set({label:e,icon:t,tooltip:true});return i}}class zA extends _b{constructor(e,t){super(e);const i=this.bindTemplate;this.set(\"top\",0);this.set(\"left\",0);this.set(\"height\",0);this.set(\"width\",0);this.set(\"numberOfPanels\",0);this.content=this.createCollection();this._balloonPanelView=t;this.setTemplate({tag:\"div\",attributes:{class:[\"ck-fake-panel\",i.to(\"numberOfPanels\",e=>e?\"\":\"ck-hidden\")],style:{top:i.to(\"top\",NA),left:i.to(\"left\",NA),width:i.to(\"width\",NA),height:i.to(\"height\",NA)}},children:this.content});this.on(\"change:numberOfPanels\",(e,t,i,n)=>{if(i>n){this._addPanels(i-n)}else{this._removePanels(n-i)}this.updatePosition()})}_addPanels(e){while(e--){const e=new _b;e.setTemplate({tag:\"div\"});this.content.add(e);this.registerChild(e)}}_removePanels(e){while(e--){const e=this.content.last;this.content.remove(e);this.deregisterChild(e);e.destroy()}}updatePosition(){if(this.numberOfPanels){const{top:e,left:t}=this._balloonPanelView;const{width:i,height:n}=new vh(this._balloonPanelView.element);Object.assign(this,{top:e,left:t,width:i,height:n})}}}var DA='';function jA(e){const t=e.plugins.get(\"ContextualBalloon\");if(Lx(e.editing.view.document.selection)){const i=BA(e);t.updatePosition(i)}}function BA(e){const t=e.editing.view;const i=ex.defaultPositions;return{target:t.domConverter.viewToDom(t.document.selection.getSelectedElement()),positions:[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast]}}class VA extends Rw{static get requires(){return[OA]}static get pluginName(){return\"ImageTextAlternativeUI\"}init(){this._createButton();this._createForm()}destroy(){super.destroy();this._form.destroy()}_createButton(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(\"imageTextAlternative\",i=>{const n=e.commands.get(\"imageTextAlternative\");const o=new rw(i);o.set({label:t(\"Change image text alternative\"),icon:DA,tooltip:true});o.bind(\"isEnabled\").to(n,\"isEnabled\");this.listenTo(o,\"execute\",()=>{this._showForm()});return o})}_createForm(){const e=this.editor;const t=e.editing.view;const i=t.document;this._balloon=this.editor.plugins.get(\"ContextualBalloon\");this._form=new PA(e.locale);this._form.render();this.listenTo(this._form,\"submit\",()=>{e.execute(\"imageTextAlternative\",{newValue:this._form.labeledInput.fieldView.element.value});this._hideForm(true)});this.listenTo(this._form,\"cancel\",()=>{this._hideForm(true)});this._form.keystrokes.set(\"Esc\",(e,t)=>{this._hideForm(true);t()});this.listenTo(e.ui,\"update\",()=>{if(!Lx(i.selection)){this._hideForm(true)}else if(this._isVisible){jA(e)}});mw({emitter:this._form,activator:()=>this._isVisible,contextElements:[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible){return}const e=this.editor;const t=e.commands.get(\"imageTextAlternative\");const i=this._form.labeledInput;if(!this._isInBalloon){this._balloon.add({view:this._form,position:BA(e)})}i.fieldView.value=i.fieldView.element.value=t.value||\"\";this._form.labeledInput.fieldView.select()}_hideForm(e){if(!this._isInBalloon){return}if(this._form.focusTracker.isFocused){this._form.saveButtonView.focus()}this._balloon.remove(this._form);if(e){this.editor.editing.view.focus()}}get _isVisible(){return this._balloon.visibleView===this._form}get _isInBalloon(){return this._balloon.hasView(this._form)}}class FA extends Rw{static get requires(){return[bA,VA]}static get pluginName(){return\"ImageTextAlternative\"}}var HA=i(81);class WA extends Rw{static get requires(){return[qx,uA,FA]}static get pluginName(){return\"Image\"}}function UA(e,t){return i=>{const n=i.createEditableElement(\"figcaption\");i.setCustomProperty(\"imageCaption\",true,n);Np({view:e,element:n,text:t});return hx(n,i)}}function qA(e){return!!e.getCustomProperty(\"imageCaption\")}function $A(e){for(const t of e.getChildren()){if(!!t&&t.is(\"caption\")){return t}}return null}function GA(e){const t=e.parent;if(e.name==\"figcaption\"&&t&&t.name==\"figure\"&&t.hasClass(\"image\")){return{name:true}}return null}class YA extends Rw{static get pluginName(){return\"ImageCaptionEditing\"}init(){const e=this.editor;const t=e.editing.view;const i=e.model.schema;const n=e.data;const o=e.editing;const r=e.t;i.register(\"caption\",{allowIn:\"image\",allowContentOf:\"$block\",isLimit:true});e.model.document.registerPostFixer(e=>this._insertMissingModelCaptionElement(e));e.conversion.for(\"upcast\").elementToElement({view:GA,model:\"caption\"});const s=e=>e.createContainerElement(\"figcaption\");n.downcastDispatcher.on(\"insert:caption\",KA(s,false));const a=UA(t,r(\"Enter image caption\"));o.downcastDispatcher.on(\"insert:caption\",KA(a));o.downcastDispatcher.on(\"insert\",this._fixCaptionVisibility(e=>e.item),{priority:\"high\"});o.downcastDispatcher.on(\"remove\",this._fixCaptionVisibility(e=>e.position.parent),{priority:\"high\"});t.document.registerPostFixer(e=>this._updateCaptionVisibility(e))}_updateCaptionVisibility(e){const t=this.editor.editing.mapper;const i=this._lastSelectedCaption;let n;const o=this.editor.model.document.selection;const r=o.getSelectedElement();if(r&&r.is(\"image\")){const e=$A(r);n=t.toViewElement(e)}const s=o.getFirstPosition();const a=QA(s.parent);if(a){n=t.toViewElement(a)}if(n){if(i){if(i===n){return XA(n,e)}else{ZA(i,e);this._lastSelectedCaption=n;return XA(n,e)}}else{this._lastSelectedCaption=n;return XA(n,e)}}else{if(i){const t=ZA(i,e);this._lastSelectedCaption=null;return t}else{return false}}}_fixCaptionVisibility(e){return(t,i,n)=>{const o=e(i);const r=QA(o);const s=this.editor.editing.mapper;const a=n.writer;if(r){const e=s.toViewElement(r);if(e){if(r.childCount){a.removeClass(\"ck-hidden\",e)}else{a.addClass(\"ck-hidden\",e)}}}}}_insertMissingModelCaptionElement(e){const t=this.editor.model;const i=t.document.differ.getChanges();const n=[];for(const e of i){if(e.type==\"insert\"&&e.name!=\"$text\"){const i=e.position.nodeAfter;if(i.is(\"image\")&&!$A(i)){n.push(i)}if(!i.is(\"image\")&&i.childCount){for(const e of t.createRangeIn(i).getItems()){if(e.is(\"image\")&&!$A(e)){n.push(e)}}}}}for(const t of n){e.appendElement(\"caption\",t)}return!!n.length}}function KA(e,t=true){return(i,n,o)=>{const r=n.item;if(!r.childCount&&!t){return}if(Nx(r.parent)){if(!o.consumable.consume(n.item,\"insert\")){return}const t=o.mapper.toViewElement(n.range.start.parent);const i=e(o.writer);const s=o.writer;if(!r.childCount){s.addClass(\"ck-hidden\",i)}JA(i,n.item,t,o)}}}function JA(e,t,i,n){const o=n.writer.createPositionAt(i,\"end\");n.writer.insert(o,e);n.mapper.bindElements(t,e)}function QA(e){const t=e.getAncestors({includeSelf:true});const i=t.find(e=>e.name==\"caption\");if(i&&i.parent&&i.parent.name==\"image\"){return i}return null}function ZA(e,t){if(!e.childCount&&!e.hasClass(\"ck-hidden\")){t.addClass(\"ck-hidden\",e);return true}return false}function XA(e,t){if(e.hasClass(\"ck-hidden\")){t.removeClass(\"ck-hidden\",e);return true}return false}var eC=i(83);class tC extends Rw{static get requires(){return[YA]}static get pluginName(){return\"ImageCaption\"}}class iC{constructor(e){this.set(\"activeHandlePosition\",null);this.set(\"proposedWidthPercents\",null);this.set(\"proposedWidth\",null);this.set(\"proposedHeight\",null);this.set(\"proposedHandleHostWidth\",null);this.set(\"proposedHandleHostHeight\",null);this._options=e;this._referenceCoordinates=null}begin(e,t,i){const n=new vh(t);this.activeHandlePosition=sC(e);this._referenceCoordinates=oC(t,aC(this.activeHandlePosition));this.originalWidth=n.width;this.originalHeight=n.height;this.aspectRatio=n.width/n.height;const o=i.style.width;if(o&&o.match(/^\\d+\\.?\\d*%$/)){this.originalWidthPercents=parseFloat(o)}else{this.originalWidthPercents=nC(i,n)}}update(e){this.proposedWidth=e.width;this.proposedHeight=e.height;this.proposedWidthPercents=e.widthPercents;this.proposedHandleHostWidth=e.handleHostWidth;this.proposedHandleHostHeight=e.handleHostHeight}}ys(iC,Jl);function nC(e,t){const i=e.parentElement;const n=parseFloat(i.ownerDocument.defaultView.getComputedStyle(i).width);return t.width/n*100}function oC(e,t){const i=new vh(e);const n=t.split(\"-\");const o={x:n[1]==\"right\"?i.right:i.left,y:n[0]==\"bottom\"?i.bottom:i.top};o.x+=e.ownerDocument.defaultView.scrollX;o.y+=e.ownerDocument.defaultView.scrollY;return o}function rC(e){return`ck-widget__resizer__handle-${e}`}function sC(e){const t=[\"top-left\",\"top-right\",\"bottom-right\",\"bottom-left\"];for(const i of t){if(e.classList.contains(rC(i))){return i}}}function aC(e){const t=e.split(\"-\");const i={top:\"bottom\",bottom:\"top\",left:\"right\",right:\"left\"};return`${i[t[0]]}-${i[t[1]]}`}class lC{constructor(e){this._options=e;this._domResizerWrapper=null;this._viewResizerWrapper=null;this.set(\"isEnabled\",true);this.decorate(\"begin\");this.decorate(\"cancel\");this.decorate(\"commit\");this.decorate(\"updateSize\");this.on(\"commit\",e=>{if(!this.state.proposedWidth&&!this.state.proposedWidthPercents){this._cleanup();e.stop()}},{priority:\"high\"})}attach(){const e=this;const t=this._options.viewElement;const i=this._options.editor.editing.view;i.change(i=>{const n=i.createUIElement(\"div\",{class:\"ck ck-reset_all ck-widget__resizer\"},(function(t){const i=this.toDomElement(t);e._appendHandles(i);e._appendSizeUI(i);e._domResizerWrapper=i;e.on(\"change:isEnabled\",(e,t,n)=>{i.style.display=n?\"\":\"none\"});i.style.display=e.isEnabled?\"\":\"none\";return i}));i.insert(i.createPositionAt(t,\"end\"),n);i.addClass(\"ck-widget_with-resizer\",t);this._viewResizerWrapper=n})}begin(e){this.state=new iC(this._options);this._sizeUI.bindToState(this._options,this.state);this._initialViewWidth=this._options.viewElement.getStyle(\"width\");this.state.begin(e,this._getHandleHost(),this._getResizeHost())}updateSize(e){const t=this._proposeNewSize(e);const i=this._options.editor.editing.view;i.change(e=>{const i=this._options.unit||\"%\";const n=(i===\"%\"?t.widthPercents:t.width)+i;e.setStyle(\"width\",n,this._options.viewElement)});const n=this._getHandleHost();const o=new vh(n);t.handleHostWidth=Math.round(o.width);t.handleHostHeight=Math.round(o.height);const r=new vh(n);t.width=Math.round(r.width);t.height=Math.round(r.height);this.redraw(o);this.state.update(t)}commit(){const e=this._options.unit||\"%\";const t=(e===\"%\"?this.state.proposedWidthPercents:this.state.proposedWidth)+e;this._options.editor.editing.view.change(()=>{this._cleanup();this._options.onCommit(t)})}cancel(){this._cleanup()}destroy(){this.cancel()}redraw(e){const t=this._domResizerWrapper;if(i(t)){this._options.editor.editing.view.change(i=>{const n=t.parentElement;const o=this._getHandleHost();const r=e||new vh(o);i.setStyle(\"width\",r.width+\"px\",this._viewResizerWrapper);i.setStyle(\"height\",r.height+\"px\",this._viewResizerWrapper);const s={left:o.offsetLeft,top:o.offsetTop,height:o.offsetHeight,width:o.offsetWidth};if(!n.isSameNode(o)){i.setStyle(\"left\",s.left+\"px\",this._viewResizerWrapper);i.setStyle(\"top\",s.top+\"px\",this._viewResizerWrapper);i.setStyle(\"height\",s.height+\"px\",this._viewResizerWrapper);i.setStyle(\"width\",s.width+\"px\",this._viewResizerWrapper)}})}function i(e){return e&&e.ownerDocument&&e.ownerDocument.contains(e)}}containsHandle(e){return this._domResizerWrapper.contains(e)}static isResizeHandle(e){return e.classList.contains(\"ck-widget__resizer__handle\")}_cleanup(){this._sizeUI.dismiss();this._sizeUI.isVisible=false;const e=this._options.editor.editing.view;e.change(e=>{e.setStyle(\"width\",this._initialViewWidth,this._options.viewElement)})}_proposeNewSize(e){const t=this.state;const i=uC(e);const n=this._options.isCentered?this._options.isCentered(this):true;const o={x:t._referenceCoordinates.x-(i.x+t.originalWidth),y:i.y-t.originalHeight-t._referenceCoordinates.y};if(n&&t.activeHandlePosition.endsWith(\"-right\")){o.x=i.x-(t._referenceCoordinates.x+t.originalWidth)}if(n){o.x*=2}const r={width:Math.abs(t.originalWidth+o.x),height:Math.abs(t.originalHeight+o.y)};r.dominant=r.width/t.aspectRatio>r.height?\"width\":\"height\";r.max=r[r.dominant];const s={width:r.width,height:r.height};if(r.dominant==\"width\"){s.height=s.width/t.aspectRatio}else{s.width=s.height*t.aspectRatio}return{width:Math.round(s.width),height:Math.round(s.height),widthPercents:Math.min(Math.round(t.originalWidthPercents/t.originalWidth*s.width*100)/100,100)}}_getResizeHost(){const e=this._domResizerWrapper.parentElement;return this._options.getResizeHost(e)}_getHandleHost(){const e=this._domResizerWrapper.parentElement;return this._options.getHandleHost(e)}_appendHandles(e){const t=[\"top-left\",\"top-right\",\"bottom-right\",\"bottom-left\"];for(const i of t){e.appendChild(new $p({tag:\"div\",attributes:{class:`ck-widget__resizer__handle ${dC(i)}`}}).render())}}_appendSizeUI(e){const t=new cC;t.render();this._sizeUI=t;e.appendChild(t.element)}}ys(lC,Jl);class cC extends _b{constructor(){super();const e=this.bindTemplate;this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-size-view\",e.to(\"activeHandlePosition\",e=>e?`ck-orientation-${e}`:\"\")],style:{display:e.if(\"isVisible\",\"none\",e=>!e)}},children:[{text:e.to(\"label\")}]})}bindToState(e,t){this.bind(\"isVisible\").to(t,\"proposedWidth\",t,\"proposedHeight\",(e,t)=>e!==null&&t!==null);this.bind(\"label\").to(t,\"proposedHandleHostWidth\",t,\"proposedHandleHostHeight\",t,\"proposedWidthPercents\",(t,i,n)=>{if(e.unit===\"px\"){return`${t}×${i}`}else{return`${n}%`}});this.bind(\"activeHandlePosition\").to(t)}dismiss(){this.unbind();this.isVisible=false}}function dC(e){return`ck-widget__resizer__handle-${e}`}function uC(e){return{x:e.pageX,y:e.pageY}}var hC=\"Expected a function\";function fC(e,t,i){var n=true,o=true;if(typeof e!=\"function\"){throw new TypeError(hC)}if(le(i)){n=\"leading\"in i?!!i.leading:n;o=\"trailing\"in i?!!i.trailing:o}return uh(e,t,{leading:n,maxWait:t,trailing:o})}var mC=fC;var gC=i(85);class pC extends Rw{static get pluginName(){return\"WidgetResize\"}init(){this.set(\"_visibleResizer\",null);this.set(\"_activeResizer\",null);this._resizers=new Map;const e=Ld.window.document;this.editor.model.schema.setAttributeProperties(\"width\",{isFormatting:true});this._observer=Object.create(Ud);this._observer.listenTo(e,\"mousedown\",this._mouseDownListener.bind(this));this._observer.listenTo(e,\"mousemove\",this._mouseMoveListener.bind(this));this._observer.listenTo(e,\"mouseup\",this._mouseUpListener.bind(this));const t=()=>{if(this._visibleResizer){this._visibleResizer.redraw()}};const i=mC(t,200);this.on(\"change:_visibleResizer\",t);this.editor.ui.on(\"update\",i);this._observer.listenTo(Ld.window,\"resize\",i);const n=this.editor.editing.view.document.selection;n.on(\"change\",()=>{const e=n.getSelectedElement();this._visibleResizer=this._getResizerByViewElement(e)||null})}destroy(){this._observer.stopListening();for(const e of this._resizers.values()){e.destroy()}}attachTo(e){const t=new lC(e);const i=this.editor.plugins;t.attach();if(i.has(\"WidgetToolbarRepository\")){const e=i.get(\"WidgetToolbarRepository\");t.on(\"begin\",()=>{e.forceDisabled(\"resize\")},{priority:\"lowest\"});t.on(\"cancel\",()=>{e.clearForceDisabled(\"resize\")},{priority:\"highest\"});t.on(\"commit\",()=>{e.clearForceDisabled(\"resize\")},{priority:\"highest\"})}this._resizers.set(e.viewElement,t);return t}_getResizerByHandle(e){for(const t of this._resizers.values()){if(t.containsHandle(e)){return t}}}_getResizerByViewElement(e){return this._resizers.get(e)}_mouseDownListener(e,t){if(!lC.isResizeHandle(t.target)){return}const i=t.target;this._activeResizer=this._getResizerByHandle(i);if(this._activeResizer){this._activeResizer.begin(i)}}_mouseMoveListener(e,t){if(this._activeResizer){this._activeResizer.updateSize(t)}}_mouseUpListener(){if(this._activeResizer){this._activeResizer.commit();this._activeResizer=null}}}ys(pC,Jl);class bC extends Dw{refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=Nx(e);if(!e||!e.hasAttribute(\"width\")){this.value=null}else{this.value={width:e.getAttribute(\"width\"),height:null}}}execute(e){const t=this.editor.model;const i=t.document.selection.getSelectedElement();t.change(t=>{t.setAttribute(\"width\",e.width,i)})}}var wC=i(87);class _C extends Rw{static get requires(){return[pC]}static get pluginName(){return\"ImageResize\"}init(){const e=this.editor;const t=new bC(e);this._registerSchema();this._registerConverters();e.commands.add(\"imageResize\",t);e.editing.downcastDispatcher.on(\"insert:image\",(i,n,o)=>{const r=o.mapper.toViewElement(n.item);const s=e.plugins.get(pC).attachTo({unit:e.config.get(\"image.resizeUnit\")||\"%\",modelElement:n.item,viewElement:r,editor:e,getHandleHost(e){return e.querySelector(\"img\")},getResizeHost(e){return e},isCentered(){const e=n.item.getAttribute(\"imageStyle\");return!e||e==\"full\"||e==\"alignCenter\"},onCommit(t){e.execute(\"imageResize\",{width:t})}});s.on(\"updateSize\",()=>{if(!r.hasClass(\"image_resized\")){e.editing.view.change(e=>{e.addClass(\"image_resized\",r)})}});s.bind(\"isEnabled\").to(t)},{priority:\"low\"})}_registerSchema(){this.editor.model.schema.extend(\"image\",{allowAttributes:\"width\"})}_registerConverters(){const e=this.editor;e.conversion.for(\"downcast\").add(e=>e.on(\"attribute:width:image\",(e,t,i)=>{if(!i.consumable.consume(t.item,e.name)){return}const n=i.writer;const o=i.mapper.toViewElement(t.item);if(t.attributeNewValue!==null){n.setStyle(\"width\",t.attributeNewValue,o);n.addClass(\"image_resized\",o)}else{n.removeStyle(\"width\",o);n.removeClass(\"image_resized\",o)}}));e.conversion.for(\"upcast\").attributeToAttribute({view:{name:\"figure\",styles:{width:/.+/}},model:{key:\"width\",value:e=>e.getStyle(\"width\")}})}}class kC extends Dw{constructor(e,t){super(e);this.defaultStyle=false;this.styles=t.reduce((e,t)=>{e[t.name]=t;if(t.isDefault){this.defaultStyle=t.name}return e},{})}refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=Nx(e);if(!e){this.value=false}else if(e.hasAttribute(\"imageStyle\")){const t=e.getAttribute(\"imageStyle\");this.value=this.styles[t]?t:false}else{this.value=this.defaultStyle}}execute(e){const t=e.value;const i=this.editor.model;const n=i.document.selection.getSelectedElement();i.change(e=>{if(this.styles[t].isDefault){e.removeAttribute(\"imageStyle\",n)}else{e.setAttribute(\"imageStyle\",t,n)}})}}function vC(e){return(t,i,n)=>{if(!n.consumable.consume(i.item,t.name)){return}const o=xC(i.attributeNewValue,e);const r=xC(i.attributeOldValue,e);const s=n.mapper.toViewElement(i.item);const a=n.writer;if(r){a.removeClass(r.className,s)}if(o){a.addClass(o.className,s)}}}function yC(e){const t=e.filter(e=>!e.isDefault);return(e,i,n)=>{if(!i.modelRange){return}const o=i.viewItem;const r=Bw(i.modelRange.getItems());if(!n.schema.checkAttribute(r,\"imageStyle\")){return}for(const e of t){if(n.consumable.consume(o,{classes:e.className})){n.writer.setAttribute(\"imageStyle\",e.name,r)}}}}function xC(e,t){for(const i of t){if(i.name===e){return i}}}var AC='';var CC='';var TC='';var EC='';const PC={full:{name:\"full\",title:\"Full size image\",icon:AC,isDefault:true},side:{name:\"side\",title:\"Side image\",icon:EC,className:\"image-style-side\"},alignLeft:{name:\"alignLeft\",title:\"Left aligned image\",icon:CC,className:\"image-style-align-left\"},alignCenter:{name:\"alignCenter\",title:\"Centered image\",icon:TC,className:\"image-style-align-center\"},alignRight:{name:\"alignRight\",title:\"Right aligned image\",icon:EC,className:\"image-style-align-right\"}};const MC={full:AC,left:CC,right:EC,center:TC};function SC(e=[]){return e.map(IC)}function IC(e){if(typeof e==\"string\"){const t=e;if(PC[t]){e=Object.assign({},PC[t])}else{console.warn(Object(ss[\"a\"])(\"image-style-not-found: There is no such image style of given name.\"),{name:t});e={name:t}}}else if(PC[e.name]){const t=PC[e.name];const i=Object.assign({},e);for(const n in t){if(!e.hasOwnProperty(n)){i[n]=t[n]}}e=i}if(typeof e.icon==\"string\"&&MC[e.icon]){e.icon=MC[e.icon]}return e}class LC extends Rw{static get pluginName(){return\"ImageStyleEditing\"}init(){const e=this.editor;const t=e.model.schema;const i=e.data;const n=e.editing;e.config.define(\"image.styles\",[\"full\",\"side\"]);const o=SC(e.config.get(\"image.styles\"));t.extend(\"image\",{allowAttributes:\"imageStyle\"});const r=vC(o);n.downcastDispatcher.on(\"attribute:imageStyle:image\",r);i.downcastDispatcher.on(\"attribute:imageStyle:image\",r);i.upcastDispatcher.on(\"element:figure\",yC(o),{priority:\"low\"});e.commands.add(\"imageStyle\",new kC(e,o))}}var NC=i(89);class OC extends Rw{static get pluginName(){return\"ImageStyleUI\"}get localizedDefaultStylesTitles(){const e=this.editor.t;return{\"Full size image\":e(\"Full size image\"),\"Side image\":e(\"Side image\"),\"Left aligned image\":e(\"Left aligned image\"),\"Centered image\":e(\"Centered image\"),\"Right aligned image\":e(\"Right aligned image\")}}init(){const e=this.editor;const t=e.config.get(\"image.styles\");const i=RC(SC(t),this.localizedDefaultStylesTitles);for(const e of i){this._createButton(e)}}_createButton(e){const t=this.editor;const i=`imageStyle:${e.name}`;t.ui.componentFactory.add(i,i=>{const n=t.commands.get(\"imageStyle\");const o=new rw(i);o.set({label:e.title,icon:e.icon,tooltip:true,isToggleable:true});o.bind(\"isEnabled\").to(n,\"isEnabled\");o.bind(\"isOn\").to(n,\"value\",t=>t===e.name);this.listenTo(o,\"execute\",()=>{t.execute(\"imageStyle\",{value:e.name});t.editing.view.focus()});return o})}}function RC(e,t){for(const i of e){if(t[i.title]){i.title=t[i.title]}}return e}class zC extends Rw{static get requires(){return[LC,OC]}static get pluginName(){return\"ImageStyle\"}}class DC extends Rw{static get requires(){return[OA]}static get pluginName(){return\"WidgetToolbarRepository\"}init(){const e=this.editor;if(e.plugins.has(\"BalloonToolbar\")){const t=e.plugins.get(\"BalloonToolbar\");this.listenTo(t,\"show\",t=>{if(VC(e.editing.view.document.selection)){t.stop()}},{priority:\"high\"})}this._toolbarDefinitions=new Map;this._balloon=this.editor.plugins.get(\"ContextualBalloon\");this.on(\"change:isEnabled\",()=>{this._updateToolbarsVisibility()});this.listenTo(e.ui,\"update\",()=>{this._updateToolbarsVisibility()});this.listenTo(e.ui.focusTracker,\"change:isFocused\",()=>{this._updateToolbarsVisibility()},{priority:\"low\"})}destroy(){super.destroy();for(const e of this._toolbarDefinitions.values()){e.view.destroy()}}register(e,{ariaLabel:t,items:i,getRelatedElement:n,balloonClassName:o=\"ck-toolbar-container\"}){const r=this.editor;const s=r.t;const a=new Tw(r.locale);a.ariaLabel=t||s(\"Widget toolbar\");if(this._toolbarDefinitions.has(e)){throw new ss[\"b\"](\"widget-toolbar-duplicated: Toolbar with the given id was already added.\",this,{toolbarId:e})}a.fillFromConfig(i,r.ui.componentFactory);this._toolbarDefinitions.set(e,{view:a,getRelatedElement:n,balloonClassName:o})}_updateToolbarsVisibility(){let e=0;let t=null;let i=null;for(const n of this._toolbarDefinitions.values()){const o=n.getRelatedElement(this.editor.editing.view.document.selection);if(!this.isEnabled||!o){if(this._isToolbarInBalloon(n)){this._hideToolbar(n)}}else if(!this.editor.ui.focusTracker.isFocused){if(this._isToolbarVisible(n)){this._hideToolbar(n)}}else{const r=o.getAncestors().length;if(r>e){e=r;t=o;i=n}}}if(i){this._showToolbar(i,t)}}_hideToolbar(e){this._balloon.remove(e.view);this.stopListening(this._balloon,\"change:visibleView\")}_showToolbar(e,t){if(this._isToolbarVisible(e)){jC(this.editor,t)}else if(!this._isToolbarInBalloon(e)){this._balloon.add({view:e.view,position:BC(this.editor,t),balloonClassName:e.balloonClassName});this.listenTo(this._balloon,\"change:visibleView\",()=>{for(const e of this._toolbarDefinitions.values()){if(this._isToolbarVisible(e)){const t=e.getRelatedElement(this.editor.editing.view.document.selection);jC(this.editor,t)}}})}}_isToolbarVisible(e){return this._balloon.visibleView===e.view}_isToolbarInBalloon(e){return this._balloon.hasView(e.view)}}function jC(e,t){const i=e.plugins.get(\"ContextualBalloon\");const n=BC(e,t);i.updatePosition(n)}function BC(e,t){const i=e.editing.view;const n=ex.defaultPositions;return{target:i.domConverter.mapViewToDom(t),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,gx]}}function VC(e){const t=e.getSelectedElement();return!!(t&&ax(t))}class FC extends Rw{static get requires(){return[DC]}static get pluginName(){return\"ImageToolbar\"}afterInit(){const e=this.editor;const t=e.t;const i=e.plugins.get(DC);i.register(\"image\",{ariaLabel:t(\"Image toolbar\"),items:e.config.get(\"image.toolbar\")||[],getRelatedElement:Lx})}}class HC extends _b{constructor(e){super(e);this.buttonView=new rw(e);this._fileInputView=new WC(e);this._fileInputView.bind(\"acceptedType\").to(this);this._fileInputView.bind(\"allowMultipleFiles\").to(this);this._fileInputView.delegate(\"done\").to(this);this.setTemplate({tag:\"span\",attributes:{class:\"ck-file-dialog-button\"},children:[this.buttonView,this._fileInputView]});this.buttonView.on(\"execute\",()=>{this._fileInputView.open()})}focus(){this.buttonView.focus()}}class WC extends _b{constructor(e){super(e);this.set(\"acceptedType\");this.set(\"allowMultipleFiles\",false);const t=this.bindTemplate;this.setTemplate({tag:\"input\",attributes:{class:[\"ck-hidden\"],type:\"file\",tabindex:\"-1\",accept:t.to(\"acceptedType\"),multiple:t.to(\"allowMultipleFiles\")},on:{change:t.to(()=>{if(this.element&&this.element.files&&this.element.files.length){this.fire(\"done\",this.element.files)}this.element.value=\"\"})}})}open(){this.element.click()}}var UC='';function qC(e){const t=e.map(e=>e.replace(\"+\",\"\\\\+\"));return new RegExp(`^image\\\\/(${t.join(\"|\")})$`)}function $C(e){return new Promise((t,i)=>{const n=e.getAttribute(\"src\");fetch(n).then(e=>e.blob()).then(e=>{const i=YC(e,n);const o=i.replace(\"image/\",\"\");const r=`image.${o}`;const s=new File([e],r,{type:i});t(s)}).catch(i)})}function GC(e){if(!e.is(\"element\",\"img\")||!e.getAttribute(\"src\")){return false}return e.getAttribute(\"src\").match(/^data:image\\/\\w+;base64,/g)||e.getAttribute(\"src\").match(/^blob:/g)}function YC(e,t){if(e.type){return e.type}else if(t.match(/data:(image\\/\\w+);base64/)){return t.match(/data:(image\\/\\w+);base64/)[1].toLowerCase()}else{return\"image/jpeg\"}}class KC extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(\"imageUpload\",i=>{const n=new HC(i);const o=e.commands.get(\"imageUpload\");const r=e.config.get(\"image.upload.types\");const s=qC(r);n.set({acceptedType:r.map(e=>`image/${e}`).join(\",\"),allowMultipleFiles:true});n.buttonView.set({label:t(\"Insert image\"),icon:UC,tooltip:true});n.buttonView.bind(\"isEnabled\").to(o);n.on(\"done\",(t,i)=>{const n=Array.from(i).filter(e=>s.test(e.type));if(n.length){e.execute(\"imageUpload\",{file:n})}});return n})}}var JC='';var QC=i(91);var ZC=i(93);var XC=i(95);class eT extends Rw{constructor(e){super(e);this.placeholder=\"data:image/svg+xml;utf8,\"+encodeURIComponent(JC)}init(){const e=this.editor;e.editing.downcastDispatcher.on(\"attribute:uploadStatus:image\",(...e)=>this.uploadStatusChange(...e))}uploadStatusChange(e,t,i){const n=this.editor;const o=t.item;const r=o.getAttribute(\"uploadId\");if(!i.consumable.consume(t.item,e.name)){return}const s=n.plugins.get(r_);const a=r?t.attributeNewValue:null;const l=this.placeholder;const c=n.editing.mapper.toViewElement(o);const d=i.writer;if(a==\"reading\"){tT(c,d);nT(l,c,d);return}if(a==\"uploading\"){const e=s.loaders.get(r);tT(c,d);if(!e){nT(l,c,d)}else{oT(c,d);rT(c,d,e,n.editing.view);hT(c,d,e)}return}if(a==\"complete\"&&s.loaders.get(r)){aT(c,d,n.editing.view)}sT(c,d);oT(c,d);iT(c,d)}}function tT(e,t){if(!e.hasClass(\"ck-appear\")){t.addClass(\"ck-appear\",e)}}function iT(e,t){t.removeClass(\"ck-appear\",e)}function nT(e,t,i){if(!t.hasClass(\"ck-image-upload-placeholder\")){i.addClass(\"ck-image-upload-placeholder\",t)}const n=zx(t);if(n.getAttribute(\"src\")!==e){i.setAttribute(\"src\",e,n)}if(!dT(t,\"placeholder\")){i.insert(i.createPositionAfter(n),cT(i))}}function oT(e,t){if(e.hasClass(\"ck-image-upload-placeholder\")){t.removeClass(\"ck-image-upload-placeholder\",e)}uT(e,t,\"placeholder\")}function rT(e,t,i,n){const o=lT(t);t.insert(t.createPositionAt(e,\"end\"),o);i.on(\"change:uploadedPercent\",(e,t,i)=>{n.change(e=>{e.setStyle(\"width\",i+\"%\",o)})})}function sT(e,t){uT(e,t,\"progressBar\")}function aT(e,t,i){const n=t.createUIElement(\"div\",{class:\"ck-image-upload-complete-icon\"});t.insert(t.createPositionAt(e,\"end\"),n);setTimeout(()=>{i.change(e=>e.remove(e.createRangeOn(n)))},3e3)}function lT(e){const t=e.createUIElement(\"div\",{class:\"ck-progress-bar\"});e.setCustomProperty(\"progressBar\",true,t);return t}function cT(e){const t=e.createUIElement(\"div\",{class:\"ck-upload-placeholder-loader\"});e.setCustomProperty(\"placeholder\",true,t);return t}function dT(e,t){for(const i of e.getChildren()){if(i.getCustomProperty(t)){return i}}}function uT(e,t,i){const n=dT(e,i);if(n){t.remove(t.createRangeOn(n))}}function hT(e,t,i){if(i.data){const n=zx(e);t.setAttribute(\"src\",i.data,n)}}class fT extends i_{static get pluginName(){return\"Notification\"}init(){this.on(\"show:warning\",(e,t)=>{window.alert(t.message)},{priority:\"lowest\"})}showSuccess(e,t={}){this._showNotification({message:e,type:\"success\",namespace:t.namespace,title:t.title})}showInfo(e,t={}){this._showNotification({message:e,type:\"info\",namespace:t.namespace,title:t.title})}showWarning(e,t={}){this._showNotification({message:e,type:\"warning\",namespace:t.namespace,title:t.title})}_showNotification(e){const t=`show:${e.type}`+(e.namespace?`:${e.namespace}`:\"\");this.fire(t,{message:e.message,type:e.type,title:e.title||\"\"})}}class mT{constructor(e){this.document=e}createDocumentFragment(e){return new Uc(this.document,e)}createElement(e,t,i){return new jl(this.document,e,t,i)}createText(e){return new Vs(this.document,e)}clone(e,t=false){return e._clone(t)}appendChild(e,t){return t._appendChild(e)}insertChild(e,t,i){return i._insertChild(e,t)}removeChildren(e,t,i){return i._removeChildren(e,t)}remove(e){const t=e.parent;if(t){return this.removeChildren(t.getChildIndex(e),1,t)}return[]}replace(e,t){const i=e.parent;if(i){const n=i.getChildIndex(e);this.removeChildren(n,1,i);this.insertChild(n,t,i);return true}return false}unwrapElement(e){const t=e.parent;if(t){const i=t.getChildIndex(e);this.remove(e);this.insertChild(i,e.getChildren(),t)}}rename(e,t){const i=new jl(this.document,e,t.getAttributes(),t.getChildren());return this.replace(t,i)?i:null}setAttribute(e,t,i){i._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,i){if(O(e)&&i===undefined){i=t}i._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,i){i._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}createPositionAt(e,t){return uc._createAt(e,t)}createPositionAfter(e){return uc._createAfter(e)}createPositionBefore(e){return uc._createBefore(e)}createRange(e,t){return new hc(e,t)}createRangeOn(e){return hc._createOn(e)}createRangeIn(e){return hc._createIn(e)}createSelection(e,t,i){return new gc(e,t,i)}}class gT extends Dw{refresh(){this.isEnabled=Rx(this.editor.model)}execute(e){const t=this.editor;const i=t.model;const n=t.plugins.get(r_);i.change(t=>{const o=Array.isArray(e.file)?e.file:[e.file];for(const e of o){pT(t,i,n,e)}})}}function pT(e,t,i,n){const o=i.createLoader(n);if(!o){return}Ox(e,t,{uploadId:o.id})}class bT extends Rw{static get requires(){return[r_,fT,vk]}static get pluginName(){return\"ImageUploadEditing\"}constructor(e){super(e);e.config.define(\"image\",{upload:{types:[\"jpeg\",\"png\",\"gif\",\"bmp\",\"webp\",\"tiff\"]}})}init(){const e=this.editor;const t=e.model.document;const i=e.model.schema;const n=e.conversion;const o=e.plugins.get(r_);const r=qC(e.config.get(\"image.upload.types\"));i.extend(\"image\",{allowAttributes:[\"uploadId\",\"uploadStatus\"]});e.commands.add(\"imageUpload\",new gT(e));n.for(\"upcast\").attributeToAttribute({view:{name:\"img\",key:\"uploadId\"},model:\"uploadId\"});this.listenTo(e.editing.view.document,\"clipboardInput\",(t,i)=>{if(wT(i.dataTransfer)){return}const n=Array.from(i.dataTransfer.files).filter(e=>{if(!e){return false}return r.test(e.type)});const o=i.targetRanges.map(t=>e.editing.mapper.toModelRange(t));e.model.change(i=>{i.setSelection(o);if(n.length){t.stop();e.model.enqueueChange(\"default\",()=>{e.execute(\"imageUpload\",{file:n})})}})});this.listenTo(e.plugins.get(vk),\"inputTransformation\",(t,i)=>{const n=Array.from(e.editing.view.createRangeIn(i.content)).filter(e=>GC(e.item)&&!e.item.getAttribute(\"uploadProcessed\")).map(e=>({promise:$C(e.item),imageElement:e.item}));if(!n.length){return}const r=new mT(e.editing.view.document);for(const e of n){r.setAttribute(\"uploadProcessed\",true,e.imageElement);const t=o.createLoader(e.promise);if(t){r.setAttribute(\"src\",\"\",e.imageElement);r.setAttribute(\"uploadId\",t.id,e.imageElement)}}});e.editing.view.document.on(\"dragover\",(e,t)=>{t.preventDefault()});t.on(\"change\",()=>{const i=t.differ.getChanges({includeChangesInGraveyard:true});for(const t of i){if(t.type==\"insert\"&&t.name!=\"$text\"){const i=t.position.nodeAfter;const n=t.position.root.rootName==\"$graveyard\";for(const t of _T(e,i)){const e=t.getAttribute(\"uploadId\");if(!e){continue}const i=o.loaders.get(e);if(!i){continue}if(n){i.abort()}else if(i.status==\"idle\"){this._readAndUpload(i,t)}}}}})}_readAndUpload(e,t){const i=this.editor;const n=i.model;const o=i.locale.t;const r=i.plugins.get(r_);const s=i.plugins.get(fT);n.enqueueChange(\"transparent\",e=>{e.setAttribute(\"uploadStatus\",\"reading\",t)});return e.read().then(()=>{const o=e.upload();if(Tc.isSafari){const e=i.editing.mapper.toViewElement(t);const n=zx(e);i.editing.view.once(\"render\",()=>{if(!n.parent){return}const e=i.editing.view.domConverter.mapViewToDom(n.parent);if(!e){return}const t=e.style.display;e.style.display=\"none\";e._ckHack=e.offsetHeight;e.style.display=t})}n.enqueueChange(\"transparent\",e=>{e.setAttribute(\"uploadStatus\",\"uploading\",t)});return o}).then(e=>{n.enqueueChange(\"transparent\",i=>{i.setAttributes({uploadStatus:\"complete\",src:e.default},t);this._parseAndSetSrcsetAttributeOnImage(e,t,i)});a()}).catch(i=>{if(e.status!==\"error\"&&e.status!==\"aborted\"){throw i}if(e.status==\"error\"&&i){s.showWarning(i,{title:o(\"Upload failed\"),namespace:\"upload\"})}a();n.enqueueChange(\"transparent\",e=>{e.remove(t)})});function a(){n.enqueueChange(\"transparent\",e=>{e.removeAttribute(\"uploadId\",t);e.removeAttribute(\"uploadStatus\",t)});r.destroyLoader(e)}}_parseAndSetSrcsetAttributeOnImage(e,t,i){let n=0;const o=Object.keys(e).filter(e=>{const t=parseInt(e,10);if(!isNaN(t)){n=Math.max(n,t);return true}}).map(t=>`${e[t]} ${t}w`).join(\", \");if(o!=\"\"){i.setAttribute(\"srcset\",{data:o,width:n},t)}}}function wT(e){return Array.from(e.types).includes(\"text/html\")&&e.getData(\"text/html\")!==\"\"}function _T(e,t){return Array.from(e.model.createRangeOn(t)).filter(e=>e.item.is(\"image\")).map(e=>e.item)}class kT extends Rw{static get pluginName(){return\"ImageUpload\"}static get requires(){return[bT,KC,eT]}}class vT extends Dw{constructor(e){super(e);this._childCommands=[]}refresh(){}execute(...e){const t=this._getFirstEnabledCommand();t.execute(e)}registerChildCommand(e){this._childCommands.push(e);e.on(\"change:isEnabled\",()=>this._checkEnabled());this._checkEnabled()}_checkEnabled(){this.isEnabled=!!this._getFirstEnabledCommand()}_getFirstEnabledCommand(){return this._childCommands.find(e=>e.isEnabled)}}class yT extends Rw{static get pluginName(){return\"IndentEditing\"}init(){const e=this.editor;e.commands.add(\"indent\",new vT(e));e.commands.add(\"outdent\",new vT(e))}}var xT='';var AT='';class CT extends Rw{static get pluginName(){return\"IndentUI\"}init(){const e=this.editor;const t=e.locale;const i=e.t;const n=t.uiLanguageDirection==\"ltr\"?xT:AT;const o=t.uiLanguageDirection==\"ltr\"?AT:xT;this._defineButton(\"indent\",i(\"Increase indent\"),n);this._defineButton(\"outdent\",i(\"Decrease indent\"),o)}_defineButton(e,t,i){const n=this.editor;n.ui.componentFactory.add(e,o=>{const r=n.commands.get(e);const s=new rw(o);s.set({label:t,icon:i,tooltip:true});s.bind(\"isOn\",\"isEnabled\").to(r,\"value\",\"isEnabled\");this.listenTo(s,\"execute\",()=>{n.execute(e);n.editing.view.focus()});return s})}}class TT extends Rw{static get pluginName(){return\"Indent\"}static get requires(){return[yT,CT]}}class ET extends Dw{constructor(e,t){super(e);this._indentBehavior=t}refresh(){const e=this.editor;const t=e.model;const i=Bw(t.document.selection.getSelectedBlocks());if(!i||!t.schema.checkAttribute(i,\"blockIndent\")){this.isEnabled=false;return}this.isEnabled=this._indentBehavior.checkEnabled(i.getAttribute(\"blockIndent\"))}execute(){const e=this.editor.model;const t=PT(e);e.change(e=>{for(const i of t){const t=i.getAttribute(\"blockIndent\");const n=this._indentBehavior.getNextIndent(t);if(n){e.setAttribute(\"blockIndent\",n,i)}else{e.removeAttribute(\"blockIndent\",i)}}})}}function PT(e){const t=e.document.selection;const i=e.schema;const n=Array.from(t.getSelectedBlocks());return n.filter(e=>i.checkAttribute(e,\"blockIndent\"))}class MT{constructor(e){this.isForward=e.direction===\"forward\";this.offset=e.offset;this.unit=e.unit}checkEnabled(e){const t=parseFloat(e||0);return this.isForward||t>0}getNextIndent(e){const t=parseFloat(e||0);const i=!e||e.endsWith(this.unit);if(!i){return this.isForward?this.offset+this.unit:undefined}const n=this.isForward?this.offset:-this.offset;const o=t+n;return o>0?o+this.unit:undefined}}class ST{constructor(e){this.isForward=e.direction===\"forward\";this.classes=e.classes}checkEnabled(e){const t=this.classes.indexOf(e);if(this.isForward){return t=0}}getNextIndent(e){const t=this.classes.indexOf(e);const i=this.isForward?1:-1;return this.classes[t+i]}}const IT=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;const LT=/^rgb\\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}[0-9]{1,3}[ %]?\\)$/i;const NT=/^rgba\\([ ]?([0-9]{1,3}[ %]?,[ ]?){3}(1|[0-9]+%|[0]?\\.?[0-9]+)\\)$/i;const OT=/^hsl\\([ ]?([0-9]{1,3}[ %]?[,]?[ ]*){3}(1|[0-9]+%|[0]?\\.?[0-9]+)?\\)$/i;const RT=/^hsla\\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}(1|[0-9]+%|[0]?\\.?[0-9]+)\\)$/i;const zT=new Set([\"black\",\"silver\",\"gray\",\"white\",\"maroon\",\"red\",\"purple\",\"fuchsia\",\"green\",\"lime\",\"olive\",\"yellow\",\"navy\",\"blue\",\"teal\",\"aqua\",\"orange\",\"aliceblue\",\"antiquewhite\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"blanchedalmond\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkgrey\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkslategrey\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dimgrey\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"greenyellow\",\"grey\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightgrey\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightslategrey\",\"lightsteelblue\",\"lightyellow\",\"limegreen\",\"linen\",\"magenta\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"oldlace\",\"olivedrab\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"skyblue\",\"slateblue\",\"slategray\",\"slategrey\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"whitesmoke\",\"yellowgreen\",\"rebeccapurple\",\"currentcolor\",\"transparent\"]);function DT(e){if(e.startsWith(\"#\")){return IT.test(e)}if(e.startsWith(\"rgb\")){return LT.test(e)||NT.test(e)}if(e.startsWith(\"hsl\")){return OT.test(e)||RT.test(e)}return zT.has(e.toLowerCase())}const jT=[\"none\",\"hidden\",\"dotted\",\"dashed\",\"solid\",\"double\",\"groove\",\"ridge\",\"inset\",\"outset\"];function BT(e){return jT.includes(e)}const VT=/^([+-]?[0-9]*[.]?[0-9]+(px|cm|mm|in|pc|pt|ch|em|ex|rem|vh|vw|vmin|vmax)|0)$/;function FT(e){return VT.test(e)}const HT=/^[+-]?[0-9]*[.]?[0-9]+%$/;function WT(e){return HT.test(e)}const UT=[\"repeat-x\",\"repeat-y\",\"repeat\",\"space\",\"round\",\"no-repeat\"];function qT(e){return UT.includes(e)}const $T=[\"center\",\"top\",\"bottom\",\"left\",\"right\"];function GT(e){return $T.includes(e)}const YT=[\"fixed\",\"scroll\",\"local\"];function KT(e){return YT.includes(e)}const JT=/^url\\(/;function QT(e){return JT.test(e)}function ZT(e=\"\"){if(e===\"\"){return{top:undefined,right:undefined,bottom:undefined,left:undefined}}const t=iE(e);const i=t[0];const n=t[2]||i;const o=t[1]||i;const r=t[3]||o;return{top:i,bottom:n,right:o,left:r}}function XT(e){return t=>{const{top:i,right:n,bottom:o,left:r}=t;const s=[];if(![i,n,r,o].every(e=>!!e)){if(i){s.push([e+\"-top\",i])}if(n){s.push([e+\"-right\",n])}if(o){s.push([e+\"-bottom\",o])}if(r){s.push([e+\"-left\",r])}}else{s.push([e,eE(t)])}return s}}function eE({top:e,right:t,bottom:i,left:n}){const o=[];if(n!==t){o.push(e,t,i,n)}else if(i!==e){o.push(e,t,i)}else if(t!==e){o.push(e,t)}else{o.push(e)}return o.join(\" \")}function tE(e){return t=>({path:e,value:ZT(t)})}function iE(e){return e.replace(/, /g,\",\").split(\" \").map(e=>e.replace(/,/g,\", \"))}function nE(e){e.setNormalizer(\"margin\",tE(\"margin\"));e.setNormalizer(\"margin-top\",e=>({path:\"margin.top\",value:e}));e.setNormalizer(\"margin-right\",e=>({path:\"margin.right\",value:e}));e.setNormalizer(\"margin-bottom\",e=>({path:\"margin.bottom\",value:e}));e.setNormalizer(\"margin-left\",e=>({path:\"margin.left\",value:e}));e.setReducer(\"margin\",XT(\"margin\"));e.setStyleRelation(\"margin\",[\"margin-top\",\"margin-right\",\"margin-bottom\",\"margin-left\"])}class oE extends Rw{constructor(e){super(e);e.config.define(\"indentBlock\",{offset:40,unit:\"px\"})}static get pluginName(){return\"IndentBlock\"}init(){const e=this.editor;const t=e.config.get(\"indentBlock\");const i=!t.classes||!t.classes.length;const n=Object.assign({direction:\"forward\"},t);const o=Object.assign({direction:\"backward\"},t);if(i){e.data.addStyleProcessorRules(nE);this._setupConversionUsingOffset(e.conversion);e.commands.add(\"indentBlock\",new ET(e,new MT(n)));e.commands.add(\"outdentBlock\",new ET(e,new MT(o)))}else{this._setupConversionUsingClasses(t.classes);e.commands.add(\"indentBlock\",new ET(e,new ST(n)));e.commands.add(\"outdentBlock\",new ET(e,new ST(o)))}}afterInit(){const e=this.editor;const t=e.model.schema;const i=e.commands.get(\"indent\");const n=e.commands.get(\"outdent\");const o=[\"paragraph\",\"heading1\",\"heading2\",\"heading3\",\"heading4\",\"heading5\",\"heading6\"];o.forEach(e=>{if(t.isRegistered(e)){t.extend(e,{allowAttributes:\"blockIndent\"})}});i.registerChildCommand(e.commands.get(\"indentBlock\"));n.registerChildCommand(e.commands.get(\"outdentBlock\"))}_setupConversionUsingOffset(){const e=this.editor.conversion;const t=this.editor.locale;const i=t.contentLanguageDirection===\"rtl\"?\"margin-right\":\"margin-left\";e.for(\"upcast\").attributeToAttribute({view:{styles:{[i]:/[\\s\\S]+/}},model:{key:\"blockIndent\",value:e=>e.getStyle(i)}});e.for(\"downcast\").attributeToAttribute({model:\"blockIndent\",view:e=>({key:\"style\",value:{[i]:e}})})}_setupConversionUsingClasses(e){const t={model:{key:\"blockIndent\",values:[]},view:{}};for(const i of e){t.model.values.push(i);t.view[i]={key:\"class\",value:[i]}}this.editor.conversion.attributeToAttribute(t)}}const rE=\"italic\";class sE extends Rw{static get pluginName(){return\"ItalicEditing\"}init(){const e=this.editor;e.model.schema.extend(\"$text\",{allowAttributes:rE});e.model.schema.setAttributeProperties(rE,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:rE,view:\"i\",upcastAlso:[\"em\",{styles:{\"font-style\":\"italic\"}}]});e.commands.add(rE,new w_(e,rE));e.keystrokes.set(\"CTRL+I\",rE)}}var aE='';const lE=\"italic\";class cE extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(lE,i=>{const n=e.commands.get(lE);const o=new rw(i);o.set({label:t(\"Italic\"),icon:aE,keystroke:\"CTRL+I\",tooltip:true,isToggleable:true});o.bind(\"isOn\",\"isEnabled\").to(n,\"value\",\"isEnabled\");this.listenTo(o,\"execute\",()=>{e.execute(lE);e.editing.view.focus()});return o})}}class dE extends Rw{static get requires(){return[sE,cE]}static get pluginName(){return\"Italic\"}}function uE(e,t,i){return i.createRange(hE(e,t,true,i),hE(e,t,false,i))}function hE(e,t,i,n){let o=e.textNode||(i?e.nodeBefore:e.nodeAfter);let r=null;while(o&&o.getAttribute(\"linkHref\")==t){r=o;o=i?o.previousSibling:o.nextSibling}return r?n.createPositionAt(r,i?\"before\":\"after\"):e}class fE extends Dw{constructor(e){super(e);this.manualDecorators=new xs}restoreManualDecoratorStates(){for(const e of this.manualDecorators){e.value=this._getDecoratorStateFromModel(e.id)}}refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute(\"linkHref\");for(const e of this.manualDecorators){e.value=this._getDecoratorStateFromModel(e.id)}this.isEnabled=e.schema.checkAttributeInSelection(t.selection,\"linkHref\")}execute(e,t={}){const i=this.editor.model;const n=i.document.selection;const o=[];const r=[];for(const e in t){if(t[e]){o.push(e)}else{r.push(e)}}i.change(t=>{if(n.isCollapsed){const s=n.getFirstPosition();if(n.hasAttribute(\"linkHref\")){const a=uE(s,n.getAttribute(\"linkHref\"),i);t.setAttribute(\"linkHref\",e,a);o.forEach(e=>{t.setAttribute(e,true,a)});r.forEach(e=>{t.removeAttribute(e,a)});t.setSelection(a)}else if(e!==\"\"){const r=Ws(n.getAttributes());r.set(\"linkHref\",e);o.forEach(e=>{r.set(e,true)});const a=t.createText(e,r);i.insertContent(a,s);t.setSelection(t.createRangeOn(a))}}else{const s=i.schema.getValidRanges(n.getRanges(),\"linkHref\");for(const i of s){t.setAttribute(\"linkHref\",e,i);o.forEach(e=>{t.setAttribute(e,true,i)});r.forEach(e=>{t.removeAttribute(e,i)})}}})}_getDecoratorStateFromModel(e){const t=this.editor.model.document;return t.selection.getAttribute(e)}}class mE extends Dw{refresh(){this.isEnabled=this.editor.model.document.selection.hasAttribute(\"linkHref\")}execute(){const e=this.editor;const t=this.editor.model;const i=t.document.selection;const n=e.commands.get(\"link\");t.change(e=>{const o=i.isCollapsed?[uE(i.getFirstPosition(),i.getAttribute(\"linkHref\"),t)]:i.getRanges();for(const t of o){e.removeAttribute(\"linkHref\",t);if(n){for(const i of n.manualDecorators){e.removeAttribute(i.id,t)}}}})}}function gE(e,t,i){var n=e.length;i=i===undefined?n:i;return!t&&i>=n?e:La(e,t,i)}var pE=gE;var bE=\"\\\\ud800-\\\\udfff\",wE=\"\\\\u0300-\\\\u036f\",_E=\"\\\\ufe20-\\\\ufe2f\",kE=\"\\\\u20d0-\\\\u20ff\",vE=wE+_E+kE,yE=\"\\\\ufe0e\\\\ufe0f\";var xE=\"\\\\u200d\";var AE=RegExp(\"[\"+xE+bE+vE+yE+\"]\");function CE(e){return AE.test(e)}var TE=CE;function EE(e){return e.split(\"\")}var PE=EE;var ME=\"\\\\ud800-\\\\udfff\",SE=\"\\\\u0300-\\\\u036f\",IE=\"\\\\ufe20-\\\\ufe2f\",LE=\"\\\\u20d0-\\\\u20ff\",NE=SE+IE+LE,OE=\"\\\\ufe0e\\\\ufe0f\";var RE=\"[\"+ME+\"]\",zE=\"[\"+NE+\"]\",DE=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",jE=\"(?:\"+zE+\"|\"+DE+\")\",BE=\"[^\"+ME+\"]\",VE=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",FE=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",HE=\"\\\\u200d\";var WE=jE+\"?\",UE=\"[\"+OE+\"]?\",qE=\"(?:\"+HE+\"(?:\"+[BE,VE,FE].join(\"|\")+\")\"+UE+WE+\")*\",$E=UE+WE+qE,GE=\"(?:\"+[BE+zE+\"?\",zE,VE,FE,RE].join(\"|\")+\")\";var YE=RegExp(DE+\"(?=\"+DE+\")|\"+GE+$E,\"g\");function KE(e){return e.match(YE)||[]}var JE=KE;function QE(e){return TE(e)?JE(e):PE(e)}var ZE=QE;function XE(e){return function(t){t=va(t);var i=TE(t)?ZE(t):undefined;var n=i?i[0]:t.charAt(0);var o=i?pE(i,1).join(\"\"):t.slice(1);return n[e]()+o}}var eP=XE;var tP=eP(\"toUpperCase\");var iP=tP;const nP=/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g;const oP=/^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i;function rP(e){return e.is(\"attributeElement\")&&!!e.getCustomProperty(\"link\")}function sP(e,t){const i=t.createAttributeElement(\"a\",{href:e},{priority:5});t.setCustomProperty(\"link\",true,i);return i}function aP(e){e=String(e);return lP(e)?e:\"#\"}function lP(e){const t=e.replace(nP,\"\");return t.match(oP)}function cP(e,t){const i={\"Open in a new tab\":e(\"Open in a new tab\"),Downloadable:e(\"Downloadable\")};t.forEach(e=>{if(e.label&&i[e.label]){e.label=i[e.label]}return e});return t}function dP(e){const t=[];if(e){for(const[i,n]of Object.entries(e)){const e=Object.assign({},n,{id:`link${iP(i)}`});t.push(e)}}return t}class uP{constructor(){this._definitions=new Set}get length(){return this._definitions.size}add(e){if(Array.isArray(e)){e.forEach(e=>this._definitions.add(e))}else{this._definitions.add(e)}}getDispatcher(){return e=>{e.on(\"attribute:linkHref\",(e,t,i)=>{if(!i.consumable.test(t.item,\"attribute:linkHref\")){return}const n=i.writer;const o=n.document.selection;for(const e of this._definitions){const r=n.createAttributeElement(\"a\",e.attributes,{priority:5});n.setCustomProperty(\"link\",true,r);if(e.callback(t.attributeNewValue)){if(t.item.is(\"selection\")){n.wrap(o.getFirstRange(),r)}else{n.wrap(i.mapper.toViewRange(t.range),r)}}else{n.unwrap(i.mapper.toViewRange(t.range),r)}}},{priority:\"high\"})}}}class hP{constructor({id:e,label:t,attributes:i,defaultValue:n}){this.id=e;this.set(\"value\");this.defaultValue=n;this.label=t;this.attributes=i}}ys(hP,Jl);function fP({view:e,model:t,emitter:i,attribute:n,locale:o}){const r=new mP(t,i,n);const s=t.document.selection;i.listenTo(e.document,\"keydown\",(e,t)=>{if(!s.isCollapsed){return}if(t.shiftKey||t.altKey||t.ctrlKey){return}const i=t.keyCode==Oc.arrowright;const n=t.keyCode==Oc.arrowleft;if(!i&&!n){return}const a=s.getFirstPosition();const l=o.contentLanguageDirection;let c;if(l===\"ltr\"&&i||l===\"rtl\"&&n){c=r.handleForwardMovement(a,t)}else{c=r.handleBackwardMovement(a,t)}if(c){e.stop()}},{priority:os.get(\"high\")+1})}class mP{constructor(e,t,i){this.model=e;this.attribute=i;this._modelSelection=e.document.selection;this._overrideUid=null;this._isNextGravityRestorationSkipped=false;t.listenTo(this._modelSelection,\"change:range\",(e,t)=>{if(this._isNextGravityRestorationSkipped){this._isNextGravityRestorationSkipped=false;return}if(!this._isGravityOverridden){return}if(!t.directChange&&gP(this._modelSelection.getFirstPosition(),i)){return}this._restoreGravity()})}handleForwardMovement(e,t){const i=this.attribute;if(this._isGravityOverridden){return}if(e.isAtStart&&this._hasSelectionAttribute){return}if(wP(e,i)&&this._hasSelectionAttribute){this._preventCaretMovement(t);this._removeSelectionAttribute();return true}if(pP(e,i)){this._preventCaretMovement(t);this._overrideGravity();return true}if(bP(e,i)&&this._hasSelectionAttribute){this._preventCaretMovement(t);this._overrideGravity();return true}}handleBackwardMovement(e,t){const i=this.attribute;if(this._isGravityOverridden){if(wP(e,i)&&this._hasSelectionAttribute){this._preventCaretMovement(t);this._restoreGravity();this._removeSelectionAttribute();return true}else{this._preventCaretMovement(t);this._restoreGravity();if(e.isAtStart){this._removeSelectionAttribute()}return true}}else{if(wP(e,i)&&!this._hasSelectionAttribute){this._preventCaretMovement(t);this._setSelectionAttributeFromTheNodeBefore(e);return true}if(e.isAtEnd&&bP(e,i)){if(this._hasSelectionAttribute){if(_P(e,i)){this._skipNextAutomaticGravityRestoration();this._overrideGravity()}return}else{this._preventCaretMovement(t);this._setSelectionAttributeFromTheNodeBefore(e);return true}}if(e.isAtStart){if(this._hasSelectionAttribute){this._removeSelectionAttribute();this._preventCaretMovement(t);return true}return}if(_P(e,i)){this._skipNextAutomaticGravityRestoration();this._overrideGravity()}}}get _isGravityOverridden(){return!!this._overrideUid}get _hasSelectionAttribute(){return this._modelSelection.hasAttribute(this.attribute)}_overrideGravity(){this._overrideUid=this.model.change(e=>e.overrideSelectionGravity())}_restoreGravity(){this.model.change(e=>{e.restoreSelectionGravity(this._overrideUid);this._overrideUid=null})}_preventCaretMovement(e){e.preventDefault()}_removeSelectionAttribute(){this.model.change(e=>{e.removeSelectionAttribute(this.attribute)})}_setSelectionAttributeFromTheNodeBefore(e){const t=this.attribute;this.model.change(i=>{i.setSelectionAttribute(this.attribute,e.nodeBefore.getAttribute(t))})}_skipNextAutomaticGravityRestoration(){this._isNextGravityRestorationSkipped=true}}function gP(e,t){return pP(e,t)||bP(e,t)}function pP(e,t){const{nodeBefore:i,nodeAfter:n}=e;const o=i?i.hasAttribute(t):false;const r=n?n.hasAttribute(t):false;return r&&(!o||i.getAttribute(t)!==n.getAttribute(t))}function bP(e,t){const{nodeBefore:i,nodeAfter:n}=e;const o=i?i.hasAttribute(t):false;const r=n?n.hasAttribute(t):false;return o&&(!r||i.getAttribute(t)!==n.getAttribute(t))}function wP(e,t){const{nodeBefore:i,nodeAfter:n}=e;const o=i?i.hasAttribute(t):false;const r=n?n.hasAttribute(t):false;if(!r||!o){return}return n.getAttribute(t)!==i.getAttribute(t)}function _P(e,t){return gP(e.getShiftedBy(-1),t)}var kP=i(97);const vP=\"ck-link_selected\";const yP=\"automatic\";const xP=\"manual\";const AP=/^(https?:)?\\/\\//;class CP extends Rw{static get pluginName(){return\"LinkEditing\"}constructor(e){super(e);e.config.define(\"link\",{addTargetToExternalLinks:false})}init(){const e=this.editor;const t=e.locale;e.model.schema.extend(\"$text\",{allowAttributes:\"linkHref\"});e.conversion.for(\"dataDowncast\").attributeToElement({model:\"linkHref\",view:sP});e.conversion.for(\"editingDowncast\").attributeToElement({model:\"linkHref\",view:(e,t)=>sP(aP(e),t)});e.conversion.for(\"upcast\").elementToAttribute({view:{name:\"a\",attributes:{href:true}},model:{key:\"linkHref\",value:e=>e.getAttribute(\"href\")}});e.commands.add(\"link\",new fE(e));e.commands.add(\"unlink\",new mE(e));const i=cP(e.t,dP(e.config.get(\"link.decorators\")));this._enableAutomaticDecorators(i.filter(e=>e.mode===yP));this._enableManualDecorators(i.filter(e=>e.mode===xP));fP({view:e.editing.view,model:e.model,emitter:this,attribute:\"linkHref\",locale:t});this._setupLinkHighlight();this._enableInsertContentSelectionAttributesFixer()}_enableAutomaticDecorators(e){const t=this.editor;const i=new uP;if(t.config.get(\"link.addTargetToExternalLinks\")){i.add({id:\"linkIsExternal\",mode:yP,callback:e=>AP.test(e),attributes:{target:\"_blank\",rel:\"noopener noreferrer\"}})}i.add(e);if(i.length){t.conversion.for(\"downcast\").add(i.getDispatcher())}}_enableManualDecorators(e){if(!e.length){return}const t=this.editor;const i=t.commands.get(\"link\");const n=i.manualDecorators;e.forEach(e=>{t.model.schema.extend(\"$text\",{allowAttributes:e.id});n.add(new hP(e));t.conversion.for(\"downcast\").attributeToElement({model:e.id,view:(t,i)=>{if(t){const t=n.get(e.id).attributes;const o=i.createAttributeElement(\"a\",t,{priority:5});i.setCustomProperty(\"link\",true,o);return o}}});t.conversion.for(\"upcast\").elementToAttribute({view:{name:\"a\",attributes:n.get(e.id).attributes},model:{key:e.id}})})}_setupLinkHighlight(){const e=this.editor;const t=e.editing.view;const i=new Set;t.document.registerPostFixer(t=>{const n=e.model.document.selection;let o=false;if(n.hasAttribute(\"linkHref\")){const r=uE(n.getFirstPosition(),n.getAttribute(\"linkHref\"),e.model);const s=e.editing.mapper.toViewRange(r);for(const e of s.getItems()){if(e.is(\"a\")&&!e.hasClass(vP)){t.addClass(vP,e);i.add(e);o=true}}}return o});e.conversion.for(\"editingDowncast\").add(e=>{e.on(\"insert\",n,{priority:\"highest\"});e.on(\"remove\",n,{priority:\"highest\"});e.on(\"attribute\",n,{priority:\"highest\"});e.on(\"selection\",n,{priority:\"highest\"});function n(){t.change(e=>{for(const t of i.values()){e.removeClass(vP,t);i.delete(t)}})}})}_enableInsertContentSelectionAttributesFixer(){const e=this.editor;const t=e.model;const i=t.document.selection;t.on(\"insertContent\",()=>{const e=i.anchor.nodeBefore;const n=i.anchor.nodeAfter;if(!i.hasAttribute(\"linkHref\")){return}if(!e){return}if(!e.hasAttribute(\"linkHref\")){return}if(n&&n.hasAttribute(\"linkHref\")){return}t.change(e=>{[...t.document.selection.getAttributeKeys()].filter(e=>e.startsWith(\"link\")).forEach(t=>e.removeSelectionAttribute(t))})},{priority:\"low\"})}}class TP extends Ku{constructor(e){super(e);this.domEventType=\"click\"}onDomEvent(e){this.fire(e.type,e)}}var EP=i(99);class PP extends _b{constructor(e,t){super(e);const i=e.t;this.focusTracker=new Ep;this.keystrokes=new mp;this.urlInputView=this._createUrlInput();this.saveButtonView=this._createButton(i(\"Save\"),CA,\"ck-button-save\");this.saveButtonView.type=\"submit\";this.cancelButtonView=this._createButton(i(\"Cancel\"),TA,\"ck-button-cancel\",\"cancel\");this._manualDecoratorSwitches=this._createManualDecoratorSwitches(t);this.children=this._createFormChildren(t.manualDecorators);this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:\"shift + tab\",focusNext:\"tab\"}});const n=[\"ck\",\"ck-link-form\"];if(t.manualDecorators.length){n.push(\"ck-link-form_layout-vertical\")}this.setTemplate({tag:\"form\",attributes:{class:n,tabindex:\"-1\"},children:this.children})}getDecoratorSwitchesState(){return Array.from(this._manualDecoratorSwitches).reduce((e,t)=>{e[t.name]=t.isOn;return e},{})}render(){super.render();AA({view:this});const e=[this.urlInputView,...this._manualDecoratorSwitches,this.saveButtonView,this.cancelButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createUrlInput(){const e=this.locale.t;const t=new _A(this.locale,yA);t.label=e(\"Link URL\");t.fieldView.placeholder=\"https://example.com\";return t}_createButton(e,t,i,n){const o=new rw(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:i}});if(n){o.delegate(\"execute\").to(this,n)}return o}_createManualDecoratorSwitches(e){const t=this.createCollection();for(const i of e.manualDecorators){const n=new fw(this.locale);n.set({name:i.id,label:i.label,withText:true});n.bind(\"isOn\").toMany([i,e],\"value\",(e,t)=>t===undefined&&e===undefined?i.defaultValue:e);n.on(\"execute\",()=>{i.set(\"value\",!n.isOn)});t.add(n)}return t}_createFormChildren(e){const t=this.createCollection();t.add(this.urlInputView);if(e.length){const e=new _b;e.setTemplate({tag:\"ul\",children:this._manualDecoratorSwitches.map(e=>({tag:\"li\",children:[e],attributes:{class:[\"ck\",\"ck-list__item\"]}})),attributes:{class:[\"ck\",\"ck-reset\",\"ck-list\"]}});t.add(e)}t.add(this.saveButtonView);t.add(this.cancelButtonView);return t}}var MP='';var SP='';var IP=i(101);class LP extends _b{constructor(e){super(e);const t=e.t;this.focusTracker=new Ep;this.keystrokes=new mp;this.previewButtonView=this._createPreviewButton();this.unlinkButtonView=this._createButton(t(\"Unlink\"),MP,\"unlink\");this.editButtonView=this._createButton(t(\"Edit link\"),SP,\"edit\");this.set(\"href\");this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:\"shift + tab\",focusNext:\"tab\"}});this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-link-actions\"],tabindex:\"-1\"},children:[this.previewButtonView,this.editButtonView,this.unlinkButtonView]})}render(){super.render();const e=[this.previewButtonView,this.editButtonView,this.unlinkButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createButton(e,t,i){const n=new rw(this.locale);n.set({label:e,icon:t,tooltip:true});n.delegate(\"execute\").to(this,i);return n}_createPreviewButton(){const e=new rw(this.locale);const t=this.bindTemplate;const i=this.t;e.set({withText:true,tooltip:i(\"Open link in new tab\")});e.extendTemplate({attributes:{class:[\"ck\",\"ck-link-actions__preview\"],href:t.to(\"href\",e=>e&&aP(e)),target:\"_blank\",rel:\"noopener noreferrer\"}});e.bind(\"label\").to(this,\"href\",e=>e||i(\"This link has no URL\"));e.bind(\"isEnabled\").to(this,\"href\",e=>!!e);e.template.tag=\"a\";e.template.eventListeners={};return e}}var NP='';const OP=\"Ctrl+K\";class RP extends Rw{static get requires(){return[OA]}static get pluginName(){return\"LinkUI\"}init(){const e=this.editor;e.editing.view.addObserver(TP);this.actionsView=this._createActionsView();this.formView=this._createFormView();this._balloon=e.plugins.get(OA);this._createToolbarLinkButton();this._enableUserBalloonInteractions()}destroy(){super.destroy();this.formView.destroy()}_createActionsView(){const e=this.editor;const t=new LP(e.locale);const i=e.commands.get(\"link\");const n=e.commands.get(\"unlink\");t.bind(\"href\").to(i,\"value\");t.editButtonView.bind(\"isEnabled\").to(i);t.unlinkButtonView.bind(\"isEnabled\").to(n);this.listenTo(t,\"edit\",()=>{this._addFormView()});this.listenTo(t,\"unlink\",()=>{e.execute(\"unlink\");this._hideUI()});t.keystrokes.set(\"Esc\",(e,t)=>{this._hideUI();t()});t.keystrokes.set(OP,(e,t)=>{this._addFormView();t()});return t}_createFormView(){const e=this.editor;const t=e.commands.get(\"link\");const i=new PP(e.locale,t);i.urlInputView.fieldView.bind(\"value\").to(t,\"value\");i.urlInputView.bind(\"isReadOnly\").to(t,\"isEnabled\",e=>!e);i.saveButtonView.bind(\"isEnabled\").to(t);this.listenTo(i,\"submit\",()=>{e.execute(\"link\",i.urlInputView.fieldView.element.value,i.getDecoratorSwitchesState());this._closeFormView()});this.listenTo(i,\"cancel\",()=>{this._closeFormView()});i.keystrokes.set(\"Esc\",(e,t)=>{this._closeFormView();t()});return i}_createToolbarLinkButton(){const e=this.editor;const t=e.commands.get(\"link\");const i=e.t;e.keystrokes.set(OP,(e,t)=>{t();this._showUI(true)});e.ui.componentFactory.add(\"link\",e=>{const n=new rw(e);n.isEnabled=true;n.label=i(\"Link\");n.icon=NP;n.keystroke=OP;n.tooltip=true;n.isToggleable=true;n.bind(\"isEnabled\").to(t,\"isEnabled\");n.bind(\"isOn\").to(t,\"value\",e=>!!e);this.listenTo(n,\"execute\",()=>this._showUI(true));return n})}_enableUserBalloonInteractions(){const e=this.editor.editing.view.document;this.listenTo(e,\"click\",()=>{const e=this._getSelectedLinkElement();if(e){this._showUI()}});this.editor.keystrokes.set(\"Tab\",(e,t)=>{if(this._areActionsVisible&&!this.actionsView.focusTracker.isFocused){this.actionsView.focus();t()}},{priority:\"high\"});this.editor.keystrokes.set(\"Esc\",(e,t)=>{if(this._isUIVisible){this._hideUI();t()}});mw({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:[this._balloon.view.element],callback:()=>this._hideUI()})}_addActionsView(){if(this._areActionsInPanel){return}this._balloon.add({view:this.actionsView,position:this._getBalloonPositionData()})}_addFormView(){if(this._isFormInPanel){return}const e=this.editor;const t=e.commands.get(\"link\");this._balloon.add({view:this.formView,position:this._getBalloonPositionData()});if(this._balloon.visibleView===this.formView){this.formView.urlInputView.fieldView.select()}this.formView.urlInputView.fieldView.element.value=t.value||\"\"}_closeFormView(){const e=this.editor.commands.get(\"link\");e.restoreManualDecoratorStates();if(e.value!==undefined){this._removeFormView()}else{this._hideUI()}}_removeFormView(){if(this._isFormInPanel){this.formView.saveButtonView.focus();this._balloon.remove(this.formView);this.editor.editing.view.focus()}}_showUI(e=false){if(!this._getSelectedLinkElement()){this._addActionsView();if(e){this._balloon.showStack(\"main\")}this._addFormView()}else{if(this._areActionsVisible){this._addFormView()}else{this._addActionsView()}if(e){this._balloon.showStack(\"main\")}}this._startUpdatingUI()}_hideUI(){if(!this._isUIInPanel){return}const e=this.editor;this.stopListening(e.ui,\"update\");this.stopListening(this._balloon,\"change:visibleView\");e.editing.view.focus();this._removeFormView();this._balloon.remove(this.actionsView)}_startUpdatingUI(){const e=this.editor;const t=e.editing.view.document;let i=this._getSelectedLinkElement();let n=r();const o=()=>{const e=this._getSelectedLinkElement();const t=r();if(i&&!e||!i&&t!==n){this._hideUI()}else if(this._isUIVisible){this._balloon.updatePosition(this._getBalloonPositionData())}i=e;n=t};function r(){return t.selection.focus.getAncestors().reverse().find(e=>e.is(\"element\"))}this.listenTo(e.ui,\"update\",o);this.listenTo(this._balloon,\"change:visibleView\",o)}get _isFormInPanel(){return this._balloon.hasView(this.formView)}get _areActionsInPanel(){return this._balloon.hasView(this.actionsView)}get _areActionsVisible(){return this._balloon.visibleView===this.actionsView}get _isUIInPanel(){return this._isFormInPanel||this._areActionsInPanel}get _isUIVisible(){const e=this._balloon.visibleView;return e==this.formView||this._areActionsVisible}_getBalloonPositionData(){const e=this.editor.editing.view;const t=e.document;const i=this._getSelectedLinkElement();const n=i?e.domConverter.mapViewToDom(i):e.domConverter.viewRangeToDom(t.selection.getFirstRange());return{target:n}}_getSelectedLinkElement(){const e=this.editor.editing.view;const t=e.document.selection;if(t.isCollapsed){return zP(t.getFirstPosition())}else{const i=t.getFirstRange().getTrimmed();const n=zP(i.start);const o=zP(i.end);if(!n||n!=o){return null}if(e.createRangeIn(n).getTrimmed().isEqual(i)){return n}else{return null}}}}function zP(e){return e.getAncestors().find(e=>rP(e))}class DP extends Rw{static get requires(){return[CP,RP]}static get pluginName(){return\"Link\"}}class jP extends Dw{constructor(e,t){super(e);this.type=t}refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(){const e=this.editor.model;const t=e.document;const i=Array.from(t.selection.getSelectedBlocks()).filter(t=>VP(t,e.schema));const n=this.value===true;e.change(e=>{if(n){let t=i[i.length-1].nextSibling;let n=Number.POSITIVE_INFINITY;let o=[];while(t&&t.name==\"listItem\"&&t.getAttribute(\"listIndent\")!==0){const e=t.getAttribute(\"listIndent\");if(e=i){if(r>o.getAttribute(\"listIndent\")){r=o.getAttribute(\"listIndent\")}if(o.getAttribute(\"listIndent\")==r){e[t?\"unshift\":\"push\"](o)}o=o[t?\"previousSibling\":\"nextSibling\"]}}}function VP(e,t){return t.checkChild(e.parent,\"listItem\")&&!t.isObject(e)}class FP extends Dw{constructor(e,t){super(e);this._indentBy=t==\"forward\"?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor.model;const t=e.document;let i=Array.from(t.selection.getSelectedBlocks());e.change(e=>{const t=i[i.length-1];let n=t.nextSibling;while(n&&n.name==\"listItem\"&&n.getAttribute(\"listIndent\")>t.getAttribute(\"listIndent\")){i.push(n);n=n.nextSibling}if(this._indentBy<0){i=i.reverse()}for(const t of i){const i=t.getAttribute(\"listIndent\")+this._indentBy;if(i<0){e.rename(t,\"paragraph\")}else{e.setAttribute(\"listIndent\",i,t)}}})}_checkEnabled(){const e=Bw(this.editor.model.document.selection.getSelectedBlocks());if(!e||!e.is(\"listItem\")){return false}if(this._indentBy>0){const t=e.getAttribute(\"listIndent\");const i=e.getAttribute(\"listType\");let n=e.previousSibling;while(n&&n.is(\"listItem\")&&n.getAttribute(\"listIndent\")>=t){if(n.getAttribute(\"listIndent\")==t){return n.getAttribute(\"listType\")==i}n=n.previousSibling}return false}return true}}function HP(e){const t=e.createContainerElement(\"li\");t.getFillerOffset=KP;return t}function WP(e,t){const i=t.mapper;const n=t.writer;const o=e.getAttribute(\"listType\")==\"numbered\"?\"ol\":\"ul\";const r=HP(n);const s=n.createContainerElement(o,null);n.insert(n.createPositionAt(s,0),r);i.bindElements(e,r);return r}function UP(e,t,i,n){const o=t.parent;const r=i.mapper;const s=i.writer;let a=r.toViewPosition(n.createPositionBefore(e));const l=GP(e.previousSibling,{sameIndent:true,smallerIndent:true,listIndent:e.getAttribute(\"listIndent\")});const c=e.previousSibling;if(l&&l.getAttribute(\"listIndent\")==e.getAttribute(\"listIndent\")){const e=r.toViewElement(l);a=s.breakContainer(s.createPositionAfter(e))}else{if(c&&c.name==\"listItem\"){a=r.toViewPosition(n.createPositionAt(c,\"end\"))}else{a=r.toViewPosition(n.createPositionBefore(e))}}a=$P(a);s.insert(a,o);if(c&&c.name==\"listItem\"){const e=r.toViewElement(c);const i=s.createRange(s.createPositionAt(e,0),a);const n=i.getWalker({ignoreElementEnd:true});for(const e of n){if(e.item.is(\"li\")){const i=s.breakContainer(s.createPositionBefore(e.item));const o=e.item.parent;const r=s.createPositionAt(t,\"end\");qP(s,r.nodeBefore,r.nodeAfter);s.move(s.createRangeOn(o),r);n.position=i}}}else{const i=o.nextSibling;if(i&&(i.is(\"ul\")||i.is(\"ol\"))){let n=null;for(const t of i.getChildren()){const i=r.toModelElement(t);if(i&&i.getAttribute(\"listIndent\")>e.getAttribute(\"listIndent\")){n=t}else{break}}if(n){s.breakContainer(s.createPositionAfter(n));s.move(s.createRangeOn(n.parent),s.createPositionAt(t,\"end\"))}}}qP(s,o,o.nextSibling);qP(s,o.previousSibling,o)}function qP(e,t,i){if(!t||!i||t.name!=\"ul\"&&t.name!=\"ol\"){return null}if(t.name!=i.name||t.getAttribute(\"class\")!==i.getAttribute(\"class\")){return null}return e.mergeContainers(e.createPositionAfter(t))}function $P(e){return e.getLastMatchingPosition(e=>e.item.is(\"uiElement\"))}function GP(e,t){const i=!!t.sameIndent;const n=!!t.smallerIndent;const o=t.listIndent;let r=e;while(r&&r.name==\"listItem\"){const e=r.getAttribute(\"listIndent\");if(i&&o==e||n&&o>e){return r}r=r.previousSibling}return null}function YP(e,t,i,n){e.ui.componentFactory.add(t,o=>{const r=e.commands.get(t);const s=new rw(o);s.set({label:i,icon:n,tooltip:true,isToggleable:true});s.bind(\"isOn\",\"isEnabled\").to(r,\"value\",\"isEnabled\");s.on(\"execute\",()=>{e.execute(t);e.editing.view.focus()});return s})}function KP(){const e=!this.isEmpty&&(this.getChild(0).name==\"ul\"||this.getChild(0).name==\"ol\");if(this.isEmpty||e){return 0}return Wl.call(this)}function JP(e){return(t,i,n)=>{const o=n.consumable;if(!o.test(i.item,\"insert\")||!o.test(i.item,\"attribute:listType\")||!o.test(i.item,\"attribute:listIndent\")){return}o.consume(i.item,\"insert\");o.consume(i.item,\"attribute:listType\");o.consume(i.item,\"attribute:listIndent\");const r=i.item;const s=WP(r,n);UP(r,s,n,e)}}function QP(e){return(t,i,n)=>{const o=n.mapper.toViewPosition(i.position).getLastMatchingPosition(e=>!e.item.is(\"li\"));const r=o.nodeAfter;const s=n.writer;s.breakContainer(s.createPositionBefore(r));s.breakContainer(s.createPositionAfter(r));const a=r.parent;const l=a.previousSibling;const c=s.createRangeOn(a);const d=s.remove(c);if(l&&l.nextSibling){qP(s,l,l.nextSibling)}const u=n.mapper.toModelElement(r);hM(u.getAttribute(\"listIndent\")+1,i.position,c.start,r,n,e);for(const e of s.createRangeIn(d).getItems()){n.mapper.unbindViewElement(e)}t.stop()}}function ZP(e,t,i){if(!i.consumable.consume(t.item,\"attribute:listType\")){return}const n=i.mapper.toViewElement(t.item);const o=i.writer;o.breakContainer(o.createPositionBefore(n));o.breakContainer(o.createPositionAfter(n));const r=n.parent;const s=t.attributeNewValue==\"numbered\"?\"ol\":\"ul\";o.rename(s,r)}function XP(e,t,i){const n=i.mapper.toViewElement(t.item);const o=n.parent;const r=i.writer;qP(r,o,o.nextSibling);qP(r,o.previousSibling,o);for(const e of t.item.getChildren()){i.consumable.consume(e,\"insert\")}}function eM(e){return(t,i,n)=>{if(!n.consumable.consume(i.item,\"attribute:listIndent\")){return}const o=n.mapper.toViewElement(i.item);const r=n.writer;r.breakContainer(r.createPositionBefore(o));r.breakContainer(r.createPositionAfter(o));const s=o.parent;const a=s.previousSibling;const l=r.createRangeOn(s);r.remove(l);if(a&&a.nextSibling){qP(r,a,a.nextSibling)}hM(i.attributeOldValue+1,i.range.start,l.start,o,n,e);UP(i.item,o,n,e);for(const e of i.item.getChildren()){n.consumable.consume(e,\"insert\")}}}function tM(e,t,i){if(t.item.name!=\"listItem\"){let e=i.mapper.toViewPosition(t.range.start);const n=i.writer;const o=[];while(e.parent.name==\"ul\"||e.parent.name==\"ol\"){e=n.breakContainer(e);if(e.parent.name!=\"li\"){break}const t=e;const i=n.createPositionAt(e.parent,\"end\");if(!t.isEqual(i)){const e=n.remove(n.createRange(t,i));o.push(e)}e=n.createPositionAfter(e.parent)}if(o.length>0){for(let t=0;t0){const t=qP(n,i,i.nextSibling);if(t&&t.parent==i){e.offset--}}}qP(n,e.nodeBefore,e.nodeAfter)}}}function iM(e,t,i){const n=i.mapper.toViewPosition(t.position);const o=n.nodeBefore;const r=n.nodeAfter;qP(i.writer,o,r)}function nM(e,t,i){if(i.consumable.consume(t.viewItem,{name:true})){const e=i.writer;const n=e.createElement(\"listItem\");const o=mM(t.viewItem);e.setAttribute(\"listIndent\",o,n);const r=t.viewItem.parent&&t.viewItem.parent.name==\"ol\"?\"numbered\":\"bulleted\";e.setAttribute(\"listType\",r,n);const s=i.splitToAllowedParent(n,t.modelCursor);if(!s){return}e.insert(n,s.position);const a=dM(n,t.viewItem.getChildren(),i);t.modelRange=e.createRange(t.modelCursor,a);if(s.cursorParent){t.modelCursor=e.createPositionAt(s.cursorParent,0)}else{t.modelCursor=t.modelRange.end}}}function oM(e,t,i){if(i.consumable.test(t.viewItem,{name:true})){const e=Array.from(t.viewItem.getChildren());for(const t of e){const e=!(t.is(\"li\")||fM(t));if(e){t._remove()}}}}function rM(e,t,i){if(i.consumable.test(t.viewItem,{name:true})){if(t.viewItem.childCount===0){return}const e=[...t.viewItem.getChildren()];let i=false;let n=true;for(const t of e){if(i&&!fM(t)){t._remove()}if(t.is(\"text\")){if(n){t._data=t.data.replace(/^\\s+/,\"\")}if(!t.nextSibling||fM(t.nextSibling)){t._data=t.data.replace(/\\s+$/,\"\")}}else if(fM(t)){i=true}n=false}}}function sM(e){return(t,i)=>{if(i.isPhantom){return}const n=i.modelPosition.nodeBefore;if(n&&n.is(\"listItem\")){const t=i.mapper.toViewElement(n);const o=t.getAncestors().find(fM);const r=e.createPositionAt(t,0).getWalker();for(const e of r){if(e.type==\"elementStart\"&&e.item.is(\"li\")){i.viewPosition=e.previousPosition;break}else if(e.type==\"elementEnd\"&&e.item==o){i.viewPosition=e.nextPosition;break}}}}}function aM(e){return(t,i)=>{const n=i.viewPosition;const o=n.parent;const r=i.mapper;if(o.name==\"ul\"||o.name==\"ol\"){if(!n.isAtEnd){const t=r.toModelElement(n.nodeAfter);i.modelPosition=e.createPositionBefore(t)}else{const t=r.toModelElement(n.nodeBefore);const o=r.getModelLength(n.nodeBefore);i.modelPosition=e.createPositionBefore(t).getShiftedBy(o)}t.stop()}else if(o.name==\"li\"&&n.nodeBefore&&(n.nodeBefore.name==\"ul\"||n.nodeBefore.name==\"ol\")){const s=r.toModelElement(o);let a=1;let l=n.nodeBefore;while(l&&fM(l)){a+=r.getModelLength(l);l=l.previousSibling}i.modelPosition=e.createPositionBefore(s).getShiftedBy(a);t.stop()}}}function lM(e,t){const i=e.document.differ.getChanges();const n=new Map;let o=false;for(const n of i){if(n.type==\"insert\"&&n.name==\"listItem\"){r(n.position)}else if(n.type==\"insert\"&&n.name!=\"listItem\"){if(n.name!=\"$text\"){const i=n.position.nodeAfter;if(i.hasAttribute(\"listIndent\")){t.removeAttribute(\"listIndent\",i);o=true}if(i.hasAttribute(\"listType\")){t.removeAttribute(\"listType\",i);o=true}for(const t of Array.from(e.createRangeIn(i)).filter(e=>e.item.is(\"listItem\"))){r(t.previousPosition)}}const i=n.position.getShiftedBy(n.length);r(i)}else if(n.type==\"remove\"&&n.name==\"listItem\"){r(n.position)}else if(n.type==\"attribute\"&&n.attributeKey==\"listIndent\"){r(n.range.start)}else if(n.type==\"attribute\"&&n.attributeKey==\"listType\"){r(n.range.start)}}for(const e of n.values()){s(e);a(e)}return o;function r(e){const t=e.nodeBefore;if(!t||!t.is(\"listItem\")){const t=e.nodeAfter;if(t&&t.is(\"listItem\")){n.set(t,t)}}else{let e=t;if(n.has(e)){return}for(let t=e.previousSibling;t&&t.is(\"listItem\");t=e.previousSibling){e=t;if(n.has(e)){return}}n.set(t,e)}}function s(e){let i=0;let n=null;while(e&&e.is(\"listItem\")){const r=e.getAttribute(\"listIndent\");if(r>i){let s;if(n===null){n=r-i;s=i}else{if(n>r){n=r}s=r-n}t.setAttribute(\"listIndent\",s,e);o=true}else{n=null;i=e.getAttribute(\"listIndent\")+1}e=e.nextSibling}}function a(e){let i=[];let n=null;while(e&&e.is(\"listItem\")){const r=e.getAttribute(\"listIndent\");if(n&&n.getAttribute(\"listIndent\")>r){i=i.slice(0,r+1)}if(r!=0){if(i[r]){const n=i[r];if(e.getAttribute(\"listType\")!=n){t.setAttribute(\"listType\",n,e);o=true}}else{i[r]=e.getAttribute(\"listType\")}}n=e;e=e.nextSibling}}}function cM(e,[t,i]){let n=t.is(\"documentFragment\")?t.getChild(0):t;let o;if(!i){o=this.document.selection}else{o=this.createSelection(i)}if(n&&n.is(\"listItem\")){const e=o.getFirstPosition();let t=null;if(e.parent.is(\"listItem\")){t=e.parent}else if(e.nodeBefore&&e.nodeBefore.is(\"listItem\")){t=e.nodeBefore}if(t){const e=t.getAttribute(\"listIndent\");if(e>0){while(n&&n.is(\"listItem\")){n._setAttribute(\"listIndent\",n.getAttribute(\"listIndent\")+e);n=n.nextSibling}}}}}function dM(e,t,i){const{writer:n,schema:o}=i;let r=n.createPositionAfter(e);for(const s of t){if(s.name==\"ul\"||s.name==\"ol\"){r=i.convertItem(s,r).modelCursor}else{const t=i.convertItem(s,n.createPositionAt(e,\"end\"));const a=t.modelRange.start.nodeAfter;const l=a&&a.is(\"element\")&&!o.checkChild(e,a.name);if(l){if(t.modelCursor.parent.is(\"listItem\")){e=t.modelCursor.parent}else{e=uM(t.modelCursor)}r=n.createPositionAfter(e)}}}return r}function uM(e){const t=new Wh({startPosition:e});let i;do{i=t.next()}while(!i.value.item.is(\"listItem\"));return i.value.item}function hM(e,t,i,n,o,r){const s=GP(t.nodeBefore,{sameIndent:true,smallerIndent:true,listIndent:e,foo:\"b\"});const a=o.mapper;const l=o.writer;const c=s?s.getAttribute(\"listIndent\"):null;let d;if(!s){d=i}else if(c==e){const e=a.toViewElement(s).parent;d=l.createPositionAfter(e)}else{const e=r.createPositionAt(s,\"end\");d=a.toViewPosition(e)}d=$P(d);for(const e of[...n.getChildren()]){if(fM(e)){d=l.move(l.createRangeOn(e),d).end;qP(l,e,e.nextSibling);qP(l,e.previousSibling,e)}}}function fM(e){return e.is(\"ol\")||e.is(\"ul\")}function mM(e){let t=0;let i=e.parent;while(i){if(i.is(\"li\")){t++}else{const e=i.previousSibling;if(e&&e.is(\"li\")){t++}}i=i.parent}return t}class gM extends Rw{static get pluginName(){return\"ListEditing\"}static get requires(){return[Ty]}init(){const e=this.editor;e.model.schema.register(\"listItem\",{inheritAllFrom:\"$block\",allowAttributes:[\"listType\",\"listIndent\"]});const t=e.data;const i=e.editing;e.model.document.registerPostFixer(t=>lM(e.model,t));i.mapper.registerViewToModelLength(\"li\",pM);t.mapper.registerViewToModelLength(\"li\",pM);i.mapper.on(\"modelToViewPosition\",sM(i.view));i.mapper.on(\"viewToModelPosition\",aM(e.model));t.mapper.on(\"modelToViewPosition\",sM(i.view));e.conversion.for(\"editingDowncast\").add(t=>{t.on(\"insert\",tM,{priority:\"high\"});t.on(\"insert:listItem\",JP(e.model));t.on(\"attribute:listType:listItem\",ZP,{priority:\"high\"});t.on(\"attribute:listType:listItem\",XP,{priority:\"low\"});t.on(\"attribute:listIndent:listItem\",eM(e.model));t.on(\"remove:listItem\",QP(e.model));t.on(\"remove\",iM,{priority:\"low\"})});e.conversion.for(\"dataDowncast\").add(t=>{t.on(\"insert\",tM,{priority:\"high\"});t.on(\"insert:listItem\",JP(e.model))});e.conversion.for(\"upcast\").add(e=>{e.on(\"element:ul\",oM,{priority:\"high\"});e.on(\"element:ol\",oM,{priority:\"high\"});e.on(\"element:li\",rM,{priority:\"high\"});e.on(\"element:li\",nM)});e.model.on(\"insertContent\",cM,{priority:\"high\"});e.commands.add(\"numberedList\",new jP(e,\"numbered\"));e.commands.add(\"bulletedList\",new jP(e,\"bulleted\"));e.commands.add(\"indentList\",new FP(e,\"forward\"));e.commands.add(\"outdentList\",new FP(e,\"backward\"));const n=i.view.document;this.listenTo(n,\"enter\",(e,t)=>{const i=this.editor.model.document;const n=i.selection.getLastPosition().parent;if(i.selection.isCollapsed&&n.name==\"listItem\"&&n.isEmpty){this.editor.execute(\"outdentList\");t.preventDefault();e.stop()}});this.listenTo(n,\"delete\",(e,t)=>{if(t.direction!==\"backward\"){return}const i=this.editor.model.document.selection;if(!i.isCollapsed){return}const n=i.getFirstPosition();if(!n.isAtStart){return}const o=n.parent;if(o.name!==\"listItem\"){return}const r=o.previousSibling&&o.previousSibling.name===\"listItem\";if(r){return}this.editor.execute(\"outdentList\");t.preventDefault();e.stop()},{priority:\"high\"});const o=e=>(t,i)=>{const n=this.editor.commands.get(e);if(n.isEnabled){this.editor.execute(e);i()}};e.keystrokes.set(\"Tab\",o(\"indentList\"));e.keystrokes.set(\"Shift+Tab\",o(\"outdentList\"))}afterInit(){const e=this.editor.commands;const t=e.get(\"indent\");const i=e.get(\"outdent\");if(t){t.registerChildCommand(e.get(\"indentList\"))}if(i){i.registerChildCommand(e.get(\"outdentList\"))}}}function pM(e){let t=1;for(const i of e.getChildren()){if(i.name==\"ul\"||i.name==\"ol\"){for(const e of i.getChildren()){t+=pM(e)}}}return t}var bM='';var wM='';class _M extends Rw{init(){const e=this.editor.t;YP(this.editor,\"numberedList\",e(\"Numbered List\"),bM);YP(this.editor,\"bulletedList\",e(\"Bulleted List\"),wM)}}class kM extends Rw{static get requires(){return[gM,_M]}static get pluginName(){return\"List\"}}class vM{constructor(e,t={}){this.namespaces=t.namespaces||[];this._domParser=new DOMParser;this._domConverter=new Dd(e,{blockFillerMode:\"nbsp\"});this._htmlWriter=new xp}toData(e){const t=this._domConverter.viewToDom(e,document);return this._htmlWriter.getHtml(t)}toView(e){const t=this._toDom(e);return this._domConverter.domToView(t,{keepOriginalCase:true})}_toDom(e){const t=this.namespaces.map(e=>`xmlns:${e}=\"nsp\"`).join(\" \");e=`${e}`;const i=this._domParser.parseFromString(e,\"text/xml\");const n=i.querySelector(\"parsererror\");if(n){throw new Error(\"Parse error - \"+n.textContent)}const o=i.createDocumentFragment();const r=i.documentElement.childNodes;while(r.length>0){o.appendChild(r[0])}return o}}class yM{static get safeXmlCharactersEntities(){return{tagOpener:\"«\",tagCloser:\"»\",doubleQuote:\"¨\",realDoubleQuote:\""\"}}static get safeBadBlackboardCharacters(){return{ltElement:\"«mo»<«/mo»\",gtElement:\"«mo»>«/mo»\",ampElement:\"«mo»&«/mo»\"}}static get safeGoodBlackboardCharacters(){return{ltElement:\"«mo»§lt;«/mo»\",gtElement:\"«mo»§gt;«/mo»\",ampElement:\"«mo»§amp;«/mo»\"}}static get xmlCharacters(){return{id:\"xmlCharacters\",tagOpener:\"<\",tagCloser:\">\",doubleQuote:'\"',ampersand:\"&\",quote:\"'\"}}static get safeXmlCharacters(){return{id:\"safeXmlCharacters\",tagOpener:\"«\",tagCloser:\"»\",doubleQuote:\"¨\",ampersand:\"§\",quote:\"`\",realDoubleQuote:\"¨\"}}}class xM{static isMathmlInAttribute(e,t){const i=\"['\\\"][\\\\s]*=[\\\\s]*[\\\\w-]+\";const n=\"\\\"[^\\\"]*\\\"|'[^']*'\";const o=`[\\\\s]*(${n})[\\\\s]*=[\\\\s]*[\\\\w-]+[\\\\s]*`;const r=`('${o}')*`;const s=`^${i}${r}[\\\\s]+gmi<`;const a=new RegExp(s);const l=e.substring(0,t);const c=l.split(\"\").reverse().join(\"\");const d=a.test(c);return d}static safeXmlDecode(e){let{tagOpener:t}=yM.safeXmlCharactersEntities;let{tagCloser:i}=yM.safeXmlCharactersEntities;let{doubleQuote:n}=yM.safeXmlCharactersEntities;let{realDoubleQuote:o}=yM.safeXmlCharactersEntities;e=e.split(t).join(yM.safeXmlCharacters.tagOpener);e=e.split(i).join(yM.safeXmlCharacters.tagCloser);e=e.split(n).join(yM.safeXmlCharacters.doubleQuote);e=e.split(o).join(yM.safeXmlCharacters.realDoubleQuote);const{ltElement:r}=yM.safeBadBlackboardCharacters;const{gtElement:s}=yM.safeBadBlackboardCharacters;const{ampElement:a}=yM.safeBadBlackboardCharacters;if(\"_wrs_blackboard\"in window&&window._wrs_blackboard){e=e.split(r).join(yM.safeGoodBlackboardCharacters.ltElement);e=e.split(s).join(yM.safeGoodBlackboardCharacters.gtElement);e=e.split(a).join(yM.safeGoodBlackboardCharacters.ampElement)}({tagOpener:t}=yM.safeXmlCharacters);({tagCloser:i}=yM.safeXmlCharacters);({doubleQuote:n}=yM.safeXmlCharacters);({realDoubleQuote:o}=yM.safeXmlCharacters);const{ampersand:l}=yM.safeXmlCharacters;const{quote:c}=yM.safeXmlCharacters;e=e.split(t).join(yM.xmlCharacters.tagOpener);e=e.split(i).join(yM.xmlCharacters.tagCloser);e=e.split(n).join(yM.xmlCharacters.doubleQuote);e=e.split(l).join(yM.xmlCharacters.ampersand);e=e.split(c).join(yM.xmlCharacters.quote);let d=\"\";let u=null;for(let t=0;t128){t+=`&#${e.codePointAt(i)};`;if(e.codePointAt(i)>65535){i+=1}}else if(n===\"&\"){const o=e.indexOf(\";\",i+1);if(o>=0){const n=document.createElement(\"span\");n.innerHTML=e.substring(i,o+1);t+=`&#${IM.fixedCharCodeAt(n.textContent||n.innerText,0)};`;i=o}else{t+=n}}else{t+=n}}return t}static addCustomEditorClassAttribute(e,t){let i=\"\";const n=e.indexOf(\"\");if(e.indexOf(\"class\")===-1){i=`${e.substr(n,o)} class=\"wrs_${t}\">`;i+=e.substr(o+1,e.length);return i}}return e}static removeCustomEditorClassAttribute(e,t){if(e.indexOf(\"class\")===-1||e.indexOf(`wrs_${t}`)===-1){return e}if(e.indexOf(`class=\"wrs_${t}\"`)!==-1){return e.replace(`class=\"wrs_${t}\"`,\"\")}return e.replace(`wrs_${t}`,\"\")}static addAnnotation(e,t,i){const n=e.indexOf(\"\");o=`${e.substring(0,n)}${t}${e.substring(n)}`}else if(xM.isEmpty(e)){const n=e.indexOf(\"/>\");const r=e.indexOf(\">\");const s=r===n?n:r;o=`${e.substring(0,s)}>${t}`}else{const n=e.indexOf(\">\")+1;const r=e.lastIndexOf(\"\");const s=e.substring(n,r);o=`${e.substring(0,n)}${s}${t}`}return o}static removeAnnotation(e,t){let i=e;const n=``;const o=\"\";const r=e.indexOf(n);if(r!==-1){let t=false;let n=e.indexOf(\"\";const i=\"\";const n=\"\",i);const o=e.substring(i,n);if(o.indexOf(t)!==-1){return true}return false}static isEmpty(e){const t=\">\";const i=\"/>\";const n=e.indexOf(t);const o=e.indexOf(i);let r=false;if(o!==-1){if(o===n-1){r=true}}if(!r){const t=new RegExp(\"\");const i=t.exec(e);if(i){r=n+1===i.index}}return r}static encodeProperties(e){const t=/\\w+=\".*?\"/g;const i=e=>{const t=e.indexOf('\"');const i=e.substring(t+1,e.length-1);const n=IM.htmlEntities(i);const o=`${e.substring(0,t+1)}${n}\"`;return o};const n=e.replace(t,i);return n}}class AM{static addConfiguration(e){Object.assign(AM.properties,e)}static get properties(){return AM._properties}static set properties(e){AM._properties=e}static get(e){if(!Object.prototype.hasOwnProperty.call(AM.properties,e)){if(Object.prototype.hasOwnProperty.call(AM.properties,\"_wrs_conf_\")){return AM.properties[`_wrs_conf_${e}`]}return false}return AM.properties[e]}static set(e,t){AM.properties[e]=t}static update(e,t){if(!AM.get(e)){AM.set(e,t)}else{const i=Object.assign(AM.get(e),t);AM.set(e,i)}}}AM._properties={};class CM{constructor(){this.cache=[]}populate(e,t){this.cache[e]=t}get(e){if(Object.prototype.hasOwnProperty.call(this.cache,e)){return this.cache[e]}return false}}class TM{constructor(){this.listeners=[]}add(e){this.listeners.push(e)}fire(e,t){for(let i=0;i{const i=e||window.event;const n=i.srcElement?i.srcElement:i.target;t(n,i)})}if(i){IM.addEvent(e,\"mousedown\",e=>{const t=e||window.event;const n=t.srcElement?t.srcElement:t.target;i(n,t)})}if(n){IM.addEvent(e,\"mouseup\",e=>{const t=e||window.event;const i=t.srcElement?t.srcElement:t.target;n(i,t)})}}static addClass(e,t){if(!IM.containsClass(e,t)){e.className+=` ${t}`}}static containsClass(e,t){if(e==null||!(\"className\"in e)){return false}const i=e.className.split(\" \");for(let e=i.length-1;e>=0;e-=1){if(i[e]===t){return true}}return false}static removeClass(e,t){let i=\"\";const n=e.className.split(\" \");for(let e=0;e{o+=` ${e}=\"${IM.htmlEntities(t[e])}\"`});o+=\">\";n=i.createElement(o)}catch(o){n=i.createElement(e);Object.keys(t).forEach(e=>{n.setAttribute(e,t[e])})}return n}static createObject(e,t){if(t===undefined){t=document}e=e.split(\"\").join(\"\").split(\"\").join(\"\");e=e.split(\"\").join(\"
    \").split(\"\").join(\"
    \");const i=IM.createElement(\"div\",{},t);i.innerHTML=e;function n(e){if(e.getAttribute&&e.getAttribute(\"wirisObject\")===\"WirisParam\"){const i={};for(let t=0;t0){t+=\">\";for(let i=0;i`}else if(e.nodeName===\"DIV\"||e.nodeName===\"SCRIPT\"){t+=`>`}else{t+=\"/>\"}return t}if(e.nodeType===3){return IM.htmlEntities(e.nodeValue)}return\"\"}static concatenateUrl(e,t){let i=\"\";if(e.indexOf(\"/\")!==e.length&&t.indexOf(\"/\")!==0){i=\"/\"}return(e+i+t).replace(/([^:]\\/)\\/+/g,\"$1\")}static htmlEntities(e){return e.split(\"&\").join(\"&\").split(\"<\").join(\"<\").split(\">\").join(\">\").split('\"').join(\""\")}static htmlEntitiesDecode(e){const t=document.createElement(\"textarea\");t.innerHTML=e;return t.value}static createHttpRequest(){const e=window.location.toString().substr(0,window.location.toString().lastIndexOf(\"/\")+1);if(e.substr(0,7)===\"file://\"){throw SM.get(\"exception_cross_site\")}if(typeof XMLHttpRequest!==\"undefined\"){return new XMLHttpRequest}try{return new ActiveXObject(\"Msxml2.XMLHTTP\")}catch(e){try{return new ActiveXObject(\"Microsoft.XMLHTTP\")}catch(e){return null}}}static httpBuildQuery(e){let t=\"\";Object.keys(e).forEach(i=>{if(e[i]!=null){t+=`${IM.urlEncode(i)}=${IM.urlEncode(e[i])}&`}});if(t.substring(t.length-1)===\"&\"){t=t.substring(0,t.length-1)}return t}static propertiesToString(e){const t=[];Object.keys(e).forEach(i=>{if(Object.prototype.hasOwnProperty.call(e,i)){t.push(i)}});const i=t.length;for(let e=0;e0){t[e]=o;t[n]=i}}}let n=\"\";for(let o=0;oo?o:n;for(i=0;i=55296&&i<=56319){n=i;o=e.charCodeAt(t+1);if(Number.isNaN(o)){throw SM.get(\"exception_high_surrogate\")}return(n-55296)*1024+(o-56320)+65536}if(i>=56320&&i<=57343){return false}return i}static urlToAssArray(e){let t;t=e.indexOf(\"?\");if(t>0){const i=e.substring(t+1);const n=i.split(\"&\");const o={};for(t=0;t1){o[i[0]]=decodeURIComponent(i[1].replace(/\\+/g,\" \"))}}return o}return{}}static urlEncode(e){let t=\"\";t=encodeURIComponent(e);return t}static getWIRISImageOutput(e,t,i){const n=IM.createObject(e);if(n){if(n.className===AM.get(\"imageClassName\")||n.getAttribute(AM.get(\"imageMathmlAttribute\"))){if(!t){return e}const o=n.getAttribute(AM.get(\"imageMathmlAttribute\"));let r=xM.safeXmlDecode(o);if(!AM.get(\"saveHandTraces\")){r=xM.removeAnnotation(r,\"application/json\")}if(r==null){r=n.getAttribute(\"alt\")}if(i){const e=xM.safeXmlEncode(r);return e}return r}}return e}static getNodeLength(e){const t={IMG:1,BR:1};if(e.nodeType===3){return e.nodeValue.length}if(e.nodeType===1){let i=t[e.nodeName.toUpperCase()];if(i===undefined){i=0}for(let t=0;t0){if(i.text.length===0){return IM.getSelectedItem(e,t,true)}return null}n.document.execCommand(\"InsertImage\",false,\"#\");let o=i.parentElement();if(o.nodeName.toUpperCase()!==\"IMG\"){i.pasteHTML('');o=n.document.getElementById(\"wrs_openEditorWindow_temporalObject\")}let r;let s;if(o.nextSibling&&o.nextSibling.nodeType===3){r=o.nextSibling;s=0}else if(o.previousSibling&&o.previousSibling.nodeType===3){r=o.previousSibling;s=r.nodeValue.length}else{r=n.document.createTextNode(\"\");o.parentNode.insertBefore(r,o);s=0}o.parentNode.removeChild(o);return{node:r,caretPosition:s}}if(i.length>1){return null}return{node:i.item(0)}}if(n.getSelection){let e;const t=n.getSelection();try{e=t.getRangeAt(0)}catch(t){e=n.document.createRange()}const i=e.startContainer;if(i.nodeType===3){return{node:i,caretPosition:e.startOffset}}if(i!==e.endContainer){return null}if(i.nodeType===1){const t=e.startOffset;if(i.childNodes[t]){return{node:i.childNodes[t]}}}}return null}static getSelectedItemOnTextarea(e){const t=document.createTextNode(e.value);const i=PM.getLatexFromTextNode(t,e.selectionStart);if(i===null){return null}return{node:t,caretPosition:e.selectionStart,startPosition:i.startPosition,endPosition:i.endPosition}}static getElementsByNameFromString(e,t,i){const n=[];e=e.toLowerCase();t=t.toLowerCase();let o=e.indexOf(`<${t} `);while(o!==-1){let r;if(i){r=\">\"}else{r=``}let s=e.indexOf(r,o);if(s!==-1){s+=r.length;n.push({start:o,end:s})}else{s=o+1}o=e.indexOf(`<${t} `,s)}return n}static decode64(e){const t=\"+\".charCodeAt(0);const i=\"/\".charCodeAt(0);const n=\"0\".charCodeAt(0);const o=\"a\".charCodeAt(0);const r=\"A\".charCodeAt(0);const s=\"-\".charCodeAt(0);const a=\"_\".charCodeAt(0);const l=e.charCodeAt(0);if(l===t||l===s){return 62}if(l===i||l===a){return 63}if(l0){throw new Error(\"Invalid string. Length must be a multiple of 4\")}const n=[];let o;let r;if(!t){if(e.charAt(e.length-2)===\"=\"){r=2}else if(e.charAt(e.length-1)===\"=\"){r=1}else{r=0}o=r>0?e.length-4:e.length}else{o=t}let s;for(s=0;s>16&255);n.push(i>>8&255);n.push(i&255)}if(r){if(r===2){i=IM.decode64(e.charAt(s))<<2|IM.decode64(e.charAt(s+1))>>4;n.push(i&255)}else if(r===1){i=IM.decode64(e.charAt(s))<<10|IM.decode64(e.charAt(s+1))<<4|IM.decode64(e.charAt(s+2))>>2;n.push(i>>8&255);n.push(i&255)}}return n}static readInt32(e){if(e.length<4){return false}const t=e.splice(0,4);return t[0]<<24|t[1]<<16|t[2]<<8|t[3]<<0}static readByte(e){return e.shift()<<0}static readBytes(e,t,i){return e.splice(t,i)}static updateTextArea(e,t){if(e&&t){e.focus();if(e.selectionStart!=null){const{selectionEnd:i}=e;const n=e.value.substring(0,e.selectionStart);const o=e.value.substring(i,e.value.length);e.value=n+t+o;e.selectionEnd=i+t.length}else{const e=document.selection.createRange();e.text=t}}}static updateExistingTextOnTextarea(e,t,i,n){e.focus();const o=e.value.substring(0,i);e.value=o+t+e.value.substring(n,e.value.length);e.selectionEnd=i+t.length}static addArgument(e,t,i){let n;if(e.indexOf(\"?\")>0){n=\"&\"}else{n=\"?\"}return`${e+n+t}=${i}`}}class LM{static removeImgDataAttributes(e){const t=[];const{attributes:i}=e;Object.keys(i).forEach(e=>{const n=i[e];if(n.name.indexOf(\"data-\")===0){t.push(n.name)}});t.forEach(t=>{e.removeAttribute(t)})}static clone(e,t){const i=AM.get(\"imageCustomEditorName\");if(!e.hasAttribute(i)){t.removeAttribute(i)}const n=AM.get(\"imageMathmlAttribute\");const o=[n,i,\"alt\",\"height\",\"width\",\"style\",\"src\",\"role\"];o.forEach(i=>{const n=e.getAttribute(i);if(n){t.setAttribute(i,n)}})}static setImgSize(e,t,i){let n;let o;let r;let s;if(i){if(AM.get(\"imageFormat\")===\"svg\"){if(AM.get(\"saveMode\")!==\"base64\"){n=LM.getMetricsFromSvgString(t)}else{o=e.src.substr(e.src.indexOf(\"base64,\")+7,e.src.length);s=\"\";r=IM.b64ToByteArray(o,o.length);for(let e=0;e=4){n=IM.readInt32(e);if(n===1229472850){t=IM.readInt32(e);i=IM.readInt32(e);IM.readInt32(e);IM.readByte(e)}else if(n===1650545477){o=IM.readInt32(e)}else if(n===1883789683){r=IM.readInt32(e);r=Math.round(r/39.37);IM.readInt32(e);IM.readByte(e)}IM.readInt32(e)}if(typeof t!==\"undefined\"){const e=[];e.cw=t;e.ch=i;e.dpi=r;if(o){e.cb=o}return e}return[]}}class NM{static get cache(){return NM._cache}static set cache(e){NM._cache=e}static mathMLToAccessible(e,t,i){if(typeof t===\"undefined\"){t=\"en\"}if(xM.containClass(e,\"wrs_chemistry\")){i.mode=\"chemistry\"}let n=\"\";if(NM.cache.get(e)){n=NM.cache.get(e)}else{i.service=\"mathml2accessible\";i.lang=t;const o=JSON.parse(EM.getService(\"service\",i));if(o.status!==\"error\"){n=o.result.text;NM.cache.populate(e,n)}else{n=SM.get(\"error_convert_accessibility\")}}return n}}NM._cache=new CM;var OM=i(103);class RM{static mathmlToImgObject(e,t,i,n){const o=e.createElement(\"img\");o.align=\"middle\";o.style.maxWidth=\"none\";const r=i||{};r.mml=t;r.lang=n;r.metrics=\"true\";r.centerbaseline=\"false\";if(AM.get(\"saveMode\")===\"base64\"&&AM.get(\"base64savemode\")===\"default\"){r.base64=true}o.className=AM.get(\"imageClassName\");if(t.indexOf('class=\"')!==-1){let e=t.substring(t.indexOf('class=\"')+'class=\"'.length,t.length);e=e.substring(0,e.indexOf('\"'));e=e.substring(4,e.length);o.setAttribute(AM.get(\"imageCustomEditorName\"),e)}if(AM.get(\"wirisPluginPerformance\")&&(AM.get(\"saveMode\")===\"xml\"||AM.get(\"saveMode\")===\"safeXml\")){let e=JSON.parse(RM.createShowImageSrc(r,n));if(e.status===\"warning\"){try{e=JSON.parse(EM.getService(\"showimage\",r))}catch(e){return null}}({result:e}=e);if(e.format===\"png\"){o.src=`data:image/png;base64,${e.content}`}else{o.src=`data:image/svg+xml;charset=utf8,${IM.urlEncode(e.content)}`}o.setAttribute(AM.get(\"imageMathmlAttribute\"),xM.safeXmlEncode(t));LM.setImgSize(o,e.content,true);if(AM.get(\"enableAccessibility\")){if(typeof e.alt===\"undefined\"){o.alt=NM.mathMLToAccessible(t,n,r)}else{o.alt=e.alt}}}else{const e=RM.createImageSrc(t,r);o.setAttribute(AM.get(\"imageMathmlAttribute\"),xM.safeXmlEncode(t));o.src=e;LM.setImgSize(o,e,AM.get(\"saveMode\")===\"base64\"&&AM.get(\"base64savemode\")===\"default\");if(AM.get(\"enableAccessibility\")){o.alt=NM.mathMLToAccessible(t,n,r)}}if(typeof RM.observer!==\"undefined\"){RM.observer.observe(o)}o.setAttribute(\"role\",\"math\");return o}static createImageSrc(e,t){if(AM.get(\"saveMode\")===\"base64\"&&AM.get(\"base64savemode\")===\"default\"){t.base64=true}let i=EM.getService(\"createimage\",t);if(i.indexOf(\"@BASE@\")!==-1){const e=EM.getServicePath(\"createimage\").split(\"/\");e.pop();i=i.split(\"@BASE@\").join(e.join(\"/\"))}return i}static initParse(e,t){e=RM.initParseSaveMode(e,t);return RM.initParseEditMode(e)}static initParseSaveMode(e,t){if(AM.get(\"saveMode\")){e=PM.parseMathmlToLatex(e,yM.safeXmlCharacters);e=PM.parseMathmlToLatex(e,yM.xmlCharacters);e=RM.parseMathmlToImg(e,yM.safeXmlCharacters,t);e=RM.parseMathmlToImg(e,yM.xmlCharacters,t);if(AM.get(\"saveMode\")===\"base64\"&&AM.get(\"base64savemode\")===\"image\"){e=RM.codeImgTransform(e,\"base642showimage\")}}return e}static initParseEditMode(e){if(AM.get(\"parseModes\").indexOf(\"latex\")!==-1){const t=IM.getElementsByNameFromString(e,\"img\",true);const i='encoding=\"LaTeX\">';let n=0;for(let o=0;o\",d);const s=c.substring(d,r);const a=`$$${IM.htmlEntitiesDecode(s)}$$`;const l=e.substring(0,t[o].start+n);const u=e.substring(t[o].end+n);e=l+a+u;n+=a.length-(t[o].end-t[o].start)}}}}}return e}static endParse(e){const t=RM.endParseEditMode(e);const i=RM.endParseSaveMode(t);return i}static endParseEditMode(e){if(AM.get(\"parseModes\").indexOf(\"latex\")!==-1){let t=\"\";let i=0;let n=e.indexOf(\"$$\");while(n!==-1){t+=e.substring(i,n);i=e.indexOf(\"$$\",n+2);if(i!==-1){const o=e.substring(n+2,i);const r=IM.htmlEntitiesDecode(o);let s=PM.getMathMLFromLatex(r,true);if(!AM.get(\"saveHandTraces\")){s=xM.removeAnnotation(s,\"application/json\")}t+=s;i+=2}else{t+=\"$$\";i=n+2}n=e.indexOf(\"$$\",i)}t+=e.substring(i,e.length);e=t}return e}static endParseSaveMode(e){if(AM.get(\"saveMode\")){if(AM.get(\"saveMode\")===\"safeXml\"){e=RM.codeImgTransform(e,\"img2mathml\")}else if(AM.get(\"saveMode\")===\"xml\"){e=RM.codeImgTransform(e,\"img2mathml\")}else if(AM.get(\"saveMode\")===\"base64\"&&AM.get(\"base64savemode\")===\"image\"){e=RM.codeImgTransform(e,\"img264\")}}return e}static createShowImageSrc(e,t){const i=[];const n=[\"mml\",\"color\",\"centerbaseline\",\"zoom\",\"dpi\",\"fontSize\",\"fontFamily\",\"defaultStretchy\",\"backgroundColor\",\"format\"];n.forEach(t=>{const o=n[t];if(typeof e[o]!==\"undefined\"){i[o]=e[o]}});const o={};Object.keys(e).forEach(t=>{if(t!==\"mml\"){o[t]=e[t]}});o.formula=com.wiris.js.JsPluginTools.md5encode(IM.propertiesToString(i));o.lang=typeof t===\"undefined\"?\"en\":t;o.version=AM.get(\"version\");const r=EM.getService(\"showimage\",IM.httpBuildQuery(o),true);return r}static codeImgTransform(e,t){let i=\"\";let n=0;const o=/\"){n=a+1}a+=1}if(n\",s)}else{a+=r.length}if(!xM.isMathmlInAttribute(e,s)&&l===-1){let o=e.substring(s,a);o=t.id===yM.safeXmlCharacters.id?xM.safeXmlDecode(o):xM.mathMLEntities(o);n+=IM.createObjectCode(RM.mathmlToImgObject(document,o,null,i))}else{n+=e.substring(s,a)}s=e.indexOf(o,a)}n+=e.substring(a,e.length);return n}}if(typeof MutationObserver!==\"undefined\"){const e=new MutationObserver(e=>{e.forEach(e=>{if(e.oldValue===AM.get(\"imageClassName\")&&e.attributeName===\"class\"&&e.target.className.indexOf(AM.get(\"imageClassName\"))===-1){e.target.className=AM.get(\"imageClassName\")}})});RM.observer=Object.create(e);RM.observer.Config={attributes:true,attributeOldValue:true};RM.observer.observe=function e(t){Object.getPrototypeOf(this).observe(t,this.Config)}}class zM{constructor(){this.isContentChanged=false;this.waitingForChanges=false}setIsContentChanged(e){this.isContentChanged=e}getIsContentChanged(){return this.isContentChanged}setWaitingForChanges(e){this.waitingForChanges=e}caretPositionChanged(e){}clipboardChanged(e){}contentChanged(e){if(this.waitingForChanges===true&&this.isContentChanged===false){this.isContentChanged=true}}styleChanged(e){}transformationReceived(e){}}class DM{constructor(e){this.editorAttributes={};if(\"editorAttributes\"in e){this.editorAttributes=e.editorAttributes}else{throw new Error(\"ContentManager constructor error: editorAttributes property missed.\")}this.customEditors=null;if(\"customEditors\"in e){this.customEditors=e.customEditors}this.environment={};if(\"environment\"in e){this.environment=e.environment}else{throw new Error(\"ContentManager constructor error: environment property missed\")}this.language=\"\";if(\"language\"in e){this.language=e.language}else{throw new Error(\"ContentManager constructor error: language property missed\")}this.editorListener=new zM;this.editor=null;this.ua=navigator.userAgent.toLowerCase();this.deviceProperties={};this.deviceProperties.isAndroid=this.ua.indexOf(\"android\")>-1;this.deviceProperties.isIOS=this.ua.indexOf(\"ipad\")>-1||this.ua.indexOf(\"iphone\")>-1;this.toolbar=null;this.modalDialogInstance=null;this.listeners=new TM;this.mathML=null;this.isNewElement=true;this.integrationModel=null}addListener(e){this.listeners.add(e)}setIntegrationModel(e){this.integrationModel=e}setModalDialogInstance(e){this.modalDialogInstance=e}insert(){this.updateTitle(this.modalDialogInstance);this.insertEditor(this.modalDialogInstance)}insertEditor(){if(DM.isEditorLoaded()){this.editor=window.com.wiris.jsEditor.JsEditor.newInstance(this.editorAttributes);this.editor.insertInto(this.modalDialogInstance.contentContainer);this.editor.focus();if(this.modalDialogInstance.rtl){this.editor.action(\"rtl\")}if(this.editor.getEditorModel().isRTL()){this.editor.element.style.direction=\"rtl\"}this.editor.getEditorModel().addEditorListener(this.editorListener);if(this.modalDialogInstance.deviceProperties.isIOS){setTimeout((function e(){this.modalDialogInstance.hideKeyboard()}),400);const e=document.getElementsByClassName(\"wrs_formulaDisplay\")[0];IM.addEvent(e,\"focus\",this.modalDialogInstance.handleOpenedIosSoftkeyboard);IM.addEvent(e,\"blur\",this.modalDialogInstance.handleClosedIosSoftkeyboard)}this.listeners.fire(\"onLoad\",{})}else{setTimeout(DM.prototype.insertEditor.bind(this),100)}}init(){if(!DM.isEditorLoaded()){this.addEditorAsExternalDependency()}}addEditorAsExternalDependency(){const e=document.createElement(\"script\");e.type=\"text/javascript\";let t=AM.get(\"editorUrl\");const i=document.createElement(\"a\");DM.setHrefToAnchorElement(i,t);DM.setProtocolToAnchorElement(i);t=DM.getURLFromAnchorElement(i);const n=this.getEditorStats();e.src=`${t}?lang=${this.language}&stats-editor=${n.editor}&stats-mode=${n.mode}&stats-version=${n.version}`;document.getElementsByTagName(\"head\")[0].appendChild(e)}static setHrefToAnchorElement(e,t){e.href=t}static setProtocolToAnchorElement(e){if(window.location.href.indexOf(\"https://\")===0){if(e.protocol===\"http:\"){e.protocol=\"https:\"}}}static getURLFromAnchorElement(e){if(e.port===\"80\"||e.port===\"443\"||e.port===\"\"){return`${e.protocol}//${e.hostname}/${e.pathname}`}}getEditorStats(){const e={};if(\"editor\"in this.environment){e.editor=this.environment.editor}else{e.editor=\"unknown\"}if(\"mode\"in this.environment){e.mode=this.environment.mode}else{e.mode=AM.get(\"saveMode\")}if(\"version\"in this.environment){e.version=this.environment.version}else{e.version=AM.get(\"version\")}return e}static isEditorLoaded(){return window.com&&window.com.wiris&&window.com.wiris.jsEditor&&window.com.wiris.jsEditor.JsEditor&&window.com.wiris.jsEditor.JsEditor.newInstance}setInitialContent(){if(!this.isNewElement){this.setMathML(this.mathML)}}setMathML(e,t){if(typeof t===\"undefined\"){t=false}this.editor.setMathMLWithCallback(e,()=>{this.editorListener.setWaitingForChanges(true)});setTimeout(()=>{this.editorListener.setIsContentChanged(false)},500);if(!t){this.onFocus()}}onFocus(){if(typeof this.editor!==\"undefined\"&&this.editor!=null){this.editor.focus()}}submitAction(){if(!this.editor.isFormulaEmpty()){let e=this.editor.getMathMLWithSemantics();if(this.customEditors.getActiveEditor()!==null){const{toolbar:t}=this.customEditors.getActiveEditor();e=xM.addCustomEditorClassAttribute(e,t)}else{Object.keys(this.customEditors.editors).forEach(t=>{e=xM.removeCustomEditorClassAttribute(e,t)})}const t=xM.mathMLEntities(e);this.integrationModel.updateFormula(t)}else{this.integrationModel.updateFormula(null)}this.customEditors.disable();this.integrationModel.notifyWindowClosed();this.setEmptyMathML();this.customEditors.disable()}setEmptyMathML(){if(this.deviceProperties.isAndroid||this.deviceProperties.isIOS){if(this.editor.getEditorModel().isRTL()){this.setMathML('[]',true)}else{this.setMathML('[]',true)}}else if(this.editor.getEditorModel().isRTL()){this.setMathML('',true)}else{this.setMathML(\"\",true)}}onOpen(){if(this.isNewElement){this.setEmptyMathML()}else{this.setMathML(this.mathML)}this.updateToolbar();this.onFocus()}updateToolbar(){this.updateTitle(this.modalDialogInstance);const e=this.customEditors.getActiveEditor();if(e){const t=e.toolbar?e.toolbar:_wrs_int_wirisProperties.toolbar;if(this.toolbar==null||this.toolbar!==t){this.setToolbar(t)}}else{const e=this.getToolbar();if(this.toolbar==null||this.toolbar!==e){this.setToolbar(e);this.customEditors.disable()}}}updateTitle(){const e=this.customEditors.getActiveEditor();if(e){this.modalDialogInstance.setTitle(e.title)}else{this.modalDialogInstance.setTitle(\"MathType\")}}getToolbar(){let e=\"general\";if(\"toolbar\"in this.editorAttributes){({toolbar:e}=this.editorAttributes)}if(e===\"general\"){e=typeof _wrs_int_wirisProperties===\"undefined\"||typeof _wrs_int_wirisProperties.toolbar===\"undefined\"?\"general\":_wrs_int_wirisProperties.toolbar}return e}setToolbar(e){this.toolbar=e;this.editor.setParams({toolbar:this.toolbar})}hasChanges(){return!this.editor.isFormulaEmpty()&&this.editorListener.getIsContentChanged()}onKeyDown(e){if(e.key!==undefined&&e.repeat===false){if(e.key===\"Escape\"||e.key===\"Esc\"){let t=document.getElementsByClassName(\"wrs_expandButton wrs_expandButtonFor3RowsLayout wrs_pressed\");if(t.length===0){t=document.getElementsByClassName(\"wrs_expandButton wrs_expandButtonFor2RowsLayout wrs_pressed\");if(t.length===0){t=document.getElementsByClassName(\"wrs_select wrs_pressed\");if(t.length===0){this.modalDialogInstance.cancelAction();e.stopPropagation();e.preventDefault()}}}}else if(e.shiftKey&&e.key===\"Tab\"){if(document.activeElement===this.modalDialogInstance.submitButton){this.editor.focus();e.stopPropagation();e.preventDefault()}else{const t=document.querySelector('[title=\"Manual\"]');if(document.activeElement===t){this.modalDialogInstance.cancelButton.focus();e.stopPropagation();e.preventDefault()}}}else if(e.key===\"Tab\"){if(document.activeElement===this.modalDialogInstance.cancelButton){const t=document.querySelector('[title=\"Manual\"]');t.focus();e.stopPropagation();e.preventDefault()}else{const t=document.getElementsByClassName(\"wrs_formulaDisplay\")[0];if(t.getAttribute(\"class\")===\"wrs_formulaDisplay wrs_focused\"){this.modalDialogInstance.submitButton.focus();e.stopPropagation();e.preventDefault()}}}}}}class jM{constructor(){this.editors=[];this.activeEditor=\"default\"}addEditor(e,t){const i={};i.name=t.name;i.toolbar=t.toolbar;i.icon=t.icon;i.confVariable=t.confVariable;i.title=t.title;i.tooltip=t.tooltip;this.editors[e]=i}enable(e){this.activeEditor=e}disable(){this.activeEditor=\"default\"}getActiveEditor(){if(this.activeEditor!==\"default\"){return this.editors[this.activeEditor]}return null}}const BM={imageCustomEditorName:\"data-custom-editor\",imageClassName:\"Wirisformula\",CASClassName:\"Wiriscas\"};var VM=BM;class FM{constructor(){this.cancelled=false;this.defaultPrevented=false}cancel(){this.cancelled=true}preventDefault(){this.defaultPrevented=true}}class HM{constructor(e){this.overlayElement=e.overlayElement;this.callbacks=e.callbacks;this.overlayWrapper=this.overlayElement.appendChild(document.createElement(\"div\"));this.overlayWrapper.setAttribute(\"class\",\"wrs_popupmessage_overlay_envolture\");this.message=this.overlayWrapper.appendChild(document.createElement(\"div\"));this.message.id=\"wrs_popupmessage\";this.message.setAttribute(\"class\",\"wrs_popupmessage_panel\");this.message.setAttribute(\"role\",\"dialog\");this.message.setAttribute(\"aria-describedby\",\"description_txt\");const t=document.createElement(\"p\");const i=document.createTextNode(e.strings.message);t.appendChild(i);t.id=\"description_txt\";this.message.appendChild(t);const n=this.overlayWrapper.appendChild(document.createElement(\"div\"));n.setAttribute(\"class\",\"wrs_popupmessage_overlay\");n.addEventListener(\"click\",this.cancelAction.bind(this));this.buttonArea=this.message.appendChild(document.createElement(\"div\"));this.buttonArea.setAttribute(\"class\",\"wrs_popupmessage_button_area\");this.buttonArea.id=\"wrs_popup_button_area\";const o={class:\"wrs_button_accept\",innerHTML:e.strings.submitString,id:\"wrs_popup_accept_button\"};this.closeButton=this.createButton(o,this.closeAction.bind(this));this.buttonArea.appendChild(this.closeButton);const r={class:\"wrs_button_cancel\",innerHTML:e.strings.cancelString,id:\"wrs_popup_cancel_button\"};this.cancelButton=this.createButton(r,this.cancelAction.bind(this));this.buttonArea.appendChild(this.cancelButton)}createButton(e,t){let i={};i=document.createElement(\"button\");i.setAttribute(\"id\",e.id);i.setAttribute(\"class\",e.class);i.innerHTML=e.innerHTML;i.addEventListener(\"click\",t);return i}show(){if(this.overlayWrapper.style.display!==\"block\"){document.activeElement.blur();this.overlayWrapper.style.display=\"block\";this.closeButton.focus()}else{this.overlayWrapper.style.display=\"none\";_wrs_modalWindow.focus()}}cancelAction(){this.overlayWrapper.style.display=\"none\";if(typeof this.callbacks.cancelCallback!==\"undefined\"){this.callbacks.cancelCallback()}}closeAction(){this.cancelAction();if(typeof this.callbacks.closeCallback!==\"undefined\"){this.callbacks.closeCallback()}}onKeyDown(e){if(e.key!==undefined){if(e.key===\"Escape\"||e.key===\"Esc\"){this.cancelAction();e.stopPropagation();e.preventDefault()}else if(e.key===\"Tab\"){if(document.activeElement===this.closeButton){this.cancelButton.focus()}else{this.closeButton.focus()}e.stopPropagation();e.preventDefault()}}}}var WM='\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n';var UM='\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n';var qM='\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n';var $M='\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n';var GM='\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n';var YM='\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n';var KM='\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n';var JM='\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n';var QM='\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n';var ZM='\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n';class XM{constructor(e){this.attributes=e;const t=navigator.userAgent.toLowerCase();const i=t.indexOf(\"android\")>-1;const n=t.indexOf(\"ipad\")>-1||t.indexOf(\"iphone\")>-1;this.iosSoftkeyboardOpened=false;this.iosMeasureUnit=t.indexOf(\"crios\")===-1?\"%\":\"vh\";this.iosDivHeight=`100%${this.iosMeasureUnit}`;const o=window.outerWidth;const r=window.outerHeight;const s=o>r;const a=or;const c=a&&this.attributes.width>o;const d=l||c;this.instanceId=document.getElementsByClassName(\"wrs_modal_dialogContainer\").length;this.deviceProperties={orientation:s?\"landscape\":\"portait\",isAndroid:i,isIOS:n,isMobile:d,isDesktop:!d&&!n&&!i};this.properties={created:false,state:\"\",previousState:\"\",position:{bottom:0,right:10},size:{height:338,width:580}};this.websiteBeforeLockParameters=null;let u={};u.class=\"wrs_modal_overlay\";u.id=this.getElementId(u.class);this.overlay=IM.createElement(\"div\",u);u={};u.class=\"wrs_modal_title_bar\";u.id=this.getElementId(u.class);this.titleBar=IM.createElement(\"div\",u);u={};u.class=\"wrs_modal_title\";u.id=this.getElementId(u.class);this.title=IM.createElement(\"div\",u);this.title.innerHTML=\"\";u={};u.class=\"wrs_modal_close_button\";u.id=this.getElementId(u.class);u.title=SM.get(\"close\");u.style={};this.closeDiv=IM.createElement(\"a\",u);this.closeDiv.setAttribute(\"role\",\"button\");let h=`background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(WM)})`;let f=`background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(UM)})`;this.closeDiv.setAttribute(\"style\",h);this.closeDiv.setAttribute(\"onmouseover\",`this.style = \"${f}\";`);this.closeDiv.setAttribute(\"onmouseout\",`this.style = \"${h}\";`);u={};u.class=\"wrs_modal_stack_button\";u.id=this.getElementId(u.class);u.title=SM.get(\"exit_fullscreen\");this.stackDiv=IM.createElement(\"a\",u);this.stackDiv.setAttribute(\"role\",\"button\");h=`background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(KM)})`;f=`background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(JM)})`;this.stackDiv.setAttribute(\"style\",h);this.stackDiv.setAttribute(\"onmouseover\",`this.style = \"${f}\";`);this.stackDiv.setAttribute(\"onmouseout\",`this.style = \"${h}\";`);u={};u.class=\"wrs_modal_maximize_button\";u.id=this.getElementId(u.class);u.title=SM.get(\"fullscreen\");this.maximizeDiv=IM.createElement(\"a\",u);this.maximizeDiv.setAttribute(\"role\",\"button\");h=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(qM)})`;f=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa($M)})`;this.maximizeDiv.setAttribute(\"style\",h);this.maximizeDiv.setAttribute(\"onmouseover\",`this.style = \"${f}\";`);this.maximizeDiv.setAttribute(\"onmouseout\",`this.style = \"${h}\";`);u={};u.class=\"wrs_modal_minimize_button\";u.id=this.getElementId(u.class);u.title=SM.get(\"minimize\");this.minimizeDiv=IM.createElement(\"a\",u);this.minimizeDiv.setAttribute(\"role\",\"button\");h=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(GM)})`;f=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(YM)})`;this.minimizeDiv.setAttribute(\"style\",h);this.minimizeDiv.setAttribute(\"onmouseover\",`this.style = \"${f}\";`);this.minimizeDiv.setAttribute(\"onmouseout\",`this.style = \"${h}\";`);u={};u.class=\"wrs_modal_dialogContainer\";u.id=this.getElementId(u.class);u.role=\"dialog\";this.container=IM.createElement(\"div\",u);this.container.setAttribute(\"aria-labeledby\",\"wrs_modal_title[0]\");u={};u.class=\"wrs_modal_wrapper\";u.id=this.getElementId(u.class);this.wrapper=IM.createElement(\"div\",u);u={};u.class=\"wrs_content_container\";u.id=this.getElementId(u.class);this.contentContainer=IM.createElement(\"div\",u);u={};u.class=\"wrs_modal_controls\";u.id=this.getElementId(u.class);this.controls=IM.createElement(\"div\",u);u={};u.class=\"wrs_modal_buttons_container\";u.id=this.getElementId(u.class);this.buttonContainer=IM.createElement(\"div\",u);this.submitButton=this.createSubmitButton({id:this.getElementId(\"wrs_modal_button_accept\"),class:\"wrs_modal_button_accept\",innerHTML:SM.get(\"accept\")},this.submitAction.bind(this));this.cancelButton=this.createSubmitButton({id:this.getElementId(\"wrs_modal_button_cancel\"),class:\"wrs_modal_button_cancel\",innerHTML:SM.get(\"cancel\")},this.cancelAction.bind(this));this.contentManager=null;const m={cancelString:SM.get(\"cancel\"),submitString:SM.get(\"close\"),message:SM.get(\"close_modal_warning\")};const g={closeCallback:()=>{this.close()},cancelCallback:()=>{this.focus()}};const p={overlayElement:this.container,callbacks:g,strings:m};this.popup=new HM(p);this.rtl=false;if(\"rtl\"in this.attributes){this.rtl=this.attributes.rtl}this.handleOpenedIosSoftkeyboard=this.handleOpenedIosSoftkeyboard.bind(this);this.handleClosedIosSoftkeyboard=this.handleClosedIosSoftkeyboard.bind(this)}setContentManager(e){this.contentManager=e}getContentManager(){return this.contentManager}submitAction(){if(typeof this.contentManager.submitAction!==\"undefined\"){this.contentManager.submitAction()}this.close()}cancelAction(){if(typeof this.contentManager.hasChanges===\"undefined\"){this.close()}else if(!this.contentManager.hasChanges()){this.close()}else{this.showPopUpMessage()}}createSubmitButton(e,t){class i{constructor(){this.element=document.createElement(\"button\");this.element.id=e.id;this.element.className=e.class;this.element.innerHTML=e.innerHTML;IM.addEvent(this.element,\"click\",t)}getElement(){return this.element}}return new i(e,t).getElement()}create(){this.titleBar.appendChild(this.closeDiv);this.titleBar.appendChild(this.stackDiv);this.titleBar.appendChild(this.maximizeDiv);this.titleBar.appendChild(this.minimizeDiv);this.titleBar.appendChild(this.title);if(this.deviceProperties.isDesktop){this.container.appendChild(this.titleBar)}this.wrapper.appendChild(this.contentContainer);this.wrapper.appendChild(this.controls);this.controls.appendChild(this.buttonContainer);this.buttonContainer.appendChild(this.submitButton);this.buttonContainer.appendChild(this.cancelButton);this.container.appendChild(this.wrapper);this.recalculateScrollBar();document.body.appendChild(this.container);document.body.appendChild(this.overlay);if(this.deviceProperties.isDesktop){this.createModalWindowDesktop();this.createResizeButtons();this.addListeners();if(AM.get(\"modalWindowFullScreen\")){this.maximize()}}else if(this.deviceProperties.isAndroid){this.createModalWindowAndroid()}else if(this.deviceProperties.isIOS&&!this.deviceProperties.isMobile){this.createModalWindowIos()}if(this.contentManager!=null){this.contentManager.insert(this)}this.properties.open=true;this.properties.created=true;if(this.isRTL()){this.container.style.right=`${window.innerWidth-this.scrollbarWidth-this.container.offsetWidth}px`;this.container.className+=\" wrs_modal_rtl\"}}createResizeButtons(){this.resizerBR=document.createElement(\"div\");this.resizerBR.className=\"wrs_bottom_right_resizer\";this.resizerBR.innerHTML=\"◢\";this.resizerTL=document.createElement(\"div\");this.resizerTL.className=\"wrs_bottom_left_resizer\";this.container.appendChild(this.resizerBR);this.titleBar.appendChild(this.resizerTL);IM.addEvent(this.resizerBR,\"mousedown\",this.activateResizeStateBR.bind(this));IM.addEvent(this.resizerTL,\"mousedown\",this.activateResizeStateTL.bind(this))}activateResizeStateBR(e){this.initializeResizeProperties(e,false)}activateResizeStateTL(e){this.initializeResizeProperties(e,true)}initializeResizeProperties(e,t){IM.addClass(document.body,\"wrs_noselect\");IM.addClass(this.overlay,\"wrs_overlay_active\");this.resizeDataObject={x:this.eventClient(e).X,y:this.eventClient(e).Y};this.initialWidth=parseInt(this.container.style.width,10);this.initialHeight=parseInt(this.container.style.height,10);if(!t){this.initialRight=parseInt(this.container.style.right,10);this.initialBottom=parseInt(this.container.style.bottom,10)}else{this.leftScale=true}if(!this.initialRight){this.initialRight=0}if(!this.initialBottom){this.initialBottom=0}document.body.style[\"user-select\"]=\"none\"}open(){this.removeClass(\"wrs_closed\");const{isIOS:e}=this.deviceProperties;const{isAndroid:t}=this.deviceProperties;const{isMobile:i}=this.deviceProperties;if(e||t||i){this.restoreWebsiteScale();this.lockWebsiteScroll();setTimeout(()=>{this.hideKeyboard()},400)}if(!this.properties.created){this.create()}else{if(!this.properties.open){this.properties.open=true;if(!this.deviceProperties.isAndroid&&!this.deviceProperties.isIOS){this.restoreState()}}if(this.deviceProperties.isDesktop&&AM.get(\"modalWindowFullScreen\")){this.maximize()}if(this.deviceProperties.isIOS){this.iosSoftkeyboardOpened=false;this.setContainerHeight(`${100+this.iosMeasureUnit}`)}}if(!DM.isEditorLoaded()){const e=TM.newListener(\"onLoad\",()=>{this.contentManager.onOpen(this)});this.contentManager.addListener(e)}else{this.contentManager.onOpen(this)}}close(){this.removeClass(\"wrs_maximized\");this.removeClass(\"wrs_minimized\");this.removeClass(\"wrs_stack\");this.addClass(\"wrs_closed\");this.saveModalProperties();this.unlockWebsiteScroll();this.properties.open=false}restoreWebsiteScale(){let e=document.querySelector(\"meta[name=viewport]\");const t=[\"initial-scale=\",\"minimum-scale=\",\"maximum-scale=\"];const i=[\"1.0\",\"1.0\",\"1.0\"];const n=(e,t)=>{const n=e.getAttribute(\"content\");if(n){const o=n.split(\",\");let r=\"\";const s=[];for(let e=0;e=0||navigator.userAgent.search(\"Trident/\")>=0||navigator.userAgent.search(\"Edge/\")>=0){return true}return false}isRTL(){if(this.attributes.language===\"ar\"||this.attributes.language===\"he\"){return true}return this.rtl}addClass(e){IM.addClass(this.overlay,e);IM.addClass(this.titleBar,e);IM.addClass(this.overlay,e);IM.addClass(this.container,e);IM.addClass(this.contentContainer,e);IM.addClass(this.stackDiv,e);IM.addClass(this.minimizeDiv,e);IM.addClass(this.maximizeDiv,e);IM.addClass(this.wrapper,e)}removeClass(e){IM.removeClass(this.overlay,e);IM.removeClass(this.titleBar,e);IM.removeClass(this.overlay,e);IM.removeClass(this.container,e);IM.removeClass(this.contentContainer,e);IM.removeClass(this.stackDiv,e);IM.removeClass(this.minimizeDiv,e);IM.removeClass(this.maximizeDiv,e);IM.removeClass(this.wrapper,e)}createModalWindowDesktop(){this.addClass(\"wrs_modal_desktop\");this.stack()}createModalWindowAndroid(){this.addClass(\"wrs_modal_android\");window.addEventListener(\"resize\",this.orientationChangeAndroidSoftkeyboard.bind(this))}createModalWindowIos(){this.addClass(\"wrs_modal_ios\");window.addEventListener(\"resize\",this.orientationChangeIosSoftkeyboard.bind(this))}restoreState(){if(this.properties.state===\"maximized\"){this.maximize()}else if(this.properties.state===\"minimized\"){this.properties.state=this.properties.previousState;this.properties.previousState=\"\";this.minimize()}else{this.stack()}}stack(){this.properties.previousState=this.properties.state;this.properties.state=\"stack\";this.removeClass(\"wrs_maximized\");this.minimizeDiv.title=SM.get(\"minimize\");this.removeClass(\"wrs_minimized\");this.addClass(\"wrs_stack\");const e=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(GM)})`;const t=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(YM)})`;this.minimizeDiv.setAttribute(\"style\",e);this.minimizeDiv.setAttribute(\"onmouseover\",`this.style = \"${t}\";`);this.minimizeDiv.setAttribute(\"onmouseout\",`this.style = \"${e}\";`);this.restoreModalProperties();if(typeof this.resizerBR!==\"undefined\"&&typeof this.resizerTL!==\"undefined\"){this.setResizeButtonsVisibility()}this.recalculateScrollBar();this.recalculatePosition();this.recalculateScale();this.focus()}minimize(){this.saveModalProperties();this.title.style.cursor=\"pointer\";if(this.properties.state===\"minimized\"&&this.properties.previousState===\"stack\"){this.stack()}else if(this.properties.state===\"minimized\"&&this.properties.previousState===\"maximized\"){this.maximize()}else{this.container.style.height=\"30px\";this.container.style.width=\"250px\";this.container.style.bottom=\"0px\";this.container.style.right=\"10px\";this.removeListeners();this.properties.previousState=this.properties.state;this.properties.state=\"minimized\";this.setResizeButtonsVisibility();this.minimizeDiv.title=SM.get(\"maximize\");if(IM.containsClass(this.overlay,\"wrs_stack\")){this.removeClass(\"wrs_stack\")}else{this.removeClass(\"wrs_maximized\")}this.addClass(\"wrs_minimized\");const e=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(QM)})`;const t=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(ZM)})`;this.minimizeDiv.setAttribute(\"style\",e);this.minimizeDiv.setAttribute(\"onmouseover\",`this.style = \"${t}\";`);this.minimizeDiv.setAttribute(\"onmouseout\",`this.style = \"${e}\";`)}}maximize(){this.saveModalProperties();if(this.properties.state!==\"maximized\"){this.properties.previousState=this.properties.state;this.properties.state=\"maximized\"}this.setResizeButtonsVisibility();if(IM.containsClass(this.overlay,\"wrs_minimized\")){this.minimizeDiv.title=SM.get(\"minimize\");this.removeClass(\"wrs_minimized\")}else if(IM.containsClass(this.overlay,\"wrs_stack\")){this.container.style.left=null;this.container.style.top=null;this.removeClass(\"wrs_stack\")}this.addClass(\"wrs_maximized\");const e=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(GM)})`;const t=`background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(YM)})`;this.minimizeDiv.setAttribute(\"style\",e);this.minimizeDiv.setAttribute(\"onmouseover\",`this.style = \"${t}\";`);this.minimizeDiv.setAttribute(\"onmouseout\",`this.style = \"${e}\";`);this.setSize(parseInt(window.innerHeight*.8,10),parseInt(window.innerWidth*.8,10));if(this.container.clientHeight>700){this.container.style.height=\"700px\"}if(this.container.clientWidth>1200){this.container.style.width=\"1200px\"}const{innerHeight:i}=window;const{innerWidth:n}=window;const{offsetHeight:o}=this.container;const{offsetWidth:r}=this.container;const s=i/2-o/2;const a=n/2-r/2;this.setPosition(s,a);this.recalculateScale();this.recalculatePosition();this.recalculateSize();this.focus()}reExpand(){if(this.properties.state===\"minimized\"){if(this.properties.previousState===\"maximized\"){this.maximize()}else{this.stack()}this.title.style.cursor=\"\"}}setSize(e,t){this.container.style.height=`${e}px`;this.container.style.width=`${t}px`;this.recalculateSize()}setPosition(e,t){this.container.style.bottom=`${e}px`;this.container.style.right=`${t}px`}saveModalProperties(){if(this.properties.state===\"stack\"){this.properties.position.bottom=parseInt(this.container.style.bottom,10);this.properties.position.right=parseInt(this.container.style.right,10);this.properties.size.width=parseInt(this.container.style.width,10);this.properties.size.height=parseInt(this.container.style.height,10)}}restoreModalProperties(){if(this.properties.state===\"stack\"){this.setPosition(this.properties.position.bottom,this.properties.position.right);this.setSize(this.properties.size.height,this.properties.size.width)}}recalculateSize(){this.wrapper.style.width=`${this.container.clientWidth-12}px`;this.wrapper.style.height=`${this.container.clientHeight-38}px`;this.contentContainer.style.height=`${parseInt(this.wrapper.offsetHeight-50,10)}px`}setResizeButtonsVisibility(){if(this.properties.state===\"stack\"){this.resizerTL.style.visibility=\"visible\";this.resizerBR.style.visibility=\"visible\"}else{this.resizerTL.style.visibility=\"hidden\";this.resizerBR.style.visibility=\"hidden\"}}addListeners(){this.maximizeDiv.addEventListener(\"click\",this.maximize.bind(this),true);this.stackDiv.addEventListener(\"click\",this.stack.bind(this),true);this.minimizeDiv.addEventListener(\"click\",this.minimize.bind(this),true);this.closeDiv.addEventListener(\"click\",this.cancelAction.bind(this));this.title.addEventListener(\"click\",this.reExpand.bind(this));this.overlay.addEventListener(\"click\",this.cancelAction.bind(this));IM.addEvent(window,\"mousedown\",this.startDrag.bind(this));IM.addEvent(window,\"mouseup\",this.stopDrag.bind(this));IM.addEvent(window,\"mousemove\",this.drag.bind(this));IM.addEvent(window,\"resize\",this.onWindowResize.bind(this));IM.addEvent(this.container,\"keydown\",this.onKeyDown.bind(this))}removeListeners(){IM.removeEvent(window,\"mousedown\",this.startDrag);IM.removeEvent(window,\"mouseup\",this.stopDrag);IM.removeEvent(window,\"mousemove\",this.drag);IM.removeEvent(window,\"resize\",this.onWindowResize);IM.removeEvent(this.container,\"keydown\",this.onKeyDown)}eventClient(e){if(typeof e.clientX===\"undefined\"&&e.changedTouches){const t={X:e.changedTouches[0].clientX,Y:e.changedTouches[0].clientY};return t}const t={X:e.clientX,Y:e.clientY};return t}startDrag(e){if(this.properties.state===\"minimized\"){return}if(e.target===this.title){if(typeof this.dragDataObject===\"undefined\"||this.dragDataObject===null){this.dragDataObject={x:this.eventClient(e).X,y:this.eventClient(e).Y};this.lastDrag={x:\"0px\",y:\"0px\"};if(this.container.style.right===\"\"){this.container.style.right=\"0px\"}if(this.container.style.bottom===\"\"){this.container.style.bottom=\"0px\"}if(this.isIE11()){}IM.addClass(document.body,\"wrs_noselect\");IM.addClass(this.overlay,\"wrs_overlay_active\");this.limitWindow=this.getLimitWindow()}}}drag(e){if(this.dragDataObject){e.preventDefault();let t=Math.min(this.eventClient(e).Y,this.limitWindow.minPointer.y);t=Math.max(this.limitWindow.maxPointer.y,t);let i=Math.min(this.eventClient(e).X,this.limitWindow.minPointer.x);i=Math.max(this.limitWindow.maxPointer.x,i);const n=`${i-this.dragDataObject.x}px`;const o=`${t-this.dragDataObject.y}px`;this.lastDrag={x:n,y:o};this.container.style.transform=`translate3d(${n},${o},0)`}if(this.resizeDataObject){const{innerWidth:t}=window;const{innerHeight:i}=window;let n=Math.min(this.eventClient(e).X,t-this.scrollbarWidth-7);let o=Math.min(this.eventClient(e).Y,i-7);if(n<0){n=0}if(o<0){o=0}let r;if(this.leftScale){r=-1}else{r=1}this.container.style.width=`${this.initialWidth+r*(n-this.resizeDataObject.x)}px`;this.container.style.height=`${this.initialHeight+r*(o-this.resizeDataObject.y)}px`;if(!this.leftScale){if(this.resizeDataObject.x-n-this.initialWidth<-580){this.container.style.right=`${this.initialRight-(n-this.resizeDataObject.x)}px`}else{this.container.style.right=`${this.initialRight+this.initialWidth-580}px`;this.container.style.width=\"580px\"}if(this.resizeDataObject.y-o580){this.container.style.width=`${Math.min(parseInt(this.container.style.width,10),window.innerWidth-this.scrollbarWidth)}px`;e=true}else{this.container.style.width=\"580px\";e=true}if(parseInt(this.container.style.height,10)>338){this.container.style.height=`${Math.min(parseInt(this.container.style.height,10),window.innerHeight)}px`;e=true}else{this.container.style.height=\"338px\";e=true}if(e){this.recalculateSize()}}recalculateScrollBar(){this.hasScrollBar=window.innerWidth>document.documentElement.clientWidth;if(this.hasScrollBar){this.scrollbarWidth=this.getScrollBarWidth()}else{this.scrollbarWidth=0}}hideKeyboard(){const e=document.createElement(\"input\");this.container.appendChild(e);e.focus();e.blur();e.remove()}focus(){if(this.contentManager!=null&&typeof this.contentManager.onFocus!==\"undefined\"){this.contentManager.onFocus()}}portraitMode(){return window.innerHeight>window.innerWidth}handleOpenedIosSoftkeyboard(){if(!this.iosSoftkeyboardOpened&&this.iosDivHeight!=null&&this.iosDivHeight===`100${this.iosMeasureUnit}`){if(this.portraitMode()){this.setContainerHeight(`63${this.iosMeasureUnit}`)}else{this.setContainerHeight(`40${this.iosMeasureUnit}`)}}this.iosSoftkeyboardOpened=true}handleClosedIosSoftkeyboard(){this.iosSoftkeyboardOpened=false;this.setContainerHeight(`100${this.iosMeasureUnit}`)}orientationChangeIosSoftkeyboard(){if(this.iosSoftkeyboardOpened){if(this.portraitMode()){this.setContainerHeight(`63${this.iosMeasureUnit}`)}else{this.setContainerHeight(`40${this.iosMeasureUnit}`)}}else{this.setContainerHeight(`100${this.iosMeasureUnit}`)}}orientationChangeAndroidSoftkeyboard(){this.setContainerHeight(\"100%\")}setContainerHeight(e){this.iosDivHeight=e;this.wrapper.style.height=e}showPopUpMessage(){if(this.properties.state===\"minimized\"){this.stack()}this.popup.show()}setTitle(e){this.title.innerHTML=e}getElementId(e){return`${e}[${this.instanceId}]`}}var eS;var tS=eS;\n/*! http://mths.be/codepointat v0.1.0 by @mathias */if(!String.prototype.codePointAt){(function(){\"use strict\";var e=function(e){if(this==null){throw TypeError()}var t=String(this);var i=t.length;var n=e?Number(e):0;if(n!=n){n=0}if(n<0||n>=i){return undefined}var o=t.charCodeAt(n);var r;if(o>=55296&&o<=56319&&i>n+1){r=t.charCodeAt(n+1);if(r>=56320&&r<=57343){return(o-55296)*1024+r-56320+65536}}return o};if(Object.defineProperty){Object.defineProperty(String.prototype,\"codePointAt\",{value:e,configurable:true,writable:true})}else{String.prototype.codePointAt=e}})()}if(typeof Object.assign!=\"function\"){Object.defineProperty(Object,\"assign\",{value:function e(t,i){\"use strict\";if(t==null){throw new TypeError(\"Cannot convert undefined or null to object\")}var n=Object(t);for(var o=1;o{const e=navigator.userAgent;let t=\"none\";if(e.search(\"Edge/\")>=0){t=\"EDGE\"}else if(e.search(\"Chrome/\")>=0){t=\"CHROME\"}else if(e.search(\"Trident/\")>=0){t=\"IE\"}else if(e.search(\"Firefox/\")>=0){t=\"FIREFOX\"}else if(e.search(\"Safari/\")>=0){t=\"SAFARI\"}return t})();this.listeners=new TM;this.serviceProviderProperties={};if(\"serviceProviderProperties\"in e){this.serviceProviderProperties=e.serviceProviderProperties}else{throw new Error(\"serviceProviderProperties property missing.\")}}static get globalListeners(){return nS._globalListeners}static set globalListeners(e){nS._globalListeners=e}static get initialized(){return nS._initialized}static set initialized(e){nS._initialized=e}setIntegrationModel(e){this.integrationModel=e}setEnvironment(e){if(\"editor\"in e){this.environment.editor=e.editor}if(\"mode\"in e){this.environment.mode=e.mode}if(\"version\"in e){this.environment.version=e.version}}getModalDialog(){return this.modalDialog}init(){if(!nS.initialized){const e=TM.newListener(\"onInit\",()=>{const e=EM.getService(\"configurationjs\",\"\",\"get\");const t=JSON.parse(e);AM.addConfiguration(t);AM.addConfiguration(VM);SM.language=this.language;this.listeners.fire(\"onLoad\",{})});EM.addListener(e);EM.init(this.serviceProviderProperties);nS.initialized=true}else{this.listeners.fire(\"onLoad\",{})}}addListener(e){this.listeners.add(e)}static addGlobalListener(e){nS.globalListeners.add(e)}beforeUpdateFormula(e,t){const i=new FM;i.mathml=e;i.wirisProperties={};if(t!=null){Object.keys(t).forEach(e=>{i.wirisProperties[e]=t[e]})}i.language=this.language;i.editMode=this.editMode;if(this.listeners.fire(\"onBeforeFormulaInsertion\",i)){return{}}if(nS.globalListeners.fire(\"onBeforeFormulaInsertion\",i)){return{}}return{mathml:i.mathml,wirisProperties:i.wirisProperties}}insertFormula(e,t,i,n){const o={};if(!i){this.insertElementOnSelection(null,e,t)}else if(this.editMode===\"latex\"){o.latex=PM.getLatexFromMathML(i);if(!!this.integrationModel.fillNonLatexNode&&!o.latex){const n=new FM;n.editMode=this.editMode;n.windowTarget=t;n.focusElement=e;n.latex=o.latex;this.integrationModel.fillNonLatexNode(n,t,i)}else{o.node=t.document.createTextNode(`$$${o.latex}$$`)}this.insertElementOnSelection(o.node,e,t)}else{o.node=RM.mathmlToImgObject(t.document,i,n,this.language);this.insertElementOnSelection(o.node,e,t)}return o}afterUpdateFormula(e,t,i,n){const o=new FM;o.editMode=this.editMode;o.windowTarget=t;o.focusElement=e;o.node=i;o.latex=n;if(this.listeners.fire(\"onAfterFormulaInsertion\",o)){return{}}if(nS.globalListeners.fire(\"onAfterFormulaInsertion\",o)){return{}}return{}}placeCaretAfterNode(e){this.integrationModel.getSelection();const t=e.ownerDocument;if(typeof t.getSelection!==\"undefined\"&&!!e.parentElement){const i=t.createRange();i.setStartAfter(e);i.collapse(true);const n=t.getSelection();n.removeAllRanges();n.addRange(i);t.body.focus()}}insertElementOnSelection(e,t,i){if(this.editionProperties.isNewElement){if(e){if(t.type===\"textarea\"){IM.updateTextArea(t,e.textContent)}else if(document.selection&&document.getSelection===0){let t=i.document.selection.createRange();i.document.execCommand(\"InsertImage\",false,e.src);if(!(\"parentElement\"in t)){i.document.execCommand(\"delete\",false);t=i.document.selection.createRange();i.document.execCommand(\"InsertImage\",false,e.src)}if(\"parentElement\"in t){const i=t.parentElement();if(i.nodeName.toUpperCase()===\"IMG\"){i.parentNode.replaceChild(e,i)}else{t.pasteHTML(IM.createObjectCode(e))}}}else{const t=this.integrationModel.getSelection();let i=null;if(this.editionProperties.range){({range:i}=this.editionProperties);this.editionProperties.range=null}else{i=t.getRangeAt(0)}i.deleteContents();let n=i.startContainer;const o=i.startOffset;if(n.nodeType===3){n=n.splitText(o);n.parentNode.insertBefore(e,n)}else if(n.nodeType===1){n.insertBefore(e,n.childNodes[o])}this.placeCaretAfterNode(e)}}else if(t.type===\"textarea\"){t.focus()}else{const e=this.integrationModel.getSelection();e.removeAllRanges();if(this.editionProperties.range){const{range:t}=this.editionProperties;this.editionProperties.range=null;e.addRange(t)}}}else if(this.editionProperties.latexRange){if(document.selection&&document.getSelection===0){this.editionProperties.isNewElement=true;this.editionProperties.latexRange.select();this.insertElementOnSelection(e,t,i)}else{this.editionProperties.latexRange.deleteContents();this.editionProperties.latexRange.insertNode(e);this.placeCaretAfterNode(e)}}else if(t.type===\"textarea\"){let i;if(typeof this.integrationModel.getSelectedItem!==\"undefined\"){i=this.integrationModel.getSelectedItem(t,false)}else{i=IM.getSelectedItemOnTextarea(t)}IM.updateExistingTextOnTextarea(t,e.textContent,i.startPosition,i.endPosition)}else{if(e&&e.nodeName.toLowerCase()===\"img\"){LM.removeImgDataAttributes(this.editionProperties.temporalImage);LM.clone(e,this.editionProperties.temporalImage)}else{this.editionProperties.temporalImage.remove()}this.placeCaretAfterNode(this.editionProperties.temporalImage)}}openModalDialog(e,t){this.editMode=\"images\";try{if(t){e.contentWindow.focus();const t=e.contentWindow.getSelection();this.editionProperties.range=t.getRangeAt(0)}else{e.focus();const t=getSelection();this.editionProperties.range=t.getRangeAt(0)}}catch(e){this.editionProperties.range=null}if(t===undefined){t=true}this.editionProperties.latexRange=null;if(e){let i;if(typeof this.integrationModel.getSelectedItem!==\"undefined\"){i=this.integrationModel.getSelectedItem(e,t)}else{i=IM.getSelectedItem(e,t)}if(i){if(!i.caretPosition&&IM.containsClass(i.node,AM.get(\"imageClassName\"))){this.editionProperties.temporalImage=i.node;this.editionProperties.isNewElement=false}else if(i.node.nodeType===3){if(this.integrationModel.getMathmlFromTextNode){const e=this.integrationModel.getMathmlFromTextNode(i.node,i.caretPosition);if(e){this.editMode=\"latex\";this.editionProperties.isNewElement=false;this.editionProperties.temporalImage=document.createElement(\"img\");this.editionProperties.temporalImage.setAttribute(AM.get(\"imageMathmlAttribute\"),xM.safeXmlEncode(e))}}else{const n=PM.getLatexFromTextNode(i.node,i.caretPosition);if(n){const i=PM.getMathMLFromLatex(n.latex);this.editMode=\"latex\";this.editionProperties.isNewElement=false;this.editionProperties.temporalImage=document.createElement(\"img\");this.editionProperties.temporalImage.setAttribute(AM.get(\"imageMathmlAttribute\"),xM.safeXmlEncode(i));const o=t?e.contentWindow:window;if(e.tagName.toLowerCase()!==\"textarea\"){if(document.selection){let e=0;let t=n.startNode.previousSibling;while(t){e+=IM.getNodeLength(t);t=t.previousSibling}this.editionProperties.latexRange=o.document.selection.createRange();this.editionProperties.latexRange.moveToElementText(n.startNode.parentNode);this.editionProperties.latexRange.move(\"character\",e+n.startPosition);this.editionProperties.latexRange.moveEnd(\"character\",n.latex.length+4)}else{this.editionProperties.latexRange=o.document.createRange();this.editionProperties.latexRange.setStart(n.startNode,n.startPosition);this.editionProperties.latexRange.setEnd(n.endNode,n.endPosition)}}}}}}else if(e.tagName.toLowerCase()===\"textarea\"){this.editMode=\"latex\"}}const i=AM.get(\"editorAttributes\").split(\", \");const n={};for(let e=0,t=i.length;e{this.contentManager.isNewElement=this.editionProperties.isNewElement;if(this.editionProperties.temporalImage!=null){const e=xM.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(AM.get(\"imageMathmlAttribute\")));this.contentManager.mathML=e}});this.contentManager.addListener(e);this.contentManager.init();this.modalDialog.setContentManager(this.contentManager);this.contentManager.setModalDialogInstance(this.modalDialog)}else{this.contentManager.isNewElement=this.editionProperties.isNewElement;if(this.editionProperties.temporalImage!=null){const e=xM.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(AM.get(\"imageMathmlAttribute\")));this.contentManager.mathML=e}}this.contentManager.setIntegrationModel(this.integrationModel);this.modalDialog.open()}getCustomEditors(){return this.customEditors}}nS._globalListeners=new TM;nS._initialized=false;class oS{constructor(e){this.language=\"en\";this.serviceProviderProperties={};if(\"serviceProviderProperties\"in e){this.serviceProviderProperties=e.serviceProviderProperties}this.configurationService=\"\";if(\"configurationService\"in e){this.serviceProviderProperties.URI=e.configurationService;console.warn(\"Deprecated property configurationService. Use serviceParameters on instead.\",[e.configurationService])}this.version=\"version\"in e?e.version:\"\";this.target=null;if(\"target\"in e){this.target=e.target}else{throw new Error(\"IntegrationModel constructor error: target property missed.\")}if(\"scriptName\"in e){this.scriptName=e.scriptName}this.callbackMethodArguments={};if(\"callbackMethodArguments\"in e){this.callbackMethodArguments=e.callbackMethodArguments}this.environment={};if(\"environment\"in e){this.environment=e.environment}this.isIframe=false;if(this.target!=null){this.isIframe=this.target.tagName.toUpperCase()===\"IFRAME\"}this.editorObject=null;if(\"editorObject\"in e){this.editorObject=e.editorObject}this.rtl=false;if(\"rtl\"in e){this.rtl=e.rtl}this.managesLanguage=false;if(\"managesLanguage\"in e){this.managesLanguage=e.managesLanguage}this.temporalImageResizing=false;this.core=null;this.listeners=new TM;if(\"integrationParameters\"in e){oS.integrationParameters.forEach(t=>{if(t in e.integrationParameters){const i=e.integrationParameters[t];if(Object.keys(i).length!==0){this[t]=i}}})}}init(){this.language=this.getLanguage();const e=TM.newListener(\"onLoad\",()=>{this.callbackFunction(this.callbackMethodArguments)});if(this.serviceProviderProperties.URI.indexOf(\"configuration\")!==-1){const e=this.serviceProviderProperties.URI;const t=EM.getServerLanguageFromService(e);this.serviceProviderProperties.server=t;const i=this.serviceProviderProperties.URI.indexOf(\"configuration\");const n=this.serviceProviderProperties.URI.substring(0,i);this.serviceProviderProperties.URI=n}let t=this.serviceProviderProperties.URI;t=t.indexOf(\"/\")===0||t.indexOf(\"http\")===0?t:IM.concatenateUrl(this.getPath(),t);this.serviceProviderProperties.URI=t;const i={};i.serviceProviderProperties=this.serviceProviderProperties;this.setCore(new nS(i));this.core.addListener(e);this.core.language=this.language;this.core.init();this.core.setEnvironment(this.environment)}getPath(){if(typeof this.scriptName===\"undefined\"){throw new Error(\"scriptName property needed for getPath.\")}const e=document.getElementsByTagName(\"script\");let t=\"\";for(let i=0;i=0){t=e[i].src.substr(0,n-1)}}return t}getVersion(){return this.version}setLanguage(e){this.language=e}setCore(e){this.core=e;e.setIntegrationModel(this)}getCore(){return this.core}setTarget(e){this.target=e;this.isIframe=this.target.tagName.toUpperCase()===\"IFRAME\"}setEditorObject(e){this.editorObject=e}openNewFormulaEditor(){this.core.editionProperties.isNewElement=true;this.core.openModalDialog(this.target,this.isIframe)}openExistingFormulaEditor(){this.core.editionProperties.isNewElement=false;this.core.openModalDialog(this.target,this.isIframe)}updateFormula(e){if(this.editorParameters){e=com.wiris.editor.util.EditorUtils.addAnnotation(e,\"application/vnd.wiris.mtweb-params+json\",JSON.stringify(this.editorParameters))}let t;let i;const n=null;if(this.isIframe){t=this.target.contentWindow;i=this.target.contentWindow}else{t=this.target;i=window}let o=this.core.beforeUpdateFormula(e,n);if(!o){return\"\"}o=this.insertFormula(t,i,o.mathml,o.wirisProperties);if(!o){return\"\"}return this.core.afterUpdateFormula(o.focusElement,o.windowTarget,o.node,o.latex)}insertFormula(e,t,i,n){return this.core.insertFormula(e,t,i,n)}getSelection(){if(this.isIframe){this.target.contentWindow.focus();return this.target.contentWindow.getSelection()}this.target.focus();return window.getSelection()}addEvents(){const e=this.isIframe?this.target.contentWindow.document:this.target;IM.addElementEvents(e,(e,t)=>{this.doubleClickHandler(e,t)},(e,t)=>{this.mousedownHandler(e,t)},(e,t)=>{this.mouseupHandler(e,t)})}doubleClickHandler(e){if(e.nodeName.toLowerCase()===\"img\"){this.core.getCustomEditors().disable();const t=AM.get(\"imageCustomEditorName\");if(e.hasAttribute(t)){const i=e.getAttribute(t);this.core.getCustomEditors().enable(i)}if(IM.containsClass(e,AM.get(\"imageClassName\"))){this.core.editionProperties.temporalImage=e;this.core.editionProperties.isNewElement=true;this.openExistingFormulaEditor()}}}mouseupHandler(){if(this.temporalImageResizing){setTimeout(()=>{LM.fixAfterResize(this.temporalImageResizing)},10)}}mousedownHandler(e){if(e.nodeName.toLowerCase()===\"img\"){if(IM.containsClass(e,AM.get(\"imageClassName\"))){this.temporalImageResizing=e}}}getLanguage(){return this.getBrowserLanguage()}getBrowserLanguage(){let e=\"en\";if(navigator.userLanguage){e=navigator.userLanguage.substring(0,2)}else if(navigator.language){e=navigator.language.substring(0,2)}else{e=\"en\"}return e}callbackFunction(){const e=TM.newListener(\"onTargetReady\",()=>{this.addEvents(this.target)});this.listeners.add(e)}notifyWindowClosed(){}getMathmlFromTextNode(e,t){}fillNonLatexNode(e,t,i){}getSelectedItem(e,t){}}oS.prototype.getMathmlFromTextNode=undefined;oS.prototype.fillNonLatexNode=undefined;oS.prototype.getSelectedItem=undefined;oS.integrationParameters=[\"serviceProviderProperties\",\"editorParameters\"];class rS extends oS{constructor(e){const t=e.editorObject;if(typeof t.config!=\"undefined\"&&typeof t.config.get(\"mathTypeParameters\")!=\"undefined\"){e.integrationParameters=t.config.get(\"mathTypeParameters\")}super(e);this.integrationFolderName=\"ckeditor_wiris\"}getLanguage(){return this.editorObject.config.get(\"language\")}addEditorListeners(){const e=this.editorObject;if(typeof e.config.wirislistenersdisabled==\"undefined\"||!e.config.wirislistenersdisabled){this.checkElement()}}checkElement(){const e=this.editorObject;const t=e.sourceElement;if(!t.wirisActive){this.setTarget(t);this.addEvents();t.wirisActive=true}}doubleClickHandler(e,t){if(e.nodeName.toLowerCase()==\"img\"){if(IM.containsClass(e,AM.get(\"imageClassName\"))){if(typeof t.stopPropagation!=\"undefined\"){t.stopPropagation()}else{t.returnValue=false}this.core.getCustomEditors().disable();const i=e.getAttribute(AM.get(\"imageCustomEditorName\"));if(i){this.core.getCustomEditors().enable(i)}this.core.editionProperties.temporalImage=e;this.openExistingFormulaEditor()}}}getCorePath(){return null}callbackFunction(){super.callbackFunction();this.addEditorListeners()}openNewFormulaEditor(){this.core.editionProperties.selection=this.editorObject.editing.view.document.selection;return super.openNewFormulaEditor()}insertMathml(e){return this.editorObject.model.change(t=>{const i=this.getCore();const n=t.createElement(\"mathml\",{formula:e});if(i.editionProperties.isNewElement){if(!e)return;let i=this.core.editionProperties.selection||this.editorObject.editing.view.document.selection;let o=this.editorObject.editing.mapper.toModelPosition(i.getLastPosition());t.insert(n,o);if(!i.isCollapsed){for(const e of i.getRanges()){t.remove(this.editorObject.editing.mapper.toModelRange(e))}}}else{const o=i.editionProperties.temporalImage;const r=this.editorObject.editing.view.domConverter.domToView(o).parent;const s=this.editorObject.editing.mapper.toModelElement(r);const a=this.editorObject.model.createPositionBefore(s);if(e){t.insert(n,a)}t.remove(s)}return n})}findText(e){let t=e;let i;while(!i){i=this.editorObject.editing.mapper.toModelElement(this.editorObject.editing.view.domConverter.domToView(t));t=t.parentElement}const n=this.editorObject.model.createRangeIn(i);const o=Array.from(n.getItems());for(const t of o){if(t.is(\"textProxy\")&&t.data==e.data.replace(String.fromCharCode(160),\" \")){return t.textNode}}}insertFormula(e,t,i,n){let o={};if(!i){this.insertMathml(\"\")}else if(this.core.editMode==\"latex\"){o.latex=PM.getLatexFromMathML(i);o.node=t.document.createTextNode(\"$$\"+o.latex+\"$$\");this.editorObject.model.change(e=>{const t=this.core.editionProperties.latexRange;const i=this.findText(t.startContainer);const n=this.findText(t.endContainer);const r=e.createPositionAt(i.parent,i.startOffset+t.startOffset);const s=e.createPositionAt(n.parent,n.startOffset+t.endOffset);const a=e.createRange(r,s);e.remove(a);e.insertText(\"$$\"+o.latex+\"$$\",i.getAttributes(),r)})}else{o.node=this.editorObject.editing.view.domConverter.viewToDom(this.editorObject.editing.mapper.toViewElement(this.insertMathml(i)),t.document)}return o}notifyWindowClosed(){this.editorObject.editing.view.focus()}}class sS extends Dw{constructor(e){super(e)}execute(e={}){if(!e.hasOwnProperty(\"integration\")||!(e.integration instanceof rS)){throw'Must pass a valid CKEditor5Integration instance as attribute \"integration\" of options'}this.integration=e.integration;this.setEditor();this.openEditor()}setEditor(){this.integration.core.getCustomEditors().disable()}openEditor(){const e=this._getSelectedImage();if(typeof e!==\"undefined\"&&e!==null&&e.classList.contains(WirisPlugin.Configuration.get(\"imageClassName\"))){this.integration.core.editionProperties.temporalImage=e;this.integration.openExistingFormulaEditor()}else{this.integration.openNewFormulaEditor()}}_getSelectedImage(){const e=this.editor.editing.view.document.selection;if(e.isCollapsed||e.rangeCount!==1){return}const t=e.getFirstRange();let i;for(const e of t){if(e.item.name!==\"span\"){return}i=e.item.getChild(0);break}if(!i){return}return this.editor.editing.view.domConverter.mapViewToDom(i)}}class aS extends sS{setEditor(){this.integration.core.getCustomEditors().enable(\"chemistry\")}}var lS='\\n\\x3c!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --\\x3e\\n\\n\\n\\n\\n\\n\\t\\n\\t\\t\\n\\t\\n\\n\\n\\t\\n\\t\\t\\n\\t\\n\\n\\n';var cS='\\n\\x3c!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --\\x3e\\n\\n\\n\\n\\n';class dS extends Rw{static get requires(){return[uA]}static get pluginName(){return\"MathType\"}init(){const e=this._addIntegration();this._addCommands();this._addViews(e);this._addSchema();this._addConverters();this._exposeWiris()}_addIntegration(){const e=this.editor;const t={};t.environment={};t.environment.editor=\"CKEditor5\";t.editorObject=e;t.serviceProviderProperties={};t.serviceProviderProperties.URI=\"https://www.wiris.net/demo/plugins/app\";t.serviceProviderProperties.server=\"java\";t.target=e.sourceElement;t.scriptName=\"bundle.js\";t.managesLanguage=true;let i;if(t.target){i=new rS(t);i.init();i.listeners.fire(\"onTargetReady\",{});i.checkElement();this.listenTo(e.editing.view.document,\"click\",(e,t)=>{if(t.domEvent.detail==2){i.doubleClickHandler(t.domTarget,t.domEvent);e.stop()}},{priority:\"highest\"})}return i}_addCommands(){const e=this.editor;e.commands.add(\"MathType\",new sS(e));e.commands.add(\"ChemType\",new aS(e))}_addViews(e){const t=this.editor;t.ui.componentFactory.add(\"MathType\",i=>{const n=new rw(i);n.bind(\"isEnabled\").to(t.commands.get(\"MathType\"),\"isEnabled\");n.set({label:\"Insert a math equation - MathType\",icon:lS,tooltip:true});n.on(\"execute\",()=>{t.execute(\"MathType\",{integration:e})});return n});t.ui.componentFactory.add(\"ChemType\",i=>{const n=new rw(i);n.bind(\"isEnabled\").to(t.commands.get(\"ChemType\"),\"isEnabled\");n.set({label:\"Insert a chemistry formula - ChemType\",icon:cS,tooltip:true});n.on(\"execute\",()=>{t.execute(\"ChemType\",{integration:e})});return n});t.editing.view.addObserver(TP)}_addSchema(){const e=this.editor.model.schema;e.register(\"mathml\",{allowWhere:\"$text\",isObject:true,isInline:true,allowAttributes:[\"formula\"]})}_addConverters(){const e=this.editor;e.conversion.for(\"upcast\").elementToElement({view:{name:\"span\",classes:\"ck-math-widget\"},model:(e,t)=>{const i=xM.safeXmlDecode(e.getChild(0).getAttribute(\"data-mathml\"));return t.createElement(\"mathml\",{formula:i})}});e.data.upcastDispatcher.on(\"element:math\",(i,n,o)=>{const{consumable:r,writer:s}=o;const a=n.viewItem;if(!r.test(a,{name:true})){return}let l=t(a);const c=new vM(e.editing.view.document);const d=new mT(e.editing.view.document);const u=d.createDocumentFragment(a.getChildren());const h=[...a.getAttributes()].map(([e,t])=>` ${e}=\"${t}\"`).join(\"\");let f=c.toData(u)||\"\";f=`${f}`;const m=l?s.createText(RM.initParse(f,e.config.get(\"language\"))):s.createElement(\"mathml\",{formula:f});const g=o.splitToAllowedParent(m,n.modelCursor);if(!g){return}o.writer.insert(m,g.position);r.consume(a,{name:true});const p=o.getSplitParts(m);n.modelRange=s.createRange(o.writer.createPositionBefore(m),o.writer.createPositionAfter(p[p.length-1]));if(g.cursorParent){n.modelCursor=o.writer.createPositionAt(g.cursorParent,0)}else{n.modelCursor=n.modelRange.end}});function t(e){const t=e.getChild(0);if(!t||t.name!==\"semantics\")return false;for(const e of t.getChildren()){if(e.name===\"annotation\"&&e.getAttribute(\"encoding\")===\"LaTeX\"){return true}}return false}e.conversion.for(\"editingDowncast\").elementToElement({model:\"mathml\",view:o});e.conversion.for(\"dataDowncast\").elementToElement({model:\"mathml\",view:n});function i(e,t){if(t.is(\"text\")){return e.createText(t.data)}else if(t.is(\"element\")){if(t.is(\"emptyElement\")){return e.createEmptyElement(t.name,t.getAttributes())}else{const n=e.createContainerElement(t.name,t.getAttributes());for(const o of t.getChildren()){e.insert(e.createPositionAt(n,\"end\"),i(e,o))}return n}}throw new Exception(\"Given node has unsupported type.\")}function n(e,t){const n=new Ap(t.document);let o=RM.endParseSaveMode(e.getAttribute(\"formula\"));if(!AM.get(\"saveHandTraces\")){o=xM.removeAnnotation(o,\"application/json\")}const r=n.toView(o).getChild(0);return i(t,r)}function o(e,t){const i=t.createContainerElement(\"span\",{class:\"ck-math-widget\"});const n=r(e,t);t.insert(t.createPositionAt(i,0),n);return lx(i,t)}function r(t,i){const n=new Ap(i.document);const o=t.getAttribute(\"formula\");const r=RM.initParse(o,e.config.get(\"language\"));const s=n.toView(r).getChild(0);return i.createEmptyElement(\"img\",s.getAttributes())}}_exposeWiris(){window.WirisPlugin={Core:nS,Parser:RM,Image:LM,MathML:xM,Util:IM,Configuration:AM,Listeners:TM,IntegrationModel:oS,Latex:PM}}}function uS(e,t){return e=>{e.on(\"attribute:url:media\",i)};function i(i,n,o){if(!o.consumable.consume(n.item,i.name)){return}const r=n.attributeNewValue;const s=o.writer;const a=o.mapper.toViewElement(n.item);const l=[...a.getChildren()].find(e=>e.getCustomProperty(\"media-content\"));s.remove(l);const c=e.getMediaViewElement(s,r,t);s.insert(s.createPositionAt(a,0),c)}}function hS(e,t,i){t.setCustomProperty(\"media\",true,e);return lx(e,t,{label:i})}function fS(e){const t=e.getSelectedElement();if(t&&mS(t)){return t}return null}function mS(e){return!!e.getCustomProperty(\"media\")&&ax(e)}function gS(e,t,i,n){const o=e.createContainerElement(\"figure\",{class:\"media\"});o.getFillerOffset=wS;e.insert(e.createPositionAt(o,0),t.getMediaViewElement(e,i,n));return o}function pS(e){const t=e.getSelectedElement();if(t&&t.is(\"media\")){return t}return null}function bS(e,t,i){e.change(n=>{const o=n.createElement(\"media\",{url:t});e.insertContent(o,i);n.setSelection(o,\"on\")})}function wS(){return null}class _S extends Dw{refresh(){const e=this.editor.model;const t=e.document.selection;const i=e.schema;const n=t.getFirstPosition();const o=pS(t);let r=n.parent;if(r!=r.root){r=r.parent}this.value=o?o.getAttribute(\"url\"):null;this.isEnabled=i.checkChild(r,\"media\")}execute(e){const t=this.editor.model;const i=t.document.selection;const n=pS(i);if(n){t.change(t=>{t.setAttribute(\"url\",e,n)})}else{const n=fx(i,t);bS(t,e,n)}}}var kS='';const vS=\"0 0 64 42\";class yS{constructor(e,t){const i=t.providers;const n=t.extraProviders||[];const o=new Set(t.removeProviders);const r=i.concat(n).filter(e=>{const t=e.name;if(!t){console.warn(Object(ss[\"a\"])(\"media-embed-no-provider-name: The configured media provider has no name and cannot be used.\"),{provider:e});return false}return!o.has(t)});this.locale=e;this.providerDefinitions=r}hasMedia(e){return!!this._getMedia(e)}getMediaViewElement(e,t,i){return this._getMedia(t).getViewElement(e,i)}_getMedia(e){if(!e){return new xS(this.locale)}e=e.trim();for(const t of this.providerDefinitions){const i=t.html;let n=t.url;if(!Array.isArray(n)){n=[n]}for(const t of n){const n=this._getUrlMatches(e,t);if(n){return new xS(this.locale,e,n,i)}}}return null}_getUrlMatches(e,t){let i=e.match(t);if(i){return i}let n=e.replace(/^https?:\\/\\//,\"\");i=n.match(t);if(i){return i}n=n.replace(/^www\\./,\"\");i=n.match(t);if(i){return i}return null}}class xS{constructor(e,t,i,n){this.url=this._getValidUrl(t);this._t=e.t;this._match=i;this._previewRenderer=n}getViewElement(e,t){const i={};let n;if(t.renderForEditingView||t.renderMediaPreview&&this.url&&this._previewRenderer){if(this.url){i[\"data-oembed-url\"]=this.url}if(t.renderForEditingView){i.class=\"ck-media__wrapper\"}const o=this._getPreviewHtml(t);n=e.createUIElement(\"div\",i,(function(e){const t=this.toDomElement(e);t.innerHTML=o;return t}))}else{if(this.url){i.url=this.url}n=e.createEmptyElement(\"oembed\",i)}e.setCustomProperty(\"media-content\",true,n);return n}_getPreviewHtml(e){if(this._previewRenderer){return this._previewRenderer(this._match)}else{if(this.url&&e.renderForEditingView){return this._getPlaceholderHtml()}return\"\"}}_getPlaceholderHtml(){const e=new nw;const t=new tw;e.text=this._t(\"Open media in new tab\");t.content=kS;t.viewBox=vS;const i=new $p({tag:\"div\",attributes:{class:\"ck ck-reset_all ck-media__placeholder\"},children:[{tag:\"div\",attributes:{class:\"ck-media__placeholder__icon\"},children:[t]},{tag:\"a\",attributes:{class:\"ck-media__placeholder__url\",target:\"_blank\",rel:\"noopener noreferrer\",href:this.url},children:[{tag:\"span\",attributes:{class:\"ck-media__placeholder__url__text\"},children:[this.url]},e]}]}).render();return i.outerHTML}_getValidUrl(e){if(!e){return null}if(e.match(/^https?/)){return e}return\"https://\"+e}}var AS=i(106);class CS extends Rw{static get pluginName(){return\"MediaEmbedEditing\"}constructor(e){super(e);e.config.define(\"mediaEmbed\",{providers:[{name:\"dailymotion\",url:/^dailymotion\\.com\\/video\\/(\\w+)/,html:e=>{const t=e[1];return'
    '+`\"+\"
    \"}},{name:\"spotify\",url:[/^open\\.spotify\\.com\\/(artist\\/\\w+)/,/^open\\.spotify\\.com\\/(album\\/\\w+)/,/^open\\.spotify\\.com\\/(track\\/\\w+)/],html:e=>{const t=e[1];return'
    '+`\"+\"
    \"}},{name:\"youtube\",url:[/^(?:m\\.)?youtube\\.com\\/watch\\?v=([\\w-]+)/,/^(?:m\\.)?youtube\\.com\\/v\\/([\\w-]+)/,/^youtube\\.com\\/embed\\/([\\w-]+)/,/^youtu\\.be\\/([\\w-]+)/],html:e=>{const t=e[1];return'
    '+`\"+\"
    \"}},{name:\"vimeo\",url:[/^vimeo\\.com\\/(\\d+)/,/^vimeo\\.com\\/[^/]+\\/[^/]+\\/video\\/(\\d+)/,/^vimeo\\.com\\/album\\/[^/]+\\/video\\/(\\d+)/,/^vimeo\\.com\\/channels\\/[^/]+\\/(\\d+)/,/^vimeo\\.com\\/groups\\/[^/]+\\/videos\\/(\\d+)/,/^vimeo\\.com\\/ondemand\\/[^/]+\\/(\\d+)/,/^player\\.vimeo\\.com\\/video\\/(\\d+)/],html:e=>{const t=e[1];return'
    '+`\"+\"
    \"}},{name:\"instagram\",url:/^instagram\\.com\\/p\\/(\\w+)/},{name:\"twitter\",url:/^twitter\\.com/},{name:\"googleMaps\",url:/^google\\.com\\/maps/},{name:\"flickr\",url:/^flickr\\.com/},{name:\"facebook\",url:/^facebook\\.com/}]});this.registry=new yS(e.locale,e.config.get(\"mediaEmbed\"))}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;const o=e.config.get(\"mediaEmbed.previewsInData\");const r=this.registry;e.commands.add(\"mediaEmbed\",new _S(e));t.register(\"media\",{isObject:true,isBlock:true,allowWhere:\"$block\",allowAttributes:[\"url\"]});n.for(\"dataDowncast\").elementToElement({model:\"media\",view:(e,t)=>{const i=e.getAttribute(\"url\");return gS(t,r,i,{renderMediaPreview:i&&o})}});n.for(\"dataDowncast\").add(uS(r,{renderMediaPreview:o}));n.for(\"editingDowncast\").elementToElement({model:\"media\",view:(e,t)=>{const n=e.getAttribute(\"url\");const o=gS(t,r,n,{renderForEditingView:true});return hS(o,t,i(\"media widget\"))}});n.for(\"editingDowncast\").add(uS(r,{renderForEditingView:true}));n.for(\"upcast\").elementToElement({view:{name:\"oembed\",attributes:{url:true}},model:(e,t)=>{const i=e.getAttribute(\"url\");if(r.hasMedia(i)){return t.createElement(\"media\",{url:i})}}}).elementToElement({view:{name:\"div\",attributes:{\"data-oembed-url\":true}},model:(e,t)=>{const i=e.getAttribute(\"data-oembed-url\");if(r.hasMedia(i)){return t.createElement(\"media\",{url:i})}}})}}const TS=/^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w.-]+)+[\\w\\-._~:/?#[\\]@!$&'()*+,;=]+$/;class ES extends Rw{static get requires(){return[vk,wv]}static get pluginName(){return\"AutoMediaEmbed\"}constructor(e){super(e);this._timeoutId=null;this._positionToInsert=null}init(){const e=this.editor;const t=e.model.document;this.listenTo(e.plugins.get(vk),\"inputTransformation\",()=>{const e=t.selection.getFirstRange();const i=Rg.fromPosition(e.start);i.stickiness=\"toPrevious\";const n=Rg.fromPosition(e.end);n.stickiness=\"toNext\";t.once(\"change:data\",()=>{this._embedMediaBetweenPositions(i,n);i.detach();n.detach()},{priority:\"high\"})});e.commands.get(\"undo\").on(\"execute\",()=>{if(this._timeoutId){Ld.window.clearTimeout(this._timeoutId);this._positionToInsert.detach();this._timeoutId=null;this._positionToInsert=null}},{priority:\"high\"})}_embedMediaBetweenPositions(e,t){const i=this.editor;const n=i.plugins.get(CS).registry;const o=new lf(e,t);const r=o.getWalker({ignoreElementEnd:true});let s=\"\";for(const e of r){if(e.item.is(\"textProxy\")){s+=e.item.data}}s=s.trim();if(!s.match(TS)){o.detach();return}if(!n.hasMedia(s)){o.detach();return}const a=i.commands.get(\"mediaEmbed\");if(!a.isEnabled){o.detach();return}this._positionToInsert=Rg.fromPosition(e);this._timeoutId=Ld.window.setTimeout(()=>{i.model.change(e=>{this._timeoutId=null;e.remove(o);o.detach();let t;if(this._positionToInsert.root.rootName!==\"$graveyard\"){t=this._positionToInsert}bS(i.model,s,t);this._positionToInsert.detach();this._positionToInsert=null})},100)}}var PS=i(108);class MS extends _b{constructor(e,t){super(t);const i=t.t;this.focusTracker=new Ep;this.keystrokes=new mp;this.urlInputView=this._createUrlInput();this.saveButtonView=this._createButton(i(\"Save\"),CA,\"ck-button-save\");this.saveButtonView.type=\"submit\";this.cancelButtonView=this._createButton(i(\"Cancel\"),TA,\"ck-button-cancel\",\"cancel\");this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:\"shift + tab\",focusNext:\"tab\"}});this._validators=e;this.setTemplate({tag:\"form\",attributes:{class:[\"ck\",\"ck-media-form\"],tabindex:\"-1\"},children:[this.urlInputView,this.saveButtonView,this.cancelButtonView]})}render(){super.render();AA({view:this});const e=[this.urlInputView,this.saveButtonView,this.cancelButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element);const t=e=>e.stopPropagation();this.keystrokes.set(\"arrowright\",t);this.keystrokes.set(\"arrowleft\",t);this.keystrokes.set(\"arrowup\",t);this.keystrokes.set(\"arrowdown\",t);this.listenTo(this.urlInputView.element,\"selectstart\",(e,t)=>{t.stopPropagation()},{priority:\"high\"})}focus(){this._focusCycler.focusFirst()}get url(){return this.urlInputView.fieldView.element.value.trim()}set url(e){this.urlInputView.fieldView.element.value=e.trim()}isValid(){this.resetFormStatus();for(const e of this._validators){const t=e(this);if(t){this.urlInputView.errorText=t;return false}}return true}resetFormStatus(){this.urlInputView.errorText=null;this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){const e=this.locale.t;const t=new _A(this.locale,yA);const i=t.fieldView;this._urlInputViewInfoDefault=e(\"Paste the media URL in the input.\");this._urlInputViewInfoTip=e(\"Tip: Paste the URL into the content to embed faster.\");t.label=e(\"Media URL\");t.infoText=this._urlInputViewInfoDefault;i.placeholder=\"https://example.com\";i.on(\"input\",()=>{t.infoText=i.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault});return t}_createButton(e,t,i,n){const o=new rw(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:i}});if(n){o.delegate(\"execute\").to(this,n)}return o}}var SS='\\n';class IS extends Rw{static get requires(){return[CS]}static get pluginName(){return\"MediaEmbedUI\"}init(){const e=this.editor;const t=e.commands.get(\"mediaEmbed\");const i=e.plugins.get(CS).registry;e.ui.componentFactory.add(\"mediaEmbed\",n=>{const o=bw(n);const r=new MS(LS(e.t,i),e.locale);this._setUpDropdown(o,r,t,e);this._setUpForm(o,r,t);return o})}_setUpDropdown(e,t,i){const n=this.editor;const o=n.t;const r=e.buttonView;e.bind(\"isEnabled\").to(i);e.panelView.children.add(t);r.set({label:o(\"Insert media\"),icon:SS,tooltip:true});r.on(\"open\",()=>{t.url=i.value||\"\";t.urlInputView.fieldView.select();t.focus()},{priority:\"low\"});e.on(\"submit\",()=>{if(t.isValid()){n.execute(\"mediaEmbed\",t.url);s()}});e.on(\"change:isOpen\",()=>t.resetFormStatus());e.on(\"cancel\",()=>s());function s(){n.editing.view.focus();e.isOpen=false}}_setUpForm(e,t,i){t.delegate(\"submit\",\"cancel\").to(e);t.urlInputView.bind(\"value\").to(i,\"value\");t.urlInputView.bind(\"isReadOnly\").to(i,\"isEnabled\",e=>!e);t.saveButtonView.bind(\"isEnabled\").to(i)}}function LS(e,t){return[t=>{if(!t.url.length){return e(\"The URL must not be empty.\")}},i=>{if(!t.hasMedia(i.url)){return e(\"This media URL is not supported.\")}}]}var NS=i(110);class OS extends Rw{static get requires(){return[CS,IS,ES,uA]}static get pluginName(){return\"MediaEmbed\"}}class RS extends Dw{refresh(){this.isEnabled=zS(this.editor.model)}execute(){const e=this.editor.model;e.change(t=>{const i=t.createElement(\"pageBreak\");e.insertContent(i);let n=i.nextSibling;const o=n&&e.schema.checkChild(n,\"$text\");if(!o&&e.schema.checkChild(i.parent,\"paragraph\")){n=t.createElement(\"paragraph\");e.insertContent(n,t.createPositionAfter(i))}if(n){t.setSelection(n,0)}})}}function zS(e){const t=e.schema;const i=e.document.selection;return DS(i,t,e)&&!jS(i,t)}function DS(e,t,i){const n=BS(e,i);return t.checkChild(n,\"pageBreak\")}function jS(e,t){const i=e.getSelectedElement();return i&&t.isObject(i)}function BS(e,t){const i=fx(e,t);const n=i.parent;if(n.isEmpty&&!n.is(\"$root\")){return n.parent}return n}var VS=i(112);class FS extends Rw{static get pluginName(){return\"PageBreakEditing\"}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;t.register(\"pageBreak\",{isObject:true,allowWhere:\"$block\"});n.for(\"dataDowncast\").elementToElement({model:\"pageBreak\",view:(e,t)=>{const i=t.createContainerElement(\"div\",{class:\"page-break\",style:\"page-break-after: always\"});const n=t.createContainerElement(\"span\",{style:\"display: none\"});t.insert(t.createPositionAt(i,0),n);return i}});n.for(\"editingDowncast\").elementToElement({model:\"pageBreak\",view:(e,t)=>{const n=i(\"Page break\");const o=t.createContainerElement(\"div\");const r=t.createContainerElement(\"span\");const s=t.createText(i(\"Page break\"));t.addClass(\"page-break\",o);t.setCustomProperty(\"pageBreak\",true,o);t.addClass(\"page-break__label\",r);t.insert(t.createPositionAt(o,0),r);t.insert(t.createPositionAt(r,0),s);return HS(o,t,n)}});n.for(\"upcast\").elementToElement({view:e=>{if(!e.is(\"div\")||e.getStyle(\"page-break-after\")!=\"always\"||e.childCount!=1){return}const t=Bw(e.getChildren());if(!t.is(\"span\")||t.getStyle(\"display\")!=\"none\"||t.childCount!=1){return}const i=Bw(t.getChildren());if(!i.is(\"text\")||i.data!==\" \"){return}return{name:true}},model:\"pageBreak\"});e.commands.add(\"pageBreak\",new RS(e))}}function HS(e,t,i){t.setCustomProperty(\"pageBreak\",true,e);return lx(e,t,{label:i})}var WS='';class US extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(\"pageBreak\",i=>{const n=e.commands.get(\"pageBreak\");const o=new rw(i);o.set({label:t(\"Page break\"),icon:WS,tooltip:true});o.bind(\"isEnabled\").to(n,\"isEnabled\");this.listenTo(o,\"execute\",()=>{e.execute(\"pageBreak\");e.editing.view.focus()});return o})}}class qS extends Rw{static get requires(){return[FS,US]}static get pluginName(){return\"PageBreak\"}}var $S='';const GS=\"removeFormat\";class YS extends Rw{static get pluginName(){return\"RemoveFormatUI\"}init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(GS,i=>{const n=e.commands.get(GS);const o=new rw(i);o.set({label:t(\"Remove Format\"),icon:$S,tooltip:true});o.bind(\"isOn\",\"isEnabled\").to(n,\"value\",\"isEnabled\");this.listenTo(o,\"execute\",()=>{e.execute(GS);e.editing.view.focus()});return o})}}class KS extends Dw{refresh(){const e=this.editor.model;this.isEnabled=!!Bw(this._getFormattingItems(e.document.selection,e.schema))}execute(){const e=this.editor.model;const t=e.schema;e.change(i=>{for(const n of this._getFormattingItems(e.document.selection,t)){if(n.is(\"selection\")){for(const e of this._getFormattingAttributes(n,t)){i.removeSelectionAttribute(e)}}else{const e=i.createRangeOn(n);for(const o of this._getFormattingAttributes(n,t)){i.removeAttribute(o,e)}}}})}*_getFormattingItems(e,t){const i=e=>!!Bw(this._getFormattingAttributes(e,t));for(const t of e.getRanges()){for(const e of t.getItems()){if(i(e)){yield e}}}if(i(e)){yield e}}*_getFormattingAttributes(e,t){for(const[i]of e.getAttributes()){const e=t.getAttributeProperties(i);if(e&&e.isFormatting){yield i}}}}class JS extends Rw{static get pluginName(){return\"RemoveFormatEditing\"}init(){const e=this.editor;e.commands.add(\"removeFormat\",new KS(e))}}class QS extends Rw{static get requires(){return[JS,YS]}static get pluginName(){return\"RemoveFormat\"}}var ZS=i(114);class XS extends _b{constructor(e,t={}){super(e);const i=this.bindTemplate;this.set(\"label\",t.label||\"\");this.set(\"class\",t.class||null);this.children=this.createCollection();this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-form__header\",i.to(\"class\")]},children:this.children});const n=new _b(e);n.setTemplate({tag:\"span\",attributes:{class:[\"ck\",\"ck-form__header__label\"]},children:[{text:i.to(\"label\")}]});this.children.add(n)}}class eI extends XS{constructor(e,t){super(e);const i=e.t;this.set(\"class\",\"ck-special-characters-navigation\");this.groupDropdownView=this._createGroupDropdown(t);this.groupDropdownView.panelPosition=e.uiLanguageDirection===\"rtl\"?\"se\":\"sw\";this.label=i(\"Special characters\");this.children.add(this.groupDropdownView)}get currentGroupName(){return this.groupDropdownView.value}_createGroupDropdown(e){const t=this.locale;const i=t.t;const n=bw(t);const o=this._getCharacterGroupListItemDefinitions(n,e);n.set(\"value\",o.first.model.label);n.buttonView.bind(\"label\").to(n,\"value\");n.buttonView.set({isOn:false,withText:true,tooltip:i(\"Character categories\"),class:[\"ck-dropdown__button_label-width_auto\"]});n.on(\"execute\",e=>{n.value=e.source.label});n.delegate(\"execute\").to(this);_w(n,o);return n}_getCharacterGroupListItemDefinitions(e,t){const i=new xs;for(const n of t){const t={type:\"button\",model:new sk({label:n,withText:true})};t.model.bind(\"isOn\").to(e,\"value\",e=>e===t.model.label);i.add(t)}return i}}var tI=i(116);class iI extends _b{constructor(e){super(e);this.tiles=this.createCollection();this.setTemplate({tag:\"div\",children:[{tag:\"div\",attributes:{class:[\"ck\",\"ck-character-grid__tiles\"]},children:this.tiles}],attributes:{class:[\"ck\",\"ck-character-grid\"]}})}createTile(e,t){const i=new rw(this.locale);i.set({label:e,withText:true,class:\"ck-character-grid__tile\"});i.extendTemplate({attributes:{title:t},on:{mouseover:i.bindTemplate.to(\"mouseover\")}});i.on(\"mouseover\",()=>{this.fire(\"tileHover\",{name:t,character:e})});i.on(\"execute\",()=>{this.fire(\"execute\",{name:t,character:e})});return i}}var nI=i(118);class oI extends _b{constructor(e){super(e);const t=this.bindTemplate;this.set(\"character\",null);this.set(\"name\",null);this.bind(\"code\").to(this,\"character\",rI);this.setTemplate({tag:\"div\",children:[{tag:\"span\",attributes:{class:[\"ck-character-info__name\"]},children:[{text:t.to(\"name\",e=>e?e:\"​\")}]},{tag:\"span\",attributes:{class:[\"ck-character-info__code\"]},children:[{text:t.to(\"code\")}]}],attributes:{class:[\"ck\",\"ck-character-info\"]}})}}function rI(e){if(e===null){return\"\"}const t=e.codePointAt(0).toString(16);return\"U+\"+(\"0000\"+t).slice(-4)}var sI='';var aI=i(120);const lI=\"All\";class cI extends Rw{static get requires(){return[Jk]}static get pluginName(){return\"SpecialCharacters\"}constructor(e){super(e);this._characters=new Map;this._groups=new Map}init(){const e=this.editor;const t=e.t;const i=e.commands.get(\"input\");e.ui.componentFactory.add(\"specialCharacters\",n=>{const o=bw(n);let r;o.buttonView.set({label:t(\"Special characters\"),icon:sI,tooltip:true});o.bind(\"isEnabled\").to(i);o.on(\"execute\",(t,i)=>{e.execute(\"input\",{text:i.character});e.editing.view.focus()});o.on(\"change:isOpen\",()=>{if(!r){r=this._createDropdownPanelContent(n,o);o.panelView.children.add(r.navigationView);o.panelView.children.add(r.gridView);o.panelView.children.add(r.infoView)}r.infoView.set({character:null,name:null})});return o})}addItems(e,t){if(e===lI){throw new ss[\"b\"](`special-character-invalid-group-name: The name \"${lI}\" is reserved and cannot be used.`)}const i=this._getGroup(e);for(const e of t){i.add(e.title);this._characters.set(e.title,e.character)}}getGroups(){return this._groups.keys()}getCharactersForGroup(e){if(e===lI){return new Set(this._characters.keys())}return this._groups.get(e)}getCharacter(e){return this._characters.get(e)}_getGroup(e){if(!this._groups.has(e)){this._groups.set(e,new Set)}return this._groups.get(e)}_updateGrid(e,t){t.tiles.clear();const i=this.getCharactersForGroup(e);for(const e of i){const i=this.getCharacter(e);t.tiles.add(t.createTile(i,e))}}_createDropdownPanelContent(e,t){const i=[...this.getGroups()];i.unshift(lI);const n=new eI(e,i);const o=new iI(e);const r=new oI(e);o.delegate(\"execute\").to(t);o.on(\"tileHover\",(e,t)=>{r.set(t)});n.on(\"execute\",()=>{this._updateGrid(n.currentGroupName,o)});this._updateGrid(n.currentGroupName,o);return{navigationView:n,gridView:o,infoView:r}}}class dI extends Rw{init(){const e=this.editor;const t=e.t;e.plugins.get(\"SpecialCharacters\").addItems(\"Arrows\",[{title:t(\"leftwards double arrow\"),character:\"⇐\"},{title:t(\"rightwards double arrow\"),character:\"⇒\"},{title:t(\"upwards double arrow\"),character:\"⇑\"},{title:t(\"downwards double arrow\"),character:\"⇓\"},{title:t(\"leftwards dashed arrow\"),character:\"⇠\"},{title:t(\"rightwards dashed arrow\"),character:\"⇢\"},{title:t(\"upwards dashed arrow\"),character:\"⇡\"},{title:t(\"downwards dashed arrow\"),character:\"⇣\"},{title:t(\"leftwards arrow to bar\"),character:\"⇤\"},{title:t(\"rightwards arrow to bar\"),character:\"⇥\"},{title:t(\"upwards arrow to bar\"),character:\"⤒\"},{title:t(\"downwards arrow to bar\"),character:\"⤓\"},{title:t(\"up down arrow with base\"),character:\"↨\"},{title:t(\"back with leftwards arrow above\"),character:\"🔙\"},{title:t(\"end with leftwards arrow above\"),character:\"🔚\"},{title:t(\"on with exclamation mark with left right arrow above\"),character:\"🔛\"},{title:t(\"soon with rightwards arrow above\"),character:\"🔜\"},{title:t(\"top with upwards arrow above\"),character:\"🔝\"}])}}class uI extends Rw{init(){const e=this.editor;const t=e.t;e.plugins.get(\"SpecialCharacters\").addItems(\"Currency\",[{character:\"$\",title:t(\"Dollar sign\")},{character:\"€\",title:t(\"Euro sign\")},{character:\"¥\",title:t(\"Yen sign\")},{character:\"£\",title:t(\"Pound sign\")},{character:\"¢\",title:t(\"Cent sign\")},{character:\"₠\",title:t(\"Euro-currency sign\")},{character:\"₡\",title:t(\"Colon sign\")},{character:\"₢\",title:t(\"Cruzeiro sign\")},{character:\"₣\",title:t(\"French franc sign\")},{character:\"₤\",title:t(\"Lira sign\")},{character:\"¤\",title:t(\"Currency sign\")},{character:\"₿\",title:t(\"Bitcoin sign\")},{character:\"₥\",title:t(\"Mill sign\")},{character:\"₦\",title:t(\"Naira sign\")},{character:\"₧\",title:t(\"Peseta sign\")},{character:\"₨\",title:t(\"Rupee sign\")},{character:\"₩\",title:t(\"Won sign\")},{character:\"₪\",title:t(\"New sheqel sign\")},{character:\"₫\",title:t(\"Dong sign\")},{character:\"₭\",title:t(\"Kip sign\")},{character:\"₮\",title:t(\"Tugrik sign\")},{character:\"₯\",title:t(\"Drachma sign\")},{character:\"₰\",title:t(\"German penny sign\")},{character:\"₱\",title:t(\"Peso sign\")},{character:\"₲\",title:t(\"Guarani sign\")},{character:\"₳\",title:t(\"Austral sign\")},{character:\"₴\",title:t(\"Hryvnia sign\")},{character:\"₵\",title:t(\"Cedi sign\")},{character:\"₶\",title:t(\"Livre tournois sign\")},{character:\"₷\",title:t(\"Spesmilo sign\")},{character:\"₸\",title:t(\"Tenge sign\")},{character:\"₹\",title:t(\"Indian rupee sign\")},{character:\"₺\",title:t(\"Turkish lira sign\")},{character:\"₻\",title:t(\"Nordic mark sign\")},{character:\"₼\",title:t(\"Manat sign\")},{character:\"₽\",title:t(\"Ruble sign\")}])}}class hI extends Rw{init(){const e=this.editor;const t=e.t;e.plugins.get(\"SpecialCharacters\").addItems(\"Mathematical\",[{character:\"<\",title:t(\"Less-than sign\")},{character:\">\",title:t(\"Greater-than sign\")},{character:\"≤\",title:t(\"Less-than or equal to\")},{character:\"≥\",title:t(\"Greater-than or equal to\")},{character:\"–\",title:t(\"En dash\")},{character:\"—\",title:t(\"Em dash\")},{character:\"¯\",title:t(\"Macron\")},{character:\"‾\",title:t(\"Overline\")},{character:\"°\",title:t(\"Degree sign\")},{character:\"−\",title:t(\"Minus sign\")},{character:\"±\",title:t(\"Plus-minus sign\")},{character:\"÷\",title:t(\"Division sign\")},{character:\"⁄\",title:t(\"Fraction slash\")},{character:\"×\",title:t(\"Multiplication sign\")},{character:\"ƒ\",title:t(\"Latin small letter f with hook\")},{character:\"∫\",title:t(\"Integral\")},{character:\"∑\",title:t(\"N-ary summation\")},{character:\"∞\",title:t(\"Infinity\")},{character:\"√\",title:t(\"Square root\")},{character:\"∼\",title:t(\"Tilde operator\")},{character:\"≅\",title:t(\"Approximately equal to\")},{character:\"≈\",title:t(\"Almost equal to\")},{character:\"≠\",title:t(\"Not equal to\")},{character:\"≡\",title:t(\"Identical to\")},{character:\"∈\",title:t(\"Element of\")},{character:\"∉\",title:t(\"Not an element of\")},{character:\"∋\",title:t(\"Contains as member\")},{character:\"∏\",title:t(\"N-ary product\")},{character:\"∧\",title:t(\"Logical and\")},{character:\"∨\",title:t(\"Logical or\")},{character:\"¬\",title:t(\"Not sign\")},{character:\"∩\",title:t(\"Intersection\")},{character:\"∪\",title:t(\"Union\")},{character:\"∂\",title:t(\"Partial differential\")},{character:\"∀\",title:t(\"For all\")},{character:\"∃\",title:t(\"There exists\")},{character:\"∅\",title:t(\"Empty set\")},{character:\"∇\",title:t(\"Nabla\")},{character:\"∗\",title:t(\"Asterisk operator\")},{character:\"∝\",title:t(\"Proportional to\")},{character:\"∠\",title:t(\"Angle\")},{character:\"¼\",title:t(\"Vulgar fraction one quarter\")},{character:\"½\",title:t(\"Vulgar fraction one half\")},{character:\"¾\",title:t(\"Vulgar fraction three quarters\")}])}}class fI extends Rw{init(){const e=this.editor;const t=e.t;e.plugins.get(\"SpecialCharacters\").addItems(\"Latin\",[{character:\"Ā\",title:t(\"Latin capital letter a with macron\")},{character:\"ā\",title:t(\"Latin small letter a with macron\")},{character:\"Ă\",title:t(\"Latin capital letter a with breve\")},{character:\"ă\",title:t(\"Latin small letter a with breve\")},{character:\"Ą\",title:t(\"Latin capital letter a with ogonek\")},{character:\"ą\",title:t(\"Latin small letter a with ogonek\")},{character:\"Ć\",title:t(\"Latin capital letter c with acute\")},{character:\"ć\",title:t(\"Latin small letter c with acute\")},{character:\"Ĉ\",title:t(\"Latin capital letter c with circumflex\")},{character:\"ĉ\",title:t(\"Latin small letter c with circumflex\")},{character:\"Ċ\",title:t(\"Latin capital letter c with dot above\")},{character:\"ċ\",title:t(\"Latin small letter c with dot above\")},{character:\"Č\",title:t(\"Latin capital letter c with caron\")},{character:\"č\",title:t(\"Latin small letter c with caron\")},{character:\"Ď\",title:t(\"Latin capital letter d with caron\")},{character:\"ď\",title:t(\"Latin small letter d with caron\")},{character:\"Đ\",title:t(\"Latin capital letter d with stroke\")},{character:\"đ\",title:t(\"Latin small letter d with stroke\")},{character:\"Ē\",title:t(\"Latin capital letter e with macron\")},{character:\"ē\",title:t(\"Latin small letter e with macron\")},{character:\"Ĕ\",title:t(\"Latin capital letter e with breve\")},{character:\"ĕ\",title:t(\"Latin small letter e with breve\")},{character:\"Ė\",title:t(\"Latin capital letter e with dot above\")},{character:\"ė\",title:t(\"Latin small letter e with dot above\")},{character:\"Ę\",title:t(\"Latin capital letter e with ogonek\")},{character:\"ę\",title:t(\"Latin small letter e with ogonek\")},{character:\"Ě\",title:t(\"Latin capital letter e with caron\")},{character:\"ě\",title:t(\"Latin small letter e with caron\")},{character:\"Ĝ\",title:t(\"Latin capital letter g with circumflex\")},{character:\"ĝ\",title:t(\"Latin small letter g with circumflex\")},{character:\"Ğ\",title:t(\"Latin capital letter g with breve\")},{character:\"ğ\",title:t(\"Latin small letter g with breve\")},{character:\"Ġ\",title:t(\"Latin capital letter g with dot above\")},{character:\"ġ\",title:t(\"Latin small letter g with dot above\")},{character:\"Ģ\",title:t(\"Latin capital letter g with cedilla\")},{character:\"ģ\",title:t(\"Latin small letter g with cedilla\")},{character:\"Ĥ\",title:t(\"Latin capital letter h with circumflex\")},{character:\"ĥ\",title:t(\"Latin small letter h with circumflex\")},{character:\"Ħ\",title:t(\"Latin capital letter h with stroke\")},{character:\"ħ\",title:t(\"Latin small letter h with stroke\")},{character:\"Ĩ\",title:t(\"Latin capital letter i with tilde\")},{character:\"ĩ\",title:t(\"Latin small letter i with tilde\")},{character:\"Ī\",title:t(\"Latin capital letter i with macron\")},{character:\"ī\",title:t(\"Latin small letter i with macron\")},{character:\"Ĭ\",title:t(\"Latin capital letter i with breve\")},{character:\"ĭ\",title:t(\"Latin small letter i with breve\")},{character:\"Į\",title:t(\"Latin capital letter i with ogonek\")},{character:\"į\",title:t(\"Latin small letter i with ogonek\")},{character:\"İ\",title:t(\"Latin capital letter i with dot above\")},{character:\"ı\",title:t(\"Latin small letter dotless i\")},{character:\"IJ\",title:t(\"Latin capital ligature ij\")},{character:\"ij\",title:t(\"Latin small ligature ij\")},{character:\"Ĵ\",title:t(\"Latin capital letter j with circumflex\")},{character:\"ĵ\",title:t(\"Latin small letter j with circumflex\")},{character:\"Ķ\",title:t(\"Latin capital letter k with cedilla\")},{character:\"ķ\",title:t(\"Latin small letter k with cedilla\")},{character:\"ĸ\",title:t(\"Latin small letter kra\")},{character:\"Ĺ\",title:t(\"Latin capital letter l with acute\")},{character:\"ĺ\",title:t(\"Latin small letter l with acute\")},{character:\"Ļ\",title:t(\"Latin capital letter l with cedilla\")},{character:\"ļ\",title:t(\"Latin small letter l with cedilla\")},{character:\"Ľ\",title:t(\"Latin capital letter l with caron\")},{character:\"ľ\",title:t(\"Latin small letter l with caron\")},{character:\"Ŀ\",title:t(\"Latin capital letter l with middle dot\")},{character:\"ŀ\",title:t(\"Latin small letter l with middle dot\")},{character:\"Ł\",title:t(\"Latin capital letter l with stroke\")},{character:\"ł\",title:t(\"Latin small letter l with stroke\")},{character:\"Ń\",title:t(\"Latin capital letter n with acute\")},{character:\"ń\",title:t(\"Latin small letter n with acute\")},{character:\"Ņ\",title:t(\"Latin capital letter n with cedilla\")},{character:\"ņ\",title:t(\"Latin small letter n with cedilla\")},{character:\"Ň\",title:t(\"Latin capital letter n with caron\")},{character:\"ň\",title:t(\"Latin small letter n with caron\")},{character:\"ʼn\",title:t(\"Latin small letter n preceded by apostrophe\")},{character:\"Ŋ\",title:t(\"Latin capital letter eng\")},{character:\"ŋ\",title:t(\"Latin small letter eng\")},{character:\"Ō\",title:t(\"Latin capital letter o with macron\")},{character:\"ō\",title:t(\"Latin small letter o with macron\")},{character:\"Ŏ\",title:t(\"Latin capital letter o with breve\")},{character:\"ŏ\",title:t(\"Latin small letter o with breve\")},{character:\"Ő\",title:t(\"Latin capital letter o with double acute\")},{character:\"ő\",title:t(\"Latin small letter o with double acute\")},{character:\"Œ\",title:t(\"Latin capital ligature oe\")},{character:\"œ\",title:t(\"Latin small ligature oe\")},{character:\"Ŕ\",title:t(\"Latin capital letter r with acute\")},{character:\"ŕ\",title:t(\"Latin small letter r with acute\")},{character:\"Ŗ\",title:t(\"Latin capital letter r with cedilla\")},{character:\"ŗ\",title:t(\"Latin small letter r with cedilla\")},{character:\"Ř\",title:t(\"Latin capital letter r with caron\")},{character:\"ř\",title:t(\"Latin small letter r with caron\")},{character:\"Ś\",title:t(\"Latin capital letter s with acute\")},{character:\"ś\",title:t(\"Latin small letter s with acute\")},{character:\"Ŝ\",title:t(\"Latin capital letter s with circumflex\")},{character:\"ŝ\",title:t(\"Latin small letter s with circumflex\")},{character:\"Ş\",title:t(\"Latin capital letter s with cedilla\")},{character:\"ş\",title:t(\"Latin small letter s with cedilla\")},{character:\"Š\",title:t(\"Latin capital letter s with caron\")},{character:\"š\",title:t(\"Latin small letter s with caron\")},{character:\"Ţ\",title:t(\"Latin capital letter t with cedilla\")},{character:\"ţ\",title:t(\"Latin small letter t with cedilla\")},{character:\"Ť\",title:t(\"Latin capital letter t with caron\")},{character:\"ť\",title:t(\"Latin small letter t with caron\")},{character:\"Ŧ\",title:t(\"Latin capital letter t with stroke\")},{character:\"ŧ\",title:t(\"Latin small letter t with stroke\")},{character:\"Ũ\",title:t(\"Latin capital letter u with tilde\")},{character:\"ũ\",title:t(\"Latin small letter u with tilde\")},{character:\"Ū\",title:t(\"Latin capital letter u with macron\")},{character:\"ū\",title:t(\"Latin small letter u with macron\")},{character:\"Ŭ\",title:t(\"Latin capital letter u with breve\")},{character:\"ŭ\",title:t(\"Latin small letter u with breve\")},{character:\"Ů\",title:t(\"Latin capital letter u with ring above\")},{character:\"ů\",title:t(\"Latin small letter u with ring above\")},{character:\"Ű\",title:t(\"Latin capital letter u with double acute\")},{character:\"ű\",title:t(\"Latin small letter u with double acute\")},{character:\"Ų\",title:t(\"Latin capital letter u with ogonek\")},{character:\"ų\",title:t(\"Latin small letter u with ogonek\")},{character:\"Ŵ\",title:t(\"Latin capital letter w with circumflex\")},{character:\"ŵ\",title:t(\"Latin small letter w with circumflex\")},{character:\"Ŷ\",title:t(\"Latin capital letter y with circumflex\")},{character:\"ŷ\",title:t(\"Latin small letter y with circumflex\")},{character:\"Ÿ\",title:t(\"Latin capital letter y with diaeresis\")},{character:\"Ź\",title:t(\"Latin capital letter z with acute\")},{character:\"ź\",title:t(\"Latin small letter z with acute\")},{character:\"Ż\",title:t(\"Latin capital letter z with dot above\")},{character:\"ż\",title:t(\"Latin small letter z with dot above\")},{character:\"Ž\",title:t(\"Latin capital letter z with caron\")},{character:\"ž\",title:t(\"Latin small letter z with caron\")},{character:\"ſ\",title:t(\"Latin small letter long s\")}])}}class mI extends Rw{init(){const e=this.editor;const t=e.t;e.plugins.get(\"SpecialCharacters\").addItems(\"Text\",[{character:\"‹\",title:t(\"Single left-pointing angle quotation mark\")},{character:\"›\",title:t(\"Single right-pointing angle quotation mark\")},{character:\"«\",title:t(\"Left-pointing double angle quotation mark\")},{character:\"»\",title:t(\"Right-pointing double angle quotation mark\")},{character:\"‘\",title:t(\"Left single quotation mark\")},{character:\"’\",title:t(\"Right single quotation mark\")},{character:\"“\",title:t(\"Left double quotation mark\")},{character:\"”\",title:t(\"Right double quotation mark\")},{character:\"‚\",title:t(\"Single low-9 quotation mark\")},{character:\"„\",title:t(\"Double low-9 quotation mark\")},{character:\"¡\",title:t(\"Inverted exclamation mark\")},{character:\"¿\",title:t(\"Inverted question mark\")},{character:\"‥\",title:t(\"Two dot leader\")},{character:\"…\",title:t(\"Horizontal ellipsis\")},{character:\"‡\",title:t(\"Double dagger\")},{character:\"‰\",title:t(\"Per mille sign\")},{character:\"‱\",title:t(\"Per ten thousand sign\")},{character:\"‼\",title:t(\"Double exclamation mark\")},{character:\"⁈\",title:t(\"Question exclamation mark\")},{character:\"⁉\",title:t(\"Exclamation question mark\")},{character:\"⁇\",title:t(\"Double question mark\")},{character:\"©\",title:t(\"Copyright sign\")},{character:\"®\",title:t(\"Registered sign\")},{character:\"™\",title:t(\"Trade mark sign\")},{character:\"§\",title:t(\"Section sign\")},{character:\"¶\",title:t(\"Paragraph sign\")},{character:\"⁋\",title:t(\"Reversed paragraph sign\")}])}}class gI extends Rw{static get requires(){return[uI,mI,hI,dI,fI]}}const pI=\"strikethrough\";class bI extends Rw{static get pluginName(){return\"StrikethroughEditing\"}init(){const e=this.editor;e.model.schema.extend(\"$text\",{allowAttributes:pI});e.model.schema.setAttributeProperties(pI,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:pI,view:\"s\",upcastAlso:[\"del\",\"strike\",{styles:{\"text-decoration\":\"line-through\"}}]});e.commands.add(pI,new w_(e,pI));e.keystrokes.set(\"CTRL+SHIFT+X\",\"strikethrough\")}}var wI='';const _I=\"strikethrough\";class kI extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(_I,i=>{const n=e.commands.get(_I);const o=new rw(i);o.set({label:t(\"Strikethrough\"),icon:wI,keystroke:\"CTRL+SHIFT+X\",tooltip:true,isToggleable:true});o.bind(\"isOn\",\"isEnabled\").to(n,\"value\",\"isEnabled\");this.listenTo(o,\"execute\",()=>{e.execute(_I);e.editing.view.focus()});return o})}}class vI extends Rw{static get requires(){return[bI,kI]}static get pluginName(){return\"Strikethrough\"}}function yI(e,t){let i=t.parent;while(i){if(i.name===e){return i}i=i.parent}}function xI(e,t,i,n,o=1){if(t>o){n.setAttribute(e,t,i)}else{n.removeAttribute(e,i)}}function AI(e,t,i={}){const n=e.createElement(\"tableCell\",i);e.insertElement(\"paragraph\",n);e.insert(n,t)}function CI(e){if(!e||!le(e)){return e}const{top:t,right:i,bottom:n,left:o}=e;if(t==i&&i==n&&n==o){return t}}function TI(e,t){const i=parseFloat(e);if(Number.isNaN(i)){return e}if(String(i)!==String(e)){return e}return`${i}${t}`}function EI(e,t){const i=t.parent.parent;const n=parseInt(i.getAttribute(\"headingColumns\")||0);const{column:o}=e.getCellLocation(t);return!!n&&o{e.on(\"element:table\",(e,t,i)=>{const n=t.viewItem;if(!i.consumable.test(n,{name:true})){return}const{rows:o,headingRows:r,headingColumns:s}=II(n);const a={};if(s){a.headingColumns=s}if(r){a.headingRows=r}const l=i.writer.createElement(\"table\",a);const c=i.splitToAllowedParent(l,t.modelCursor);if(!c){return}i.writer.insert(l,c.position);i.consumable.consume(n,{name:true});o.forEach(e=>i.convertItem(e,i.writer.createPositionAt(l,\"end\")));if(l.isEmpty){const e=i.writer.createElement(\"tableRow\");i.writer.insert(e,i.writer.createPositionAt(l,\"end\"));AI(i.writer,i.writer.createPositionAt(e,\"end\"))}t.modelRange=i.writer.createRange(i.writer.createPositionBefore(l),i.writer.createPositionAfter(l));if(c.cursorParent){t.modelCursor=i.writer.createPositionAt(c.cursorParent,0)}else{t.modelCursor=t.modelRange.end}})}}function MI(){return e=>{e.on(\"element:tr\",(e,t)=>{if(t.viewItem.isEmpty){e.stop()}},{priority:\"high\"})}}function SI(e){return t=>{t.on(`element:${e}`,(e,t,i)=>{const n=t.viewItem;if(!i.consumable.test(n,{name:true})){return}const o=i.writer.createElement(\"tableCell\");const r=i.splitToAllowedParent(o,t.modelCursor);if(!r){return}i.writer.insert(o,r.position);i.consumable.consume(n,{name:true});const s=i.writer.createPositionAt(o,0);i.convertChildren(n,s);if(!o.childCount){i.writer.insertElement(\"paragraph\",s)}t.modelRange=i.writer.createRange(i.writer.createPositionBefore(o),i.writer.createPositionAfter(o));t.modelCursor=t.modelRange.end})}}function II(e){const t={headingRows:0,headingColumns:0};const i=[];const n=[];let o;for(const r of Array.from(e.getChildren())){if(r.name===\"tbody\"||r.name===\"thead\"||r.name===\"tfoot\"){if(r.name===\"thead\"&&!o){o=r}const e=Array.from(r.getChildren()).filter(e=>e.is(\"element\",\"tr\"));for(const r of e){if(r.parent.name===\"thead\"&&r.parent===o){t.headingRows++;i.push(r)}else{n.push(r);const e=LI(r,t,o);if(e>t.headingColumns){t.headingColumns=e}}}}}t.rows=[...i,...n];return t}function LI(e){let t=0;let i=0;const n=Array.from(e.getChildren()).filter(e=>e.name===\"th\"||e.name===\"td\");while(i1||r>1){this._recordSpans(this._row,this._column,r,o,t)}this._nextCellAtColumn=this._column+o;i=this._shouldSkipRow()||this._shouldSkipColumn();n=this._formatOutValue(t,this._column,false,r,o)}this._column++;if(this._column==this._nextCellAtColumn){this._cellIndex++}return i?this.next():n}skipRow(e){this._skipRows.add(e)}_isOverEndRow(){return this.endRow!==undefined&&this._row>this.endRow}_formatOutValue(e,t,i,n=1,o=1){return{done:false,value:{cell:e,row:this._row,column:t,isSpanned:i,rowspan:n,colspan:o,cellIndex:this._cellIndex}}}_shouldSkipRow(){const e=this._rowe.parent.index);return YI(t)}function HI(e){const t=yI(\"table\",e[0]);const i=[...new NI(t)];const n=i.filter(t=>e.includes(t.cell)).map(e=>e.column);return YI(n)}function WI(e,t){if(e.length<2||!ZI(e)){return false}const i=new Set;const n=new Set;let o=0;for(const r of e){const{row:e,column:s}=t.getCellLocation(r);const a=parseInt(r.getAttribute(\"rowspan\")||1);const l=parseInt(r.getAttribute(\"colspan\")||1);i.add(e);n.add(s);if(a>1){i.add(e+a-1)}if(l>1){n.add(s+l-1)}o+=a*l}const r=QI(i,n);return r==o}function UI(e,t,i=0){const n=[];const o=new NI(e,{startRow:i,endRow:t-1});for(const e of o){const{row:i,rowspan:o}=e;const r=i+o-1;if(i1){l.rowspan=c}const d=parseInt(e.getAttribute(\"colspan\")||1);if(d>1){l.colspan=d}const u=r;const h=u+a;const f=[...new NI(o,{startRow:u,endRow:h,includeSpanned:true})];let m;for(const{row:t,column:n,cell:r,cellIndex:s}of f){if(r===e&&m===undefined){m=n}if(m!==undefined&&m===n&&t===h){const e=o.getChild(t);const n=i.createPositionAt(e,s);AI(i,n,l)}}xI(\"rowspan\",a,e,i)}function $I(e,t){const i=[];const n=new NI(e);for(const e of n){const{column:n,colspan:o}=e;const r=n+o-1;if(n1){s.colspan=a}const l=parseInt(e.getAttribute(\"rowspan\")||1);if(l>1){s.rowspan=l}AI(n,n.createPositionAfter(e),s);xI(\"colspan\",r,e,n)}function YI(e){const t=e.sort((e,t)=>e-t);const i=t[0];const n=t[t.length-1];return{first:i,last:n}}function KI(e){return Array.from(e).sort(JI)}function JI(e,t){const i=e.start;const n=t.start;return i.isBefore(n)?-1:1}function QI(e,t){const i=Array.from(e.values());const n=Array.from(t.values());const o=Math.max(...i);const r=Math.min(...i);const s=Math.max(...n);const a=Math.min(...n);return(o-r+1)*(s-a+1)}function ZI(e){const t=yI(\"table\",e[0]);const i=FI(e);const n=parseInt(t.getAttribute(\"headingRows\")||0);if(!XI(i,n)){return false}const o=parseInt(t.getAttribute(\"headingColumns\")||0);const r=HI(e);return XI(r,o)}function XI({first:e,last:t},i){const n=et.on(\"insert:table\",(t,i,n)=>{const o=i.item;if(!n.consumable.consume(o,\"insert\")){return}n.consumable.consume(o,\"attribute:headingRows:table\");n.consumable.consume(o,\"attribute:headingColumns:table\");const r=e&&e.asWidget;const s=n.writer.createContainerElement(\"figure\",{class:\"table\"});const a=n.writer.createContainerElement(\"table\");n.writer.insert(n.writer.createPositionAt(s,0),a);let l;if(r){l=OI(s,n.writer)}const c=new NI(o);const d={headingRows:o.getAttribute(\"headingRows\")||0,headingColumns:o.getAttribute(\"headingColumns\")||0};const u=new Map;for(const t of c){const{row:i,cell:r}=t;const s=hL(uL(i,d),a,n);const l=o.getChild(i);const c=u.get(i)||cL(l,i,s,n);u.set(i,c);n.consumable.consume(r,\"insert\");const h=n.writer.createPositionAt(c,\"end\");lL(t,d,h,n,e)}const h=n.mapper.toViewPosition(i.range.start);n.mapper.bindElements(o,r?l:s);n.writer.insert(h,r?l:s)})}function tL(e={}){return t=>t.on(\"insert:tableRow\",(t,i,n)=>{const o=i.item;if(!n.consumable.consume(o,\"insert\")){return}const r=o.parent;const s=n.mapper.toViewElement(r);const a=bL(s);const l=r.getChildIndex(o);const c=new NI(r,{startRow:l,endRow:l});const d={headingRows:r.getAttribute(\"headingRows\")||0,headingColumns:r.getAttribute(\"headingColumns\")||0};const u=new Map;for(const t of c){const i=hL(uL(l,d),a,n);const r=u.get(l)||cL(o,l,i,n);u.set(l,r);n.consumable.consume(t.cell,\"insert\");const s=n.writer.createPositionAt(r,\"end\");lL(t,d,s,n,e)}})}function iL(e={}){return t=>t.on(\"insert:tableCell\",(t,i,n)=>{const o=i.item;if(!n.consumable.consume(o,\"insert\")){return}const r=o.parent;const s=r.parent;const a=s.getChildIndex(r);const l=new NI(s,{startRow:a,endRow:a});const c={headingRows:s.getAttribute(\"headingRows\")||0,headingColumns:s.getAttribute(\"headingColumns\")||0};for(const t of l){if(t.cell===o){const i=n.mapper.toViewElement(r);const s=n.writer.createPositionAt(i,r.getChildIndex(o));lL(t,c,s,n,e);return}}})}function nL(e={}){const t=!!e.asWidget;return e=>e.on(\"attribute:headingRows:table\",(e,i,n)=>{const o=i.item;if(!n.consumable.consume(i.item,e.name)){return}const r=n.mapper.toViewElement(o);const s=bL(r);const a=i.attributeOldValue;const l=i.attributeNewValue;if(l>a){const e=Array.from(o.getChildren()).filter(({index:e})=>c(e,a-1,l));const i=hL(\"thead\",s,n);pL(e,i,n,\"end\");for(const i of e){for(const e of i.getChildren()){sL(e,\"th\",n,t)}}}else{const e=Array.from(o.getChildren()).filter(({index:e})=>c(e,l-1,a)).reverse();const i=hL(\"tbody\",s,n);pL(e,i,n,0);const r=new NI(o,{startRow:l?l-1:l,endRow:a-1});const d={headingRows:o.getAttribute(\"headingRows\")||0,headingColumns:o.getAttribute(\"headingColumns\")||0};for(const e of r){aL(e,d,n,t)}}gL(\"thead\",s,n);gL(\"tbody\",s,n);function c(e,t,i){return e>t&&ee.on(\"attribute:headingColumns:table\",(e,i,n)=>{const o=i.item;if(!n.consumable.consume(i.item,e.name)){return}const r={headingRows:o.getAttribute(\"headingRows\")||0,headingColumns:o.getAttribute(\"headingColumns\")||0};const s=i.attributeOldValue;const a=i.attributeNewValue;const l=(s>a?s:a)-1;for(const e of new NI(o)){if(e.column>l){continue}aL(e,r,n,t)}})}function rL(){return e=>e.on(\"remove:tableRow\",(e,t,i)=>{e.stop();const n=i.writer;const o=i.mapper;const r=o.toViewPosition(t.position).getLastMatchingPosition(e=>!e.item.is(\"tr\"));const s=r.nodeAfter;const a=s.parent;const l=a.parent;const c=n.createRangeOn(s);const d=n.remove(c);for(const e of n.createRangeIn(d).getItems()){o.unbindViewElement(e)}gL(\"thead\",l,i);gL(\"tbody\",l,i)},{priority:\"higher\"})}function sL(e,t,i,n){const o=i.writer;const r=i.mapper.toViewElement(e);if(!r){return}let s;if(n){const e=o.createEditableElement(t,r.getAttributes());s=hx(e,o);o.insert(o.createPositionAfter(r),s);o.move(o.createRangeIn(r),o.createPositionAt(s,0));o.remove(o.createRangeOn(r))}else{s=o.rename(t,r)}i.mapper.unbindViewElement(r);i.mapper.bindElements(e,s)}function aL(e,t,i,n){const{cell:o}=e;const r=dL(e,t);const s=i.mapper.toViewElement(o);if(s&&s.name!==r){sL(o,r,i,n)}}function lL(e,t,i,n,o){const r=o&&o.asWidget;const s=dL(e,t);const a=r?hx(n.writer.createEditableElement(s),n.writer):n.writer.createContainerElement(s);const l=e.cell;const c=l.getChild(0);const d=l.childCount===1&&c.name===\"paragraph\";n.writer.insert(i,a);if(d&&!wL(c)){const e=l.getChild(0);const t=n.writer.createPositionAt(a,\"end\");n.consumable.consume(e,\"insert\");if(o.asWidget){const i=n.writer.createContainerElement(\"span\",{style:\"display:inline-block\"});n.mapper.bindElements(e,i);n.writer.insert(t,i);n.mapper.bindElements(l,a)}else{n.mapper.bindElements(l,a);n.mapper.bindElements(e,a)}}else{n.mapper.bindElements(l,a)}}function cL(e,t,i,n){n.consumable.consume(e,\"insert\");const o=n.writer.createContainerElement(\"tr\");n.mapper.bindElements(e,o);const r=e.parent.getAttribute(\"headingRows\")||0;const s=r>0&&t>=r?t-r:t;const a=n.writer.createPositionAt(i,s);n.writer.insert(a,o);return o}function dL(e,t){const{row:i,column:n}=e;const{headingColumns:o,headingRows:r}=t;const s=r&&r>i;if(s){return\"th\"}const a=o&&o>n;return a?\"th\":\"td\"}function uL(e,t){return e{const i=n.createTable(e,o,r);t.insertContent(i,s);e.setSelection(e.createPositionAt(i.getNodeByPath([0,0,0]),0))})}}function kL(e){const t=e.parent;return t===t.root?t:t.parent}class vL extends Dw{constructor(e,t={}){super(e);this.order=t.order||\"below\"}refresh(){const e=this.editor.model.document.selection;const t=yI(\"table\",e.getFirstPosition());this.isEnabled=!!t}execute(){const e=this.editor;const t=e.model.document.selection;const i=e.plugins.get(\"TableUtils\");const n=this.order===\"above\";const o=VI(t);const r=FI(o);const s=n?r.first:r.last;const a=yI(\"table\",o[0]);i.insertRows(a,{at:n?s:s+1,copyStructureFromAbove:!n})}}class yL extends Dw{constructor(e,t={}){super(e);this.order=t.order||\"right\"}refresh(){const e=this.editor.model.document.selection;const t=yI(\"table\",e.getFirstPosition());this.isEnabled=!!t}execute(){const e=this.editor;const t=e.model.document.selection;const i=e.plugins.get(\"TableUtils\");const n=this.order===\"left\";const o=VI(t);const r=HI(o);const s=n?r.first:r.last;const a=yI(\"table\",o[0]);i.insertColumns(a,{columns:1,at:n?s:s+1})}}class xL extends Dw{constructor(e,t={}){super(e);this.direction=t.direction||\"horizontally\"}refresh(){const e=VI(this.editor.model.document.selection);this.isEnabled=e.length===1}execute(){const e=VI(this.editor.model.document.selection)[0];const t=this.direction===\"horizontally\";const i=this.editor.plugins.get(\"TableUtils\");if(t){i.splitCellHorizontally(e,2)}else{i.splitCellVertically(e,2)}}}class AL extends Dw{constructor(e,t){super(e);this.direction=t.direction;this.isHorizontal=this.direction==\"right\"||this.direction==\"left\"}refresh(){const e=this._getMergeableCell();this.value=e;this.isEnabled=!!e}execute(){const e=this.editor.model;const t=e.document;const i=BI(t.selection)[0];const n=this.value;const o=this.direction;e.change(e=>{const t=o==\"right\"||o==\"down\";const r=t?i:n;const s=t?n:i;const a=s.parent;EL(s,r,e);const l=this.isHorizontal?\"colspan\":\"rowspan\";const c=parseInt(i.getAttribute(l)||1);const d=parseInt(n.getAttribute(l)||1);e.setAttribute(l,c+d,r);e.setSelection(e.createRangeIn(r));if(!a.childCount){const t=this.editor.plugins.get(\"TableUtils\");const i=yI(\"table\",a);t.removeRows(i,{at:a.index,batch:e.batch})}})}_getMergeableCell(){const e=this.editor.model;const t=e.document;const i=BI(t.selection)[0];if(!i){return}const n=this.editor.plugins.get(\"TableUtils\");const o=this.isHorizontal?CL(i,this.direction,n):TL(i,this.direction);if(!o){return}const r=this.isHorizontal?\"rowspan\":\"colspan\";const s=parseInt(i.getAttribute(r)||1);const a=parseInt(o.getAttribute(r)||1);if(a===s){return o}}}function CL(e,t,i){const n=e.parent;const o=n.parent;const r=t==\"right\"?e.nextSibling:e.previousSibling;const s=(o.getAttribute(\"headingColumns\")||0)>0;if(!r){return}const a=t==\"right\"?e:r;const l=t==\"right\"?r:e;const{column:c}=i.getCellLocation(a);const{column:d}=i.getCellLocation(l);const u=parseInt(a.getAttribute(\"colspan\")||1);const h=EI(i,a,o);const f=EI(i,l,o);if(s&&h!=f){return}const m=c+u===d;return m?r:undefined}function TL(e,t){const i=e.parent;const n=i.parent;const o=n.getChildIndex(i);if(t==\"down\"&&o===n.childCount-1||t==\"up\"&&o===0){return}const r=parseInt(e.getAttribute(\"rowspan\")||1);const s=n.getAttribute(\"headingRows\")||0;const a=t==\"down\"&&o+r===s;const l=t==\"up\"&&o===s;if(s&&(a||l)){return}const c=parseInt(e.getAttribute(\"rowspan\")||1);const d=t==\"down\"?o+c:o;const u=[...new NI(n,{endRow:d})];const h=u.find(t=>t.cell===e);const f=h.column;const m=u.find(({row:e,rowspan:i,column:n})=>{if(n!==f){return false}if(t==\"down\"){return e===d}else{return d===e+i}});return m&&m.cell}function EL(e,t,i){if(!PL(e)){if(PL(t)){i.remove(i.createRangeIn(t))}i.move(i.createRangeIn(e),i.createPositionAt(t,\"end\"))}i.remove(e)}function PL(e){return e.childCount==1&&e.getChild(0).is(\"paragraph\")&&e.getChild(0).isEmpty}class ML extends Dw{refresh(){const e=VI(this.editor.model.document.selection);const t=e[0];if(t){const i=yI(\"table\",t);const n=this.editor.plugins.get(\"TableUtils\").getRows(i);const o=n-1;const r=FI(e);const s=r.first===0&&r.last===o;this.isEnabled=!s}else{this.isEnabled=false}}execute(){const e=this.editor.model;const t=VI(e.document.selection);const i=FI(t);const n=t[0];const o=yI(\"table\",n);const r=this.editor.plugins.get(\"TableUtils\").getCellLocation(n).column;const s=e.createBatch();e.enqueueChange(s,e=>{e.setSelection(e.createSelection(o,\"on\"));const t=i.last-i.first+1;this.editor.plugins.get(\"TableUtils\").removeRows(o,{at:i.first,rows:t,batch:s})});e.enqueueChange(s,e=>{const t=SL(o,i.first,r);e.setSelection(e.createPositionAt(t,0))})}}function SL(e,t,i){const n=e.getChild(t)||e.getChild(e.childCount-1);let o=n.getChild(0);let r=0;for(const e of n.getChildren()){if(r>i){return o}o=e;r+=parseInt(e.getAttribute(\"colspan\")||1)}return o}class IL extends Dw{refresh(){const e=VI(this.editor.model.document.selection);const t=e[0];if(t){const i=yI(\"table\",t);const n=this.editor.plugins.get(\"TableUtils\").getColumns(i);const{first:o,last:r}=HI(e);this.isEnabled=r-ot.cell===e).column,last:n.find(e=>e.cell===t).column};const r=LL(n,e,t,o);this.editor.model.change(e=>{const t=o.last-o.first+1;this.editor.plugins.get(\"TableUtils\").removeColumns(i,{at:o.first,columns:t});e.setSelection(e.createPositionAt(r,0))})}}function LL(e,t,i,n){const o=parseInt(i.getAttribute(\"colspan\")||1);if(o>1){return i}else if(t.previousSibling||i.nextSibling){return i.nextSibling||t.previousSibling}else{if(n.first){return e.reverse().find(({column:e})=>ee>n.last).cell}}}function NL(e){const t=VI(e);const i=t[0];const n=t.pop();const o=[i,n];return i.isBefore(n)?o:o.reverse()}class OL extends Dw{refresh(){const e=this.editor.model;const t=VI(e.document.selection);const i=t.length>0;this.isEnabled=i;this.value=i&&t.every(e=>this._isInHeading(e,e.parent.parent))}execute(e={}){if(e.forceValue===this.value){return}const t=this.editor.model;const i=VI(t.document.selection);const n=yI(\"table\",i[0]);const{first:o,last:r}=FI(i);const s=this.value?o:r+1;const a=n.getAttribute(\"headingRows\")||0;t.change(e=>{if(s){const t=s>a?a:0;const i=UI(n,s,t);for(const{cell:t}of i){qI(t,s,e)}}xI(\"headingRows\",s,n,e,0)})}_isInHeading(e,t){const i=parseInt(t.getAttribute(\"headingRows\")||0);return!!i&&e.parent.index0;this.isEnabled=n;this.value=n&&t.every(e=>EI(i,e))}execute(e={}){if(e.forceValue===this.value){return}const t=this.editor.model;const i=VI(t.document.selection);const n=yI(\"table\",i[0]);const{first:o,last:r}=HI(i);const s=this.value?o:r+1;t.change(e=>{if(s){const t=$I(n,s);for(const{cell:i,column:n}of t){GI(i,n,s,e)}}xI(\"headingColumns\",s,n,e,0)})}}class zL extends Rw{static get pluginName(){return\"TableUtils\"}getCellLocation(e){const t=e.parent;const i=t.parent;const n=i.getChildIndex(t);const o=new NI(i,{startRow:n,endRow:n});for(const{cell:t,row:i,column:n}of o){if(t===e){return{row:i,column:n}}}}createTable(e,t,i){const n=e.createElement(\"table\");DL(e,n,0,t,i);return n}insertRows(e,t={}){const i=this.editor.model;const n=t.at||0;const o=t.rows||1;const r=t.copyStructureFromAbove!==undefined;const s=t.copyStructureFromAbove?n-1:n;const a=this.getRows(e);const l=this.getColumns(e);i.change(t=>{const i=e.getAttribute(\"headingRows\")||0;if(i>n){t.setAttribute(\"headingRows\",i+o,e)}if(!r&&(n===0||n===a)){DL(t,e,n,o,l);return}const c=r?Math.max(n,s):n;const d=new NI(e,{endRow:c});const u=new Array(l).fill(1);for(const{row:e,column:i,rowspan:a,colspan:l,cell:c}of d){const d=e+a-1;const h=e0){AI(t,o,n>1?{colspan:n}:null)}e+=Math.abs(n)-1}}})}insertColumns(e,t={}){const i=this.editor.model;const n=t.at||0;const o=t.columns||1;i.change(t=>{const i=e.getAttribute(\"headingColumns\");if(n1){t.setAttribute(\"colspan\",c+o,r);s.skipRow(i);if(l>1){for(let e=i+1;e{const{cellsToMove:n,cellsToTrim:a}=HL(e,o,r);if(n.size){const i=r+1;WL(e,i,n,t)}for(let i=r;i>=o;i--){t.remove(e.getChild(i))}for(const{rowspan:e,cell:i}of a){xI(\"rowspan\",e,i,t)}FL(e,o,r,i,s)})}removeColumns(e,t){const i=this.editor.model;const n=t.at;const o=t.columns||1;const r=t.at+o-1;i.change(t=>{VL(e,{first:n,last:r},t);const i=[];for(let o=r;o>=n;o--){for(const{cell:n,column:r,colspan:s}of[...new NI(e)]){if(r<=o&&s>1&&r+s>o){xI(\"colspan\",s-1,n,t)}else if(r===o){const e=n.parent;t.remove(n);if(!e.childCount){i.push(e.index)}}}}i.reverse().forEach(i=>this.removeRows(e,{at:i,batch:t.batch}))})}splitCellVertically(e,t=2){const i=this.editor.model;const n=e.parent;const o=n.parent;const r=parseInt(e.getAttribute(\"rowspan\")||1);const s=parseInt(e.getAttribute(\"colspan\")||1);i.change(i=>{if(s>1){const{newCellsSpan:n,updatedSpan:o}=BL(s,t);xI(\"colspan\",o,e,i);const a={};if(n>1){a.colspan=n}if(r>1){a.rowspan=r}const l=s>t?t-1:s-1;jL(l,i,i.createPositionAfter(e),a)}if(st===e);const c=a.filter(({cell:t,colspan:i,column:n})=>{const o=t!==e&&n===l;const r=nl;return o||r});for(const{cell:e,colspan:t}of c){i.setAttribute(\"colspan\",t+n,e)}const d={};if(r>1){d.rowspan=r}jL(n,i,i.createPositionAfter(e),d);const u=o.getAttribute(\"headingColumns\")||0;if(u>l){xI(\"headingColumns\",u+n,o,i)}}})}splitCellHorizontally(e,t=2){const i=this.editor.model;const n=e.parent;const o=n.parent;const r=o.getChildIndex(n);const s=parseInt(e.getAttribute(\"rowspan\")||1);const a=parseInt(e.getAttribute(\"colspan\")||1);i.change(i=>{if(s>1){const n=[...new NI(o,{startRow:r,endRow:r+s-1,includeSpanned:true})];const{newCellsSpan:l,updatedSpan:c}=BL(s,t);xI(\"rowspan\",c,e,i);const{column:d}=n.find(({cell:t})=>t===e);const u={};if(l>1){u.rowspan=l}if(a>1){u.colspan=a}for(const{column:e,row:t,cellIndex:s}of n){const n=t>=r+c;const a=e===d;const h=(t+r+c)%l===0;if(n&&a&&h){const e=i.createPositionAt(o.getChild(t),s);jL(1,i,e,u)}}}if(sr){const e=o+n;i.setAttribute(\"rowspan\",e,t)}}const c={};if(a>1){c.colspan=a}DL(i,o,r+1,n,1,c);const d=o.getAttribute(\"headingRows\")||0;if(d>r){xI(\"headingRows\",d+n,o,i)}}})}getColumns(e){const t=e.getChild(0);return[...t.getChildren()].reduce((e,t)=>{const i=parseInt(t.getAttribute(\"colspan\")||1);return e+i},0)}getRows(e){return e.childCount}}function DL(e,t,i,n,o,r={}){for(let s=0;s{const o=e.getAttribute(\"headingRows\")||0;if(t=t&&r<=i&&e>i;if(c){const e=i-r+1;const t=a-e;n.set(s,{cell:l,rowspan:t})}const d=r=t;if(d){let n;if(e>=i){n=i-t+1}else{n=e-t+1}o.push({cell:l,rowspan:a-n})}}return{cellsToMove:n,cellsToTrim:o}}function WL(e,t,i,n){const o=new NI(e,{includeSpanned:true,startRow:t,endRow:t});const r=[...o];const s=e.getChild(t);let a;for(const{column:e,cell:t,isSpanned:o}of r){if(i.has(e)){const{cell:t,rowspan:o}=i.get(e);const r=a?n.createPositionAfter(a):n.createPositionAt(s,0);n.move(n.createRangeOn(t),r);xI(\"rowspan\",o,t,n);a=t}else if(!o){a=t}}}class UL extends Dw{refresh(){const e=jI(this.editor.model.document.selection);this.isEnabled=WI(e,this.editor.plugins.get(zL))}execute(){const e=this.editor.model;const t=this.editor.plugins.get(zL);e.change(i=>{const n=jI(e.document.selection);const o=n.shift();i.setSelection(o,0);const{mergeWidth:r,mergeHeight:s}=GL(o,n,t);xI(\"colspan\",r,o,i);xI(\"rowspan\",s,o,i);const a=[];for(const e of n){const t=e.parent;qL(e,o,i);if(!t.childCount){a.push(t.index)}}if(a.length){const e=yI(\"table\",o);a.reverse().forEach(n=>t.removeRows(e,{at:n,batch:i.batch}))}i.setSelection(o,\"in\")})}}function qL(e,t,i){if(!$L(e)){if($L(t)){i.remove(i.createRangeIn(t))}i.move(i.createRangeIn(e),i.createPositionAt(t,\"end\"))}i.remove(e)}function $L(e){return e.childCount==1&&e.getChild(0).is(\"paragraph\")&&e.getChild(0).isEmpty}function GL(e,t,i){let n=0;let o=0;for(const e of t){const{row:t,column:r}=i.getCellLocation(e);n=YL(e,r,n,\"colspan\");o=YL(e,t,o,\"rowspan\")}const{row:r,column:s}=i.getCellLocation(e);const a=n-s;const l=o-r;return{mergeWidth:a,mergeHeight:l}}function YL(e,t,i,n){const o=parseInt(e.getAttribute(n)||1);return Math.max(i,t+o)}class KL extends Dw{refresh(){const e=VI(this.editor.model.document.selection);this.isEnabled=e.length>0}execute(){const e=this.editor.model;const t=VI(e.document.selection);const i=FI(t);const n=yI(\"table\",t[0]);const o=[];for(let t=i.first;t<=i.last;t++){for(const i of n.getChild(t).getChildren()){o.push(e.createRangeOn(i))}}e.change(e=>{e.setSelection(o)})}}class JL extends Dw{refresh(){const e=VI(this.editor.model.document.selection);this.isEnabled=e.length>0}execute(){const e=this.editor.model;const t=VI(e.document.selection);const i=t[0];const n=t.pop();const o=this.editor.plugins.get(\"TableUtils\");const r=o.getCellLocation(i);const s=o.getCellLocation(n);const a=Math.min(r.column,s.column);const l=Math.max(r.column,s.column);const c=[];for(const t of new NI(yI(\"table\",i))){if(t.column>=a&&t.column<=l){c.push(e.createRangeOn(t.cell))}}e.change(e=>{e.setSelection(c)})}}function QL(e){e.document.registerPostFixer(t=>ZL(t,e))}function ZL(e,t){const i=t.document.differ.getChanges();let n=false;const o=new Set;for(const t of i){let i;if(t.name==\"table\"&&t.type==\"insert\"){i=t.position.nodeAfter}if(t.name==\"tableRow\"||t.name==\"tableCell\"){i=yI(\"table\",t.position)}if(nN(t)){i=yI(\"table\",t.range.start)}if(i&&!o.has(i)){n=XL(i,e)||n;n=eN(i,e)||n;o.add(i)}}return n}function XL(e,t){let i=false;const n=tN(e);if(n.length){i=true;for(const e of n){xI(\"rowspan\",e.rowspan,e.cell,t,1)}}return i}function eN(e,t){let i=false;const n=iN(e);const o=[];for(const[e,t]of n.entries()){if(!t){o.push(e)}}if(o.length){i=true;for(const i of o.reverse()){t.remove(e.getChild(i));n.splice(i,1)}}const r=n[0];const s=n.every(e=>e===r);if(!s){const o=n.reduce((e,t)=>t>e?t:e,0);for(const[r,s]of n.entries()){const n=o-s;if(n){for(let i=0;ia){const e=a-o;n.push({cell:s,rowspan:e})}}return n}function iN(e){const t=new Array(e.childCount).fill(0);for(const{row:i}of new NI(e,{includeSpanned:true})){t[i]++}return t}function nN(e){const t=e.type===\"attribute\";const i=e.attributeKey;return t&&(i===\"headingRows\"||i===\"colspan\"||i===\"rowspan\")}function oN(e){e.document.registerPostFixer(t=>rN(t,e))}function rN(e,t){const i=t.document.differ.getChanges();let n=false;for(const t of i){if(t.type==\"insert\"&&t.name==\"table\"){n=sN(t.position.nodeAfter,e)||n}if(t.type==\"insert\"&&t.name==\"tableRow\"){n=aN(t.position.nodeAfter,e)||n}if(t.type==\"insert\"&&t.name==\"tableCell\"){n=lN(t.position.nodeAfter,e)||n}if(cN(t)){n=lN(t.position.parent,e)||n}}return n}function sN(e,t){let i=false;for(const n of e.getChildren()){i=aN(n,t)||i}return i}function aN(e,t){let i=false;for(const n of e.getChildren()){i=lN(n,t)||i}return i}function lN(e,t){if(e.childCount==0){t.insertElement(\"paragraph\",e);return true}const i=Array.from(e.getChildren()).filter(e=>e.is(\"text\"));for(const e of i){t.wrap(t.createRangeOn(e),\"paragraph\")}return!!i.length}function cN(e){if(!e.position||!e.position.parent.is(\"tableCell\")){return false}return e.type==\"insert\"&&e.name==\"$text\"||e.type==\"remove\"}function dN(e){e.document.registerPostFixer(()=>uN(e))}function uN(e){const t=e.document.differ;const i=new Set;let n=0;for(const e of t.getChanges()){const t=e.type==\"insert\"||e.type==\"remove\"?e.position.parent:e.range.start.parent;if(!t.is(\"tableCell\")){continue}if(e.type==\"insert\"){n++}if(hN(t,e.type,n)){i.add(t)}}if(i.size){for(const e of i.values()){t.refreshItem(e)}return true}return false}function hN(e,t,i){const n=Array.from(e.getChildren()).some(e=>e.is(\"paragraph\"));if(!n){return false}if(t==\"attribute\"){const t=Array.from(e.getChild(0).getAttributeKeys()).length;return e.childCount===1&&t<2}return e.childCount<=(t==\"insert\"?i+1:1)}var fN=i(122);class mN extends Rw{static get pluginName(){return\"TableEditing\"}init(){const e=this.editor;const t=e.model;const i=t.schema;const n=e.conversion;i.register(\"table\",{allowWhere:\"$block\",allowAttributes:[\"headingRows\",\"headingColumns\"],isLimit:true,isObject:true,isBlock:true});i.register(\"tableRow\",{allowIn:\"table\",isLimit:true});i.register(\"tableCell\",{allowIn:\"tableRow\",allowAttributes:[\"colspan\",\"rowspan\"],isObject:true});i.extend(\"$block\",{allowIn:\"tableCell\"});i.addChildCheck((e,t)=>{if(t.name==\"table\"&&Array.from(e.getNames()).includes(\"table\")){return false}});n.for(\"upcast\").add(PI());n.for(\"editingDowncast\").add(eL({asWidget:true}));n.for(\"dataDowncast\").add(eL());n.for(\"upcast\").elementToElement({model:\"tableRow\",view:\"tr\"});n.for(\"upcast\").add(MI());n.for(\"editingDowncast\").add(tL({asWidget:true}));n.for(\"dataDowncast\").add(tL());n.for(\"downcast\").add(rL());n.for(\"upcast\").add(SI(\"td\"));n.for(\"upcast\").add(SI(\"th\"));n.for(\"editingDowncast\").add(iL({asWidget:true}));n.for(\"dataDowncast\").add(iL());n.attributeToAttribute({model:\"colspan\",view:\"colspan\"});n.attributeToAttribute({model:\"rowspan\",view:\"rowspan\"});n.for(\"editingDowncast\").add(oL({asWidget:true}));n.for(\"dataDowncast\").add(oL());n.for(\"editingDowncast\").add(nL({asWidget:true}));n.for(\"dataDowncast\").add(nL());e.commands.add(\"insertTable\",new _L(e));e.commands.add(\"insertTableRowAbove\",new vL(e,{order:\"above\"}));e.commands.add(\"insertTableRowBelow\",new vL(e,{order:\"below\"}));e.commands.add(\"insertTableColumnLeft\",new yL(e,{order:\"left\"}));e.commands.add(\"insertTableColumnRight\",new yL(e,{order:\"right\"}));e.commands.add(\"removeTableRow\",new ML(e));e.commands.add(\"removeTableColumn\",new IL(e));e.commands.add(\"splitTableCellVertically\",new xL(e,{direction:\"vertically\"}));e.commands.add(\"splitTableCellHorizontally\",new xL(e,{direction:\"horizontally\"}));e.commands.add(\"mergeTableCells\",new UL(e));e.commands.add(\"mergeTableCellRight\",new AL(e,{direction:\"right\"}));e.commands.add(\"mergeTableCellLeft\",new AL(e,{direction:\"left\"}));e.commands.add(\"mergeTableCellDown\",new AL(e,{direction:\"down\"}));e.commands.add(\"mergeTableCellUp\",new AL(e,{direction:\"up\"}));e.commands.add(\"setTableColumnHeader\",new RL(e));e.commands.add(\"setTableRowHeader\",new OL(e));e.commands.add(\"selectTableRow\",new KL(e));e.commands.add(\"selectTableColumn\",new JL(e));QL(t);dN(t);oN(t)}static get requires(){return[zL]}}var gN=i(124);class pN extends _b{constructor(e){super(e);const t=this.bindTemplate;this.items=this._createGridCollection();this.set(\"rows\",0);this.set(\"columns\",0);this.bind(\"label\").to(this,\"columns\",this,\"rows\",(e,t)=>`${t} × ${e}`);this.setTemplate({tag:\"div\",attributes:{class:[\"ck\"]},children:[{tag:\"div\",attributes:{class:[\"ck-insert-table-dropdown__grid\"]},on:{\"mouseover@.ck-insert-table-dropdown-grid-box\":t.to(\"boxover\")},children:this.items},{tag:\"div\",attributes:{class:[\"ck-insert-table-dropdown__label\"]},children:[{text:t.to(\"label\")}]}],on:{mousedown:t.to(e=>{e.preventDefault()}),click:t.to(()=>{this.fire(\"execute\")})}});this.on(\"boxover\",(e,t)=>{const{row:i,column:n}=t.target.dataset;this.set({rows:parseInt(i),columns:parseInt(n)})});this.on(\"change:columns\",()=>{this._highlightGridBoxes()});this.on(\"change:rows\",()=>{this._highlightGridBoxes()})}focus(){}focusLast(){}_highlightGridBoxes(){const e=this.rows;const t=this.columns;this.items.map((i,n)=>{const o=Math.floor(n/10);const r=n%10;const s=o{const n=e.commands.get(\"insertTable\");const o=bw(i);o.bind(\"isEnabled\").to(n);o.buttonView.set({icon:wN,label:t(\"Insert table\"),tooltip:true});let r;o.on(\"change:isOpen\",()=>{if(r){return}r=new pN(i);o.panelView.children.add(r);r.delegate(\"execute\").to(o);o.buttonView.on(\"open\",()=>{r.rows=0;r.columns=0});o.on(\"execute\",()=>{e.execute(\"insertTable\",{rows:r.rows,columns:r.columns});e.editing.view.focus()})});return o});e.ui.componentFactory.add(\"tableColumn\",e=>{const i=[{type:\"switchbutton\",model:{commandName:\"setTableColumnHeader\",label:t(\"Header column\"),bindIsOn:true}},{type:\"separator\"},{type:\"button\",model:{commandName:n?\"insertTableColumnLeft\":\"insertTableColumnRight\",label:t(\"Insert column left\")}},{type:\"button\",model:{commandName:n?\"insertTableColumnRight\":\"insertTableColumnLeft\",label:t(\"Insert column right\")}},{type:\"button\",model:{commandName:\"removeTableColumn\",label:t(\"Delete column\")}},{type:\"button\",model:{commandName:\"selectTableColumn\",label:t(\"Select column\")}}];return this._prepareDropdown(t(\"Column\"),_N,i,e)});e.ui.componentFactory.add(\"tableRow\",e=>{const i=[{type:\"switchbutton\",model:{commandName:\"setTableRowHeader\",label:t(\"Header row\"),bindIsOn:true}},{type:\"separator\"},{type:\"button\",model:{commandName:\"insertTableRowAbove\",label:t(\"Insert row above\")}},{type:\"button\",model:{commandName:\"insertTableRowBelow\",label:t(\"Insert row below\")}},{type:\"button\",model:{commandName:\"removeTableRow\",label:t(\"Delete row\")}},{type:\"button\",model:{commandName:\"selectTableRow\",label:t(\"Select row\")}}];return this._prepareDropdown(t(\"Row\"),kN,i,e)});e.ui.componentFactory.add(\"mergeTableCells\",e=>{const i=[{type:\"button\",model:{commandName:\"mergeTableCellUp\",label:t(\"Merge cell up\")}},{type:\"button\",model:{commandName:n?\"mergeTableCellRight\":\"mergeTableCellLeft\",label:t(\"Merge cell right\")}},{type:\"button\",model:{commandName:\"mergeTableCellDown\",label:t(\"Merge cell down\")}},{type:\"button\",model:{commandName:n?\"mergeTableCellLeft\":\"mergeTableCellRight\",label:t(\"Merge cell left\")}},{type:\"separator\"},{type:\"button\",model:{commandName:\"splitTableCellVertically\",label:t(\"Split cell vertically\")}},{type:\"button\",model:{commandName:\"splitTableCellHorizontally\",label:t(\"Split cell horizontally\")}}];return this._prepareMergeSplitButtonDropdown(t(\"Merge cells\"),vN,i,e)})}_prepareDropdown(e,t,i,n){const o=this.editor;const r=bw(n);const s=this._fillDropdownWithListOptions(r,i);r.buttonView.set({label:e,icon:t,tooltip:true});r.bind(\"isEnabled\").toMany(s,\"isEnabled\",(...e)=>e.some(e=>e));this.listenTo(r,\"execute\",e=>{o.execute(e.source.commandName);o.editing.view.focus()});return r}_prepareMergeSplitButtonDropdown(e,t,i,n){const o=this.editor;const r=bw(n,lk);const s=\"mergeTableCells\";this._fillDropdownWithListOptions(r,i);r.buttonView.set({label:e,icon:t,tooltip:true,isEnabled:true});this.listenTo(r.buttonView,\"execute\",()=>{o.execute(s);o.editing.view.focus()});this.listenTo(r,\"execute\",e=>{o.execute(e.source.commandName);o.editing.view.focus()});return r}_fillDropdownWithListOptions(e,t){const i=this.editor;const n=[];const o=new xs;for(const e of t){xN(e,i,n,o)}_w(e,o,i.ui.componentFactory);return n}}function xN(e,t,i,n){const o=e.model=new sk(e.model);const{commandName:r,bindIsOn:s}=e.model;if(e.type===\"button\"||e.type===\"switchbutton\"){const e=t.commands.get(r);i.push(e);o.set({commandName:r});o.bind(\"isEnabled\").to(e);if(s){o.bind(\"isOn\").to(e,\"value\")}}o.set({withText:true});n.add(e)}class AN extends Ku{constructor(e){super(e);this.domEventType=[\"mousemove\",\"mouseup\",\"mouseleave\"]}onDomEvent(e){this.fire(e.type,e)}}function CN(e,t,i,n){const{startRow:o,startColumn:r,endRow:s,endColumn:a}=t;const l=i.createElement(\"table\");const c=s-o+1;for(let e=0;ea){continue}const d=e-o;const h=l.getChild(d);if(u){const{row:e,column:t}=n.getCellLocation(c);if(eo){const t=o-i+1;xI(\"colspan\",t,e,r,1)}const c=t+a-1;if(c>n){const i=n-t+1;xI(\"rowspan\",i,e,r,1)}}function EN(e,t,i,n,o){const r=parseInt(t.getAttribute(\"headingRows\")||0);if(r>0){const t=r-i;xI(\"headingRows\",t,e,o,0)}const s=parseInt(t.getAttribute(\"headingColumns\")||0);if(s>0){const t=s-n;xI(\"headingColumns\",t,e,o,0)}}var PN=i(126);class MN extends Rw{static get pluginName(){return\"TableSelection\"}static get requires(){return[zL]}init(){const e=this.editor;const t=e.model;this.listenTo(t,\"deleteContent\",(e,t)=>this._handleDeleteContent(e,t),{priority:\"high\"});e.editing.view.addObserver(AN);this._defineSelectionConverter();this._enableShiftClickSelection();this._enableMouseDragSelection();this._enablePluginDisabling()}getSelectedTableCells(){const e=this.editor.model.document.selection;const t=jI(e);if(t.length==0){return null}return t}getSelectionAsFragment(){const e=this.getSelectedTableCells();if(!e){return null}return this.editor.model.change(t=>{const i=t.createDocumentFragment();const{first:n,last:o}=HI(e);const{first:r,last:s}=FI(e);const a=yI(\"table\",e[0]);const l={startRow:r,startColumn:n,endRow:s,endColumn:o};const c=CN(a,l,t,this.editor.plugins.get(\"TableUtils\"));t.insert(c,i,0);return i})}setCellSelection(e,t){const i=this._getCellsToSelect(e,t);this.editor.model.change(e=>{e.setSelection(i.cells.map(t=>e.createRangeOn(t)),{backward:i.backward})})}getFocusCell(){const e=this.editor.model.document.selection;const t=[...e.getRanges()].pop();const i=t.getContainedElement();if(i&&i.is(\"tableCell\")){return i}return null}getAnchorCell(){const e=this.editor.model.document.selection;const t=Bw(e.getRanges());const i=t.getContainedElement();if(i&&i.is(\"tableCell\")){return i}return null}_defineSelectionConverter(){const e=this.editor;const t=new Set;e.conversion.for(\"editingDowncast\").add(e=>e.on(\"selection\",(e,n,o)=>{const r=o.writer;i(r);const s=this.getSelectedTableCells();if(!s){return}for(const e of s){const i=o.mapper.toViewElement(e);r.addClass(\"ck-editor__editable_selected\",i);t.add(i)}const a=o.mapper.toViewElement(s[s.length-1]);r.setSelection(a,0)},{priority:\"lowest\"}));function i(e){for(const i of t){e.removeClass(\"ck-editor__editable_selected\",i)}t.clear()}}_enableShiftClickSelection(){const e=this.editor;let t=false;this.listenTo(e.editing.view.document,\"mousedown\",(i,n)=>{if(!this.isEnabled){return}if(!n.domEvent.shiftKey){return}const o=this.getAnchorCell()||BI(e.model.document.selection)[0];if(!o){return}const r=this._getModelTableCellFromDomEvent(n);if(r&&SN(o,r)){t=true;this.setCellSelection(o,r);n.preventDefault()}});this.listenTo(e.editing.view.document,\"mouseup\",()=>{t=false});this.listenTo(e.editing.view.document,\"selectionChange\",e=>{if(t){e.stop()}},{priority:\"highest\"})}_enableMouseDragSelection(){const e=this.editor;let t,i;let n=false;let o=false;this.listenTo(e.editing.view.document,\"mousedown\",(e,i)=>{if(!this.isEnabled){return}if(i.domEvent.shiftKey||i.domEvent.ctrlKey||i.domEvent.altKey){return}t=this._getModelTableCellFromDomEvent(i)});this.listenTo(e.editing.view.document,\"mousemove\",(e,r)=>{if(!r.domEvent.buttons){return}if(!t){return}const s=this._getModelTableCellFromDomEvent(r);if(s&&SN(t,s)){i=s;if(!n&&i!=t){n=true}}if(!n){return}o=true;this.setCellSelection(t,i);r.preventDefault()});this.listenTo(e.editing.view.document,\"mouseup\",()=>{n=false;o=false;t=null;i=null});this.listenTo(e.editing.view.document,\"selectionChange\",e=>{if(o){e.stop()}},{priority:\"highest\"})}_enablePluginDisabling(){const e=this.editor;this.on(\"change:isEnabled\",()=>{if(!this.isEnabled){const t=this.getSelectedTableCells();if(!t){return}e.model.change(i=>{const n=i.createPositionAt(t[0],0);const o=e.model.schema.getNearestSelectionRange(n);i.setSelection(o)})}})}_handleDeleteContent(e,t){const[i,n]=t;const o=this.editor.model;const r=!n||n.direction==\"backward\";const s=jI(i);if(!s.length){return}e.stop();o.change(e=>{const t=s[r?s.length-1:0];o.change(e=>{for(const t of s){o.deleteContent(e.createSelection(t,\"in\"))}});const n=o.schema.getNearestSelectionRange(e.createPositionAt(t,0));if(i.is(\"documentSelection\")){e.setSelection(n)}else{i.setTo(n)}})}_getModelTableCellFromDomEvent(e){const t=e.target;const i=this.editor.editing.view.createPositionAt(t,0);const n=this.editor.editing.mapper.toModelPosition(i);const o=n.parent;if(o.is(\"tableCell\")){return o}return yI(\"tableCell\",o)}_getCellsToSelect(e,t){const i=this.editor.plugins.get(\"TableUtils\");const n=i.getCellLocation(e);const o=i.getCellLocation(t);const r=Math.min(n.row,o.row);const s=Math.max(n.row,o.row);const a=Math.min(n.column,o.column);const l=Math.max(n.column,o.column);const c=new Array(s-r+1).fill(null).map(()=>[]);for(const t of new NI(yI(\"table\",e),{startRow:r,endRow:s})){if(t.column>=a&&t.column<=l){c[t.row-r].push(t.cell)}}const d=o.rowe.reverse())}return{cells:c.flat(),backward:d||u}}}function SN(e,t){return e.parent.parent==t.parent.parent}class IN extends Rw{static get pluginName(){return\"TableClipboard\"}static get requires(){return[MN,zL]}init(){const e=this.editor;const t=e.editing.view.document;this.listenTo(t,\"copy\",(e,t)=>this._onCopyCut(e,t));this.listenTo(t,\"cut\",(e,t)=>this._onCopyCut(e,t));this.listenTo(e.model,\"insertContent\",(e,t)=>this._onInsertContent(e,...t),{priority:\"high\"})}_onCopyCut(e,t){const i=this.editor.plugins.get(MN);if(!i.getSelectedTableCells()){return}if(e.name==\"cut\"&&this.editor.isReadOnly){return}t.preventDefault();e.stop();const n=this.editor.data;const o=this.editor.editing.view.document;const r=n.toView(i.getSelectionAsFragment());o.fire(\"clipboardOutput\",{dataTransfer:t.dataTransfer,content:r,method:e.name})}_onInsertContent(e,t,i){if(i&&!i.is(\"documentSelection\")){return}const n=this.editor.model;const o=this.editor.plugins.get(zL);const r=VI(n.document.selection);if(!r.length){return}let s=ON(t);if(!s){return}e.stop();n.change(e=>{const t=HI(r);const i=FI(r);let{first:n,last:a}=t;let{first:l,last:c}=i;const d=o.getRows(s);const u=o.getColumns(s);const h=yI(\"table\",r[0]);const f=r.length===1;if(f){c+=d-1;a+=u-1;NN(h,c+1,a+1,e,o)}if(f||!WI(r,o)){const t={firstRow:l,lastRow:c,firstColumn:n,lastColumn:a};zN(h,t,e)}else{c=VN(h,i,t);a=FN(h,i,t)}const m=c-l+1;const g=a-n+1;const p={startRow:0,startColumn:0,endRow:Math.min(m-1,d-1),endColumn:Math.min(g-1,u-1)};s=CN(s,p,e,o);const b={width:u,height:d};const w={firstColumnOfSelection:n,firstRowOfSelection:l,lastColumnOfSelection:a,lastRowOfSelection:c};LN(s,b,h,w,e)})}}function LN(e,t,i,n,o){const{firstColumnOfSelection:r,lastColumnOfSelection:s,firstRowOfSelection:a,lastRowOfSelection:l}=n;const{width:c,height:d}=t;const u=RN(e,c,d);const h=[...new NI(i,{startRow:a,endRow:l,includeSpanned:true})];const f=[];let m;for(const{row:e,column:t,cell:n,isSpanned:g}of h){if(t===0){m=null}if(ts){if(!g){m=n}continue}if(!g){o.remove(n)}const h=e-a;const p=t-r;const b=u[h%d][p%c];if(!b){continue}const w=b._clone(true);TN(w,e,t,l,s,o);let _;if(!m){_=o.createPositionAt(i.getChild(e),0)}else{_=o.createPositionAfter(m)}o.insert(w,_);f.push(w);m=w}o.setSelection(f.map(e=>o.createRangeOn(e)))}function NN(e,t,i,n,o){const r=o.getColumns(e);const s=o.getRows(e);if(i>r){o.insertColumns(e,{batch:n.batch,at:r,columns:i-r})}if(t>s){o.insertRows(e,{batch:n.batch,at:s,rows:t-s})}}function ON(e){if(e.is(\"table\")){return e}if(e.childCount!=1||!e.getChild(0).is(\"table\")){return null}return e.getChild(0)}function RN(e,t,i){const n=new Array(i).fill(null).map(()=>new Array(t).fill(null));for(const{column:t,row:i,cell:o}of new NI(e)){n[i][t]=o}return n}function zN(e,t,i){const{firstRow:n,lastRow:o,firstColumn:r,lastColumn:s}=t;const a={first:n,last:o};const l={first:r,last:s};jN(e,r,a,i);jN(e,s+1,a,i);DN(e,n,l,i);DN(e,o+1,l,i,n)}function DN(e,t,i,n,o=0){if(t<1){return}const r=UI(e,t,o);const s=r.filter(({column:e,colspan:t})=>BN(e,t,i));for(const{cell:e}of s){qI(e,t,n)}}function jN(e,t,i,n){if(t<1){return}const o=$I(e,t);const r=o.filter(({row:e,rowspan:t})=>BN(e,t,i));for(const{cell:e,column:i}of r){GI(e,i,t,n)}}function BN(e,t,i){const n=e+t-1;const{first:o,last:r}=i;const s=e>=o&&e<=r;const a=e=o;return s||a}function VN(e,t,i){const n=new NI(e,{startRow:t.last,endRow:t.last});const o=Array.from(n).filter(({column:e})=>i.first<=e&&e<=i.last);const r=o.every(({rowspan:e})=>e===1);if(r){return t.last}const s=o[0].rowspan-1;return t.last+s}function FN(e,t,i){const n=Array.from(new NI(e,{startRow:t.first,endRow:t.last,column:i.last}));const o=n.every(({colspan:e})=>e===1);if(o){return i.last}const r=n[0].colspan-1;return i.last+r}class HN extends Rw{static get pluginName(){return\"TableNavigation\"}static get requires(){return[MN]}init(){const e=this.editor.editing.view;const t=e.document;this.editor.keystrokes.set(\"Tab\",(...e)=>this._handleTabOnSelectedTable(...e),{priority:\"low\"});this.editor.keystrokes.set(\"Tab\",this._getTabHandler(true),{priority:\"low\"});this.editor.keystrokes.set(\"Shift+Tab\",this._getTabHandler(false),{priority:\"low\"});this.listenTo(t,\"keydown\",(...e)=>this._onKeydown(...e),{priority:os.get(\"high\")+1})}_handleTabOnSelectedTable(e,t){const i=this.editor;const n=i.model.document.selection;if(!n.isCollapsed&&n.rangeCount===1&&n.getFirstRange().isFlat){const e=n.getSelectedElement();if(!e||!e.is(\"table\")){return}t();i.model.change(t=>{t.setSelection(t.createRangeIn(e.getChild(0).getChild(0)))})}}_getTabHandler(e){const t=this.editor;return(i,n)=>{const o=t.model.document.selection;const r=BI(o)[0];if(!r){return}n();const s=r.parent;const a=s.parent;const l=a.getChildIndex(s);const c=s.getChildIndex(r);const d=c===0;if(!e&&d&&l===0){return}const u=c===s.childCount-1;const h=l===a.childCount-1;if(e&&h&&u){t.execute(\"insertTableRowBelow\");if(l===a.childCount-1){return}}let f;if(e&&u){const e=a.getChild(l+1);f=e.getChild(0)}else if(!e&&d){const e=a.getChild(l-1);f=e.getChild(e.childCount-1)}else{f=s.getChild(c+(e?1:-1))}t.model.change(e=>{e.setSelection(e.createRangeIn(f))})}}_onKeydown(e,t){const i=t.keyCode;if(!WN(i)){return}const n=UN(i,this.editor.locale.contentLanguageDirection);const o=this._handleArrowKeys(n,t.shiftKey);if(o){t.preventDefault();t.stopPropagation();e.stop()}}_handleArrowKeys(e,t){const i=this.editor.model;const n=i.document.selection;const o=[\"right\",\"down\"].includes(e);const r=jI(n);if(r.length){let i;if(t){i=this.editor.plugins.get(\"TableSelection\").getFocusCell()}else{i=o?r[r.length-1]:r[0]}this._navigateFromCellInDirection(i,e,t);return true}const s=yI(\"tableCell\",n.focus);if(!s){return false}const a=i.createRangeIn(s);if(this._isSelectionAtCellEdge(n,o)){this._navigateFromCellInDirection(s,e,t);return true}const l=n.getSelectedElement();if(l&&i.schema.isObject(l)){return false}if(this._isObjectElementNextToSelection(n,o)){return false}const c=this._findTextRangeFromSelection(a,n,o);if(!c){this._navigateFromCellInDirection(s,e,t);return true}if([\"left\",\"right\"].includes(e)){return false}if(this._isSingleLineRange(c,o)){i.change(e=>{const r=o?a.end:a.start;if(t){const t=i.createSelection(n.anchor);t.setFocus(r);e.setSelection(t)}else{e.setSelection(r)}});return true}}_isSelectionAtCellEdge(e,t){const i=this.editor.model;const n=this.editor.model.schema;const o=t?e.getLastPosition():e.getFirstPosition();if(!n.getLimitElement(o).is(\"tableCell\")){return false}const r=i.createSelection(o);i.modifySelection(r,{direction:t?\"forward\":\"backward\"});return o.isEqual(r.focus)}_isObjectElementNextToSelection(e,t){const i=this.editor.model;const n=i.schema;const o=i.createSelection(e);i.modifySelection(o,{direction:t?\"forward\":\"backward\"});const r=t?o.focus.nodeBefore:o.focus.nodeAfter;return r&&n.isObject(r)}_findTextRangeFromSelection(e,t,i){const n=this.editor.model;if(i){const i=t.getLastPosition();const o=this._getNearestVisibleTextPosition(e,\"backward\");if(o&&i.isBefore(o)){return n.createRange(i,o)}return null}else{const i=t.getFirstPosition();const o=this._getNearestVisibleTextPosition(e,\"forward\");if(o&&i.isAfter(o)){return n.createRange(o,i)}return null}}_getNearestVisibleTextPosition(e,t){const i=this.editor.model.schema;const n=this.editor.editing.mapper;for(const{nextPosition:o,item:r}of e.getWalker({direction:t})){if(i.checkChild(o,\"$text\")){const e=n.toViewElement(r);if(e&&!e.hasClass(\"ck-hidden\")){return o}}}}_isSingleLineRange(e,t){const i=this.editor.model;const n=this.editor.editing;const o=n.view.domConverter;if(t){const t=i.createSelection(e.start);i.modifySelection(t);if(!t.focus.isAtEnd&&!e.start.isEqual(t.focus)){e=i.createRange(t.focus,e.end)}}const r=n.mapper.toViewRange(e);const s=o.viewRangeToDom(r);const a=vh.getDomRangeRects(s);let l;for(const e of a){if(l===undefined){l=Math.round(e.bottom);continue}if(Math.round(e.top)>=l){return false}l=Math.max(l,Math.round(e.bottom))}return true}_navigateFromCellInDirection(e,t,i=false){const n=this.editor.model;const o=yI(\"table\",e);const r=[...new NI(o,{includeSpanned:true})];const{row:s,column:a}=r[r.length-1];const l=r.find(({cell:t})=>t==e);let{row:c,column:d}=l;switch(t){case\"left\":d--;break;case\"up\":c--;break;case\"right\":d+=l.colspan;break;case\"down\":c+=l.rowspan;break}const u=c<0||c>s;const h=d<0&&c<=0;const f=d>a&&c>=s;if(u||h||f){n.change(e=>{e.setSelection(e.createRangeOn(o))});return}if(d<0){d=i?0:a;c--}else if(d>a){d=i?a:0;c++}const m=r.find(e=>e.row==c&&e.column==d).cell;const g=[\"right\",\"down\"].includes(t);if(i){const t=this.editor.plugins.get(\"TableSelection\");const i=t.getAnchorCell()||e;t.setCellSelection(i,m)}else{const e=n.createPositionAt(m,g?0:\"end\");n.change(t=>{t.setSelection(e)})}}}function WN(e){return e==Oc.arrowright||e==Oc.arrowleft||e==Oc.arrowup||e==Oc.arrowdown}function UN(e,t){const i=t===\"ltr\";switch(e){case Oc.arrowleft:return i?\"left\":\"right\";case Oc.arrowright:return i?\"right\":\"left\";case Oc.arrowup:return\"up\";case Oc.arrowdown:return\"down\"}}var qN=i(128);class $N extends Rw{static get requires(){return[mN,yN,MN,IN,HN,uA]}static get pluginName(){return\"Table\"}}var GN=i(130);class YN extends _b{constructor(e,t){super(e);const i=this.bindTemplate;this.set(\"value\",\"\");this.set(\"id\");this.set(\"isReadOnly\",false);this.set(\"hasError\",false);this.set(\"ariaDescribedById\");this.options=t;this._dropdownView=this._createDropdownView(e);this._inputView=this._createInputTextView(e);this._stillTyping=false;this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-input-color\",i.if(\"hasError\",\"ck-error\")],id:i.to(\"id\"),\"aria-invalid\":i.if(\"hasError\",true),\"aria-describedby\":i.to(\"ariaDescribedById\")},children:[this._inputView,this._dropdownView]});this.on(\"change:value\",(e,t,i)=>this._setInputValue(i))}focus(){this._inputView.focus()}_createDropdownView(){const e=this.locale;const t=e.t;const i=this.bindTemplate;const n=this._createColorGrid(e);const o=bw(e);const r=new _b;const s=this._createRemoveColorButton(e);r.setTemplate({tag:\"span\",attributes:{class:[\"ck\",\"ck-input-color__button__preview\"],style:{backgroundColor:i.to(\"value\")}},children:[{tag:\"span\",attributes:{class:[\"ck\",\"ck-input-color__button__preview__no-color-indicator\",i.if(\"value\",\"ck-hidden\",e=>e!=\"\")]}}]});o.buttonView.extendTemplate({attributes:{class:\"ck-input-color__button\"}});o.buttonView.children.add(r);o.buttonView.tooltip=t(\"Color picker\");o.panelPosition=e.uiLanguageDirection===\"rtl\"?\"se\":\"sw\";o.panelView.children.add(s);o.panelView.children.add(n);o.bind(\"isEnabled\").to(this,\"isReadOnly\",e=>!e);return o}_createInputTextView(){const e=this.locale;const t=new vA(e);t.extendTemplate({on:{blur:t.bindTemplate.to(\"blur\")}});t.value=this.value;t.bind(\"isReadOnly\").to(this);t.bind(\"hasError\").to(this);t.on(\"input\",()=>{const e=t.element.value;const i=this.options.colorDefinitions.find(t=>e===t.label);this._stillTyping=true;this.value=i&&i.color||e});t.on(\"blur\",()=>{this._stillTyping=false;this._setInputValue(t.element.value)});t.delegate(\"input\").to(this);return t}_createRemoveColorButton(){const e=this.locale;const t=e.t;const i=new rw(e);i.class=\"ck-input-color__remove-color\";i.withText=true;i.icon=Tv;i.label=t(\"Remove color\");i.on(\"execute\",()=>{this.value=\"\";this._dropdownView.isOpen=false;this.fire(\"input\")});return i}_createColorGrid(e){const t=new Av(e,{colorDefinitions:this.options.colorDefinitions,columns:this.options.columns});t.on(\"execute\",(e,t)=>{this.value=t.value;this._dropdownView.isOpen=false;this.fire(\"input\")});t.bind(\"selectedColor\").to(this,\"value\");return t}_setInputValue(e){if(!this._stillTyping){const t=KN(e);const i=this.options.colorDefinitions.find(e=>t===KN(e.color));if(i){this._inputView.value=i.label}else{this._inputView.value=e||\"\"}}}}function KN(e){return e.replace(/([(,])\\s+/g,\"$1\").replace(/^\\s+|\\s+(?=[),\\s]|$)/g,\"\").replace(/,|\\s/g,\" \")}const JN=ex.defaultPositions;const QN=[JN.northArrowSouth,JN.northArrowSouthWest,JN.northArrowSouthEast,JN.southArrowNorth,JN.southArrowNorthWest,JN.southArrowNorthEast];const ZN=[...QN,gx];const XN=e=>e===\"\";function eO(e,t){const i=e.plugins.get(\"ContextualBalloon\");if(DI(e.editing.view.document.selection)){let n;if(t===\"cell\"){n=iO(e)}else{n=tO(e)}i.updatePosition(n)}}function tO(e){const t=e.model.document.selection.getFirstPosition();const i=yI(\"table\",t);const n=e.editing.mapper.toViewElement(i);return{target:e.editing.view.domConverter.viewToDom(n),positions:ZN}}function iO(e){const t=e.editing.mapper;const i=e.editing.view.domConverter;const n=e.model.document.selection;if(n.rangeCount>1){return{target:()=>pO(n.getRanges(),e=>{const n=gO(e.start);const o=t.toViewElement(n);return new vh(i.viewToDom(o))}),positions:QN}}const o=gO(n.getFirstPosition());const r=t.toViewElement(o);return{target:i.viewToDom(r),positions:QN}}function nO(e){return{none:e(\"None\"),solid:e(\"Solid\"),dotted:e(\"Dotted\"),dashed:e(\"Dashed\"),double:e(\"Double\"),groove:e(\"Groove\"),ridge:e(\"Ridge\"),inset:e(\"Inset\"),outset:e(\"Outset\")}}function oO(e){return e('The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".')}function rO(e){return e('The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".')}function sO(e){e=e.trim();return XN(e)||DT(e)}function aO(e){e=e.trim();return XN(e)||fO(e)||FT(e)||WT(e)}function lO(e){e=e.trim();return XN(e)||fO(e)||FT(e)}function cO(e){const t=new xs;const i=nO(e.t);for(const n in i){const o={type:\"button\",model:new sk({_borderStyleValue:n===\"none\"?\"\":n,label:i[n],withText:true})};if(n===\"none\"){o.model.bind(\"isOn\").to(e,\"borderStyle\",e=>!e)}else{o.model.bind(\"isOn\").to(e,\"borderStyle\",e=>e===n)}t.add(o)}return t}function dO({view:e,icons:t,toolbar:i,labels:n,propertyName:o,nameToValue:r}){for(const s in n){const a=new rw(e.locale);a.set({label:n[s],icon:t[s],tooltip:n[s]});a.bind(\"isOn\").to(e,o,e=>e===r(s));a.on(\"execute\",()=>{e[o]=r(s)});i.items.add(a)}}const uO=[{color:\"hsl(0, 0%, 0%)\",label:\"Black\"},{color:\"hsl(0, 0%, 30%)\",label:\"Dim grey\"},{color:\"hsl(0, 0%, 60%)\",label:\"Grey\"},{color:\"hsl(0, 0%, 90%)\",label:\"Light grey\"},{color:\"hsl(0, 0%, 100%)\",label:\"White\",hasBorder:true},{color:\"hsl(0, 75%, 60%)\",label:\"Red\"},{color:\"hsl(30, 75%, 60%)\",label:\"Orange\"},{color:\"hsl(60, 75%, 60%)\",label:\"Yellow\"},{color:\"hsl(90, 75%, 60%)\",label:\"Light green\"},{color:\"hsl(120, 75%, 60%)\",label:\"Green\"},{color:\"hsl(150, 75%, 60%)\",label:\"Aquamarine\"},{color:\"hsl(180, 75%, 60%)\",label:\"Turquoise\"},{color:\"hsl(210, 75%, 60%)\",label:\"Light blue\"},{color:\"hsl(240, 75%, 60%)\",label:\"Blue\"},{color:\"hsl(270, 75%, 60%)\",label:\"Purple\"}];function hO(e){return(t,i,n)=>{const o=new YN(t.locale,{colorDefinitions:mO(e.colorConfig),columns:e.columns});o.set({id:i,ariaDescribedById:n});o.bind(\"isReadOnly\").to(t,\"isEnabled\",e=>!e);o.bind(\"errorText\").to(t);o.on(\"input\",()=>{t.errorText=null});return o}}function fO(e){const t=parseFloat(e);return!Number.isNaN(t)&&e===String(t)}function mO(e){return e.map(e=>({color:e.model,label:e.label,options:{hasBorder:e.hasBorder}}))}function gO(e){const t=e.nodeAfter&&e.nodeAfter.is(\"tableCell\");return t?e.nodeAfter:yI(\"tableCell\",e)}function pO(e,t){const i={left:Number.POSITIVE_INFINITY,top:Number.POSITIVE_INFINITY,right:Number.NEGATIVE_INFINITY,bottom:Number.NEGATIVE_INFINITY};for(const n of e){const e=t(n);i.left=Math.min(i.left,e.left);i.top=Math.min(i.top,e.top);i.right=Math.max(i.right,e.right);i.bottom=Math.max(i.bottom,e.bottom)}i.width=i.right-i.left;i.height=i.bottom-i.top;return new vh(i)}var bO=i(132);class wO extends _b{constructor(e,t={}){super(e);const i=this.bindTemplate;this.set(\"class\",t.class||null);this.children=this.createCollection();if(t.children){t.children.forEach(e=>this.children.add(e))}this.set(\"_role\",null);this.set(\"_ariaLabelledBy\",null);if(t.labelView){this.set({_role:\"group\",_ariaLabelledBy:t.labelView.id})}this.setTemplate({tag:\"div\",attributes:{class:[\"ck\",\"ck-form__row\",i.to(\"class\")],role:i.to(\"_role\"),\"aria-labelledby\":i.to(\"_ariaLabelledBy\")},children:this.children})}}var _O='';var kO='';var vO='';var yO=i(13);var xO=i(14);var AO=i(136);const CO={left:Kw,center:Qw,right:Jw,justify:Zw,top:_O,middle:kO,bottom:vO};class TO extends _b{constructor(e,t){super(e);this.set({borderStyle:\"\",borderWidth:\"\",borderColor:\"\",padding:\"\",backgroundColor:\"\",width:\"\",height:\"\",horizontalAlignment:\"\",verticalAlignment:\"\"});this.options=t;const{borderStyleDropdown:i,borderWidthInput:n,borderColorInput:o,borderRowLabel:r}=this._createBorderFields();const{widthInput:s,operatorLabel:a,heightInput:l,dimensionsLabel:c}=this._createDimensionFields();const{horizontalAlignmentToolbar:d,verticalAlignmentToolbar:u,alignmentLabel:h}=this._createAlignmentFields();this.focusTracker=new Ep;this.keystrokes=new mp;this.children=this.createCollection();this.borderStyleDropdown=i;this.borderWidthInput=n;this.borderColorInput=o;this.backgroundInput=this._createBackgroundField();this.paddingInput=this._createPaddingField();this.widthInput=s;this.heightInput=l;this.horizontalAlignmentToolbar=d;this.verticalAlignmentToolbar=u;const{saveButtonView:f,cancelButtonView:m}=this._createActionButtons();this.saveButtonView=f;this.cancelButtonView=m;this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:\"shift + tab\",focusNext:\"tab\"}});this.children.add(new XS(e,{label:this.t(\"Cell properties\")}));this.children.add(new wO(e,{labelView:r,children:[r,i,o,n],class:\"ck-table-form__border-row\"}));this.children.add(new wO(e,{children:[this.backgroundInput]}));this.children.add(new wO(e,{children:[new wO(e,{labelView:c,children:[c,s,a,l],class:\"ck-table-form__dimensions-row\"}),new wO(e,{children:[this.paddingInput],class:\"ck-table-cell-properties-form__padding-row\"})]}));this.children.add(new wO(e,{labelView:h,children:[h,d,u],class:\"ck-table-cell-properties-form__alignment-row\"}));this.children.add(new wO(e,{children:[this.saveButtonView,this.cancelButtonView],class:\"ck-table-form__action-row\"}));this.setTemplate({tag:\"form\",attributes:{class:[\"ck\",\"ck-form\",\"ck-table-form\",\"ck-table-cell-properties-form\"],tabindex:\"-1\"},children:this.children})}render(){super.render();AA({view:this});[this.borderStyleDropdown,this.borderColorInput,this.borderWidthInput,this.backgroundInput,this.widthInput,this.heightInput,this.paddingInput,this.horizontalAlignmentToolbar,this.verticalAlignmentToolbar,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createBorderFields(){const e=hO({colorConfig:this.options.borderColors,columns:5});const t=this.locale;const i=this.t;const n=new Pb(t);n.text=i(\"Border\");const o=nO(i);const r=new _A(t,xA);r.set({label:i(\"Style\"),class:\"ck-table-form__border-style\"});r.fieldView.buttonView.set({isOn:false,withText:true,tooltip:i(\"Style\")});r.fieldView.buttonView.bind(\"label\").to(this,\"borderStyle\",e=>o[e?e:\"none\"]);r.fieldView.on(\"execute\",e=>{this.borderStyle=e.source._borderStyleValue});_w(r.fieldView,cO(this));const s=new _A(t,yA);s.set({label:i(\"Width\"),class:\"ck-table-form__border-width\"});s.fieldView.bind(\"value\").to(this,\"borderWidth\");s.bind(\"isEnabled\").to(this,\"borderStyle\",EO);s.fieldView.on(\"input\",()=>{this.borderWidth=s.fieldView.element.value});const a=new _A(t,e);a.set({label:i(\"Color\"),class:\"ck-table-form__border-color\"});a.fieldView.bind(\"value\").to(this,\"borderColor\");a.bind(\"isEnabled\").to(this,\"borderStyle\",EO);a.fieldView.on(\"input\",()=>{this.borderColor=a.fieldView.value});this.on(\"change:borderStyle\",(e,t,i)=>{if(!EO(i)){this.borderColor=\"\";this.borderWidth=\"\"}});return{borderRowLabel:n,borderStyleDropdown:r,borderColorInput:a,borderWidthInput:s}}_createBackgroundField(){const e=this.locale;const t=this.t;const i=hO({colorConfig:this.options.backgroundColors,columns:5});const n=new _A(e,i);n.set({label:t(\"Background\"),class:\"ck-table-cell-properties-form__background\"});n.fieldView.bind(\"value\").to(this,\"backgroundColor\");n.fieldView.on(\"input\",()=>{this.backgroundColor=n.fieldView.value});return n}_createDimensionFields(){const e=this.locale;const t=this.t;const i=new Pb(e);i.text=t(\"Dimensions\");const n=new _A(e,yA);n.set({label:t(\"Width\"),class:\"ck-table-form__dimensions-row__width\"});n.fieldView.bind(\"value\").to(this,\"width\");n.fieldView.on(\"input\",()=>{this.width=n.fieldView.element.value});const o=new _b(e);o.setTemplate({tag:\"span\",attributes:{class:[\"ck-table-form__dimension-operator\"]},children:[{text:\"×\"}]});const r=new _A(e,yA);r.set({label:t(\"Height\"),class:\"ck-table-form__dimensions-row__height\"});r.fieldView.bind(\"value\").to(this,\"height\");r.fieldView.on(\"input\",()=>{this.height=r.fieldView.element.value});return{dimensionsLabel:i,widthInput:n,operatorLabel:o,heightInput:r}}_createPaddingField(){const e=this.locale;const t=this.t;const i=new _A(e,yA);i.set({label:t(\"Padding\"),class:\"ck-table-cell-properties-form__padding\"});i.fieldView.bind(\"value\").to(this,\"padding\");i.fieldView.on(\"input\",()=>{this.padding=i.fieldView.element.value});return i}_createAlignmentFields(){const e=this.locale;const t=this.t;const i=new Pb(e);i.text=t(\"Table cell text alignment\");const n=new Tw(e);const o=this.locale.contentLanguageDirection===\"rtl\";n.set({isCompact:true,ariaLabel:t(\"Horizontal text alignment toolbar\")});dO({view:this,icons:CO,toolbar:n,labels:this._horizontalAlignmentLabels,propertyName:\"horizontalAlignment\",nameToValue:e=>e===(o?\"right\":\"left\")?\"\":e});const r=new Tw(e);r.set({isCompact:true,ariaLabel:t(\"Vertical text alignment toolbar\")});dO({view:this,icons:CO,toolbar:r,labels:this._verticalAlignmentLabels,propertyName:\"verticalAlignment\",nameToValue:e=>e===\"middle\"?\"\":e});return{horizontalAlignmentToolbar:n,verticalAlignmentToolbar:r,alignmentLabel:i}}_createActionButtons(){const e=this.locale;const t=this.t;const i=new rw(e);const n=new rw(e);const o=[this.borderWidthInput,this.borderColorInput,this.backgroundInput,this.paddingInput];i.set({label:t(\"Save\"),icon:CA,class:\"ck-button-save\",type:\"submit\",withText:true});i.bind(\"isEnabled\").toMany(o,\"errorText\",(...e)=>e.every(e=>!e));n.set({label:t(\"Cancel\"),icon:TA,class:\"ck-button-cancel\",type:\"cancel\",withText:true});n.delegate(\"execute\").to(this,\"cancel\");return{saveButtonView:i,cancelButtonView:n}}get _horizontalAlignmentLabels(){const e=this.locale;const t=this.t;const i=t(\"Align cell text to the left\");const n=t(\"Align cell text to the center\");const o=t(\"Align cell text to the right\");const r=t(\"Justify cell text\");if(e.uiLanguageDirection===\"rtl\"){return{right:o,center:n,left:i,justify:r}}else{return{left:i,center:n,right:o,justify:r}}}get _verticalAlignmentLabels(){const e=this.t;return{top:e(\"Align cell text to the top\"),middle:e(\"Align cell text to the middle\"),bottom:e(\"Align cell text to the bottom\")}}}function EO(e){return!!e}var PO='';const MO=500;const SO={borderStyle:\"tableCellBorderStyle\",borderColor:\"tableCellBorderColor\",borderWidth:\"tableCellBorderWidth\",width:\"tableCellWidth\",height:\"tableCellHeight\",padding:\"tableCellPadding\",backgroundColor:\"tableCellBackgroundColor\",horizontalAlignment:\"tableCellHorizontalAlignment\",verticalAlignment:\"tableCellVerticalAlignment\"};class IO extends Rw{static get requires(){return[OA]}static get pluginName(){return\"TableCellPropertiesUI\"}constructor(e){super(e);e.config.define(\"table.tableCellProperties\",{borderColors:uO,backgroundColors:uO})}init(){const e=this.editor;const t=e.t;this._balloon=e.plugins.get(OA);this.view=this._createPropertiesView();this._undoStepBatch=null;e.ui.componentFactory.add(\"tableCellProperties\",i=>{const n=new rw(i);n.set({label:t(\"Cell properties\"),icon:PO,tooltip:true});this.listenTo(n,\"execute\",()=>this._showView());const o=Object.values(SO).map(t=>e.commands.get(t));n.bind(\"isEnabled\").toMany(o,\"isEnabled\",(...e)=>e.some(e=>e));return n})}destroy(){super.destroy();this.view.destroy()}_createPropertiesView(){const e=this.editor;const t=e.editing.view.document;const i=e.config.get(\"table.tableCellProperties\");const n=Fv(i.borderColors);const o=Vv(e.locale,n);const r=Fv(i.backgroundColors);const s=Vv(e.locale,r);const a=new TO(e.locale,{borderColors:o,backgroundColors:s});const l=e.t;a.render();this.listenTo(a,\"submit\",()=>{this._hideView()});this.listenTo(a,\"cancel\",()=>{if(this._undoStepBatch.operations.length){e.execute(\"undo\",this._undoStepBatch)}this._hideView()});a.keystrokes.set(\"Esc\",(e,t)=>{this._hideView();t()});this.listenTo(e.ui,\"update\",()=>{if(!DI(t.selection)){this._hideView()}else if(this._isViewVisible){eO(e,\"cell\")}});mw({emitter:a,activator:()=>this._isViewInBalloon,contextElements:[this._balloon.view.element],callback:()=>this._hideView()});const c=oO(l);const d=rO(l);a.on(\"change:borderStyle\",this._getPropertyChangeCallback(\"tableCellBorderStyle\"));a.on(\"change:borderColor\",this._getValidatedPropertyChangeCallback({viewField:a.borderColorInput,commandName:\"tableCellBorderColor\",errorText:c,validator:sO}));a.on(\"change:borderWidth\",this._getValidatedPropertyChangeCallback({viewField:a.borderWidthInput,commandName:\"tableCellBorderWidth\",errorText:d,validator:lO}));a.on(\"change:padding\",this._getValidatedPropertyChangeCallback({viewField:a.paddingInput,commandName:\"tableCellPadding\",errorText:d,validator:aO}));a.on(\"change:width\",this._getValidatedPropertyChangeCallback({viewField:a.widthInput,commandName:\"tableCellWidth\",errorText:d,validator:aO}));a.on(\"change:height\",this._getValidatedPropertyChangeCallback({viewField:a.heightInput,commandName:\"tableCellHeight\",errorText:d,validator:aO}));a.on(\"change:backgroundColor\",this._getValidatedPropertyChangeCallback({viewField:a.backgroundInput,commandName:\"tableCellBackgroundColor\",errorText:c,validator:sO}));a.on(\"change:horizontalAlignment\",this._getPropertyChangeCallback(\"tableCellHorizontalAlignment\"));a.on(\"change:verticalAlignment\",this._getPropertyChangeCallback(\"tableCellVerticalAlignment\"));return a}_fillViewFormFromCommandValues(){const e=this.editor.commands;Object.entries(SO).map(([t,i])=>[t,e.get(i).value||\"\"]).forEach(([e,t])=>this.view.set(e,t))}_showView(){const e=this.editor;this._balloon.add({view:this.view,position:iO(e)});this._undoStepBatch=e.model.createBatch();this._fillViewFormFromCommandValues();this.view.focus()}_hideView(){if(!this._isViewInBalloon){return}const e=this.editor;this.stopListening(e.ui,\"update\");this.view.saveButtonView.focus();this._balloon.remove(this.view);this.editor.editing.view.focus()}get _isViewVisible(){return this._balloon.visibleView===this.view}get _isViewInBalloon(){return this._balloon.hasView(this.view)}_getPropertyChangeCallback(e){return(t,i,n)=>{this.editor.execute(e,{value:n,batch:this._undoStepBatch})}}_getValidatedPropertyChangeCallback({commandName:e,viewField:t,validator:i,errorText:n}){const o=uh(()=>{t.errorText=n},MO);return(n,r,s)=>{o.cancel();if(i(s)){this.editor.execute(e,{value:s,batch:this._undoStepBatch});t.errorText=null}else{o()}}}}function LO(e){e.setNormalizer(\"border\",NO);e.setNormalizer(\"border-top\",OO(\"top\"));e.setNormalizer(\"border-right\",OO(\"right\"));e.setNormalizer(\"border-bottom\",OO(\"bottom\"));e.setNormalizer(\"border-left\",OO(\"left\"));e.setNormalizer(\"border-color\",RO(\"color\"));e.setNormalizer(\"border-width\",RO(\"width\"));e.setNormalizer(\"border-style\",RO(\"style\"));e.setNormalizer(\"border-top-color\",DO(\"color\",\"top\"));e.setNormalizer(\"border-top-style\",DO(\"style\",\"top\"));e.setNormalizer(\"border-top-width\",DO(\"width\",\"top\"));e.setNormalizer(\"border-right-color\",DO(\"color\",\"right\"));e.setNormalizer(\"border-right-style\",DO(\"style\",\"right\"));e.setNormalizer(\"border-right-width\",DO(\"width\",\"right\"));e.setNormalizer(\"border-bottom-color\",DO(\"color\",\"bottom\"));e.setNormalizer(\"border-bottom-style\",DO(\"style\",\"bottom\"));e.setNormalizer(\"border-bottom-width\",DO(\"width\",\"bottom\"));e.setNormalizer(\"border-left-color\",DO(\"color\",\"left\"));e.setNormalizer(\"border-left-style\",DO(\"style\",\"left\"));e.setNormalizer(\"border-left-width\",DO(\"width\",\"left\"));e.setExtractor(\"border-top\",jO(\"top\"));e.setExtractor(\"border-right\",jO(\"right\"));e.setExtractor(\"border-bottom\",jO(\"bottom\"));e.setExtractor(\"border-left\",jO(\"left\"));e.setExtractor(\"border-top-color\",\"border.color.top\");e.setExtractor(\"border-right-color\",\"border.color.right\");e.setExtractor(\"border-bottom-color\",\"border.color.bottom\");e.setExtractor(\"border-left-color\",\"border.color.left\");e.setExtractor(\"border-top-width\",\"border.width.top\");e.setExtractor(\"border-right-width\",\"border.width.right\");e.setExtractor(\"border-bottom-width\",\"border.width.bottom\");e.setExtractor(\"border-left-width\",\"border.width.left\");e.setExtractor(\"border-top-style\",\"border.style.top\");e.setExtractor(\"border-right-style\",\"border.style.right\");e.setExtractor(\"border-bottom-style\",\"border.style.bottom\");e.setExtractor(\"border-left-style\",\"border.style.left\");e.setReducer(\"border-color\",XT(\"border-color\"));e.setReducer(\"border-style\",XT(\"border-style\"));e.setReducer(\"border-width\",XT(\"border-width\"));e.setReducer(\"border-top\",HO(\"top\"));e.setReducer(\"border-right\",HO(\"right\"));e.setReducer(\"border-bottom\",HO(\"bottom\"));e.setReducer(\"border-left\",HO(\"left\"));e.setReducer(\"border\",FO);e.setStyleRelation(\"border\",[\"border-color\",\"border-style\",\"border-width\",\"border-top\",\"border-right\",\"border-bottom\",\"border-left\",\"border-top-color\",\"border-right-color\",\"border-bottom-color\",\"border-left-color\",\"border-top-style\",\"border-right-style\",\"border-bottom-style\",\"border-left-style\",\"border-top-width\",\"border-right-width\",\"border-bottom-width\",\"border-left-width\"]);e.setStyleRelation(\"border-color\",[\"border-top-color\",\"border-right-color\",\"border-bottom-color\",\"border-left-color\"]);e.setStyleRelation(\"border-style\",[\"border-top-style\",\"border-right-style\",\"border-bottom-style\",\"border-left-style\"]);e.setStyleRelation(\"border-width\",[\"border-top-width\",\"border-right-width\",\"border-bottom-width\",\"border-left-width\"]);e.setStyleRelation(\"border-top\",[\"border-top-color\",\"border-top-style\",\"border-top-width\"]);e.setStyleRelation(\"border-right\",[\"border-right-color\",\"border-right-style\",\"border-right-width\"]);e.setStyleRelation(\"border-bottom\",[\"border-bottom-color\",\"border-bottom-style\",\"border-bottom-width\"]);e.setStyleRelation(\"border-left\",[\"border-left-color\",\"border-left-style\",\"border-left-width\"])}function NO(e){const{color:t,style:i,width:n}=VO(e);return{path:\"border\",value:{color:ZT(t),style:ZT(i),width:ZT(n)}}}function OO(e){return t=>{const{color:i,style:n,width:o}=VO(t);const r={};if(i!==undefined){r.color={[e]:i}}if(n!==undefined){r.style={[e]:n}}if(o!==undefined){r.width={[e]:o}}return{path:\"border\",value:r}}}function RO(e){return t=>({path:\"border\",value:zO(t,e)})}function zO(e,t){return{[t]:ZT(e)}}function DO(e,t){return i=>({path:\"border\",value:{[e]:{[t]:i}}})}function jO(e){return(t,i)=>{if(i.border){return BO(i.border,e)}}}function BO(e,t){const i={};if(e.width&&e.width[t]){i.width=e.width[t]}if(e.style&&e.style[t]){i.style=e.style[t]}if(e.color&&e.color[t]){i.color=e.color[t]}return i}function VO(e){const t={};const i=iE(e);for(const e of i){if(FT(e)||/thin|medium|thick/.test(e)){t.width=e}else if(BT(e)){t.style=e}else{t.color=e}}return t}function FO(e){const t=[];t.push(...WO(BO(e,\"top\"),\"top\"));t.push(...WO(BO(e,\"right\"),\"right\"));t.push(...WO(BO(e,\"bottom\"),\"bottom\"));t.push(...WO(BO(e,\"left\"),\"left\"));return t}function HO(e){return t=>WO(t,e)}function WO(e,t){const i=[];if(e&&e.width!==undefined){i.push(e.width)}if(e&&e.style!==undefined){i.push(e.style)}if(e&&e.color!==undefined){i.push(e.color)}if(i.length){return[[`border-${t}`,i.join(\" \")]]}return[]}function UO(e){e.setNormalizer(\"padding\",tE(\"padding\"));e.setNormalizer(\"padding-top\",e=>({path:\"padding.top\",value:e}));e.setNormalizer(\"padding-right\",e=>({path:\"padding.right\",value:e}));e.setNormalizer(\"padding-bottom\",e=>({path:\"padding.bottom\",value:e}));e.setNormalizer(\"padding-left\",e=>({path:\"padding.left\",value:e}));e.setReducer(\"padding\",XT(\"padding\"));e.setStyleRelation(\"padding\",[\"padding-top\",\"padding-right\",\"padding-bottom\",\"padding-left\"])}function qO(e){e.setNormalizer(\"background\",$O);e.setNormalizer(\"background-color\",e=>({path:\"background.color\",value:e}));e.setReducer(\"background\",e=>{const t=[];t.push([\"background-color\",e.color]);return t})}function $O(e){const t={};const i=iE(e);for(const e of i){if(qT(e)){t.repeat=t.repeat||[];t.repeat.push(e)}else if(GT(e)){t.position=t.position||[];t.position.push(e)}else if(KT(e)){t.attachment=e}else if(DT(e)){t.color=e}else if(QT(e)){t.image=e}}return{path:\"background\",value:t}}function GO(e,t,i,n){e.for(\"upcast\").attributeToAttribute({view:{styles:{[n]:/[\\s\\S]+/}},model:{name:t,key:i,value:e=>e.getNormalizedStyle(n)}})}function YO(e,t){e.for(\"upcast\").add(e=>e.on(\"element:\"+t,(e,t,i)=>{const n=[\"border-top\",\"border-right\",\"border-bottom\",\"border-left\"].filter(e=>t.viewItem.hasStyle(e));if(!n.length){return}const o={styles:n};if(!i.consumable.test(t.viewItem,o)){return}if(!t.modelRange){t=Object.assign(t,i.convertChildren(t.viewItem,t.modelCursor))}const r=[...t.modelRange.getItems({shallow:true})].pop();i.consumable.consume(t.viewItem,o);i.writer.setAttribute(\"borderStyle\",t.viewItem.getNormalizedStyle(\"border-style\"),r);i.writer.setAttribute(\"borderColor\",t.viewItem.getNormalizedStyle(\"border-color\"),r);i.writer.setAttribute(\"borderWidth\",t.viewItem.getNormalizedStyle(\"border-width\"),r)}))}function KO(e,t,i,n){e.for(\"downcast\").attributeToAttribute({model:{name:t,key:i},view:e=>({key:\"style\",value:{[n]:e}})})}function JO(e,t,i){e.for(\"downcast\").add(e=>e.on(`attribute:${t}:table`,(e,t,n)=>{const{item:o,attributeNewValue:r}=t;const{mapper:s,writer:a}=n;if(!n.consumable.consume(t.item,e.name)){return}const l=[...s.toViewElement(o).getChildren()].find(e=>e.is(\"table\"));if(r){a.setStyle(i,r,l)}else{a.removeStyle(i,l)}}))}class QO extends Dw{constructor(e,t){super(e);this.attributeName=t}refresh(){const e=this.editor;const t=VI(e.model.document.selection);this.isEnabled=!!t.length;this.value=this._getSingleValue(t)}execute(e={}){const{value:t,batch:i}=e;const n=this.editor.model;const o=VI(n.document.selection);const r=this._getValueToSet(t);n.enqueueChange(i||\"default\",e=>{if(r){o.forEach(t=>e.setAttribute(this.attributeName,r,t))}else{o.forEach(t=>e.removeAttribute(this.attributeName,t))}})}_getAttribute(e){if(!e){return}return e.getAttribute(this.attributeName)}_getValueToSet(e){return e}_getSingleValue(e){const t=this._getAttribute(e[0]);const i=e.every(e=>this._getAttribute(e)===t);return i?t:undefined}}class ZO extends QO{constructor(e){super(e,\"padding\")}_getAttribute(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}_getValueToSet(e){return TI(e,\"px\")}}class XO extends QO{constructor(e){super(e,\"width\")}_getValueToSet(e){return TI(e,\"px\")}}class eR extends QO{constructor(e){super(e,\"height\")}_getValueToSet(e){return TI(e,\"px\")}}class tR extends QO{constructor(e){super(e,\"backgroundColor\")}}class iR extends QO{constructor(e){super(e,\"verticalAlignment\")}}class nR extends QO{constructor(e){super(e,\"horizontalAlignment\")}}class oR extends QO{constructor(e){super(e,\"borderStyle\")}_getAttribute(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}}class rR extends QO{constructor(e){super(e,\"borderColor\")}_getAttribute(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}}class sR extends QO{constructor(e){super(e,\"borderWidth\")}_getAttribute(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}_getValueToSet(e){return TI(e,\"px\")}}const aR=/^(top|bottom)$/;class lR extends Rw{static get pluginName(){return\"TableCellPropertiesEditing\"}static get requires(){return[mN]}init(){const e=this.editor;const t=e.model.schema;const i=e.conversion;const n=e.locale;e.data.addStyleProcessorRules(LO);cR(t,i);e.commands.add(\"tableCellBorderStyle\",new oR(e));e.commands.add(\"tableCellBorderColor\",new rR(e));e.commands.add(\"tableCellBorderWidth\",new sR(e));dR(t,i,n);e.commands.add(\"tableCellHorizontalAlignment\",new nR(e));hR(t,i,\"width\",\"width\");e.commands.add(\"tableCellWidth\",new XO(e));hR(t,i,\"height\",\"height\");e.commands.add(\"tableCellHeight\",new eR(e));e.data.addStyleProcessorRules(UO);hR(t,i,\"padding\",\"padding\");e.commands.add(\"tableCellPadding\",new ZO(e));e.data.addStyleProcessorRules(qO);hR(t,i,\"backgroundColor\",\"background-color\");e.commands.add(\"tableCellBackgroundColor\",new tR(e));uR(t,i);e.commands.add(\"tableCellVerticalAlignment\",new iR(e))}}function cR(e,t){e.extend(\"tableCell\",{allowAttributes:[\"borderWidth\",\"borderColor\",\"borderStyle\"]});YO(t,\"td\");YO(t,\"th\");KO(t,\"tableCell\",\"borderStyle\",\"border-style\");KO(t,\"tableCell\",\"borderColor\",\"border-color\");KO(t,\"tableCell\",\"borderWidth\",\"border-width\")}function dR(e,t,i){e.extend(\"tableCell\",{allowAttributes:[\"horizontalAlignment\"]});const n=[i.contentLanguageDirection==\"rtl\"?\"left\":\"right\",\"center\",\"justify\"];t.attributeToAttribute({model:{name:\"tableCell\",key:\"horizontalAlignment\",values:n},view:n.reduce((e,t)=>({...e,[t]:{key:\"style\",value:{\"text-align\":t}}}),{})})}function uR(e,t){e.extend(\"tableCell\",{allowAttributes:[\"verticalAlignment\"]});t.attributeToAttribute({model:{name:\"tableCell\",key:\"verticalAlignment\",values:[\"top\",\"bottom\"]},view:{top:{key:\"style\",value:{\"vertical-align\":\"top\"}},bottom:{key:\"style\",value:{\"vertical-align\":\"bottom\"}}}});t.for(\"upcast\").attributeToAttribute({view:{attributes:{valign:aR}},model:{name:\"tableCell\",key:\"verticalAlignment\",value:e=>e.getAttribute(\"valign\")}})}function hR(e,t,i,n){e.extend(\"tableCell\",{allowAttributes:[i]});GO(t,\"tableCell\",i,n);KO(t,\"tableCell\",i,n)}class fR extends Rw{static get pluginName(){return\"TableCellProperties\"}static get requires(){return[lR,IO]}}class mR extends Dw{constructor(e,t){super(e);this.attributeName=t}refresh(){const e=this.editor;const t=e.model.document.selection;const i=yI(\"table\",t.getFirstPosition());this.isEnabled=!!i;this.value=this._getValue(i)}execute(e={}){const t=this.editor.model;const i=t.document.selection;const{value:n,batch:o}=e;const r=yI(\"table\",i.getFirstPosition());const s=this._getValueToSet(n);t.enqueueChange(o||\"default\",e=>{if(s){e.setAttribute(this.attributeName,s,r)}else{e.removeAttribute(this.attributeName,r)}})}_getValue(e){if(!e){return}return e.getAttribute(this.attributeName)}_getValueToSet(e){return e}}class gR extends mR{constructor(e){super(e,\"backgroundColor\")}}class pR extends mR{constructor(e){super(e,\"borderColor\")}_getValue(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}}class bR extends mR{constructor(e){super(e,\"borderStyle\")}_getValue(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}}class wR extends mR{constructor(e){super(e,\"borderWidth\")}_getValue(e){if(!e){return}return CI(e.getAttribute(this.attributeName))}_getValueToSet(e){return TI(e,\"px\")}}class _R extends mR{constructor(e){super(e,\"width\")}_getValueToSet(e){return TI(e,\"px\")}}class kR extends mR{constructor(e){super(e,\"height\")}_getValueToSet(e){return TI(e,\"px\")}}class vR extends mR{constructor(e){super(e,\"alignment\")}}const yR=/^(left|right)$/;class xR extends Rw{static get pluginName(){return\"TablePropertiesEditing\"}static get requires(){return[mN]}init(){const e=this.editor;const t=e.model.schema;const i=e.conversion;e.data.addStyleProcessorRules(LO);AR(t,i);e.commands.add(\"tableBorderColor\",new pR(e));e.commands.add(\"tableBorderStyle\",new bR(e));e.commands.add(\"tableBorderWidth\",new wR(e));CR(t,i);e.commands.add(\"tableAlignment\",new vR(e));ER(t,i,\"width\",\"width\");e.commands.add(\"tableWidth\",new _R(e));ER(t,i,\"height\",\"height\");e.commands.add(\"tableHeight\",new kR(e));e.data.addStyleProcessorRules(qO);TR(t,i,\"backgroundColor\",\"background-color\");e.commands.add(\"tableBackgroundColor\",new gR(e))}}function AR(e,t){e.extend(\"table\",{allowAttributes:[\"borderWidth\",\"borderColor\",\"borderStyle\"]});YO(t,\"table\");JO(t,\"borderColor\",\"border-color\");JO(t,\"borderStyle\",\"border-style\");JO(t,\"borderWidth\",\"border-width\")}function CR(e,t){e.extend(\"table\",{allowAttributes:[\"alignment\"]});t.attributeToAttribute({model:{name:\"table\",key:\"alignment\",values:[\"left\",\"right\"]},view:{left:{key:\"style\",value:{float:\"left\"}},right:{key:\"style\",value:{float:\"right\"}}},converterPriority:\"high\"});t.for(\"upcast\").attributeToAttribute({view:{attributes:{align:yR}},model:{name:\"table\",key:\"alignment\",value:e=>e.getAttribute(\"align\")}})}function TR(e,t,i,n){e.extend(\"table\",{allowAttributes:[i]});GO(t,\"table\",i,n);JO(t,i,n)}function ER(e,t,i,n){e.extend(\"table\",{allowAttributes:[i]});GO(t,\"table\",i,n);KO(t,\"table\",i,n)}var PR=i(138);const MR={left:CC,center:TC,right:EC};class SR extends _b{constructor(e,t){super(e);this.set({borderStyle:\"\",borderWidth:\"\",borderColor:\"\",backgroundColor:\"\",width:\"\",height:\"\",alignment:\"\"});this.options=t;const{borderStyleDropdown:i,borderWidthInput:n,borderColorInput:o,borderRowLabel:r}=this._createBorderFields();const{widthInput:s,operatorLabel:a,heightInput:l,dimensionsLabel:c}=this._createDimensionFields();const{alignmentToolbar:d,alignmentLabel:u}=this._createAlignmentFields();this.focusTracker=new Ep;this.keystrokes=new mp;this.children=this.createCollection();this.borderStyleDropdown=i;this.borderWidthInput=n;this.borderColorInput=o;this.backgroundInput=this._createBackgroundField();this.widthInput=s;this.heightInput=l;this.alignmentToolbar=d;const{saveButtonView:h,cancelButtonView:f}=this._createActionButtons();this.saveButtonView=h;this.cancelButtonView=f;this._focusables=new Wp;this._focusCycler=new zb({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:\"shift + tab\",focusNext:\"tab\"}});this.children.add(new XS(e,{label:this.t(\"Table properties\")}));this.children.add(new wO(e,{labelView:r,children:[r,i,o,n],class:\"ck-table-form__border-row\"}));this.children.add(new wO(e,{children:[this.backgroundInput]}));this.children.add(new wO(e,{children:[new wO(e,{labelView:c,children:[c,s,a,l],class:\"ck-table-form__dimensions-row\"}),new wO(e,{labelView:u,children:[u,d],class:\"ck-table-properties-form__alignment-row\"})]}));this.children.add(new wO(e,{children:[this.saveButtonView,this.cancelButtonView],class:\"ck-table-form__action-row\"}));this.setTemplate({tag:\"form\",attributes:{class:[\"ck\",\"ck-form\",\"ck-table-form\",\"ck-table-properties-form\"],tabindex:\"-1\"},children:this.children})}render(){super.render();AA({view:this});[this.borderStyleDropdown,this.borderColorInput,this.borderWidthInput,this.backgroundInput,this.widthInput,this.heightInput,this.alignmentToolbar,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createBorderFields(){const e=hO({colorConfig:this.options.borderColors,columns:5});const t=this.locale;const i=this.t;const n=new Pb(t);n.text=i(\"Border\");const o=nO(this.t);const r=new _A(t,xA);r.set({label:i(\"Style\"),class:\"ck-table-form__border-style\"});r.fieldView.buttonView.set({isOn:false,withText:true,tooltip:i(\"Style\")});r.fieldView.buttonView.bind(\"label\").to(this,\"borderStyle\",e=>o[e?e:\"none\"]);r.fieldView.on(\"execute\",e=>{this.borderStyle=e.source._borderStyleValue});_w(r.fieldView,cO(this));const s=new _A(t,yA);s.set({label:i(\"Width\"),class:\"ck-table-form__border-width\"});s.fieldView.bind(\"value\").to(this,\"borderWidth\");s.bind(\"isEnabled\").to(this,\"borderStyle\",IR);s.fieldView.on(\"input\",()=>{this.borderWidth=s.fieldView.element.value});const a=new _A(t,e);a.set({label:i(\"Color\"),class:\"ck-table-form__border-color\"});a.fieldView.bind(\"value\").to(this,\"borderColor\");a.bind(\"isEnabled\").to(this,\"borderStyle\",IR);a.fieldView.on(\"input\",()=>{this.borderColor=a.fieldView.value});this.on(\"change:borderStyle\",(e,t,i)=>{if(!IR(i)){this.borderColor=\"\";this.borderWidth=\"\"}});return{borderRowLabel:n,borderStyleDropdown:r,borderColorInput:a,borderWidthInput:s}}_createBackgroundField(){const e=hO({colorConfig:this.options.backgroundColors,columns:5});const t=this.locale;const i=this.t;const n=new _A(t,e);n.set({label:i(\"Background\"),class:\"ck-table-properties-form__background\"});n.fieldView.bind(\"value\").to(this,\"backgroundColor\");n.fieldView.on(\"input\",()=>{this.backgroundColor=n.fieldView.value});return n}_createDimensionFields(){const e=this.locale;const t=this.t;const i=new Pb(e);i.text=t(\"Dimensions\");const n=new _A(e,yA);n.set({label:t(\"Width\"),class:\"ck-table-form__dimensions-row__width\"});n.fieldView.bind(\"value\").to(this,\"width\");n.fieldView.on(\"input\",()=>{this.width=n.fieldView.element.value});const o=new _b(e);o.setTemplate({tag:\"span\",attributes:{class:[\"ck-table-form__dimension-operator\"]},children:[{text:\"×\"}]});const r=new _A(e,yA);r.set({label:t(\"Height\"),class:\"ck-table-form__dimensions-row__height\"});r.fieldView.bind(\"value\").to(this,\"height\");r.fieldView.on(\"input\",()=>{this.height=r.fieldView.element.value});return{dimensionsLabel:i,widthInput:n,operatorLabel:o,heightInput:r}}_createAlignmentFields(){const e=this.locale;const t=this.t;const i=new Pb(e);i.text=t(\"Alignment\");const n=new Tw(e);n.set({isCompact:true,ariaLabel:t(\"Table alignment toolbar\")});dO({view:this,icons:MR,toolbar:n,labels:this._alignmentLabels,propertyName:\"alignment\",nameToValue:e=>e===\"center\"?\"\":e});return{alignmentLabel:i,alignmentToolbar:n}}_createActionButtons(){const e=this.locale;const t=this.t;const i=new rw(e);const n=new rw(e);const o=[this.borderWidthInput,this.borderColorInput,this.backgroundInput,this.widthInput,this.heightInput];i.set({label:t(\"Save\"),icon:CA,class:\"ck-button-save\",type:\"submit\",withText:true});i.bind(\"isEnabled\").toMany(o,\"errorText\",(...e)=>e.every(e=>!e));n.set({label:t(\"Cancel\"),icon:TA,class:\"ck-button-cancel\",type:\"cancel\",withText:true});n.delegate(\"execute\").to(this,\"cancel\");return{saveButtonView:i,cancelButtonView:n}}get _alignmentLabels(){const e=this.locale;const t=this.t;const i=t(\"Align table to the left\");const n=t(\"Center table\");const o=t(\"Align table to the right\");if(e.uiLanguageDirection===\"rtl\"){return{right:o,center:n,left:i}}else{return{left:i,center:n,right:o}}}}function IR(e){return!!e}var LR='';const NR=500;const OR={borderStyle:\"tableBorderStyle\",borderColor:\"tableBorderColor\",borderWidth:\"tableBorderWidth\",backgroundColor:\"tableBackgroundColor\",width:\"tableWidth\",height:\"tableHeight\",alignment:\"tableAlignment\"};class RR extends Rw{static get requires(){return[OA]}static get pluginName(){return\"TablePropertiesUI\"}constructor(e){super(e);e.config.define(\"table.tableProperties\",{borderColors:uO,backgroundColors:uO})}init(){const e=this.editor;const t=e.t;this._balloon=e.plugins.get(OA);this.view=this._createPropertiesView();this._undoStepBatch=null;e.ui.componentFactory.add(\"tableProperties\",i=>{const n=new rw(i);n.set({label:t(\"Table properties\"),icon:LR,tooltip:true});this.listenTo(n,\"execute\",()=>this._showView());const o=Object.values(OR).map(t=>e.commands.get(t));n.bind(\"isEnabled\").toMany(o,\"isEnabled\",(...e)=>e.some(e=>e));return n})}destroy(){super.destroy();this.view.destroy()}_createPropertiesView(){const e=this.editor;const t=e.editing.view.document;const i=e.config.get(\"table.tableProperties\");const n=Fv(i.borderColors);const o=Vv(e.locale,n);const r=Fv(i.backgroundColors);const s=Vv(e.locale,r);const a=new SR(e.locale,{borderColors:o,backgroundColors:s});const l=e.t;a.render();this.listenTo(a,\"submit\",()=>{this._hideView()});this.listenTo(a,\"cancel\",()=>{if(this._undoStepBatch.operations.length){e.execute(\"undo\",this._undoStepBatch)}this._hideView()});a.keystrokes.set(\"Esc\",(e,t)=>{this._hideView();t()});this.listenTo(e.ui,\"update\",()=>{if(!DI(t.selection)){this._hideView()}else if(this._isViewVisible){eO(e,\"table\")}});mw({emitter:a,activator:()=>this._isViewInBalloon,contextElements:[this._balloon.view.element],callback:()=>this._hideView()});const c=oO(l);const d=rO(l);a.on(\"change:borderStyle\",this._getPropertyChangeCallback(\"tableBorderStyle\"));a.on(\"change:borderColor\",this._getValidatedPropertyChangeCallback({viewField:a.borderColorInput,commandName:\"tableBorderColor\",errorText:c,validator:sO}));a.on(\"change:borderWidth\",this._getValidatedPropertyChangeCallback({viewField:a.borderWidthInput,commandName:\"tableBorderWidth\",errorText:d,validator:lO}));a.on(\"change:backgroundColor\",this._getValidatedPropertyChangeCallback({viewField:a.backgroundInput,commandName:\"tableBackgroundColor\",errorText:c,validator:sO}));a.on(\"change:width\",this._getValidatedPropertyChangeCallback({viewField:a.widthInput,commandName:\"tableWidth\",errorText:d,validator:aO}));a.on(\"change:height\",this._getValidatedPropertyChangeCallback({viewField:a.heightInput,commandName:\"tableHeight\",errorText:d,validator:aO}));a.on(\"change:alignment\",this._getPropertyChangeCallback(\"tableAlignment\"));return a}_fillViewFormFromCommandValues(){const e=this.editor.commands;Object.entries(OR).map(([t,i])=>[t,e.get(i).value||\"\"]).forEach(([e,t])=>this.view.set(e,t))}_showView(){const e=this.editor;this._balloon.add({view:this.view,position:tO(e)});this._undoStepBatch=e.model.createBatch();this._fillViewFormFromCommandValues();this.view.focus()}_hideView(){if(!this._isViewInBalloon){return}const e=this.editor;this.stopListening(e.ui,\"update\");this.view.saveButtonView.focus();this._balloon.remove(this.view);this.editor.editing.view.focus()}get _isViewVisible(){return this._balloon.visibleView===this.view}get _isViewInBalloon(){return this._balloon.hasView(this.view)}_getPropertyChangeCallback(e){return(t,i,n)=>{this.editor.execute(e,{value:n,batch:this._undoStepBatch})}}_getValidatedPropertyChangeCallback({commandName:e,viewField:t,validator:i,errorText:n}){const o=uh(()=>{t.errorText=n},NR);return(n,r,s)=>{o.cancel();if(i(s)){this.editor.execute(e,{value:s,batch:this._undoStepBatch});t.errorText=null}else{o()}}}}class zR extends Rw{static get pluginName(){return\"TableProperties\"}static get requires(){return[xR,RR]}}class DR extends Rw{static get requires(){return[DC]}static get pluginName(){return\"TableToolbar\"}afterInit(){const e=this.editor;const t=e.t;const i=e.plugins.get(DC);const n=e.config.get(\"table.contentToolbar\");const o=e.config.get(\"table.tableToolbar\");if(n){i.register(\"tableContent\",{ariaLabel:t(\"Table toolbar\"),items:n,getRelatedElement:DI})}if(o){i.register(\"table\",{ariaLabel:t(\"Table toolbar\"),items:o,getRelatedElement:zI})}}}function jR(e,t){let i=e.start;const n=Array.from(e.getItems()).reduce((e,n)=>{if(!(n.is(\"text\")||n.is(\"textProxy\"))){i=t.createPositionAfter(n);return\"\"}return e+n.data},\"\");return{text:n,range:t.createRange(i,e.end)}}class BR{constructor(e,t){this.model=e;this.testCallback=t;this.hasMatch=false;this.set(\"isEnabled\",true);this.on(\"change:isEnabled\",()=>{if(this.isEnabled){this._startListening()}else{this.stopListening(e.document.selection);this.stopListening(e.document)}});this._startListening()}_startListening(){const e=this.model;const t=e.document;this.listenTo(t.selection,\"change:range\",(e,{directChange:i})=>{if(!i){return}if(!t.selection.isCollapsed){if(this.hasMatch){this.fire(\"unmatched\");this.hasMatch=false}return}this._evaluateTextBeforeSelection(\"selection\")});this.listenTo(t,\"change:data\",(e,t)=>{if(t.type==\"transparent\"){return}this._evaluateTextBeforeSelection(\"data\",{batch:t})})}_evaluateTextBeforeSelection(e,t={}){const i=this.model;const n=i.document;const o=n.selection;const r=i.createRange(i.createPositionAt(o.focus.parent,0),o.focus);const{text:s,range:a}=jR(r,i);const l=this.testCallback(s);if(!l&&this.hasMatch){this.fire(\"unmatched\")}this.hasMatch=!!l;if(l){const i=Object.assign(t,{text:s,range:a});if(typeof l==\"object\"){Object.assign(i,l)}this.fire(`matched:${e}`,i)}}}ys(BR,Jl);var VR=/[\\\\^$.*+?()[\\]{}|]/g,FR=RegExp(VR.source);function HR(e){e=va(e);return e&&FR.test(e)?e.replace(VR,\"\\\\$&\"):e}var WR=HR;const UR={copyright:{from:\"(c)\",to:\"©\"},registeredTrademark:{from:\"(r)\",to:\"®\"},trademark:{from:\"(tm)\",to:\"™\"},oneHalf:{from:\"1/2\",to:\"½\"},oneThird:{from:\"1/3\",to:\"⅓\"},twoThirds:{from:\"2/3\",to:\"⅔\"},oneForth:{from:\"1/4\",to:\"¼\"},threeQuarters:{from:\"3/4\",to:\"¾\"},lessThanOrEqual:{from:\"<=\",to:\"≤\"},greaterThanOrEqual:{from:\">=\",to:\"≥\"},notEqual:{from:\"!=\",to:\"≠\"},arrowLeft:{from:\"<-\",to:\"←\"},arrowRight:{from:\"->\",to:\"→\"},horizontalEllipsis:{from:\"...\",to:\"…\"},enDash:{from:/(^| )(--)( )$/,to:[null,\"–\",null]},emDash:{from:/(^| )(---)( )$/,to:[null,\"—\",null]},quotesPrimary:{from:QR('\"'),to:[null,\"“\",null,\"”\"]},quotesSecondary:{from:QR(\"'\"),to:[null,\"‘\",null,\"’\"]},quotesPrimaryEnGb:{from:QR(\"'\"),to:[null,\"‘\",null,\"’\"]},quotesSecondaryEnGb:{from:QR('\"'),to:[null,\"“\",null,\"”\"]},quotesPrimaryPl:{from:QR('\"'),to:[null,\"„\",null,\"”\"]},quotesSecondaryPl:{from:QR(\"'\"),to:[null,\"‚\",null,\"’\"]}};const qR={symbols:[\"copyright\",\"registeredTrademark\",\"trademark\"],mathematical:[\"oneHalf\",\"oneThird\",\"twoThirds\",\"oneForth\",\"threeQuarters\",\"lessThanOrEqual\",\"greaterThanOrEqual\",\"notEqual\",\"arrowLeft\",\"arrowRight\"],typography:[\"horizontalEllipsis\",\"enDash\",\"emDash\"],quotes:[\"quotesPrimary\",\"quotesSecondary\"]};const $R=[\"symbols\",\"mathematical\",\"typography\",\"quotes\"];class GR extends Rw{static get pluginName(){return\"TextTransformation\"}constructor(e){super(e);e.config.define(\"typing\",{transformations:{include:$R}})}init(){const e=this.editor.model;const t=e.document.selection;t.on(\"change:range\",()=>{this.isEnabled=!t.anchor.parent.is(\"codeBlock\")});this._enableTransformationWatchers()}_enableTransformationWatchers(){const e=this.editor;const t=e.model;const i=e.plugins.get(\"Input\");const n=ZR(e.config.get(\"typing.transformations\"));const o=e=>{for(const t of n){const i=t.from;const n=i.test(e);if(n){return{normalizedTransformation:t}}}};const r=(e,n)=>{if(!i.isInput(n.batch)){return}const{from:o,to:r}=n.normalizedTransformation;const s=o.exec(n.text);const a=r(s.slice(1));const l=n.range;let c=s.index;t.enqueueChange(e=>{for(let i=1;i[e]}else if(e instanceof Array){return()=>e}return e}function JR(e){const t=e.textNode?e.textNode:e.nodeAfter;return t.getAttributes()}function QR(e){return new RegExp(`(^|\\\\s)(${e})([^${e}]*)(${e})$`)}function ZR(e){const t=e.extra||[];const i=e.remove||[];const n=e=>!i.includes(e);const o=e.include.concat(t).filter(n);return XR(o).filter(n).map(e=>UR[e]||e).map(e=>({from:YR(e.from),to:KR(e.to)}))}function XR(e){const t=new Set;for(const i of e){if(qR[i]){for(const e of qR[i]){t.add(e)}}else{t.add(i)}}return Array.from(t)}const ez=new Set([\"paragraph\",\"heading1\",\"heading2\",\"heading3\",\"heading4\",\"heading5\",\"heading6\"]);class tz extends Rw{static get pluginName(){return\"Title\"}static get requires(){return[Ty]}init(){const e=this.editor;const t=e.model;this._bodyPlaceholder=null;t.schema.register(\"title\",{isBlock:true,allowIn:\"$root\"});t.schema.register(\"title-content\",{isBlock:true,allowIn:\"title\",allowAttributes:[\"alignment\"]});t.schema.extend(\"$text\",{allowIn:\"title-content\"});t.schema.addAttributeCheck(e=>{if(e.endsWith(\"title-content $text\")){return false}});e.editing.mapper.on(\"modelToViewPosition\",nz(e.editing.view));e.data.mapper.on(\"modelToViewPosition\",nz(e.editing.view));e.conversion.for(\"downcast\").elementToElement({model:\"title-content\",view:\"h1\"});e.data.upcastDispatcher.on(\"element:h1\",iz,{priority:\"high\"});e.data.upcastDispatcher.on(\"element:h2\",iz,{priority:\"high\"});e.data.upcastDispatcher.on(\"element:h3\",iz,{priority:\"high\"});t.document.registerPostFixer(e=>this._fixTitleContent(e));t.document.registerPostFixer(e=>this._fixTitleElement(e));t.document.registerPostFixer(e=>this._fixBodyElement(e));t.document.registerPostFixer(e=>this._fixExtraParagraph(e));this._attachPlaceholders();this._attachTabPressHandling()}getTitle(){const e=this._getTitleElement();const t=e.getChild(0);return this.editor.data.stringify(t)}getBody(){const e=this.editor;const t=e.data;const i=e.model;const n=e.model.document.getRoot();const o=new $c(e.editing.view.document);const r=i.createRangeIn(n);const s=new Uc(e.editing.view.document);t.mapper.clearBindings();t.mapper.bindElements(n,s);t.downcastDispatcher.convertInsert(r,o);const a=i.createPositionAfter(n.getChild(0));const l=i.createRange(a,i.createPositionAt(n,\"end\"));for(const e of i.markers){const i=l.getIntersection(e.getRange());if(i){t.downcastDispatcher.convertMarkerAdd(e.name,i,o)}}o.remove(o.createRangeOn(s.getChild(0)));return e.data.processor.toData(s)}_getTitleElement(){const e=this.editor.model.document.getRoot();for(const t of e.getChildren()){if(oz(t)){return t}}}_fixTitleContent(e){const t=this._getTitleElement();if(!t||t.maxOffset===1){return false}const i=Array.from(t.getChildren());i.shift();for(const n of i){e.move(e.createRangeOn(n),t,\"after\");e.rename(n,\"paragraph\")}return true}_fixTitleElement(e){const t=this.editor.model;const i=t.document.getRoot();const n=Array.from(i.getChildren()).filter(oz);const o=n[0];const r=i.getChild(0);if(r.is(\"title\")){return sz(n,e,t)}if(!o&&!ez.has(r.name)){const t=e.createElement(\"title\");e.insert(t,i);e.insertElement(\"title-content\",t);return true}if(ez.has(r.name)){rz(r,e,t)}else{e.move(e.createRangeOn(o),i,0)}sz(n,e,t);return true}_fixBodyElement(e){const t=this.editor.model.document.getRoot();if(t.childCount<2){this._bodyPlaceholder=e.createElement(\"paragraph\");e.insert(this._bodyPlaceholder,t,1);return true}return false}_fixExtraParagraph(e){const t=this.editor.model.document.getRoot();const i=this._bodyPlaceholder;if(lz(i,t)){this._bodyPlaceholder=null;e.remove(i);return true}return false}_attachPlaceholders(){const e=this.editor;const t=e.t;const i=e.editing.view;const n=i.document.getRoot();const o=e.sourceElement;const r=e.config.get(\"title.placeholder\")||t(\"Type your title\");const s=e.config.get(\"placeholder\")||o&&o.tagName.toLowerCase()===\"textarea\"&&o.getAttribute(\"placeholder\")||t(\"Type or paste your content here.\");e.editing.downcastDispatcher.on(\"insert:title-content\",(e,t,n)=>{Np({view:i,element:n.mapper.toViewElement(t.item),text:r})});let a;i.document.registerPostFixer(e=>{const t=n.getChild(1);let i=false;if(t!==a){if(a){zp(e,a);e.removeAttribute(\"data-placeholder\",a)}e.setAttribute(\"data-placeholder\",s,t);a=t;i=true}if(Dp(t)&&n.childCount===2&&t.name===\"p\"){i=Rp(e,t)?true:i}else{i=zp(e,t)?true:i}return i})}_attachTabPressHandling(){const e=this.editor;const t=e.model;e.keystrokes.set(\"TAB\",(e,i)=>{t.change(e=>{const n=t.document.selection;const o=Array.from(n.getSelectedBlocks());if(o.length===1&&o[0].is(\"title-content\")){const n=t.document.getRoot().getChild(1);e.setSelection(n,0);i()}})});e.keystrokes.set(\"SHIFT + TAB\",(i,n)=>{t.change(i=>{const o=t.document.selection;if(!o.isCollapsed){return}const r=e.model.document.getRoot();const s=Bw(o.getSelectedBlocks());const a=o.getFirstPosition();const l=r.getChild(0);const c=r.getChild(1);if(s===c&&a.isAtStart){i.setSelection(l.getChild(0),0);n()}})})}}function iz(e,t,i){const n=t.modelCursor;const o=t.viewItem;if(!n.isAtStart||!n.parent.is(\"$root\")){return}if(!i.consumable.consume(o,{name:true})){return}const r=i.writer;const s=r.createElement(\"title\");const a=r.createElement(\"title-content\");r.append(a,s);r.insert(s,n);i.convertChildren(o,r.createPositionAt(a,0));t.modelRange=r.createRangeOn(s);t.modelCursor=r.createPositionAt(t.modelRange.end)}function nz(e){return(t,i)=>{const n=i.modelPosition.parent;if(!n.is(\"title\")){return}const o=n.parent;const r=i.mapper.toViewElement(o);i.viewPosition=e.createPositionAt(r,0);t.stop()}}function oz(e){return e.is(\"title\")}function rz(e,t,i){const n=t.createElement(\"title\");t.insert(n,e,\"before\");t.insert(e,n,0);t.rename(e,\"title-content\");i.schema.removeDisallowedAttributes([e],t)}function sz(e,t,i){let n=false;for(const o of e){if(o.index!==0){az(o,t,i);n=true}}return n}function az(e,t,i){const n=e.getChild(0);if(n.isEmpty){t.remove(e);return}t.move(t.createRangeOn(n),e,\"before\");t.rename(n,\"paragraph\");t.remove(e);i.schema.removeDisallowedAttributes([n],t)}function lz(e,t){if(!e||!e.is(\"paragraph\")||e.childCount){return false}if(t.childCount<=2||t.getChild(t.childCount-1)!==e){return false}return true}const cz=\"underline\";class dz extends Rw{static get pluginName(){return\"UnderlineEditing\"}init(){const e=this.editor;e.model.schema.extend(\"$text\",{allowAttributes:cz});e.model.schema.setAttributeProperties(cz,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:cz,view:\"u\",upcastAlso:{styles:{\"text-decoration\":\"underline\"}}});e.commands.add(cz,new w_(e,cz));e.keystrokes.set(\"CTRL+U\",\"underline\")}}var uz='';const hz=\"underline\";class fz extends Rw{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(hz,i=>{const n=e.commands.get(hz);const o=new rw(i);o.set({label:t(\"Underline\"),icon:uz,keystroke:\"CTRL+U\",tooltip:true,isToggleable:true});o.bind(\"isOn\",\"isEnabled\").to(n,\"value\",\"isEnabled\");this.listenTo(o,\"execute\",()=>{e.execute(hz);e.editing.view.focus()});return o})}}class mz extends Rw{static get requires(){return[dz,fz]}static get pluginName(){return\"Underline\"}}class gz extends Nw{}gz.builtinPlugins=[t_,a_,b_,A_,I_,hk,_v,$v,Qv,ay,yy,zy,$y,Px,WA,tC,_C,zC,FC,kT,TT,oE,dE,DP,kM,dS,OS,qS,Ty,QS,cI,dI,gI,hI,mI,vI,$N,fR,zR,DR,GR,tz,mz];var pz=t[\"default\"]=gz}])[\"default\"]}));"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""} \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/edit_add.html b/public/js/ckedit5/20.0.0_/edit_add.html new file mode 100644 index 0000000..419a1a4 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/edit_add.html @@ -0,0 +1,252 @@ + + + + + + + + + IT-IS Standards::Edit + + + + + + + + + + + + + + + + + + + + + + +
    +

    Objekt Spezifikationen

    +
    + + + +

    Obj-Specs :: neue Spec :: Editor

    +

    Hinzufügen von Spezifikationen (Text-Bausteinen) sowie Zuweisung zu Objekten, Klassen und Kategorien.

    + +

    + +
    + +
    + +
    +
    +
    + +
    + intern für Baustein-Administration
    +
    +
    +
    + +
    + intern für Baustein-Administration
    +
    +
    +
    +
    +
    +
    Objekt-Attribute +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + 2-stelliger Ländercode
    +
    +
    +
    +
    +
    +
    +
    + +
    + Text-Baustein Version
    +
    +
    +
    + +
    + Text-Baustein Nummerierung
    +
    +
    +
    +
    +
    +
    +
    +
    Availability Class +   + + + AC-0 nur mit Obj/Kat "Allgemein" +
    +
    +
    +
    +
    Protection Class +   + + + PC-0 nur mit Obj/Kat "Allgemein" +
    +
    +
    +
    + +
    +
    Text-Baustein Gültigkeit +
    + +
    +   + + intern zur Dokumentation
    +
    +
    +
    + +
    + intern zur Dokumentation
    +
    +
    +
    + + + Baustein aktiv oder in-aktiv +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +

    +
    + + + + +
    + + + diff --git a/public/js/ckedit5/20.0.0_/index.html b/public/js/ckedit5/20.0.0_/index.html new file mode 100644 index 0000000..cf66239 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/index.html @@ -0,0 +1,182 @@ + + + + + CKEditor 5 ClassicEditor build + + + + + + +
    +
    +

    CKEditor 5 logoCKEditor 5

    + +
    +
    +
    +
    +
    +

    CKEditor 5 online builder demo - ClassicEditor build

    +
    +
    +
    +
    +
    +

    Bilingual Personality Disorder

    +
    +
    One language, one person.
    +
    +

    + This may be the first time you hear about this made-up disorder but + it actually isn’t so far from the truth. Even the studies that were conducted almost half a century show that + the language you speak has more effects on you than you realise. +

    +

    + One of the very first experiments conducted on this topic dates back to 1964. + In the experiment + designed by linguist Ervin-Tripp who is an authority expert in psycholinguistic and sociolinguistic studies, + adults who are bilingual in English in French were showed series of pictures and were asked to create 3-minute stories. + In the end participants emphasized drastically different dynamics for stories in English and French. +

    +

    + Another ground-breaking experiment which included bilingual Japanese women married to American men in San Francisco were + asked to complete sentences. The goal of the experiment was to investigate whether or not human feelings and thoughts + are expressed differently in different language mindsets. + is a sample from the the experiment: +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    EnglishJapanese
    Real friends shouldBe very frankHelp each other
    I will probably becomeA teacherA housewife
    When there is a conflict with familyI do what I wantIt's a time of great unhappiness
    +

    + More recent studies show, the language a person speaks affects + their cognition, behaviour, emotions and hence their personality. + This shouldn’t come as a surprise + since we already know that different regions + of the brain become more active depending on the person’s activity at hand. Since structure, information and especially + the culture of languages varies substantially and the language a person speaks is an essential element of daily life. +

    +
    +
    + +
    +
    +

    CKEditor 5 + – Rich text editor of tomorrow, available today +

    +

    Copyright © 2003-2020, + CKSource + – Frederico Knabben. All rights reserved. +

    +
    + + + diff --git a/public/js/ckedit5/20.0.0_/styles.css b/public/js/ckedit5/20.0.0_/styles.css new file mode 100644 index 0000000..e73a875 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/styles.css @@ -0,0 +1,456 @@ +/** + * @license Copyright (c) 2014-2020, CKSource - Frederico Knabben. All rights reserved. + * This file is licensed under the terms of the MIT License (see LICENSE.md). + */ + + :root { + --ck-sample-base-spacing: 2em; + --ck-sample-color-white: #fff; + --ck-sample-color-green: #279863; + --ck-sample-color-blue: #1a9aef; + --ck-sample-container-width: 1285px; + --ck-sample-sidebar-width: 350px; + --ck-sample-editor-min-height: 400px; +} + +/* --------- EDITOR STYLES ---------------------------------------------------------------------------------------- */ + +.editor__editable, +/* Classic build. */ +main .ck-editor[role='application'] .ck.ck-content, +/* Decoupled document build. */ +.ck.editor__editable[role='textbox'], +.ck.ck-editor__editable[role='textbox'], +/* Inline & Balloon build. */ +.ck.editor[role='textbox'] { + width: 100%; + background: #fff; + font-size: 1em; + line-height: 1.6em; + min-height: var(--ck-sample-editor-min-height); + padding: 1.5em 2em; +} + +.ck.ck-editor__editable { + background: #fff; + border: 1px solid hsl(0, 0%, 70%); + width: 100%; +} + +.ck.ck-editor { + /* To enable toolbar wrapping. */ + width: 100%; + overflow-x: hidden; +} + +/* Because of sidebar `position: relative`, Edge is overriding the outline of a focused editor. */ +.ck.ck-editor__editable { + position: relative; + z-index: 10; +} + +/* --------- DECOUPLED (DOCUMENT) BUILD. ---------------------------------------------*/ +body[data-editor='DecoupledDocumentEditor'] .document-editor__toolbar { + width: 100%; +} + +body[ data-editor='DecoupledDocumentEditor'] .collaboration-demo__editable, +body[ data-editor='DecoupledDocumentEditor'] .row-editor .editor { + width: 18.5cm; + height: 100%; + min-height: 26.25cm; + padding: 1.75cm 1.5cm; + margin: 2.5rem; + border: 1px hsl( 0, 0%, 82.7% ) solid; + background-color: var(--ck-sample-color-white); + box-shadow: 0 0 5px hsla( 0, 0%, 0%, .1 ); +} + +body[ data-editor='DecoupledDocumentEditor'] .row-editor { + display: flex; + position: relative; + justify-content: center; + overflow-y: auto; + background-color: #f2f2f2; + border: 1px solid hsl(0, 0%, 77%); +} + +body[data-editor='DecoupledDocumentEditor'] .sidebar { + background: transparent; + border: 0; + box-shadow: none; +} + +/* --------- COMMENTS & TRACK CHANGES FEATURE ---------------------------------------------------------------------- */ +.sidebar { + padding: 0 15px; + position: relative; + min-width: var(--ck-sample-sidebar-width); + max-width: var(--ck-sample-sidebar-width); + font-size: 20px; + border: 1px solid hsl(0, 0%, 77%); + background: hsl(0, 0%, 98%); + border-left: 0; + overflow: hidden; + min-height: 100%; + flex-grow: 1; +} + +/* Do not inherit styles related to the editable editor content. See line 25.*/ +.sidebar .ck-content[role='textbox'], +.ck.ck-annotation-wrapper .ck-content[role='textbox'] { + min-height: unset; + width: unset; + padding: 0; + background: transparent; +} + +.sidebar.narrow { + min-width: 60px; + flex-grow: 0; +} + +.sidebar.hidden { + display: none !important; +} + +#sidebar-display-toggle { + position: absolute; + z-index: 1; + width: 30px; + height: 30px; + text-align: center; + left: 15px; + top: 30px; + border: 0; + padding: 0; + color: hsl( 0, 0%, 50% ); + transition: 250ms ease color; + background-color: transparent; +} + +#sidebar-display-toggle:hover { + color: hsl( 0, 0%, 30% ); + cursor: pointer; +} + +#sidebar-display-toggle:focus, +#sidebar-display-toggle:active { + outline: none; + border: 1px solid #a9d29d; +} + +#sidebar-display-toggle svg { + fill: currentColor; +} + +/* --------- COLLABORATION FEATURES (USERS) ------------------------------------------------------------------------ */ +.row-presence { + width: 100%; + border: 1px solid hsl(0, 0%, 77%); + border-bottom: 0; + background: hsl(0, 0%, 98%); + padding: var(--ck-spacing-small); + + /* Make `border-bottom` as `box-shadow` to not overlap with the editor border. */ + box-shadow: 0 1px 0 0 hsl(0, 0%, 77%); + + /* Make `z-index` bigger than `.editor` to properly display tooltips. */ + z-index: 20; +} + +.ck.ck-presence-list { + flex: 1; + padding: 1.25rem .75rem; +} + +.presence .ck.ck-presence-list__counter { + order: 2; + margin-left: var(--ck-spacing-large) +} + +/* --------- REAL TIME COLLABORATION FEATURES (SHARE TOPBAR CONTAINER) --------------------------------------------- */ +.collaboration-demo__row { + display: flex; + position: relative; + justify-content: center; + overflow-y: auto; + background-color: #f2f2f2; + border: 1px solid hsl(0, 0%, 77%); +} + +body[ data-editor='InlineEditor'] .collaboration-demo__row { + border: 0; +} + +.collaboration-demo__container { + max-width: var(--ck-sample-container-width); + margin: 0 auto; + padding: 1.25rem; +} + +.presence, .collaboration-demo__row { + transition: .2s opacity; +} + +.collaboration-demo__topbar { + background: #fff; + border: 1px solid var(--ck-color-toolbar-border); + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 0; + border-radius: 4px 4px 0 0; +} + +.collaboration-demo__topbar .btn { + margin-right: 1em; + outline-offset: 2px; + outline-width: 2px; + background-color: var( --ck-sample-color-blue ); +} + +.collaboration-demo__topbar .btn:focus, +.collaboration-demo__topbar .btn:hover { + border-color: var( --ck-sample-color-blue ); +} + +.collaboration-demo__share { + display: flex; + align-items: center; + padding: 1.25rem .75rem +} + +.collaboration-demo__share-description p { + margin: 0; + font-weight: bold; + font-size: 0.9em; +} + +.collaboration-demo__share input { + height: auto; + font-size: 0.9em; + min-width: 220px; + margin: 0 10px; + border-radius: 4px; + border: 1px solid var(--ck-color-toolbar-border) +} + +.collaboration-demo__share button, +.collaboration-demo__share input { + height: 40px; + padding: 5px 10px; +} + +.collaboration-demo__share button { + position: relative; +} + +.collaboration-demo__share button:focus { + outline: none; +} + +.collaboration-demo__share button[data-tooltip]::before, +.collaboration-demo__share button[data-tooltip]::after { + position: absolute; + visibility: hidden; + opacity: 0; + pointer-events: none; + transition: all .15s cubic-bezier(.5,1,.25,1); + z-index: 1; +} + +.collaboration-demo__share button[data-tooltip]::before { + content: attr(data-tooltip); + padding: 5px 15px; + border-radius: 3px; + background: #111; + color: #fff; + text-align: center; + font-size: 11px; + top: 100%; + left: 50%; + margin-top: 5px; + transform: translateX(-50%); +} + +.collaboration-demo__share button[data-tooltip]::after { + content: ''; + border: 5px solid transparent; + width: 0; + font-size: 0; + line-height: 0; + top: 100%; + left: 50%; + transform: translateX(-50%); + border-bottom: 5px solid #111; + border-top: none; +} + +.collaboration-demo__share button[data-tooltip]:hover:before, +.collaboration-demo__share button[data-tooltip]:hover:after { + visibility: visible; + opacity: 1; +} + +.collaboration-demo--ready { + overflow: visible; + height: auto; +} + +.collaboration-demo--ready .presence, +.collaboration-demo--ready .collaboration-demo__row { + opacity: 1; +} + +/* --------- SAMPLE GENERIC STYLES (not related to CKEditor) ------------------------------------------------------- */ +body, html { + padding: 0; + margin: 0; + + font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; + line-height: 1.5; +} + +body { + height: 100%; + color: #2D3A4A; +} + +body * { + box-sizing: border-box; +} + +a { + color: #38A5EE; +} + +header .centered { + display: flex; + flex-flow: row nowrap; + justify-content: space-between; + align-items: center; + min-height: 8em; +} + +header h1 a { + font-size: 20px; + display: flex; + align-items: center; + color: #2D3A4A; + text-decoration: none; +} + +header h1 img { + display: block; + height: 64px; +} + +header nav ul { + margin: 0; + padding: 0; + list-style-type: none; +} + +header nav ul li { + display: inline-block; +} + +header nav ul li + li { + margin-left: 1em; +} + +header nav ul li a { + font-weight: bold; + text-decoration: none; + color: #2D3A4A; +} + +header nav ul li a:hover { + text-decoration: underline; +} + +main .message { + padding: 0 0 var(--ck-sample-base-spacing); + background: var(--ck-sample-color-green); + color: var(--ck-sample-color-white); +} + +main .message::after { + content: ""; + z-index: -1; + display: block; + height: 10em; + width: 100%; + background: var(--ck-sample-color-green); + position: absolute; + left: 0; +} + +main .message h2 { + position: relative; + padding-top: 1em; + font-size: 2em; +} + +.centered { + /* Hide overlapping comments. */ + overflow: hidden; + max-width: var(--ck-sample-container-width); + margin: 0 auto; + padding: 0 var(--ck-sample-base-spacing); +} + +.row { + display: flex; + position: relative; +} + +.btn { + cursor: pointer; + padding: 8px 16px; + font-size: 1rem; + user-select: none; + border-radius: 4px; + transition: color .2s ease-in-out,background-color .2s ease-in-out,border-color .2s ease-in-out,opacity .2s ease-in-out; + background-color: var(--ck-sample-color-button-blue); + border-color: var(--ck-sample-color-button-blue); + color: var(--ck-sample-color-white); + display: inline-block; +} + +.btn--tiny { + padding: 6px 12px; + font-size: .8rem; +} + +footer { + margin: calc(2*var(--ck-sample-base-spacing)) var(--ck-sample-base-spacing); + font-size: .8em; + text-align: center; + color: rgba(0,0,0,.4); +} + +/* --------- RWD --------------------------------------------------------------------------------------------------- */ +@media screen and ( max-width: 800px ) { + :root { + --ck-sample-base-spacing: 1em; + } + + header h1 { + width: 100%; + } + + header h1 img { + height: 40px; + } + + header nav ul { + text-align: right; + } + + main .message h2 { + font-size: 1.5em; + } +} diff --git a/public/js/ckedit5/20.0.0_/translations/af.js b/public/js/ckedit5/20.0.0_/translations/af.js new file mode 100644 index 0000000..566f044 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/af.js @@ -0,0 +1 @@ +(function(d){ const l = d['af'] = d['af'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"Align center":"Belyn in die middel","Align left":"Belyn links","Align right":"Belyn regs","Block quote":"Blok-aanhaling",Bold:"Vetgedruk",Cancel:"Kanselleer",Code:"Kode",Italic:"Skuinsgedruk",Justify:"Belyn beide kante","Remove color":"","Remove Format":"Verwyder formatering",Save:"Berg",Strikethrough:"Deurgetrek","Text alignment":"Teksbelyning","Text alignment toolbar":"",Underline:"Onderstreep"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/ar.js b/public/js/ckedit5/20.0.0_/translations/ar.js new file mode 100644 index 0000000..be4acf1 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/ar.js @@ -0,0 +1 @@ +(function(d){ const l = d['ar'] = d['ar'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"محاذاة في المنتصف","Align left":"محاذاة لليسار","Align right":"محاذاة لليمين","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Big:"كبير",Black:"","Block quote":"اقتباس",Blue:"","Blue marker":"تحديد ازرق",Bold:"عريض",Border:"","Bulleted List":"قائمة نقطية",Cancel:"إلغاء","Cell properties":"","Center table":"","Centered image":"صورة بالوسط","Change image text alternative":"غير النص البديل للصورة","Choose heading":"اختر عنوان",Code:"شفرة برمجية",Color:"","Color picker":"",Column:"عمود",Dashed:"",Default:"افتراضي","Delete column":"حذف العمود","Delete row":"حذف الصف","Dim grey":"",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"تحرير الرابط","Editor toolbar":"","Enter image caption":"ادخل عنوان الصورة","Font Background Color":"","Font Color":"","Font Family":"نوع الخط","Font Size":"حجم الخط","Full size image":"صورة بحجم كامل",Green:"","Green marker":"تحديد اخضر","Green pen":"قلم اخضر",Grey:"",Groove:"","Header column":"عمود عنوان","Header row":"صف عنوان",Heading:"عنوان","Heading 1":"عنوان 1","Heading 2":"عنوان 2","Heading 3":"عنوان 3","Heading 4":"","Heading 5":"","Heading 6":"",Height:"",Highlight:"تحديد","Horizontal text alignment toolbar":"",Huge:"ضخم","Image toolbar":"","image widget":"عنصر الصورة","Insert column left":"","Insert column right":"","Insert image":"ادراج صورة","Insert row above":"ادراج صف قبل","Insert row below":"ادراج صف بعد","Insert table":"إدراج جدول",Inset:"",Italic:"مائل",Justify:"ضبط","Justify cell text":"","Left aligned image":"صورة بمحاذاة لليسار","Light blue":"","Light green":"","Light grey":"",Link:"رابط","Link URL":"رابط عنوان","Merge cell down":"دمج الخلايا للأسفل","Merge cell left":"دمج الخلايا لليسار","Merge cell right":"دمج الخلايا لليمين","Merge cell up":"دمج الخلايا للأعلى","Merge cells":"دمج الخلايا",Next:"",None:"","Numbered List":"قائمة رقمية","Open in a new tab":"","Open link in new tab":"فتح الرابط في تبويب جديد",Orange:"",Outset:"",Padding:"",Paragraph:"فقرة","Pink marker":"تحديد وردي",Previous:"",Purple:"",Red:"","Red pen":"تحديد احمر",Redo:"إعادة","Remove color":"","Remove highlight":"إزالة التحديد","Rich Text Editor":"معالج نصوص","Rich Text Editor, %0":"معالج نصوص، 0%",Ridge:"","Right aligned image":"صورة بمحاذاة لليمين",Row:"صف",Save:"حفظ","Select column":"","Select row":"","Show more items":"","Side image":"صورة جانبية",Small:"صغير",Solid:"","Split cell horizontally":"فصل الخلايا بشكل افقي","Split cell vertically":"فصل الخلايا بشكل عمودي",Strikethrough:"يتوسطه خط",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"محاذاة النص","Text alignment toolbar":"","Text alternative":"النص البديل","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"لا يحتوي هذا الرابط على عنوان",Tiny:"ضئيل",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"تحته خط",Undo:"تراجع",Unlink:"إلغاء الرابط","Upload failed":"فشل الرفع","Upload in progress":"جاري الرفع","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:"","Yellow marker":"تحديد اصفر"} );l.getPluralForm=function(n){return n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/ast.js b/public/js/ckedit5/20.0.0_/translations/ast.js new file mode 100644 index 0000000..25b48d9 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/ast.js @@ -0,0 +1 @@ +(function(d){ const l = d['ast'] = d['ast'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Bold:"Negrina","Bulleted List":"Llista con viñetes",Cancel:"Encaboxar","Centered image":"","Change image text alternative":"",Code:"","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"","Full size image":"Imaxen a tamañu completu",Green:"",Grey:"","Image toolbar":"","image widget":"complementu d'imaxen","Insert image":"",Italic:"Cursiva","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"Enllazar","Link URL":"URL del enllaz",Next:"","Numbered List":"Llista numberada","Open in a new tab":"","Open link in new tab":"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Refacer","Remove color":"","Rich Text Editor":"Editor de testu arriquecíu","Rich Text Editor, %0":"Editor de testu arriquecíu, %0","Right aligned image":"",Save:"Guardar","Show more items":"","Side image":"Imaxen llateral",Strikethrough:"","Text alternative":"","This link has no URL":"",Turquoise:"",Underline:"",Undo:"Desfacer",Unlink:"Desenllazar","Upload failed":"",White:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/az.js b/public/js/ckedit5/20.0.0_/translations/az.js new file mode 100644 index 0000000..78a07ae --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/az.js @@ -0,0 +1 @@ +(function(d){ const l = d['az'] = d['az'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%1-dən %0","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Mərkəzə düzləndir","Align left":"Soldan düzləndir","Align right":"Sağdan düzləndir","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Akvamarin",Background:"Fon",Big:"Böyük",Black:"Qara","Block quote":"Sitat bloku",Blue:"Mavi","Blue marker":"Mavi marker",Bold:"Yarıqalın",Border:"Sərhəd","Bulleted List":"Markerlənmiş siyahı",Cancel:"İmtina et","Cell properties":"","Center table":"","Centered image":"Mərkəzə düzləndir","Change image text alternative":"Alternativ mətni redaktə et","Choose heading":"Başlıqı seç",Code:"Kod",Color:"Rəng","Color picker":"",Column:"Sütun",Dashed:"","Decrease indent":"Boş yeri kiçilt",Default:"Default","Delete column":"Sütunları sil","Delete row":"Sətirləri sil","Dim grey":"Tünd boz",Dimensions:"Ölçülər","Document colors":"Rənglər",Dotted:"",Double:"",Downloadable:"Yüklənə bilər","Dropdown toolbar":"Açılan paneli","Edit link":"Linki redaktə et","Editor toolbar":"Redaktorun paneli","Enter image caption":"Şəkil başlığı daxil edin","Font Background Color":"Şrift Fonunun Rəngi","Font Color":"Şrift Rəngi","Font Family":"Şrift ailəsi","Font Size":"Şrift ölçüsü","Full size image":"Tam ölçülü şəkili",Green:"Yaşıl","Green marker":"Yaşıl marker","Green pen":"Yaşıl qələm",Grey:"Boz",Groove:"","Header column":"Başlıqlı sütun","Header row":"Başlıqlı sətir",Heading:"Başlıq","Heading 1":"Başlıq 1","Heading 2":"Başlıq 2","Heading 3":"Başlıq 3","Heading 4":"Başlıq 4","Heading 5":"Başlıq 5","Heading 6":"Başlıq 6",Height:"Hündürlük",Highlight:"Vurğulamaq","Horizontal line":"Üfüqi xətt","Horizontal text alignment toolbar":"",Huge:"Nəhəng","Image toolbar":"Şəkil paneli","image widget":"Şəkil vidgetı","Increase indent":"Boş yeri böyüt","Insert code block":"Kod blokunu əlavə et","Insert column left":"Sola sütun əlavə et","Insert column right":"Sağa sütun əlavə et","Insert image":"Şəkili əlavə et","Insert media":"Media əlavə ed","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Aşağıya sətir əlavə et","Insert row below":"Yuxarıya sətir əlavə et","Insert table":"Cədvəli əlavə et",Inset:"",Italic:"Maili",Justify:"Eninə görə","Justify cell text":"","Left aligned image":"Soldan düzləndir","Light blue":"Açıq mavi","Light green":"Açıq yaşıl","Light grey":"Açıq boz",Link:"Əlaqələndir","Link URL":"Linkin URL","Media URL":"Media URL","media widget":"media vidgeti","Merge cell down":"Xanaları aşağı birləşdir","Merge cell left":"Xanaları sola birləşdir","Merge cell right":"Xanaları sağa birləşdir","Merge cell up":"Xanaları yuxarı birləşdir","Merge cells":"Xanaları birləşdir",Next:"Növbəti",None:"","Numbered List":"Nömrələnmiş siyahı","Open in a new tab":"Yeni pəncərədə aç","Open link in new tab":"Linki yeni pəncərədə aç",Orange:"Narıncı",Outset:"",Padding:"","Page break":"Səhifə qırılması",Paragraph:"Abzas","Paste the media URL in the input.":"Media URL-ni xanaya əlavə edin","Pink marker":"Çəhrayı marker","Plain text":"Sadə mətn",Previous:"Əvvəlki",Purple:"Bənövşəyi",Red:"Qırmızı","Red pen":"Qırmızı qələm",Redo:"Təkrar et","Remove color":"Rəngi ləğv et","Remove Format":"Formatı Ləğv Et","Remove highlight":"Vurgulanı sil","Rich Text Editor":"Rich Text Redaktoru","Rich Text Editor, %0":"Rich Text Redaktoru, %0",Ridge:"","Right aligned image":"Sağdan düzləndir",Row:"Sətir",Save:"Yadda saxla","Select column":"","Select row":"","Show more items":"Daha çox əşyanı göstərin","Side image":"Yan şəkil",Small:"Kiçik",Solid:"","Split cell horizontally":"Xanaları üfüqi böl","Split cell vertically":"Xanaları şaquli böl",Strikethrough:"Qaralanmış",Style:"","Table alignment toolbar":"","Table cell text alignment":"Cədvəl hüceyrəsi mətninin uyğunlaşdırılması","Table properties":"Cədvəl xüsusiyyətləri","Table toolbar":"Cədvəl paneli","Text alignment":"Mətn düzləndirməsi","Text alignment toolbar":"Mətnin düzləndirmə paneli","Text alternative":"Alternativ mətn","Text highlight toolbar":"Vurğulamaq paneli","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL boş olmamalıdır.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Bu linkdə URL yoxdur","This media URL is not supported.":"Bu media URL dəstəklənmir.",Tiny:"Miniatür","Tip: Paste the URL into the content to embed faster.":"Məsləhət: Sürətli qoşma üçün URL-i kontentə əlavə edin",Turquoise:"Firuzəyi","Type or paste your content here.":"","Type your title":"Başlığınızı yazın",Underline:"Altdan xətt",Undo:"İmtina et",Unlink:"Linki sil","Upload failed":"Şəkili serverə yüklə","Upload in progress":"Yüklənir","Vertical text alignment toolbar":"",White:"Ağ","Widget toolbar":"Vidgetin paneli",Width:"Eni",Yellow:"Sarı","Yellow marker":"Sarı marker"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/bg.js b/public/js/ckedit5/20.0.0_/translations/bg.js new file mode 100644 index 0000000..edf102b --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/bg.js @@ -0,0 +1 @@ +(function(d){ const l = d['bg'] = d['bg'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"Block quote":"Цитат",Bold:"Удебелен",Cancel:"Отказ","Choose heading":"",Code:"",Heading:"","Heading 1":"","Heading 2":"","Heading 3":"","Heading 4":"","Heading 5":"","Heading 6":"",Italic:"Курсив",Paragraph:"Параграф","Remove color":"",Save:"Запазване",Strikethrough:"","Type or paste your content here.":"","Type your title":"",Underline:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/ca.js b/public/js/ckedit5/20.0.0_/translations/ca.js new file mode 100644 index 0000000..c3f8aea --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/ca.js @@ -0,0 +1 @@ +(function(d){ const l = d['ca'] = d['ca'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"Align center":"Alineació centre","Align left":"Alineació esquerra","Align right":"Alineació dreta",Big:"Gran","Block quote":"Cita de bloc","Blue marker":"Marcador blau",Bold:"Negreta",Cancel:"Cancel·lar","Choose heading":"Escull capçalera",Code:"Codi",Default:"Predeterminada","Document colors":"","Font Background Color":"","Font Color":"","Font Family":"Font","Font Size":"Mida de la font","Green marker":"Marcador verd","Green pen":"Bolígraf verd",Heading:"Capçalera","Heading 1":"Capçalera 1","Heading 2":"Capçalera 2","Heading 3":"Capçalera 3","Heading 4":"","Heading 5":"","Heading 6":"",Highlight:"Destacat",Huge:"Molt gran",Italic:"Cursiva",Justify:"Justificar",Paragraph:"Pàrraf","Pink marker":"Marcador rosa","Red pen":"Marcador vermell","Remove color":"","Remove highlight":"Esborrar destacat",Save:"Desar",Small:"Peita",Strikethrough:"Marcat","Text alignment":"Alineació text","Text alignment toolbar":"","Text highlight toolbar":"",Tiny:"Molt petita","Type or paste your content here.":"","Type your title":"",Underline:"Subrallat","Yellow marker":"Marcador groc"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/cs.js b/public/js/ckedit5/20.0.0_/translations/cs.js new file mode 100644 index 0000000..d9bf0c4 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/cs.js @@ -0,0 +1 @@ +(function(d){ const l = d['cs'] = d['cs'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 z %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Zarovnat na střed","Align left":"Zarovnat vlevo","Align right":"Zarovnat vpravo","Align table to the left":"","Align table to the right":"",Alignment:"Zarovnání",Aquamarine:"Akvamarínová",Background:"Pozadí",Big:"Velké",Black:"Černá","Block quote":"Citace",Blue:"Modrá","Blue marker":"Modrý fix",Bold:"Tučné",Border:"Okraj","Bulleted List":"Odrážky",Cancel:"Zrušit","Cell properties":"Vlastnosti buňky","Center table":"","Centered image":"Obrázek zarovnaný na střed","Change image text alternative":"Změnit alternativní text obrázku","Choose heading":"Zvolte nadpis",Code:"Kódový blok",Color:"Barva","Color picker":"",Column:"Sloupec",Dashed:"","Decrease indent":"Zmenšit odsazení",Default:"Výchozí","Delete column":"Smazat sloupec","Delete row":"Smazat řádek","Dim grey":"Tmavě šedá",Dimensions:"Rozměry","Document colors":"Barvy dokumentu",Dotted:"",Double:"",Downloadable:"Ke stažení","Dropdown toolbar":"Rozbalovací panel nástrojů","Edit link":"Upravit odkaz","Editor toolbar":"Panel nástrojů editoru","Enter image caption":"Zadejte popis obrázku","Font Background Color":"Barva pozadí písma","Font Color":"Barva písma","Font Family":"Typ písma","Font Size":"Velikost písma","Full size image":"Obrázek v plné velikosti",Green:"Zelená","Green marker":"Zelený fix","Green pen":"Zelené pero",Grey:"Šedá",Groove:"","Header column":"Sloupec záhlaví","Header row":"Řádek záhlaví",Heading:"Nadpis","Heading 1":"Nadpis 1","Heading 2":"Nadpis 2","Heading 3":"Nadpis 3","Heading 4":"Nadpis 4","Heading 5":"Nadpis 5","Heading 6":"Nadpis 6",Height:"Výška",Highlight:"Zvýraznění","Horizontal line":"Vodorovná čára","Horizontal text alignment toolbar":"",Huge:"Obrovské","Image toolbar":"Panel nástrojů obrázku","image widget":"ovládací prvek obrázku","Increase indent":"Zvětšit odsazení","Insert code block":"Vložit blok zdrojového kódu","Insert column left":"Vložit sloupec vlevo","Insert column right":"Vložit sloupec vpravo","Insert image":"Vložit obrázek","Insert media":"Vložit média","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Vložit řádek před","Insert row below":"Vložit řádek pod","Insert table":"Vložit tabulku",Inset:"",Italic:"Kurzíva",Justify:"Zarovnat do bloku","Justify cell text":"","Left aligned image":"Obrázek zarovnaný vlevo","Light blue":"Světle modrá","Light green":"Světle zelená","Light grey":"Světle šedá",Link:"Odkaz","Link URL":"URL odkazu","Media URL":"URL adresa","media widget":"ovládací prvek médií","Merge cell down":"Sloučit s buňkou pod","Merge cell left":"Sloučit s buňkou vlevo","Merge cell right":"Sloučit s buňkou vpravo","Merge cell up":"Sloučit s buňkou nad","Merge cells":"Sloučit buňky",Next:"Další",None:"","Numbered List":"Číslování","Open in a new tab":"Otevřít v nové kartě","Open link in new tab":"Otevřít odkaz v nové kartě",Orange:"Oranžová",Outset:"",Padding:"","Page break":"Konec stránky",Paragraph:"Odstavec","Paste the media URL in the input.":"Vložte URL média do vstupního pole.","Pink marker":"Růžový fix","Plain text":"Prostý text",Previous:"Předchozí",Purple:"Fialová",Red:"Červená","Red pen":"Červený fix",Redo:"Znovu","Remove color":"Odstranit barvu","Remove Format":"Odstranit formátování","Remove highlight":"Odstranit zvýraznění","Rich Text Editor":"Textový editor","Rich Text Editor, %0":"Textový editor, %0",Ridge:"","Right aligned image":"Obrázek zarovnaný vpravo",Row:"Řádek",Save:"Uložit","Select all":"Vybrat vše","Select column":"Vybrat sloupec","Select row":"Vybrat řádek","Show more items":"Zobrazit další položky","Side image":"Postranní obrázek",Small:"Malé",Solid:"","Split cell horizontally":"Rozdělit buňky horizontálně","Split cell vertically":"Rozdělit buňky vertikálně",Strikethrough:"Přeškrtnuté",Style:"Styl","Table alignment toolbar":"","Table cell text alignment":"Zarovnání textu buňky tabulky","Table properties":"Vlastnosti tabulky","Table toolbar":"Panel nástrojů tabulky","Text alignment":"Zarovnání textu","Text alignment toolbar":"Panel nástrojů zarovnání textu","Text alternative":"Alternativní text","Text highlight toolbar":"Panel nástrojů zvýraznění textu","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL adresa musí být vyplněna.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Tento odkaz nemá žádnou URL","This media URL is not supported.":"Tato adresa bohužel není podporována.",Tiny:"Drobné","Tip: Paste the URL into the content to embed faster.":"Rada: Vložte URL přímo do editoru pro rychlejší vnoření.",Turquoise:"Tyrkysová","Type or paste your content here.":"Zde zadejte nebo vložte obsah.","Type your title":"Sem zadejte název",Underline:"Podtržené",Undo:"Zpět",Unlink:"Odstranit odkaz","Upload failed":"Nahrání selhalo","Upload in progress":"Probíhá nahrávání","Vertical text alignment toolbar":"",White:"Bílá","Widget toolbar":"Panel nástrojů ovládacího prvku",Width:"Šířka",Yellow:"Žlutá","Yellow marker":"Žlutý fix"} );l.getPluralForm=function(n){return (n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/da.js b/public/js/ckedit5/20.0.0_/translations/da.js new file mode 100644 index 0000000..ec49b0f --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/da.js @@ -0,0 +1 @@ +(function(d){ const l = d['da'] = d['da'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 af %1","Align cell text to the bottom":"Justér tekstcelle til bunden","Align cell text to the center":"Justér tekstcelle centreret","Align cell text to the left":"Justér tekstcelle til venstre","Align cell text to the middle":"Justér tekstcelle til midten","Align cell text to the right":"Justér tekstcelle til højre","Align cell text to the top":"Justér tekstcelle til top","Align center":"Justér center","Align left":"Justér venstre","Align right":"Justér højre","Align table to the left":"Justér tabel til venstre","Align table to the right":"Justér tabel til højre",Alignment:"Justering",Aquamarine:"Marineblå",Background:"Baggrund",Big:"Stor",Black:"Sort","Block quote":"Blot citat",Blue:"Blå","Blue marker":"Blå markør",Bold:"Fed",Border:"Ramme","Bulleted List":"Punktopstilling",Cancel:"Annullér","Cell properties":"Celleegenskaber","Center table":"Centrér tabel","Centered image":"Centreret billede","Change image text alternative":"Skift alternativ billedtekst","Choose heading":"Vælg overskrift",Code:"Kode",Color:"Farve","Color picker":"",Column:"Kolonne",Dashed:"Stiplet (streg)","Decrease indent":"Formindsk indrykning",Default:"Standard","Delete column":"Slet kolonne","Delete row":"Slet række","Dim grey":"Dunkel grå",Dimensions:"Dimensioner","Document colors":"Dokumentfarve",Dotted:"Stiplet (prik)",Double:"Dobbel",Downloadable:"Kan downloades","Dropdown toolbar":"Dropdown værktøjslinje","Edit link":"Redigér link","Editor toolbar":"Editor værktøjslinje","Enter image caption":"Indtast billedoverskrift","Font Background Color":"Skrift baggrundsfarve","Font Color":"Skriftfarve","Font Family":"Skriftfamilie","Font Size":"Skriftstørrelse","Full size image":"Fuld billedstørrelse",Green:"Grøn","Green marker":"Grøn markør","Green pen":"Grøn pen",Grey:"Grå",Groove:"Not","Header column":"Headerkolonne","Header row":"Headerrække",Heading:"Overskrift","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"Overskrift 4","Heading 5":"Overskrift 5","Heading 6":"Overskrift 6",Height:"Højde",Highlight:"Fremhæv","Horizontal line":"Horisontal linje","Horizontal text alignment toolbar":"Horisontal tekstjustering værktøjslinje",Huge:"Kæmpe","Image toolbar":"Billedværktøjslinje","image widget":"billed widget","Increase indent":"Forøg indrykning","Insert code block":"Indsæt kodeblok","Insert column left":"Indsæt kolonne venstre","Insert column right":"Indsæt kolonne højre","Insert image":"Indsæt billede","Insert media":"Indsæt medie","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Indsæt header over","Insert row below":"Indsæt header under","Insert table":"Indsæt tabel",Inset:"Forsænket",Italic:"Kursiv",Justify:"Justér","Justify cell text":"Justér tekstcelle","Left aligned image":"Venstrestillet billede","Light blue":"Lys blå","Light green":"Lys grøn","Light grey":"Lys grå",Link:"Link","Link URL":"Link URL","Media URL":"Medie URL","media widget":"mediewidget","Merge cell down":"Flet celler ned","Merge cell left":"Flet celler venstre","Merge cell right":"Flet celler højre","Merge cell up":"Flet celler op","Merge cells":"Flet celler",Next:"Næste",None:"Ingen","Numbered List":"Opstilling med tal","Open in a new tab":"Åben i ny fane","Open link in new tab":"Åben link i ny fane",Orange:"Orange",Outset:"Fra starten",Padding:"Fyld","Page break":"Sideskift",Paragraph:"Afsnit","Paste the media URL in the input.":"Indsæt medie URLen i feltet.","Pink marker":"Lyserød markør","Plain text":"Plain tekst",Previous:"Forrige",Purple:"Lilla",Red:"Rød","Red pen":"Rød pen",Redo:"Gentag","Remove color":"Fjern farve","Remove Format":"Fjern format","Remove highlight":"Fjern fremhævning","Rich Text Editor":"Wysiwyg editor","Rich Text Editor, %0":"Wysiwyg editor, %0",Ridge:"Kam","Right aligned image":"Højrestillet billede",Row:"Række",Save:"Gem","Select column":"","Select row":"","Show more items":"Vis flere emner","Side image":"Sidebillede",Small:"Lille",Solid:"Massiv","Split cell horizontally":"Del celle horisontalt","Split cell vertically":"Del celle vertikalt",Strikethrough:"Gennemstreg",Style:"Stil","Table alignment toolbar":"Tabeljustering værktøjslinje","Table cell text alignment":"Tabelcelle tekstjustering","Table properties":"Tabelegenskaber","Table toolbar":"Tabel værktøjslinje","Text alignment":"Tekstjustering","Text alignment toolbar":"Tekstjustering værktøjslinje","Text alternative":"Alternativ tekst","Text highlight toolbar":"Tekstfremhævning værktøjslinje","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Farven er ugyldig. Prøv \"#FF0000\" eller \"rgb(255,0,0)\" eller \"red\".","The URL must not be empty.":"URLen kan ikke være tom.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Værdien er ugyldig. Prøv \"10px\" eller \"2em\" eller ganske enkelt \"2\".","This link has no URL":"Dette link har ingen URL","This media URL is not supported.":"Denne medie URL understøttes ikke.",Tiny:"Lillebitte","Tip: Paste the URL into the content to embed faster.":"Tip: Indsæt URLen i indholdet for at indlejre hurtigere.",Turquoise:"Turkis","Type or paste your content here.":"Skriv eller indsæt dit indhold her.","Type your title":"Skriv din titel",Underline:"Understreget",Undo:"Fortryd",Unlink:"Fjern link","Upload failed":"Upload fejlede","Upload in progress":"Upload i gang","Vertical text alignment toolbar":"Vertikal tekstjustering værktøjslinje",White:"Hvid","Widget toolbar":"Widget værktøjslinje",Width:"Bredde",Yellow:"Gyl","Yellow marker":"Gul markør"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/de-ch.js b/public/js/ckedit5/20.0.0_/translations/de-ch.js new file mode 100644 index 0000000..f4371e9 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/de-ch.js @@ -0,0 +1 @@ +(function(d){ const l = d['de-ch'] = d['de-ch'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Black:"","Block quote":"Blockzitat",Blue:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Spalte",Dashed:"","Delete column":"Spalte löschen","Delete row":"Zeile löschen","Dim grey":"",Dimensions:"",Dotted:"",Double:"","Dropdown toolbar":"","Editor toolbar":"",Green:"",Grey:"",Groove:"","Header column":"Kopfspalte","Header row":"Kopfspalte",Height:"","Horizontal text alignment toolbar":"","Insert column left":"","Insert column right":"","Insert row above":"Zeile oben einfügen","Insert row below":"Zeile unten einfügen","Insert table":"Tabelle einfügen",Inset:"","Justify cell text":"","Light blue":"","Light green":"","Light grey":"","Merge cell down":"Zelle unten verbinden","Merge cell left":"Zelle links verbinden","Merge cell right":"Zele rechts verbinden","Merge cell up":"Zelle oben verbinden","Merge cells":"Zellen verbinden",Next:"",None:"",Orange:"",Outset:"",Padding:"",Previous:"",Purple:"",Red:"",Redo:"Wiederherstellen","Rich Text Editor":"Rich-Text-Edito","Rich Text Editor, %0":"Rich-Text-Editor, %0",Ridge:"",Row:"Zeile","Select column":"","Select row":"","Show more items":"",Solid:"","Split cell horizontally":"Zelle horizontal teilen","Split cell vertically":"Zelle vertikal teilen",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"",Turquoise:"",Undo:"Rückgängig","Upload in progress":"Upload läuft","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/el.js b/public/js/ckedit5/20.0.0_/translations/el.js new file mode 100644 index 0000000..357f431 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/el.js @@ -0,0 +1 @@ +(function(d){ const l = d['el'] = d['el'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"Περιοχή παράθεσης",Blue:"",Bold:"Έντονη","Bulleted List":"Λίστα κουκκίδων",Cancel:"Ακύρωση","Centered image":"","Change image text alternative":"Αλλαγή εναλλακτικού κείμενου","Choose heading":"Επιλέξτε κεφαλίδα",Code:"","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"Λεζάντα","Full size image":"Εικόνα πλήρης μεγέθους",Green:"",Grey:"",Heading:"Κεφαλίδα","Heading 1":"Κεφαλίδα 1","Heading 2":"Κεφαλίδα 2","Heading 3":"Κεφαλίδα 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"","Insert image":"Εισαγωγή εικόνας",Italic:"Πλάγια","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"Σύνδεσμος","Link URL":"Διεύθυνση συνδέσμου",Next:"","Numbered List":"Αριθμημένη λίστα","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"Παράγραφος",Previous:"",Purple:"",Red:"",Redo:"Επανάληψη","Remove color":"","Rich Text Editor":"Επεξεργαστής Πλούσιου Κειμένου","Rich Text Editor, %0":"Επεξεργαστής Πλούσιου Κειμένου, 0%","Right aligned image":"",Save:"Αποθήκευση","Show more items":"","Side image":"",Strikethrough:"","Text alternative":"Εναλλακτικό κείμενο","This link has no URL":"",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"",Undo:"Αναίρεση",Unlink:"Αφαίρεση συνδέσμου","Upload failed":"",White:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/en-au.js b/public/js/ckedit5/20.0.0_/translations/en-au.js new file mode 100644 index 0000000..cffa61c --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/en-au.js @@ -0,0 +1 @@ +(function(d){ const l = d['en-au'] = d['en-au'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 of %1","Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align center":"Align centre","Align left":"Align left","Align right":"Align right","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment","Almost equal to":"Almost equal to",Angle:"Angle","Approximately equal to":"Approximately equal to",Aquamarine:"Aquamarine","Asterisk operator":"Asterisk operator","Austral sign":"Austral sign","back with leftwards arrow above":"back with leftwards arrow above",Background:"Background",Big:"Big","Bitcoin sign":"Bitcoin sign",Black:"Black","Block quote":"Block quote",Blue:"Blue","Blue marker":"Blue marker",Bold:"Bold",Border:"Border","Bulleted List":"Bulleted List",Cancel:"Cancel","Cedi sign":"Cedi sign","Cell properties":"Cell properties","Cent sign":"Cent sign","Center table":"Centre table","Centered image":"Centred image","Change image text alternative":"Change image text alternative","Character categories":"Character categories","Choose heading":"Choose heading",Code:"Code","Colon sign":"Colon sign",Color:"Colour","Color picker":"Colour picker",Column:"Column","Contains as member":"Contains as member","Copyright sign":"Copyright sign","Cruzeiro sign":"Cruzeiro sign","Currency sign":"Currency sign",Dashed:"Dashed","Decrease indent":"Decrease indent",Default:"Default","Degree sign":"Degree sign","Delete column":"Delete column","Delete row":"Delete row","Dim grey":"Dim grey",Dimensions:"Dimensions","Division sign":"Division sign","Document colors":"Document colours","Dollar sign":"Dollar sign","Dong sign":"Dong sign",Dotted:"Dotted",Double:"Double","Double dagger":"Double dagger","Double exclamation mark":"Double exclamation mark","Double low-9 quotation mark":"Double low-9 quotation mark","Double question mark":"Double question mark",Downloadable:"Downloadable","downwards arrow to bar":"downwards arrow to bar","downwards dashed arrow":"downwards dashed arrow","downwards double arrow":"downwards double arrow","Drachma sign":"Drachma sign","Dropdown toolbar":"Dropdown toolbar","Edit link":"Edit link","Editor toolbar":"Editor toolbar","Element of":"Element of","Em dash":"Em dash","Empty set":"Empty set","En dash":"En dash","end with leftwards arrow above":"end with leftwards arrow above","Enter image caption":"Enter image caption","Euro sign":"Euro sign","Euro-currency sign":"Euro-currency sign","Exclamation question mark":"Exclamation question mark","Font Background Color":"Font Background Colour","Font Color":"Font Colour","Font Family":"Font Family","Font Size":"Font Size","For all":"For all","Fraction slash":"Fraction slash","French franc sign":"French franc sign","Full size image":"Full size image","German penny sign":"German penny sign","Greater-than or equal to":"Greater-than or equal to","Greater-than sign":"Greater-than sign",Green:"Green","Green marker":"Green marker","Green pen":"Green pen",Grey:"Grey",Groove:"Groove","Guarani sign":"Guarani sign","Header column":"Header column","Header row":"Header row",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Height:"Height",Highlight:"Highlight","Horizontal ellipsis":"Horizontal ellipsis","Horizontal line":"Horizontal line","Horizontal text alignment toolbar":"Horizontal text alignment toolbar","Hryvnia sign":"Hryvnia sign",Huge:"Huge","Identical to":"Identical to","Image toolbar":"Image toolbar","image widget":"image widget","Increase indent":"Increase indent","Indian rupee sign":"Indian rupee sign",Infinity:"Infinity","Insert code block":"Insert code block","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert image":"Insert image","Insert media":"Insert media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table",Inset:"Inset",Integral:"Integral",Intersection:"Intersection","Inverted exclamation mark":"Inverted exclamation mark","Inverted question mark":"Inverted question mark",Italic:"Italic",Justify:"Justify","Justify cell text":"Justify cell text","Kip sign":"Kip sign","Latin capital letter a with breve":"Latin capital letter a with breve","Latin capital letter a with macron":"Latin capital letter a with macron","Latin capital letter a with ogonek":"Latin capital letter a with ogonek","Latin capital letter c with acute":"Latin capital letter c with acute","Latin capital letter c with caron":"Latin capital letter c with caron","Latin capital letter c with circumflex":"Latin capital letter c with circumflex","Latin capital letter c with dot above":"Latin capital letter c with dot above","Latin capital letter d with caron":"Latin capital letter d with caron","Latin capital letter d with stroke":"Latin capital letter d with stroke","Latin capital letter e with breve":"Latin capital letter e with breve","Latin capital letter e with caron":"Latin capital letter e with caron","Latin capital letter e with dot above":"Latin capital letter e with dot above","Latin capital letter e with macron":"Latin capital letter e with macron","Latin capital letter e with ogonek":"Latin capital letter e with ogonek","Latin capital letter eng":"Latin capital letter eng","Latin capital letter g with breve":"Latin capital letter g with breve","Latin capital letter g with cedilla":"Latin capital letter g with cedilla","Latin capital letter g with circumflex":"Latin capital letter g with circumflex","Latin capital letter g with dot above":"Latin capital letter g with dot above","Latin capital letter h with circumflex":"Latin capital letter h with circumflex","Latin capital letter h with stroke":"Latin capital letter h with stroke","Latin capital letter i with breve":"Latin capital letter i with breve","Latin capital letter i with dot above":"Latin capital letter i with dot above","Latin capital letter i with macron":"Latin capital letter i with macron","Latin capital letter i with ogonek":"Latin capital letter i with ogonek","Latin capital letter i with tilde":"Latin capital letter i with tilde","Latin capital letter j with circumflex":"Latin capital letter j with circumflex","Latin capital letter k with cedilla":"Latin capital letter k with cedilla","Latin capital letter l with acute":"Latin capital letter l with acute","Latin capital letter l with caron":"Latin capital letter l with caron","Latin capital letter l with cedilla":"Latin capital letter l with cedilla","Latin capital letter l with middle dot":"Latin capital letter l with middle dot","Latin capital letter l with stroke":"Latin capital letter l with stroke","Latin capital letter n with acute":"Latin capital letter n with acute","Latin capital letter n with caron":"Latin capital letter n with caron","Latin capital letter n with cedilla":"Latin capital letter n with cedilla","Latin capital letter o with breve":"Latin capital letter o with breve","Latin capital letter o with double acute":"Latin capital letter o with double acute","Latin capital letter o with macron":"Latin capital letter o with macron","Latin capital letter r with acute":"Latin capital letter r with acute","Latin capital letter r with caron":"Latin capital letter r with caron","Latin capital letter r with cedilla":"Latin capital letter r with cedilla","Latin capital letter s with acute":"Latin capital letter s with acute","Latin capital letter s with caron":"Latin capital letter s with caron","Latin capital letter s with cedilla":"Latin capital letter s with cedilla","Latin capital letter s with circumflex":"Latin capital letter s with circumflex","Latin capital letter t with caron":"Latin capital letter t with caron","Latin capital letter t with cedilla":"Latin capital letter t with cedilla","Latin capital letter t with stroke":"Latin capital letter t with stroke","Latin capital letter u with breve":"Latin capital letter u with breve","Latin capital letter u with double acute":"Latin capital letter u with double acute","Latin capital letter u with macron":"Latin capital letter u with macron","Latin capital letter u with ogonek":"Latin capital letter u with ogonek","Latin capital letter u with ring above":"Latin capital letter u with ring above","Latin capital letter u with tilde":"Latin capital letter u with tilde","Latin capital letter w with circumflex":"Latin capital letter w with circumflex","Latin capital letter y with circumflex":"Latin capital letter y with circumflex","Latin capital letter y with diaeresis":"Latin capital letter y with diaeresis","Latin capital letter z with acute":"Latin capital letter z with acute","Latin capital letter z with caron":"Latin capital letter z with caron","Latin capital letter z with dot above":"Latin capital letter z with dot above","Latin capital ligature ij":"Latin capital ligature ij","Latin capital ligature oe":"Latin capital ligature oe","Latin small letter a with breve":"Latin small letter a with breve","Latin small letter a with macron":"Latin small letter a with macron","Latin small letter a with ogonek":"Latin small letter a with ogonek","Latin small letter c with acute":"Latin small letter c with acute","Latin small letter c with caron":"Latin small letter c with caron","Latin small letter c with circumflex":"Latin small letter c with circumflex","Latin small letter c with dot above":"Latin small letter c with dot above","Latin small letter d with caron":"Latin small letter d with caron","Latin small letter d with stroke":"Latin small letter d with stroke","Latin small letter dotless i":"Latin small letter dotless i","Latin small letter e with breve":"Latin small letter e with breve","Latin small letter e with caron":"Latin small letter e with caron","Latin small letter e with dot above":"Latin small letter e with dot above","Latin small letter e with macron":"Latin small letter e with macron","Latin small letter e with ogonek":"Latin small letter e with ogonek","Latin small letter eng":"Latin small letter eng","Latin small letter f with hook":"Latin small letter f with hook","Latin small letter g with breve":"Latin small letter g with breve","Latin small letter g with cedilla":"Latin small letter g with cedilla","Latin small letter g with circumflex":"Latin small letter g with circumflex","Latin small letter g with dot above":"Latin small letter g with dot above","Latin small letter h with circumflex":"Latin small letter h with circumflex","Latin small letter h with stroke":"Latin small letter h with stroke","Latin small letter i with breve":"Latin small letter i with breve","Latin small letter i with macron":"Latin small letter i with macron","Latin small letter i with ogonek":"Latin small letter i with ogonek","Latin small letter i with tilde":"Latin small letter i with tilde","Latin small letter j with circumflex":"Latin small letter j with circumflex","Latin small letter k with cedilla":"Latin small letter k with cedilla","Latin small letter kra":"Latin small letter kra","Latin small letter l with acute":"Latin small letter l with acute","Latin small letter l with caron":"Latin small letter l with caron","Latin small letter l with cedilla":"Latin small letter l with cedilla","Latin small letter l with middle dot":"Latin small letter l with middle dot","Latin small letter l with stroke":"Latin small letter l with stroke","Latin small letter long s":"Latin small letter long s","Latin small letter n preceded by apostrophe":"Latin small letter n preceded by apostrophe","Latin small letter n with acute":"Latin small letter n with acute","Latin small letter n with caron":"Latin small letter n with caron","Latin small letter n with cedilla":"Latin small letter n with cedilla","Latin small letter o with breve":"Latin small letter o with breve","Latin small letter o with double acute":"Latin small letter o with double acute","Latin small letter o with macron":"Latin small letter o with macron","Latin small letter r with acute":"Latin small letter r with acute","Latin small letter r with caron":"Latin small letter r with caron","Latin small letter r with cedilla":"Latin small letter r with cedilla","Latin small letter s with acute":"Latin small letter s with acute","Latin small letter s with caron":"Latin small letter s with caron","Latin small letter s with cedilla":"Latin small letter s with cedilla","Latin small letter s with circumflex":"Latin small letter s with circumflex","Latin small letter t with caron":"Latin small letter t with caron","Latin small letter t with cedilla":"Latin small letter t with cedilla","Latin small letter t with stroke":"Latin small letter t with stroke","Latin small letter u with breve":"Latin small letter u with breve","Latin small letter u with double acute":"Latin small letter u with double acute","Latin small letter u with macron":"Latin small letter u with macron","Latin small letter u with ogonek":"Latin small letter u with ogonek","Latin small letter u with ring above":"Latin small letter u with ring above","Latin small letter u with tilde":"Latin small letter u with tilde","Latin small letter w with circumflex":"Latin small letter w with circumflex","Latin small letter y with circumflex":"Latin small letter y with circumflex","Latin small letter z with acute":"Latin small letter z with acute","Latin small letter z with caron":"Latin small letter z with caron","Latin small letter z with dot above":"Latin small letter z with dot above","Latin small ligature ij":"Latin small ligature ij","Latin small ligature oe":"Latin small ligature oe","Left aligned image":"Left aligned image","Left double quotation mark":"Left double quotation mark","Left single quotation mark":"Left single quotation mark","Left-pointing double angle quotation mark":"Left-pointing double angle quotation mark","leftwards arrow to bar":"leftwards arrow to bar","leftwards dashed arrow":"leftwards dashed arrow","leftwards double arrow":"leftwards double arrow","Less-than or equal to":"Less-than or equal to","Less-than sign":"Less-than sign","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Link:"Link","Link URL":"Link URL","Lira sign":"Lira sign","Livre tournois sign":"Livre tournois sign","Logical and":"Logical and","Logical or":"Logical or",Macron:"Macron","Manat sign":"Manat sign","Media URL":"Media URL","media widget":"media widget","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells","Mill sign":"Mill sign","Minus sign":"Minus sign","Multiplication sign":"Multiplication sign","N-ary product":"N-ary product","N-ary summation":"N-ary summation",Nabla:"Nabla","Naira sign":"Naira sign","New sheqel sign":"New sheqel sign",Next:"Next",None:"None","Nordic mark sign":"Nordic mark sign","Not an element of":"Not an element of","Not equal to":"Not equal to","Not sign":"Not sign","Numbered List":"Numbered List","on with exclamation mark with left right arrow above":"on with exclamation mark with left right arrow above","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab",Orange:"Orange",Outset:"Outset",Overline:"Overline",Padding:"Padding","Page break":"Page break",Paragraph:"Paragraph","Paragraph sign":"Paragraph sign","Partial differential":"Partial differential","Paste the media URL in the input.":"Paste the media URL in the input.","Per mille sign":"Per mille sign","Per ten thousand sign":"Per ten thousand sign","Peseta sign":"Peseta sign","Peso sign":"Peso sign","Pink marker":"Pink marker","Plain text":"Plain text","Plus-minus sign":"Plus-minus sign","Pound sign":"Pound sign",Previous:"Previous","Proportional to":"Proportional to",Purple:"Purple","Question exclamation mark":"Question exclamation mark",Red:"Red","Red pen":"Red pen",Redo:"Redo","Registered sign":"Registered sign","Remove color":"Remove colour","Remove Format":"Remove Format","Remove highlight":"Remove highlight","Reversed paragraph sign":"Reversed paragraph sign","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Ridge:"Ridge","Right aligned image":"Right aligned image","Right double quotation mark":"Right double quotation mark","Right single quotation mark":"Right single quotation mark","Right-pointing double angle quotation mark":"Right-pointing double angle quotation mark","rightwards arrow to bar":"rightwards arrow to bar","rightwards dashed arrow":"rightwards dashed arrow","rightwards double arrow":"rightwards double arrow",Row:"Row","Ruble sign":"Ruble sign","Rupee sign":"Rupee sign",Save:"Save","Section sign":"Section sign","Select all":"Select all","Select column":"Select column","Select row":"Select row","Show more items":"Show more items","Side image":"Side image","Single left-pointing angle quotation mark":"Single left-pointing angle quotation mark","Single low-9 quotation mark":"Single low-9 quotation mark","Single right-pointing angle quotation mark":"Single right-pointing angle quotation mark",Small:"Small",Solid:"Solid","soon with rightwards arrow above":"soon with rightwards arrow above","Special characters":"Special characters","Spesmilo sign":"Spesmilo sign","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically","Square root":"Square root",Strikethrough:"Strikethrough",Style:"Style","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar","Tenge sign":"Tenge sign","Text alignment":"Text alignment","Text alignment toolbar":"Text alignment toolbar","Text alternative":"Text alternative","Text highlight toolbar":"Text highlight toolbar","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"The colour is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".","The URL must not be empty.":"The URL must not be empty.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".","There exists":"There exists","This link has no URL":"This link has no URL","This media URL is not supported.":"This media URL is not supported.","Tilde operator":"Tilde operator",Tiny:"Tiny","Tip: Paste the URL into the content to embed faster.":"Tip: Paste the URL into the content to embed faster.","top with upwards arrow above":"top with upwards arrow above","Trade mark sign":"Trade mark sign","Tugrik sign":"Tugrik sign","Turkish lira sign":"Turkish lira sign",Turquoise:"Turquoise","Two dot leader":"Two dot leader","Type or paste your content here.":"Type or paste your content here.","Type your title":"Type your title",Underline:"Underline",Undo:"Undo",Union:"Union",Unlink:"Unlink","up down arrow with base":"up down arrow with base","Upload failed":"Upload failed","Upload in progress":"Upload in progress","upwards arrow to bar":"upwards arrow to bar","upwards dashed arrow":"upwards dashed arrow","upwards double arrow":"upwards double arrow","Vertical text alignment toolbar":"Vertical text alignment toolbar","Vulgar fraction one half":"Vulgar fraction one half","Vulgar fraction one quarter":"Vulgar fraction one quarter","Vulgar fraction three quarters":"Vulgar fraction three quarters",White:"White","Widget toolbar":"Widget toolbar",Width:"Width","Won sign":"Won sign",Yellow:"Yellow","Yellow marker":"Yellow marker","Yen sign":"Yen sign"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/en-gb.js b/public/js/ckedit5/20.0.0_/translations/en-gb.js new file mode 100644 index 0000000..edbe865 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/en-gb.js @@ -0,0 +1 @@ +(function(d){ const l = d['en-gb'] = d['en-gb'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 of %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Align center","Align left":"Align left","Align right":"Align right","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Aquamarine",Background:"",Big:"Big",Black:"Black","Block quote":"Block quote",Blue:"Blue","Blue marker":"Blue marker",Bold:"Bold",Border:"","Bulleted List":"Bulleted List",Cancel:"Cancel","Cell properties":"","Center table":"","Centered image":"Centred image","Change image text alternative":"Change image text alternative","Choose heading":"Choose heading",Code:"Code",Color:"","Color picker":"",Column:"Column",Dashed:"","Decrease indent":"Decrease indent",Default:"Default","Delete column":"Delete column","Delete row":"Delete row","Dim grey":"Dim grey",Dimensions:"","Document colors":"Document colours",Dotted:"",Double:"",Downloadable:"Downloadable","Dropdown toolbar":"","Edit link":"Edit link","Editor toolbar":"","Enter image caption":"Enter image caption","Font Background Color":"Font Background Colour","Font Color":"Font Colour","Font Family":"Font Family","Font Size":"Font Size","Full size image":"Full size image",Green:"Green","Green marker":"Green marker","Green pen":"Green pen",Grey:"Grey",Groove:"","Header column":"Header column","Header row":"Header row",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Height:"",Highlight:"Highlight","Horizontal text alignment toolbar":"",Huge:"Huge","Image toolbar":"","image widget":"Image widget","Increase indent":"Increase indent","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert image":"Insert image","Insert media":"Insert media","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table",Inset:"",Italic:"Italic",Justify:"Justify","Justify cell text":"","Left aligned image":"Left aligned image","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Link:"Link","Link URL":"Link URL","Media URL":"Media URL","media widget":"Media widget","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells",Next:"Next",None:"","Numbered List":"Numbered List","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab",Orange:"Orange",Outset:"",Padding:"",Paragraph:"Paragraph","Paste the media URL in the input.":"Paste the media URL in the input.","Pink marker":"Pink marker",Previous:"Previous",Purple:"Purple",Red:"Red","Red pen":"Red pen",Redo:"Redo","Remove color":"Remove colour","Remove Format":"Remove Format","Remove highlight":"Remove highlight","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Ridge:"","Right aligned image":"Right aligned image",Row:"Row",Save:"Save","Select column":"","Select row":"","Show more items":"","Side image":"Side image",Small:"Small",Solid:"","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Strikethrough:"Strikethrough",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Text alignment","Text alignment toolbar":"","Text alternative":"Text alternative","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"The URL must not be empty.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"This link has no URL","This media URL is not supported.":"This media URL is not supported.",Tiny:"Tiny","Tip: Paste the URL into the content to embed faster.":"Tip: Paste the URL into the content to embed faster.",Turquoise:"Turquoise","Type or paste your content here.":"","Type your title":"",Underline:"Underline",Undo:"Undo",Unlink:"Unlink","Upload failed":"Upload failed","Upload in progress":"Upload in progress","Vertical text alignment toolbar":"",White:"White",Width:"",Yellow:"Yellow","Yellow marker":"Yellow marker"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/en.js b/public/js/ckedit5/20.0.0_/translations/en.js new file mode 100644 index 0000000..f8f2781 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/en.js @@ -0,0 +1 @@ +(function(d){ const l = d['en'] = d['en'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 of %1","Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align center":"Align center","Align left":"Align left","Align right":"Align right","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment","Almost equal to":"Almost equal to",Angle:"Angle","Approximately equal to":"Approximately equal to",Aquamarine:"Aquamarine","Asterisk operator":"Asterisk operator","Austral sign":"Austral sign","back with leftwards arrow above":"back with leftwards arrow above",Background:"Background",Big:"Big","Bitcoin sign":"Bitcoin sign",Black:"Black","Block quote":"Block quote",Blue:"Blue","Blue marker":"Blue marker",Bold:"Bold",Border:"Border","Bulleted List":"Bulleted List",Cancel:"Cancel","Cedi sign":"Cedi sign","Cell properties":"Cell properties","Cent sign":"Cent sign","Center table":"Center table","Centered image":"Centered image","Change image text alternative":"Change image text alternative","Character categories":"Character categories","Choose heading":"Choose heading",Code:"Code","Colon sign":"Colon sign",Color:"Color","Color picker":"Color picker",Column:"Column","Contains as member":"Contains as member","Copyright sign":"Copyright sign","Cruzeiro sign":"Cruzeiro sign","Currency sign":"Currency sign",Dashed:"Dashed","Decrease indent":"Decrease indent",Default:"Default","Degree sign":"Degree sign","Delete column":"Delete column","Delete row":"Delete row","Dim grey":"Dim grey",Dimensions:"Dimensions","Division sign":"Division sign","Document colors":"Document colors","Dollar sign":"Dollar sign","Dong sign":"Dong sign",Dotted:"Dotted",Double:"Double","Double dagger":"Double dagger","Double exclamation mark":"Double exclamation mark","Double low-9 quotation mark":"Double low-9 quotation mark","Double question mark":"Double question mark",Downloadable:"Downloadable","downwards arrow to bar":"downwards arrow to bar","downwards dashed arrow":"downwards dashed arrow","downwards double arrow":"downwards double arrow","Drachma sign":"Drachma sign","Dropdown toolbar":"Dropdown toolbar","Edit link":"Edit link","Editor toolbar":"Editor toolbar","Element of":"Element of","Em dash":"Em dash","Empty set":"Empty set","En dash":"En dash","end with leftwards arrow above":"end with leftwards arrow above","Enter image caption":"Enter image caption","Euro sign":"Euro sign","Euro-currency sign":"Euro-currency sign","Exclamation question mark":"Exclamation question mark","Font Background Color":"Font Background Color","Font Color":"Font Color","Font Family":"Font Family","Font Size":"Font Size","For all":"For all","Fraction slash":"Fraction slash","French franc sign":"French franc sign","Full size image":"Full size image","German penny sign":"German penny sign","Greater-than or equal to":"Greater-than or equal to","Greater-than sign":"Greater-than sign",Green:"Green","Green marker":"Green marker","Green pen":"Green pen",Grey:"Grey",Groove:"Groove","Guarani sign":"Guarani sign","Header column":"Header column","Header row":"Header row",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Height:"Height",Highlight:"Highlight","Horizontal ellipsis":"Horizontal ellipsis","Horizontal line":"Horizontal line","Horizontal text alignment toolbar":"Horizontal text alignment toolbar","Hryvnia sign":"Hryvnia sign",Huge:"Huge","Identical to":"Identical to","Image toolbar":"Image toolbar","image widget":"image widget","Increase indent":"Increase indent","Indian rupee sign":"Indian rupee sign",Infinity:"Infinity","Insert code block":"Insert code block","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert image":"Insert image","Insert media":"Insert media","Insert paragraph after block":"Insert paragraph after block","Insert paragraph before block":"Insert paragraph before block","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table",Inset:"Inset",Integral:"Integral",Intersection:"Intersection","Inverted exclamation mark":"Inverted exclamation mark","Inverted question mark":"Inverted question mark",Italic:"Italic",Justify:"Justify","Justify cell text":"Justify cell text","Kip sign":"Kip sign","Latin capital letter a with breve":"Latin capital letter a with breve","Latin capital letter a with macron":"Latin capital letter a with macron","Latin capital letter a with ogonek":"Latin capital letter a with ogonek","Latin capital letter c with acute":"Latin capital letter c with acute","Latin capital letter c with caron":"Latin capital letter c with caron","Latin capital letter c with circumflex":"Latin capital letter c with circumflex","Latin capital letter c with dot above":"Latin capital letter c with dot above","Latin capital letter d with caron":"Latin capital letter d with caron","Latin capital letter d with stroke":"Latin capital letter d with stroke","Latin capital letter e with breve":"Latin capital letter e with breve","Latin capital letter e with caron":"Latin capital letter e with caron","Latin capital letter e with dot above":"Latin capital letter e with dot above","Latin capital letter e with macron":"Latin capital letter e with macron","Latin capital letter e with ogonek":"Latin capital letter e with ogonek","Latin capital letter eng":"Latin capital letter eng","Latin capital letter g with breve":"Latin capital letter g with breve","Latin capital letter g with cedilla":"Latin capital letter g with cedilla","Latin capital letter g with circumflex":"Latin capital letter g with circumflex","Latin capital letter g with dot above":"Latin capital letter g with dot above","Latin capital letter h with circumflex":"Latin capital letter h with circumflex","Latin capital letter h with stroke":"Latin capital letter h with stroke","Latin capital letter i with breve":"Latin capital letter i with breve","Latin capital letter i with dot above":"Latin capital letter i with dot above","Latin capital letter i with macron":"Latin capital letter i with macron","Latin capital letter i with ogonek":"Latin capital letter i with ogonek","Latin capital letter i with tilde":"Latin capital letter i with tilde","Latin capital letter j with circumflex":"Latin capital letter j with circumflex","Latin capital letter k with cedilla":"Latin capital letter k with cedilla","Latin capital letter l with acute":"Latin capital letter l with acute","Latin capital letter l with caron":"Latin capital letter l with caron","Latin capital letter l with cedilla":"Latin capital letter l with cedilla","Latin capital letter l with middle dot":"Latin capital letter l with middle dot","Latin capital letter l with stroke":"Latin capital letter l with stroke","Latin capital letter n with acute":"Latin capital letter n with acute","Latin capital letter n with caron":"Latin capital letter n with caron","Latin capital letter n with cedilla":"Latin capital letter n with cedilla","Latin capital letter o with breve":"Latin capital letter o with breve","Latin capital letter o with double acute":"Latin capital letter o with double acute","Latin capital letter o with macron":"Latin capital letter o with macron","Latin capital letter r with acute":"Latin capital letter r with acute","Latin capital letter r with caron":"Latin capital letter r with caron","Latin capital letter r with cedilla":"Latin capital letter r with cedilla","Latin capital letter s with acute":"Latin capital letter s with acute","Latin capital letter s with caron":"Latin capital letter s with caron","Latin capital letter s with cedilla":"Latin capital letter s with cedilla","Latin capital letter s with circumflex":"Latin capital letter s with circumflex","Latin capital letter t with caron":"Latin capital letter t with caron","Latin capital letter t with cedilla":"Latin capital letter t with cedilla","Latin capital letter t with stroke":"Latin capital letter t with stroke","Latin capital letter u with breve":"Latin capital letter u with breve","Latin capital letter u with double acute":"Latin capital letter u with double acute","Latin capital letter u with macron":"Latin capital letter u with macron","Latin capital letter u with ogonek":"Latin capital letter u with ogonek","Latin capital letter u with ring above":"Latin capital letter u with ring above","Latin capital letter u with tilde":"Latin capital letter u with tilde","Latin capital letter w with circumflex":"Latin capital letter w with circumflex","Latin capital letter y with circumflex":"Latin capital letter y with circumflex","Latin capital letter y with diaeresis":"Latin capital letter y with diaeresis","Latin capital letter z with acute":"Latin capital letter z with acute","Latin capital letter z with caron":"Latin capital letter z with caron","Latin capital letter z with dot above":"Latin capital letter z with dot above","Latin capital ligature ij":"Latin capital ligature ij","Latin capital ligature oe":"Latin capital ligature oe","Latin small letter a with breve":"Latin small letter a with breve","Latin small letter a with macron":"Latin small letter a with macron","Latin small letter a with ogonek":"Latin small letter a with ogonek","Latin small letter c with acute":"Latin small letter c with acute","Latin small letter c with caron":"Latin small letter c with caron","Latin small letter c with circumflex":"Latin small letter c with circumflex","Latin small letter c with dot above":"Latin small letter c with dot above","Latin small letter d with caron":"Latin small letter d with caron","Latin small letter d with stroke":"Latin small letter d with stroke","Latin small letter dotless i":"Latin small letter dotless i","Latin small letter e with breve":"Latin small letter e with breve","Latin small letter e with caron":"Latin small letter e with caron","Latin small letter e with dot above":"Latin small letter e with dot above","Latin small letter e with macron":"Latin small letter e with macron","Latin small letter e with ogonek":"Latin small letter e with ogonek","Latin small letter eng":"Latin small letter eng","Latin small letter f with hook":"Latin small letter f with hook","Latin small letter g with breve":"Latin small letter g with breve","Latin small letter g with cedilla":"Latin small letter g with cedilla","Latin small letter g with circumflex":"Latin small letter g with circumflex","Latin small letter g with dot above":"Latin small letter g with dot above","Latin small letter h with circumflex":"Latin small letter h with circumflex","Latin small letter h with stroke":"Latin small letter h with stroke","Latin small letter i with breve":"Latin small letter i with breve","Latin small letter i with macron":"Latin small letter i with macron","Latin small letter i with ogonek":"Latin small letter i with ogonek","Latin small letter i with tilde":"Latin small letter i with tilde","Latin small letter j with circumflex":"Latin small letter j with circumflex","Latin small letter k with cedilla":"Latin small letter k with cedilla","Latin small letter kra":"Latin small letter kra","Latin small letter l with acute":"Latin small letter l with acute","Latin small letter l with caron":"Latin small letter l with caron","Latin small letter l with cedilla":"Latin small letter l with cedilla","Latin small letter l with middle dot":"Latin small letter l with middle dot","Latin small letter l with stroke":"Latin small letter l with stroke","Latin small letter long s":"Latin small letter long s","Latin small letter n preceded by apostrophe":"Latin small letter n preceded by apostrophe","Latin small letter n with acute":"Latin small letter n with acute","Latin small letter n with caron":"Latin small letter n with caron","Latin small letter n with cedilla":"Latin small letter n with cedilla","Latin small letter o with breve":"Latin small letter o with breve","Latin small letter o with double acute":"Latin small letter o with double acute","Latin small letter o with macron":"Latin small letter o with macron","Latin small letter r with acute":"Latin small letter r with acute","Latin small letter r with caron":"Latin small letter r with caron","Latin small letter r with cedilla":"Latin small letter r with cedilla","Latin small letter s with acute":"Latin small letter s with acute","Latin small letter s with caron":"Latin small letter s with caron","Latin small letter s with cedilla":"Latin small letter s with cedilla","Latin small letter s with circumflex":"Latin small letter s with circumflex","Latin small letter t with caron":"Latin small letter t with caron","Latin small letter t with cedilla":"Latin small letter t with cedilla","Latin small letter t with stroke":"Latin small letter t with stroke","Latin small letter u with breve":"Latin small letter u with breve","Latin small letter u with double acute":"Latin small letter u with double acute","Latin small letter u with macron":"Latin small letter u with macron","Latin small letter u with ogonek":"Latin small letter u with ogonek","Latin small letter u with ring above":"Latin small letter u with ring above","Latin small letter u with tilde":"Latin small letter u with tilde","Latin small letter w with circumflex":"Latin small letter w with circumflex","Latin small letter y with circumflex":"Latin small letter y with circumflex","Latin small letter z with acute":"Latin small letter z with acute","Latin small letter z with caron":"Latin small letter z with caron","Latin small letter z with dot above":"Latin small letter z with dot above","Latin small ligature ij":"Latin small ligature ij","Latin small ligature oe":"Latin small ligature oe","Left aligned image":"Left aligned image","Left double quotation mark":"Left double quotation mark","Left single quotation mark":"Left single quotation mark","Left-pointing double angle quotation mark":"Left-pointing double angle quotation mark","leftwards arrow to bar":"leftwards arrow to bar","leftwards dashed arrow":"leftwards dashed arrow","leftwards double arrow":"leftwards double arrow","Less-than or equal to":"Less-than or equal to","Less-than sign":"Less-than sign","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Link:"Link","Link URL":"Link URL","Lira sign":"Lira sign","Livre tournois sign":"Livre tournois sign","Logical and":"Logical and","Logical or":"Logical or",Macron:"Macron","Manat sign":"Manat sign","Media URL":"Media URL","media widget":"media widget","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells","Mill sign":"Mill sign","Minus sign":"Minus sign","Multiplication sign":"Multiplication sign","N-ary product":"N-ary product","N-ary summation":"N-ary summation",Nabla:"Nabla","Naira sign":"Naira sign","New sheqel sign":"New sheqel sign",Next:"Next",None:"None","Nordic mark sign":"Nordic mark sign","Not an element of":"Not an element of","Not equal to":"Not equal to","Not sign":"Not sign","Numbered List":"Numbered List","on with exclamation mark with left right arrow above":"on with exclamation mark with left right arrow above","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab",Orange:"Orange",Outset:"Outset",Overline:"Overline",Padding:"Padding","Page break":"Page break",Paragraph:"Paragraph","Paragraph sign":"Paragraph sign","Partial differential":"Partial differential","Paste the media URL in the input.":"Paste the media URL in the input.","Per mille sign":"Per mille sign","Per ten thousand sign":"Per ten thousand sign","Peseta sign":"Peseta sign","Peso sign":"Peso sign","Pink marker":"Pink marker","Plain text":"Plain text","Plus-minus sign":"Plus-minus sign","Pound sign":"Pound sign",Previous:"Previous","Proportional to":"Proportional to",Purple:"Purple","Question exclamation mark":"Question exclamation mark",Red:"Red","Red pen":"Red pen",Redo:"Redo","Registered sign":"Registered sign","Remove color":"Remove color","Remove Format":"Remove Format","Remove highlight":"Remove highlight","Reversed paragraph sign":"Reversed paragraph sign","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Ridge:"Ridge","Right aligned image":"Right aligned image","Right double quotation mark":"Right double quotation mark","Right single quotation mark":"Right single quotation mark","Right-pointing double angle quotation mark":"Right-pointing double angle quotation mark","rightwards arrow to bar":"rightwards arrow to bar","rightwards dashed arrow":"rightwards dashed arrow","rightwards double arrow":"rightwards double arrow",Row:"Row","Ruble sign":"Ruble sign","Rupee sign":"Rupee sign",Save:"Save","Section sign":"Section sign","Select all":"Select all","Select column":"Select column","Select row":"Select row","Show more items":"Show more items","Side image":"Side image","Single left-pointing angle quotation mark":"Single left-pointing angle quotation mark","Single low-9 quotation mark":"Single low-9 quotation mark","Single right-pointing angle quotation mark":"Single right-pointing angle quotation mark",Small:"Small",Solid:"Solid","soon with rightwards arrow above":"soon with rightwards arrow above","Special characters":"Special characters","Spesmilo sign":"Spesmilo sign","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically","Square root":"Square root",Strikethrough:"Strikethrough",Style:"Style","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar","Tenge sign":"Tenge sign","Text alignment":"Text alignment","Text alignment toolbar":"Text alignment toolbar","Text alternative":"Text alternative","Text highlight toolbar":"Text highlight toolbar","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".","The URL must not be empty.":"The URL must not be empty.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".","There exists":"There exists","This link has no URL":"This link has no URL","This media URL is not supported.":"This media URL is not supported.","Tilde operator":"Tilde operator",Tiny:"Tiny","Tip: Paste the URL into the content to embed faster.":"Tip: Paste the URL into the content to embed faster.","top with upwards arrow above":"top with upwards arrow above","Trade mark sign":"Trade mark sign","Tugrik sign":"Tugrik sign","Turkish lira sign":"Turkish lira sign",Turquoise:"Turquoise","Two dot leader":"Two dot leader","Type or paste your content here.":"Type or paste your content here.","Type your title":"Type your title",Underline:"Underline",Undo:"Undo",Union:"Union",Unlink:"Unlink","up down arrow with base":"up down arrow with base","Upload failed":"Upload failed","Upload in progress":"Upload in progress","upwards arrow to bar":"upwards arrow to bar","upwards dashed arrow":"upwards dashed arrow","upwards double arrow":"upwards double arrow","Vertical text alignment toolbar":"Vertical text alignment toolbar","Vulgar fraction one half":"Vulgar fraction one half","Vulgar fraction one quarter":"Vulgar fraction one quarter","Vulgar fraction three quarters":"Vulgar fraction three quarters",White:"White","Widget toolbar":"Widget toolbar",Width:"Width","Won sign":"Won sign",Yellow:"Yellow","Yellow marker":"Yellow marker","Yen sign":"Yen sign"} );})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/eo.js b/public/js/ckedit5/20.0.0_/translations/eo.js new file mode 100644 index 0000000..816dce3 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/eo.js @@ -0,0 +1 @@ +(function(d){ const l = d['eo'] = d['eo'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Bold:"grasa","Bulleted List":"Bula Listo",Cancel:"Nuligi","Centered image":"","Change image text alternative":"Ŝanĝu la alternativan tekston de la bildo","Choose heading":"Elektu ĉapon",Code:"","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"Skribu klarigon pri la bildo","Full size image":"Bildo kun reala dimensio",Green:"",Grey:"",Heading:"Ĉapo","Heading 1":"Ĉapo 1","Heading 2":"Ĉapo 2","Heading 3":"Ĉapo 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"bilda fenestraĵo","Insert image":"Enmetu bildon",Italic:"kursiva","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"Ligilo","Link URL":"URL de la ligilo",Next:"","Numbered List":"Numerita Listo","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"Paragrafo",Previous:"",Purple:"",Red:"",Redo:"Refari","Remove color":"","Rich Text Editor":"Redaktilo de Riĉa Teksto","Rich Text Editor, %0":"Redaktilo de Riĉa Teksto, %0","Right aligned image":"",Save:"Konservi","Show more items":"","Side image":"Flanka biildo",Strikethrough:"","Text alternative":"Alternativa teksto","This link has no URL":"",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"",Undo:"Malfari",Unlink:"Malligi","Upload failed":"",White:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/es.js b/public/js/ckedit5/20.0.0_/translations/es.js new file mode 100644 index 0000000..430c08f --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/es.js @@ -0,0 +1 @@ +(function(d){ const l = d['es'] = d['es'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 de %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Centrar","Align left":"Alinear a la izquierda","Align right":"Alinear a la derecha","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Aguamarina",Background:"",Big:"Grande",Black:"Negro","Block quote":"Entrecomillado",Blue:"Azul","Blue marker":"Marcador azul",Bold:"Negrita",Border:"","Bulleted List":"Lista de puntos",Cancel:"Cancelar","Cell properties":"","Center table":"","Centered image":"Imagen centrada","Change image text alternative":"Cambiar el texto alternativo de la imagen","Choose heading":"Elegir Encabezado",Code:"Código",Color:"","Color picker":"",Column:"Columna",Dashed:"","Decrease indent":"Disminuir sangría",Default:"Por defecto","Delete column":"Eliminar columna","Delete row":"Eliminar fila","Dim grey":"Gris Oscuro",Dimensions:"","Document colors":"Colores del documento",Dotted:"",Double:"",Downloadable:"Descargable","Dropdown toolbar":"Barra de herramientas desplegable","Edit link":"Editar enlace","Editor toolbar":"Barra de herramientas de edición","Enter image caption":"Introducir título de la imagen","Font Background Color":"Color de Fondo","Font Color":"Color de Fuente","Font Family":"Fuente","Font Size":"Tamaño de fuente","Full size image":"Imagen a tamaño completo",Green:"Verde","Green marker":"Marcador verde","Green pen":"Texto verde",Grey:"Gris",Groove:"","Header column":"Columna de encabezado","Header row":"Fila de encabezado",Heading:"Encabezado","Heading 1":"Encabezado 1","Heading 2":"Encabezado 2","Heading 3":"Encabezado 3","Heading 4":"Encabezado 4","Heading 5":"Encabezado 5","Heading 6":"Encabezado 6",Height:"",Highlight:"Resaltar","Horizontal line":"Línea horizontal","Horizontal text alignment toolbar":"",Huge:"Enorme","Image toolbar":"Barra de herramientas de imagen","image widget":"Widget de imagen","Increase indent":"Aumentar sangría","Insert code block":"Insertar bloque de código","Insert column left":"Insertar columna izquierda","Insert column right":"Insertar columna derecha","Insert image":"Insertar imagen","Insert media":"Insertar contenido multimedia","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Insertar fila encima","Insert row below":"Insertar fila debajo","Insert table":"Insertar tabla",Inset:"",Italic:"Cursiva",Justify:"Justificar","Justify cell text":"","Left aligned image":"Imagen alineada a la izquierda","Light blue":"Azul Claro","Light green":"Verde Claro","Light grey":"Gris Claro",Link:"Enlace","Link URL":"URL del enlace","Media URL":"URL del contenido multimedia","media widget":"Widget de contenido multimedia","Merge cell down":"Combinar celda inferior","Merge cell left":"Combinar celda izquierda","Merge cell right":"Combinar celda derecha","Merge cell up":"Combinar celda superior","Merge cells":"Combinar celdas",Next:"Siguiente",None:"","Numbered List":"Lista numerada","Open in a new tab":"Abrir en una pestaña nueva ","Open link in new tab":"Abrir enlace en una pestaña nueva",Orange:"Anaranjado",Outset:"",Padding:"","Page break":"Salto de página",Paragraph:"Párrafo","Paste the media URL in the input.":"Pega la URL del contenido multimedia","Pink marker":"Marcador rosa","Plain text":"Texto plano",Previous:"Anterior",Purple:"Morado",Red:"Rojo","Red pen":"Texto rojo",Redo:"Rehacer","Remove color":"Remover color","Remove Format":"Quitar Formato","Remove highlight":"Quitar resaltado","Rich Text Editor":"Editor de Texto Enriquecido","Rich Text Editor, %0":"Editor de Texto Enriquecido, %0",Ridge:"","Right aligned image":"Imagen alineada a la derecha",Row:"Fila",Save:"Guardar","Select column":"","Select row":"","Show more items":"Mostrar más elementos","Side image":"Imagen lateral",Small:"Pequeño",Solid:"","Split cell horizontally":"Dividir celdas horizontalmente","Split cell vertically":"Dividir celdas verticalmente",Strikethrough:"Tachado",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Barra de herramientas de tabla","Text alignment":"Alineación del texto","Text alignment toolbar":"Barra de herramientas de alineación del texto","Text alternative":"Texto alternativo","Text highlight toolbar":"Barra de herramientas de resaltado de texto","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"La URL no debe estar vacía","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Este enlace no tiene URL","This media URL is not supported.":"La URL de este contenido multimedia no está soportada",Tiny:"Minúsculo","Tip: Paste the URL into the content to embed faster.":"Tip: pega la URL dentro del contenido para embeber más rápido",Turquoise:"Turquesa","Type or paste your content here.":"Introduce o pega tu contenido aquí","Type your title":"Introduce tu título",Underline:"Subrayado",Undo:"Deshacer",Unlink:"Quitar enlace","Upload failed":"Fallo en la subida","Upload in progress":"Subida en progreso","Vertical text alignment toolbar":"",White:"Blanco","Widget toolbar":"Barra de herramientas del widget",Width:"",Yellow:"Amarillo","Yellow marker":"Marcador amarillo"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/et.js b/public/js/ckedit5/20.0.0_/translations/et.js new file mode 100644 index 0000000..9b870c4 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/et.js @@ -0,0 +1 @@ +(function(d){ const l = d['et'] = d['et'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 / %1","Align cell text to the bottom":"Lahtri tekst all","Align cell text to the center":"Lahtri tekst keskel","Align cell text to the left":"Lahtri tekst vasakul","Align cell text to the middle":"Lahtri tekst kõrguse järgi keskel","Align cell text to the right":"Lahtri tekst paremal","Align cell text to the top":"Lahtri tekst üleval","Align center":"Keskjoondus","Align left":"Vasakjoondus","Align right":"Paremjoondus","Align table to the left":"Tabel joondatud vasakule","Align table to the right":"Tabel joondatud paremale",Alignment:"Joondus","Almost equal to":"",Angle:"","Approximately equal to":"",Aquamarine:"Akvamariin","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"",Background:"Taust",Big:"Suur","Bitcoin sign":"",Black:"Must","Block quote":"Tsitaat",Blue:"Sinine","Blue marker":"Sinine marker",Bold:"Rasvane",Border:"Ääris","Bulleted List":"Punktidega loetelu",Cancel:"Loobu","Cedi sign":"","Cell properties":"Lahtri omadused","Cent sign":"Sendi märk","Center table":"Tabel joondatud keskele","Centered image":"Keskele joondatud pilt","Change image text alternative":"Muuda pildi asenduskirjeldust","Character categories":"","Choose heading":"Vali pealkiri",Code:"Kood","Colon sign":"",Color:"Värvus","Color picker":"Värvi valija",Column:"Veerg","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"",Dashed:"Kriipsjoon","Decrease indent":"Vähenda taanet",Default:"Vaikimisi","Degree sign":"","Delete column":"Kustuta veerg","Delete row":"Kustuta rida","Dim grey":"Tumehall",Dimensions:"Mõõtmed","Division sign":"","Document colors":"Dokumendi värvid","Dollar sign":"","Dong sign":"",Dotted:"Punktiir",Double:"Topelt","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"",Downloadable:"Allalaaditav","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"","Dropdown toolbar":"Avatav tööriistariba","Edit link":"Muuda linki","Editor toolbar":"Redaktori tööriistariba","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Enter image caption":"Sisesta pildi pealkiri","Euro sign":"Euro märk","Euro-currency sign":"","Exclamation question mark":"","Font Background Color":"Kirja tausta värvus","Font Color":"Fondi värvus","Font Family":"Kirjastiil","Font Size":"Teksti suurus","For all":"","Fraction slash":"","French franc sign":"","Full size image":"Täissuuruses pilt","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"",Green:"Roheline","Green marker":"Roheline marker","Green pen":"Roheline pliiats",Grey:"Hall",Groove:"Kraav","Guarani sign":"","Header column":"Päise veerg","Header row":"Päise rida",Heading:"Pealkiri","Heading 1":"Pealkiri 1","Heading 2":"Pealkiri 2","Heading 3":"Pealkiri 3","Heading 4":"Pealkiri 4","Heading 5":"Pealkiri 5","Heading 6":"Pealkiri 6",Height:"Kõrgus",Highlight:"Tõsta esile","Horizontal ellipsis":"","Horizontal line":"Horisontaalne joon","Horizontal text alignment toolbar":"Teksti rõhtpaigutuse tööriistariba","Hryvnia sign":"",Huge:"Ülisuur","Identical to":"","Image toolbar":"Piltide tööriistariba","image widget":"pildi vidin","Increase indent":"Suurenda taanet","Indian rupee sign":"",Infinity:"","Insert code block":"Sisesta koodiplokk","Insert column left":"Sisesta veerg vasakule","Insert column right":"Sisesta veerg paremale","Insert image":"Siseta pilt","Insert media":"Sisesta meedia","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Sisesta rida ülespoole","Insert row below":"Sisesta rida allapoole","Insert table":"Sisesta tabel",Inset:"Süvik",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"",Italic:"Kaldkiri",Justify:"Rööpjoondus","Justify cell text":"Lahtri tekst rööpjoondatud","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left aligned image":"Vasakule joondatud pilt","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"","Less-than or equal to":"","Less-than sign":"","Light blue":"Helesinine","Light green":"Heleroheline","Light grey":"Helehall",Link:"Link","Link URL":"Lingi URL","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Media URL":"Meedia URL","media widget":"meedia vidin","Merge cell down":"Liida alumise lahtriga","Merge cell left":"Liida vasakul oleva lahtriga","Merge cell right":"Liida paremal oleva lahtriga","Merge cell up":"Liida ülemise lahtriga","Merge cells":"Liida lahtrid","Mill sign":"","Minus sign":"Miinusmärk","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"",Next:"Järgmine",None:"Puudub","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","Numbered List":"Nummerdatud loetelu","on with exclamation mark with left right arrow above":"","Open in a new tab":"Ava uuel kaardil","Open link in new tab":"Ava link uuel vahekaardil",Orange:"Oranž",Outset:"Küngas",Overline:"",Padding:"Vahe sisuni","Page break":"Lehekülje murdmine",Paragraph:"Lõik","Paragraph sign":"","Partial differential":"","Paste the media URL in the input.":"Aseta meedia URL sisendi lahtrisse.","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Pink marker":"Roosa marker","Plain text":"Lihtsalt tekst","Plus-minus sign":"","Pound sign":"Naela märk",Previous:"Eelmine","Proportional to":"",Purple:"Lilla","Question exclamation mark":"",Red:"Punane","Red pen":"Punane pliiats",Redo:"Tee uuesti","Registered sign":"","Remove color":"Eemalda värv","Remove Format":"Eemalda vorming","Remove highlight":"Eemalda esiletõstmine","Reversed paragraph sign":"","Rich Text Editor":"Tekstiredaktor","Rich Text Editor, %0":"Tekstiredaktor, %0",Ridge:"Vall","Right aligned image":"Paremale joondatud pilt","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"",Row:"Rida","Ruble sign":"","Rupee sign":"",Save:"Salvesta","Section sign":"","Select all":"Vali kõik","Select column":"Vali veerg","Select row":"Vali rida","Show more items":"Näita veel","Side image":"Pilt küljel","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"",Small:"Väike",Solid:"Pidev","soon with rightwards arrow above":"","Special characters":"Erimärgid","Spesmilo sign":"","Split cell horizontally":"Jaga lahter horisontaalselt","Split cell vertically":"Jaga lahter vertikaalselt","Square root":"",Strikethrough:"Läbijoonitud",Style:"Stiil","Table alignment toolbar":"Tabeli paigutuse tööriistariba","Table cell text alignment":"Teksti paigutus lahtris","Table properties":"Tabeli omadused","Table toolbar":"Tabelite tööriistariba","Tenge sign":"","Text alignment":"Teksti joondamine","Text alignment toolbar":"Teksti joonduse tööriistariba","Text alternative":"Asenduskirjeldus","Text highlight toolbar":"Teksti markeerimise tööriistariba","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Värvus ei sobi. Proovi \"#FF0000\" või \"rgb(255,0,0)\" või \"red\".","The URL must not be empty.":"URL-i lahter ei tohi olla tühi.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Väärtus ei sobi. Proovi \"10px\", \"2em\" või lihtsalt \"2\".","There exists":"","This link has no URL":"Sellel lingil puudub URL","This media URL is not supported.":"See meedia URL pole toetatud.","Tilde operator":"",Tiny:"Imepisike","Tip: Paste the URL into the content to embed faster.":"Vihje: asetades meedia URLi otse sisusse saab selle lisada kiiremini.","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"",Turquoise:"Türkiis","Two dot leader":"","Type or paste your content here.":"Siia tipi või kopeeri tekst.","Type your title":"Sisesta pealkiri",Underline:"Allajoonitud",Undo:"Võta tagasi",Union:"",Unlink:"Eemalda link","up down arrow with base":"","Upload failed":"Üleslaadimine ebaõnnestus","Upload in progress":"Üleslaadimine pooleli","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vertical text alignment toolbar":"Teksti püstpaigutuse tööriistariba","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"",White:"Valge","Widget toolbar":"Vidinate tööriistariba",Width:"Laius","Won sign":"",Yellow:"Kollane","Yellow marker":"Kollane marker","Yen sign":""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/eu.js b/public/js/ckedit5/20.0.0_/translations/eu.js new file mode 100644 index 0000000..2466a46 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/eu.js @@ -0,0 +1 @@ +(function(d){ const l = d['eu'] = d['eu'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"Aipua",Blue:"",Bold:"Lodia","Bulleted List":"Buletdun zerrenda",Cancel:"Utzi","Centered image":"Zentratutako irudia","Change image text alternative":"Aldatu irudiaren ordezko testua","Choose heading":"Aukeratu izenburua",Code:"Kodea","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"Sartu irudiaren epigrafea","Full size image":"Tamaina osoko irudia",Green:"",Grey:"",Heading:"Izenburua","Heading 1":"Izenburua 1","Heading 2":"Izenburua 2","Heading 3":"Izenburua 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"irudi widgeta","Insert image":"Txertatu irudia",Italic:"Etzana","Left aligned image":"Ezkerrean lerrokatutako irudia","Light blue":"","Light green":"","Light grey":"",Link:"Esteka","Link URL":"Estekaren URLa",Next:"","Numbered List":"Zenbakidun zerrenda","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"Paragrafoa",Previous:"",Purple:"",Red:"",Redo:"Berregin","Remove color":"","Rich Text Editor":"Testu aberastuaren editorea","Rich Text Editor, %0":"Testu aberastuaren editorea, %0","Right aligned image":"Eskuinean lerrokatutako irudia",Save:"Gorde","Show more items":"","Side image":"Alboko irudia",Strikethrough:"","Text alternative":"Ordezko testua","This link has no URL":"",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"Azpimarra",Undo:"Desegin",Unlink:"Desestekatu","Upload failed":"Kargatzeak huts egin du",White:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/fa.js b/public/js/ckedit5/20.0.0_/translations/fa.js new file mode 100644 index 0000000..9bf79e5 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/fa.js @@ -0,0 +1 @@ +(function(d){ const l = d['fa'] = d['fa'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"0% از 1%","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"تراز وسط","Align left":"تراز چپ","Align right":"تراز راست","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"زمرد کبود",Background:"",Big:"بزرگ",Black:"سیاه","Block quote":" بلوک نقل قول",Blue:"آبی","Blue marker":"نشانگر آبی",Bold:"درشت",Border:"","Bulleted List":"لیست نشانه‌دار",Cancel:"لغو","Cell properties":"","Center table":"","Centered image":"تصویر در وسط","Change image text alternative":"تغییر متن جایگزین تصویر","Choose heading":"انتخاب عنوان",Code:"کد",Color:"","Color picker":"",Column:"ستون",Dashed:"","Decrease indent":"کاهش تورفتگی",Default:"پیش فرض","Delete column":"حذف ستون","Delete row":"حذف سطر","Dim grey":"خاکستری تیره",Dimensions:"","Document colors":"رنگ اسناد",Dotted:"",Double:"",Downloadable:"قابل بارگیری","Dropdown toolbar":"نوارابزار کشویی","Edit link":"ویرایش پیوند","Editor toolbar":"نوارابزار ویرایشگر","Enter image caption":"عنوان تصویر را وارد کنید","Font Background Color":"رنگ پس زمینه فونت","Font Color":"رنگ فونت","Font Family":"خانواده فونت","Font Size":"اندازه فونت","Full size image":"تصویر در اندازه کامل",Green:"سبز","Green marker":"نشانگر سبز","Green pen":"قلم سبز",Grey:"خاکستری",Groove:"","Header column":"ستون سربرگ","Header row":"سطر سربرگ",Heading:"عنوان","Heading 1":"عنوان 1","Heading 2":"عنوان 2","Heading 3":"عنوان 3","Heading 4":"عنوان 4","Heading 5":"عنوان 5","Heading 6":"عنوان 6",Height:"",Highlight:"برجسته","Horizontal text alignment toolbar":"",Huge:"بسیار بزرگ","Image toolbar":"نوارابزار تصویر","image widget":"ابزاره تصویر","Increase indent":"افزایش تورفتگی","Insert column left":"درج ستون در سمت چپ","Insert column right":"درج ستون در سمت راست","Insert image":"قرار دادن تصویر","Insert media":"وارد کردن رسانه","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"درج سطر در بالا","Insert row below":"درج سطر در پایین","Insert table":"درج جدول",Inset:"",Italic:"کج",Justify:"هم تراز کردن","Justify cell text":"","Left aligned image":"تصویر تراز شده چپ","Light blue":"آبی روشن","Light green":"سبز روشن","Light grey":"خاکستری روشن",Link:"پیوند","Link URL":"نشانی اینترنتی پیوند","Media URL":"آدرس اینترنتی رسانه","media widget":"ویجت رسانه","Merge cell down":"ادغام سلول پایین","Merge cell left":"ادغام سلول چپ","Merge cell right":"ادغام سلول راست","Merge cell up":"ادغام سلول بالا","Merge cells":"ادغام سلول ها",Next:"بعدی",None:"","Numbered List":"لیست عددی","Open in a new tab":"بازکردن در برگه جدید","Open link in new tab":"باز کردن پیوند در برگه جدید",Orange:"نارنجی",Outset:"",Padding:"",Paragraph:"پاراگراف","Paste the media URL in the input.":"آدرس رسانه را در ورودی قرار دهید","Pink marker":"نشانگر صورتی",Previous:"قبلی",Purple:"بنفش",Red:"قرمز","Red pen":"قلم قرمز",Redo:"باز انجام","Remove color":"حذف رنگ","Remove Format":"حذف کردن قالب","Remove highlight":"حذف برجسته","Rich Text Editor":"ویرایشگر متن غنی","Rich Text Editor, %0":"ویرایشگر متن غنی، %0",Ridge:"","Right aligned image":"تصویر تراز شده راست",Row:"سطر",Save:"ذخیره","Select all":"انتخاب همه","Select column":"","Select row":"","Show more items":"","Side image":"تصویر جانبی",Small:"کوچک",Solid:"","Split cell horizontally":"تقسیم افقی سلول","Split cell vertically":"تقسیم عمودی سلول",Strikethrough:"خط خورده",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"نوارابزار جدول","Text alignment":"تراز متن","Text alignment toolbar":"نوارابزار تراز متن","Text alternative":"متن جایگزین","Text highlight toolbar":"نوارابزار برجستگی متن","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"آدرس اینترنتی URL نباید خالی باشد.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"این پیوند نشانی اینترنتی ندارد","This media URL is not supported.":"این آدرس اینترنتی رسانه پشتیبانی نمی‌شود",Tiny:"بسیار کوچک","Tip: Paste the URL into the content to embed faster.":"نکته : آدرس را در محتوا قراردهید تا سریع تر جاسازی شود",Turquoise:"فیروزه ای","Type or paste your content here.":"","Type your title":"",Underline:"خط زیر",Undo:"بازگردانی",Unlink:"لغو پیوند","Upload failed":"آپلود ناموفق بود","Upload in progress":"آپلود در حال انجام","Vertical text alignment toolbar":"",White:"سفید","Widget toolbar":"نوار ابزارک ها",Width:"",Yellow:"زرد","Yellow marker":"نشانگر زرد"} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/fi.js b/public/js/ckedit5/20.0.0_/translations/fi.js new file mode 100644 index 0000000..ebc3e06 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/fi.js @@ -0,0 +1 @@ +(function(d){ const l = d['fi'] = d['fi'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Tasaa keskelle","Align left":"Tasaa vasemmalle","Align right":"Tasaa oikealle","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Akvamariini",Background:"",Big:"Suuri",Black:"Musta","Block quote":"Lainaus",Blue:"Sininen","Blue marker":"",Bold:"Lihavointi",Border:"","Bulleted List":"Lista",Cancel:"Peruuta","Cell properties":"","Center table":"","Centered image":"Keskitetty kuva","Change image text alternative":"Vaihda kuvan vaihtoehtoinen teksti","Choose heading":"Valitse otsikko",Code:"Koodi",Color:"","Color picker":"",Column:"Sarake",Dashed:"","Decrease indent":"Vähennä sisennystä",Default:"Oletus","Delete column":"Poista sarake","Delete row":"Poista rivi","Dim grey":"",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"Muokkaa linkkiä","Editor toolbar":"","Enter image caption":"Syötä kuvateksti","Font Background Color":"Fontin taustaväri","Font Color":"Fontin väri","Font Family":"Fonttiperhe","Font Size":"Fontin koko","Full size image":"Täysikokoinen kuva",Green:"Vihreä","Green marker":"","Green pen":"",Grey:"Harmaa",Groove:"","Header column":"Otsikkosarake","Header row":"Otsikkorivi",Heading:"Otsikkotyyli","Heading 1":"Otsikko 1","Heading 2":"Otsikko 2","Heading 3":"Otsikko 3","Heading 4":"Otsikko 4","Heading 5":"Otsikko 5","Heading 6":"Otsikko 6",Height:"",Highlight:"Korosta","Horizontal text alignment toolbar":"",Huge:"Hyvin suuri","Image toolbar":"","image widget":"Kuvavimpain","Increase indent":"Lisää sisennystä","Insert column left":"Lisää sarake vasemmalle","Insert column right":"Lisää sarake oikealle","Insert image":"Lisää kuva","Insert media":"","Insert row above":"Lisää rivi ylle","Insert row below":"Lisää rivi alle","Insert table":"Lisää taulukko",Inset:"",Italic:"Kursivointi",Justify:"Tasaa molemmat reunat","Justify cell text":"","Left aligned image":"Vasemmalle tasattu kuva","Light blue":"Vaaleansininen","Light green":"Vaaleanvihreä","Light grey":"Vaaleanharmaa",Link:"Linkki","Link URL":"Linkin osoite","Media URL":"","media widget":"","Merge cell down":"Yhdistä solu alas","Merge cell left":"Yhdistä solu vasemmalle","Merge cell right":"Yhdistä solu oikealle","Merge cell up":"Yhdistä solu ylös","Merge cells":"Yhdistä tai jaa soluja",Next:"",None:"","Numbered List":"Numeroitu lista","Open in a new tab":"","Open link in new tab":"Avaa linkki uudessa välilehdessä",Orange:"Oranssi",Outset:"",Padding:"",Paragraph:"Kappale","Paste the media URL in the input.":"","Pink marker":"",Previous:"",Purple:"Purppura",Red:"Punainen","Red pen":"",Redo:"Tee uudelleen","Remove color":"Poista väri","Remove Format":"Poista muotoilu","Remove highlight":"Poista korostus","Rich Text Editor":"Rikas tekstieditori","Rich Text Editor, %0":"Rikas tekstieditori, %0",Ridge:"","Right aligned image":"Oikealle tasattu kuva",Row:"Rivi",Save:"Tallenna","Select column":"","Select row":"","Show more items":"","Side image":"Pieni kuva",Small:"Pieni",Solid:"","Split cell horizontally":"Jaa solu vaakasuunnassa","Split cell vertically":"Jaa solu pystysuunnassa",Strikethrough:"Yliviivaus",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Tekstin tasaus","Text alignment toolbar":"","Text alternative":"Vaihtoehtoinen teksti","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL-osoite ei voi olla tyhjä.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Linkillä ei ole URL-osoitetta","This media URL is not supported.":"",Tiny:"Hyvin pieni","Tip: Paste the URL into the content to embed faster.":"",Turquoise:"Turkoosi","Type or paste your content here.":"","Type your title":"",Underline:"Alleviivaus",Undo:"Peru",Unlink:"Poista linkki","Upload failed":"Lataus epäonnistui","Upload in progress":"Lähetys käynnissä","Vertical text alignment toolbar":"",White:"Valkoinen",Width:"",Yellow:"Keltainen","Yellow marker":""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/fr.js b/public/js/ckedit5/20.0.0_/translations/fr.js new file mode 100644 index 0000000..aec85cf --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/fr.js @@ -0,0 +1 @@ +(function(d){ const l = d['fr'] = d['fr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 sur %1","Align cell text to the bottom":"Aligner le texte en bas","Align cell text to the center":"Aligner la cellule au centre","Align cell text to the left":"Aligner la cellule à gauche","Align cell text to the middle":"Aligner le texte au milieu","Align cell text to the right":"Aligner la cellule à droite","Align cell text to the top":"Aligner le texte en haut","Align center":"Centrer","Align left":"Aligner à gauche","Align right":"Aligner à droite","Align table to the left":"Aligner le tableau à gauche","Align table to the right":"Aligner le tableau à droite",Alignment:"Alignement","Almost equal to":"Presque égal à",Angle:"Angle","Approximately equal to":"Environ égal à",Aquamarine:"Bleu vert","Asterisk operator":"Astérisque","Austral sign":"Austral","back with leftwards arrow above":"Précédent avec flèche vers la gauche",Background:"Fond",Big:"Grand","Bitcoin sign":"Bitcoin",Black:"Noir","Block quote":"Citation",Blue:"Bleu","Blue marker":"Marqueur bleu",Bold:"Gras",Border:"Bordure","Bulleted List":"Liste à puces",Cancel:"Annuler","Cedi sign":"Cédi","Cell properties":"Propriétés de la cellule","Cent sign":"Centime","Center table":"Centrer le tableau ","Centered image":"Image centrée","Change image text alternative":"Changer le texte alternatif à l’image","Character categories":"Catégories de caractères","Choose heading":"Choisir l'en-tête",Code:"Code","Colon sign":"Deux points",Color:"Couleur","Color picker":"",Column:"Colonne","Contains as member":"Contient","Copyright sign":"Copyright","Cruzeiro sign":"Cruzeiro","Currency sign":"Symbole monétaire",Dashed:"Tirets","Decrease indent":"Diminuer le retrait",Default:"Par défaut","Degree sign":"Degré","Delete column":"Supprimer la colonne","Delete row":"Supprimer la ligne","Dim grey":"Gris pâle",Dimensions:"Dimensions","Division sign":"Division","Document colors":"Couleurs du document","Dollar sign":"Dollar","Dong sign":"Dong",Dotted:"Pointillés",Double:"Double","Double dagger":"Croix de Lorraine","Double exclamation mark":"Double point d'exclamation","Double low-9 quotation mark":"Guillemet-virgule double inférieur","Double question mark":"Double point d'interrogation",Downloadable:"Fichier téléchargeable","downwards arrow to bar":"Flèche vers le bas avec barre de fin","downwards dashed arrow":"Flèche en pointillés vers le bas","downwards double arrow":"Double flèche vers le bas","Drachma sign":"Drachme","Dropdown toolbar":"Barre d'outils dans un menu déroulant","Edit link":"Modifier le lien","Editor toolbar":"Barre d'outils de l'éditeur","Element of":"Appartient à","Em dash":"Tiret long","Empty set":"Élément vide","En dash":"Tiret","end with leftwards arrow above":"Fin avec flèche vers la gauche","Enter image caption":"Saisir la légende de l’image","Euro sign":"Euro","Euro-currency sign":"Symbole monétaire de l'euro","Exclamation question mark":"Point exclamation et question","Font Background Color":"Couleur d'arrière-plan","Font Color":"Couleur de police","Font Family":"Police","Font Size":"Taille de police","For all":"Pour tout","Fraction slash":"Fraction","French franc sign":"Franc français","Full size image":"Image taille réelle","German penny sign":"Pfennig","Greater-than or equal to":"Signe supérieur ou égal","Greater-than sign":"Signe supérieur",Green:"Vert","Green marker":"Marqueur vert","Green pen":"Crayon vert",Grey:"Gris",Groove:"Rainuré","Guarani sign":"Guarani","Header column":"Colonne d'entête","Header row":"Ligne d'entête",Heading:"En-tête","Heading 1":"Titre 1","Heading 2":"Titre 2","Heading 3":"Titre 3","Heading 4":"Titre 4","Heading 5":"Titre 5","Heading 6":"Titre 6",Height:"Hauteur",Highlight:"Surlignage","Horizontal ellipsis":"Trois points","Horizontal line":"Ligne horizontale","Horizontal text alignment toolbar":"Barre d'outils pour modifier l'alignement horizontal du texte","Hryvnia sign":"Hryvnia",Huge:"Enorme","Identical to":"Identique à","Image toolbar":"Barre d'outils des images","image widget":"Objet image","Increase indent":"Augmenter le retrait","Indian rupee sign":"Roupie indienne",Infinity:"Infini","Insert code block":"Insérer un bloque de code","Insert column left":"Insérer une colonne à gauche","Insert column right":"Insérer une colonne à droite","Insert image":"Insérer une image","Insert media":"Insérer un média","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Insérer une ligne au-dessus","Insert row below":"Insérer une ligne en-dessous","Insert table":"Insérer un tableau",Inset:"Relief intérieur",Integral:"Intégrale",Intersection:"Intersection","Inverted exclamation mark":"Point d'exclamation inversé","Inverted question mark":"Point d'interrogation inversé",Italic:"Italique",Justify:"Justifier","Justify cell text":"Justifier le contenu de la cellule","Kip sign":"Kip","Latin capital letter a with breve":"A bref majuscule","Latin capital letter a with macron":"A barre majuscule","Latin capital letter a with ogonek":"A ogonek majuscule","Latin capital letter c with acute":"C accent aigu majuscule","Latin capital letter c with caron":"C caron majuscule","Latin capital letter c with circumflex":"C circonflexe majuscule","Latin capital letter c with dot above":"C point suscrit majuscule","Latin capital letter d with caron":"D caron majuscule","Latin capital letter d with stroke":"D barré majuscule","Latin capital letter e with breve":"E bref majuscule","Latin capital letter e with caron":"E caron majuscule","Latin capital letter e with dot above":"E point suscrit majuscule","Latin capital letter e with macron":"E macron majuscule","Latin capital letter e with ogonek":"E ogonek majuscule","Latin capital letter eng":"Eng majuscule","Latin capital letter g with breve":"G bref majuscule","Latin capital letter g with cedilla":"G cédille majuscule","Latin capital letter g with circumflex":"G accent circonflexe majuscule","Latin capital letter g with dot above":"G point suscrit majuscule","Latin capital letter h with circumflex":"H accent circonflexe majuscule","Latin capital letter h with stroke":"H barré majuscule","Latin capital letter i with breve":"I bref majuscule","Latin capital letter i with dot above":"I point suscrit majuscule","Latin capital letter i with macron":"I macron majuscule","Latin capital letter i with ogonek":"I ogonek majuscule","Latin capital letter i with tilde":"I tilde majuscule","Latin capital letter j with circumflex":"J accent circonflexe majuscule","Latin capital letter k with cedilla":"K cédille majuscule","Latin capital letter l with acute":"L accent aigu majuscule","Latin capital letter l with caron":"L caron majuscule","Latin capital letter l with cedilla":"L cédille majuscule","Latin capital letter l with middle dot":"L point médian majuscule","Latin capital letter l with stroke":"L barré majuscule","Latin capital letter n with acute":"N accent aigu majuscule","Latin capital letter n with caron":"N caron majuscule","Latin capital letter n with cedilla":"N cédille majuscule","Latin capital letter o with breve":"O bref majuscule","Latin capital letter o with double acute":"O double accent aigu majuscule","Latin capital letter o with macron":"O macron majuscule","Latin capital letter r with acute":"R accent aigu majuscule","Latin capital letter r with caron":"R caron majuscule","Latin capital letter r with cedilla":"R cédille majuscule","Latin capital letter s with acute":"S accent aigu majuscule","Latin capital letter s with caron":"S caron majuscule","Latin capital letter s with cedilla":"S cédille majuscule","Latin capital letter s with circumflex":"S circonflexe majuscule","Latin capital letter t with caron":"T caron majuscule","Latin capital letter t with cedilla":"T cédille majuscule","Latin capital letter t with stroke":"T barré majuscule","Latin capital letter u with breve":"U bref majuscule","Latin capital letter u with double acute":"U double accent aigu majuscule","Latin capital letter u with macron":"U macron majuscule","Latin capital letter u with ogonek":"U ogonek majuscule","Latin capital letter u with ring above":"U rond en chef majuscule","Latin capital letter u with tilde":"U tilde majuscule","Latin capital letter w with circumflex":"W circonflexe majuscule","Latin capital letter y with circumflex":"Y circonflexe majuscule","Latin capital letter y with diaeresis":"Y tréma majuscule","Latin capital letter z with acute":"Z accent circonflexe majuscule","Latin capital letter z with caron":"Z caron majuscule","Latin capital letter z with dot above":"Z point suscrit majuscule","Latin capital ligature ij":"Digramme soudé IJ majuscule","Latin capital ligature oe":"O-E entrelacé majuscule","Latin small letter a with breve":"A bref minuscule","Latin small letter a with macron":"A barre minuscule","Latin small letter a with ogonek":"A ogonek minuscule","Latin small letter c with acute":"C accent aigu minuscule","Latin small letter c with caron":"C caron minuscule","Latin small letter c with circumflex":"C circonflexe minuscule","Latin small letter c with dot above":"C point suscrit minuscule","Latin small letter d with caron":"C caron minuscule","Latin small letter d with stroke":"D barré minuscule","Latin small letter dotless i":"I sans point minuscule","Latin small letter e with breve":"E bref minuscule","Latin small letter e with caron":"E caron minuscule","Latin small letter e with dot above":"E point suscrit minuscule","Latin small letter e with macron":"E macron minuscule","Latin small letter e with ogonek":"E ogonek minuscule","Latin small letter eng":"Eng minuscule","Latin small letter f with hook":"Fonction","Latin small letter g with breve":"G bref minuscule","Latin small letter g with cedilla":"G cédille minuscule","Latin small letter g with circumflex":"G accent circonflexe minuscule","Latin small letter g with dot above":"G point suscrit minuscule","Latin small letter h with circumflex":"H accent circonflexe minuscule","Latin small letter h with stroke":"H barré minuscule","Latin small letter i with breve":"I bref minuscule","Latin small letter i with macron":"I macron minuscule","Latin small letter i with ogonek":"I ogonek minuscule","Latin small letter i with tilde":"I tilde minuscule","Latin small letter j with circumflex":"J accent circonflexe minuscule","Latin small letter k with cedilla":"K cédille minuscule","Latin small letter kra":"Kra minuscule","Latin small letter l with acute":"L accent aigu minuscule","Latin small letter l with caron":"L caron minuscule","Latin small letter l with cedilla":"L cédille minuscule","Latin small letter l with middle dot":"L point médian minuscule","Latin small letter l with stroke":"L barré minuscule","Latin small letter long s":"S long minuscule","Latin small letter n preceded by apostrophe":"Apostrophe N minuscule","Latin small letter n with acute":"N accent aigu minuscule","Latin small letter n with caron":"N caron minuscule","Latin small letter n with cedilla":"N cédille minuscule","Latin small letter o with breve":"O bref minuscule","Latin small letter o with double acute":"O double accent aigu minuscule","Latin small letter o with macron":"O macron minuscule","Latin small letter r with acute":"R accent aigu minuscule","Latin small letter r with caron":"R caron minuscule","Latin small letter r with cedilla":"R cédille minuscule","Latin small letter s with acute":"S accent aigu minuscule","Latin small letter s with caron":"S caron minuscule","Latin small letter s with cedilla":"S cédille minuscule","Latin small letter s with circumflex":"S circonflexe minuscule","Latin small letter t with caron":"T caron minuscule","Latin small letter t with cedilla":"T cédille minuscule","Latin small letter t with stroke":"T barré minuscule","Latin small letter u with breve":"U bref minuscule","Latin small letter u with double acute":"U double accent aigu minuscule","Latin small letter u with macron":"U macron minuscule","Latin small letter u with ogonek":"U ogonek minuscule","Latin small letter u with ring above":"U rond en chef minuscule","Latin small letter u with tilde":"U tilde minuscule","Latin small letter w with circumflex":"W circonflexe minuscule","Latin small letter y with circumflex":"Y circonflexe minuscule","Latin small letter z with acute":"Z accent circonflexe minuscule","Latin small letter z with caron":"Z caron minuscule","Latin small letter z with dot above":"Z point suscrit minuscule","Latin small ligature ij":"Digramme soudé IJ minuscule","Latin small ligature oe":"O-E entrelacé minuscule","Left aligned image":"Image alignée à gauche","Left double quotation mark":"Guillemet-apostrophe double culbuté","Left single quotation mark":"Guillemet-apostrophe culbuté","Left-pointing double angle quotation mark":"Guillemet double vers la gauche","leftwards arrow to bar":"Flèche vers la gauche avec barre de fin","leftwards dashed arrow":"Flèche en pointillés vers la gauche","leftwards double arrow":"Double flèche vers la gauche","Less-than or equal to":"Signe inférieur ou égal","Less-than sign":"Signe inférieur","Light blue":"Bleu clair","Light green":"Vert clair","Light grey":"Gris clair",Link:"Lien","Link URL":"URL du lien","Lira sign":"Lire","Livre tournois sign":"Livre tournois","Logical and":"Et logique","Logical or":"Ou logique",Macron:"Macron","Manat sign":"Manat","Media URL":"URL de média","media widget":"widget média","Merge cell down":"Fusionner la cellule en-dessous","Merge cell left":"Fusionner la cellule à gauche","Merge cell right":"Fusionner la cellule à droite","Merge cell up":"Fusionner la cellule au-dessus","Merge cells":"Fusionner les cellules","Mill sign":"Moulin","Minus sign":"Moins","Multiplication sign":"Multiplication","N-ary product":"Produit","N-ary summation":"Somme",Nabla:"Nabla","Naira sign":"Naira","New sheqel sign":"Shekel",Next:"Suivant",None:"Aucun","Nordic mark sign":"Mark nordique","Not an element of":"N'appartient pas à","Not equal to":"Différent de","Not sign":"Négation logique","Numbered List":"Liste numérotée","on with exclamation mark with left right arrow above":"Allumé avec flèches vers la gauche et la droite","Open in a new tab":"Ouvrir dans un nouvel onglet","Open link in new tab":"Ouvrir le lien dans un nouvel onglet",Orange:"Orange",Outset:"Relief extérieur",Overline:"Macron long",Padding:"Remplissage pour aérer le texte","Page break":"Séparation de page",Paragraph:"Paragraphe","Paragraph sign":"Fin de paragraphe","Partial differential":"Partiellement différent","Paste the media URL in the input.":"Coller l'URL du média","Per mille sign":"Pour mille","Per ten thousand sign":"Pour dix milles","Peseta sign":"Peseta","Peso sign":"Peso","Pink marker":"Marqueur rose","Plain text":"Texte brute","Plus-minus sign":"Plus ou moins","Pound sign":"Livre sterling",Previous:"Précedent","Proportional to":"Proportionnel à",Purple:"Violet","Question exclamation mark":"Point d'interrogation et exclamation",Red:"Rouge","Red pen":"Crayon rouge",Redo:"Restaurer","Registered sign":"Registered","Remove color":"Enlever la couleur","Remove Format":"Enlever le format","Remove highlight":"Enlever le surlignage","Reversed paragraph sign":"Fin de paragraphe inversé","Rich Text Editor":"Éditeur de texte enrichi","Rich Text Editor, %0":"Éditeur de texte enrichi, %0",Ridge:"Relief","Right aligned image":"Image alignée à droite","Right double quotation mark":"Guillemet-apostrophe double","Right single quotation mark":"Guillemet-apostrophe","Right-pointing double angle quotation mark":"Guillemet double vers la droite","rightwards arrow to bar":"Flèche vers la droite avec barre de fin","rightwards dashed arrow":"Flèche en pointillés vers la droite","rightwards double arrow":"Double flèche vers la droite",Row:"Ligne","Ruble sign":"Rouble","Rupee sign":"Roupie",Save:"Enregistrer","Section sign":"Paragraphe","Select column":"","Select row":"","Show more items":"Montrer plus d'éléments","Side image":"Image latérale","Single left-pointing angle quotation mark":"Guillemet simple vers la gauche","Single low-9 quotation mark":"Guillemet-virgule inférieur","Single right-pointing angle quotation mark":"Guillemet simple vers la droite",Small:"Petit",Solid:"Continu","soon with rightwards arrow above":"Bientôt avec flèche vers la droite","Special characters":"Caractères spéciaux","Spesmilo sign":"Spesmilo","Split cell horizontally":"Scinder la cellule horizontalement","Split cell vertically":"Scinder la cellule verticalement","Square root":"Racine carrée",Strikethrough:"Barré",Style:"Style","Table alignment toolbar":"Barre d'outils pour modifier l'alignement du tableau","Table cell text alignment":"Alignement du texte de la cellule","Table properties":"Propriétés du tableau","Table toolbar":"Barre d'outils des tableaux","Tenge sign":"Tenge","Text alignment":"Alignement du texte","Text alignment toolbar":"Barre d'outils d'alignement du texte","Text alternative":"Texte alternatif","Text highlight toolbar":"Barre d'outils du surlignage","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"La couleur est invalide. Essayez \"#FF0000\" ou \"rgb(255,0,0)\" ou \"red\".","The URL must not be empty.":"L'URL ne doit pas être vide.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"La valeur est invalide. Essayez \"10px\" ou \"2em\" ou simplement \"2\".","There exists":"Existe","This link has no URL":"Ce lien n'a pas d'URL","This media URL is not supported.":"Cette URL de média n'est pas supportée.","Tilde operator":"Tilde",Tiny:"Minuscule","Tip: Paste the URL into the content to embed faster.":"Astuce : Copier l'URL du média dans le contenu pour l'insérer plus rapidement","top with upwards arrow above":"Haut avec flèche vers le haut","Trade mark sign":"Marque déposée","Tugrik sign":"Tugrik","Turkish lira sign":"Lire turque",Turquoise:"Turquoise","Two dot leader":"Deux points","Type or paste your content here.":"Noter ou coller votre contenu ici","Type your title":"Rentrer votre titre",Underline:"Souligné",Undo:"Annuler",Union:"Union",Unlink:"Supprimer le lien","up down arrow with base":"Flèche haut et bas avec barre de fin","Upload failed":"Échec de l'envoi","Upload in progress":"Téléchargement en cours","upwards arrow to bar":"Flèche vers le haut avec barre de fin","upwards dashed arrow":"Flèche en pointillés vers le haut","upwards double arrow":"Double flèche vers le haut","Vertical text alignment toolbar":"Barre d'outils pour modifier l'alignement vertical du texte","Vulgar fraction one half":"Un demi","Vulgar fraction one quarter":"Un quart","Vulgar fraction three quarters":"Trois quarts",White:"Blanc","Widget toolbar":"Barre d'outils du widget",Width:"Largeur","Won sign":"Won",Yellow:"Jaune","Yellow marker":"Marqueur jaune","Yen sign":"Yen"} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/gl.js b/public/js/ckedit5/20.0.0_/translations/gl.js new file mode 100644 index 0000000..8884cef --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/gl.js @@ -0,0 +1 @@ +(function(d){ const l = d['gl'] = d['gl'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 de %1","Align cell text to the bottom":"Aliñar o texto da cela á base","Align cell text to the center":"Aliñar o texto da cela ao centro","Align cell text to the left":"Aliñar o texto da cela á esquerda","Align cell text to the middle":"Aliñar o texto da cela ao medio","Align cell text to the right":"Aliña o texto da cela á dereita","Align cell text to the top":"Aliñar o texto da cela á parte superior","Align center":"Centrar horizontalmente","Align left":"Aliñar á esquerda","Align right":"Aliñar á dereita","Align table to the left":"Aliñar a táboa á esquerda","Align table to the right":"Aliñar a táboa á dereita",Alignment:"Aliñamento","Almost equal to":"Case igual a",Angle:"Ángulo","Approximately equal to":"Aproximadamente igual a",Aquamarine:"Augamariña","Asterisk operator":"Operador asterisco","Austral sign":"Símbolo do austral","back with leftwards arrow above":"cara atrás, coa frecha cara á esquerda enriba",Background:"Fondo",Big:"Grande","Bitcoin sign":"Símbolo do Bitcoin",Black:"Negro","Block quote":"Cita de bloque",Blue:"Azul","Blue marker":"Marcador azul",Bold:"Negra",Border:"Bordo","Bulleted List":"Lista viñeteada",Cancel:"Cancelar","Cedi sign":"Símbolo do cedi","Cell properties":"Propiedades da cela","Cent sign":"Símbolo do centavo","Center table":"Centrar a táboa","Centered image":"Imaxe centrada horizontalmente","Change image text alternative":"Cambiar o texto alternativo da imaxe","Character categories":"Categorías de caracteres","Choose heading":"Escolla o título",Code:"Código","Colon sign":"Símbolo do colón",Color:"Cor","Color picker":"Selector de cores",Column:"Columna","Contains as member":"Conten a","Copyright sign":"Símbolo de copyright","Cruzeiro sign":"Símbolo do cruceiro","Currency sign":"Símbolo de moeda",Dashed:"Raiado","Decrease indent":"Reducir sangrado",Default:"Predeterminada","Degree sign":"Signo de grao","Delete column":"Eliminar columna","Delete row":"Eliminar fila","Dim grey":"Gris fume",Dimensions:"Dimensións","Division sign":"Signo de división","Document colors":"Cores do documento","Dollar sign":"Símbolo do dolar","Dong sign":"Símbolo do dong",Dotted:"Punteado",Double:"Dobre","Double dagger":"Daga dobre","Double exclamation mark":"Marca de dobre exclamación","Double low-9 quotation mark":"Marca de acoutamento comiña dobre baixo-9","Double question mark":"Marca de dobre interrogación",Downloadable:"Descargábel","downwards arrow to bar":"frecha cara abaixo con tope","downwards dashed arrow":"frecha de guións cara abaixo","downwards double arrow":"frecha dobre cara abaixo","Drachma sign":"Símbolo do dracma","Dropdown toolbar":"Barra de ferramentas despregábel","Edit link":"Editar a ligazón","Editor toolbar":"Barra de ferramentas do editor","Element of":"Pertenza","Em dash":"Guión longo (raia)","Empty set":"Conxunto baleiro","En dash":"Guión curto","end with leftwards arrow above":"final, coa frecha cara á esquerda enriba","Enter image caption":"Introduza o título da imaxe","Euro sign":"Símbolo do euro","Euro-currency sign":"Símbolo da moeda do euro","Exclamation question mark":"Marca de exclamación interrogación","Font Background Color":"Cor do fondo da letra","Font Color":"Cor da letra","Font Family":"Familia tipográfica","Font Size":"Tamaño da letra","For all":"Para todo","Fraction slash":"Barra de fracción","French franc sign":"Símbolo do franco francés","Full size image":"Imaxe a tamaño completo","German penny sign":"Símbolo do penique alemán","Greater-than or equal to":"Maior ou igual que","Greater-than sign":"Maior que",Green:"Verde","Green marker":"Marcador verde","Green pen":"Pluma verde",Grey:"Gris",Groove:"Rañura","Guarani sign":"Símbolo do guaraní","Header column":"Cabeceira de columna","Header row":"Cabeceira de fila",Heading:"Título","Heading 1":"Título 1","Heading 2":"Título 2","Heading 3":"Título 3","Heading 4":"Título 4","Heading 5":"Título 5","Heading 6":"Título 6",Height:"Alto",Highlight:"Resaltado","Horizontal ellipsis":"Elipse horizontal","Horizontal line":"Liña horizontal","Horizontal text alignment toolbar":"Barra de ferramentas de aliñamento de texto horizontal","Hryvnia sign":"Símbolo do hryvnia",Huge:"Enorme","Identical to":"Idéntico a","Image toolbar":"Barra de ferramentas de imaxe","image widget":"Trebello de imaxe","Increase indent":"Aumentar sangrado","Indian rupee sign":"Símbolo da rupia india",Infinity:"Infinito","Insert code block":"Inserir bloque de código","Insert column left":"Inserir columna á esquerda","Insert column right":"Inserir columna á dereita","Insert image":"Inserir imaxe","Insert media":"Inserir elemento multimedia","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Inserir fila enriba","Insert row below":"Inserir fila embaixo","Insert table":"Inserir táboa",Inset:"Inserción",Integral:"Integral",Intersection:"Intersección","Inverted exclamation mark":"Marca invertida de exclamación","Inverted question mark":"Marca invertida de interrogación",Italic:"Itálica",Justify:"Xustificado","Justify cell text":"Xustificar o texto da cela","Kip sign":"Símbolo do kip","Latin capital letter a with breve":"A maiúsculo latino con acento breve","Latin capital letter a with macron":"A maiúsculo latino con macron","Latin capital letter a with ogonek":"A maiúsculo latino con ogonek","Latin capital letter c with acute":"C maiúsculo latino con acento agudo","Latin capital letter c with caron":"C maiúsculo latino con caron","Latin capital letter c with circumflex":"C maiúsculo latino con acento circunflexo","Latin capital letter c with dot above":"C maiúsculo latino con punto enriba","Latin capital letter d with caron":"D maiúsculo latino con caron","Latin capital letter d with stroke":"D maiúsculo latino barrado","Latin capital letter e with breve":"E maiúsculo latino con acento breve","Latin capital letter e with caron":"E maiúsculo latino con caron","Latin capital letter e with dot above":"E maiúsculo latino con punto enriba","Latin capital letter e with macron":"E maiúsculo latino con macron","Latin capital letter e with ogonek":"E maiúsculo latino con ogonek","Latin capital letter eng":"Eng (engma) mziúsculo latino","Latin capital letter g with breve":"G maiúsculo latino con acento breve","Latin capital letter g with cedilla":"G maiúsculo latino con cedilla","Latin capital letter g with circumflex":"G maiúsculo latino con acento circunflexo","Latin capital letter g with dot above":"G maiúsculo latino con punto enriba","Latin capital letter h with circumflex":"H maiúsculo latino con acento circunflexo","Latin capital letter h with stroke":"H maiúsculo latino barrado","Latin capital letter i with breve":"I maiúsculo latino con acento breve","Latin capital letter i with dot above":"I maiúsculo latino con punto enriba","Latin capital letter i with macron":"I maiúsculo latino con macron","Latin capital letter i with ogonek":"I maiúsculo latino con ogonek","Latin capital letter i with tilde":"I maiúsculo latino con til","Latin capital letter j with circumflex":"J maiúsculo latino con acento circunflexo","Latin capital letter k with cedilla":"K maiúsculo latino con cedilla","Latin capital letter l with acute":"L maiúsculo latino con acento agudo","Latin capital letter l with caron":"L maiúsculo latino con caron","Latin capital letter l with cedilla":"L maiúsculo latino con cedilla","Latin capital letter l with middle dot":"L maiúsculo latino con punto medio","Latin capital letter l with stroke":"L maiúsculo latino barrado","Latin capital letter n with acute":"N maiúsculo latino con acento agudo","Latin capital letter n with caron":"N maiúsculo latino con caron","Latin capital letter n with cedilla":"N maiúsculo latino con cedilla","Latin capital letter o with breve":"O maiúsculo latino con acento breve","Latin capital letter o with double acute":"O maiúsculo latino con acento agudo dobre","Latin capital letter o with macron":"O maiúsculo latino con macron","Latin capital letter r with acute":"R maiúsculo latino con acento agudo","Latin capital letter r with caron":"R maiúsculo latino con caron","Latin capital letter r with cedilla":"R maiúsculo latino con cedilla","Latin capital letter s with acute":"S maiúsculo latino con acento agudo","Latin capital letter s with caron":"S maiúsculo latino con caron","Latin capital letter s with cedilla":"S maiúsculo latino con cedilla","Latin capital letter s with circumflex":"S maiúsculo latino con acento circunflexo","Latin capital letter t with caron":"T maiúsculo latino con caron","Latin capital letter t with cedilla":"T maiúsculo latino con cedilla","Latin capital letter t with stroke":"T maiúsculo latino barrado","Latin capital letter u with breve":"U maiúsculo latino con acento breve","Latin capital letter u with double acute":"U maiúsculo latino con acento agudo dobre","Latin capital letter u with macron":"U maiúsculo latino con macron","Latin capital letter u with ogonek":"U maiúsculo latino con ogonek","Latin capital letter u with ring above":"U maiúsculo latino con anel enriba","Latin capital letter u with tilde":"U maiúsculo latino con til","Latin capital letter w with circumflex":"W maiúsculo latino con acento circunflexo","Latin capital letter y with circumflex":"Y maiúsculo latino con acento circunflexo","Latin capital letter y with diaeresis":"Y maiúsculo latino con diérese","Latin capital letter z with acute":"Z maiúsculo latino con acento agudo","Latin capital letter z with caron":"Z maiúsculo latino con caron","Latin capital letter z with dot above":"Z maiúsculo latino con punto enriba","Latin capital ligature ij":"Ligadura IJ maiúsculo latino","Latin capital ligature oe":"Ligadura OE maiúsculo latino","Latin small letter a with breve":"a minúsculo latino con acento breve","Latin small letter a with macron":"a minúsculo latino con macron","Latin small letter a with ogonek":"a minúsculo latino con ogonek","Latin small letter c with acute":"c minúsculo latino con acento agudo","Latin small letter c with caron":"cminúsculo latino con caron","Latin small letter c with circumflex":"c minúsculo latino con acento circunflexo","Latin small letter c with dot above":"c minúsculo latino con punto enriba","Latin small letter d with caron":"d minúsculo latino con caron","Latin small letter d with stroke":"d minúsculo latino barrado","Latin small letter dotless i":"i minúsculo latino sen punto","Latin small letter e with breve":"e minúsculo latino con acento breve","Latin small letter e with caron":"e minúsculo latino con caron","Latin small letter e with dot above":"e minúsculo latino con punto enriba","Latin small letter e with macron":"e minúsculo latino con macron","Latin small letter e with ogonek":"e minúsculo latino con ogonek","Latin small letter eng":"Eng (engma) minúsculo latino","Latin small letter f with hook":"f minúsculo latino con gancho","Latin small letter g with breve":"g minúsculo latino con acento breve","Latin small letter g with cedilla":"g minúsculo latino con cedilla","Latin small letter g with circumflex":"g minúsculo latino con acento circunflexo","Latin small letter g with dot above":"g minúsculo latino con punto enriba","Latin small letter h with circumflex":"h minúsculo latino con acento circunflexo","Latin small letter h with stroke":"h minúsculo latino barrado","Latin small letter i with breve":"i minúsculo latino con acento breve","Latin small letter i with macron":"i minúsculo latino con macron","Latin small letter i with ogonek":"i minúsculo latino con ogonek","Latin small letter i with tilde":"i minúsculo latino con til","Latin small letter j with circumflex":"j minúsculo latino con acento circunflexo","Latin small letter k with cedilla":"k minúsculo latino con cedilla","Latin small letter kra":"Letra kra minúscula","Latin small letter l with acute":"l minúsculo latino con acento agudo","Latin small letter l with caron":"l minúsculo latino con caron","Latin small letter l with cedilla":"l minúsculo latino con cedilla","Latin small letter l with middle dot":"l minúsculo latino con punto medio","Latin small letter l with stroke":"l minúsculo latino barrado","Latin small letter long s":"s minúsculo latino larga","Latin small letter n preceded by apostrophe":"n minúsculo latino precedido de apostrofe","Latin small letter n with acute":"n minúsculo latino con acento agudo","Latin small letter n with caron":"n minúsculo latino con caron","Latin small letter n with cedilla":"n minúsculo latino con cedilla","Latin small letter o with breve":"o minúsculo latino con acento breve","Latin small letter o with double acute":"o minúsculo latino con acento agudo dobre","Latin small letter o with macron":"o minúsculo latino con macron","Latin small letter r with acute":"r minúsculo latino con acento agudo","Latin small letter r with caron":"r minúsculo latino con caron","Latin small letter r with cedilla":"r minúsculo latino con cedilla","Latin small letter s with acute":"s minúsculo latino con acento agudo","Latin small letter s with caron":"s minúsculo latino con caron","Latin small letter s with cedilla":"s minúsculo latino con cedilla","Latin small letter s with circumflex":"s minúsculo latino con acento circunflexo","Latin small letter t with caron":"t minúsculo latino con caron","Latin small letter t with cedilla":"t minúsculo latino con cedilla","Latin small letter t with stroke":"t minúsculo latino barrado","Latin small letter u with breve":"u minúsculo latino con acento breve","Latin small letter u with double acute":"u minúsculo latino con acento agudo dobre","Latin small letter u with macron":"u minúsculo latino con macron","Latin small letter u with ogonek":"u minúsculo latino con ogonek","Latin small letter u with ring above":"u minúsculo latino con anel enriba","Latin small letter u with tilde":"u minúsculo latino con til","Latin small letter w with circumflex":"w minúsculo latino con acento circunflexo","Latin small letter y with circumflex":"y minúsculo latino con acento circunflexo","Latin small letter z with acute":"z minúsculo latino con acento agudo","Latin small letter z with caron":"z minúsculo latino con caron","Latin small letter z with dot above":"z minúsculo latino con punto enriba","Latin small ligature ij":"Ligadura ij minúsculo latino","Latin small ligature oe":"Ligadura oe minúsculo latino","Left aligned image":"Imaxe aliñada á esquerda","Left double quotation mark":"Marca de acoutamento comiña dobre esquerda","Left single quotation mark":"Marca de acoutamento comiña sinxela esquerda","Left-pointing double angle quotation mark":"Marca de acoutamento ángulo esquerdo dobre","leftwards arrow to bar":"frecha cara á esquerda con tope","leftwards dashed arrow":"frecha de guións cara á esquerda","leftwards double arrow":"frecha dobre cara á esquerda","Less-than or equal to":"Menor ou igual que","Less-than sign":"Menor que","Light blue":"Azul claro","Light green":"Verde claro","Light grey":"Gris claro",Link:"Ligar","Link URL":"URL de ligazón","Lira sign":"Símbolo da lira","Livre tournois sign":"Símbolo da libra tournois","Logical and":"E lóxico (conxunción)","Logical or":"Ou lóxico (disxunción)",Macron:"Macron","Manat sign":"Símbolo do manat","Media URL":"URL multimedia","media widget":"trebello multimedia","Merge cell down":"Combinar cela cara abaixo","Merge cell left":"Combinar cela cara a esquerda","Merge cell right":"Combinar cela cara a dereita","Merge cell up":"Combinar cela cara arriba","Merge cells":"Combinar celas","Mill sign":"Símbolo do mill","Minus sign":"Signo menos","Multiplication sign":"Signo de multiplicación","N-ary product":"Produto de n elementos, produtorio","N-ary summation":"Suma de n elementos, sumatorio",Nabla:"Nabla (Gradiente)","Naira sign":"Símbolo da naira","New sheqel sign":"Símbolo do novo xequel",Next:"Seguinte",None:"Ningún","Nordic mark sign":"Símbolo do marco nordico","Not an element of":"Non pertenza","Not equal to":"Distinto de","Not sign":"Signo non","Numbered List":"Lista numerada","on with exclamation mark with left right arrow above":"activado, con signo de exclamación coa frecha esquerda-dereita enrriba","Open in a new tab":"Abrir nunha nova lapela","Open link in new tab":"Abrir a ligazón nunha nova lapela",Orange:"Laranxa",Outset:"Inicio",Overline:"Liña superior",Padding:"Recheo","Page break":"Salto de páxina",Paragraph:"Parágrafo","Paragraph sign":"Signo de parágrafo","Partial differential":"Derivada parcial","Paste the media URL in the input.":"Pegue o URL do medio na entrada.","Per mille sign":"Signo de por milleiro","Per ten thousand sign":"Signo de por dez mil","Peseta sign":"Símbolo da peseta","Peso sign":"Símbolo do peso","Pink marker":"Marcador rosa","Plain text":"Texto simple","Plus-minus sign":"Signo más/menos","Pound sign":"Símbolo da libra",Previous:"Anterior","Proportional to":"Proporcional a",Purple:"Púrpura","Question exclamation mark":"Marca de interrogación exclamación",Red:"Vermello","Red pen":"Pluma vermella",Redo:"Refacer","Registered sign":"Símbolo de rexistrado","Remove color":"Retirar a cor","Remove Format":"Retirar o formato","Remove highlight":"Retirar o resaltado","Reversed paragraph sign":"Signo invertido do parágrafo","Rich Text Editor":"Editor de texto mellorado","Rich Text Editor, %0":"Editor de texto mellorado, %0",Ridge:"Crista","Right aligned image":"Imaxe aliñada á dereita","Right double quotation mark":"Marca de acoutamento comiña dobre dereita","Right single quotation mark":"Marca de acoutamento comiña sinxela dereita","Right-pointing double angle quotation mark":"Marca de acoutamento ángulo dereito dobre","rightwards arrow to bar":"frecha cara á dereita con tope","rightwards dashed arrow":"frecha de guións cara á dereita","rightwards double arrow":"frecha dobre cara á dereita",Row:"Fila","Ruble sign":"Símbolo do rublo","Rupee sign":"Símbolo da rupia",Save:"Gardar","Section sign":"Signo de sección","Select all":"Seleccionar todo","Select column":"Seleccionar columna","Select row":"Seleccionar fila","Show more items":"Amosar máis elementos","Side image":"Lado da imaxe","Single left-pointing angle quotation mark":"Marca de acoutamento ángulo esquerdo sinxelo","Single low-9 quotation mark":"Marca de acoutamento comiña sinxela baixo-9","Single right-pointing angle quotation mark":"Marca de acoutamento ángulo dereito sinxelo",Small:"Pequena",Solid:"Sólido","soon with rightwards arrow above":"logo, coa frecha cara á dereita enriba","Special characters":"Caracteres especiais","Spesmilo sign":"Símbolo do spesmilo","Split cell horizontally":"Dividir cela en horizontal","Split cell vertically":"Dividir cela en vertical","Square root":"Raíz cadrada",Strikethrough:"Riscado",Style:"Estilo","Table alignment toolbar":"Barra de ferramentas de aliñamento da táboa","Table cell text alignment":"Aliñamento do texto das celas da táboa","Table properties":"Propiedades da táboa","Table toolbar":"Barra de ferramentas de táboas","Tenge sign":"Símbolo do tenge","Text alignment":"Aliñamento do texto","Text alignment toolbar":"Barra de ferramentas de aliñamento de textos","Text alternative":"Texto alternativo","Text highlight toolbar":"Barra de ferramentas para resaltar texto","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"A cor non é válida. Probe «#FF0000» ou «rgb(255,0,0)» ou «vermello».","The URL must not be empty.":"O URL non debe estar baleiro.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"O valor non é válido. Probe «10px» ou «2em» ou simplemente «2».","There exists":"Existe","This link has no URL":"Esta ligazón non ten URL","This media URL is not supported.":"Este URL multimedia non é compatible.","Tilde operator":"Operador til",Tiny:"Diminuta","Tip: Paste the URL into the content to embed faster.":"Consello: Pegue o URL no contido para incrustalo máis rápido.","top with upwards arrow above":"superior, coa frecha cara arriba enriba","Trade mark sign":"Símbolo de marca de fábrica","Tugrik sign":"Símbolo do tugrik","Turkish lira sign":"Símbolo da lira turca",Turquoise:"Turquesa","Two dot leader":"Líder de dous puntos","Type or paste your content here.":"Escriba ou pegue o seu contido aquí.","Type your title":"Escriba o seu título",Underline:"Subliñado",Undo:"Desfacer",Union:"Unión",Unlink:"Desligar","up down arrow with base":"frecha arriba-abaixo con base","Upload failed":"Fallou o envío","Upload in progress":"Envío en proceso","upwards arrow to bar":"frecha cara arriba con tope","upwards dashed arrow":"frecha de guións cara arriba","upwards double arrow":"frecha dobre cara arriba","Vertical text alignment toolbar":"Barra de ferramentas de aliñamento de texto vertical","Vulgar fraction one half":"Fracción común dun medio","Vulgar fraction one quarter":"Fracción común dun cuarto","Vulgar fraction three quarters":"Fracción común de tres cuartos",White:"Branco","Widget toolbar":"Barra de ferramentas de trebellos",Width:"Largo","Won sign":"Símbolo do won",Yellow:"Amarelo","Yellow marker":"Marcador marelo","Yen sign":"Símbolo do yen"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/gu.js b/public/js/ckedit5/20.0.0_/translations/gu.js new file mode 100644 index 0000000..afab566 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/gu.js @@ -0,0 +1 @@ +(function(d){ const l = d['gu'] = d['gu'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"Block quote":" વિચાર ટાંકો",Bold:"ઘાટુ - બોલ્ડ્",Code:"",Italic:"ત્રાંસુ - ઇટલિક્",Strikethrough:"",Underline:"નીચે લિટી - અન્ડરલાઇન્"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/he.js b/public/js/ckedit5/20.0.0_/translations/he.js new file mode 100644 index 0000000..f70d3f2 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/he.js @@ -0,0 +1 @@ +(function(d){ const l = d['he'] = d['he'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"0% מתוך %1","Align center":"יישור באמצע","Align left":"יישור לשמאל","Align right":"יישור לימין",Aquamarine:"",Big:"",Black:"","Block quote":"בלוק ציטוט",Blue:"","Blue marker":"סימון כחול",Bold:"מודגש","Bulleted List":"רשימה מנוקדת",Cancel:"ביטול","Centered image":"תמונה ממרוכזת","Change image text alternative":"שינוי טקסט אלטרנטיבי לתמונה","Choose heading":"בחר סוג כותרת",Code:"קוד",Default:"ברירת מחדל","Dim grey":"","Document colors":"",Downloadable:"","Dropdown toolbar":"סרגל כלים נפתח","Edit link":"עריכת קישור","Editor toolbar":"סרגל הכלים","Enter image caption":"הזן כותרת תמונה","Font Background Color":"","Font Color":"","Font Family":"","Font Size":"גודל טקסט","Full size image":"תמונה בפריסה מלאה",Green:"","Green marker":"סימון ירוק","Green pen":"עט ירוק",Grey:"",Heading:"כותרת","Heading 1":"כותרת 1","Heading 2":"כותרת 2","Heading 3":"כותרת 3","Heading 4":"כותרת 4","Heading 5":"כותרת 5","Heading 6":"כותרת 6",Highlight:"הדגשה","Horizontal line":"קו אופקי",Huge:"","Image toolbar":"סרגל תמונה","image widget":"תמונה","Insert image":"הוספת תמונה","Insert paragraph after block":"","Insert paragraph before block":"",Italic:"נטוי",Justify:"מרכוז גבולות","Left aligned image":"תמונה מיושרת לשמאל","Light blue":"","Light green":"","Light grey":"",Link:"קישור","Link URL":"קישור כתובת אתר",Next:"הבא","Numbered List":"רשימה ממוספרת","Open in a new tab":"","Open link in new tab":"פתח קישור בכרטיסייה חדשה",Orange:"",Paragraph:"פיסקה","Pink marker":"סימון וורוד",Previous:"הקודם",Purple:"",Red:"","Red pen":"עט אדום",Redo:"ביצוע מחדש","Remove color":"","Remove highlight":"הסר הדגשה","Rich Text Editor":"עורך טקסט עשיר","Rich Text Editor, %0":"עורך טקסט עשיר, %0","Right aligned image":"תמונה מיושרת לימין",Save:"שמירה","Show more items":"הצד פריטים נוספים","Side image":"תמונת צד",Small:"",Strikethrough:"קו חוצה","Text alignment":"יישור טקסט","Text alignment toolbar":"סרגל כלים יישור טקסט","Text alternative":"טקסט אלטרנטיבי","Text highlight toolbar":"סרגל הדגשת טקסט","This link has no URL":"לקישור זה אין כתובת אתר",Tiny:"",Turquoise:"","Type or paste your content here.":"הזן או הדבק את התוכן כאן","Type your title":"הזן כותרת",Underline:"קו תחתון",Undo:"ביטול",Unlink:"ביטול קישור","Upload failed":"העלאה נכשלה","Upload in progress":"העלאה מתבצעת",White:"","Widget toolbar":"סרגל יישומון",Yellow:"","Yellow marker":"סימון צהוב"} );l.getPluralForm=function(n){return (n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/hr.js b/public/js/ckedit5/20.0.0_/translations/hr.js new file mode 100644 index 0000000..786e625 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/hr.js @@ -0,0 +1 @@ +(function(d){ const l = d['hr'] = d['hr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 od %1","Align cell text to the bottom":"Tekst ćelije poravnaj prema dolje","Align cell text to the center":"Tekst ćelije poravnaj u sredinu","Align cell text to the left":"Tekst ćelije poravnaj lijevo","Align cell text to the middle":"Tekst ćelije poravnaj u sredinu","Align cell text to the right":"Tekst ćelije poravnaj udesno","Align cell text to the top":"Tekst ćelije poravnaj prema gore","Align center":"Poravnaj po sredini","Align left":"Poravnaj ulijevo","Align right":"Poravnaj udesno","Align table to the left":"Poravnaj tablicu ulijevo","Align table to the right":"Poravnaj tablicu udesno",Alignment:"Poravnanje",Aquamarine:"Akvamarin",Background:"Pozadina",Big:"Veliki",Black:"Crna","Block quote":"Blok citat",Blue:"Plava","Blue marker":"Plavi marker",Bold:"Podebljano",Border:"Granica","Bulleted List":"Obična lista",Cancel:"Poništi","Cell properties":"Svojstva ćelije","Center table":"Centriraj tablicu","Centered image":"Centrirana slika","Change image text alternative":"Promijeni alternativni tekst slike","Choose heading":"Odaberite naslov",Code:"Kod",Color:"Boja","Color picker":"Birač boje",Column:"Kolona",Dashed:"Crtičasta","Decrease indent":"Umanji uvlačenje",Default:"Podrazumijevano","Delete column":"Obriši kolonu","Delete row":"Obriši red","Dim grey":"Tamnosiva",Dimensions:"Dimenzije","Document colors":"Boje dokumenta",Dotted:"Točkasta",Double:"Dvostruka",Downloadable:"Moguće preuzeti","Dropdown toolbar":"Traka padajućeg izbornika","Edit link":"Uredi vezu","Editor toolbar":"Traka uređivača","Enter image caption":"Unesite naslov slike","Font Background Color":"Pozadinska Boja Fonta","Font Color":"Boja Fonta","Font Family":"Obitelj fonta","Font Size":"Veličina fonta","Full size image":"Slika pune veličine",Green:"Zelena","Green marker":"Zeleni marker","Green pen":"Zeleno pero",Grey:"Siva",Groove:"","Header column":"Kolona zaglavlja","Header row":"Red zaglavlja",Heading:"Naslov","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6",Height:"Visina",Highlight:"Istakni","Horizontal line":"Vodoravna linija","Horizontal text alignment toolbar":"Alatna traka za horizontalno poravnanje teksta",Huge:"Ogroman","Image toolbar":"Traka za slike","image widget":"Slika widget","Increase indent":"Povećaj uvlačenje","Insert code block":"Umetni blok koda","Insert column left":"Umetni stupac lijevo","Insert column right":"Umetni stupac desno","Insert image":"Umetni sliku","Insert media":"Ubaci medij","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Ubaci red iznad","Insert row below":"Ubaci red ispod","Insert table":"Ubaci tablicu",Inset:"",Italic:"Ukošeno",Justify:"Razvuci","Justify cell text":"Razvuci tekst ćelije","Left aligned image":"Lijevo poravnata slika","Light blue":"Svijetloplava","Light green":"Svijetlozelena","Light grey":"Svijetlosiva",Link:"Veza","Link URL":"URL veze","Media URL":"URL medija","media widget":"dodatak za medije","Merge cell down":"Spoji ćelije prema dolje","Merge cell left":"Spoji ćelije prema lijevo","Merge cell right":"Spoji ćelije prema desno","Merge cell up":"Spoji ćelije prema gore","Merge cells":"Spoji ćelije",Next:"Sljedeći",None:"Nikakva","Numbered List":"Brojčana lista","Open in a new tab":"Otvori u novoj kartici","Open link in new tab":"Otvori vezu u novoj kartici",Orange:"Narančasta",Outset:"",Padding:"Podstava","Page break":"Prijelom stranice",Paragraph:"Paragraf","Paste the media URL in the input.":"Zalijepi URL medija u ulaz.","Pink marker":"Rozi marker","Plain text":"Običan tekst",Previous:"Prethodni",Purple:"Ljubičasta",Red:"Crvena","Red pen":"Crveno pero",Redo:"Ponovi","Remove color":"Ukloni boju","Remove Format":"Ukloni format","Remove highlight":"Ukloni isticanje","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Ridge:"Greben","Right aligned image":"Slika poravnata desno",Row:"Red",Save:"Snimi","Select all":"Odaberi sve","Select column":"Odaberi stupac","Select row":"Odaberi redak","Show more items":"Prikaži više stavaka","Side image":"Slika sa strane",Small:"Mali",Solid:"Neprekidna","Split cell horizontally":"Razdvoji ćeliju vodoravno","Split cell vertically":"Razdvoji ćeliju okomito",Strikethrough:"Precrtano",Style:"Stil","Table alignment toolbar":"Alatna traka za poravnanje tablice","Table cell text alignment":"Poravnanje teksta ćelije tablice","Table properties":"Svojstva tablice","Table toolbar":"Traka za tablice","Text alignment":"Poravnanje teksta","Text alignment toolbar":"Traka za poravnanje","Text alternative":"Alternativni tekst","Text highlight toolbar":"Traka za isticanje teksta","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Neispravna boja. Pokušajte \"#FF0000\" ili \"rgb(255,0,0)\" ili \"red\".","The URL must not be empty.":"URL ne smije biti prazan.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Neispravna vrijednost. Pokušajte \"10px\" ili \"2em\" ili jednostavno \"2\".","This link has no URL":"Ova veza nema URL","This media URL is not supported.":"URL nije podržan.",Tiny:"Sićušan","Tip: Paste the URL into the content to embed faster.":"Natuknica: Za brže ugrađivanje zalijepite URL u sadržaj.",Turquoise:"Tirkizna","Type or paste your content here.":"Utipkajte ili zalijepite Vaš sadržaj ovdje.","Type your title":"Utipkajte naslov",Underline:"Podcrtavanje",Undo:"Poništi",Unlink:"Ukloni vezu","Upload failed":"Slanje nije uspjelo","Upload in progress":"Slanje u tijeku","Vertical text alignment toolbar":"Alatna traka za vertikalno poravnanje teksta",White:"Bijela","Widget toolbar":"Traka sa spravicama",Width:"Širina",Yellow:"Žuta","Yellow marker":"Žuti marker"} );l.getPluralForm=function(n){return n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/hu.js b/public/js/ckedit5/20.0.0_/translations/hu.js new file mode 100644 index 0000000..0c4f086 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/hu.js @@ -0,0 +1 @@ +(function(d){ const l = d['hu'] = d['hu'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 / %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Középre igazítás","Align left":"Balra igazítás","Align right":"Jobbra igazítás","Align table to the left":"","Align table to the right":"",Alignment:"","Almost equal to":"",Angle:"","Approximately equal to":"",Aquamarine:"Kékeszöld","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"",Background:"",Big:"Nagy","Bitcoin sign":"Bitcoin jel",Black:"Fekete","Block quote":"Idézet",Blue:"Kék","Blue marker":"Kék kiemelő",Bold:"Félkövér",Border:"","Bulleted List":"Pontozott lista",Cancel:"Mégsem","Cedi sign":"","Cell properties":"","Cent sign":"Cent jel","Center table":"","Centered image":"Középre igazított kép","Change image text alternative":"Helyettesítő szöveg módosítása","Character categories":"","Choose heading":"Stílus megadása",Code:"Forráskód","Colon sign":"Kettőspont",Color:"","Color picker":"",Column:"Oszlop","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"Pénznem jel",Dashed:"","Decrease indent":"Behúzás csökkentése",Default:"Alapértelmezett","Degree sign":"","Delete column":"Oszlop törlése","Delete row":"Sor törlése","Dim grey":"Halvány szürke",Dimensions:"","Division sign":"","Document colors":"Dokumentum színek","Dollar sign":"Dollár jel","Dong sign":"",Dotted:"",Double:"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"",Downloadable:"Letölthető","downwards arrow to bar":"","downwards dashed arrow":"szaggatott nyíl lefelé","downwards double arrow":"dupla nyíl lefelé","Drachma sign":"","Dropdown toolbar":"Lenyíló eszköztár","Edit link":"Link szerkesztése","Editor toolbar":"Szerkesztő eszköztár","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Enter image caption":"Képaláírás megadása","Euro sign":"Euró jel","Euro-currency sign":"Euró pénznem jel","Exclamation question mark":"","Font Background Color":"Betű háttérszín","Font Color":"Betűszín","Font Family":"Betűtípus","Font Size":"Betűméret","For all":"","Fraction slash":"","French franc sign":"Francia frank jel","Full size image":"Teljes méretű kép","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"",Green:"Zöld","Green marker":"Zöld kiemelő","Green pen":"Zöld toll",Grey:"Szürke",Groove:"","Guarani sign":"","Header column":"Oszlop fejléc","Header row":"Sor fejléc",Heading:"Stílusok","Heading 1":"Címsor 1","Heading 2":"Címsor 2","Heading 3":"Címsor 3","Heading 4":"Címsor 4","Heading 5":"Címsor 5","Heading 6":"Címsor 6",Height:"",Highlight:"Kiemelés","Horizontal ellipsis":"","Horizontal line":"Vízszintes elválasztóvonal","Horizontal text alignment toolbar":"","Hryvnia sign":"",Huge:"Hatalmas","Identical to":"","Image toolbar":"Kép eszköztár","image widget":"képmodul","Increase indent":"Behúzás növelése","Indian rupee sign":"",Infinity:"","Insert code block":"Kód blokk beszúrása","Insert column left":"Oszlop beszúrása balra","Insert column right":"Oszlop beszúrása jobbra","Insert image":"Kép beszúrása","Insert media":"Média beszúrása","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Sor beszúrása fölé","Insert row below":"Sor beszúrása alá","Insert table":"Táblázat beszúrása",Inset:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"",Italic:"Dőlt",Justify:"Sorkizárt","Justify cell text":"","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left aligned image":"Balra igazított kép","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"szaggatott nyíl balra","leftwards double arrow":"dupla nyíl balra","Less-than or equal to":"","Less-than sign":"","Light blue":"Világoskék","Light green":"Világoszöld","Light grey":"Világosszürke",Link:"Link","Link URL":"URL link","Lira sign":"Líra jel","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Media URL":"Média URL","media widget":"Média widget","Merge cell down":"Cellák egyesítése lefelé","Merge cell left":"Cellák egyesítése balra","Merge cell right":"Cellák egyesítése jobbra","Merge cell up":"Cellák egyesítése felfelé","Merge cells":"Cellaegyesítés","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"",Next:"Következő",None:"","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","Numbered List":"Számozott lista","on with exclamation mark with left right arrow above":"","Open in a new tab":"Megnyitás új lapon","Open link in new tab":"Link megnyitása új ablakban",Orange:"Narancs",Outset:"",Overline:"",Padding:"","Page break":"Oldaltörés",Paragraph:"Bekezdés","Paragraph sign":"","Partial differential":"","Paste the media URL in the input.":"Illessze be a média URL-jét.","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Pink marker":"Rózsaszín kiemelő","Plain text":"Egyszerű szöveg","Plus-minus sign":"","Pound sign":"Font jel",Previous:"Előző","Proportional to":"",Purple:"Lila","Question exclamation mark":"",Red:"Piros","Red pen":"Piros toll",Redo:"Újra","Registered sign":"","Remove color":"Szín eltávolítása","Remove Format":"Formázás eltávolítása","Remove highlight":"Kiemelés eltávolítása","Reversed paragraph sign":"","Rich Text Editor":"Bővített szövegszerkesztő","Rich Text Editor, %0":"Bővített szövegszerkesztő, %0",Ridge:"","Right aligned image":"Jobbra igazított kép","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"szaggatott nyíl jobbra","rightwards double arrow":"dupla nyíl jobbra",Row:"Sor","Ruble sign":"","Rupee sign":"",Save:"Mentés","Section sign":"","Select all":"Mindet kijelöl","Select column":"","Select row":"","Show more items":"További elemek","Side image":"Oldalsó kép","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"",Small:"Kicsi",Solid:"","soon with rightwards arrow above":"","Special characters":"Speciális karakterek","Spesmilo sign":"","Split cell horizontally":"Cella felosztása vízszintesen","Split cell vertically":"Cella felosztása függőlegesen","Square root":"",Strikethrough:"Áthúzott",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Táblázat eszköztár","Tenge sign":"","Text alignment":"Szöveg igazítása","Text alignment toolbar":"Szöveg igazítás eszköztár","Text alternative":"Helyettesítő szöveg","Text highlight toolbar":"Szöveg kiemelés eszköztár","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"Az URL nem lehet üres.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","There exists":"","This link has no URL":"A link nem tartalmaz URL-t","This media URL is not supported.":"Ez a média URL típus nem támogatott.","Tilde operator":"",Tiny:"Apró","Tip: Paste the URL into the content to embed faster.":"Tipp: Illessze be a média URL-jét a tartalomba.","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"",Turquoise:"Türkiz","Two dot leader":"","Type or paste your content here.":"Írja be, vagy illessze be a tartalmat.","Type your title":"Adja meg a címet",Underline:"Aláhúzott",Undo:"Visszavonás",Union:"",Unlink:"Link eltávolítása","up down arrow with base":"","Upload failed":"A feltöltés nem sikerült","Upload in progress":"A feltöltés folyamatban","upwards arrow to bar":"","upwards dashed arrow":"szaggatott nyíl felfelé","upwards double arrow":"dupla nyíl felfelé","Vertical text alignment toolbar":"","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"",White:"Fehér","Widget toolbar":"Widget eszköztár",Width:"","Won sign":"",Yellow:"Sárga","Yellow marker":"Sárga kiemelő","Yen sign":"Yen jel"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/id.js b/public/js/ckedit5/20.0.0_/translations/id.js new file mode 100644 index 0000000..bcc199a --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/id.js @@ -0,0 +1 @@ +(function(d){ const l = d['id'] = d['id'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 dari %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Rata tengah","Align left":"Rata kiri","Align right":"Rata kanan","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Biru laut",Background:"",Big:"Besar",Black:"Hitam","Block quote":"Kutipan",Blue:"Biru","Blue marker":"Marka biru",Bold:"Tebal",Border:"","Bulleted List":"Daftar Tak Berangka",Cancel:"Batal","Cell properties":"","Center table":"","Centered image":"Gambar rata tengah","Change image text alternative":"Ganti alternatif teks gambar","Choose heading":"Pilih tajuk",Code:"Kode",Color:"","Color picker":"",Column:"Kolom",Dashed:"","Decrease indent":"Kurangi indentasi",Default:"Bawaan","Delete column":"Hapus kolom","Delete row":"Hapus baris","Dim grey":"Kelabu gelap",Dimensions:"","Document colors":"Warna dokumen",Dotted:"",Double:"",Downloadable:"Dapat diunduh","Dropdown toolbar":"Alat dropdown","Edit link":"Sunting tautan","Editor toolbar":"Alat editor","Enter image caption":"Tambahkan deskripsi gambar","Font Background Color":"Warna Latar Huruf","Font Color":"Warna Huruf","Font Family":"Jenis Huruf","Font Size":"Ukuran Huruf","Full size image":"Gambar ukuran penuh",Green:"Hijau","Green marker":"Marka hijau","Green pen":"Pena hijau",Grey:"Kelabu",Groove:"","Header column":"Kolom tajuk","Header row":"Baris tajuk",Heading:"Tajuk","Heading 1":"Tajuk 1","Heading 2":"Tajuk 2","Heading 3":"Tajuk 3","Heading 4":"Tajuk 4","Heading 5":"Tajuk 5","Heading 6":"Tajuk 6",Height:"",Highlight:"Tanda","Horizontal line":"Garis horizontal","Horizontal text alignment toolbar":"",Huge:"Sangat Besar","Image toolbar":"Alat gambar","image widget":"widget gambar","Increase indent":"Tambah indentasi","Insert code block":"Sisipkan blok kode","Insert column left":"Sisipkan kolom ke kiri","Insert column right":"Sisipkan kolom ke kanan","Insert image":"Sisipkan gambar","Insert media":"Sisipkan media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Sisipkan baris ke atas","Insert row below":"Sisipkan baris ke bawah","Insert table":"Sisipkan tabel",Inset:"",Italic:"Miring",Justify:"Rata kanan-kiri","Justify cell text":"","Left aligned image":"Gambar rata kiri","Light blue":"Biru terang","Light green":"Hijau terang","Light grey":"Kelabu terang",Link:"Tautan","Link URL":"URL tautan","Media URL":"URL Media","media widget":"widget media","Merge cell down":"Gabungkan sel ke bawah","Merge cell left":"Gabungkan sel ke kiri","Merge cell right":"Gabungkan sel ke kanan","Merge cell up":"Gabungkan sel ke atas","Merge cells":"Gabungkan sel",Next:"Berikutnya",None:"","Numbered List":"Daftar Berangka","Open in a new tab":"Buka di tab baru","Open link in new tab":"Buka tautan di tab baru",Orange:"Jingga",Outset:"",Padding:"","Page break":"Henti halaman",Paragraph:"Paragraf","Paste the media URL in the input.":"Tempelkan URL ke dalam bidang masukan.","Pink marker":"Marka merah jambu","Plain text":"Teks mentah",Previous:"Sebelumnya",Purple:"Ungu",Red:"Merah","Red pen":"Pena merah",Redo:"Lakukan lagi","Remove color":"Hapus warna","Remove Format":"Hapus Format","Remove highlight":"Hapus tanda","Rich Text Editor":"Editor Teks Kaya","Rich Text Editor, %0":"Editor Teks Kaya, %0",Ridge:"","Right aligned image":"Gambar rata kanan",Row:"Baris",Save:"Simpan","Select column":"","Select row":"","Show more items":"","Side image":"Gambar sisi",Small:"Kecil",Solid:"","Split cell horizontally":"Bagikan sel secara horizontal","Split cell vertically":"Bagikan sel secara vertikal",Strikethrough:"Coret",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Alat tabel","Text alignment":"Perataan teks","Text alignment toolbar":"Alat perataan teks","Text alternative":"Alternatif teks","Text highlight toolbar":"Alat penanda teks","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL tidak boleh kosong.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Tautan ini tidak memiliki URL","This media URL is not supported.":"URL media ini tidak didukung.",Tiny:"Sangat Kecil","Tip: Paste the URL into the content to embed faster.":"Tip: Tempelkan URL ke bagian konten untuk sisip cepat.",Turquoise:"Turkish","Type or paste your content here.":"Ketik atau tempel konten Anda di sini.","Type your title":"Ketik judul Anda",Underline:"Garis bawah",Undo:"Batal",Unlink:"Hapus tautan","Upload failed":"Gagal mengunggah","Upload in progress":"Sedang mengunggah","Vertical text alignment toolbar":"",White:"Putih","Widget toolbar":"Alat widget",Width:"",Yellow:"Kuning","Yellow marker":"Marka kuning"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/it.js b/public/js/ckedit5/20.0.0_/translations/it.js new file mode 100644 index 0000000..2bec894 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/it.js @@ -0,0 +1 @@ +(function(d){ const l = d['it'] = d['it'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 di %1","Align cell text to the bottom":"Allinea il testo della cella in basso","Align cell text to the center":"Allinea il testo della cella al centro","Align cell text to the left":"Allinea il testo della cella a sinistra","Align cell text to the middle":"Allinea il testo della cella in mezzo","Align cell text to the right":"Allinea il testo della cella a destra","Align cell text to the top":"Allinea il testo della cella in alto","Align center":"Allinea al centro","Align left":"Allinea a sinistra","Align right":"Allinea a destra","Align table to the left":"Allinea tabella a sinistra","Align table to the right":"Allinea tabella a destra",Alignment:"Allineamento","Almost equal to":"Quasi uguale a",Angle:"Angolo","Approximately equal to":"Approssimativamente uguale a",Aquamarine:"Aquamarina","Asterisk operator":"Operatore asterisco","Austral sign":"Simbolo austral","back with leftwards arrow above":"back con sopra freccia verso sinistra",Background:"Sfondo",Big:"Grandi","Bitcoin sign":"Simbolo bitcoin",Black:"Nero","Block quote":"Blocco citazione",Blue:"Blu","Blue marker":"Contrassegno blu",Bold:"Grassetto",Border:"Bordo","Bulleted List":"Elenco puntato",Cancel:"Annulla","Cedi sign":"Simbolo cedi","Cell properties":"Proprietà cella","Cent sign":"Simbolo centesimo","Center table":"Allinea tabella al centro","Centered image":"Immagine centrata","Change image text alternative":"Cambia testo alternativo dell'immagine","Character categories":"Categorie di caratteri","Choose heading":"Seleziona intestazione",Code:"Codice","Colon sign":"Simbolo colon",Color:"Colore","Color picker":"Selezione colore",Column:"Colonna","Contains as member":"Contiene","Copyright sign":"Simbolo copyright","Cruzeiro sign":"Simbolo cruzeiro","Currency sign":"Simbolo valuta",Dashed:"Tratteggiato","Decrease indent":"Riduci rientro",Default:"Predefinito","Degree sign":"Simbolo gradi","Delete column":"Elimina colonna","Delete row":"Elimina riga","Dim grey":"Grigio tenue",Dimensions:"Dimensioni","Division sign":"Segno di divisione","Document colors":"Colori del docmento","Dollar sign":"Simbolo dollaro","Dong sign":"Simbolo dong",Dotted:"Punteggiato",Double:"Doppio","Double dagger":"Doppio obelisco","Double exclamation mark":"Doppio punto esclamativo","Double low-9 quotation mark":"Doppie virgolette basse","Double question mark":"Doppio punto interrogativo",Downloadable:"Scaricabile","downwards arrow to bar":"Freccia verso barra in basso","downwards dashed arrow":"Freccia tratteggiata verso il basso","downwards double arrow":"Freccia doppia verso il basso","Drachma sign":"Simbolo dracma","Dropdown toolbar":"Barra degli strumenti del menu a discesa","Edit link":"Modifica collegamento","Editor toolbar":"Barra degli strumenti dell'editor","Element of":"Elemento di","Em dash":"Trattino lungo (em)","Empty set":"Insieme vuoto","En dash":"Trattino medio (en)","end with leftwards arrow above":"end con sopra freccia verso sinistra","Enter image caption":"inserire didascalia dell'immagine","Euro sign":"Simbolo euro","Euro-currency sign":"Simbolo valuta euro","Exclamation question mark":"Punti esclamativo e interrogativo","Font Background Color":"Colore di sfondo caratteri","Font Color":"Colore caratteri","Font Family":"Tipo di caratteri","Font Size":"Dimensione caratteri","For all":"Per ogni","Fraction slash":"Barra di frazione","French franc sign":"Simbolo franco francese","Full size image":"Immagine a dimensione intera","German penny sign":"Simbolo pfennig tedesco","Greater-than or equal to":"Maggiore o uguale a","Greater-than sign":"Simbolo maggiore di",Green:"Verde","Green marker":"Contrassegno verde","Green pen":"Penna verde",Grey:"Grigio",Groove:"Scanalatura","Guarani sign":"Simbolo guaraní","Header column":"Intestazione colonna","Header row":"Riga d'intestazione",Heading:"Intestazione","Heading 1":"Intestazione 1","Heading 2":"Intestazione 2","Heading 3":"Intestazione 3","Heading 4":"Intestazione 4","Heading 5":"Intestazione 5","Heading 6":"Intestazione 6",Height:"Altezza",Highlight:"Evidenzia","Horizontal ellipsis":"Puntini di sospensione orizzontali","Horizontal line":"Linea orizzontale","Horizontal text alignment toolbar":"Barra degli strumenti dell'allineamento orizzontale del testo","Hryvnia sign":"Simbolo grivnia",Huge:"Grandissimi","Identical to":"Identico a","Image toolbar":"Barra degli strumenti dell'immagine","image widget":"Widget immagine","Increase indent":"Aumenta rientro","Indian rupee sign":"Simbolo rupia indiana",Infinity:"Infinito","Insert code block":"Inserisci blocco di codice","Insert column left":"Inserisci colonna a sinistra","Insert column right":"Inserisci colonna a destra","Insert image":"Inserisci immagine","Insert media":"Inserisci media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Inserisci riga sopra","Insert row below":"Inserisci riga sotto","Insert table":"Inserisci tabella",Inset:"Incassato",Integral:"Integrale",Intersection:"Intersezione","Inverted exclamation mark":"Punto esclamativo invertito","Inverted question mark":"Punto interrogativo invertito",Italic:"Corsivo",Justify:"Giustifica","Justify cell text":"Testo della cella giustificato","Kip sign":"Simbolo kip","Latin capital letter a with breve":"Lettera A latina maiuscola con breve","Latin capital letter a with macron":"Lettera A latina maiuscola con macron","Latin capital letter a with ogonek":"Lettera A latina maiuscola con codetta","Latin capital letter c with acute":"Lettera C latina maiuscola con accento acuto","Latin capital letter c with caron":"Lettera C latina maiuscola con pipa","Latin capital letter c with circumflex":"Lettera C latina maiuscola con accento circonflesso","Latin capital letter c with dot above":"Lettera C latina maiuscola con punto sovrascritto","Latin capital letter d with caron":"Lettera D latina maiuscola con pipa","Latin capital letter d with stroke":"Lettera D latina maiuscola con barra","Latin capital letter e with breve":"Lettera E latina maiuscola con accento breve","Latin capital letter e with caron":"Lettera E latina maiuscola con pipa","Latin capital letter e with dot above":"Lettera E latina maiuscola con punto sovrascritto","Latin capital letter e with macron":"Lettera E latina maiuscola con macron","Latin capital letter e with ogonek":"Lettera E latina maiuscola con codetta","Latin capital letter eng":"Nasale velare maiuscola","Latin capital letter g with breve":"Lettera G latina maiuscola con breve","Latin capital letter g with cedilla":"Lettera G latina maiuscola con cediglia","Latin capital letter g with circumflex":"Lettera G latina maiuscola con accento circonflesso","Latin capital letter g with dot above":"Lettera G latina maiuscola con punto sovrascritto","Latin capital letter h with circumflex":"Lettera H latina maiuscola con accento circonflesso","Latin capital letter h with stroke":"Lettera H latina maiuscola con barra","Latin capital letter i with breve":"Lettera I latina maiuscola con breve","Latin capital letter i with dot above":"Lettera I latina maiuscola con punto sovrascritto","Latin capital letter i with macron":"Lettera I latina maiuscola con macron","Latin capital letter i with ogonek":"Lettera I latina maiuscola con codetta","Latin capital letter i with tilde":"Lettera I latina maiuscola con tilde","Latin capital letter j with circumflex":"Lettera J latina maiuscola con accento circonflesso","Latin capital letter k with cedilla":"Lettera K latina maiuscola con cediglia","Latin capital letter l with acute":"Lettera L latina maiuscola con accento acuto","Latin capital letter l with caron":"Lettera L latina maiuscola con pipa","Latin capital letter l with cedilla":"Lettera L latina maiuscola con cediglia","Latin capital letter l with middle dot":"Lettera L latina maiuscola con punto in mezzo","Latin capital letter l with stroke":"Lettera L latina maiuscola con barra","Latin capital letter n with acute":"Lettera N latina maiuscola con accento acuto","Latin capital letter n with caron":"Lettera N latina maiuscola con pipa","Latin capital letter n with cedilla":"Lettera N latina maiuscola con cediglia","Latin capital letter o with breve":"Lettera O latina maiuscola con breve","Latin capital letter o with double acute":"Lettera O latina maiuscola con doppio accento acuto","Latin capital letter o with macron":"Lettera O latina maiuscola con macron","Latin capital letter r with acute":"Lettera R latina maiuscola con accento acuto","Latin capital letter r with caron":"Lettera R latina maiuscola con pipa","Latin capital letter r with cedilla":"Lettera R latina maiuscola con cediglia","Latin capital letter s with acute":"Lettera S latina maiuscola con accento acuto","Latin capital letter s with caron":"Lettera S latina maiuscola con pipa","Latin capital letter s with cedilla":"Lettera S latina maiuscola con cediglia","Latin capital letter s with circumflex":"Lettera S latina maiuscola con accento circonflesso","Latin capital letter t with caron":"Lettera T latina maiuscola con pipa","Latin capital letter t with cedilla":"Lettera T latina maiuscola con cediglia","Latin capital letter t with stroke":"Lettera T latina maiuscola con barra","Latin capital letter u with breve":"Lettera U latina maiuscola con breve","Latin capital letter u with double acute":"Lettera U latina maiuscola con doppio accento acuto","Latin capital letter u with macron":"Lettera U latina maiuscola con macron","Latin capital letter u with ogonek":"Lettera U latina maiuscola con codetta","Latin capital letter u with ring above":"Lettera U latina maiuscola con anello in alto","Latin capital letter u with tilde":"Lettera U latina maiuscola con tilde","Latin capital letter w with circumflex":"Lettera W latina maiuscola con accento circonflesso","Latin capital letter y with circumflex":"Lettera Y latina maiuscola con accento circonflesso","Latin capital letter y with diaeresis":"Lettera Y latina maiuscola con dieresi","Latin capital letter z with acute":"Lettera Z latina maiuscola con accento acuto","Latin capital letter z with caron":"Lettera Z latina maiuscola con pipa","Latin capital letter z with dot above":"Lettera Z latina maiuscola con punto sovrascritto","Latin capital ligature ij":"Legatura IJ latina maiuscola","Latin capital ligature oe":"Legatura OE latina maiuscola","Latin small letter a with breve":"Lettera A latina minuscola con breve","Latin small letter a with macron":"Lettera A latina minuscola con macron","Latin small letter a with ogonek":"Lettera A latina minuscola con codetta","Latin small letter c with acute":"Lettera C latina minuscola con accento acuto","Latin small letter c with caron":"Lettera C latina minuscola con pipa","Latin small letter c with circumflex":"Lettera C latina minuscola con accento circonflesso","Latin small letter c with dot above":"Lettera C latina minuscola con punto sovrascritto","Latin small letter d with caron":"Lettera D latina minuscola con pipa","Latin small letter d with stroke":"Lettera D latina minuscola con barra","Latin small letter dotless i":"Lettera I latina minuscola senza punto","Latin small letter e with breve":"Lettera E latina minuscola con accento breve","Latin small letter e with caron":"Lettera E latina minuscola con pipa","Latin small letter e with dot above":"Lettera E latina minuscola con punto sovrascritto","Latin small letter e with macron":"Lettera E latina minuscola con macron","Latin small letter e with ogonek":"Lettera E latina minuscola con codetta","Latin small letter eng":"Nasale velare minuscola","Latin small letter f with hook":"Lettera f latina minuscola con gancio","Latin small letter g with breve":"Lettera G latina minuscola con breve","Latin small letter g with cedilla":"Lettera G latina minuscola con cediglia","Latin small letter g with circumflex":"Lettera G latina minuscola con accento circonflesso","Latin small letter g with dot above":"Lettera G latina minuscola con punto sovrascritto","Latin small letter h with circumflex":"Lettera H latina minuscola con accento circonflesso","Latin small letter h with stroke":"Lettera H latina minuscola con barra","Latin small letter i with breve":"Lettera I latina minuscola con breve","Latin small letter i with macron":"Lettera I latina minuscola con macron","Latin small letter i with ogonek":"Lettera I latina minuscola con codetta","Latin small letter i with tilde":"Lettera I latina minuscola con tilde","Latin small letter j with circumflex":"Lettera J latina minuscola con accento circonflesso","Latin small letter k with cedilla":"Lettera K latina minuscola con cediglia","Latin small letter kra":"Lettera Kra latina minuscola","Latin small letter l with acute":"Lettera L latina minuscola con accento acuto","Latin small letter l with caron":"Lettera L latina minuscola con pipa","Latin small letter l with cedilla":"Lettera L latina minuscola con cediglia","Latin small letter l with middle dot":"Lettera L latina minuscola con punto in mezzo","Latin small letter l with stroke":"Lettera L latina minuscola con barra","Latin small letter long s":"Lettera S latina lunga minuscola","Latin small letter n preceded by apostrophe":"Lettera N latina minuscola preceduta da apostrofo","Latin small letter n with acute":"Lettera N latina minuscola con accento acuto","Latin small letter n with caron":"Lettera N latina minuscola con pipa","Latin small letter n with cedilla":"Lettera N latina minuscola con cediglia","Latin small letter o with breve":"Lettera O latina minuscola con breve","Latin small letter o with double acute":"Lettera O latina minuscola con doppio accento acuto","Latin small letter o with macron":"Lettera O latina minuscola con macron","Latin small letter r with acute":"Lettera R latina minuscola con accento acuto","Latin small letter r with caron":"Lettera R latina minuscola con pipa","Latin small letter r with cedilla":"Lettera R latina minuscola con cediglia","Latin small letter s with acute":"Lettera S latina minuscola con accento acuto","Latin small letter s with caron":"Lettera S latina minuscola con pipa","Latin small letter s with cedilla":"Lettera S latina minuscola con cediglia","Latin small letter s with circumflex":"Lettera S latina minuscola con accento circonflesso","Latin small letter t with caron":"Lettera T latina minuscola con pipa","Latin small letter t with cedilla":"Lettera T latina minuscola con cediglia","Latin small letter t with stroke":"Lettera T latina minuscola con barra","Latin small letter u with breve":"Lettera U latina minuscola con breve","Latin small letter u with double acute":"Lettera U latina minuscola con doppio accento acuto","Latin small letter u with macron":"Lettera U latina minuscola con macron","Latin small letter u with ogonek":"Lettera U latina minuscola con codetta","Latin small letter u with ring above":"Lettera U latina minuscola con cerchio in alto","Latin small letter u with tilde":"Lettera U latina minuscola con tilde","Latin small letter w with circumflex":"Lettera W latina minuscola con accento circonflesso","Latin small letter y with circumflex":"Lettera Y latina minuscola con accento circonflesso","Latin small letter z with acute":"Lettera Z latina minuscola con accento acuto","Latin small letter z with caron":"Lettera Z latina minuscola con pipa","Latin small letter z with dot above":"Lettera Z latina minuscola con punto sovrascritto","Latin small ligature ij":"Legatura IJ latina minuscola","Latin small ligature oe":"Legatura OE latina minuscola","Left aligned image":"Immagine allineata a sinistra","Left double quotation mark":"Doppie virgolette a sinistra","Left single quotation mark":"Virgoletta a sinistra","Left-pointing double angle quotation mark":"Virgolette doppie angolari a sinistra","leftwards arrow to bar":"Freccia verso barra a sinistra","leftwards dashed arrow":"Freccia tratteggiata verso sinistra","leftwards double arrow":"Freccia doppia verso sinistra","Less-than or equal to":"Minore o uguale a","Less-than sign":"Simbolo minore di","Light blue":"Azzurro","Light green":"Verde chiaro","Light grey":"Grigio chiaro",Link:"Collegamento","Link URL":"URL del collegamento","Lira sign":"Simbolo lira","Livre tournois sign":"Simbolo livre tournois","Logical and":"E logico","Logical or":"O logico",Macron:"Macron","Manat sign":"Simbolo manat","Media URL":"URL media","media widget":"widget media","Merge cell down":"Unisci cella sotto","Merge cell left":"Unisci cella a sinistra","Merge cell right":"Unisci cella a destra","Merge cell up":"Unisci cella sopra","Merge cells":"Unisci celle","Mill sign":"Simbolo millesimo","Minus sign":"Segno di sottrazione","Multiplication sign":"Segno di moltiplicazione","N-ary product":"Prodotto ennesimo","N-ary summation":"Sommatoria",Nabla:"Nabla","Naira sign":"Simbolo naira","New sheqel sign":"Simbolo nuovo shekel",Next:"Avanti",None:"Nessuno","Nordic mark sign":"Simbolo marco nordico","Not an element of":"Non parte di","Not equal to":"Non uguale a","Not sign":"Simbolo Not","Numbered List":"Elenco numerato","on with exclamation mark with left right arrow above":"on! con sopra freccia verso sinistra","Open in a new tab":"Apri in una nuova scheda","Open link in new tab":"Apri collegamento in nuova scheda",Orange:"Arancio",Outset:"Rialzato",Overline:"Linea alta",Padding:"Spaziatura interna","Page break":"Interruzione di pagina",Paragraph:"Paragrafo","Paragraph sign":"Simbolo paragrafo","Partial differential":"Derivata parziale","Paste the media URL in the input.":"Incolla l'URL del file multimediale nell'input.","Per mille sign":"Simbolo per mille","Per ten thousand sign":"Simbolo per diecimila","Peseta sign":"Simbolo peseta","Peso sign":"Simbolo peso","Pink marker":"Contrassegno rosa","Plain text":"Testo semplice","Plus-minus sign":"Segno più o meno","Pound sign":"Simbolo sterlina",Previous:"Indietro","Proportional to":"Proporzionale a",Purple:"Porpora","Question exclamation mark":"Punti interrogativo ed esclamativo",Red:"Rosso","Red pen":"Penna rossa",Redo:"Ripristina","Registered sign":"Simbolo marchio registrato","Remove color":"Rimuovi colore","Remove Format":"Rimuovi formato","Remove highlight":"Rimuovi evidenziazione","Reversed paragraph sign":"Simbolo paragrafo invertito","Rich Text Editor":"Editor di testo formattato","Rich Text Editor, %0":"Editor di testo formattato, %0",Ridge:"Rilievo","Right aligned image":"Immagine allineata a destra","Right double quotation mark":"Doppie virgolette a destra","Right single quotation mark":"Virgoletta a destra","Right-pointing double angle quotation mark":"Virgolette doppie angolari a destra","rightwards arrow to bar":"Freccia verso barra a destra","rightwards dashed arrow":"Freccia tratteggiata verso destra","rightwards double arrow":"Freccia doppia verso destra",Row:"Riga","Ruble sign":"Simbolo rublo","Rupee sign":"Simbolo rupia",Save:"Salva","Section sign":"Simbolo sezione","Select all":"Seleziona tutto","Select column":"Seleziona colonna","Select row":"Seleziona riga","Show more items":"Mostra più elementi","Side image":"Immagine laterale","Single left-pointing angle quotation mark":"Virgoletta angolare a sinistra","Single low-9 quotation mark":"Virgoletta bassa","Single right-pointing angle quotation mark":"Virgoletta angolare a destra",Small:"Piccoli",Solid:"Solido","soon with rightwards arrow above":"soon con sopra freccia verso destra","Special characters":"Caratteri speciali","Spesmilo sign":"Simbolo spesmilo","Split cell horizontally":"Dividi cella orizzontalmente","Split cell vertically":"Dividi cella verticalmente","Square root":"Radice quadrata",Strikethrough:"Barrato",Style:"Stile","Table alignment toolbar":"Barra degli strumenti dell'allineamento della tabella","Table cell text alignment":"Allineamento del testo nella cella della tabella","Table properties":"Proprietà tabella","Table toolbar":"Barra degli strumenti della tabella","Tenge sign":"Simbolo tenge","Text alignment":"Allineamento del testo","Text alignment toolbar":"Barra degli strumenti dell'allineamento","Text alternative":"Testo alternativo","Text highlight toolbar":"Barra degli strumenti dell'evidenziazione del testo","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Il colore non è valido. Provare \"#FF0000\" o \"rgb(255,0,0)\" o \"red\".","The URL must not be empty.":"L'URL non può essere vuoto.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Il valore non è valido. Provare \"10px\" o \"2em\" o semplicemente \"2\".","There exists":"Esiste","This link has no URL":"Questo collegamento non ha un URL","This media URL is not supported.":"Questo URL di file multimediali non è supportato.","Tilde operator":"Operatore tilde",Tiny:"Piccolissimi","Tip: Paste the URL into the content to embed faster.":"Consiglio: incolla l'URL nel contenuto per un'incorporazione più veloce.","top with upwards arrow above":"top con sopra freccia verso l'alto","Trade mark sign":"Simbolo trademark","Tugrik sign":"Simbolo tugrik","Turkish lira sign":"Simbolo lira turca",Turquoise:"Turchese","Two dot leader":"Due punti iniziali","Type or paste your content here.":"Inserire o incollare qui il proprio contenuto.","Type your title":"Inserire il proprio titolo",Underline:"Sottolineato",Undo:"Annulla",Union:"Unione",Unlink:"Elimina collegamento","up down arrow with base":"Doppia freccia verticale con base","Upload failed":"Caricamento fallito","Upload in progress":"Caricamento in corso","upwards arrow to bar":"Freccia verso barra in alto","upwards dashed arrow":"Freccia tratteggiata verso l'alto","upwards double arrow":"Freccia doppia verso l'alto","Vertical text alignment toolbar":"Barra degli strumenti dell'allineamento verticale del testo","Vulgar fraction one half":"Frazione semplice un mezzo","Vulgar fraction one quarter":"Frazione semplice un quarto","Vulgar fraction three quarters":"Frazione semplice tre quarti",White:"Bianco","Widget toolbar":"Barra degli strumenti del widget",Width:"Larghezza","Won sign":"Simbolo won",Yellow:"Giallo","Yellow marker":"Contrassegno giallo","Yen sign":"Simbolo yen"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/ja.js b/public/js/ckedit5/20.0.0_/translations/ja.js new file mode 100644 index 0000000..d57ff3a --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/ja.js @@ -0,0 +1 @@ +(function(d){ const l = d['ja'] = d['ja'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"中央揃え","Align left":"左揃え","Align right":"右揃え","Align table to the left":"","Align table to the right":"",Alignment:"","Almost equal to":"",Angle:"","Approximately equal to":"",Aquamarine:"","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"",Background:"","Bitcoin sign":"",Black:"","Block quote":"ブロッククオート(引用)",Blue:"","Blue marker":"青のマーカー",Bold:"ボールド",Border:"","Bulleted List":"箇条書きリスト",Cancel:"キャンセル","Cedi sign":"","Cell properties":"","Cent sign":"","Center table":"","Centered image":"中央寄せ画像","Change image text alternative":"画像の代替テキストを変更","Character categories":"","Choose heading":"見出しを選択",Code:"コード","Colon sign":"",Color:"","Color picker":"",Column:"列","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"",Dashed:"","Decrease indent":"インデントの削除","Degree sign":"","Delete column":"列を削除","Delete row":"行を削除","Dim grey":"",Dimensions:"","Division sign":"","Dollar sign":"","Dong sign":"",Dotted:"",Double:"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"",Downloadable:"","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"","Dropdown toolbar":"","Edit link":"リンクを編集","Editor toolbar":"","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Enter image caption":"画像の注釈を入力","Euro sign":"","Euro-currency sign":"","Exclamation question mark":"","For all":"","Fraction slash":"","French franc sign":"","Full size image":"フルサイズ画像","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"",Green:"","Green marker":"緑のマーカー","Green pen":"緑のペン",Grey:"",Groove:"","Guarani sign":"","Header column":"見出し列","Header row":"見出し行",Heading:"見出し","Heading 1":"見出し1","Heading 2":"見出し2","Heading 3":"見出し3 ","Heading 4":"","Heading 5":"","Heading 6":"",Height:"",Highlight:"ハイライト","Horizontal ellipsis":"","Horizontal text alignment toolbar":"","Hryvnia sign":"","Identical to":"","Image toolbar":"画像","image widget":"画像ウィジェット","Increase indent":"インデントの追加","Indian rupee sign":"",Infinity:"","Insert code block":"コードブロックの挿入","Insert column left":"","Insert column right":"","Insert image":"画像挿入","Insert media":"メディアの挿入","Insert row above":"上に行を挿入","Insert row below":"下に行を挿入","Insert table":"表の挿入",Inset:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"",Italic:"イタリック",Justify:"両端揃え","Justify cell text":"","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left aligned image":"左寄せ画像","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"","Less-than or equal to":"","Less-than sign":"","Light blue":"","Light green":"","Light grey":"",Link:"リンク","Link URL":"リンクURL","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Media URL":"メディアURL","media widget":"メディアウィジェット","Merge cell down":"下のセルと結合","Merge cell left":"左のセルと結合","Merge cell right":"右のセルと結合","Merge cell up":"上のセルと結合","Merge cells":"セルを結合","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"",Next:"",None:"","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","Numbered List":"番号付きリスト","on with exclamation mark with left right arrow above":"","Open in a new tab":"","Open link in new tab":"新しいタブでリンクを開く",Orange:"",Outset:"",Overline:"",Padding:"",Paragraph:"パラグラフ","Paragraph sign":"","Partial differential":"","Paste the media URL in the input.":"URLを入力欄にコピー","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Pink marker":"ピンクのマーカー","Plain text":"プレインテキスト","Plus-minus sign":"","Pound sign":"",Previous:"","Proportional to":"",Purple:"","Question exclamation mark":"",Red:"","Red pen":"赤のマーカー",Redo:"やり直し","Registered sign":"","Remove color":"","Remove Format":"フォーマットの削除","Remove highlight":"ハイライトの削除","Reversed paragraph sign":"","Rich Text Editor":"リッチテキストエディター","Rich Text Editor, %0":"リッチテキストエディター, %0",Ridge:"","Right aligned image":"右寄せ画像","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"",Row:"行","Ruble sign":"","Rupee sign":"",Save:"保存","Section sign":"","Select column":"","Select row":"","Show more items":"","Side image":"サイドイメージ","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"",Solid:"","soon with rightwards arrow above":"","Special characters":"特殊文字","Spesmilo sign":"","Split cell horizontally":"縦にセルを分離","Split cell vertically":"横にセルを分離","Square root":"",Strikethrough:"取り消し線",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Tenge sign":"","Text alignment":"文字揃え","Text alignment toolbar":"テキストの整列","Text alternative":"代替テキスト","Text highlight toolbar":"テキストのハイライト","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"空のURLは許可されていません。","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","There exists":"","This link has no URL":"リンクにURLが設定されていません","This media URL is not supported.":"このメディアのURLはサポートされていません。","Tilde operator":"","Tip: Paste the URL into the content to embed faster.":"","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"",Turquoise:"","Two dot leader":"","Type or paste your content here.":"","Type your title":"",Underline:"アンダーライン",Undo:"元に戻す",Union:"",Unlink:"リンク解除","up down arrow with base":"","Upload failed":"アップロード失敗","Upload in progress":"アップロード中","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vertical text alignment toolbar":"","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"",White:"",Width:"","Won sign":"",Yellow:"","Yellow marker":"黄色のマーカー","Yen sign":""} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/km.js b/public/js/ckedit5/20.0.0_/translations/km.js new file mode 100644 index 0000000..a02226e --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/km.js @@ -0,0 +1 @@ +(function(d){ const l = d['km'] = d['km'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"ប្លុក​ពាក្យ​សម្រង់",Blue:"",Bold:"ដិត","Bulleted List":"បញ្ជី​ជា​ចំណុច",Cancel:"បោះបង់","Centered image":"","Change image text alternative":"","Choose heading":"ជ្រើសរើស​ក្បាលអត្ថបទ",Code:"","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"បញ្ចូល​ពាក្យ​ពណ៌នា​រូបភាព","Full size image":"រូបភាព​ពេញ​ទំហំ",Green:"",Grey:"",Heading:"ក្បាលអត្ថបទ","Heading 1":"ក្បាលអត្ថបទ 1","Heading 2":"ក្បាលអត្ថបទ 2","Heading 3":"ក្បាលអត្ថបទ 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"វិដជិត​រូបភាព","Insert image":"បញ្ចូល​រូបភាព",Italic:"ទ្រេត","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"តំណ","Link URL":"URL តំណ",Next:"","Numbered List":"បញ្ជី​ជា​លេខ","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"កថាខណ្ឌ",Previous:"",Purple:"",Red:"",Redo:"ធ្វើ​វិញ","Remove color":"","Rich Text Editor":"កម្មវិធី​កែសម្រួល​អត្ថបទ​សម្បូរបែប","Rich Text Editor, %0":"កម្មវិធី​កែសម្រួល​អត្ថបទ​សម្បូរបែប, %0","Right aligned image":"",Save:"រក្សាទុ","Show more items":"","Side image":"រូបភាព​នៅ​ខាង",Strikethrough:"","Text alternative":"","This link has no URL":"",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"គូស​បន្ទាត់​ក្រោម",Undo:"លែង​ធ្វើ​វិញ",Unlink:"ផ្ដាច់​តំណ","Upload failed":"អាប់ឡូត​មិនបាន",White:"",Yellow:""} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/kn.js b/public/js/ckedit5/20.0.0_/translations/kn.js new file mode 100644 index 0000000..3856b0e --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/kn.js @@ -0,0 +1 @@ +(function(d){ const l = d['kn'] = d['kn'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"‍‍‍‍ಗುರುತಿಸಲಾದ ‍‍ಉಲ್ಲೇಖ",Blue:"",Bold:"‍‍ದಪ್ಪ","Bulleted List":"‍‍ಬುಲೆಟ್ ಪಟ್ಟಿ",Cancel:"ರದ್ದುಮಾಡು","Centered image":"","Change image text alternative":"‍ಚಿತ್ರದ ಬದಲಿ ಪಠ್ಯ ಬದಲಾಯಿಸು","Choose heading":"ಶೀರ್ಷಿಕೆ ಆಯ್ಕೆಮಾಡು",Code:"","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"‍ಚಿತ್ರದ ಶೀರ್ಷಿಕೆ ಸೇರಿಸು","Full size image":"‍ಪೂರ್ಣ ‍‍ಅಳತೆಯ ಚಿತ್ರ",Green:"",Grey:"",Heading:"ಶೀರ್ಷಿಕೆ","Heading 1":"ಶೀರ್ಷಿಕೆ 1","Heading 2":"ಶೀರ್ಷಿಕೆ 2","Heading 3":"ಶೀರ್ಷಿಕೆ 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"‍ಚಿತ್ರ ವಿಜೆಟ್","Insert image":"",Italic:"‍ಇಟಾಲಿಕ್","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"‍ಕೊಂಡಿ","Link URL":"‍ಕೊಂಡಿ ಸಂಪರ್ಕಿಸು",Next:"","Numbered List":"‍ಸಂಖ್ಯೆಯ ಪಟ್ಟಿ‍","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"ಪ್ಯಾರಾಗ್ರಾಫ್",Previous:"",Purple:"",Red:"",Redo:"‍ಮತ್ತೆ ಮಾಡು","Remove color":"","Rich Text Editor":"‍ಸಮೃದ್ಧ ಪಠ್ಯ ಸಂಪಾದಕ‍‍","Rich Text Editor, %0":"‍ಸಮೃದ್ಧ ಪಠ್ಯ ಸಂಪಾದಕ‍, %0","Right aligned image":"",Save:"ಉಳಿಸು","Show more items":"","Side image":"‍ಪಕ್ಕದ ಚಿತ್ರ",Strikethrough:"","Text alternative":"‍ಪಠ್ಯದ ಬದಲಿ","This link has no URL":"",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"",Undo:"‍‍ರದ್ದು",Unlink:"‍ಕೊಂಡಿ ತೆಗೆ","Upload failed":"",White:"",Yellow:""} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/ko.js b/public/js/ckedit5/20.0.0_/translations/ko.js new file mode 100644 index 0000000..e4b1c07 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/ko.js @@ -0,0 +1 @@ +(function(d){ const l = d['ko'] = d['ko'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"가운데 맞춤","Align left":"왼쪽 맞춤","Align right":"오른쪽 맞춤","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"연한 청록색",Background:"",Big:"큰",Black:"검정","Block quote":"인용 단락",Blue:"파랑",Bold:"굵게",Border:"","Bulleted List":"글머리기호",Cancel:"취소","Cell properties":"","Center table":"","Centered image":"가운데 정렬","Change image text alternative":"대체 텍스트 변경","Choose heading":"제목 선택",Code:"소스",Color:"","Color picker":"",Column:"",Dashed:"","Decrease indent":"내어쓰기",Default:"기본","Delete column":"","Delete row":"","Dim grey":"진한 회색",Dimensions:"","Document colors":"문서 색상들",Dotted:"",Double:"",Downloadable:"다운로드 가능","Dropdown toolbar":"드롭다운 툴바","Edit link":"링크 편집","Editor toolbar":"에디터 툴바","Enter image caption":"이미지 설명을 입력하세요","Font Background Color":"글자 배경색","Font Color":"글자 색상","Font Family":"글꼴","Font Size":"글자 크기","Full size image":"문서 너비",Green:"초록",Grey:"회색",Groove:"","Header column":"","Header row":"",Heading:"제목","Heading 1":"제목1","Heading 2":"제목2","Heading 3":"제목3","Heading 4":"제목4","Heading 5":"제목5","Heading 6":"제목6",Height:"","Horizontal line":"수평선","Horizontal text alignment toolbar":"",Huge:"매우 큰","Image toolbar":"이미지 툴바","image widget":"이미지 위젯","Increase indent":"들여쓰기","Insert column left":"","Insert column right":"","Insert image":"이미지 삽입","Insert media":"미디어 삽입","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"","Insert row below":"","Insert table":"테이블 삽입",Inset:"",Italic:"기울임꼴",Justify:"양쪽 맞춤","Justify cell text":"","Left aligned image":"왼쪽 정렬","Light blue":"연한 파랑","Light green":"밝은 초록","Light grey":"밝은 회색",Link:"링크","Link URL":"링크 주소","Media URL":"미디어 URL","media widget":"미디어 위젯","Merge cell down":"","Merge cell left":"","Merge cell right":"","Merge cell up":"","Merge cells":"",Next:"다음",None:"","Numbered List":"번호매기기","Open in a new tab":"새 탭에서 열기","Open link in new tab":"새 탭에서 링크 열기",Orange:"주황",Outset:"",Padding:"","Page break":"페이지 나누기",Paragraph:"문단","Paste the media URL in the input.":"미디어 URL을 입력해주세요.",Previous:"이전",Purple:"보라",Red:"빨강",Redo:"다시 실행","Remove color":"색상 지우기","Remove Format":"서식 지우기","Rich Text Editor":"","Rich Text Editor, %0":"",Ridge:"","Right aligned image":"오른쪽 정렬",Row:"",Save:"저장","Select all":"전체 선택","Select column":"","Select row":"","Show more items":"더보기","Side image":"내부 우측 정렬",Small:"작은",Solid:"","Split cell horizontally":"","Split cell vertically":"",Strikethrough:"취소선",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"텍스트 정렬","Text alignment toolbar":"텍스트 정렬 툴바","Text alternative":"대체 텍스트","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL이 비어있습니다.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"이 링크에는 URL이 없습니다.","This media URL is not supported.":"이 URL은 지원되지 않습니다.",Tiny:"매우 작은","Tip: Paste the URL into the content to embed faster.":"Tip: URL을 복사 후 붙여넣기하면 더 빠릅니다.",Turquoise:"청록색","Type or paste your content here.":"여기에 내용을 입력하거나 붙여넣기 하세요.","Type your title":"제목 입력",Underline:"밑줄",Undo:"실행 취소",Unlink:"링크 삭제","Upload failed":"업로드 실패","Upload in progress":"업로드 진행 중","Vertical text alignment toolbar":"",White:"흰색","Widget toolbar":"위젯 툴바",Width:"",Yellow:"노랑"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/ku.js b/public/js/ckedit5/20.0.0_/translations/ku.js new file mode 100644 index 0000000..da9e603 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/ku.js @@ -0,0 +1 @@ +(function(d){ const l = d['ku'] = d['ku'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 لە %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"بەهێڵکردنی ناورەڕاست","Align left":"بەهێڵکردنی چەپ","Align right":"بەهێڵکردنی ڕاست","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"شینی دەریایی",Background:"",Big:"گەورە",Black:"ڕەش","Block quote":"وتەی وەرگیراو",Blue:"شین","Blue marker":"نیشانەکەری شین",Bold:"قەڵەو",Border:"","Bulleted List":"لیستەی خاڵەیی",Cancel:"هەڵوەشاندنەوە","Cell properties":"","Center table":"","Centered image":"ناوەڕاستکراوی وێنە","Change image text alternative":"گۆڕینی جێگروەی تێکیسی وێنە","Choose heading":"سەرنووسە هەڵبژێرە",Code:"کۆد",Color:"","Color picker":"",Column:"ستوون",Dashed:"","Decrease indent":"کەمکردنەوەی بۆشایی",Default:"بنچینە","Delete column":"سڕینەوەی ستوون","Delete row":"سڕینەوەی ڕیز","Dim grey":"ڕەساسی تاریک",Dimensions:"","Document colors":"ڕەنگەکانی دۆکومێنت",Dotted:"",Double:"",Downloadable:"Downloadable","Dropdown toolbar":"تووڵامرازی لیستەیی","Edit link":"دەستکاری بەستەر","Editor toolbar":"تووڵامرازی دەسکاریکەر","Enter image caption":"سەردێڕی وێنە دابنێ","Font Background Color":"ڕەنگی پاشبنەمای فۆنت","Font Color":"ڕەنگی فۆنت","Font Family":"فۆنتی خێزانی","Font Size":"قەبارەی فۆنت","Full size image":"پڕ بەقەبارەی وێنە",Green:"سەوز","Green marker":"نیشانەکەری سەوز","Green pen":"پێنووسی سەوز",Grey:"ڕەساسی",Groove:"","Header column":"ستوونی دەسپێک","Header row":"ڕیزی دەسپێک",Heading:"سەرنووسە","Heading 1":"سەرنووسەی 1","Heading 2":"سەرنووسەی 2","Heading 3":"سەرنووسەی 3","Heading 4":"سەرنووسەی 4","Heading 5":"سەرنووسەی 5","Heading 6":"سەرنووسەی 6",Height:"",Highlight:"بەرچاوکردن","Horizontal line":"هێڵی ئاسۆیی","Horizontal text alignment toolbar":"",Huge:"زۆر گەورە","Image toolbar":"تووڵامرازی وێنە","image widget":"وێدجیتی وێنە","Increase indent":"زیادکردنی بۆشایی","Insert code block":"دانانی خشتەی کۆد","Insert column left":"دانانی ستوون لە چەپ","Insert column right":"دانانی ستوون لە ڕاست","Insert image":"وێنە دابنێ","Insert media":"مێدیا دابنێ","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"دانانی ڕیز لە سەرەوە","Insert row below":"دانانی ڕیز لە ژێرەوە","Insert table":"خشتە دابنێ",Inset:"",Italic:"لار",Justify:"هاوستوونی","Justify cell text":"","Left aligned image":"ڕیزکردنی وێنە بۆ لای چەپ","Light blue":"شینی ڕووناک","Light green":"سەوزی ڕووناک","Light grey":"ڕەساسی ڕووناک",Link:"بەستەر","Link URL":"ناونیشانی بەستەر","Media URL":"بەستەری مێدیا","media widget":"ویدجێتتی مێدیا","Merge cell down":"تێکەڵکردنی خانەکان بەرەو ژێرەوە","Merge cell left":"تێکەڵکردنی خانەکان بەرەو چەپ","Merge cell right":"تێکەڵکردنی خانەکان بەرەو ڕاست","Merge cell up":"تێکەڵکردنی خانەکان بەرەو سەر","Merge cells":"تێکەڵکردنی خانەکان",Next:"دواتر",None:"","Numbered List":"لیستەی ژمارەیی","Open in a new tab":"کردنەوەی لە پەنجەرەیەکی نوێ","Open link in new tab":"کردنەوەی بەستەرەکە لە پەڕەیەکی نوێ",Orange:"پرتەقاڵی",Outset:"",Padding:"","Page break":"کۆتایهێنانی پەڕە",Paragraph:"پەراگراف","Paste the media URL in the input.":"بەستەری مێدیاکە لە خانەکە بلکێنە.","Pink marker":"نیشانەکەری پەمەیی","Plain text":"تێکستی سادە",Previous:"پێشتر",Purple:"مۆر",Red:"سور","Red pen":"پێنووسی سۆر",Redo:"هەلگەڕاندنەوە","Remove color":"لابردنی ڕەنگ","Remove Format":"لابردنی شێواز","Remove highlight":"لابردنی بەرچاوکەر","Rich Text Editor":"سەرنوسەری دەقی بەپیت","Rich Text Editor, %0":"سەرنوسەری دەقی بەپیت, %0",Ridge:"","Right aligned image":"ڕیزکردنی وێنە بۆ لای ڕاست",Row:"ڕیز",Save:"پاشکەوتکردن","Select column":"","Select row":"","Show more items":"بڕگەی زیاتر نیشانبدە","Side image":"لای وێنە",Small:"بچوک",Solid:"","Split cell horizontally":"بەشکردنی خانەکان بە ئاسۆیی","Split cell vertically":"بەشکردنی خانەکان بە ئەستوونی",Strikethrough:"هێڵ بەسەرداهاتوو",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"تووڵامرازی خشتە","Text alignment":"ڕیززکردنی تێکست","Text alignment toolbar":"تووڵامرازی ڕیززکردنی تێکست","Text alternative":"جێگرەوەی تێکست","Text highlight toolbar":"تووڵامرازی نیشانکردنی تێکست","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"پێویستە بەستەر بەتاڵ نەبێت.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"ئەم بەستەرە ناونیشانی نیە","This media URL is not supported.":"ئەم بەستەری مێدیایە پاڵپشتی ناکرێت.",Tiny:"گچکە","Tip: Paste the URL into the content to embed faster.":"Tip: Paste the URL into the content to embed faster.",Turquoise:"شینی ئاسمانی","Type or paste your content here.":"بنووسە یاخوود ناوەڕۆکی کۆپیکراو لیڕە بلکێنە","Type your title":"نوسینی ناونیشان",Underline:"ژێرهێڵ",Undo:"وەک خۆی لێ بکەوە",Unlink:"لابردنی بەستەر","Upload failed":"بارکردنەکە سەرنەکەووت","Upload in progress":"بارکردنەکە لە جێبەجێکردن دایە","Vertical text alignment toolbar":"",White:"سپی","Widget toolbar":"تووڵامرازی ویدجێت",Width:"",Yellow:"زەرد","Yellow marker":"نیشانەکەری زەرد"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/lt.js b/public/js/ckedit5/20.0.0_/translations/lt.js new file mode 100644 index 0000000..8d20a13 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/lt.js @@ -0,0 +1 @@ +(function(d){ const l = d['lt'] = d['lt'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Centruoti","Align left":"Lygiuoti į kairę","Align right":"Lygiuoti į dešinę","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Aquamarine",Background:"",Big:"Didelis",Black:"Juoda","Block quote":"Citata",Blue:"Mėlyna","Blue marker":"Mėlynas žymeklis",Bold:"Paryškintas",Border:"","Bulleted List":"Sąrašas",Cancel:"Atšaukti","Cell properties":"","Center table":"","Centered image":"Vaizdas centre","Change image text alternative":"Pakeisti vaizdo alternatyvųjį tekstą","Choose heading":"Pasirinkite antraštę",Code:"Kodas",Color:"","Color picker":"",Column:"Stulpelis",Dashed:"","Decrease indent":"Sumažinti atitraukimą",Default:"Numatyta","Delete column":"Ištrinti stulpelį","Delete row":"Ištrinti eilutę","Dim grey":"Pilkšva",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"Keisti nuorodą","Editor toolbar":"","Enter image caption":"Įveskite vaizdo antraštę","Font Background Color":"Šrifto fono spalva","Font Color":"Šrifto spalva","Font Family":"Šrifto šeima","Font Size":"Šrifto dydis","Full size image":"Pilno dydžio vaizdas",Green:"Žalia","Green marker":"Žalias žymeklis","Green pen":"Žalias žymeklis",Grey:"Pilka",Groove:"","Header column":"Antraštės stulpelis","Header row":"Antraštės eilutė",Heading:"Antraštė","Heading 1":"Antraštė 1","Heading 2":"Antraštė 2","Heading 3":"Antraštė 3","Heading 4":"Antraštė 4","Heading 5":"Antraštė 5","Heading 6":"Antraštė 6",Height:"",Highlight:"Pažymėti žymekliu","Horizontal text alignment toolbar":"",Huge:"Milžiniškas","Image toolbar":"","image widget":"vaizdų valdiklis","Increase indent":"Padidinti atitraukimą","Insert column left":"Įterpti stulpelį kairėje","Insert column right":"Įterpti stulpelį dešinėje","Insert image":"Įterpti vaizdą","Insert media":"Įterpkite media","Insert row above":"Įterpti eilutę aukščiau","Insert row below":"Įterpti eilutę žemiau","Insert table":"Įterpti lentelę",Inset:"",Italic:"Kursyvas",Justify:"Lygiuoti per visą plotį","Justify cell text":"","Left aligned image":"Vaizdas kairėje","Light blue":"Šviesiai mėlyna","Light green":"Šviesiai žalia","Light grey":"Šviesiai pilka",Link:"Pridėti nuorodą","Link URL":"Nuorodos URL","Media URL":"Media URL","media widget":"media valdiklis","Merge cell down":"Prijungti langelį apačioje","Merge cell left":"Prijungti langelį kairėje","Merge cell right":"Prijungti langelį dešinėje","Merge cell up":"Prijungti langelį viršuje","Merge cells":"Sujungti langelius",Next:"",None:"","Numbered List":"Numeruotas rąrašas","Open in a new tab":"","Open link in new tab":"Atidaryti nuorodą naujame skirtuke",Orange:"Oranžinė",Outset:"",Padding:"",Paragraph:"Paragrafas","Paste the media URL in the input.":"Įklijuokite media URL adresą į įvedimo lauką.","Pink marker":"Rožinis žymeklis",Previous:"",Purple:"Violetinė",Red:"Raudona","Red pen":"Raudonas žymeklis",Redo:"Pirmyn","Remove color":"Pašalinti spalvą","Remove Format":"Naikinti formatavimą","Remove highlight":"Panaikinti pažymėjimą","Rich Text Editor":"Raiškiojo teksto redaktorius","Rich Text Editor, %0":"Raiškiojo teksto redaktorius, %0",Ridge:"","Right aligned image":"Vaizdas dešinėje",Row:"Eilutė",Save:"Išsaugoti","Select column":"","Select row":"","Show more items":"","Side image":"Vaizdas šone",Small:"Mažas",Solid:"","Split cell horizontally":"Padalinti langelį horizontaliai","Split cell vertically":"Padalinti langelį vertikaliai",Strikethrough:"Perbrauktas",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Teksto lygiavimas","Text alignment toolbar":"","Text alternative":"Alternatyvusis tekstas","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL negali būti tuščias.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Ši nuorda neturi URL","This media URL is not supported.":"Šis media URL yra nepalaikomas.",Tiny:"Mažytis","Tip: Paste the URL into the content to embed faster.":"Patarimas: norėdami greičiau įterpti media tiesiog įklijuokite URL į turinį.",Turquoise:"Turkio","Type or paste your content here.":"","Type your title":"",Underline:"Pabrauktas",Undo:"Atgal",Unlink:"Pašalinti nuorodą","Upload failed":"Įkelti nepavyko","Upload in progress":"Įkelima","Vertical text alignment toolbar":"",White:"Balta",Width:"",Yellow:"Geltona","Yellow marker":"Geltonas žymeklis"} );l.getPluralForm=function(n){return (n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/lv.js b/public/js/ckedit5/20.0.0_/translations/lv.js new file mode 100644 index 0000000..7b34c58 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/lv.js @@ -0,0 +1 @@ +(function(d){ const l = d['lv'] = d['lv'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 no %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Centrēt","Align left":"Pa kreisi","Align right":"Pa labi","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Akvamarīns",Background:"",Big:"Liels",Black:"Melns","Block quote":"Citāts",Blue:"Zils","Blue marker":"Zils marķieris",Bold:"Trekns",Border:"","Bulleted List":"Nenumurēts Saraksts",Cancel:"Atcelt","Cell properties":"","Center table":"","Centered image":"Centrēts attēls","Change image text alternative":"Mainīt attēla alternatīvo tekstu","Choose heading":"Izvēlēties virsrakstu",Code:"Kods",Color:"","Color picker":"",Column:"Kolonna",Dashed:"","Decrease indent":"Samazināt atkāpi",Default:"Noklusējuma","Delete column":"Dzēst kolonnu","Delete row":"Dzēst rindu","Dim grey":"Blāvi pelēks",Dimensions:"","Document colors":"Krāsas dokumentā",Dotted:"",Double:"",Downloadable:"Lejupielādējams","Dropdown toolbar":"Papildus izvēlnes rīkjosla","Edit link":"Labot Saiti","Editor toolbar":"Redaktora rīkjosla","Enter image caption":"Ievadiet attēla parakstu","Font Background Color":"Fonta fona krāsa","Font Color":"Fonta krāsa","Font Family":"Fonts","Font Size":"Fonta Lielums","Full size image":"Pilna izmēra attēls",Green:"Zaļš","Green marker":"Zaļš marķieris","Green pen":"Zaļa pildspalva",Grey:"Pelēks",Groove:"","Header column":"Šī kolonna ir galvene","Header row":"Šī rinda ir galvene",Heading:"Virsraksts","Heading 1":"Virsraksts 1","Heading 2":"Virsraksts 2","Heading 3":"Virsraksts 3","Heading 4":"Virsraksts 4","Heading 5":"Virsraksts 5","Heading 6":"Virsraksts 6",Height:"",Highlight:"Izcelt","Horizontal line":"Horizontāli atdalošā līnija","Horizontal text alignment toolbar":"",Huge:"Milzīgs","Image toolbar":"Attēlu rīkjosla","image widget":"attēla sīkrīks","Increase indent":"Palielināt atkāpi","Insert code block":"Ievietot koda bloku","Insert column left":"Ievietot kolonnu pa kreisi","Insert column right":"Ievietot kolonnu pa labi","Insert image":"Ievietot attēlu","Insert media":"Ievietot mediju","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Ievietot rindu virs","Insert row below":"Ievietot rindu zem","Insert table":"Ievietot tabulu",Inset:"",Italic:"Kursīvs",Justify:"Izlīdzināt abas malas","Justify cell text":"","Left aligned image":"Pa kreisi līdzināts attēls","Light blue":"Gaiši zils","Light green":"Gaiši zaļš","Light grey":"Gaiši pelēks",Link:"Saite","Link URL":"Saites URL","Media URL":"Medija URL","media widget":"medija sīkrīks","Merge cell down":"Apvienot šūnas uz leju","Merge cell left":"Apvienot šūnas pa kreisi","Merge cell right":"Apvienot šūnas pa labi","Merge cell up":"Apvienot šūnas uz augšu","Merge cells":"Apvienot šūnas",Next:"Nākamā",None:"","Numbered List":"Numurēts Saraksts","Open in a new tab":"Atvērt jaunā cilnē","Open link in new tab":"Atvērt saiti jaunā cilnē",Orange:"Oranžs",Outset:"",Padding:"","Page break":"Lappuses pārtraukums",Paragraph:"Pagrāfs","Paste the media URL in the input.":"Ielīmējiet medija URL teksta laukā.","Pink marker":"Rozā marķieris","Plain text":"Vienkāršs teksts",Previous:"Iepriekšējā",Purple:"Violets",Red:"Sarkans","Red pen":"Sarkana pildspalva",Redo:"Uz priekšu","Remove color":"Noņemt krāsu","Remove Format":"Noņemt formatējumu","Remove highlight":"Noņemt izcēlumu","Rich Text Editor":"Bagātinātais Teksta Redaktors","Rich Text Editor, %0":"Bagātinātais Teksta Redaktors, %0",Ridge:"","Right aligned image":"Pa labi līdzināts attēls",Row:"Rinda",Save:"Saglabāt","Select column":"","Select row":"","Show more items":"Parādīt vairāk vienumus","Side image":"Sānā novietots attēls",Small:"Mazs",Solid:"","Split cell horizontally":"Atdalīt šūnu horizontāli","Split cell vertically":"Atdalīt šūnu vertikāli",Strikethrough:"Nosvītrots",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Tabulas rīkjosla","Text alignment":"Teksta izlīdzināšana","Text alignment toolbar":"Teksta līdzināšanas rīkjosla","Text alternative":"Alternatīvais teksts","Text highlight toolbar":"Teksta izcēluma rīkjosla","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL ir jābūt ievadītam.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Saitei nav norādīts URL","This media URL is not supported.":"Šis medija URL netiek atbalstīts.",Tiny:"Ļoti mazs","Tip: Paste the URL into the content to embed faster.":"Padoms: Ielīmējiet adresi saturā, lai iegultu",Turquoise:"Tirkīza","Type or paste your content here.":"Rakstiet vai ielīmējiet saturu šeit.","Type your title":"Ievadiet virsrakstu",Underline:"Pasvītrots",Undo:"Atsaukt",Unlink:"Noņemt Saiti","Upload failed":"Augšupielāde neizdevusies","Upload in progress":"Notiek augšupielāde","Vertical text alignment toolbar":"",White:"Balts","Widget toolbar":"Sīkrīku rīkjosla",Width:"",Yellow:"Dzeltens","Yellow marker":"Dzeltens marķieris"} );l.getPluralForm=function(n){return (n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/nb.js b/public/js/ckedit5/20.0.0_/translations/nb.js new file mode 100644 index 0000000..7567893 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/nb.js @@ -0,0 +1 @@ +(function(d){ const l = d['nb'] = d['nb'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Midstill","Align left":"Venstrejuster","Align right":"Høyrejuster","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Big:"Stor",Black:"","Block quote":"Blokksitat",Blue:"","Blue marker":"Blå uthevingsfarge",Bold:"Fet",Border:"","Bulleted List":"Punktmerket liste",Cancel:"Avbryt","Cell properties":"","Center table":"","Centered image":"Midtstilt bilde","Change image text alternative":"Endre tekstalternativ for bilde","Choose heading":"Velg overskrift",Code:"Kode",Color:"","Color picker":"",Column:"Kolonne",Dashed:"",Default:"Standard","Delete column":"Slett kolonne","Delete row":"Slett rad","Dim grey":"",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"Rediger lenke","Editor toolbar":"","Enter image caption":"Skriv inn bildetekst","Font Background Color":"","Font Color":"","Font Family":"Skrifttype","Font Size":"Skriftstørrelse","Full size image":"Bilde i full størrelse",Green:"","Green marker":"Grønn uthevingsfarge","Green pen":"Grønn penn",Grey:"",Groove:"","Header column":"Overskriftkolonne","Header row":"Overskriftrad",Heading:"Overskrift","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"","Heading 5":"","Heading 6":"",Height:"",Highlight:"Utheving","Horizontal text alignment toolbar":"",Huge:"Veldig stor","Image toolbar":"","image widget":"Bilde-widget","Insert column left":"","Insert column right":"","Insert image":"Sett inn bilde","Insert row above":"Sett inn rad over","Insert row below":"Sett inn rad under","Insert table":"Sett inn tabell",Inset:"",Italic:"Kursiv",Justify:"Blokkjuster","Justify cell text":"","Left aligned image":"Venstrejustert bilde","Light blue":"","Light green":"","Light grey":"",Link:"Lenke","Link URL":"URL for lenke","Merge cell down":"Slå sammen celle ned","Merge cell left":"Slå sammen celle til venstre","Merge cell right":"Slå sammen celle til høyre","Merge cell up":"Slå sammen celle opp","Merge cells":"Slå sammen celler",Next:"",None:"","Numbered List":"Nummerert liste","Open in a new tab":"","Open link in new tab":"Åpne lenke i ny fane",Orange:"",Outset:"",Padding:"",Paragraph:"Avsnitt","Pink marker":"Rosa uthevingsfarge",Previous:"",Purple:"",Red:"","Red pen":"Rød penn",Redo:"Gjør om","Remove color":"","Remove highlight":"Fjern uthevingsfarge","Rich Text Editor":"Rikteksteditor","Rich Text Editor, %0":"Rikteksteditor, %0",Ridge:"","Right aligned image":"Høyrejustert bilde",Row:"Rad",Save:"Lagre","Select column":"","Select row":"","Show more items":"","Side image":"Sidebilde",Small:"Liten",Solid:"","Split cell horizontally":"Del celle horisontalt","Split cell vertically":"Del celle vertikalt",Strikethrough:"Gjennomstreking",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Tekstjustering","Text alignment toolbar":"","Text alternative":"Tekstalternativ for bilde","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Denne lenken har ingen URL",Tiny:"Veldig liten",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"Understreking",Undo:"Angre",Unlink:"Fjern lenke","Upload failed":"Opplasting feilet","Upload in progress":"Opplasting pågår","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:"","Yellow marker":"Gul uthevingsfarge"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/ne.js b/public/js/ckedit5/20.0.0_/translations/ne.js new file mode 100644 index 0000000..3723d25 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/ne.js @@ -0,0 +1 @@ +(function(d){ const l = d['ne'] = d['ne'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"०% मध्ये १%","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"केन्द्र पङ्क्तिबद्ध गर्नुहोस्","Align left":"बायाँ पङ्क्तिबद्ध गर्नुहोस्","Align right":"दायाँ पङ्क्तिबद्ध गर्नुहोस्","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"अव्कवामरिन",Background:"",Big:"ठूलो",Black:"कालो","Block quote":"ब्लक उद्धरण",Blue:"निलो","Blue marker":"नीलो मार्कर",Bold:"बोल्ड",Border:"","Bulleted List":"गोली चिन्ह अङ्कित सूची",Cancel:"रद्द गर्नुहोस्","Cell properties":"","Center table":"","Centered image":"केन्द्रित तस्वीर","Change image text alternative":"तस्वीर पाठ विकल्प परिवर्तन गर्नुहोस्","Choose heading":"शीर्षक छनौट गर्नुहोस्",Code:"कोड",Color:"","Color picker":"",Column:"स्तम्भ",Dashed:"","Decrease indent":"इन्डेन्ट घटाउन",Default:"पूर्वनिर्धारित","Delete column":"स्तम्भ मेटाउनुहोस्","Delete row":"पङ्क्ति मेटाउनुहोस्","Dim grey":"धमिलो खैरो",Dimensions:"","Document colors":"कागजात रंग",Dotted:"",Double:"",Downloadable:"डाउनलोड योग्य","Dropdown toolbar":"","Edit link":"लिङ्क सम्पादन गर्नुहोस्","Editor toolbar":"","Enter image caption":"तस्वीर क्याप्शन प्रविष्ट गर्नुहोस्","Font Background Color":"पृष्ठभूमिको फन्ट रंग","Font Color":"फन्ट रंग","Font Family":"फन्ट परिवार","Font Size":"फन्ट आकार","Full size image":"पूर्ण आकार तस्वीर",Green:"हरियो","Green marker":"हरियो मार्कर","Green pen":"हरियो कलम",Grey:"खैरो",Groove:"","Header column":"हेडर स्तम्भ","Header row":"हेडर पङ्क्ति",Heading:"शीर्षक","Heading 1":"शीर्षक-एक","Heading 2":"शीर्षक २","Heading 3":"शीर्षक ३","Heading 4":"शीर्षक ४","Heading 5":"शीर्षक ५","Heading 6":"शीर्षक ६",Height:"",Highlight:"हाइलाइट","Horizontal text alignment toolbar":"",Huge:"विशाल","Image toolbar":"","image widget":"तस्वीर विजेट","Increase indent":"इन्डेन्ट बढाउन","Insert column left":"बायाँ स्तम्भ सम्मिलित गर्न","Insert column right":"दायाँ स्तम्भ सम्मिलित गर्न","Insert image":"तस्वीर सम्मिलित गर्नुहोस्","Insert media":"मिडिया सम्मिलित गर्नुहोस्।","Insert row above":"माथि पंक्ति सम्मिलित गर्नुहोस्","Insert row below":"तल पंक्ति सम्मिलित गर्नुहोस्","Insert table":"तालिका सम्मिलित गर्नुहोस्",Inset:"",Italic:"इटालिक",Justify:"जस्टिफाइ गर्नुहोस्","Justify cell text":"","Left aligned image":"बायाँ पङ्क्ति तस्वीर","Light blue":"हल्का निलो","Light green":"हल्का हरियो","Light grey":"हल्का खैरो",Link:"लिङ्क","Link URL":"लिङ्क यूआरएल","Media URL":"मिडिया यूआरएल","media widget":"मिडिया विजेट","Merge cell down":"कक्ष तल मर्ज गर्नुहोस्","Merge cell left":"सेल बायाँ मर्ज गर्नुहोस्","Merge cell right":"दायाँ कक्ष मर्ज गर्नुहोस्","Merge cell up":"कक्ष माथि मर्ज गर्नुहोस्","Merge cells":"कक्ष मर्ज गर्नुहोस्",Next:"अर्को",None:"","Numbered List":"सूचीबद्ध सूची","Open in a new tab":"नयाँ ट्याबमा खोल्न","Open link in new tab":"नयाँ ट्याबमा लिङ्क खोल्नुहोस्",Orange:"सुन्तला रंग",Outset:"",Padding:"",Paragraph:"अनुच्छेद","Paste the media URL in the input.":"इनपुटमा मिडिया यूआरएल पेस्ट गर्नुहोस्।","Pink marker":"गुलाबी मार्कर",Previous:"अघिल्लो",Purple:"बैंगनी रंग",Red:"रातो","Red pen":"रातो कलम",Redo:"रिडु","Remove color":"रंग हटाउन","Remove Format":"ढाँचा हटाउनुहोस्","Remove highlight":"हाइलाइट हटाउनुहोस्","Rich Text Editor":"धनी पाठ सम्पादक","Rich Text Editor, %0":"धनी पाठ सम्पादक, %0",Ridge:"","Right aligned image":"दायाँ पङ्क्तिबद्ध तस्वीर",Row:"पङ्क्ति",Save:"सुरक्षित गर्नुहोस्","Select column":"","Select row":"","Show more items":"","Side image":"साइड तस्वीर",Small:"सानो",Solid:"","Split cell horizontally":"क्षैतिज कक्ष विभाजित गर्नुहोस्","Split cell vertically":"ठाडो कक्ष विभाजित गर्नुहोस्",Strikethrough:"स्ट्राइकथ्रू",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"पाठ संरेखण","Text alignment toolbar":"","Text alternative":"पाठ विकल्प","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"यूआरएल खाली हुनु हुँदैन।","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"यो लिङ्कसँग यूआरएल छैन","This media URL is not supported.":"यो मिडिया यूआरएल समर्थित छैन।",Tiny:"सानो","Tip: Paste the URL into the content to embed faster.":"सुझाव:छिटो इम्बेड गर्न यूआरएल सामग्रीमा पेस्ट गर्नुहोस्।",Turquoise:"त्रकोइस","Type or paste your content here.":"","Type your title":"",Underline:"रेखांकन",Undo:"पूर्ववत",Unlink:"अनलिङ्क गर्नुहोस्","Upload failed":"अपलोड असफल भयो","Upload in progress":"अपलोड हुदैछ","Vertical text alignment toolbar":"",White:"सेतो",Width:"",Yellow:"पहेंलो","Yellow marker":"पहेंलो मार्कर"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/nl.js b/public/js/ckedit5/20.0.0_/translations/nl.js new file mode 100644 index 0000000..45a2904 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/nl.js @@ -0,0 +1 @@ +(function(d){ const l = d['nl'] = d['nl'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"0% van 1%","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Midden uitlijnen","Align left":"Links uitlijnen","Align right":"Rechts uitlijnen","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Aquamarijn",Background:"",Big:"Groot",Black:"Zwart","Block quote":"Blok citaat",Blue:"Blauw","Blue marker":"Blauwe marker",Bold:"Vet",Border:"","Bulleted List":"Ongenummerde lijst",Cancel:"Annuleren","Cell properties":"","Center table":"","Centered image":"Gecentreerde afbeelding","Change image text alternative":"Verander alt-tekst van de afbeelding","Choose heading":"Kies kop",Code:"Code",Color:"","Color picker":"",Column:"Kolom",Dashed:"","Decrease indent":"Minder inspringen",Default:"Standaard","Delete column":"Verwijder kolom","Delete row":"Verwijder rij","Dim grey":"Gedimd grijs",Dimensions:"","Document colors":"Document kleur",Dotted:"",Double:"",Downloadable:"Downloadbaar","Dropdown toolbar":"Drop-down werkbalk","Edit link":"Bewerk link","Editor toolbar":"Editor welkbalk","Enter image caption":"Typ een afbeeldingsbijschrift","Font Background Color":"Tekst achtergrondkleur","Font Color":"Tekstkleur","Font Family":"Lettertype","Font Size":"Lettergrootte","Full size image":"Afbeelding op volledige grootte",Green:"Groen","Green marker":"Groene marker","Green pen":"Groene pen",Grey:"Grijs",Groove:"","Header column":"Titel kolom","Header row":"Titel rij",Heading:"Koppen","Heading 1":"Kop 1","Heading 2":"Kop 2","Heading 3":"Kop 3","Heading 4":"Kop 4","Heading 5":"Kop 5","Heading 6":"Kop 6",Height:"",Highlight:"Markeren","Horizontal line":"Horizontale lijn","Horizontal text alignment toolbar":"",Huge:"Zeer groot","Image toolbar":"Afbeeldingswerkbalk","image widget":"afbeeldingswidget","Increase indent":"Inspringen","Insert code block":"Codeblok invoegen","Insert column left":"Kolom links invoegen","Insert column right":"Kolom rechts invoegen","Insert image":"Afbeelding toevoegen","Insert media":"Voer media in","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Rij hierboven invoegen","Insert row below":"Rij hieronder invoegen","Insert table":"Tabel invoegen",Inset:"",Italic:"Cursief",Justify:"Volledig uitlijnen","Justify cell text":"","Left aligned image":"Links uitgelijnde afbeelding","Light blue":"Lichtblauw","Light green":"Lichtgroen","Light grey":"Lichtgrijs",Link:"Link","Link URL":"Link URL","Media URL":"Media URL","media widget":"media widget","Merge cell down":"Cel hieronder samenvoegen","Merge cell left":"Cel hiervoor samenvoegen","Merge cell right":"Cel hierna samenvoegen","Merge cell up":"Cel hierboven samenvoegen","Merge cells":"Cellen samenvoegen",Next:"Volgende",None:"","Numbered List":"Genummerde lijst","Open in a new tab":"Open een nieuw tabblad","Open link in new tab":"Open link in nieuw tabblad",Orange:"Oranje",Outset:"",Padding:"","Page break":"Pagina einde",Paragraph:"Paragraaf","Paste the media URL in the input.":"Plak de media URL in het invoerveld.","Pink marker":"Roze marker","Plain text":"",Previous:"Vorige",Purple:"Paars",Red:"Rood","Red pen":"Rode pen",Redo:"Opnieuw","Remove color":"Verwijder kleur","Remove Format":"Verwijder format","Remove highlight":"Verwijder markering","Rich Text Editor":"Tekstbewerker","Rich Text Editor, %0":"Tekstbewerker, 0%",Ridge:"","Right aligned image":"Rechts uitgelijnde afbeelding",Row:"Rij",Save:"Opslaan","Select column":"","Select row":"","Show more items":"Meer items weergeven","Side image":"Afbeelding naast tekst",Small:"Klein",Solid:"","Split cell horizontally":"Splits cel horizontaal","Split cell vertically":"Splits cel verticaal",Strikethrough:"Doorhalen",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Tabel werkbalk","Text alignment":"Tekst uitlijning","Text alignment toolbar":"Tekst uitlijning werkbalk","Text alternative":"Alt-tekst","Text highlight toolbar":"Tekst markering werkbalk","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"De URL mag niet leeg zijn.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Deze link heeft geen URL","This media URL is not supported.":"Deze media URL wordt niet ondersteund.",Tiny:"Zeer klein","Tip: Paste the URL into the content to embed faster.":"Tip: plak de URL in de inhoud om deze sneller in te laten sluiten.",Turquoise:"Turquoise","Type or paste your content here.":"Voer or plak uw inhoud in","Type your title":"Voor uw titel in",Underline:"Onderlijnen",Undo:"Ongedaan maken",Unlink:"Verwijder link","Upload failed":"Uploaden afbeelding mislukt","Upload in progress":"Bezig met uploaden","Vertical text alignment toolbar":"",White:"Wit","Widget toolbar":"Widget werkbalk",Width:"",Yellow:"Geel","Yellow marker":"Gele marker"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/no.js b/public/js/ckedit5/20.0.0_/translations/no.js new file mode 100644 index 0000000..4898eca --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/no.js @@ -0,0 +1 @@ +(function(d){ const l = d['no'] = d['no'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 av %1","Align cell text to the bottom":"Juster celletekst til bunn ","Align cell text to the center":"Juster celletekst til midten ","Align cell text to the left":"Juster celletekst til venstre ","Align cell text to the middle":"Juster celletekst til midten","Align cell text to the right":"Juster celletekst til høyre ","Align cell text to the top":"Juster celletekst til topp","Align center":"Midtstill","Align left":"Venstrejuster","Align right":"Høyrejuster","Align table to the left":"Juster tabell til venstre ","Align table to the right":"Juster tabell til høyre ",Alignment:"Justering",Aquamarine:"Akvamarin",Background:"Bakgrunn ",Big:"Stor",Black:"Svart","Block quote":"Blokksitat",Blue:"Blå","Blue marker":"Blå utheving",Bold:"Fet",Border:"Kantlinje ","Bulleted List":"Punktliste",Cancel:"Avbryt","Cell properties":"Celleegenskaper ","Center table":"Sentrer tabell ","Centered image":"Midtstilt bilde","Change image text alternative":"Endre tekstalternativ til bildet","Choose heading":"Velg overskrift",Code:"Kode",Color:"Farge","Color picker":"Fargevalg ",Column:"Kolonne",Dashed:"Stiplet","Decrease indent":"Reduser innrykk",Default:"Standard","Delete column":"Slett kolonne","Delete row":"Slett rad","Dim grey":"Svak grå",Dimensions:"Dimensjoner","Document colors":"Dokumentfarger",Dotted:"Stiplede",Double:"Dobbel ",Downloadable:"Nedlastbar","Dropdown toolbar":"Verktøylinje for nedtrekksliste","Edit link":"Rediger lenke","Editor toolbar":"Verktøylinje for redigeringsverktøy","Enter image caption":"Skriv inn bildetekst","Font Background Color":"Uthevingsfarge for tekst","Font Color":"Skriftfarge","Font Family":"Skrifttypefamilie","Font Size":"Skriftstørrelse","Full size image":"Bilde i full størrelse",Green:"Grønn","Green marker":"Grønn utheving","Green pen":"Grønn penn",Grey:"Grå",Groove:"Grov","Header column":"Overskriftkolonne","Header row":"Overskriftrad",Heading:"Overskrift","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"Overskrift 4","Heading 5":"Overskrift 5","Heading 6":"Overskrift 6",Height:"Høyde",Highlight:"Utheving","Horizontal line":"Horisontal linje","Horizontal text alignment toolbar":"Verktøylinje for justering av tekst horisontalt ",Huge:"Veldig stor","Image toolbar":"Verktøylinje for bilde","image widget":"Bilde-widget","Increase indent":"Øk innrykk","Insert code block":"Sett inn kodeblokk","Insert column left":"Sett inn kolonne til venstre","Insert column right":"Sett inn kolonne til høyre","Insert image":"Sett inn bilde","Insert media":"Sett inn media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Sett inn rad over","Insert row below":"Sett inn rad under","Insert table":"Sett inn tabell",Inset:"Innover",Italic:"Kursiv",Justify:"Blokkjuster","Justify cell text":"Rett celletekst ","Left aligned image":"Venstrejustert bilde","Light blue":"Lyseblå","Light green":"Lysegrønn","Light grey":"Lysegrå",Link:"Lenke","Link URL":"Lenke-URL","Media URL":"Media-URL","media widget":"media-widget","Merge cell down":"Slå sammen celle under","Merge cell left":"Slå sammen celle til venstre","Merge cell right":"Slå sammen celle til høyre","Merge cell up":"Slå sammen celle over","Merge cells":"Slå sammen celler",Next:"Neste",None:"Ingen","Numbered List":"Nummerert liste","Open in a new tab":"Åpne i ny fane","Open link in new tab":"Åpne lenke i ny fane",Orange:"Oransje",Outset:"Utover",Padding:"Fylling","Page break":"Sideskift ",Paragraph:"Avsnitt","Paste the media URL in the input.":"Lim inn media URL ","Pink marker":"Rosa utheving","Plain text":"Ren tekst",Previous:"Forrige",Purple:"Lilla",Red:"Rød","Red pen":"Rød penn",Redo:"Gjør om","Remove color":"Fjern farge","Remove Format":"Fjern formatering","Remove highlight":"Fjern utheving","Rich Text Editor":"Tekstredigeringsverktøy for rik tekst","Rich Text Editor, %0":"Tekstredigeringsverktøy for rik tekst, %0",Ridge:"Kjede","Right aligned image":"Høyrejustert bilde",Row:"Rad",Save:"Lagre","Select all":"Velg alt ","Select column":"Velg kolonne ","Select row":"Velg rad","Show more items":"Vis flere elementer","Side image":"Sidestilt bilde",Small:"Liten",Solid:"Hel","Split cell horizontally":"Del opp celle horisontalt","Split cell vertically":"Del opp celle vertikalt",Strikethrough:"Gjennomstreket",Style:"Stil ","Table alignment toolbar":"Verktøylinje for justering av tabell ","Table cell text alignment":"Celle tekstjustering ","Table properties":"Egenskaper for tabell","Table toolbar":"Tabell verktøylinje ","Text alignment":"Tekstjustering","Text alignment toolbar":"Verktøylinje for tekstjustering","Text alternative":"Tekstalternativ","Text highlight toolbar":"Verktøylinje for tekstutheving","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Ugyldig farge ","The URL must not be empty.":"URL-en kan ikke være tom.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Ugyldig verdi ","This link has no URL":"Denne lenken mangler en URL","This media URL is not supported.":"Denne media-URL-en er ikke støttet.",Tiny:"Veldig liten","Tip: Paste the URL into the content to embed faster.":"Tips: lim inn URL i innhold for bedre hastighet ",Turquoise:"Turkis","Type or paste your content here.":"Skriv eller lim inn ditt innhold her","Type your title":"Skriv inn tittel",Underline:"Understreket",Undo:"Angre",Unlink:"Fjern lenke","Upload failed":"Kunne ikke laste opp","Upload in progress":"Laster opp fil","Vertical text alignment toolbar":"Verktøylinje for justering av tekst vertikalt ",White:"Hvit","Widget toolbar":"Widget verktøylinje ",Width:"Bredde",Yellow:"Gul","Yellow marker":"Gul utheving"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/oc.js b/public/js/ckedit5/20.0.0_/translations/oc.js new file mode 100644 index 0000000..87bb44c --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/oc.js @@ -0,0 +1 @@ +(function(d){ const l = d['oc'] = d['oc'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {Bold:"Gras",Cancel:"Anullar",Code:"",Italic:"Italica","Remove color":"",Save:"Enregistrar",Strikethrough:"",Underline:""} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/pl.js b/public/js/ckedit5/20.0.0_/translations/pl.js new file mode 100644 index 0000000..c9b59e2 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/pl.js @@ -0,0 +1 @@ +(function(d){ const l = d['pl'] = d['pl'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 z %1","Align cell text to the bottom":"Wyrównaj tekst w komórce do dołu","Align cell text to the center":"Wyrównaj tekst w komórce do środka","Align cell text to the left":"Wyrównaj tekst w komórce do lewej","Align cell text to the middle":"Wyrównaj tekst w komórce do środka","Align cell text to the right":"Wyrównaj tekst w komórce do prawej","Align cell text to the top":"Wyrównaj tekst w komórce do góry","Align center":"Wyrównaj do środka","Align left":"Wyrównaj do lewej","Align right":"Wyrównaj do prawej","Align table to the left":"Wyrównaj tabelę do lewej","Align table to the right":"Wyrównaj tabelę do prawej",Alignment:"Wyrównanie","Almost equal to":"",Angle:"","Approximately equal to":"",Aquamarine:"Akwamaryna","Asterisk operator":"","Austral sign":"Znak australa","back with leftwards arrow above":"",Background:"Tło",Big:"Duży","Bitcoin sign":"Znak bitcoina",Black:"Czarny","Block quote":"Cytat blokowy",Blue:"Niebieski","Blue marker":"Niebieski marker",Bold:"Pogrubienie",Border:"Obramowanie","Bulleted List":"Lista wypunktowana",Cancel:"Anuluj","Cedi sign":"Znak cedi","Cell properties":"Właściwości komórki","Cent sign":"Znak centa","Center table":"Wyrównaj tabelę do środka","Centered image":"Obraz wyrównany do środka","Change image text alternative":"Zmień tekst zastępczy obrazka","Character categories":"Kategorie znaków","Choose heading":"Wybierz nagłówek",Code:"Kod","Colon sign":"Znak colona",Color:"Kolor","Color picker":"",Column:"Kolumna","Contains as member":"","Copyright sign":"","Cruzeiro sign":"Znak cruzeiro","Currency sign":"Znak waluty",Dashed:"Kreskowane","Decrease indent":"Zmniejsz wcięcie",Default:"Domyślny","Degree sign":"","Delete column":"Usuń kolumnę","Delete row":"Usuń wiersz","Dim grey":"Ciemnoszary",Dimensions:"Wymiary","Division sign":"","Document colors":"Kolory dokumentu","Dollar sign":"Znak dolara","Dong sign":"Znak donga",Dotted:"Kropkowane",Double:"Podwójne","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"",Downloadable:"Do pobrania","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"Znak drachmy","Dropdown toolbar":"Rozwijany pasek narzędzi","Edit link":"Edytuj odnośnik","Editor toolbar":"Pasek narzędzi edytora","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Enter image caption":"Wstaw tytuł obrazka","Euro sign":"Znak euro","Euro-currency sign":"Znak euro","Exclamation question mark":"","Font Background Color":"Kolor tła czcionki","Font Color":"Kolor czcionki","Font Family":"Czcionka","Font Size":"Rozmiar czcionki","For all":"","Fraction slash":"","French franc sign":"Znak franka francuskiego","Full size image":"Obraz w pełnym rozmiarze","German penny sign":"Znak feniga","Greater-than or equal to":"","Greater-than sign":"",Green:"Zielony","Green marker":"Zielony marker","Green pen":"Zielony długopis",Grey:"Szary",Groove:"Wklęsłe","Guarani sign":"Znak guarani","Header column":"Kolumna nagłówka","Header row":"Wiersz nagłówka",Heading:"Nagłówek","Heading 1":"Nagłówek 1","Heading 2":"Nagłówek 2","Heading 3":"Nagłówek 3","Heading 4":"Nagłówek 4","Heading 5":"Nagłówek 5","Heading 6":"Nagłówek 6",Height:"Wysokość",Highlight:"Podświetlenie","Horizontal ellipsis":"","Horizontal line":"Linia pozioma","Horizontal text alignment toolbar":"Pasek narzędzi wyrównania tekstu w poziomie","Hryvnia sign":"Znak hrywny",Huge:"Bardzo duży","Identical to":"","Image toolbar":"Pasek narzędzi obrazka","image widget":"Obraz","Increase indent":"Zwiększ wcięcie","Indian rupee sign":"Znak rupii indyjskiej",Infinity:"","Insert code block":"Wstaw blok kodu","Insert column left":"Wstaw kolumnę z lewej","Insert column right":"Wstaw kolumnę z prawej","Insert image":"Wstaw obraz","Insert media":"Wstaw media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Wstaw wiersz ponad","Insert row below":"Wstaw wiersz poniżej","Insert table":"Wstaw tabelę",Inset:"Zapadnięte",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"",Italic:"Kursywa",Justify:"Wyrównaj obustronnie","Justify cell text":"Wyjustuj tekst komórki","Kip sign":"Znak kipa","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left aligned image":"Obraz wyrównany do lewej","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"","Less-than or equal to":"","Less-than sign":"","Light blue":"Jasnoniebieski","Light green":"Jasnozielony","Light grey":"Jasnoszary",Link:"Wstaw odnośnik","Link URL":"Adres URL","Lira sign":"Znak liry","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"Znak manata","Media URL":"Adres URL","media widget":"widget osadzenia mediów","Merge cell down":"Scal komórkę w dół","Merge cell left":"Scal komórkę w lewo","Merge cell right":"Scal komórkę w prawo","Merge cell up":"Scal komórkę w górę","Merge cells":"Scal komórki","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"Znak nairy","New sheqel sign":"Znak nowego szekla",Next:"Następny",None:"Brak","Nordic mark sign":"Znak marki nordyckiej","Not an element of":"","Not equal to":"","Not sign":"","Numbered List":"Lista numerowana","on with exclamation mark with left right arrow above":"","Open in a new tab":"Otwórz w nowej zakładce","Open link in new tab":"Otwórz odnośnik w nowym oknie",Orange:"Pomarańczowy",Outset:"Wysunięte",Overline:"",Padding:"Dopełnienie","Page break":"Podział strony",Paragraph:"Akapit","Paragraph sign":"","Partial differential":"","Paste the media URL in the input.":"Wklej adres URL mediów do pola.","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"Znak pesety","Peso sign":"Znak peso","Pink marker":"Różowy marker","Plain text":"Zwykły tekst","Plus-minus sign":"","Pound sign":"Znak funta",Previous:"Poprzedni","Proportional to":"",Purple:"Purpurowy","Question exclamation mark":"",Red:"Czerwony","Red pen":"Czerwony długopis",Redo:"Ponów","Registered sign":"","Remove color":"Usuń kolor","Remove Format":"Usuń formatowanie","Remove highlight":"Usuń podświetlenie","Reversed paragraph sign":"","Rich Text Editor":"Edytor tekstu sformatowanego","Rich Text Editor, %0":"Edytor tekstu sformatowanego, %0",Ridge:"Wypukłe","Right aligned image":"Obraz wyrównany do prawej","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"",Row:"Wiersz","Ruble sign":"Znak rubla","Rupee sign":"Znak rupii",Save:"Zapisz","Section sign":"","Select all":"Zaznacz wszystko","Select column":"","Select row":"","Show more items":"Pokaż więcej","Side image":"Obraz dosunięty do brzegu, oblewany tekstem","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"",Small:"Mały",Solid:"Ciągłe","soon with rightwards arrow above":"","Special characters":"Znaki specjalne","Spesmilo sign":"","Split cell horizontally":"Podziel komórkę poziomo","Split cell vertically":"Podziel komórkę pionowo","Square root":"",Strikethrough:"Przekreślenie",Style:"Styl","Table alignment toolbar":"Pasek narzędzi wyrównania tabeli","Table cell text alignment":"Wyrównanie tekstu komórki tabeli","Table properties":"Właściwości tabeli","Table toolbar":"Pasek narzędzi tabel","Tenge sign":"Znak tenge","Text alignment":"Wyrównanie tekstu","Text alignment toolbar":"Pasek narzędzi wyrównania tekstu","Text alternative":"Tekst zastępczy obrazka","Text highlight toolbar":"Pasek narzędzi podświetleń","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Kolor jest niepoprawny. Spróbuj wpisać \"#FF0000\", \"rgb(255,0,0)\" lub \"red\".","The URL must not be empty.":"Adres URL nie może być pusty.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Wartość jest niepoprawna. Spróbuj wpisać \"10px\", \"2em\" lub po prostu \"2\".","There exists":"","This link has no URL":"Nie podano adresu URL odnośnika","This media URL is not supported.":"Ten rodzaj adresu URL nie jest obsługiwany.","Tilde operator":"",Tiny:"Bardzo mały","Tip: Paste the URL into the content to embed faster.":"Wskazówka: Wklej URL do treści edytora, by łatwiej osadzić media.","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"Znak tugrika","Turkish lira sign":"Znak liry tureckiej",Turquoise:"Turkusowy","Two dot leader":"","Type or paste your content here.":"Wpisz lub wklej tutaj treść dokumentu.","Type your title":"Podaj tytuł",Underline:"Podkreślenie",Undo:"Cofnij",Union:"",Unlink:"Usuń odnośnik","up down arrow with base":"","Upload failed":"Przesyłanie obrazu nie powiodło się","Upload in progress":"Trwa przesyłanie","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vertical text alignment toolbar":"Pasek narzędzi wyrównania tekstu w pionie","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"",White:"Biały","Widget toolbar":"Pasek widgetów",Width:"Szerokość","Won sign":"Znak wona",Yellow:"Żółty","Yellow marker":"Żółty marker","Yen sign":"Znak jena"} );l.getPluralForm=function(n){return (n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/pt-br.js b/public/js/ckedit5/20.0.0_/translations/pt-br.js new file mode 100644 index 0000000..426bbda --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/pt-br.js @@ -0,0 +1 @@ +(function(d){ const l = d['pt-br'] = d['pt-br'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 de %1","Align cell text to the bottom":"Alinhar texto da célula para baixo","Align cell text to the center":"Alinhar texto da célula centralizado","Align cell text to the left":"Alinhar texto da célula para a esquerda","Align cell text to the middle":"Alinhar texto da célula para o meio","Align cell text to the right":"Alinhar texto da célula para a direita","Align cell text to the top":"Alinhar texto da célula para o topo","Align center":"Centralizar","Align left":"Alinhar à esquerda","Align right":"Alinhar à direita","Align table to the left":"Alinhar tabela para esquerda","Align table to the right":"Alinhar tabela para direita",Alignment:"Alinhamento","Almost equal to":"",Angle:"","Approximately equal to":"",Aquamarine:"Água-marinha","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"",Background:"Cor de fundo",Big:"Grande","Bitcoin sign":"Símbolo do Bitcoin",Black:"Preto","Block quote":"Bloco de citação",Blue:"Azul","Blue marker":"Marcador azul",Bold:"Negrito",Border:"Borda","Bulleted List":"Lista com marcadores",Cancel:"Cancelar","Cedi sign":"","Cell properties":"Propriedades da célula","Cent sign":"","Center table":"Centralizar tabela","Centered image":"Imagem centralizada","Change image text alternative":"Alterar texto alternativo da imagem","Character categories":"Categoria de caracteres","Choose heading":"Escolha o título",Code:"Código","Colon sign":"",Color:"Cor","Color picker":"Seletor de cor",Column:"Coluna","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"Símbolo de moeda",Dashed:"Tracejada","Decrease indent":"Diminuir indentação",Default:"Padrão","Degree sign":"","Delete column":"Excluir coluna","Delete row":"Excluir linha","Dim grey":"Cinza escuro",Dimensions:"Dimensões","Division sign":"","Document colors":"Cores do documento","Dollar sign":"Símbolo do dólar","Dong sign":"",Dotted:"Pontilhada",Double:"Dupla","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"",Downloadable:"Pode ser baixado","downwards arrow to bar":"","downwards dashed arrow":"Seta tracejada para baixo","downwards double arrow":"Seta dupla para baixo","Drachma sign":"","Dropdown toolbar":"Barra de Ferramentas da Lista Suspensa","Edit link":"Editar link","Editor toolbar":"Ferramentas do Editor","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Enter image caption":"Inserir legenda da imagem","Euro sign":"Símbolo do Euro","Euro-currency sign":"","Exclamation question mark":"","Font Background Color":"Cor de Fundo","Font Color":"Cor da Fonte","Font Family":"Fonte","Font Size":"Tamanho da fonte","For all":"","Fraction slash":"","French franc sign":"","Full size image":"Imagem completa","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"",Green:"Verde","Green marker":"Marcador verde","Green pen":"Caneta verde",Grey:"Cinza",Groove:"Ranhura","Guarani sign":"","Header column":"Coluna de cabeçalho","Header row":"Linha de cabeçalho",Heading:"Titulo","Heading 1":"Título 1","Heading 2":"Título 2","Heading 3":"Título 3","Heading 4":"Título 4","Heading 5":"Título 5","Heading 6":"Título 6",Height:"Altura",Highlight:"Realce","Horizontal ellipsis":"","Horizontal line":"Linha horizontal","Horizontal text alignment toolbar":"Ferramentas de alinhamento horizontal do texto","Hryvnia sign":"",Huge:"Gigante","Identical to":"","Image toolbar":"Ferramentas de Imagem","image widget":"Ferramenta de imagem","Increase indent":"Aumentar indentação","Indian rupee sign":"",Infinity:"","Insert code block":"Inserir bloco de código","Insert column left":"Inserir coluna à esquerda","Insert column right":"Inserir coluna à direita","Insert image":"Inserir imagem","Insert media":"Inserir mídia","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Inserir linha acima","Insert row below":"Inserir linha abaixo","Insert table":"Inserir tabela",Inset:"Baixo relevo",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"",Italic:"Itálico",Justify:"Justificar","Justify cell text":"Justificar texto da célula","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left aligned image":"Imagem alinhada à esquerda","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"Seta tracejada para esquerda","leftwards double arrow":"Seta dupla para esquerda","Less-than or equal to":"","Less-than sign":"","Light blue":"Azul claro","Light green":"Verde claro","Light grey":"Cinza claro",Link:"Link","Link URL":"URL","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Media URL":"URL da mídia","media widget":"Ferramenta de mídia","Merge cell down":"Mesclar abaixo","Merge cell left":"Mesclar à esquerda","Merge cell right":"Mesclar à direita","Merge cell up":"Mesclar acima","Merge cells":"Mesclar células","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"",Next:"Próximo",None:"Sem borda","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","Numbered List":"Lista numerada","on with exclamation mark with left right arrow above":"","Open in a new tab":"Abrir em nova aba","Open link in new tab":"Abrir link em nova aba",Orange:"Laranja",Outset:"Alto relevo",Overline:"",Padding:"Margem interna","Page break":"Quebra de página",Paragraph:"Parágrafo","Paragraph sign":"","Partial differential":"","Paste the media URL in the input.":"Cole o endereço da mídia no campo.","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Pink marker":"Marcador rosa","Plain text":"Texto plano","Plus-minus sign":"","Pound sign":"",Previous:"Anterior","Proportional to":"",Purple:"Púrpura","Question exclamation mark":"",Red:"Vermelho","Red pen":"Caneta vermelha",Redo:"Refazer","Registered sign":"","Remove color":"Remover cor","Remove Format":"Remover Formatação","Remove highlight":"Remover realce","Reversed paragraph sign":"","Rich Text Editor":"Editor de Formatação","Rich Text Editor, %0":"Editor de Formatação, %0",Ridge:"Crista","Right aligned image":"Imagem alinhada à direita","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"Seta tracejada para direita","rightwards double arrow":"Seta dupla para direita",Row:"Linha","Ruble sign":"","Rupee sign":"",Save:"Salvar","Section sign":"","Select all":"Selecionar tudo","Select column":"Selecionar coluna","Select row":"Selecionar linha","Show more items":"Exibir mais itens","Side image":"Imagem lateral","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"",Small:"Pequeno",Solid:"Sólida","soon with rightwards arrow above":"","Special characters":"Caracteres especiais","Spesmilo sign":"","Split cell horizontally":"Dividir horizontalmente","Split cell vertically":"Dividir verticalmente","Square root":"",Strikethrough:"Tachado",Style:"Estilo","Table alignment toolbar":"Ferramentas de alinhamento da tabela","Table cell text alignment":"Alinhamento do texto na célula","Table properties":"Propriedades da tabela","Table toolbar":"Ferramentas de Tabela","Tenge sign":"","Text alignment":"Alinhamento do texto","Text alignment toolbar":"Ferramentas de alinhamento de texto","Text alternative":"Texto alternativo","Text highlight toolbar":"Ferramentas de realce","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Cor inválida. Tente \"#FF0000\" ou \"rgb(255,0,0)\" ou \"red\"","The URL must not be empty.":"A URL não pode ficar em branco.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Valor inválido. Tente \"10px\" ou \"2em\" ou apenas \"2\"","There exists":"","This link has no URL":"Este link não possui uma URL","This media URL is not supported.":"A URL desta mídia não é suportada.","Tilde operator":"",Tiny:"Minúsculo","Tip: Paste the URL into the content to embed faster.":"Cole o endereço dentro do conteúdo para embutir mais rapidamente.","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"",Turquoise:"Turquesa","Two dot leader":"","Type or paste your content here.":"Digite ou cole o conteúdo aqui.","Type your title":"Digite o título",Underline:"Sublinhado",Undo:"Desfazer",Union:"",Unlink:"Remover link","up down arrow with base":"","Upload failed":"Falha ao subir arquivo","Upload in progress":"Enviando dados","upwards arrow to bar":"","upwards dashed arrow":"Seta tracejada para cima","upwards double arrow":"Seta dupla para cima","Vertical text alignment toolbar":"Ferramentas de alinhamento vertical do texto","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"",White:"Branco","Widget toolbar":"Ferramentas de Widgets",Width:"Largura","Won sign":"",Yellow:"Amarelo","Yellow marker":"Marcador amarelo","Yen sign":"Símbolo do Yen"} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/pt.js b/public/js/ckedit5/20.0.0_/translations/pt.js new file mode 100644 index 0000000..b1c0056 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/pt.js @@ -0,0 +1 @@ +(function(d){ const l = d['pt'] = d['pt'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align center":"Alinhar ao centro","Align left":"Alinhar à esquerda","Align right":"Alinhar à direita",Aquamarine:"",Big:"",Black:"",Blue:"",Bold:"Negrito","Bulleted List":"Lista não ordenada",Cancel:"Cancelar","Centered image":"Imagem centrada","Change image text alternative":"","Choose heading":"",Code:"Código",Default:"Padrão","Dim grey":"","Document colors":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"Indicar legenda da imagem","Font Background Color":"","Font Color":"","Font Family":"","Font Size":"","Full size image":"Imagem em tamanho completo",Green:"",Grey:"",Heading:"Cabeçalho","Heading 1":"Cabeçalho 1","Heading 2":"Cabeçalho 2","Heading 3":"Cabeçalho 3","Heading 4":"","Heading 5":"","Heading 6":"",Huge:"","Image toolbar":"","image widget":"módulo de imagem","Insert image":"Inserir imagem",Italic:"Itálico",Justify:"Justificar","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"Hiperligação","Link URL":"URL da ligação",Next:"","Numbered List":"Lista ordenada","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"Parágrafo",Previous:"",Purple:"",Red:"",Redo:"Refazer","Remove color":"","Rich Text Editor":"Editor de texto avançado","Rich Text Editor, %0":"Editor de texto avançado, %0","Right aligned image":"",Save:"Guardar","Show more items":"","Side image":"Imagem lateral",Small:"",Strikethrough:"","Text alignment":"Alinhamento de texto","Text alignment toolbar":"Ferramentas de alinhamento de texto","Text alternative":"Texto alternativo","This link has no URL":"",Tiny:"",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"",Undo:"Desfazer",Unlink:"Desligar","Upload failed":"Falha ao carregar",White:"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/ro.js b/public/js/ckedit5/20.0.0_/translations/ro.js new file mode 100644 index 0000000..07b1a3b --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/ro.js @@ -0,0 +1 @@ +(function(d){ const l = d['ro'] = d['ro'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 din %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Aliniază la centru","Align left":"Aliniază la stânga","Align right":"Aliniază la dreapta","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Acvamarin",Background:"",Big:"Mare",Black:"Negru","Block quote":"Bloc citat",Blue:"Albastru","Blue marker":"Evidențiator albastru",Bold:"Îngroșat",Border:"","Bulleted List":"Listă cu puncte",Cancel:"Anulare","Cell properties":"","Center table":"","Centered image":"Imagine aliniată pe centru","Change image text alternative":"Schimbă textul alternativ al imaginii","Choose heading":"Alege titlu",Code:"Cod",Color:"","Color picker":"",Column:"Coloană",Dashed:"","Decrease indent":"Micșorează indent",Default:"Implicită","Delete column":"Șterge coloană","Delete row":"Șterge rând","Dim grey":"Gri slab",Dimensions:"","Document colors":"Culorile din document",Dotted:"",Double:"",Downloadable:"Descărcabil","Dropdown toolbar":"Bară listă opțiuni","Edit link":"Modifică link","Editor toolbar":"Bară editor","Enter image caption":"Introdu titlul descriptiv al imaginii","Font Background Color":"Culoarea de fundal a fontului","Font Color":"Culoare font","Font Family":"Familie font","Font Size":"Dimensiune font","Full size image":"Imagine mărime completă",Green:"Verde","Green marker":"Evidențiator verde","Green pen":"Pix verde",Grey:"Gri",Groove:"","Header column":"Antet coloană","Header row":"Rând antet",Heading:"Titlu","Heading 1":"Titlu 1","Heading 2":"Titlu 2","Heading 3":"Titlu 3","Heading 4":"Titlu 4","Heading 5":"Titlu 5","Heading 6":"Titlu 6",Height:"",Highlight:"Evidențiere text","Horizontal text alignment toolbar":"",Huge:"Foarte mare","Image toolbar":"Bară imagine","image widget":"widget imagine","Increase indent":"Mărește indent","Insert column left":"Inserează coloană la stânga","Insert column right":"Inserează coloană la dreapta","Insert image":"Inserează imagine","Insert media":"Inserează media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Inserează rând deasupra","Insert row below":"Inserează rând dedesubt","Insert table":"Inserează tabel",Inset:"",Italic:"Cursiv",Justify:"Aliniază stânga-dreapta","Justify cell text":"","Left aligned image":"Imagine aliniată la stânga","Light blue":"Albastru deschis","Light green":"Verde deschis","Light grey":"Gri deschis",Link:"Link","Link URL":"Link URL","Media URL":"Media URL","media widget":"widget media","Merge cell down":"Îmbină celula în jos","Merge cell left":"Îmbină celula la stânga","Merge cell right":"Îmbină celula la dreapta","Merge cell up":"Îmbină celula în sus","Merge cells":"Îmbină celulele",Next:"Înainte",None:"","Numbered List":"Listă numerotată","Open in a new tab":"Deschide în tab nou","Open link in new tab":"Deschide link în tab nou",Orange:"Portocaliu",Outset:"",Padding:"",Paragraph:"Paragraf","Paste the media URL in the input.":"Adaugă URL-ul media in input.","Pink marker":"Evidențiator roz",Previous:"Înapoi",Purple:"Violet",Red:"Roșu","Red pen":"Pix roșu",Redo:"Revenire","Remove color":"Șterge culoare","Remove Format":"Șterge formatare","Remove highlight":"Șterge evidențiere text","Rich Text Editor":"Editor de text","Rich Text Editor, %0":"Editor de text, %0",Ridge:"","Right aligned image":"Imagine aliniată la dreapta",Row:"Rând",Save:"Salvare","Select column":"","Select row":"","Show more items":"","Side image":"Imagine laterală",Small:"Mică",Solid:"","Split cell horizontally":"Scindează celula pe orizontală","Split cell vertically":"Scindează celula pe verticală",Strikethrough:"Tăiere text cu o linie",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Bară tabel","Text alignment":"Aliniere text","Text alignment toolbar":"Bara aliniere text","Text alternative":"Text alternativ","Text highlight toolbar":"Bară evidențiere text","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL-ul nu trebuie să fie gol.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Acest link nu are niciun URL","This media URL is not supported.":"Acest URL media nu este suportat.",Tiny:"Foarte mică","Tip: Paste the URL into the content to embed faster.":"Sugestie: adaugă URL-ul în conținut pentru a fi adăugat mai rapid.",Turquoise:"Turcoaz","Type or paste your content here.":"","Type your title":"",Underline:"Subliniat",Undo:"Anulare",Unlink:"Șterge link","Upload failed":"Încărcare eșuată","Upload in progress":"Încărcare în curs","Vertical text alignment toolbar":"",White:"Alb","Widget toolbar":"Bară widget",Width:"",Yellow:"Galben","Yellow marker":"Evidențiator galben"} );l.getPluralForm=function(n){return (n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/ru.js b/public/js/ckedit5/20.0.0_/translations/ru.js new file mode 100644 index 0000000..e653e1b --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/ru.js @@ -0,0 +1 @@ +(function(d){ const l = d['ru'] = d['ru'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 из %1","Align cell text to the bottom":"Выровнять текст ячейки по нижнему краю","Align cell text to the center":"Выровнять текст по центру","Align cell text to the left":"Выровнять текст по левому краю","Align cell text to the middle":"Выровнять текст ячейки по центру","Align cell text to the right":"Выровнять текст по правому краю","Align cell text to the top":"Выровнять текст ячейки по верхнему краю","Align center":"Выравнивание по центру","Align left":"Выравнивание по левому краю","Align right":"Выравнивание по правому краю","Align table to the left":"Выровнять таблицу по левому краю","Align table to the right":"Выровнять таблицу по правому краю",Alignment:"Выравнивание","Almost equal to":"",Angle:"","Approximately equal to":"",Aquamarine:"Аквамариновый","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"",Background:"Фон",Big:"Крупный","Bitcoin sign":"",Black:"Чёрный","Block quote":"Цитата",Blue:"Синий","Blue marker":"Выделение синим маркером",Bold:"Жирный",Border:"Граница","Bulleted List":"Маркированный список",Cancel:"Отмена","Cedi sign":"","Cell properties":"Свойства ячейки","Cent sign":"","Center table":"Выровнять таблицу по центру","Centered image":"Выравнивание по центру","Change image text alternative":"Редактировать альтернативный текст","Character categories":"Категории","Choose heading":"Выбор стиля",Code:"Исходный код","Colon sign":"",Color:"Цвет","Color picker":"Выбор цвета",Column:"Столбец","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"",Dashed:"Пунктирная","Decrease indent":"Уменьшить отступ",Default:"По умолчанию","Degree sign":"","Delete column":"Удалить столбец","Delete row":"Удалить строку","Dim grey":"Тёмно-серый",Dimensions:"Размеры","Division sign":"","Document colors":"Цвет страницы","Dollar sign":"","Dong sign":"",Dotted:"Точечная",Double:"Двойная","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"",Downloadable:"Загружаемые","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"","Dropdown toolbar":"Выпадающая панель инструментов","Edit link":"Редактировать ссылку","Editor toolbar":"Панель инструментов редактора","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Enter image caption":"Подпись к изображению","Euro sign":"","Euro-currency sign":"","Exclamation question mark":"","Font Background Color":"Цвет фона","Font Color":"Цвет шрифта","Font Family":"Семейство шрифтов","Font Size":"Размер шрифта","For all":"","Fraction slash":"","French franc sign":"","Full size image":"Оригинальный размер изображения","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"",Green:"Зелёный","Green marker":"Выделение зелёным маркером","Green pen":"Зеленый цвет текста",Grey:"Серый",Groove:"Желобчатая","Guarani sign":"","Header column":"Столбец заголовков","Header row":"Строка заголовков",Heading:"Стиль","Heading 1":"Заголовок 1","Heading 2":"Заголовок 2","Heading 3":"Заголовок 3","Heading 4":"Заголовок 4","Heading 5":"Заголовок 5","Heading 6":"Заголовок 6",Height:"Высота",Highlight:"Выделить","Horizontal ellipsis":"","Horizontal line":"Горизонтальная линия","Horizontal text alignment toolbar":"Панель инструментов горизонтального выравнивания текста","Hryvnia sign":"",Huge:"Очень крупный","Identical to":"","Image toolbar":"Панель инструментов изображения","image widget":"Виджет изображений","Increase indent":"Увеличить отступ","Indian rupee sign":"",Infinity:"","Insert code block":"Вставить код","Insert column left":"Вставить столбец слева","Insert column right":"Вставить столбец справа","Insert image":"Вставить изображение","Insert media":"Вставить медиа","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Вставить строку выше","Insert row below":"Вставить строку ниже","Insert table":"Вставить таблицу",Inset:"Вдавленная",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"",Italic:"Курсив",Justify:"Выравнивание по ширине","Justify cell text":"Выровнять текст по ширине","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left aligned image":"Выравнивание по левому краю","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"","Less-than or equal to":"","Less-than sign":"","Light blue":"Голубой","Light green":"Салатовый","Light grey":"Светло-серый",Link:"Ссылка","Link URL":"Ссылка URL","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Media URL":"URL медиа","media widget":"медиа-виджет","Merge cell down":"Объединить с ячейкой снизу","Merge cell left":"Объединить с ячейкой слева","Merge cell right":"Объединить с ячейкой справа","Merge cell up":"Объединить с ячейкой сверху","Merge cells":"Объединить ячейки","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"",Next:"Следующий",None:"Нет","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","Numbered List":"Нумерованный список","on with exclamation mark with left right arrow above":"","Open in a new tab":"Открыть в новой вкладке","Open link in new tab":"Открыть ссылку в новой вкладке",Orange:"Оранжевый",Outset:"Выпуклая",Overline:"",Padding:"Отступ","Page break":"Разрыв страницы",Paragraph:"Параграф","Paragraph sign":"","Partial differential":"","Paste the media URL in the input.":"Вставьте URL медиа в поле ввода.","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Pink marker":"Выделение розовым маркером","Plain text":"Простой текст","Plus-minus sign":"","Pound sign":"",Previous:"Предыдущий","Proportional to":"",Purple:"Фиолетовый","Question exclamation mark":"",Red:"Красный","Red pen":"Красный цвет текста",Redo:"Повторить","Registered sign":"","Remove color":"Убрать цвет","Remove Format":"Убрать форматирование","Remove highlight":"Убрать выделение","Reversed paragraph sign":"","Rich Text Editor":"Редактор","Rich Text Editor, %0":"Редактор, %0",Ridge:"Ребристая","Right aligned image":"Выравнивание по правому краю","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"",Row:"Строка","Ruble sign":"","Rupee sign":"",Save:"Сохранить","Section sign":"","Select all":"Выбрать все","Select column":"Выбрать столбец","Select row":"Выбрать строку","Show more items":"Другие инструменты","Side image":"Боковое изображение","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"",Small:"Мелкий",Solid:"Сплошная","soon with rightwards arrow above":"","Special characters":"Спецсимволы","Spesmilo sign":"","Split cell horizontally":"Разделить ячейку горизонтально","Split cell vertically":"Разделить ячейку вертикально","Square root":"",Strikethrough:"Зачеркнутый",Style:"Стиль","Table alignment toolbar":"Панель инструментов выравнивания таблицы","Table cell text alignment":"Выравнивание текста в ячейке таблицы","Table properties":"Свойства таблицы","Table toolbar":"Панель инструментов таблицы","Tenge sign":"","Text alignment":"Выравнивание текста","Text alignment toolbar":"Выравнивание","Text alternative":"Альтернативный текст","Text highlight toolbar":"Панель инструментов выделения текста","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Неверный цвет. Попробуйте \"#FF0000\" или \"rgb(255,0,0)\" или \"red\".","The URL must not be empty.":"URL не должен быть пустым.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Неверное значение. Попробуйте \"10px\" или \"2em\" или просто \"2\".","There exists":"","This link has no URL":"Для этой ссылки не установлен адрес URL","This media URL is not supported.":"Этот URL медиа не поддерживается.","Tilde operator":"",Tiny:"Очень мелкий","Tip: Paste the URL into the content to embed faster.":"Подсказка: Вставьте URL в контент для быстрого включения.","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"",Turquoise:"Бирюзовый","Two dot leader":"","Type or paste your content here.":"Введите или вставьте сюда ваш текст","Type your title":"Введите заголовок",Underline:"Подчеркнутый",Undo:"Отменить",Union:"",Unlink:"Убрать ссылку","up down arrow with base":"","Upload failed":"Загрузка не выполнена","Upload in progress":"Идёт загрузка","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vertical text alignment toolbar":"Панель инструментов вертикального выравнивания текста","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"",White:"Белый","Widget toolbar":"Панель инструментов виджета",Width:"Ширина","Won sign":"",Yellow:"Жёлтый","Yellow marker":"Выделение жёлтым маркером","Yen sign":""} );l.getPluralForm=function(n){return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/si.js b/public/js/ckedit5/20.0.0_/translations/si.js new file mode 100644 index 0000000..9095b28 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/si.js @@ -0,0 +1 @@ +(function(d){ const l = d['si'] = d['si'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {Bold:"තදකුරු","Bulleted List":"බුලටිත ලැයිස්තුව","Centered image":"","Change image text alternative":"",Code:"","Enter image caption":"","Full size image":"","Image toolbar":"","image widget":"","Insert image":"පින්තූරය ඇතුල් කරන්න",Italic:"ඇලකුරු","Left aligned image":"","Numbered List":"අංකිත ලැයිස්තුව",Redo:"නැවත කරන්න","Right aligned image":"","Side image":"",Strikethrough:"","Text alternative":"",Underline:"",Undo:"අහෝසි කරන්න","Upload failed":"උඩුගත කිරීම අසාර්ථක විය"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/sk.js b/public/js/ckedit5/20.0.0_/translations/sk.js new file mode 100644 index 0000000..651b08f --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/sk.js @@ -0,0 +1 @@ +(function(d){ const l = d['sk'] = d['sk'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 z %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Zarovnať na stred","Align left":"Zarovnať vľavo","Align right":"Zarovnať vpravo","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Akvamarínová",Background:"",Big:"Veľké",Black:"Čierna","Block quote":"Citát",Blue:"Modrá","Blue marker":"Modrý zvýrazňovač",Bold:"Tučné",Border:"","Bulleted List":"Zoznam s odrážkami",Cancel:"Zrušiť","Cell properties":"","Center table":"","Centered image":"Zarovnať na stred","Change image text alternative":"Zmeňte alternatívny text obrázka","Choose heading":"Vyberte nadpis",Code:"Kód",Color:"","Color picker":"",Column:"Stĺpec",Dashed:"","Decrease indent":"Zmenšiť odsadenie",Default:"Predvolené","Delete column":"Odstrániť stĺpec","Delete row":"Odstrániť riadok","Dim grey":"Tmavosivá",Dimensions:"","Document colors":"Farby dokumentu",Dotted:"",Double:"",Downloadable:"Na stiahnutie","Dropdown toolbar":"Panel nástrojov roletového menu","Edit link":"Upraviť odkaz","Editor toolbar":"Panel nástrojov editora","Enter image caption":"Vložte popis obrázka","Font Background Color":"Farba zvýraznenia textu","Font Color":"Farba písma","Font Family":"Názov písma","Font Size":"Veľkosť písma","Full size image":"Obrázok v plnej veľkosti",Green:"Zelená","Green marker":"Zelený zvýrazňovač","Green pen":"Zelené pero",Grey:"Sivá",Groove:"","Header column":"Stĺpec hlavičky","Header row":"Riadok hlavičky",Heading:"Nadpis","Heading 1":"Nadpis 1","Heading 2":"Nadpis 2","Heading 3":"Nadpis 3","Heading 4":"Nadpis 4","Heading 5":"Nadpis 5","Heading 6":"Nadpis 6",Height:"",Highlight:"Zvýraznenie","Horizontal line":"Vodorovná čiara","Horizontal text alignment toolbar":"",Huge:"Veľmi veľké","Image toolbar":"Panel nástrojov obrázka","image widget":"widget obrázka","Increase indent":"Zväčšiť odsadenie","Insert code block":"Vložte blok kódu","Insert column left":"Vložiť stĺpec vľavo","Insert column right":"Vložiť stĺpec vpravo","Insert image":"Vložiť obrázok","Insert media":"Vložiť média","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Vložiť riadok nad","Insert row below":"Vložiť riadok pod","Insert table":"Vložiť tabuľku",Inset:"",Italic:"Kurzíva",Justify:"Do bloku","Justify cell text":"","Left aligned image":"Zarovnať vľavo","Light blue":"Bledomodrá","Light green":"Bledozelená","Light grey":"Bledosivá",Link:"Odkaz","Link URL":"URL adresa","Media URL":"URL média","media widget":"Nástroj pre médiá","Merge cell down":"Zlúčiť bunku dole","Merge cell left":"Zlúčiť bunku vľavo","Merge cell right":"Zlúčiť bunku vpravo","Merge cell up":"Zlúčiť bunku hore","Merge cells":"Zlúčiť bunky",Next:"Ďalšie",None:"","Numbered List":"Číslovaný zoznam","Open in a new tab":"Otvoriť v novej záložke","Open link in new tab":"Otvoriť odkaz v novom okne",Orange:"Oranžová",Outset:"",Padding:"","Page break":"Zalomenie strany",Paragraph:"Paragraf","Paste the media URL in the input.":"Vložte URL média.","Pink marker":"Ružový zvýrazňovač","Plain text":"Čistý text",Previous:"Predchádzajúce",Purple:"Fialová",Red:"Červená","Red pen":"Červené pero",Redo:"Znova","Remove color":"Zrušiť farbu","Remove Format":"Vyčistiť formátovanie","Remove highlight":"Odstrániť zvýraznenie","Rich Text Editor":"Editor s formátovaním","Rich Text Editor, %0":"Editor s formátovaním, %0",Ridge:"","Right aligned image":"Zarovnať vpravo",Row:"Riadok",Save:"Uložiť","Select column":"","Select row":"","Show more items":"","Side image":"Bočný obrázok",Small:"Malé",Solid:"","Split cell horizontally":"Rozdeliť bunku vodorovne","Split cell vertically":"Rozdeliť bunku zvislo",Strikethrough:"Preškrtnuté",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Panel nástrojov tabuľky","Text alignment":"Zarovnanie textu","Text alignment toolbar":"Panel nástrojov zarovnania textu","Text alternative":"Alternatívny text","Text highlight toolbar":"Panel nástrojov zvýraznenia textu","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"Musíte zadať URL.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Tento odkaz nemá nastavenú URL adresu","This media URL is not supported.":"URL média nie je podporovaná.",Tiny:"Veľmi malé","Tip: Paste the URL into the content to embed faster.":"Tip: URL adresu média vložte do obsahu.",Turquoise:"Tyrkysová","Type or paste your content here.":"Vložte obsah","Type your title":"Vložte nadpis",Underline:"Podčiarknuté",Undo:"Späť",Unlink:"Zrušiť odkaz","Upload failed":"Nahrávanie zlyhalo","Upload in progress":"Prebieha nahrávanie","Vertical text alignment toolbar":"",White:"Biela","Widget toolbar":"Panel nástrojov ovládacieho prvku",Width:"",Yellow:"Žltá","Yellow marker":"Žltý zvýrazňovač"} );l.getPluralForm=function(n){return (n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/sl.js b/public/js/ckedit5/20.0.0_/translations/sl.js new file mode 100644 index 0000000..3894db2 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/sl.js @@ -0,0 +1 @@ +(function(d){ const l = d['sl'] = d['sl'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align center":"Sredinska poravnava","Align left":"Poravnava levo","Align right":"Poravnava desno",Aquamarine:"Akvamarin",Big:"Veliko",Black:"Črna","Block quote":"Blokiraj citat",Blue:"Modra",Bold:"Krepko",Cancel:"Prekliči","Choose heading":"Izberi naslov",Code:"Koda",Default:"Privzeto","Dim grey":"Temno siva","Document colors":"Barve dokumenta","Dropdown toolbar":"","Editor toolbar":"","Font Background Color":"Barva ozadja pisave","Font Color":"Barva pisave","Font Family":"Vrsta oz. tip pisave","Font Size":"Velikost pisave",Green:"Zelena",Grey:"Siva",Heading:"Naslov","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"","Heading 4":"","Heading 5":"","Heading 6":"",Huge:"Ogromno",Italic:"Poševno",Justify:"Postavi na sredino","Light blue":"Svetlo modra","Light green":"Svetlo zelena","Light grey":"Svetlo siva",Next:"",Orange:"Oranžna",Paragraph:"Odstavek",Previous:"",Purple:"Vijolična",Red:"Rdeča","Remove color":"Odstrani barvo","Rich Text Editor":"","Rich Text Editor, %0":"",Save:"Shrani","Show more items":"",Small:"Majhna",Strikethrough:"Prečrtano","Text alignment":"Poravnava besedila","Text alignment toolbar":"Orodna vrstica besedila",Tiny:"Drobna",Turquoise:"Turkizna","Type or paste your content here.":"","Type your title":"",Underline:"Podčrtaj",White:"Bela",Yellow:"Rumena"} );l.getPluralForm=function(n){return (n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/sq.js b/public/js/ckedit5/20.0.0_/translations/sq.js new file mode 100644 index 0000000..bd5943e --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/sq.js @@ -0,0 +1 @@ +(function(d){ const l = d['sq'] = d['sq'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Radhit në mes","Align left":"Radhit majtas","Align right":"Radhit djathtas","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Big:"I madh",Black:"","Block quote":"Thonjëzat",Blue:"","Blue marker":"Shënuesi kaltër",Bold:"Trash",Border:"","Bulleted List":"Listë me Pika",Cancel:"Anulo","Cell properties":"","Center table":"","Centered image":"Foto e vendosur në mes","Change image text alternative":"Ndrysho tekstin zgjedhor të fotos","Choose heading":"Përzgjidh nëntitullin",Code:"Kod",Color:"","Color picker":"",Column:"Kolona",Dashed:"",Default:"Parazgjedhur","Delete column":"Gris kolonën","Delete row":"Grish rreshtin","Dim grey":"",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"Redakto nyjën","Editor toolbar":"","Enter image caption":"Shto përshkrimin e fotos","Font Background Color":"","Font Color":"","Font Family":"Familja e fontit","Font Size":"Madhësia tekstit","Full size image":"Foto me madhësi të plotë",Green:"","Green marker":"Shënuesi gjelbër","Green pen":"Lapsi gjelbër",Grey:"",Groove:"","Header column":"Kolona e kokës","Header row":"Rreshti i kokës",Heading:"Nëntitulli","Heading 1":"Nëntitulli 1","Heading 2":"Nëntitulli 2","Heading 3":"Nëntitulli 3","Heading 4":"","Heading 5":"","Heading 6":"",Height:"",Highlight:"Ngjyrimi","Horizontal text alignment toolbar":"",Huge:"I stërmadh","Image toolbar":"","image widget":"Vegla e fotos","Insert column left":"","Insert column right":"","Insert image":"Shto Foto","Insert media":"Shto Medie","Insert row above":"Shto rresht sipër","Insert row below":"Shto rresht poshtë","Insert table":"Shto tabelë",Inset:"",Italic:"Pjerrtë",Justify:"Plotësim","Justify cell text":"","Left aligned image":"Foto e vendosur majtas","Light blue":"","Light green":"","Light grey":"",Link:"Shto nyjën","Link URL":"Nyja e URL-së","Media URL":"URL e Medies","media widget":"Vegla e medies","Merge cell down":"Bashko kutizat poshtë","Merge cell left":"Bashko kutizat majtas","Merge cell right":"Bashko kutizat djathtas","Merge cell up":"Bashko kutizat sipër","Merge cells":"Bashko kutizat",Next:"",None:"","Numbered List":"Listë me Numra","Open in a new tab":"","Open link in new tab":"Hap nyjën në faqe të re",Orange:"",Outset:"",Padding:"",Paragraph:"Paragrafi","Paste the media URL in the input.":"","Pink marker":"Shënuesi rozë",Previous:"",Purple:"",Red:"","Red pen":"Lapsi kuq",Redo:"Ribëj","Remove color":"","Remove highlight":"Largo ngjyrimet","Rich Text Editor":"Redaktues i Tekstit të Pasur","Rich Text Editor, %0":"Redaktues i Tekstit të Pasur, %0",Ridge:"","Right aligned image":"Foto e vendosur djathtas",Row:"Rreshti",Save:"Ruaj","Select column":"","Select row":"","Show more items":"","Side image":"Foto anësore",Small:"I vogël",Solid:"","Split cell horizontally":"Ndaj kutizat horizontalisht","Split cell vertically":"Ndajë kutizat vertikalisht",Strikethrough:"Vi në mes",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Radhitja e tekstit","Text alignment toolbar":"","Text alternative":"Teksti zgjedhor","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL nuk duhet të jetë e zbrazët.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Kjo nyje nuk ka URL","This media URL is not supported.":"URL e medies nuk mbështetet.",Tiny:"I vocërr","Tip: Paste the URL into the content to embed faster.":"",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"Nënvizuar",Undo:"Rikthe",Unlink:"Largo nyjën","Upload failed":"Ngarkimi dështoi","Upload in progress":"Duke ngarkuar","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:"","Yellow marker":"Shënuesi verdh"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/sr-latn.js b/public/js/ckedit5/20.0.0_/translations/sr-latn.js new file mode 100644 index 0000000..ef4fc00 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/sr-latn.js @@ -0,0 +1 @@ +(function(d){ const l = d['sr-latn'] = d['sr-latn'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 of %1","Align cell text to the bottom":"Poravnajte tekst ćelije prema dole","Align cell text to the center":"Poravnajte tekst ćelije u sredinu","Align cell text to the left":"Poravnajte tekst ćelije levo","Align cell text to the middle":"Poravnajte tekst ćelije u sredinu","Align cell text to the right":"Poravnajte tekst ćelije desno","Align cell text to the top":"Poravnajte tekst ćelije prema gore","Align center":"Centralno ravnanje","Align left":"Levo ravnanje","Align right":"Desno ravnanje","Align table to the left":"Poravnajte tabelu na levu stranu","Align table to the right":"Poravnajte tabelu na desnu stranu",Alignment:"Poravnanje","Almost equal to":"Skoro jednako",Angle:"Ugao","Approximately equal to":"Otprilike jednako",Aquamarine:"Zelenkastoplava","Asterisk operator":"Asterisk operator","Austral sign":"Australni znak","back with leftwards arrow above":"Nazad sa strelicom levo",Background:"Pozadina",Big:"Veliko","Bitcoin sign":"Znak bitcoina",Black:"Crna","Block quote":"Citat",Blue:"Plava","Blue marker":"Plavi marker",Bold:"Podebljano",Border:"Granica","Bulleted List":"Lista sa tačkama",Cancel:"Odustani","Cedi sign":"Znak cedi","Cell properties":"Svojstva ćelije","Cent sign":"Znak centа","Center table":"Centar tabele","Centered image":"Slika u sredini","Change image text alternative":"Izmena alternativnog teksta","Character categories":"Kategorija karaktera","Choose heading":"Odredi stil",Code:"Kod","Colon sign":"Dvotačka",Color:"Boja","Color picker":"Birač boja",Column:"Kolona","Contains as member":"Sadrži kao član","Copyright sign":"Simbol autorskog prava","Cruzeiro sign":"Znak cruzeiro","Currency sign":"Znak valute",Dashed:"Razbijeno","Decrease indent":"Smanji uvlačenje",Default:"Оsnovni","Degree sign":"Znak stepena","Delete column":"Briši kolonu","Delete row":"Briši red","Dim grey":"Bledo siva",Dimensions:"Dimenzija","Division sign":"Znak divizije","Document colors":"Boje dokumenta","Dollar sign":"Znak dolara","Dong sign":"Znak dong",Dotted:"Sa tačkama",Double:"Dvostruki","Double dagger":"Dvostruki bodež","Double exclamation mark":"Dvosrtuki uzvičnik","Double low-9 quotation mark":"Dvostruki niski-9 navodnik","Double question mark":"Dvostruki upitnik",Downloadable:"Moguće preuzimanje","downwards arrow to bar":"Strelica prema dole ka traci","downwards dashed arrow":"Prekidana strelica prema dole","downwards double arrow":"Dupla strelica prema dole","Drachma sign":"Znak drahma","Dropdown toolbar":"Padajuća traka sa alatkama","Edit link":"Ispravi link","Editor toolbar":"Uređivač traka sa alatkama","Element of":"Element od","Em dash":"Em crtica","Empty set":"Prazan set","En dash":"En crtica","end with leftwards arrow above":"Završite strelicom levo","Enter image caption":"Odredi tekst ispod slike","Euro sign":"Znak eura","Euro-currency sign":"Znak valute eura","Exclamation question mark":"Znak uzvičnika upitnika","Font Background Color":"Boja pozadine slova","Font Color":"Boja slova","Font Family":"Font","Font Size":"Veličina fonta","For all":"Za sve","Fraction slash":"Crta frakcije","French franc sign":"Znak francuskog franaka","Full size image":"Slika u punoj veličini","German penny sign":"Znak nemački peni","Greater-than or equal to":"Znak veće od ili jednako","Greater-than sign":"Znak veće od",Green:"Zelena","Green marker":"Zeleni marker","Green pen":"Zelena olovka",Grey:"Siva",Groove:"Kolosek","Guarani sign":"Znak guarani","Header column":"Kolona za zaglavlje","Header row":"Red za zaglavlje",Heading:"Stilovi","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6",Height:"Visina",Highlight:"Isticanje","Horizontal ellipsis":"Horizontalna elipsa","Horizontal line":"Horizontalna razdelna linija","Horizontal text alignment toolbar":"Horizontalna traka sa alatkama za poravnavanje teksta","Hryvnia sign":"Znak grivna",Huge:"Ogromno","Identical to":"Identičan","Image toolbar":"Slika traka sa alatkama","image widget":"modul sa slikom","Increase indent":"Povećaj uclačenje","Indian rupee sign":"Znak indijske rupije",Infinity:"Beskonačnost","Insert code block":"Dodaj blok koda","Insert column left":"Dodaj kolonu levo","Insert column right":"Dodaj kolonu desno","Insert image":"Dodaj sliku","Insert media":"Dodaj media","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Dodaj red iznad","Insert row below":"Dodaj red ispod","Insert table":"Dodaj tabelu",Inset:"Prilog",Integral:"Integral",Intersection:"Raskrsnica","Inverted exclamation mark":"Obrnuti uzvičnik","Inverted question mark":"Obrnuti upitnik",Italic:"Kurziv",Justify:"Obostrano ravnanje","Justify cell text":"Opravdajte tekst ćelije","Kip sign":"Znak kip","Latin capital letter a with breve":"Latinsko veliko slovo a sa brevom","Latin capital letter a with macron":"Latinsko veliko slovo a sa makronom","Latin capital letter a with ogonek":"Latinsko veliko slovo a sa ogonek","Latin capital letter c with acute":"Latinsko veliko slovo c sa akutom","Latin capital letter c with caron":"Latinsko veliko slovo c sa caronom","Latin capital letter c with circumflex":"Latinsko veliko slovo c sa circumflex","Latin capital letter c with dot above":"Latinsko veliko slovo c sa tačkom iznad","Latin capital letter d with caron":"Latinsko veliko slovo d sa caronom","Latin capital letter d with stroke":"Latinsko veliko slovo d sa stroke","Latin capital letter e with breve":"Latinsko veliko slovo e sa breve","Latin capital letter e with caron":"Latinsko veliko slovo e sa caron","Latin capital letter e with dot above":"Latinsko veliko slovo e sa tačkom iznad","Latin capital letter e with macron":"Latinsko veliko slovo e sa macron","Latin capital letter e with ogonek":"Latinsko veliko slovo e sa ogonek","Latin capital letter eng":"Latinsko veliko slovo eng","Latin capital letter g with breve":"Latinsko veliko slovo g sa breve","Latin capital letter g with cedilla":"Latinsko veliko slovo g sa cedillom","Latin capital letter g with circumflex":"Latinsko veliko slovo g sa circumflex","Latin capital letter g with dot above":"Latinsko veliko slovo g sa tačkom iznad","Latin capital letter h with circumflex":"Latinsko veliko slovo h sa circumflex","Latin capital letter h with stroke":"Latinsko veliko slovo h sa stroke","Latin capital letter i with breve":"Latinsko veloko slovo i sa breve","Latin capital letter i with dot above":"Latinsko veliko slovo i sa tackom iznad","Latin capital letter i with macron":"Latinsko veliko slovo i sa macron","Latin capital letter i with ogonek":"Latinsko veliko slovo i sa ogonek","Latin capital letter i with tilde":"Latinsko veliko slovo i sa tildom","Latin capital letter j with circumflex":"Latinsko veliko slovo j sa circumflex","Latin capital letter k with cedilla":"Latinsko veliko slovo k sa cedila","Latin capital letter l with acute":"Latinsko veloko slovo l sa akutom","Latin capital letter l with caron":"Latinsko veliko slovo l sa caron","Latin capital letter l with cedilla":"Latinsko veliko slovo l sa cedila","Latin capital letter l with middle dot":"Latinsko veliko slovo l sa srednjom tačkom","Latin capital letter l with stroke":"Latinsko veliko slovo l sa stroke","Latin capital letter n with acute":"Latinsko veliko slovo n sa akutom ","Latin capital letter n with caron":"Latinsko veliko slovo n sa caron","Latin capital letter n with cedilla":"Latinsko veliko slovo n sa cedilom","Latin capital letter o with breve":"Latinsko veliko slovo o sa breve","Latin capital letter o with double acute":"Latinsko veliko slovo o sa dvostrukom akutom","Latin capital letter o with macron":"Latinsko veliko slovo o sa macron","Latin capital letter r with acute":"Latinsko veliko slovo r sa akutom","Latin capital letter r with caron":"Latinsko veliko slovo r sa caron","Latin capital letter r with cedilla":"Latinsko veliko slovo r sa cedila","Latin capital letter s with acute":"Latinsko veliko slovo s sa akutom","Latin capital letter s with caron":"Latinsko veliko slovo s sa caron","Latin capital letter s with cedilla":"Latinsko veliko slovo s sa cedila","Latin capital letter s with circumflex":"Latinsko veliko slovo s sa circumflex","Latin capital letter t with caron":"Latinsko veliko slovo t sa caron","Latin capital letter t with cedilla":"Latinsko veliko slovo t sa cedila","Latin capital letter t with stroke":"Latinsko veliko slovo t sa stroke","Latin capital letter u with breve":"Latinsko veliko slovo u sa breve","Latin capital letter u with double acute":"Latinsko veliko slovo u s dvostrukom akutom","Latin capital letter u with macron":"Latinsko veliko slovo u sa macron","Latin capital letter u with ogonek":"Latinsko veliko slovo u sa ogonek","Latin capital letter u with ring above":"Latinsko veliko slovo u s prstenom iznad","Latin capital letter u with tilde":"Latinsko veliko slovo u sa tildom","Latin capital letter w with circumflex":"Latinsko veliko slovo w sa circumflex","Latin capital letter y with circumflex":"Latinsko veliko slovo y sa circumflex","Latin capital letter y with diaeresis":"Latinsko veliko slovo y sa dijarezom","Latin capital letter z with acute":"Latinsko veliko slovo z sa akutom","Latin capital letter z with caron":"Latinsko veliko slovo z sa caron","Latin capital letter z with dot above":"Latinsko veliko slovo z sa tačkom iznad","Latin capital ligature ij":"Latinska velika ligatura ij","Latin capital ligature oe":"Latinska velika ligatura oe","Latin small letter a with breve":"Latinsko malo slovo a sa brevom","Latin small letter a with macron":"Latinsko malo slovo a sa makronom","Latin small letter a with ogonek":"Latinsko malo slovo a sa ogonek","Latin small letter c with acute":"Latinsko malo slovo c sa akutom","Latin small letter c with caron":"Latinsko malo slovo c sa caronom","Latin small letter c with circumflex":"Latino malo slovo c sa circumflex","Latin small letter c with dot above":"Latinsko malo slovo c sa tačkom iznad","Latin small letter d with caron":"Latinsko malo slovo d sa caronom","Latin small letter d with stroke":"Latinsko malo slovo d sa stroke","Latin small letter dotless i":"Latinsko malo slovo i bez tačke","Latin small letter e with breve":"Latinsko malo slovo e sa breve","Latin small letter e with caron":"Latinsko malo slovo e sa caron","Latin small letter e with dot above":"Latinsko malo slovo e sa tačkom iznad","Latin small letter e with macron":"Latinsko malo slovo e sa macron","Latin small letter e with ogonek":"Latinsko malo slovo e sa ogonek","Latin small letter eng":"Latinsko malo slovo eng","Latin small letter f with hook":"Latinsko malo slovo f sa kukom","Latin small letter g with breve":"Latinsko malo slovo g sa breve","Latin small letter g with cedilla":"Latinsko malo slovo g sa cedillom","Latin small letter g with circumflex":"Latinsko malo slovo g sa circumflex","Latin small letter g with dot above":"Latinsko malo slovo g sa tačkom iznad","Latin small letter h with circumflex":"Latinsko malo slovo h sa circumflex","Latin small letter h with stroke":"Latinsko malo slovo h sa stroke","Latin small letter i with breve":"Latinsko malo slovo i sa breve","Latin small letter i with macron":"Latinsko malo slovo i sa macron","Latin small letter i with ogonek":"Latinsko malo slovo i sa ogonek","Latin small letter i with tilde":"Latinsko malo slovo i sa tildom","Latin small letter j with circumflex":"Latinsko malo slovo j sa circumflex","Latin small letter k with cedilla":"Latinsko malo slovo k sa cedila","Latin small letter kra":"Latinsko malo slovo kra","Latin small letter l with acute":"Latinsko malo slovo l sa akutom","Latin small letter l with caron":"Latinsko malo slovo l sa caron","Latin small letter l with cedilla":"Latinsko malo slovo l sa cedila","Latin small letter l with middle dot":"Latinsko malo slovo l sa srednjom tačkom","Latin small letter l with stroke":"Latinsko malo slovo l sa stroke","Latin small letter long s":"Latinsko malo slovo dugačko s","Latin small letter n preceded by apostrophe":"Latinsko malo slovo n koje prethodi apostrof","Latin small letter n with acute":"Latinsko malo slovo n sa akutom ","Latin small letter n with caron":"Latinsko malo slovo n sa caron ","Latin small letter n with cedilla":"Latinsko malo slovo n sa cedilom","Latin small letter o with breve":"Latinsko malo slovo o sa breve","Latin small letter o with double acute":"Latinsko malo slovo o sa dvostrukom akutom","Latin small letter o with macron":"Latinsko malo slovo o sa macron","Latin small letter r with acute":"Latinsko malo slovo r sa akutom","Latin small letter r with caron":"Latinsko malo slovo r sa caron","Latin small letter r with cedilla":"Latinsko malo slovo r sa cedila","Latin small letter s with acute":"Latinsko malo slovo s sa akutom","Latin small letter s with caron":"Latinsko malo slovo s sa caron","Latin small letter s with cedilla":"Latinsko malo slovo s sa cedila","Latin small letter s with circumflex":"Latinsko malo slovo s sa circumflex","Latin small letter t with caron":"Latinsko malo slovo t sa caron","Latin small letter t with cedilla":"Latinsko malo slovo t sa cedila","Latin small letter t with stroke":"Latinsko malo slovo t sa stroke","Latin small letter u with breve":"Latinsko malo slovo u sa breve","Latin small letter u with double acute":"Latinsko malo slovo u s dvostrukom akutom","Latin small letter u with macron":"Latinsko malo slovo u sa macron","Latin small letter u with ogonek":"Latinsko malo slovo u sa ogonek","Latin small letter u with ring above":"Latinsko malo slovo u s prstenom iznad","Latin small letter u with tilde":"Latinsko malo slovo u sa tildom","Latin small letter w with circumflex":"Latinsko malo slovo w sa circumflex","Latin small letter y with circumflex":"Latinsko malo slovo y sa circumflex","Latin small letter z with acute":"Latinsko malo slovo z sa akutom","Latin small letter z with caron":"Latinsko malo slovo z sa caron","Latin small letter z with dot above":"Latinsko malo slovo z sa tačkom iznad","Latin small ligature ij":"Latinska mala ligatura ij","Latin small ligature oe":"Latinska mala ligatura oe","Left aligned image":"Leva slika","Left double quotation mark":"Levi dvostruki navodnik","Left single quotation mark":"Levi pojedinačni navodnik","Left-pointing double angle quotation mark":"Levi dvostrani navodnik dvostrukog ugla","leftwards arrow to bar":"Strelica nalevo ka traci","leftwards dashed arrow":"Prekidana strelica levo","leftwards double arrow":"Dupla strlica levo","Less-than or equal to":"Znak manje od ili jednako","Less-than sign":"Znak manje od","Light blue":"Svetloplava","Light green":"Svetlo zelena","Light grey":"Svetlo siva",Link:"Link","Link URL":"URL link","Lira sign":"Znak lire","Livre tournois sign":"Znak livre tournois","Logical and":"Logički i","Logical or":"Logički ili",Macron:"Macron","Manat sign":"Znak manat","Media URL":"Media URL","media widget":"Media widget","Merge cell down":"Spoj ćelije na dole","Merge cell left":"Spoj ćelije na levo","Merge cell right":"Spoj ćelije na desno","Merge cell up":"Spoj ćelije na gore","Merge cells":"Spoj ćelije","Mill sign":"Znak mlina","Minus sign":"Znak minus","Multiplication sign":"Znak množenja","N-ary product":"N-ari proizvod","N-ary summation":"N-ari zbir",Nabla:"Nabla","Naira sign":"Znak naira","New sheqel sign":"Znak novi šekel",Next:"Sledeći",None:"Nijedan","Nordic mark sign":"Nordijski znak","Not an element of":"Nije element","Not equal to":"Nejednako sa","Not sign":"Nije znak","Numbered List":"Lista sa brojevima","on with exclamation mark with left right arrow above":"Uključeno sa uzvičnikom sa strelicom levo desno","Open in a new tab":"Otvori u novoj kartici","Open link in new tab":"Otvori link u novom prozoru",Orange:"Narandžasta",Outset:"Početak",Overline:"Overline",Padding:"Postavljanje","Page break":"Prelom stranice",Paragraph:"Pasus","Paragraph sign":"Znak paragraf","Partial differential":"Delimični diferencijal","Paste the media URL in the input.":" Nalepi medijski URL u polje za unos.","Per mille sign":"Znak per mile","Per ten thousand sign":"Znak za deset hiljada","Peseta sign":"Znak pezeta","Peso sign":"Znak peso","Pink marker":"Roza marker","Plain text":"Običan tekst","Plus-minus sign":"Znak plus-minus","Pound sign":"Znak funti",Previous:"Prethodni","Proportional to":"Srazmerno",Purple:"Ljubičasta","Question exclamation mark":"Znak upitnika uzvičnika",Red:"Crvena","Red pen":"Crvena olovka",Redo:"Ponovo","Registered sign":"Registrovani znak","Remove color":"Otkloni boju","Remove Format":"Ukloni formatiranje","Remove highlight":"Ukloni isticanje","Reversed paragraph sign":"Obrnuti znak paragrafa","Rich Text Editor":"Prošireni uređivač teksta","Rich Text Editor, %0":"Prošireni uređivač teksta, %0",Ridge:"Greben","Right aligned image":"Desna slika","Right double quotation mark":"Desni dvostruki navodnik","Right single quotation mark":"Desni pojedinačni navodnik","Right-pointing double angle quotation mark":"Desni dvostrani navodnik dvostrukog ugla","rightwards arrow to bar":"Strelica nadesno ka traci","rightwards dashed arrow":"Prekidana strelica desno","rightwards double arrow":"Dupla strelica desno",Row:"Red","Ruble sign":"Znak ruble","Rupee sign":"Znak rupia",Save:"Sačuvaj","Section sign":"Znak sekcija","Select all":"Označi sve","Select column":"Odaberi kolonu","Select row":"Odaberi red","Show more items":"Prikaži još stavki","Side image":"Bočna slika","Single left-pointing angle quotation mark":"Pojedinačni navodnik ugla levog pokazivanja","Single low-9 quotation mark":"Jedan niski-9 navodnik","Single right-pointing angle quotation mark":"Pojedinačni navodnik ugla desnog pokazivanja",Small:"Malo",Solid:"Čvrst","soon with rightwards arrow above":"Uskoro sa strelicom nadesno","Special characters":"Specijalni karakteri","Spesmilo sign":"Znak spesmilio","Split cell horizontally":"Deli ćelije vodoravno","Split cell vertically":"Deli ćelije uspravno","Square root":"Kvadratni koren",Strikethrough:"Precrtan",Style:"Stil","Table alignment toolbar":"Traka sa alatkama za poravnavanje tabele","Table cell text alignment":"Poravnaj tekst u tabeli","Table properties":"Svojstva tabele","Table toolbar":"Tabela traka sa alatkama","Tenge sign":"Znak tenge","Text alignment":"Ravnanje teksta","Text alignment toolbar":"Alatke za ravnanje teksta","Text alternative":"Alternativni tekst","Text highlight toolbar":"Alatke za markiranje teksta","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Boja je nevažeća. Pokušajte sa \"# FF0000\" ili \"rgb (255,0,0)\" ili \"crvena\".","The URL must not be empty.":"URL ne sme biti prazan.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Vrednost je nevažeća. Pokušajte sa „10pk“ ili „2em“ ili jednostavno „2“.","There exists":"Postoji","This link has no URL":"Link ne sadrži URL","This media URL is not supported.":"Ovaj media URL tip nije podržan.","Tilde operator":"Tilde operator",Tiny:"Sitno","Tip: Paste the URL into the content to embed faster.":"Savet: Zalepite URL u sadržaj da bi ste ga brže ugradili.","top with upwards arrow above":"Na vrhu sa strelicom prema gore","Trade mark sign":"Znak brenda","Tugrik sign":"Znak tugrik","Turkish lira sign":"Znak turskih lira",Turquoise:"Tirkizna","Two dot leader":"Vodja sa dve tačke","Type or paste your content here.":"Upišite ili nalepite naslov","Type your title":"Odredite naslov",Underline:"Podvučen",Undo:"Povlačenje",Union:"Unija",Unlink:"Оtkloni link","up down arrow with base":"Strelica nadole sa bazom","Upload failed":"Postavljanje neuspešno","Upload in progress":"Postavljanje u toku","upwards arrow to bar":"Strelica prema gore ka traci","upwards dashed arrow":"Prekidana strelica prema gore","upwards double arrow":"Dupla strelica prema gore","Vertical text alignment toolbar":"Vertikalna traka sa alatkama za poravnavanje teksta","Vulgar fraction one half":"Vulgarna frakcija jedna polovina","Vulgar fraction one quarter":"Vulgarna frakcija jedna četvrtina","Vulgar fraction three quarters":"Vulgarna frakcija tri četvrtine",White:"Bela","Widget toolbar":"Видгет трака са алаткама",Width:"Širina","Won sign":"Znak von",Yellow:"Žuta","Yellow marker":"Žuti marker","Yen sign":"Znak jena"} );l.getPluralForm=function(n){return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/sr.js b/public/js/ckedit5/20.0.0_/translations/sr.js new file mode 100644 index 0000000..5213d36 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/sr.js @@ -0,0 +1 @@ +(function(d){ const l = d['sr'] = d['sr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 of %1","Align cell text to the bottom":"Поравнајте текст ћелије према доле","Align cell text to the center":"Поравнајте текст ћелије у средину","Align cell text to the left":"Поравнајте текст ћелије лево","Align cell text to the middle":"Поравнајте текст ћелије у средину","Align cell text to the right":"Поравнајте текст ћелије десно","Align cell text to the top":"Поравнајте текст ћелије према горе","Align center":"Централно равнанје","Align left":"Лево равнање","Align right":"Десно равнање","Align table to the left":"Поравнајте табелу на леву страну","Align table to the right":"Поравнајте табелу на десну страну",Alignment:"Поравнање","Almost equal to":"Скоро једнако",Angle:"Угао","Approximately equal to":"Отприлике једнако",Aquamarine:"Зеленкастоплава","Asterisk operator":"Астерикс оператор","Austral sign":"Аустрални знак","back with leftwards arrow above":"Назад са стрелицом лево",Background:"Позадина",Big:"Велико","Bitcoin sign":"Знак биткиона",Black:"Црна","Block quote":"Цитат",Blue:"Плава","Blue marker":"Плави маркер",Bold:"Подебљано",Border:"Граница","Bulleted List":"Листа са тачкама",Cancel:"Одустани","Cedi sign":"Знак цеди","Cell properties":"Својства ћелије","Cent sign":"Знак цента","Center table":"Центар табеле","Centered image":"Слика у средини","Change image text alternative":"Измена алтернативног текста","Character categories":"Категорија карактера","Choose heading":"Одреди стил",Code:"Код","Colon sign":"Двотачка",Color:"Боја","Color picker":"Бирач боја",Column:"Колона","Contains as member":"Садржи као члан","Copyright sign":"Симбол ауторског права","Cruzeiro sign":"Знак црузеиро","Currency sign":"Знак валуте",Dashed:"Разбијено","Decrease indent":"Смањи увлачење",Default:"Основни","Degree sign":"Знак степена","Delete column":"Бриши колону","Delete row":"Бриши ред","Dim grey":"Бледо сива",Dimensions:"Димензија","Division sign":"Знак дивизије","Document colors":"Боје документа","Dollar sign":"Знак долара","Dong sign":"Знак донг",Dotted:"Са тачкама",Double:"Двоструко","Double dagger":"Двоструки бодеж","Double exclamation mark":"Двоструки узвичник","Double low-9 quotation mark":"Двоструки ниски -9 наводник","Double question mark":"Двоструки упитник",Downloadable:"Могуће преузимање","downwards arrow to bar":"Стрелица према доле ка траци","downwards dashed arrow":"Прекидана стрелица према доле","downwards double arrow":"Дупла стрелица према доле","Drachma sign":"Знак драхма","Dropdown toolbar":"Падајућа трака са алаткама","Edit link":"Исправи линк","Editor toolbar":"Уређивач трака са алаткама","Element of":"Елемент од","Em dash":"Ем цртица","Empty set":"Празан сет","En dash":"Ен цртица","end with leftwards arrow above":"Завршите стрелицом лево","Enter image caption":"Одреди текст испод слике","Euro sign":"Знак еура","Euro-currency sign":"Знак валуте еура","Exclamation question mark":"Знак узвичника упитника","Font Background Color":"Боја позадине слова","Font Color":"Боја слова","Font Family":"Фонт","Font Size":"Величина фонта","For all":"За све","Fraction slash":"Црта фракције","French franc sign":"Знак француског франака","Full size image":"Слика у пуној величини","German penny sign":"Знак немачки пени","Greater-than or equal to":"Знак веће од или једнако","Greater-than sign":"Знак веће од",Green:"Зелена","Green marker":"Зелени маркер","Green pen":"Зелена оловка",Grey:"Сива",Groove:"Колосек","Guarani sign":"Знак гуарани","Header column":"Колона за заглавље","Header row":"Ред за заглавлје",Heading:"Стилови","Heading 1":"Наслов 1","Heading 2":"Наслов 2","Heading 3":"Наслов 3","Heading 4":"Наслов 4","Heading 5":"Наслов 5","Heading 6":"Наслов 6",Height:"Висина",Highlight:"Истицање","Horizontal ellipsis":"Хоризонтална елипса","Horizontal line":"Хоризонтална разделна линија","Horizontal text alignment toolbar":"Хоризонтална трака са алаткама за поравнање текста","Hryvnia sign":"Знак гривна",Huge:"Огромно","Identical to":"Идентичан","Image toolbar":"Слика трака са алтакама","image widget":"модул са сликом","Increase indent":"Повећај увлачење","Indian rupee sign":"Знак индијске рупије",Infinity:"Бесконачност","Insert code block":"Додај блок кода","Insert column left":"Додај колону лево","Insert column right":"Додај колону десно","Insert image":"Додај слику","Insert media":"Додај медиа","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Додај ред изнад","Insert row below":"Додај ред испод","Insert table":"Додај табелу",Inset:"Прилог",Integral:"Интеграл",Intersection:"Раскрсница","Inverted exclamation mark":"Обрнути узвичник","Inverted question mark":"Обрнути упитник",Italic:"Курзив",Justify:"Обострано равнање","Justify cell text":"Оправдајте текст ћелије","Kip sign":"Знак кип","Latin capital letter a with breve":"Латинско велико слово а са бревом ","Latin capital letter a with macron":"Латинско белико слово а са макроном","Latin capital letter a with ogonek":"Латинско велико слово а са огонек","Latin capital letter c with acute":"Латинско велико слово ц са акутом","Latin capital letter c with caron":"Латинско велико слово ц са цароном","Latin capital letter c with circumflex":"Латинско велико слово ц са цирцумфлекс","Latin capital letter c with dot above":"Латинско велико слово ц са тачком изнад","Latin capital letter d with caron":"Латинско велико слово д са цароном","Latin capital letter d with stroke":"Латинско велико слово д са строке","Latin capital letter e with breve":"Латинско велико слово е са бреве","Latin capital letter e with caron":"Латинско велико слово е са царон","Latin capital letter e with dot above":"Латинско велико слово е са тачком изнад","Latin capital letter e with macron":"Латинско велико слово е са мацрон","Latin capital letter e with ogonek":"Латинско велико слово е са огонек","Latin capital letter eng":"Латинско велико слово енг","Latin capital letter g with breve":"Латинск велико слово г са бреве","Latin capital letter g with cedilla":"Латинско велико слово г са цедилом","Latin capital letter g with circumflex":"Латинско велико слово г са цирцумфлекс","Latin capital letter g with dot above":"Латинско велико слово г са тачком изнад","Latin capital letter h with circumflex":"Латинско велико слово х са цирцумфлекс","Latin capital letter h with stroke":"Латинско велико слово х са строке","Latin capital letter i with breve":"Латинско велико слово и са бреве","Latin capital letter i with dot above":"Латинско велико слово и са тачком изнад","Latin capital letter i with macron":"Латинско велико слово и са мацрон","Latin capital letter i with ogonek":"Латинско велоко слово и са огонек","Latin capital letter i with tilde":"Латинско велико слово и са тилдом","Latin capital letter j with circumflex":"Латинско велико слово ј са цирцумфлекс","Latin capital letter k with cedilla":"Латинско велико слово к са цедила","Latin capital letter l with acute":"Лаинско велико слово л са акутом","Latin capital letter l with caron":"Латинско велико слово л са царон","Latin capital letter l with cedilla":"Латинско велико слово л са цедила","Latin capital letter l with middle dot":"Латинско велико слово л са среднјом тачком","Latin capital letter l with stroke":"Латинско велико слово л са строке","Latin capital letter n with acute":"Латинско влико слово н са акутом","Latin capital letter n with caron":"Латинско велико слово н са царон","Latin capital letter n with cedilla":"Латинско велико слово н са цедилом","Latin capital letter o with breve":"Латинско велико слово о са бреве","Latin capital letter o with double acute":"Латинско велико слово о са двоструком акутом","Latin capital letter o with macron":"Латинско велико слово о са мацрон","Latin capital letter r with acute":"Латинско велико слово р са акутом","Latin capital letter r with caron":"Латинско велико слово р са царон","Latin capital letter r with cedilla":"Латинско велико слово р са цедила","Latin capital letter s with acute":"Латинско велоко слово с са акутом","Latin capital letter s with caron":"Латинско велико слово с са царон","Latin capital letter s with cedilla":"Латинско велико слово с са цедила","Latin capital letter s with circumflex":"Латинско велико слово с са цирцумфлекс","Latin capital letter t with caron":"Латинско велико слово т са царон","Latin capital letter t with cedilla":"Латинско велико слово т са цедила","Latin capital letter t with stroke":"Латинско велико слово т са строке","Latin capital letter u with breve":"Латинско велико слово у са бреве","Latin capital letter u with double acute":"Латинско велико слово у с двоструким акутом","Latin capital letter u with macron":"Латинско велико слово у са мацрон","Latin capital letter u with ogonek":"Латинско велико слово у са огонек","Latin capital letter u with ring above":"Латинско велико слово у с престеном изнад","Latin capital letter u with tilde":"Латинско велико слово у са тилдом","Latin capital letter w with circumflex":"Латинско велико слово дупло в са цирцумфлекс","Latin capital letter y with circumflex":"Латинско велико слово ипсилон са цирцумфлекс","Latin capital letter y with diaeresis":"Латинско велико слово ипсилон са дијарезом","Latin capital letter z with acute":"Латинско велико слово з са акутом","Latin capital letter z with caron":"Латинско велико слово з са царон","Latin capital letter z with dot above":"Латинско велико слово з са тачком изнад","Latin capital ligature ij":"Латинска велика лигатура иј","Latin capital ligature oe":"Латинска велика лигатура ое","Latin small letter a with breve":"Латинско мало слово а са бревом","Latin small letter a with macron":"Латинско мало слово а са макроном","Latin small letter a with ogonek":"Латинско мало слово с са огонек","Latin small letter c with acute":"Латинско мало слово ц са акутом","Latin small letter c with caron":"Латинско мало слово ц са цароном","Latin small letter c with circumflex":"Латинско мало слово ц са цирцумфлекс","Latin small letter c with dot above":"Латинско мало слвово ц са тачком изнад","Latin small letter d with caron":"Латинско мало слово д са цароном","Latin small letter d with stroke":"Латинско мало слово д са строке","Latin small letter dotless i":"Латинско мало слово и без тачке","Latin small letter e with breve":"Латинско мало слово е са бреве","Latin small letter e with caron":"Латинско мало слово е са царон","Latin small letter e with dot above":"Латинско мало слово е са тачком изнад","Latin small letter e with macron":"Латинско мало слово е са мацрон","Latin small letter e with ogonek":"Латинско мало слво е са огонек","Latin small letter eng":"Латинско мало слово енг","Latin small letter f with hook":"Латинско мало слово ф са куком","Latin small letter g with breve":"Латинско мало слово г са бреве","Latin small letter g with cedilla":"Латинско мало слово г са цедилом","Latin small letter g with circumflex":"Латинско мало слобо г са цирцумфлекс","Latin small letter g with dot above":"Латинско мало слово г са тачком изнад","Latin small letter h with circumflex":"Латинско мало слово х са цирцумфлекс","Latin small letter h with stroke":"Латинско мало слово х са строке","Latin small letter i with breve":"Латинско мало слово и са бреве","Latin small letter i with macron":"Латинско мало слово и са мацрон","Latin small letter i with ogonek":"Латинско мало слово и са огонек","Latin small letter i with tilde":"Латинско мало слово и са тилдом","Latin small letter j with circumflex":"Латнцско мало слово ј са цирцумфлекс","Latin small letter k with cedilla":"Латинско мало слово к са цедила","Latin small letter kra":"Латинско мало слово кра","Latin small letter l with acute":"Латинско мало слово л са акутом","Latin small letter l with caron":"Латинско мало слово л са царон","Latin small letter l with cedilla":"Латинско мало слово л са цедила","Latin small letter l with middle dot":"Латинско мало слово са цреднјом тачком","Latin small letter l with stroke":"Латинско мало слово л са строке","Latin small letter long s":"Латинско мало слово дугачко с","Latin small letter n preceded by apostrophe":"Латинско мало слово н које претходи апостроф","Latin small letter n with acute":"Латинско мало слово н са акутом","Latin small letter n with caron":"Латинско мало слово н са царон","Latin small letter n with cedilla":"Латинско мало слово н са цедилом","Latin small letter o with breve":"Латинско мало слово о са бреве","Latin small letter o with double acute":"Латинско мало слово о са двоструком акутом","Latin small letter o with macron":"Латинско мало слово о са марон","Latin small letter r with acute":"Латинско мало слово р са акутом","Latin small letter r with caron":"Латинско мало слово р са царон","Latin small letter r with cedilla":"Латинско мало слово р са цедила","Latin small letter s with acute":"Латинско мало слово с са акутом","Latin small letter s with caron":"Латинско мало слово с са царон","Latin small letter s with cedilla":"Латинско мало слово с са цедила","Latin small letter s with circumflex":"Латинско мало слово с са цирцумфлекс","Latin small letter t with caron":"Латинско мало слово т са царон","Latin small letter t with cedilla":"Латинско мало слово т са цедила","Latin small letter t with stroke":"Латинско мало слово т са строке","Latin small letter u with breve":"Латинско мало слово у са бреве","Latin small letter u with double acute":"Латинско мало слово у с двоструким акутом","Latin small letter u with macron":"Латинско мало слово у са мацрон","Latin small letter u with ogonek":"Латинско мало слово у са огонек","Latin small letter u with ring above":"Латинско мало слово у с прстеном изнад","Latin small letter u with tilde":"Латинско мало слово у са тилдом","Latin small letter w with circumflex":"Латинско мало слово дупло в са цирцумфлекс","Latin small letter y with circumflex":"Латинско мало слово ипсилон са цирцумфлекс","Latin small letter z with acute":"Латинско мало слово з са акутом","Latin small letter z with caron":"Латинско мало слово з са царон","Latin small letter z with dot above":"Латинско мало слово з са тачком изнад","Latin small ligature ij":"Латинска мала лигатура иј","Latin small ligature oe":"Латинска мала лигатура ое","Left aligned image":"Лева слика","Left double quotation mark":"Леви двоструки наводник","Left single quotation mark":"Леви појединачни наводник","Left-pointing double angle quotation mark":"Леви двострани наводник двоструког угла ","leftwards arrow to bar":"Стрелица налево ка траци","leftwards dashed arrow":"Прекидана стрелица лево","leftwards double arrow":"Дупла стрелица лево","Less-than or equal to":"Збак мање од или једнако","Less-than sign":"Знак мање од","Light blue":"Светлоплава","Light green":"Светлозелена","Light grey":"Светло сива",Link:"Линк","Link URL":"УРЛ линк","Lira sign":"Знак лире","Livre tournois sign":"Знак ливре тоурноис","Logical and":"Логички и","Logical or":"Локички или",Macron:"Мацрон","Manat sign":"Знак манат","Media URL":"Mедиа УРЛ","media widget":"Медиа wидгет","Merge cell down":"Спој ћелије на доле","Merge cell left":"Cпој ћелије на лево","Merge cell right":"Спој ћелије на десно","Merge cell up":"Спој ћелије на горе","Merge cells":"Спој ћелије","Mill sign":"Знак млна","Minus sign":"Знак минус","Multiplication sign":"Знак множења","N-ary product":"Н-ари производ","N-ary summation":"Н-ари збир",Nabla:"Набла","Naira sign":"Знак наира","New sheqel sign":"Знак нови шекел",Next:"Следећи",None:"Ниједан","Nordic mark sign":"Нордијски знак","Not an element of":"Није елемент","Not equal to":"Неједнако са","Not sign":"Није знак","Numbered List":"Листа са бројевима","on with exclamation mark with left right arrow above":"Укључено са узвичником са стрелицомлево десно","Open in a new tab":"Отвори у новој картици","Open link in new tab":"Отвори линк у новом прозору",Orange:"Нараџаста",Outset:"Почетак",Overline:"Оверлине",Padding:"Постављање","Page break":"Прелом странице",Paragraph:"Пасус","Paragraph sign":"Знак параграф","Partial differential":"Делимични диференцијал","Paste the media URL in the input.":"Налепи медијски УРЛ у поље за унос","Per mille sign":"Знак пер миле","Per ten thousand sign":"Знак за десет хиљада","Peseta sign":"Знак пезета","Peso sign":"Знак песо","Pink marker":"Роза маркер","Plain text":"Обичан текст","Plus-minus sign":"Знак плус-минус","Pound sign":"Знак фунти",Previous:"Претходни","Proportional to":"Сразмерно",Purple:"Љубичаста","Question exclamation mark":"Знак упитника узвичника",Red:"Црвена","Red pen":"Црвена оловка",Redo:"Поново","Registered sign":"Регистровани знак","Remove color":"Отклони боју","Remove Format":"Уклони форматирање","Remove highlight":"Уклони истицање","Reversed paragraph sign":"Обрнути знак параграфа","Rich Text Editor":"Проширен уређивач текста","Rich Text Editor, %0":"Проширени уређивач текста, %0",Ridge:"Гребен","Right aligned image":"Десна слика","Right double quotation mark":"Десни двоструки наводник","Right single quotation mark":"Десни појединачни наводник","Right-pointing double angle quotation mark":"Десни двострани наводик двоструког угла ","rightwards arrow to bar":"Стрелица надесно ка траци","rightwards dashed arrow":"Прекидана стрелица десно","rightwards double arrow":"Дупла стрелица десно",Row:"Ред","Ruble sign":"Знак рубле","Rupee sign":"Знак рупиа",Save:"Сачувај","Section sign":"Знак селекција","Select all":"Означи све.","Select column":"Изабери колону","Select row":"Изабери ред","Show more items":"Прикажи још ставки","Side image":"Бочна слика","Single left-pointing angle quotation mark":"Појединачни наводник угла левог показиванја","Single low-9 quotation mark":"Један ниски -9 наводник","Single right-pointing angle quotation mark":"Појединачни наводник угла десног показивања",Small:"Мало",Solid:"Чврст","soon with rightwards arrow above":"Ускоро са стрелицом надесно","Special characters":"Специјални карактери","Spesmilo sign":"Знак спесмилио","Split cell horizontally":"Дели ћелије водоравно","Split cell vertically":"Дели ћелије усправно","Square root":"Квадратни корен",Strikethrough:"Прецртан",Style:"Стил","Table alignment toolbar":"Трака са алаткама за поравнање табеле","Table cell text alignment":"Поравнај тексту табели","Table properties":"Својства табеле","Table toolbar":"Табела трака са алаткама","Tenge sign":"Знак тенге","Text alignment":"Равнање текста","Text alignment toolbar":"Алатке за равнање текста","Text alternative":"Алтернативни текст","Text highlight toolbar":"Алатке за маркирање текста","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Боја је неважећа. Покушајте са \"#FF0000\" или \"rgb(255,0,0)\" или \"црвена\".","The URL must not be empty.":"УРЛ не сме бити празан.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Вредност је неважећа. Покушајте са \"10px\" или \"2em\" или једноставно \"2\".","There exists":"Постоји","This link has no URL":"Линк не садржи УРЛ","This media URL is not supported.":"Овај медиа УРЛ тип није подржан.","Tilde operator":"Тилде оператор",Tiny:"Ситно","Tip: Paste the URL into the content to embed faster.":"Савет: Залепите УРЛ у садржај да би сте га брже уградили.","top with upwards arrow above":"На врху са стрелицом према горе","Trade mark sign":"Знак бренда","Tugrik sign":"Знак тугрик","Turkish lira sign":"Знак турских лира",Turquoise:"Тиркизна","Two dot leader":"Вођа са две тачке","Type or paste your content here.":"Упишите или налепите наслов","Type your title":"Одредите наслов",Underline:"Подвучен",Undo:"Повлачење",Union:"Унија",Unlink:"Отклони линк","up down arrow with base":"Стрелица на доле са базом","Upload failed":"Постављање неуспешно","Upload in progress":"Постављање у току","upwards arrow to bar":"Стрелица према горе ка траци","upwards dashed arrow":"Прекидана стрелица према горе","upwards double arrow":"Дупла стрелица према горе","Vertical text alignment toolbar":"Вертикална трака са алаткама за поравнање текста","Vulgar fraction one half":"Вулгарна фракција једна половина","Vulgar fraction one quarter":"Вулгарна фракција једна четвртина","Vulgar fraction three quarters":"Вулгарна фрација три четвртине",White:"Бела","Widget toolbar":"Widget traka sa alatkama",Width:"Ширина","Won sign":"Знак вон",Yellow:"Жута","Yellow marker":"Жути маркер","Yen sign":"Знак јена"} );l.getPluralForm=function(n){return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/sv.js b/public/js/ckedit5/20.0.0_/translations/sv.js new file mode 100644 index 0000000..4b715b3 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/sv.js @@ -0,0 +1 @@ +(function(d){ const l = d['sv'] = d['sv'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Centrera","Align left":"Vänsterjustera","Align right":"Högerjustera","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"",Background:"",Big:"Stor",Black:"","Block quote":"Blockcitat",Blue:"","Blue marker":"Blå markering",Bold:"Fet",Border:"","Bulleted List":"Punktlista",Cancel:"Avbryt","Cell properties":"","Center table":"","Centered image":"Centrerad bild","Change image text alternative":"Ändra bildens alternativa text","Choose heading":"Välj rubrik",Code:"Kod",Color:"","Color picker":"",Column:"Kolumn",Dashed:"",Default:"Standard","Delete column":"Ta bort kolumn","Delete row":"Ta bort rad","Dim grey":"",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit link":"Redigera länk","Editor toolbar":"","Enter image caption":"Fyll i bildtext","Font Background Color":"","Font Color":"","Font Family":"Typsnitt","Font Size":"Teckenstorlek","Full size image":"Bild i full storlek",Green:"","Green marker":"Grön markering","Green pen":"Grön penna",Grey:"",Groove:"","Header column":"","Header row":"",Heading:"Rubrik","Heading 1":"Rubrik 1","Heading 2":"Rubrik 2","Heading 3":"Rubrik 3","Heading 4":"Rubrik 4","Heading 5":"Rubrik 5","Heading 6":"Rubrik 6",Height:"",Highlight:"Markera","Horizontal text alignment toolbar":"",Huge:"Enorm","Image toolbar":"","image widget":"image widget","Insert column left":"","Insert column right":"","Insert image":"Infoga bild","Insert media":"Lägg in media","Insert row above":"","Insert row below":"","Insert table":"Lägg in tabell",Inset:"",Italic:"Kursiv",Justify:"Justera till marginaler","Justify cell text":"","Left aligned image":"Vänsterjusterad bild","Light blue":"","Light green":"","Light grey":"",Link:"Länk","Link URL":"Länkens URL","Media URL":"","media widget":"","Merge cell down":"","Merge cell left":"","Merge cell right":"","Merge cell up":"","Merge cells":"",Next:"",None:"","Numbered List":"Numrerad lista","Open in a new tab":"","Open link in new tab":"Öppna länk i ny flik",Orange:"",Outset:"",Padding:"",Paragraph:"Paragraf","Paste the media URL in the input.":"","Pink marker":"Rosa markering",Previous:"",Purple:"",Red:"","Red pen":"Röd penna",Redo:"Gör om","Remove color":"","Remove Format":"Radera formatering","Remove highlight":"Ta bort markering","Rich Text Editor":"Rich Text-editor","Rich Text Editor, %0":"Rich Text-editor, %0",Ridge:"","Right aligned image":"Högerjusterad bild",Row:"Rad",Save:"Spara","Select column":"","Select row":"","Show more items":"","Side image":"Kantbild",Small:"Liten",Solid:"","Split cell horizontally":"","Split cell vertically":"",Strikethrough:"Genomstruken",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Textjustering","Text alignment toolbar":"","Text alternative":"Alternativ text","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Denna länk saknar URL","This media URL is not supported.":"",Tiny:"Mycket liten","Tip: Paste the URL into the content to embed faster.":"",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"Understrykning",Undo:"Ångra",Unlink:"Ta bort länk","Upload failed":"Uppladdning misslyckades","Vertical text alignment toolbar":"",White:"",Width:"",Yellow:"","Yellow marker":"Gul markering"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/th.js b/public/js/ckedit5/20.0.0_/translations/th.js new file mode 100644 index 0000000..92c0a6d --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/th.js @@ -0,0 +1 @@ +(function(d){ const l = d['th'] = d['th'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"พลอยสีฟ้า",Background:"",Big:"ใหญ่",Black:"สีดำ","Block quote":"คำพูดบล็อก",Blue:"สีน้ำเงิน",Border:"",Cancel:"ยกเลิก","Cell properties":"","Center table":"","Centered image":"จัดแนวรูปกึ่งกลาง","Change image text alternative":"เปลี่ยนข้อความเมื่อไม่พบรูป","Choose heading":"เลือกขนาดหัวข้อ",Color:"","Color picker":"",Column:"คอลัมน์",Dashed:"","Decrease indent":"ลดการเยื้อง",Default:"ค่าเริ่มต้น","Delete column":"ลบคอลัมน์","Delete row":"ลบแถว","Dim grey":"สีเทาเข้ม",Dimensions:"","Document colors":"สีเอกสาร",Dotted:"",Double:"","Dropdown toolbar":"","Editor toolbar":"","Enter image caption":"ระบุคำอธิบายภาพ","Font Background Color":"สีพื้นหลังข้อความ","Font Color":"สีข้อความ","Font Family":"แบบอักษร","Font Size":"ขนาดข้อความ","Full size image":"รูปขนาดเต็ม",Green:"สีเขียว",Grey:"สีเทา",Groove:"","Header column":"หัวข้อคอลัมน์","Header row":"ส่วนหัวแถว",Heading:"หัวข้อ","Heading 1":"หัวข้อขนาด 1","Heading 2":"","Heading 3":"","Heading 4":"","Heading 5":"","Heading 6":"",Height:"","Horizontal line":"เส้นแนวนอน","Horizontal text alignment toolbar":"",Huge:"ใหญ่มาก","Image toolbar":"เครื่องมือรูปภาพ","image widget":"วิดเจ็ตรูปภาพ","Increase indent":"เพิ่มการเยื้อง","Insert code block":"เพิ่มโค้ดบล็อก","Insert column left":"แทรกคอลัมน์ทางซ้าย","Insert column right":"แทรกคอลัมน์ทางขวา","Insert image":"แทรกรูป","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"แทรกส่วนหัวด้านบน","Insert row below":"แทรกส่วนหัวด้านล่าง","Insert table":"แทรกตาราง",Inset:"","Justify cell text":"","Left aligned image":"จัดแนวภาพซ้าย","Light blue":"สีฟ้า","Light green":"สีเขียวอ่อน","Light grey":"สีเทาอ่อน","Merge cell down":"ผสานเซลล์ด้านล่าง","Merge cell left":"ผสานเซลล์ด้านซ้าย","Merge cell right":"ผสานเซลล์ด้านขวา","Merge cell up":"ผสานเซลล์ด้านบน","Merge cells":"ผสานเซลล์",Next:"",None:"",Orange:"สีส้ม",Outset:"",Padding:"","Page break":"ตัวแบ่งหน้า",Paragraph:"ย่อหน้า","Plain text":"ข้อความธรรมดา",Previous:"",Purple:"สีม่วง",Red:"สีแดง",Redo:"ทำซ้ำ","Remove color":"ลบสี","Remove Format":"ลบรูปแบบ","Rich Text Editor":"","Rich Text Editor, %0":"",Ridge:"","Right aligned image":"จัดแนวภาพขวา",Row:"แถว",Save:"บันทึก","Select column":"","Select row":"","Show more items":"","Side image":"รูปด้านข้าง",Small:"เล็ก",Solid:"","Split cell horizontally":"แยกเซลล์แนวนอน","Split cell vertically":"แยกเซลล์แนวตั้ง",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"เครื่องมือตาราง","Text alternative":"ข้อความเมื่อไม่พบรูป","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"",Tiny:"เล็กมาก",Turquoise:"สีเขียวขุ่น","Type or paste your content here.":"","Type your title":"",Undo:"ย้อนกลับ","Upload failed":"อัปโหลดไม่สำเร็จ","Upload in progress":"กำลังดำเนินการอัปโหลด","Vertical text alignment toolbar":"",White:"สีขาว","Widget toolbar":"แถมเครื่องมือวิดเจ็ต",Width:"",Yellow:"สีเหลือง"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/tr.js b/public/js/ckedit5/20.0.0_/translations/tr.js new file mode 100644 index 0000000..39214d7 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/tr.js @@ -0,0 +1 @@ +(function(d){ const l = d['tr'] = d['tr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0/%1","Align cell text to the bottom":"Hücre içindeki metni alta hizala","Align cell text to the center":"Hücre içindeki metnini ortaya hizalama","Align cell text to the left":"Hücre içindeki metnini sola hizala","Align cell text to the middle":"Hücre içindeki metni ortaya hizala","Align cell text to the right":"Hücre içindeki metnini sağa hizala","Align cell text to the top":"Hücre içindeki metni üste hizala","Align center":"Ortala","Align left":"Sola hizala","Align right":"Sağa hizala","Align table to the left":"Tabloyu sola hizala","Align table to the right":"Tabloyu sağa hizala",Alignment:"Hizalama","Almost equal to":"Neredeyse eşit",Angle:"Açı","Approximately equal to":"Yaklaşık olarak eşit",Aquamarine:"Su Yeşili","Asterisk operator":"Yıldız operatörü","Austral sign":"Austral işareti","back with leftwards arrow above":"geri sol ok yukarıda",Background:"Arkaplan",Big:"Büyük","Bitcoin sign":"Bitcoin işareti",Black:"Siyah","Block quote":"Alıntı",Blue:"Mavi","Blue marker":"Mavi işaretleyici",Bold:"Kalın",Border:"Kenar","Bulleted List":"Simgeli Liste",Cancel:"İptal","Cedi sign":"Cedi işareti","Cell properties":"Hücre özellikleri","Cent sign":"Kuruş işareti","Center table":"Tabloyu ortala","Centered image":"Ortalanmış görsel","Change image text alternative":"Görsel alternatif yazısını değiştir","Character categories":"Karakter kategorileri","Choose heading":"Başlık tipi seç",Code:"Kod","Colon sign":"İki nokta üst üste işareti",Color:"Renk","Color picker":"Renk seçici",Column:"Kolon","Contains as member":"Üye olarak içerir","Copyright sign":"Telif hakkı işareti","Cruzeiro sign":"Cruzeiro işareti","Currency sign":"Para birimi işareti",Dashed:"Kesik çizgili","Decrease indent":"Girintiyi azalt",Default:"Varsayılan","Degree sign":"Derece işareti","Delete column":"Kolonu sil","Delete row":"Satırı sil","Dim grey":"Koyu Gri",Dimensions:"Ölçüler","Division sign":"Bölme işareti","Document colors":"Belge Rengi","Dollar sign":"Dolar işareti","Dong sign":"Dong işareti",Dotted:"Noktalı",Double:"Çift","Double dagger":"Çift hançer","Double exclamation mark":"Çift ünlem işareti","Double low-9 quotation mark":"Çift düşük 9 tırnak işareti","Double question mark":"Çift soru işareti",Downloadable:"İndirilebilir","downwards arrow to bar":"aşağı ok çubuğu","downwards dashed arrow":"aşağı doğru kesik ok","downwards double arrow":"aşağı çift ok","Drachma sign":"Drahmisi işareti","Dropdown toolbar":"Açılır araç çubuğu","Edit link":"Bağlantıyı değiştir","Editor toolbar":"Düzenleme araç çubuğu","Element of":"Öğesi","Em dash":"Uzun çizgi","Empty set":"Boş küme","En dash":"Çizgi","end with leftwards arrow above":"sona sol ok yukarıda","Enter image caption":"Resim açıklaması gir","Euro sign":"Avro işareti","Euro-currency sign":"Avro para birimi simgesi","Exclamation question mark":"Ünlem soru işareti","Font Background Color":"Yazı Tipi Arkaplan Rengi","Font Color":"Yazı Tipi Rengi","Font Family":"Yazı Tipi Ailesi","Font Size":"Yazı Boyutu","For all":"Hepsi için","Fraction slash":"Kesir eğik çizgi","French franc sign":"Fransız Frangı işareti","Full size image":"Tam Boyut Görsel","German penny sign":"Alman kuruş işareti","Greater-than or equal to":"Büyük veya eşit","Greater-than sign":"Büyüktür işareti",Green:"Yeşil","Green marker":"Yeşil işaretleyici","Green pen":"Yeşik kalem",Grey:"Gri",Groove:"Yiv","Guarani sign":"Guarani işareti","Header column":"Başlık kolonu","Header row":"Başlık satırı",Heading:"Başlık","Heading 1":"1. Seviye Başlık","Heading 2":"2. Seviye Başlık","Heading 3":"3. Seviye Başlık","Heading 4":"4. Seviye Başlık","Heading 5":"5. Seviye Başlık","Heading 6":"6. Seviye Başlık",Height:"Yükseklik",Highlight:"Vurgu","Horizontal ellipsis":"Yatay elips","Horizontal line":"Yatay çiizgi","Horizontal text alignment toolbar":"Yatay metin hizalama araç çubuğu","Hryvnia sign":"Grivnası işareti",Huge:"Çok Büyük","Identical to":"Benzeri","Image toolbar":"Resim araç çubuğu","image widget":"resim aracı","Increase indent":"Girintiyi arttır","Indian rupee sign":"Hint Rupisi işareti",Infinity:"Sonsuzluk","Insert code block":"Kod bloğu ekle","Insert column left":"Sola kolon ekle","Insert column right":"Sağa kolon ekle","Insert image":"Görsel Ekle","Insert media":"Medya Ekle","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Üste satır ekle","Insert row below":"Alta satır ekle","Insert table":"Tablo Ekle",Inset:"İçe",Integral:"İntegral",Intersection:"Kesişim","Inverted exclamation mark":"Ters ünlem işareti","Inverted question mark":"Ters soru işareti",Italic:"İtalik",Justify:"İki yana yasla","Justify cell text":"Hücre içindeki metini iki yana yasla","Kip sign":"Kip işareti","Latin capital letter a with breve":"Üstü yuvarlak büyük a harfi","Latin capital letter a with macron":"Üstü çizili büyük a harfi","Latin capital letter a with ogonek":"Altı kuyruklu işaretli büyük a harfi","Latin capital letter c with acute":"Üzeri tırnaklı büyük c harfi","Latin capital letter c with caron":"Üstü ters şapkalı büyük c harfi","Latin capital letter c with circumflex":"Üzeri şapkalı büyük c harfi","Latin capital letter c with dot above":"Üstü noktalı büyük c harfi","Latin capital letter d with caron":"Üstü ters şapkalı büyük d harfi","Latin capital letter d with stroke":"Ortası çizgili büyük d harfi","Latin capital letter e with breve":"Üstü ters şapkalı büyük e harfi","Latin capital letter e with caron":"Üstü ters şapkalı büyük e harfi","Latin capital letter e with dot above":"Üstü noktalı büyük e harfi","Latin capital letter e with macron":"Üstü çizili büyük e harfi","Latin capital letter e with ogonek":"Altı kuyruklu büyük e harfi","Latin capital letter eng":"Alttan kuyruklu büyük n harfi","Latin capital letter g with breve":"Üstü ters şapkalı büyük g harfi","Latin capital letter g with cedilla":"Altı kuyruklu büyük g harfi","Latin capital letter g with circumflex":"Üzeri şapkalı büyük g harfi","Latin capital letter g with dot above":"Üstü noktalı büyük g harfi","Latin capital letter h with circumflex":"Üzeri şapkalı büyük h harfi","Latin capital letter h with stroke":"Üst kısmı çizgili büyük h harfi","Latin capital letter i with breve":"Üstü ters şapkalı büyük i harfi","Latin capital letter i with dot above":"Üstü noktalı büyük i harfi","Latin capital letter i with macron":"Üstü çizili büyük i harfi","Latin capital letter i with ogonek":"Altı kuyruklu büyük i harfi","Latin capital letter i with tilde":"Üstü tilda işaretli büyük i harfi","Latin capital letter j with circumflex":"Üzeri şapkalı büyük j harfi","Latin capital letter k with cedilla":"Altı kuyruklu büyük k harfi","Latin capital letter l with acute":"Üzeri tırnaklı büyük L harfi","Latin capital letter l with caron":"Üstü ters şapkalı büyük L harfi","Latin capital letter l with cedilla":"Altı kuyruklu büyük L harfi","Latin capital letter l with middle dot":"Ortası noktalı büyük L harfi","Latin capital letter l with stroke":"Üst kısmı çizgili büyük L harfi","Latin capital letter n with acute":"Üzeri tırnaklı büyük n harfi","Latin capital letter n with caron":"Üstü ters şapkalı büyük n harfi","Latin capital letter n with cedilla":"Altı kuyruklu büyük n harfi","Latin capital letter o with breve":"Üstü ters şapkalı büyük o harfi","Latin capital letter o with double acute":"Üstü çift tırnaklı büyük o harfi","Latin capital letter o with macron":"Üstü çizili büyük o harfi","Latin capital letter r with acute":"Üzeri tırnaklı büyük r harfi","Latin capital letter r with caron":"Üstü ters şapkalı büyük r harfi","Latin capital letter r with cedilla":"Altı kuyruklu büyük r harfi","Latin capital letter s with acute":"Üzeri tırnaklı büyük s harfi","Latin capital letter s with caron":"Üstü ters şapkalı büyük s harfi","Latin capital letter s with cedilla":"Altı kuyruklu büyük s harfi","Latin capital letter s with circumflex":"Üzeri şapkalı büyük s harfi","Latin capital letter t with caron":"Üstü ters şapkalı büyük t harfi","Latin capital letter t with cedilla":"Altı kuyruklu büyük t harfi","Latin capital letter t with stroke":"Üst kısmı çizgili büyük t harfi","Latin capital letter u with breve":"Üstü ters şapkalı büyük u harfi","Latin capital letter u with double acute":"Üstü çift tırnaklı büyük u harfi","Latin capital letter u with macron":"Üstü çizili büyük u harfi","Latin capital letter u with ogonek":"Altı kuyruklu büyük u harfi","Latin capital letter u with ring above":"Üstü derece işaretli büyük u harfi","Latin capital letter u with tilde":"Üstü tildalı büyük u harfi","Latin capital letter w with circumflex":"Üzeri şapkalı büyük w harfi","Latin capital letter y with circumflex":"Üzeri şapkalı büyük y harfi","Latin capital letter y with diaeresis":"Üstü çift noktalı büyük y harfi","Latin capital letter z with acute":"Üzeri tırnaklı büyük z harfi","Latin capital letter z with caron":"Üstü ters şapkalı büyük z harfi","Latin capital letter z with dot above":"Üstü noktalı büyük z harfi","Latin capital ligature ij":"Büyük ij harfi","Latin capital ligature oe":"Büyük yunan OE harfi","Latin small letter a with breve":"Üstü yuvarlak küçük a harfi","Latin small letter a with macron":"Üstü çizili küçük a harfi","Latin small letter a with ogonek":"Altı kuyruklu işaretli küçük a harfi","Latin small letter c with acute":"Üzeri tırnaklı küçük c harfi","Latin small letter c with caron":"Üstü ters şapkalı küçük c harfi","Latin small letter c with circumflex":"Üzeri şapkalı küçük c harfi","Latin small letter c with dot above":"Üstü noktalı küçük c harfi","Latin small letter d with caron":"Üstü ters şapkalı küçük d harfi","Latin small letter d with stroke":"Ortası çizgili küçük d harfi","Latin small letter dotless i":"Noktası küçük i harfi","Latin small letter e with breve":"Üstü ters şapkalı küçük e harfi","Latin small letter e with caron":"Üstü ters şapkalı küçük e harfi","Latin small letter e with dot above":"Üstü noktalı küçük e harfi","Latin small letter e with macron":"Üstü çizili küçük e harfi","Latin small letter e with ogonek":"Altı kuyruklu küçük e harfi","Latin small letter eng":"Alttan kuyruklu küçük n harfi","Latin small letter f with hook":"Latince küçük f harfi","Latin small letter g with breve":"Üstü ters şapkalı küçük g harfi","Latin small letter g with cedilla":"Altı kuyruklu küçük g harfi","Latin small letter g with circumflex":"Üzeri şapkalı küçük g harfi","Latin small letter g with dot above":"Üstü noktalı küçük g harfi","Latin small letter h with circumflex":"Üzeri şapkalı küçük g harfi","Latin small letter h with stroke":"Üst kısmı çizgili küçük h harfi","Latin small letter i with breve":"Üstü ters şapkalı küçük i harfi","Latin small letter i with macron":"Üstü çizili küçük i harfi","Latin small letter i with ogonek":"Altı kuyruklu küçük i harfi","Latin small letter i with tilde":"Üstü tilda işaretli küçük i harfi","Latin small letter j with circumflex":"Üzeri şapkalı küçük j harfi","Latin small letter k with cedilla":"Altı kuyruklu küçük k harfi","Latin small letter kra":"Küçük küt k harfi","Latin small letter l with acute":"Üzeri tırnaklı küçük L harfi","Latin small letter l with caron":"Üstü ters şapkalı küçük L harfi","Latin small letter l with cedilla":"Altı kuyruklu küçük L harfi","Latin small letter l with middle dot":"Ortası noktalı küçük L harfi","Latin small letter l with stroke":"Üst kısmı çizgili küçük L harfi","Latin small letter long s":"Uzun küçük s harfi","Latin small letter n preceded by apostrophe":"Önden apostrof küçük n harfi","Latin small letter n with acute":"Üzeri tırnaklı küçük n harfi","Latin small letter n with caron":"Üstü ters şapkalı küçük n harfi","Latin small letter n with cedilla":"Altı kuyruklu küçük n harfi","Latin small letter o with breve":"Üstü ters şapkalı küçük o harfi","Latin small letter o with double acute":"Üstü çift tırnaklı küçük o harfi","Latin small letter o with macron":"Üstü çizili küçük o harfi","Latin small letter r with acute":"Üzeri tırnaklı küçük r harfi","Latin small letter r with caron":"Üstü ters şapkalı küçük r harfi","Latin small letter r with cedilla":"Altı kuyruklu küçük r harfi","Latin small letter s with acute":"Üzeri tırnaklı küçük s harfi","Latin small letter s with caron":"Üstü ters şapkalı küçük s harfi","Latin small letter s with cedilla":"Altı kuyruklu küçük s harfi","Latin small letter s with circumflex":"Üzeri şapkalı küçük s harfi","Latin small letter t with caron":"Üstü ters şapkalı küçük t harfi","Latin small letter t with cedilla":"Altı kuyruklu küçük t harfi","Latin small letter t with stroke":"Üst kısmı çizgili küçük t harfi","Latin small letter u with breve":"Üstü ters şapkalı küçük u harfi","Latin small letter u with double acute":"Üstü çift tırnaklı küçük u harfi","Latin small letter u with macron":"Üstü çizili küçük u harfi","Latin small letter u with ogonek":"Altı kuyruklu küçük u harfi","Latin small letter u with ring above":"Üstü derece işaretli küçük u harfi","Latin small letter u with tilde":"Üstü tildalı küçük u harfi","Latin small letter w with circumflex":"Üzeri şapkalı küçük w harfi","Latin small letter y with circumflex":"Üzeri şapkalı küçük y harfi","Latin small letter z with acute":"Üzeri tırnaklı küçük z harfi","Latin small letter z with caron":"Üstü ters şapkalı küçük z harfi","Latin small letter z with dot above":"Üstü noktalı küçük z harfi","Latin small ligature ij":"Küçük ij harfi","Latin small ligature oe":"Küçük yunan OE harfi","Left aligned image":"Sola hizalı görsel","Left double quotation mark":"Sol çift tırnak işareti","Left single quotation mark":"Sol tek tırnak işareti","Left-pointing double angle quotation mark":"Sola dönük çift açılı tırnak işareti","leftwards arrow to bar":"sola ok çubuğu","leftwards dashed arrow":"sola kesik çizgili ok","leftwards double arrow":"sola çift ok","Less-than or equal to":"Küçük veya eşit","Less-than sign":"Küçüktür işareti","Light blue":"Açık Mavi","Light green":"Açık Yeşil","Light grey":"Açık Gri",Link:"Bağlantı","Link URL":"Bağlantı Adresi","Lira sign":"Lira işareti","Livre tournois sign":"Livre tournois işareti","Logical and":"Mantıksal VE","Logical or":"Mantıksal VEYA",Macron:"Uzatma işareti","Manat sign":"Manat işareti","Media URL":"Medya URL'si","media widget":"medya aracı","Merge cell down":"Aşağıya doğru birleştir","Merge cell left":"Sola doğru birleştir","Merge cell right":"Sağa doğru birleştir","Merge cell up":"Yukarı doğru birleştir","Merge cells":"Hücreleri birleştir","Mill sign":"Mill işareti","Minus sign":"Eksi işareti","Multiplication sign":"Çarpma işareti","N-ary product":"N-ary ürünü","N-ary summation":"N-ary toplamı",Nabla:"Nabla","Naira sign":"Naira işareti","New sheqel sign":"Yeni şekel işareti",Next:"Sonraki",None:"Yok","Nordic mark sign":"İskandinav işareti","Not an element of":"Onun öğesi değil","Not equal to":"Eşit değil","Not sign":"İmzalanmamış","Numbered List":"Numaralı Liste","on with exclamation mark with left right arrow above":"üzerinde sol sağ ok bulunan ünlem işaretiyle","Open in a new tab":"Yeni sekmede aç","Open link in new tab":"Yeni sekmede aç",Orange:"Turuncu",Outset:"Dışarıya",Overline:"Üstü çizili",Padding:"İç boşluk","Page break":"Sayfa sonu",Paragraph:"Paragraf","Paragraph sign":"Paragraf işareti","Partial differential":"Kısmi diferansiyel","Paste the media URL in the input.":"Medya URL'siini metin kutusuna yapıştırınız.","Per mille sign":"Bin işareti için","Per ten thousand sign":"Her on bine göre işareti","Peseta sign":"Peseta işareti","Peso sign":"Peso işareti","Pink marker":"Pembe işaretleyici","Plain text":"Düz metin","Plus-minus sign":"Artı eksi işareti","Pound sign":"Sterlin işareti",Previous:"Önceki","Proportional to":"Orantılı",Purple:"Mor","Question exclamation mark":"Soru ünlem işareti",Red:"Kırmızı","Red pen":"Kırmızı kalem",Redo:"Tekrar yap","Registered sign":"Kayıtlı işareti","Remove color":"Rengi Sil","Remove Format":"Biçimlendirmeyi Kaldır","Remove highlight":"Vurgulamayı temizle","Reversed paragraph sign":"Ters paragraf işareti","Rich Text Editor":"Zengin İçerik Editörü","Rich Text Editor, %0":"Zengin İçerik Editörü, %0",Ridge:"Yükselti","Right aligned image":"Sağa hizalı görsel","Right double quotation mark":"Sağ çift tırnak işareti","Right single quotation mark":"Sağ tek tırnak işareti","Right-pointing double angle quotation mark":"Sağa bakan çift açılı tırnak işareti","rightwards arrow to bar":"sağa ok çubuğu","rightwards dashed arrow":"sağa kesik çizgili ok","rightwards double arrow":"sağa çift ok",Row:"Satır","Ruble sign":"Ruble işareti","Rupee sign":"Rupi işareti",Save:"Kaydet","Section sign":"Bölüm işareti","Select all":"Hepsini seç","Select column":"Kolon seç","Select row":"Satır seç","Show more items":"Daha fazla öğe göster","Side image":"Yan Görsel","Single left-pointing angle quotation mark":"Tek sola dönük açı tırnak işareti","Single low-9 quotation mark":"Tek düşük 9 tırnak işareti","Single right-pointing angle quotation mark":"Sağa bakan tek açılı tırnak işareti",Small:"Küçük",Solid:"Dolu","soon with rightwards arrow above":"yakında sağ ok ile","Special characters":"Özel karakterler","Spesmilo sign":"Spesmilo işareti","Split cell horizontally":"Hücreyi yatay böl","Split cell vertically":"Hücreyi dikey böl","Square root":"Kare kök",Strikethrough:"Üstü çizili",Style:"Stil","Table alignment toolbar":"Tablo hizalama araç çubuğu","Table cell text alignment":"Tablo hücresi metin hizalaması","Table properties":"Tablo özellikleri","Table toolbar":"Tablo araç çubuğu","Tenge sign":"Tenge işareti","Text alignment":"Yazı hizalama","Text alignment toolbar":"Yazı Hizlama Araç Çubuğu","Text alternative":"Yazı alternatifi","Text highlight toolbar":"Yazı Vurgulama Araç Çubuğu","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Geçersiz renk. \"#FF0000\" veya \"rgb(255,0,0)\" veya \"red\" deneyin.","The URL must not be empty.":"URL boş olamaz.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Geçersiz değer. \"10px\" veya \"2em\" veya sadece \"2\" deneyin.","There exists":"Var","This link has no URL":"Bağlantı adresi yok","This media URL is not supported.":"Desteklenmeyen Medya URL'si.","Tilde operator":"Tilde operatörü",Tiny:"Çok Küçük","Tip: Paste the URL into the content to embed faster.":"İpucu: İçeriği daha hızlı yerleştirmek için URL'yi yapıştırın.","top with upwards arrow above":"en üst yukarı oku","Trade mark sign":"Ticari marka işareti","Tugrik sign":"Tugrik işareti","Turkish lira sign":"Türk Lirası işareti",Turquoise:"Turkuaz","Two dot leader":"Öncelikli iki nokta","Type or paste your content here.":"İçeriğinizi buraya yapıştırın yada yazın.","Type your title":"Başlığınızı yazınız",Underline:"Altı Çizgili",Undo:"Geri al",Union:"Birleşik",Unlink:"Bağlantıyı kaldır","up down arrow with base":"taban ile yukarı aşağı ok","Upload failed":"Yükleme başarsız","Upload in progress":"Yükleme işlemi devam ediyor","upwards arrow to bar":"yukarı ok çubuğu","upwards dashed arrow":"yukarı doğru kesik ok","upwards double arrow":"yukarı çift ok","Vertical text alignment toolbar":"Dikey metin hizalama araç çubuğu","Vulgar fraction one half":"Kaba kesir bir buçuk","Vulgar fraction one quarter":"Kaba kesir bir çeyrek","Vulgar fraction three quarters":"Kaba bölüm dörtte üç",White:"Beyaz","Widget toolbar":"Bileşen araç çubuğu",Width:"Genişlik","Won sign":"Kazanılan işaret",Yellow:"Sarı","Yellow marker":"Sarı işaretleyici","Yen sign":"Yen işareti"} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/tt.js b/public/js/ckedit5/20.0.0_/translations/tt.js new file mode 100644 index 0000000..c5b1950 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/tt.js @@ -0,0 +1 @@ +(function(d){ const l = d['tt'] = d['tt'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {Bold:"Калын",Cancel:"",Code:"Код",Italic:"",Redo:"Кабатла","Remove color":"",Save:"Сакла",Strikethrough:"",Underline:"",Undo:""} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/ug.js b/public/js/ckedit5/20.0.0_/translations/ug.js new file mode 100644 index 0000000..daf5251 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/ug.js @@ -0,0 +1 @@ +(function(d){ const l = d['ug'] = d['ug'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"قىسمەن قوللىنىش",Blue:"",Bold:"توم","Bulleted List":"بەلگە جەدىۋېلى",Cancel:"قالدۇرۇش","Centered image":"ئوتتۇردىكى رەسىم","Change image text alternative":"رەسىملىك تېكىست تاللىغۇچنى ئۆزگەرتىش","Choose heading":"تېما تاللاش",Code:"كودى","Dim grey":"",Downloadable:"","Dropdown toolbar":"","Edit link":"","Editor toolbar":"","Enter image caption":"رەسىمنىڭ تېمىسىنى كىرگۈزۈڭ","Full size image":"ئەسلى چوڭلۇقتىكى رەسىم",Green:"",Grey:"",Heading:"تېما","Heading 1":"تېما 1","Heading 2":"تېما 2","Heading 3":"تېما 3","Heading 4":"","Heading 5":"","Heading 6":"","Image toolbar":"","image widget":"رەسىمچىك","Insert image":"رەسىم قىستۇرۇش",Italic:"يانتۇ","Left aligned image":"سولغا توغۇرلانغان رەسىم","Light blue":"","Light green":"","Light grey":"",Link:"ئۇلاش","Link URL":"ئۇلاش ئادىرسى",Next:"","Numbered List":"نومۇر جەدىۋېلى","Open in a new tab":"","Open link in new tab":"",Orange:"",Paragraph:"بۆلەك",Previous:"",Purple:"",Red:"",Redo:"قايتا قىلىش","Remove color":"","Rich Text Editor":"تېكىست تەھرىرلىگۈچ","Rich Text Editor, %0":"تېكىست تەھرىرلىگۈچ، 0%","Right aligned image":"ئوڭغا توغۇرلانغان رەسىم",Save:"ساقلاش","Show more items":"","Side image":"يان رەسىم",Strikethrough:"","Text alternative":"تېكىست ئاملاشتۇرۇش","This link has no URL":"",Turquoise:"","Type or paste your content here.":"","Type your title":"",Underline:"ئاستى سىزىق",Undo:"قالدۇرۇش",Unlink:"ئۈزۈش","Upload failed":"چىقىرىش مەغلۇپ بولدى",White:"",Yellow:""} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/uk.js b/public/js/ckedit5/20.0.0_/translations/uk.js new file mode 100644 index 0000000..0c76fb6 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/uk.js @@ -0,0 +1 @@ +(function(d){ const l = d['uk'] = d['uk'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 із %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"По центру","Align left":"По лівому краю","Align right":"По правому краю","Align table to the left":"","Align table to the right":"",Alignment:"Вирівнювання",Aquamarine:"Аквамариновий",Background:"Фон",Big:"Великий",Black:"Чорний","Block quote":"Цитата",Blue:"Синій","Blue marker":"Синій маркер",Bold:"Жирний",Border:"Межа","Bulleted List":"Маркерний список",Cancel:"Відміна","Cell properties":"Властивості комірок","Center table":"","Centered image":"Зображення по центру","Change image text alternative":"Змінити текстову альтернативу зображення","Choose heading":"Оберіть заголовок",Code:"Код",Color:"Колір","Color picker":"",Column:"Стовпець",Dashed:"","Decrease indent":"Зменшити відступ",Default:"За замовчуванням","Delete column":"Видалити стовпець","Delete row":"Видалити рядок","Dim grey":"Темно-сірий",Dimensions:"Розміри","Document colors":"Кольори документу",Dotted:"Пунктирною",Double:"",Downloadable:"Завантажувальне","Dropdown toolbar":"Випадаюча панель інструментів","Edit link":"Редагувати посилання","Editor toolbar":"Панель інструментів редактора","Enter image caption":"Введіть підпис зображення","Font Background Color":"Колір тла шрифту","Font Color":"Колір шрифту","Font Family":"Сімейство шрифтів","Font Size":"Розмір шрифту","Full size image":"Повний розмір зображення",Green:"Зелений","Green marker":"Зелений маркер","Green pen":"Зелений маркер",Grey:"Сірий",Groove:"","Header column":"Заголовок стовпця","Header row":"Заголовок рядка",Heading:"Заголовок","Heading 1":"Заголовок 1","Heading 2":"Заголовок 2","Heading 3":"Заголовок 3","Heading 4":"Заголовок 4","Heading 5":"Заголовок 5","Heading 6":"Заголовок 6",Height:"Висота",Highlight:"Виділення","Horizontal line":"Горизонтальна лінія","Horizontal text alignment toolbar":"Панель інструментів вирівнювання горизонтального тексту",Huge:"Величезний","Image toolbar":"Панелі інструментів зображення","image widget":"Віджет зображення","Increase indent":"Збільшити відступ","Insert code block":"Вставте блок коду","Insert column left":"Вставити стовпець зліва","Insert column right":"Вставити стовпець справа","Insert image":"Вставити зображення","Insert media":"Вставити медіа","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Вставити рядок знизу","Insert row below":"Вставити рядок зверху","Insert table":"Вставити таблицю",Inset:"",Italic:"Курсив",Justify:"По ширині","Justify cell text":"","Left aligned image":"Зображення ліворуч","Light blue":"Світло-синій","Light green":"Світло-зелений","Light grey":"Світло-сірий",Link:"Посилання","Link URL":"URL посилання","Media URL":"Медіа URL","media widget":"медіа віджет","Merge cell down":"Поєднати комірки внизу","Merge cell left":"Поєднати комірки ліворуч","Merge cell right":"Поєднати комірки праворуч","Merge cell up":"Поєднати комірки вгору","Merge cells":"Поєднати комірки",Next:"Наступний",None:"Не вказано","Numbered List":"Нумерований список","Open in a new tab":"Вікрити у новій вкладці","Open link in new tab":"Відкрити посилання у новій вкладці",Orange:"Помаранчевий",Outset:"",Padding:"Заповнення","Page break":"Розрив cторінки",Paragraph:"Параграф","Paste the media URL in the input.":"Вставте URL на медіа в інпут.","Pink marker":"Рожевий маркер","Plain text":"Простий текст",Previous:"Попередній",Purple:"Фіолетовий",Red:"Червоний","Red pen":"Червоний маркер",Redo:"Повтор","Remove color":"Видалити колір","Remove Format":"Видалити форматування","Remove highlight":"Видалити виділення","Rich Text Editor":"Розширений текстовий редактор","Rich Text Editor, %0":"Розширений текстовий редактор, %0",Ridge:"","Right aligned image":"Зображення праворуч",Row:"Рядок",Save:"Зберегти","Select all":"Вибрати все","Select column":"","Select row":"","Show more items":"Показати більше","Side image":"Бокове зображення",Small:"Маленький",Solid:"Суцільний","Split cell horizontally":"Розділити комірки горизонтально","Split cell vertically":"Розділити комірки вертикально",Strikethrough:"Закреслений",Style:"Стиль","Table alignment toolbar":"Панель інструментів вирівнювання таблиці","Table cell text alignment":"Вирівнювання тексту комірки","Table properties":"Властивості таблиці","Table toolbar":"Панель інструментів таблиці","Text alignment":"Вирівнювання тексту","Text alignment toolbar":"Панель інструментів вирівнювання тексту","Text alternative":"Текстова альтернатива","Text highlight toolbar":"Панель виділення тексту","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"Колір недійсний. Спробуйте \"#FF0000\" або \"rgb(255,0,0)\" або \"red\"","The URL must not be empty.":"URL не повинен бути порожнім.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"Значення недійсне. Спробуйте \"10px\" або \"2em\" або просто \"2\"","This link has no URL":"Це посилання не має URL","This media URL is not supported.":"Даний медіа URL не підтримується.",Tiny:"Крихітний","Tip: Paste the URL into the content to embed faster.":"Вставте URL у вміст для швидкого перекладу.",Turquoise:"Бірюзовий","Type or paste your content here.":"Введіть або вставте свій вміст тут.","Type your title":"Введіть назву",Underline:"Підкреслений",Undo:"Відміна",Unlink:"Видалити посилання","Upload failed":"Завантаження не вдалось","Upload in progress":"Виконується завантаження","Vertical text alignment toolbar":"Панель інструментів вертикального вирівнювання тексту",White:"Білий","Widget toolbar":"Панель інструментів віджетів",Width:"Ширина",Yellow:"Жовтий","Yellow marker":"Жовтий маркер"} );l.getPluralForm=function(n){return (n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/vi.js b/public/js/ckedit5/20.0.0_/translations/vi.js new file mode 100644 index 0000000..5c7a94a --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/vi.js @@ -0,0 +1 @@ +(function(d){ const l = d['vi'] = d['vi'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 đến %1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Canh giữa","Align left":"Canh trái","Align right":"Canh phải","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Xanh ngọc biển",Background:"",Big:"Lớn",Black:"Đen","Block quote":"Trích dẫn",Blue:"Xanh biển","Blue marker":"Bút xanh dương",Bold:"Đậm",Border:"","Bulleted List":"Danh sách đánh ký hiệu",Cancel:"Hủy","Cell properties":"","Center table":"","Centered image":"Ảnh canh giữa","Change image text alternative":"Đổi chữ alt của ảnh","Choose heading":"Chọn tiêu đề",Code:"Code",Color:"","Color picker":"",Column:"Cột",Dashed:"","Decrease indent":"Giảm lề",Default:"Mặc định","Delete column":"Xoá cột","Delete row":"Xoá hàng","Dim grey":"Xám mờ",Dimensions:"","Document colors":"Màu văn bản",Dotted:"",Double:"",Downloadable:"Có thể tải về","Dropdown toolbar":"Thanh công cụ danh mục","Edit link":"Sửa liên kết","Editor toolbar":"Thanh công cụ biên tập","Enter image caption":"Nhập mô tả ảnh","Font Background Color":"Màu nền chữ","Font Color":"Màu chữ","Font Family":"Họ chữ","Font Size":"Cỡ chữ","Full size image":"Ảnh đầy đủ",Green:"Xanh lá","Green marker":"Bút xanh lá","Green pen":"Mực xanh",Grey:"Xám",Groove:"","Header column":"Tiêu đề cột","Header row":"Tiêu đề hàng",Heading:"Tiêu đề","Heading 1":"Tiêu đề 1","Heading 2":"Tiêu đề 2","Heading 3":"Tiêu đề 3","Heading 4":"Tiêu đề 4","Heading 5":"Tiêu đề 5","Heading 6":"Tiêu đề 6",Height:"",Highlight:"Làm nổi","Horizontal line":"Đường ngang","Horizontal text alignment toolbar":"",Huge:"Khổng lồ","Image toolbar":"Thanh công cụ hình ảnh","image widget":"tiện ích ảnh","Increase indent":"Tăng lề","Insert column left":"Thêm cột vào bên trái","Insert column right":"Thêm cột vào bên phải","Insert image":"Chèn ảnh","Insert media":"Chèn đa phương tiện","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"Thêm hàng phía trên","Insert row below":"Thêm hàng ở dưới","Insert table":"Tạo bảng",Inset:"",Italic:"Nghiêng",Justify:"Canh đều","Justify cell text":"","Left aligned image":"Ảnh canh trái","Light blue":"Xanh dương","Light green":"Xanh lá nhạt","Light grey":"Xám nhạt",Link:"Chèn liên kết","Link URL":"Đường dẫn liên kết","Media URL":"Đường dẫn đa phương tiện","media widget":"tiện ích đa phương tiện","Merge cell down":"Sát nhập ô xuống dưới","Merge cell left":"Sát nhập ô qua trái","Merge cell right":"Sát nhập ô qua phải","Merge cell up":"Sát nhập ô lên trên","Merge cells":"Sát nhập ô",Next:"Tiếp theo",None:"","Numbered List":"Danh sách đánh số","Open in a new tab":"Mở trên tab mới","Open link in new tab":"Mở liên kết",Orange:"Cam",Outset:"",Padding:"","Page break":"Ngắt trang",Paragraph:"Đoạn văn","Paste the media URL in the input.":"Dán đường dẫn đa phương tiện vào trường","Pink marker":"Bút hồng",Previous:"Quay lại",Purple:"Tím",Red:"Đỏ","Red pen":"Mực đỏ",Redo:"Tiếp tục","Remove color":"Xóa màu","Remove Format":"Xóa định dang","Remove highlight":"Xóa làm nổi","Rich Text Editor":"Trình soạn thảo văn bản","Rich Text Editor, %0":"Trình soạn thảo văn bản, %0",Ridge:"","Right aligned image":"Ảnh canh phải",Row:"Hàng",Save:"Lưu","Select column":"","Select row":"","Show more items":"Xem thêm","Side image":"Ảnh một bên",Small:"Nhỏ",Solid:"","Split cell horizontally":"Tách ô theo chiều ngang","Split cell vertically":"Tách ô theo chiều dọc",Strikethrough:"Gạch ngang",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Thanh công cụ bảng","Text alignment":"Căn chỉnh văn bản","Text alignment toolbar":"Thanh công cụ canh chữ","Text alternative":"Chữ alt","Text highlight toolbar":"Thanh công cụ làm nổi chữ","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"Đường dẫn không được để trống","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"Liên kết không có đường dẫn","This media URL is not supported.":"Đường dẫn đa phương tiện không hỗ trợ",Tiny:"Bé","Tip: Paste the URL into the content to embed faster.":"Mẹo: Dán đường dẫn vào nội dung để nhúng ngay",Turquoise:"Xanh ngọc bích","Type or paste your content here.":"Nhập hoặc dán nội dung tại đây","Type your title":"Nhập tựa đề",Underline:"Gạch dưới",Undo:"Hoàn tác",Unlink:"Bỏ liên kết","Upload failed":"Tải thất bại","Upload in progress":"Đang tải lên","Vertical text alignment toolbar":"",White:"Trắng","Widget toolbar":"Thanh công cụ tiện ích",Width:"",Yellow:"Vàng","Yellow marker":"Bút vàng"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/zh-cn.js b/public/js/ckedit5/20.0.0_/translations/zh-cn.js new file mode 100644 index 0000000..fc7b2d4 --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/zh-cn.js @@ -0,0 +1 @@ +(function(d){ const l = d['zh-cn'] = d['zh-cn'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"第 %0 步,共 %1 步","Align cell text to the bottom":"使单元格文本对齐到底部","Align cell text to the center":"使单元格文本水平居中","Align cell text to the left":"使单元格文本左对齐","Align cell text to the middle":"使单元格文本垂直居中","Align cell text to the right":"使单元格文本右对齐","Align cell text to the top":"使单元格文本对齐到顶部","Align center":"居中","Align left":"左对齐","Align right":"右对齐","Align table to the left":"使表格左对齐","Align table to the right":"使表格右对齐",Alignment:"对齐","Almost equal to":"约等于",Angle:"角","Approximately equal to":"近似等于",Aquamarine:"海蓝色","Asterisk operator":"星号运算符","Austral sign":"澳大利亚货币符号","back with leftwards arrow above":"带有back标识的向左箭头",Background:"背景",Big:"大","Bitcoin sign":"比特币符号",Black:"黑色","Block quote":"块引用",Blue:"蓝色","Blue marker":"蓝色标记",Bold:"加粗",Border:"边框","Bulleted List":"项目列表",Cancel:"取消","Cedi sign":"塞地符号","Cell properties":"单元格属性","Cent sign":"分币符号","Center table":"表格居中","Centered image":"图片居中","Change image text alternative":"更改图片替换文本","Character categories":"字符类别","Choose heading":"标题类型",Code:"代码","Colon sign":"科朗符号",Color:"颜色","Color picker":"",Column:"列","Contains as member":"包含","Copyright sign":"版权符号","Cruzeiro sign":"克鲁塞罗符号","Currency sign":"货币符号",Dashed:"虚线","Decrease indent":"减少缩进",Default:"默认","Degree sign":"度数符号","Delete column":"删除本列","Delete row":"删除本行","Dim grey":"暗灰色",Dimensions:"尺寸","Division sign":"除号","Document colors":"文档中的颜色","Dollar sign":"美元符号","Dong sign":"越南盾符号",Dotted:"点状虚线",Double:"双线","Double dagger":"双剑号","Double exclamation mark":"双叹号","Double low-9 quotation mark":"双引号","Double question mark":"双问号",Downloadable:"可下载","downwards arrow to bar":"头部带杠的向下箭头","downwards dashed arrow":"向下虚线箭头","downwards double arrow":"向下双箭头","Drachma sign":"德拉克马符号","Dropdown toolbar":"下拉工具栏","Edit link":"修改链接","Editor toolbar":"编辑器工具栏","Element of":"属于","Em dash":"长破折号","Empty set":"空集","En dash":"短破折号","end with leftwards arrow above":"带有end标识的向左箭头","Enter image caption":"输入图片标题","Euro sign":"欧元符号","Euro-currency sign":"欧元货币符号","Exclamation question mark":"感叹疑问号","Font Background Color":"字体背景色","Font Color":"字体颜色","Font Family":"字体","Font Size":"字体大小","For all":"对于全部","Fraction slash":"分数斜线","French franc sign":"法国法郎符号","Full size image":"图片通栏显示","German penny sign":"德国便士符号","Greater-than or equal to":"大于等于","Greater-than sign":"大于号",Green:"绿色","Green marker":"绿色标记","Green pen":"绿色笔",Grey:"灰色",Groove:"凹槽边框","Guarani sign":"瓜拉尼货币符号","Header column":"标题列","Header row":"标题行",Heading:"标题","Heading 1":"标题 1","Heading 2":"标题 2","Heading 3":"标题 3","Heading 4":"标题 4","Heading 5":"标题 5","Heading 6":"标题 6",Height:"高度",Highlight:"高亮","Horizontal ellipsis":"省略号","Horizontal line":"分割线","Horizontal text alignment toolbar":"水平文本对齐工具栏","Hryvnia sign":"戈里夫纳符号",Huge:"极大","Identical to":"恒等于","Image toolbar":"图片工具栏","image widget":"图像小部件","Increase indent":"增加缩进","Indian rupee sign":"印度卢比符号",Infinity:"无穷大","Insert code block":"插入代码块","Insert column left":"左侧插入列","Insert column right":"右侧插入列","Insert image":"插入图像","Insert media":"插入媒体","Insert paragraph after block":"","Insert paragraph before block":"","Insert row above":"在上面插入一行","Insert row below":"在下面插入一行","Insert table":"插入表格",Inset:"凹边框",Integral:"积分",Intersection:"交集","Inverted exclamation mark":"反感叹号","Inverted question mark":"反问号",Italic:"倾斜",Justify:"两端对齐","Justify cell text":"对齐单元格文本","Kip sign":" 基普符号","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"带钩的拉丁文小写字母 F","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left aligned image":"图片左侧对齐","Left double quotation mark":"左双引号","Left single quotation mark":"左单引号","Left-pointing double angle quotation mark":"双左尖括号","leftwards arrow to bar":"头部带杠的向左箭头","leftwards dashed arrow":"向左虚线箭头","leftwards double arrow":"向左双箭头","Less-than or equal to":"小于等于","Less-than sign":"小于号","Light blue":"浅蓝色","Light green":"浅绿色","Light grey":"浅灰色",Link:"超链接","Link URL":"链接网址","Lira sign":"里拉符号","Livre tournois sign":"里弗尔符号","Logical and":"逻辑与","Logical or":"逻辑或",Macron:"长音符号","Manat sign":"马纳特符号","Media URL":"媒体URL","media widget":"媒体小部件","Merge cell down":"向下合并单元格","Merge cell left":"向左合并单元格","Merge cell right":"向右合并单元格","Merge cell up":"向上合并单元格","Merge cells":"合并单元格","Mill sign":"密尔符号","Minus sign":"负号","Multiplication sign":"称号","N-ary product":"N 元乘积","N-ary summation":"N 元求和",Nabla:"劈形算符","Naira sign":"奈拉符号","New sheqel sign":"新谢克尔符号",Next:"下一步",None:"无","Nordic mark sign":"北欧马克征符号","Not an element of":"不属于","Not equal to":"不等于","Not sign":"非","Numbered List":"编号列表","on with exclamation mark with left right arrow above":"带有NO!标识的左右双向箭头","Open in a new tab":"在新标签页中打开","Open link in new tab":"在新标签页中打开链接",Orange:"橙色",Outset:"凸边框",Overline:"上划线",Padding:"内边距","Page break":"分页符",Paragraph:"段落","Paragraph sign":"段落符号","Partial differential":"偏微分","Paste the media URL in the input.":"在输入中粘贴媒体URL","Per mille sign":"千分号","Per ten thousand sign":"万分号","Peseta sign":"比塞塔符号","Peso sign":"比索符号","Pink marker":"粉色标记","Plain text":"纯文本","Plus-minus sign":"正负号","Pound sign":"英镑符号",Previous:"上一步","Proportional to":"比例",Purple:"紫色","Question exclamation mark":"疑问感叹号",Red:"红色","Red pen":"红色笔",Redo:"重做","Registered sign":"注册商标","Remove color":"移除颜色","Remove Format":"移除格式","Remove highlight":"清除高亮","Reversed paragraph sign":"","Rich Text Editor":"富文本编辑器","Rich Text Editor, %0":"富文本编辑器, %0",Ridge:"垄状边框","Right aligned image":"图片右侧对齐","Right double quotation mark":"右双引号","Right single quotation mark":"右单引号","Right-pointing double angle quotation mark":"双右尖括号","rightwards arrow to bar":"头部带杠的向右箭头","rightwards dashed arrow":"向右虚线箭头","rightwards double arrow":"向右双箭头",Row:"行","Ruble sign":"俄罗斯卢布","Rupee sign":"卢比符号",Save:"保存","Section sign":"节标记","Select column":"","Select row":"","Show more items":"显示更多","Side image":"图片侧边显示","Single left-pointing angle quotation mark":"单左尖括号","Single low-9 quotation mark":"单引号","Single right-pointing angle quotation mark":"单右尖括号",Small:"小",Solid:"实线","soon with rightwards arrow above":"带有soon标识的向右箭头","Special characters":"特殊字符","Spesmilo sign":"斯佩斯米洛符号","Split cell horizontally":"水平分割单元格","Split cell vertically":"垂直拆分单元格","Square root":"平方根",Strikethrough:"删除线",Style:"样式","Table alignment toolbar":"表格对齐工具栏","Table cell text alignment":"表格单元格中的文本水平对齐","Table properties":"表格属性","Table toolbar":"表格工具栏","Tenge sign":"坚戈符号","Text alignment":"对齐","Text alignment toolbar":"对齐工具栏","Text alternative":"替换文本","Text highlight toolbar":"文本高亮工具栏","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"颜色无效。尝试使用\"#FF0000\"、\"rgb(255,0,0)\"或者\"red\"。","The URL must not be empty.":"URL不可以为空。","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"无效值。尝试使用“10px”、“2ex”或者只写“2”。","There exists":"存在","This link has no URL":"此链接没有设置网址","This media URL is not supported.":"不支持此媒体URL。","Tilde operator":"波浪线运算符",Tiny:"极小","Tip: Paste the URL into the content to embed faster.":"提示:将URL粘贴到内容中可更快地嵌入","top with upwards arrow above":"带有top标识的向上箭头","Trade mark sign":"商标符号","Tugrik sign":"图格里克符号","Turkish lira sign":"土耳其里拉符号",Turquoise:"青色","Two dot leader":"二点前导符","Type or paste your content here.":"在这里输入或粘贴内容","Type your title":"输入标题",Underline:"下划线",Undo:"撤销",Union:"并集",Unlink:"取消超链接","up down arrow with base":"处于基线的上下箭头","Upload failed":"上传失败","Upload in progress":"正在上传","upwards arrow to bar":"头部带杠的向上箭头","upwards dashed arrow":"向上虚线箭头","upwards double arrow":"向上双箭头","Vertical text alignment toolbar":"垂直文本对齐工具栏","Vulgar fraction one half":"普通分数二分之一","Vulgar fraction one quarter":"普通分数四分之一","Vulgar fraction three quarters":"普通分数四分之三",White:"白色","Widget toolbar":"小部件工具栏",Width:"宽度","Won sign":"韩元符号",Yellow:"黄色","Yellow marker":"黄色标记","Yen sign":"日元符号"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/20.0.0_/translations/zh.js b/public/js/ckedit5/20.0.0_/translations/zh.js new file mode 100644 index 0000000..084e93c --- /dev/null +++ b/public/js/ckedit5/20.0.0_/translations/zh.js @@ -0,0 +1 @@ +(function(d){ const l = d['zh'] = d['zh'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0/%1","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"置中對齊","Align left":"靠左對齊","Align right":"靠右對齊","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"淺綠色",Background:"",Big:"大",Black:"黑色","Block quote":"段落引用",Blue:"藍色","Blue marker":"藍色標記",Bold:"粗體",Border:"","Bulleted List":"符號清單",Cancel:"取消","Cell properties":"","Center table":"","Centered image":"置中圖片","Change image text alternative":"修改圖片的替代文字","Choose heading":"選取標題",Code:"代碼",Color:"","Color picker":"",Column:"欄",Dashed:"","Decrease indent":"減少縮排",Default:"預設","Delete column":"刪除欄","Delete row":"刪除列","Dim grey":"淡灰色",Dimensions:"","Document colors":"",Dotted:"",Double:"",Downloadable:"可下載","Dropdown toolbar":"","Edit link":"編輯連結","Editor toolbar":"","Enter image caption":"輸入圖片說明","Font Background Color":"前景顏色","Font Color":"字體顏色","Font Family":"字型","Font Size":"字體大小","Full size image":"完整尺寸圖片",Green:"綠色","Green marker":"綠色標記","Green pen":"綠色筆",Grey:"灰色",Groove:"","Header column":"標題欄","Header row":"標題列",Heading:"標題","Heading 1":"標題 1","Heading 2":"標題 2","Heading 3":"標題 3","Heading 4":"標題 4","Heading 5":"標題 5","Heading 6":"標題 6",Height:"",Highlight:"高亮","Horizontal text alignment toolbar":"",Huge:"特大","Image toolbar":"","image widget":"圖片小工具","Increase indent":"增加縮排","Insert column left":"插入左方欄","Insert column right":"插入右方欄","Insert image":"插入圖片","Insert media":"插入影音","Insert row above":"插入上方列","Insert row below":"插入下方列","Insert table":"插入表格",Inset:"",Italic:"斜體",Justify:"左右對齊","Justify cell text":"","Left aligned image":"向左對齊圖片","Light blue":"亮藍色","Light green":"亮綠色","Light grey":"亮灰色",Link:"連結","Link URL":"連結˙ URL","Media URL":"影音URL","media widget":"影音小工具","Merge cell down":"合併下方儲存格","Merge cell left":"合併左方儲存格","Merge cell right":"合併右方儲存格","Merge cell up":"合併上方儲存格","Merge cells":"合併儲存格",Next:"下一",None:"","Numbered List":"有序清單","Open in a new tab":"在新視窗開啟","Open link in new tab":"在新視窗開啟連結",Orange:"橘色",Outset:"",Padding:"",Paragraph:"段落","Paste the media URL in the input.":"在輸入框貼上影音URL。","Pink marker":"粉色標記",Previous:"上一",Purple:"紫色",Red:"紅色","Red pen":"紅色筆",Redo:"重做","Remove color":"移除顏色","Remove Format":"移除格式","Remove highlight":"清除高亮","Rich Text Editor":"豐富文字編輯器","Rich Text Editor, %0":"豐富文字編輯器,%0",Ridge:"","Right aligned image":"向右對齊圖片",Row:"列",Save:"儲存","Select column":"","Select row":"","Show more items":"","Side image":"側邊圖片",Small:"小",Solid:"","Split cell horizontally":"水平分割儲存格","Split cell vertically":"垂直分割儲存格",Strikethrough:"刪除線",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"文字對齊","Text alignment toolbar":"","Text alternative":"替代文字","Text highlight toolbar":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The URL must not be empty.":"URL不能空白。","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"連結沒有URL","This media URL is not supported.":"影音URL不支援。",Tiny:"特小","Tip: Paste the URL into the content to embed faster.":"提示:在內容貼上URL更快崁入。",Turquoise:"藍綠色","Type or paste your content here.":"","Type your title":"",Underline:"底線",Undo:"取消",Unlink:"移除連結","Upload failed":"上傳失敗","Upload in progress":"正在上傳","Vertical text alignment toolbar":"",White:"白色",Width:"",Yellow:"黃色","Yellow marker":"黃色標記"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); \ No newline at end of file diff --git a/public/js/ckedit5/22.0.0/ckeditor.js b/public/js/ckedit5/22.0.0/ckeditor.js new file mode 100644 index 0000000..bd7a918 --- /dev/null +++ b/public/js/ckedit5/22.0.0/ckeditor.js @@ -0,0 +1,6 @@ +/*! + * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md. + */ +(function(e){const t=e["de"]=e["de"]||{};t.dictionary=Object.assign(t.dictionary||{},{"%0 of %1":"%0 von %1","Align cell text to the bottom":"Zellentext unten ausrichten","Align cell text to the center":"Zellentext zentriert ausrichten","Align cell text to the left":"Zellentext linksbündig ausrichten","Align cell text to the middle":"Zellentext mittig ausrichten","Align cell text to the right":"Zellentext rechtsbündig ausrichten","Align cell text to the top":"Zellentext oben ausrichten","Align center":"Zentriert","Align left":"Linksbündig","Align right":"Rechtsbündig","Align table to the left":"Tabelle links ausrichten","Align table to the right":"Tabelle rechts ausrichten",Alignment:"Ausrichtung","Almost equal to":"Gerundet",Angle:"Winkel-Zeichen","Approximately equal to":"Ungefähr gleich",Aquamarine:"Aquamarinblau","Asterisk operator":"Hodge-Stern-Operator","Austral sign":"Austral-Zeichen","back with leftwards arrow above":"„Back“ darüber Pfeil nach links",Background:"Hintergrund",Big:"Groß","Bitcoin sign":"Bitcoin-Zeichen",Black:"Schwarz","Block quote":"Blockzitat",Blue:"Blau","Blue marker":"Blauer Marker",Bold:"Fett",Border:"Rahmen","Bulleted List":"Aufzählungsliste","Bulleted list styles toolbar":"",Cancel:"Abbrechen","Cedi sign":"Cedi-Zeichen","Cell properties":"Zelleneigenschaften","Cent sign":"Cent-Zeichen","Center table":"Tabelle zentrieren","Centered image":"zentriertes Bild","Change image text alternative":"Alternativtext ändern","Character categories":"Zeichenkategorien","Choose heading":"Überschrift auswählen",Circle:"",Code:"Code","Colon sign":"Colón-Zeichen",Color:"Farbe","Color picker":"Farbwähler",Column:"Spalte","Contains as member":"Enthält als Element","Copyright sign":"Copyright-Zeichen","Cruzeiro sign":"Cruzeiro-Zeichen","Currency sign":"Währungssymbol",Dashed:"Gestrichelt",Decimal:"","Decimal with leading zero":"","Decrease indent":"Einzug verkleinern",Default:"Standard","Degree sign":"Grad-Zeichen","Delete column":"Spalte löschen","Delete row":"Zeile löschen","Dim grey":"Dunkelgrau",Dimensions:"Größe","Disable editing":"Bearbeitung deaktivieren",Disc:"","Division sign":"Geteilt-Zeichen","Document colors":"Dokumentfarben","Dollar sign":"Dollar-Zeichen","Dong sign":"Đồng-Zeichen",Dotted:"Gepunktet",Double:"Doppelt","Double dagger":"Zweibalkenkreuz","Double exclamation mark":"Doppeltes Ausrufezeichen","Double low-9 quotation mark":"Doppelte Anführungszeichen links unten","Double question mark":"Doppeltes Fragezeichen",Downloadable:"Herunterladbar","downwards arrow to bar":"Pfeil nach unten zum Querstrich","downwards dashed arrow":"Gestrichelter Pfeil nach unten","downwards double arrow":"Doppelpfeil nach unten","Drachma sign":"Drachme-Zeichen","Dropdown toolbar":"Dropdown-Liste Werkzeugleiste","Edit link":"Link bearbeiten","Editor toolbar":"Editor Werkzeugleiste","Element of":"Element von","Em dash":"Geviertstrich","Empty set":"Leere Menge","En dash":"Halbgeviertstrich","Enable editing":"Bearbeitung zulassen","end with leftwards arrow above":"„End“ darüber Pfeil nach links","Enter image caption":"Bildunterschrift eingeben","Euro sign":"Euro-Zeichen","Euro-currency sign":"Euro-Währungszeichen","Exclamation question mark":"Ruf-Frage-Zeichen","Font Background Color":"Hintergrundfarbe","Font Color":"Schriftfarbe","Font Family":"Schriftart","Font Size":"Schriftgröße","For all":"Allquantor","Fraction slash":"Schrägstrich","French franc sign":"Französischer Franc-Zeichen","Full size image":"Bild in voller Größe","German penny sign":"Pfennig-Zeichen","Greater-than or equal to":"Größer als oder gleich","Greater-than sign":"Größer-als-Zeichen",Green:"Grün","Green marker":"Grüner Marker","Green pen":"Grüne Schriftfarbe",Grey:"Grau",Groove:"Eingeritzt","Guarani sign":"Guaraní-Zeichen","Header column":"Kopfspalte","Header row":"Kopfzeile",Heading:"Überschrift","Heading 1":"Überschrift 1","Heading 2":"Überschrift 2","Heading 3":"Überschrift 3","Heading 4":"Überschrift 4","Heading 5":"Überschrift 5","Heading 6":"Überschrift 6",Height:"Höhe",Highlight:"Texthervorhebung","Horizontal ellipsis":"Auslassungspunkte","Horizontal line":"Horizontale Linie","Horizontal text alignment toolbar":"Werkzeugleiste für die horizontale Zellentext-Ausrichtung","Hryvnia sign":"Hrywnja-Zeichen",Huge:"Sehr groß","Identical to":"Identisch mit","Image resize list":"Bildgrößen-Liste","Image toolbar":"Bild Werkzeugleiste","image widget":"Bild-Steuerelement","Increase indent":"Einzug vergrößern","Indian rupee sign":"Indische Rupie-Zeichen",Infinity:"Unendlich-Zeichen",Insert:"","Insert code block":"Code-Block einfügen","Insert column left":"Spalte links einfügen","Insert column right":"Spalte rechts einfügen","Insert image":"Bild einfügen","Insert image via URL":"","Insert media":"Medium einfügen","Insert paragraph after block":"Absatz nach Block einfügen","Insert paragraph before block":"Absatz vor Block einfügen","Insert row above":"Zeile oben einfügen","Insert row below":"Zeile unten einfügen","Insert table":"Tabelle einfügen",Inset:"Eingelassen",Integral:"Integral-Zeichen",Intersection:"Schnitt","Inverted exclamation mark":"Umgekehrtes Ausrufezeichen","Inverted question mark":"Umgekehrtes Fragezeichen",Italic:"Kursiv",Justify:"Blocksatz","Justify cell text":"Zellentext als Blocksatz ausrichten","Kip sign":"Kip-Zeichen","Latin capital letter a with breve":"Lateinischer Großbuchstabe a mit Breve","Latin capital letter a with macron":"Lateinischer Großbuchstabe a mit Makron","Latin capital letter a with ogonek":"Lateinischer Großbuchstabe a mit Ogonek","Latin capital letter c with acute":"Lateinischer Großbuchstabe c mit Akut","Latin capital letter c with caron":"Lateinischer Großbuchstabe c mit Hatschek","Latin capital letter c with circumflex":"Lateinischer Großbuchstabe c mit Zirkumflex","Latin capital letter c with dot above":"Lateinischer Großbuchstabe c mit Punkt darüber","Latin capital letter d with caron":"Lateinischer Großbuchstabe d mit Hatschek","Latin capital letter d with stroke":"Lateinischer Großbuchstabe d mit Querstrich","Latin capital letter e with breve":"Lateinischer Großbuchstabe e mit Breve","Latin capital letter e with caron":"Lateinischer Großbuchstabe e mit Hatschek","Latin capital letter e with dot above":"Lateinischer Großbuchstabe e mit Punkt darüber","Latin capital letter e with macron":"Lateinischer Großbuchstabe e mit Makron","Latin capital letter e with ogonek":"Lateinischer Großbuchstabe e mit Ogonek","Latin capital letter eng":"Lateinischer Großbuchstabe Eng","Latin capital letter g with breve":"Lateinischer Großbuchstabe g mit Breve","Latin capital letter g with cedilla":"Lateinischer Großbuchstabe g mit Cedille","Latin capital letter g with circumflex":"Lateinischer Großbuchstabe g mit Zirkumflex","Latin capital letter g with dot above":"Lateinischer Großbuchstabe g mit Punkt darüber","Latin capital letter h with circumflex":"Lateinischer Großbuchstabe h mit Zirkumflex","Latin capital letter h with stroke":"Lateinischer Großbuchstabe h mit Querstrich","Latin capital letter i with breve":"Lateinischer Großbuchstabe i mit Breve","Latin capital letter i with dot above":"Lateinischer Großbuchstabe i mit Punkt darüber","Latin capital letter i with macron":"Lateinischer Großbuchstabe i mit Makron","Latin capital letter i with ogonek":"Lateinischer Großbuchstabe i mit Ogonek","Latin capital letter i with tilde":"Lateinischer Großbuchstabe i mit Tilde","Latin capital letter j with circumflex":"Lateinischer Großbuchstabe j mit Zirkumflex","Latin capital letter k with cedilla":"Lateinischer Großbuchstabe k mit Cedille","Latin capital letter l with acute":"Lateinischer Großbuchstabe l mit Akut","Latin capital letter l with caron":"Lateinischer Großbuchstabe l mit Hatschek","Latin capital letter l with cedilla":"Lateinischer Großbuchstabe l mit Cedille","Latin capital letter l with middle dot":"Lateinischer Großbuchstabe l mit Mittelpunkt","Latin capital letter l with stroke":"Lateinischer Großbuchstabe l mit Querstrich","Latin capital letter n with acute":"Lateinischer Großbuchstabe n mit Akut","Latin capital letter n with caron":"Lateinischer Großbuchstabe n mit Hatschek","Latin capital letter n with cedilla":"Lateinischer Großbuchstabe n mit Cedille","Latin capital letter o with breve":"Lateinischer Großbuchstabe o mit Breve","Latin capital letter o with double acute":"Lateinischer Großbuchstabe o mit doppeltem Akut","Latin capital letter o with macron":"Lateinischer Großbuchstabe o mit Makron","Latin capital letter r with acute":"Lateinischer Großbuchstabe r mit Akut","Latin capital letter r with caron":"Lateinischer Großbuchstabe r mit Hatschek","Latin capital letter r with cedilla":"Lateinischer Großbuchstabe r mit Cedille","Latin capital letter s with acute":"Lateinischer Großbuchstabe s mit Akut","Latin capital letter s with caron":"Lateinischer Großbuchstabe s mit Hatschek","Latin capital letter s with cedilla":"Lateinischer Großbuchstabe s mit Cedille","Latin capital letter s with circumflex":"Lateinischer Großbuchstabe s mit Zirkumflex","Latin capital letter t with caron":"Lateinischer Großbuchstabe t mit Hatschek","Latin capital letter t with cedilla":"Lateinischer Großbuchstabe t mit Cedille","Latin capital letter t with stroke":"Lateinischer Großbuchstabe t mit Querstrich","Latin capital letter u with breve":"Lateinischer Großbuchstabe u mit Breve","Latin capital letter u with double acute":"Lateinischer Großbuchstabe u mit doppeltem Akut","Latin capital letter u with macron":"Lateinischer Großbuchstabe u mit Makron","Latin capital letter u with ogonek":"Lateinischer Großbuchstabe u mit Ogonek","Latin capital letter u with ring above":"Lateinischer Großbuchstabe u mit Kroužek darüber","Latin capital letter u with tilde":"Lateinischer Großbuchstabe u mit Tilde","Latin capital letter w with circumflex":"Lateinischer Großbuchstabe w mit Zirkumflex","Latin capital letter y with circumflex":"Lateinischer Großbuchstabe y mit Zirkumflex","Latin capital letter y with diaeresis":"Lateinischer Großbuchstabe y mit Trema","Latin capital letter z with acute":"Lateinischer Großbuchstabe z mit Akut","Latin capital letter z with caron":"Lateinischer Großbuchstabe z mit Hatschek","Latin capital letter z with dot above":"Lateinischer Großbuchstabe z mit Punkt darüber","Latin capital ligature ij":"Große lateinische Ligatur ij","Latin capital ligature oe":"Große lateinische Ligatur oe","Latin small letter a with breve":"Lateinischer Kleinbuchstabe a mit Breve","Latin small letter a with macron":"Lateinischer Kleinbuchstabe a mit Makron","Latin small letter a with ogonek":"Lateinischer Kleinbuchstabe a mit Ogonek","Latin small letter c with acute":"Lateinischer Kleinbuchstabe c mit Akut","Latin small letter c with caron":"Lateinischer Kleinbuchstabe c mit Hatschek","Latin small letter c with circumflex":"Lateinischer Kleinbuchstabe c mit Zirkumflex","Latin small letter c with dot above":"Lateinischer Kleinbuchstabe c mit Punkt darüber","Latin small letter d with caron":"Lateinischer Kleinbuchstabe d mit Hatschek","Latin small letter d with stroke":"Lateinischer Kleinbuchstabe d mit Querstrich","Latin small letter dotless i":"Lateinischer Kleinbuchstabe i ohne Punkt","Latin small letter e with breve":"Lateinischer Kleinbuchstabe e mit Breve","Latin small letter e with caron":"Lateinischer Kleinbuchstabe e mit Hatschek","Latin small letter e with dot above":"Lateinischer Kleinbuchstabe e mit Punkt darüber","Latin small letter e with macron":"Lateinischer Kleinbuchstabe e mit Makron","Latin small letter e with ogonek":"Lateinischer Kleinbuchstabe e mit Ogonek","Latin small letter eng":"Lateinischer Kleinbuchstabe Eng","Latin small letter f with hook":"Lateinischer Kleinbuchstabe f mit Haken","Latin small letter g with breve":"Lateinischer Kleinbuchstabe g mit Breve","Latin small letter g with cedilla":"Lateinischer Kleinbuchstabe g mit Cedille","Latin small letter g with circumflex":"Lateinischer Kleinbuchstabe g mit Zirkumflex","Latin small letter g with dot above":"Lateinischer Kleinbuchstabe g mit Punkt darüber","Latin small letter h with circumflex":"Lateinischer Kleinbuchstabe h mit Zirkumflex","Latin small letter h with stroke":"Lateinischer Kleinbuchstabe h mit Querstrich","Latin small letter i with breve":"Lateinischer Kleinbuchstabe i mit Breve","Latin small letter i with macron":"Lateinischer Kleinbuchstabe i mit Makron","Latin small letter i with ogonek":"Lateinischer Kleinbuchstabe i mit Ogonek","Latin small letter i with tilde":"Lateinischer Kleinbuchstabe i mit Tilde","Latin small letter j with circumflex":"Lateinischer Kleinbuchstabe j mit Zirkumflex","Latin small letter k with cedilla":"Lateinischer Kleinbuchstabe k mit Cedille","Latin small letter kra":"Lateinischer Kleinbuchstabe Kra","Latin small letter l with acute":"Lateinischer Kleinbuchstabe l mit Akut","Latin small letter l with caron":"Lateinischer Kleinbuchstabe l mit Hatschek","Latin small letter l with cedilla":"Lateinischer Kleinbuchstabe l mit Cedille","Latin small letter l with middle dot":"Lateinischer Kleinbuchstabe l mit Mittelpunkt","Latin small letter l with stroke":"Lateinischer Kleinbuchstabe l mit Querstrich","Latin small letter long s":"Lateinischer Kleinbuchstabe langes s","Latin small letter n preceded by apostrophe":"Lateinischer Kleinbuchstabe n mit vorangestelltem Apostroph","Latin small letter n with acute":"Lateinischer Kleinbuchstabe n mit Akut","Latin small letter n with caron":"Lateinischer Kleinbuchstabe n mit Hatschek","Latin small letter n with cedilla":"Lateinischer Kleinbuchstabe n mit Cedille","Latin small letter o with breve":"Lateinischer Kleinbuchstabe o mit Breve","Latin small letter o with double acute":"Lateinischer Kleinbuchstabe o mit doppeltem Akut","Latin small letter o with macron":"Lateinischer Kleinbuchstabe o mit Makron","Latin small letter r with acute":"Lateinischer Kleinbuchstabe r mit Akut","Latin small letter r with caron":"Lateinischer Kleinbuchstabe r mit Hatschek","Latin small letter r with cedilla":"Lateinischer Kleinbuchstabe r mit Cedille","Latin small letter s with acute":"Lateinischer Kleinbuchstabe s mit Akut","Latin small letter s with caron":"Lateinischer Kleinbuchstabe s mit Hatschek","Latin small letter s with cedilla":"Lateinischer Kleinbuchstabe s mit Cedille","Latin small letter s with circumflex":"Lateinischer Kleinbuchstabe s mit Zirkumflex","Latin small letter t with caron":"Lateinischer Kleinbuchstabe t mit Hatschek","Latin small letter t with cedilla":"Lateinischer Kleinbuchstabe t mit Cedille","Latin small letter t with stroke":"Lateinischer Kleinbuchstabe t mit Querstrich","Latin small letter u with breve":"Lateinischer Kleinbuchstabe u mit Breve","Latin small letter u with double acute":"Lateinischer Kleinbuchstabe u mit doppeltem Akut","Latin small letter u with macron":"Lateinischer Kleinbuchstabe u mit Makron","Latin small letter u with ogonek":"Lateinischer Kleinbuchstabe u mit Ogonek","Latin small letter u with ring above":"Lateinischer Kleinbuchstabe u mit Kroužek darüber","Latin small letter u with tilde":"Lateinischer Kleinbuchstabe u mit Tilde","Latin small letter w with circumflex":"Lateinischer Kleinbuchstabe w mit Zirkumflex","Latin small letter y with circumflex":"Lateinischer Kleinbuchstabe y mit Zirkumflex","Latin small letter z with acute":"Lateinischer Kleinbuchstabe z mit Akut","Latin small letter z with caron":"Lateinischer Kleinbuchstabe z mit Hatschek","Latin small letter z with dot above":"Lateinischer Kleinbuchstabe z mit Punkt darüber","Latin small ligature ij":"Kleine lateinische Ligatur ij","Latin small ligature oe":"Kleine lateinische Ligatur oe","Left aligned image":"linksbündiges Bild","Left double quotation mark":"Doppelte Anführungszeichen links","Left single quotation mark":"Einfache Anführungszeichen links","Left-pointing double angle quotation mark":"Doppelte Guillemets nach links","leftwards arrow to bar":"Pfeil nach links zum Querstrich","leftwards dashed arrow":"Gestrichelter Pfeil nach links","leftwards double arrow":"Doppelpfeil nach links","Less-than or equal to":"Kleiner als oder gleich","Less-than sign":"Kleiner-als-Zeichen","Light blue":"Hellblau","Light green":"Hellgrün","Light grey":"Hellgrau",Link:"Link","Link URL":"Link Adresse","Lira sign":"Lira-Zeichen","Livre tournois sign":"Livre tournois-Zeichen","Logical and":"Logisches und","Logical or":"Logisches oder","Lower-latin":"","Lower–roman":"",Macron:"Makron","Manat sign":"Manat-Zeichen","Media URL":"Medien-Url","media widget":"Medien-Widget","Merge cell down":"Zelle unten verbinden","Merge cell left":"Zelle links verbinden","Merge cell right":"Zelle rechts verbinden","Merge cell up":"Zelle verbinden","Merge cells":"Zellen verbinden","Mill sign":"Mill-Zeichen","Minus sign":"Minus-Zeichen","Multiplication sign":"Mal-Zeichen","N-ary product":"Produkt-Zeichen","N-ary summation":"Summen-Zeichen",Nabla:"Nabla","Naira sign":"Naira-Zeichen","New sheqel sign":"Schekel-Zeichen",Next:"Nächste",None:"Kein Rahmen","Nordic mark sign":"Nordische Mark-Zeichen","Not an element of":"Kein Element von","Not equal to":"Ungleich","Not sign":"Negations-Zeichen","Numbered List":"Nummerierte Liste","Numbered list styles toolbar":"","on with exclamation mark with left right arrow above":"„On“ mit Ausrufezeichen darüber Pfeil nach links und rechts","Open in a new tab":"In neuem Tab öffnen","Open link in new tab":"Link im neuen Tab öffnen",Orange:"Orange",Original:"Original",Outset:"Geprägt",Overline:"Überstrich",Padding:"Innenabstand","Page break":"Seitenumbruch",Paragraph:"Absatz","Paragraph sign":"Absatz-Zeichen","Partial differential":"Partielle Ableitung","Paste the image source URL.":"","Paste the media URL in the input.":"Medien-URL in das Eingabefeld einfügen.","Per mille sign":"Promille-Zeichen","Per ten thousand sign":"Pro-Zehntausend-Zeichen","Peseta sign":"Peseta-Zeichen","Peso sign":"Philippinischer Peso-Zeichen","Pink marker":"Pinker Marker","Plain text":"Nur Text","Plus-minus sign":"Plus-Minus-Zeichen","Pound sign":"Pfund-Zeichen",Previous:"vorherige","Proportional to":"Proportional zu",Purple:"Violett","Question exclamation mark":"Frage-Ruf-Zeichen",Red:"Rot","Red pen":"Rote Schriftfarbe",Redo:"Wiederherstellen","Registered sign":"Registered-Trade-Mark-Zeichen","Remove color":"Farbe entfernen","Remove Format":"Formatierung entfernen","Remove highlight":"Texthervorhebung entfernen","Resize image":"Bildgröße ändern","Resize image to %0":"Bildgröße ändern in %0","Resize image to the original size":"Bild in Originalgröße ändern","Reversed paragraph sign":"Umgedrehtes Absatz-Zeichen","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich-Text-Editor, %0",Ridge:"Hervorgehoben","Right aligned image":"rechtsbündiges Bild","Right double quotation mark":"Doppelte Anführungszeichen rechts","Right single quotation mark":"Einfache Anführungszeichen rechts","Right-pointing double angle quotation mark":"Doppelte Guillemets nach rechts","rightwards arrow to bar":"Pfeil nach rechts zum Querstrich","rightwards dashed arrow":"Gestrichelter Pfeil nach rechts","rightwards double arrow":"Doppelpfeil nach rechts",Row:"Zeile","Ruble sign":"Rubel-Zeichen","Rupee sign":"Rupie-Zeichen",Save:"Speichern","Section sign":"Paragraphen-Zeichen","Select all":"Alles auswählen","Select column":"Spalte auswählen","Select row":"Zeile auswählen","Show more items":"Mehr anzeigen","Side image":"Seitenbild","Single left-pointing angle quotation mark":"Einfache Guillemets nach links","Single low-9 quotation mark":"Einfache Anführungszeichen links unten","Single right-pointing angle quotation mark":"Einfache Guillemets nach rechts",Small:"Klein",Solid:"Durchgezogen","soon with rightwards arrow above":"„Soon“ darüber Pfeil nach rechts","Special characters":"Sonderzeichen","Spesmilo sign":"Spesmilo-Zeichen","Split cell horizontally":"Zelle horizontal teilen","Split cell vertically":"Zelle vertikal teilen",Square:"","Square root":"Wurzel-Zeichen",Strikethrough:"Durchgestrichen",Style:"Rahmenart","Table alignment toolbar":"Werkzeugleiste für die Tabellen-Ausrichtung","Table cell text alignment":"Ausrichtung des Zellentextes","Table properties":"Tabelleneigenschaften","Table toolbar":"Tabelle Werkzeugleiste","Tenge sign":"Tenge-Zeichen","Text alignment":"Textausrichtung","Text alignment toolbar":"Text-Ausrichtung Toolbar","Text alternative":"Alternativtext","Text highlight toolbar":"Text hervorheben Werkzeugleiste",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"Die Farbe ist ungültig. Probieren Sie „#FF0000“ oder „rgb(255,0,0)“ oder „red“.","The URL must not be empty.":"Die Url darf nicht leer sein",'The value is invalid. Try "10px" or "2em" or simply "2".':"Der Wert ist ungültig. Probieren Sie „10px“ oder „2em“ oder „2“.","There exists":"Existenzquantor","This link has no URL":"Dieser Link hat keine Adresse","This media URL is not supported.":"Diese Medien-Url wird nicht unterstützt","Tilde operator":"Tilde-Operator",Tiny:"Sehr klein","Tip: Paste the URL into the content to embed faster.":"Tipp: Zum schnelleren Einbetten können Sie die Medien-URL in den Inhalt einfügen.","To-do List":"Aufgabenliste","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","top with upwards arrow above":"„Top“ darüber Pfeil nach oben","Trade mark sign":"Unregistered-Trade-Mark-Zeichen","Tugrik sign":"Tugrik-Zeichen","Turkish lira sign":"Türkische Lira-Zeichen",Turquoise:"Türkis","Two dot leader":"Doppel-Punktlinie","Type or paste your content here.":"Hier Inhalt einfügen.","Type your title":"Titel eingeben",Underline:"Unterstrichen",Undo:"Rückgängig",Union:"Vereinigung",Unlink:"Link entfernen","up down arrow with base":"Unterstrichener Pfeil nach oben und unten",Update:"","Upload failed":"Hochladen fehlgeschlagen","Upload in progress":"Upload läuft","Upper-latin":"","Upper-roman":"","upwards arrow to bar":"Pfeil nach oben zum Querstrich","upwards dashed arrow":"Gestrichelter Pfeil nach oben","upwards double arrow":"Doppelpfeil nach oben","Vertical text alignment toolbar":"Werkzeugleiste für die vertikale Zellentext-Ausrichtung","Vulgar fraction one half":"Gemeiner Bruch ein Halb","Vulgar fraction one quarter":"Gemeiner Bruch ein Viertel","Vulgar fraction three quarters":"Gemeiner Bruch drei Viertel",White:"Weiß","Widget toolbar":"Widget Werkzeugleiste",Width:"Breite","Won sign":"Won-Zeichen",Yellow:"Gelb","Yellow marker":"Gelber Marker","Yen sign":"Yen-Zeichen"});t.getPluralForm=function(e){return e!=1}})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));(function e(t,i){if(typeof exports==="object"&&typeof module==="object")module.exports=i();else if(typeof define==="function"&&define.amd)define([],i);else if(typeof exports==="object")exports["ClassicEditor"]=i();else t["ClassicEditor"]=i()})(window,(function(){return function(e){var t={};function i(n){if(t[n]){return t[n].exports}var o=t[n]={i:n,l:false,exports:{}};e[n].call(o.exports,o,o.exports,i);o.l=true;return o.exports}i.m=e;i.c=t;i.d=function(e,t,n){if(!i.o(e,t)){Object.defineProperty(e,t,{enumerable:true,get:n})}};i.r=function(e){if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(e,"__esModule",{value:true})};i.t=function(e,t){if(t&1)e=i(e);if(t&8)return e;if(t&4&&typeof e==="object"&&e&&e.__esModule)return e;var n=Object.create(null);i.r(n);Object.defineProperty(n,"default",{enumerable:true,value:e});if(t&2&&typeof e!="string")for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n};i.n=function(e){var t=e&&e.__esModule?function t(){return e["default"]}:function t(){return e};i.d(t,"a",t);return t};i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};i.p="";return i(i.s=146)}([function(e,t,i){"use strict";i.d(t,"b",(function(){return o}));i.d(t,"a",(function(){return r}));const n="https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html";class o extends Error{constructor(e,t,i){e=r(e);if(i){e+=" "+JSON.stringify(i)}super(e);this.name="CKEditorError";this.context=t;this.data=i}is(e){return e==="CKEditorError"}static rethrowUnexpectedError(e,t){if(e.is&&e.is("CKEditorError")){throw e}const i=new o(e.message,t);i.stack=e.stack;throw i}}function r(e){const t=e.match(/^([^:]+):/);if(!t){return e}return e+` Read more: ${n}#error-${t[1]}\n`}},function(e,t,i){"use strict";var n=function e(){var t;return function e(){if(typeof t==="undefined"){t=Boolean(window&&document&&document.all&&!window.atob)}return t}}();var o=function e(){var t={};return function e(i){if(typeof t[i]==="undefined"){var n=document.querySelector(i);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement){try{n=n.contentDocument.head}catch(e){n=null}}t[i]=n}return t[i]}}();var r=[];function s(e){var t=-1;for(var i=0;i:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-editor__editable_inline.ck-blurred ::selection{background:var(--ck-color-editable-blur-selection)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-base-foreground)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-base-foreground)}"},function(e,t,i){var n=i(1);var o=i(23);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-label{display:block}.ck.ck-voice-label{display:none}.ck.ck-label{font-weight:700}"},function(e,t,i){var n=i(1);var o=i(25);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-sticky-panel .ck-sticky-panel__content_sticky{z-index:var(--ck-z-modal);position:fixed;top:0}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{top:auto;position:absolute}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{box-shadow:var(--ck-drop-shadow),0 0;border-width:0 1px 1px;border-top-left-radius:0;border-top-right-radius:0}"},function(e,t,i){var n=i(1);var o=i(27);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-dropdown{display:inline-block;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on .ck-tooltip{display:none}.ck.ck-dropdown .ck-dropdown__panel{-webkit-backface-visibility:hidden;display:none;z-index:var(--ck-z-modal);position:absolute}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{top:100%;bottom:auto}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}.ck.ck-toolbar .ck-dropdown__panel{z-index:calc(var(--ck-z-modal) + 1)}:root{--ck-dropdown-arrow-size:calc(0.5*var(--ck-icon-size))}.ck.ck-dropdown{font-size:inherit}.ck.ck-dropdown .ck-dropdown__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{width:7em;overflow:hidden;text-overflow:ellipsis}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-dropdown__button_label-width_auto .ck-button__label{width:auto}.ck.ck-dropdown__panel{border-radius:0}.ck-rounded-corners .ck.ck-dropdown__panel,.ck.ck-dropdown__panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-dropdown__panel{box-shadow:var(--ck-drop-shadow),0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);bottom:0;min-width:100%}.ck.ck-dropdown__panel.ck-dropdown__panel_se{border-top-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_sw{border-top-right-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_ne{border-bottom-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_nw{border-bottom-right-radius:0}"},function(e,t,i){var n=i(1);var o=i(29);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-icon{vertical-align:middle}:root{--ck-icon-size:calc(var(--ck-line-height-base)*var(--ck-font-size-normal))}.ck.ck-icon{width:var(--ck-icon-size);height:var(--ck-icon-size);font-size:.8333350694em;will-change:transform}.ck.ck-icon,.ck.ck-icon *{color:inherit;cursor:inherit}.ck.ck-icon :not([fill]){fill:currentColor}"},function(e,t,i){var n=i(1);var o=i(31);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck.ck-tooltip,.ck.ck-tooltip .ck-tooltip__text:after{position:absolute;pointer-events:none;-webkit-backface-visibility:hidden}.ck.ck-tooltip{visibility:hidden;opacity:0;display:none;z-index:var(--ck-z-modal)}.ck.ck-tooltip .ck-tooltip__text{display:inline-block}.ck.ck-tooltip .ck-tooltip__text:after{content:"";width:0;height:0}:root{--ck-tooltip-arrow-size:5px}.ck.ck-tooltip{left:50%;top:0;transition:opacity .2s ease-in-out .2s}.ck.ck-tooltip .ck-tooltip__text{border-radius:0}.ck-rounded-corners .ck.ck-tooltip .ck-tooltip__text,.ck.ck-tooltip .ck-tooltip__text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-tooltip .ck-tooltip__text{font-size:.9em;line-height:1.5;color:var(--ck-color-tooltip-text);padding:var(--ck-spacing-small) var(--ck-spacing-medium);background:var(--ck-color-tooltip-background);position:relative;left:-50%}.ck.ck-tooltip .ck-tooltip__text:after{transition:opacity .2s ease-in-out .2s;border-style:solid;left:50%}.ck.ck-tooltip.ck-tooltip_s{bottom:calc(-1*var(--ck-tooltip-arrow-size));transform:translateY(100%)}.ck.ck-tooltip.ck-tooltip_s .ck-tooltip__text:after{top:calc(-1*var(--ck-tooltip-arrow-size));transform:translateX(-50%);border-left-color:transparent;border-bottom-color:var(--ck-color-tooltip-background);border-right-color:transparent;border-top-color:transparent;border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:var(--ck-tooltip-arrow-size);border-right-width:var(--ck-tooltip-arrow-size);border-top-width:0}.ck.ck-tooltip.ck-tooltip_n{top:calc(-1*var(--ck-tooltip-arrow-size));transform:translateY(-100%)}.ck.ck-tooltip.ck-tooltip_n .ck-tooltip__text:after{bottom:calc(-1*var(--ck-tooltip-arrow-size));transform:translateX(-50%);border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent;border-top-color:var(--ck-color-tooltip-background);border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:0;border-right-width:var(--ck-tooltip-arrow-size);border-top-width:var(--ck-tooltip-arrow-size)}'},function(e,t,i){var n=i(1);var o=i(33);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-button,a.ck.ck-button{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:block}@media (hover:none){.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:none}}.ck.ck-button,a.ck.ck-button{position:relative;display:inline-flex;align-items:center;justify-content:left}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{display:none}.ck.ck-button.ck-button_with-text .ck-button__label,a.ck.ck-button.ck-button_with-text .ck-button__label{display:inline-block}.ck.ck-button:not(.ck-button_with-text),a.ck.ck-button:not(.ck-button_with-text){justify-content:center}.ck.ck-button:hover .ck-tooltip,a.ck.ck-button:hover .ck-tooltip{visibility:visible;opacity:1}.ck.ck-button:focus:not(:hover) .ck-tooltip,a.ck.ck-button:focus:not(:hover) .ck-tooltip{display:none}.ck.ck-button,a.ck.ck-button{background:var(--ck-color-button-default-background)}.ck.ck-button:not(.ck-disabled):hover,a.ck.ck-button:not(.ck-disabled):hover{background:var(--ck-color-button-default-hover-background)}.ck.ck-button:not(.ck-disabled):active,a.ck.ck-button:not(.ck-disabled):active{background:var(--ck-color-button-default-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-default-active-shadow)}.ck.ck-button.ck-disabled,a.ck.ck-button.ck-disabled{background:var(--ck-color-button-default-disabled-background)}.ck.ck-button,a.ck.ck-button{border-radius:0}.ck-rounded-corners .ck.ck-button,.ck-rounded-corners a.ck.ck-button,.ck.ck-button.ck-rounded-corners,a.ck.ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-button,a.ck.ck-button{white-space:nowrap;cursor:default;vertical-align:middle;padding:var(--ck-spacing-tiny);text-align:center;min-width:var(--ck-ui-component-min-height);min-height:var(--ck-ui-component-min-height);line-height:1;font-size:inherit;border:1px solid transparent;transition:box-shadow .2s ease-in-out,border .2s ease-in-out;-webkit-appearance:none}.ck.ck-button:active,.ck.ck-button:focus,a.ck.ck-button:active,a.ck.ck-button:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0}.ck.ck-button .ck-button__icon use,.ck.ck-button .ck-button__icon use *,a.ck.ck-button .ck-button__icon use,a.ck.ck-button .ck-button__icon use *{color:inherit}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{font-size:inherit;font-weight:inherit;color:inherit;cursor:inherit;vertical-align:middle}[dir=ltr] .ck.ck-button .ck-button__label,[dir=ltr] a.ck.ck-button .ck-button__label{text-align:left}[dir=rtl] .ck.ck-button .ck-button__label,[dir=rtl] a.ck.ck-button .ck-button__label{text-align:right}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{color:inherit}[dir=ltr] .ck.ck-button .ck-button__keystroke,[dir=ltr] a.ck.ck-button .ck-button__keystroke{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-button .ck-button__keystroke,[dir=rtl] a.ck.ck-button .ck-button__keystroke{margin-right:var(--ck-spacing-large)}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{font-weight:700;opacity:.7}.ck.ck-button.ck-disabled:active,.ck.ck-button.ck-disabled:focus,a.ck.ck-button.ck-disabled:active,a.ck.ck-button.ck-disabled:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-button.ck-disabled .ck-button__icon,a.ck.ck-button.ck-disabled .ck-button__icon{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__label,a.ck.ck-button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__keystroke,a.ck.ck-button.ck-disabled .ck-button__keystroke{opacity:.3}.ck.ck-button.ck-button_with-text,a.ck.ck-button.ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=ltr] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-left:calc(-1*var(--ck-spacing-small));margin-right:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=rtl] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-right:calc(-1*var(--ck-spacing-small));margin-left:var(--ck-spacing-small)}.ck.ck-button.ck-button_with-keystroke .ck-button__label,a.ck.ck-button.ck-button_with-keystroke .ck-button__label{flex-grow:1}.ck.ck-button.ck-on,a.ck.ck-button.ck-on{background:var(--ck-color-button-on-background)}.ck.ck-button.ck-on:not(.ck-disabled):hover,a.ck.ck-button.ck-on:not(.ck-disabled):hover{background:var(--ck-color-button-on-hover-background)}.ck.ck-button.ck-on:not(.ck-disabled):active,a.ck.ck-button.ck-on:not(.ck-disabled):active{background:var(--ck-color-button-on-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-on-active-shadow)}.ck.ck-button.ck-on.ck-disabled,a.ck.ck-button.ck-on.ck-disabled{background:var(--ck-color-button-on-disabled-background)}.ck.ck-button.ck-button-save,a.ck.ck-button.ck-button-save{color:var(--ck-color-button-save)}.ck.ck-button.ck-button-cancel,a.ck.ck-button.ck-button-cancel{color:var(--ck-color-button-cancel)}.ck.ck-button-action,a.ck.ck-button-action{background:var(--ck-color-button-action-background)}.ck.ck-button-action:not(.ck-disabled):hover,a.ck.ck-button-action:not(.ck-disabled):hover{background:var(--ck-color-button-action-hover-background)}.ck.ck-button-action:not(.ck-disabled):active,a.ck.ck-button-action:not(.ck-disabled):active{background:var(--ck-color-button-action-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-action-active-shadow)}.ck.ck-button-action.ck-disabled,a.ck.ck-button-action.ck-disabled{background:var(--ck-color-button-action-disabled-background)}.ck.ck-button-action,a.ck.ck-button-action{color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}"},function(e,t,i){var n=i(1);var o=i(35);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-list{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{position:relative;z-index:var(--ck-z-default)}.ck.ck-list{border-radius:0}.ck-rounded-corners .ck.ck-list,.ck.ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-list{list-style-type:none;background:var(--ck-color-list-background)}.ck.ck-list__item{cursor:default;min-width:12em}.ck.ck-list__item .ck-button{min-height:unset;width:100%;text-align:left;border-radius:0;padding:calc(0.2*var(--ck-line-height-base)*var(--ck-font-size-base)) calc(0.4*var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item .ck-button .ck-button__label{line-height:calc(1.2*var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item .ck-button:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item .ck-button.ck-on:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item .ck-button.ck-on:focus:not(.ck-disabled){border-color:var(--ck-color-base-background)}.ck.ck-list__item .ck-button:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item .ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item .ck-switchbutton.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck.ck-list__separator{height:1px;width:100%;background:var(--ck-color-base-border)}"},function(e,t,i){var n=i(1);var o=i(37);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}:root{--ck-switch-button-toggle-width:2.6153846154em;--ck-switch-button-toggle-inner-size:1.0769230769em;--ck-switch-button-toggle-spacing:1px;--ck-switch-button-translation:calc(var(--ck-switch-button-toggle-width) - var(--ck-switch-button-toggle-inner-size) - 2*var(--ck-switch-button-toggle-spacing))}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__label{margin-right:calc(2*var(--ck-spacing-large))}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__label{margin-left:calc(2*var(--ck-spacing-large))}.ck.ck-button.ck-switchbutton .ck-button__toggle{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle.ck-rounded-corners{border-radius:var(--ck-border-radius)}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-left:auto}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle{transition:background .4s ease;width:var(--ck-switch-button-toggle-width);background:var(--ck-color-switch-button-off-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:calc(0.5*var(--ck-border-radius))}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{margin:var(--ck-switch-button-toggle-spacing);width:var(--ck-switch-button-toggle-inner-size);height:var(--ck-switch-button-toggle-inner-size);background:var(--ck-color-switch-button-inner-background);transition:all .3s ease}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{box-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(var(--ck-switch-button-translation))}[dir=rtl] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(calc(-1*var(--ck-switch-button-translation)))}"},function(e,t,i){var n=i(1);var o=i(39);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-toolbar-dropdown .ck.ck-toolbar .ck.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar-dropdown .ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}"},function(e,t,i){var n=i(1);var o=i(41);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-dropdown .ck-dropdown__panel .ck-list{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list,.ck.ck-dropdown .ck-dropdown__panel .ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}"},function(e,t,i){var n=i(1);var o=i(43);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-toolbar{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-flow:row nowrap;align-items:center}.ck.ck-toolbar>.ck-toolbar__items{display:flex;flex-flow:row wrap;align-items:center;flex-grow:1}.ck.ck-toolbar .ck.ck-toolbar__separator{display:inline-block}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-toolbar,.ck.ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-toolbar{background:var(--ck-color-toolbar-background);padding:0 var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border)}.ck.ck-toolbar .ck.ck-toolbar__separator{align-self:stretch;width:1px;min-width:1px;background:var(--ck-color-toolbar-border);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar>.ck-toolbar__items>*{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small);margin-right:var(--ck-spacing-small)}.ck.ck-toolbar>.ck-toolbar__items:empty+.ck.ck-toolbar__separator{display:none}.ck.ck-toolbar>.ck-toolbar__items>*,.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{width:100%;margin:0;border-radius:0;border:0}.ck.ck-toolbar.ck-toolbar_compact{padding:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*{margin:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>:not(:first-child):not(:last-child){border-radius:0}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck{margin-right:0}.ck.ck-toolbar[dir=rtl]:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-left:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_compact>.ck-toolbar__items>.ck:first-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_compact>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__separator,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl].ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=rtl] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr]>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-right:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_compact>.ck-toolbar__items>.ck:first-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_compact>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar[dir=ltr]>.ck.ck-toolbar__separator,[dir=ltr] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-right:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr].ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=ltr] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-right:var(--ck-spacing-small)}"},function(e,t,i){var n=i(1);var o=i(45);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-editor{position:relative}.ck.ck-editor .ck-editor__top .ck-sticky-panel .ck-toolbar{z-index:var(--ck-z-modal)}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-bottom-width:0}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar{border-bottom-width:1px;border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:0}.ck.ck-editor__main>.ck-editor__editable{background:var(--ck-color-base-background);border-radius:0}.ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,.ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-editor__main>.ck-editor__editable:not(.ck-focused){border-color:var(--ck-color-base-border)}"},function(e,t,i){var n=i(1);var o=i(47);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content blockquote{overflow:hidden;padding-right:1.5em;padding-left:1.5em;margin-left:0;margin-right:0;font-style:italic;border-left:5px solid #ccc}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}"},function(e,t){e.exports=".ck-content code{background-color:hsla(0,0%,78%,.3);padding:.15em;border-radius:2px}.ck.ck-editor__editable .ck-code_selected{background-color:hsla(0,0%,78%,.5)}"},function(e,t,i){var n=i(1);var o=i(50);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-splitbutton{font-size:inherit}.ck.ck-splitbutton .ck-splitbutton__action:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button .ck-tooltip{display:none}:root{--ck-color-split-button-hover-background:#ebebeb;--ck-color-split-button-hover-border:#b3b3b3}[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__action{border-top-right-radius:unset;border-bottom-right-radius:unset}[dir=rtl] .ck.ck-splitbutton>.ck-splitbutton__action{border-top-left-radius:unset;border-bottom-left-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow{min-width:unset}[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-radius:0}.ck-rounded-corners [dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow,[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:unset;border-bottom-left-radius:unset}[dir=rtl] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-top-right-radius:unset;border-bottom-right-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow svg{width:var(--ck-dropdown-arrow-size)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover),.ck.ck-splitbutton:hover>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover){background:var(--ck-color-split-button-hover-background)}[dir=ltr] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled),[dir=ltr] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled){border-left-color:var(--ck-color-split-button-hover-border)}[dir=rtl] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled),[dir=rtl] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled){border-right-color:var(--ck-color-split-button-hover-border)}.ck.ck-splitbutton.ck-splitbutton_open{border-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__action{border-bottom-left-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__arrow{border-bottom-right-radius:0}"},function(e,t,i){var n=i(1);var o=i(52);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content pre{padding:1em;color:#353535;background:hsla(0,0%,78%,.3);border:1px solid #c4c4c4;border-radius:2px;text-align:left;direction:ltr;tab-size:4;white-space:pre-wrap;font-style:normal;min-width:200px}.ck-content pre code{background:unset;padding:0;border-radius:0}.ck.ck-editor__editable pre{position:relative}.ck.ck-editor__editable pre[data-language]:after{content:attr(data-language);position:absolute}:root{--ck-color-code-block-label-background:#757575}.ck.ck-editor__editable pre[data-language]:after{top:-1px;right:10px;background:var(--ck-color-code-block-label-background);font-size:10px;font-family:var(--ck-font-face);line-height:16px;padding:var(--ck-spacing-tiny) var(--ck-spacing-medium);color:#fff;white-space:nowrap}.ck.ck-code-block-dropdown .ck-dropdown__panel{max-height:250px;overflow-y:auto;overflow-x:hidden}"},function(e,t,i){var n=i(1);var o=i(54);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-color-grid{display:grid}:root{--ck-color-grid-tile-size:24px;--ck-color-color-grid-check-icon:#000}.ck.ck-color-grid{grid-gap:5px;padding:8px}.ck.ck-color-grid__tile{width:var(--ck-color-grid-tile-size);height:var(--ck-color-grid-tile-size);min-width:var(--ck-color-grid-tile-size);min-height:var(--ck-color-grid-tile-size);padding:0;transition:box-shadow .2s ease;border:0}.ck.ck-color-grid__tile.ck-disabled{cursor:unset;transition:unset}.ck.ck-color-grid__tile.ck-color-table__color-tile_bordered{box-shadow:0 0 0 1px var(--ck-color-base-border)}.ck.ck-color-grid__tile .ck.ck-icon{display:none;color:var(--ck-color-color-grid-check-icon)}.ck.ck-color-grid__tile.ck-on{box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-base-text)}.ck.ck-color-grid__tile.ck-on .ck.ck-icon{display:block}.ck.ck-color-grid__tile.ck-on,.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){border:0}.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-color-grid__label{padding:0 var(--ck-spacing-standard)}"},function(e,t,i){var n=i(1);var o=i(56);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-button.ck-color-table__remove-color{display:flex;align-items:center;width:100%}label.ck.ck-color-grid__label{font-weight:unset}.ck .ck-button.ck-color-table__remove-color{padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck .ck-button.ck-color-table__remove-color:not(:focus){border-bottom:1px solid var(--ck-color-base-border)}[dir=ltr] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-left:var(--ck-spacing-standard)}"},function(e,t,i){var n=i(1);var o=i(58);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .text-tiny{font-size:.7em}.ck-content .text-small{font-size:.85em}.ck-content .text-big{font-size:1.4em}.ck-content .text-huge{font-size:1.8em}"},function(e,t){e.exports=".ck.ck-heading_heading1{font-size:20px}.ck.ck-heading_heading2{font-size:17px}.ck.ck-heading_heading3{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}"},function(e,t,i){var n=i(1);var o=i(61);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-highlight-marker-yellow:#fdfd77;--ck-highlight-marker-green:#62f962;--ck-highlight-marker-pink:#fc7899;--ck-highlight-marker-blue:#72ccfd;--ck-highlight-pen-red:#e71313;--ck-highlight-pen-green:#128a00}.ck-content .marker-yellow{background-color:var(--ck-highlight-marker-yellow)}.ck-content .marker-green{background-color:var(--ck-highlight-marker-green)}.ck-content .marker-pink{background-color:var(--ck-highlight-marker-pink)}.ck-content .marker-blue{background-color:var(--ck-highlight-marker-blue)}.ck-content .pen-red{color:var(--ck-highlight-pen-red);background-color:transparent}.ck-content .pen-green{color:var(--ck-highlight-pen-green);background-color:transparent}"},function(e,t,i){var n=i(1);var o=i(63);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=':root{--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{display:none;position:absolute;z-index:var(--ck-z-modal)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{content:"";position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}:root{--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px}.ck.ck-balloon-panel{border-radius:0}.ck-rounded-corners .ck.ck-balloon-panel,.ck.ck-balloon-panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-balloon-panel{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{width:0;height:0;border-style:solid}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:var(--ck-balloon-arrow-height);border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:0}.ck.ck-balloon-panel[class*=arrow_n]:before{border-bottom-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-color:transparent;border-right-color:transparent;border-top-color:transparent}.ck.ck-balloon-panel[class*=arrow_n]:after{border-bottom-color:var(--ck-color-panel-background);margin-top:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:0;border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-top-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent}.ck.ck-balloon-panel[class*=arrow_s]:after{border-top-color:var(--ck-color-panel-background);margin-bottom:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before{left:50%;margin-left:calc(-1*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before{left:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before{right:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before{left:50%;margin-left:calc(-1*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before{left:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before{right:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:before{right:25%;margin-right:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:before{left:25%;margin-left:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:before{right:25%;margin-right:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:before{left:25%;margin-left:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}'},function(e,t,i){var n=i(1);var o=i(65);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-editor__editable .ck-horizontal-line{display:flow-root}.ck-content hr{margin:15px 0;height:4px;background:#dedede;border:0}"},function(e,t,i){var n=i(1);var o=i(67);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck .ck-widget .ck-widget__type-around__button{display:block;position:absolute;overflow:hidden;z-index:var(--ck-z-default)}.ck .ck-widget .ck-widget__type-around__button svg{position:absolute;top:50%;left:50%;z-index:calc(var(--ck-z-default) + 2)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_before{top:calc(-0.5*var(--ck-widget-outline-thickness));left:min(10%,30px);transform:translateY(-50%)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_after{bottom:calc(-0.5*var(--ck-widget-outline-thickness));right:min(10%,30px);transform:translateY(50%)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{content:"";display:block;position:absolute;top:1px;left:1px;z-index:calc(var(--ck-z-default) + 1)}.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__fake-caret{display:none;position:absolute;left:0;right:0}.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__fake-caret{left:calc(-1*var(--ck-widget-outline-thickness));right:calc(-1*var(--ck-widget-outline-thickness))}.ck .ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__fake-caret{top:calc(-1*var(--ck-widget-outline-thickness) - 1px);display:block}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__fake-caret{bottom:calc(-1*var(--ck-widget-outline-thickness) - 1px);display:block}.ck.ck-editor__editable.ck-read-only .ck-widget__type-around,.ck.ck-editor__editable.ck-restricted-editing_mode_restricted .ck-widget__type-around,.ck.ck-editor__editable.ck-widget__type-around_disabled .ck-widget__type-around{display:none}:root{--ck-widget-type-around-button-size:20px;--ck-color-widget-type-around-button-active:var(--ck-color-focus-border);--ck-color-widget-type-around-button-hover:var(--ck-color-widget-hover-border);--ck-color-widget-type-around-button-blurred-editable:var(--ck-color-widget-blurred-border);--ck-color-widget-type-around-button-radar-start-alpha:0;--ck-color-widget-type-around-button-radar-end-alpha:.3;--ck-color-widget-type-around-button-icon:var(--ck-color-base-background)}.ck .ck-widget .ck-widget__type-around__button{width:var(--ck-widget-type-around-button-size);height:var(--ck-widget-type-around-button-size);background:var(--ck-color-widget-type-around-button);border-radius:100px;transition:opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);opacity:0;pointer-events:none}.ck .ck-widget .ck-widget__type-around__button svg{width:10px;height:8px;transform:translate(-50%,-50%);transition:transform .5s ease;margin-top:1px}.ck .ck-widget .ck-widget__type-around__button svg *{stroke-dasharray:10;stroke-dashoffset:0;fill:none;stroke:var(--ck-color-widget-type-around-button-icon);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.ck .ck-widget .ck-widget__type-around__button svg line{stroke-dasharray:7}.ck .ck-widget .ck-widget__type-around__button:hover{animation:ck-widget-type-around-button-sonar 1s ease infinite}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline{animation:ck-widget-type-around-arrow-dash 2s linear}.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:ck-widget-type-around-arrow-tip-dash 2s linear}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{opacity:1;pointer-events:auto}.ck .ck-widget:not(.ck-widget_selected)>.ck-widget__type-around>.ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button-hover)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover{background:var(--ck-color-widget-type-around-button-active)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{width:calc(var(--ck-widget-type-around-button-size) - 2px);height:calc(var(--ck-widget-type-around-button-size) - 2px);border-radius:100px;background:linear-gradient(135deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.3))}.ck .ck-widget.ck-widget_with-selection-handle>.ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:20px}.ck .ck-widget .ck-widget__type-around__fake-caret{pointer-events:none;height:1px;animation:ck-widget-type-around-fake-caret-pulse 1s linear infinite normal forwards;outline:1px solid hsla(0,0%,100%,.5);background:var(--ck-color-base-text)}.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_after,.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_before{outline-color:transparent}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_selected:hover,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_selected:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_with-selection-handle.ck-widget_selected:hover>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_with-selection-handle.ck-widget_selected:hover>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle{opacity:0}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_selected.ck-widget_with-resizer>.ck-widget__resizer,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_selected.ck-widget_with-resizer>.ck-widget__resizer{opacity:0}.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover){background:var(--ck-color-widget-type-around-button-blurred-editable)}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover) svg *{stroke:#999}@keyframes ck-widget-type-around-arrow-dash{0%{stroke-dashoffset:10}20%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-arrow-tip-dash{0%,20%{stroke-dashoffset:7}40%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-button-sonar{0%{box-shadow:0 0 0 0 hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}50%{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-end-alpha))}to{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}}@keyframes ck-widget-type-around-fake-caret-pulse{0%{opacity:1}49%{opacity:1}50%{opacity:0}99%{opacity:0}to{opacity:1}}'},function(e,t,i){var n=i(1);var o=i(69);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-color-resizer:var(--ck-color-focus-border);--ck-resizer-size:10px;--ck-resizer-border-width:1px;--ck-resizer-border-radius:2px;--ck-resizer-offset:calc(var(--ck-resizer-size)/-2 - 2px);--ck-resizer-tooltip-offset:10px;--ck-color-resizer-tooltip-background:#262626;--ck-color-resizer-tooltip-text:#f2f2f2}.ck .ck-widget,.ck .ck-widget.ck-widget_with-selection-handle{position:relative}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{position:absolute}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{display:block}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle:hover .ck-widget__selection-handle{visibility:visible}.ck .ck-size-view{background:var(--ck-color-resizer-tooltip-background);color:var(--ck-color-resizer-tooltip-text);border:1px solid var(--ck-color-resizer-tooltip-text);border-radius:var(--ck-resizer-border-radius);font-size:var(--ck-font-size-tiny);display:block;padding:var(--ck-spacing-small)}.ck .ck-size-view.ck-orientation-bottom-left,.ck .ck-size-view.ck-orientation-bottom-right,.ck .ck-size-view.ck-orientation-top-left,.ck .ck-size-view.ck-orientation-top-right{position:absolute}.ck .ck-size-view.ck-orientation-top-left{top:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-top-right{top:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-right{bottom:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-left{bottom:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}:root{--ck-widget-outline-thickness:3px;--ck-widget-handler-icon-size:16px;--ck-widget-handler-animation-duration:200ms;--ck-widget-handler-animation-curve:ease;--ck-color-widget-blurred-border:#dedede;--ck-color-widget-hover-border:#ffc83d;--ck-color-widget-editable-focus-background:var(--ck-color-base-background);--ck-color-widget-drag-handler-icon-color:var(--ck-color-base-background)}.ck .ck-widget{outline-width:var(--ck-widget-outline-thickness);outline-style:solid;outline-color:transparent;transition:outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_selected,.ck .ck-widget.ck-widget_selected:hover{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border)}.ck .ck-widget:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-editor__nested-editable{border:1px solid transparent}.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0;background-color:var(--ck-color-widget-editable-focus-background)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{padding:4px;box-sizing:border-box;background-color:transparent;opacity:0;transition:background-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),visibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0;transform:translateY(-100%);left:calc(0px - var(--ck-widget-outline-thickness))}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{width:var(--ck-widget-handler-icon-size);height:var(--ck-widget-handler-icon-size);color:var(--ck-color-widget-drag-handler-icon-color)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:0;transition:opacity .3s var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle:hover .ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-widget-hover-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover .ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-focus-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:1}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{left:auto;right:calc(0px - var(--ck-widget-outline-thickness))}.ck.ck-editor__editable.ck-read-only .ck-widget{transition:none}.ck.ck-editor__editable.ck-read-only .ck-widget:not(.ck-widget_selected){--ck-widget-outline-thickness:0px}.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover{outline-color:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle .ck-widget__selection-handle:hover,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable>.ck-widget.ck-widget_with-selection-handle:first-child,.ck.ck-editor__editable blockquote>.ck-widget.ck-widget_with-selection-handle:first-child{margin-top:calc(1em + var(--ck-widget-handler-icon-size))}"},function(e,t,i){var n=i(1);var o=i(71);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-labeled-field-view .ck-labeled-field-view__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-field-view .ck-labeled-field-view__status_error{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view>.ck.ck-label{width:100%;text-overflow:ellipsis;overflow:hidden}"},function(e,t,i){var n=i(1);var o=i(73);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-input-text-width:18em}.ck.ck-input-text{border-radius:0}.ck-rounded-corners .ck.ck-input-text,.ck.ck-input-text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-text{box-shadow:var(--ck-inner-shadow),0 0;background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);min-width:var(--ck-input-text-width);min-height:var(--ck-ui-component-min-height);transition:box-shadow .2s ease-in-out,border .2s ease-in-out}.ck.ck-input-text:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text[readonly]{border:1px solid var(--ck-color-input-disabled-border);background:var(--ck-color-input-disabled-background);color:var(--ck-color-input-disabled-text)}.ck.ck-input-text[readonly]:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text.ck-error{border-color:var(--ck-color-input-error-border);animation:ck-text-input-shake .3s ease both}.ck.ck-input-text.ck-error:focus{box-shadow:var(--ck-focus-error-outer-shadow),var(--ck-inner-shadow)}@keyframes ck-text-input-shake{20%{transform:translateX(-2px)}40%{transform:translateX(2px)}60%{transform:translateX(-1px)}80%{transform:translateX(1px)}}"},function(e,t,i){var n=i(1);var o=i(75);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-text-alternative-form{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-text-alternative-form .ck-labeled-field-view{display:inline-block}.ck.ck-text-alternative-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-text-alternative-form{flex-wrap:wrap}.ck.ck-text-alternative-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-text-alternative-form .ck-button{flex-basis:50%}}.ck.ck-text-alternative-form{padding:var(--ck-spacing-standard)}.ck.ck-text-alternative-form:focus{outline:none}[dir=ltr] .ck.ck-text-alternative-form>:not(:first-child),[dir=rtl] .ck.ck-text-alternative-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-text-alternative-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-text-alternative-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-text-alternative-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-text-alternative-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-text-alternative-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-text-alternative-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-text-alternative-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-text-alternative-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(e,t,i){var n=i(1);var o=i(77);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-balloon-rotator__navigation{display:flex;align-items:center;justify-content:center}.ck .ck-balloon-rotator__content .ck-toolbar{justify-content:center}.ck .ck-balloon-rotator__navigation{background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation>*{margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{box-shadow:none}"},function(e,t,i){var n=i(1);var o=i(79);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-fake-panel{position:absolute;z-index:calc(var(--ck-z-modal) - 1)}.ck .ck-fake-panel div{position:absolute}.ck .ck-fake-panel div:first-child{z-index:2}.ck .ck-fake-panel div:nth-child(2){z-index:1}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);width:100%;height:100%}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical)}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*2)}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*3)}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}"},function(e,t,i){var n=i(1);var o=i(81);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .image{display:table;clear:both;text-align:center;margin:1em auto}.ck-content .image img{display:block;margin:0 auto;max-width:100%;min-width:50px}"},function(e,t,i){var n=i(1);var o=i(83);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .image>figcaption{display:table-caption;caption-side:bottom;word-break:break-word;color:#333;background-color:#f7f7f7;padding:.6em;font-size:.75em;outline-offset:-1px}"},function(e,t,i){var n=i(1);var o=i(85);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-widget_with-resizer{position:relative}.ck .ck-widget__resizer{display:none;position:absolute;pointer-events:none;left:0;top:0;outline:1px solid var(--ck-color-resizer)}.ck-focused .ck-widget_with-resizer.ck-widget_selected>.ck-widget__resizer{display:block}.ck .ck-widget__resizer__handle{position:absolute;pointer-events:all;width:var(--ck-resizer-size);height:var(--ck-resizer-size);background:var(--ck-color-focus-border);border:var(--ck-resizer-border-width) solid #fff;border-radius:var(--ck-resizer-border-radius)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{top:var(--ck-resizer-offset);left:var(--ck-resizer-offset);cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{top:var(--ck-resizer-offset);right:var(--ck-resizer-offset);cursor:nesw-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{bottom:var(--ck-resizer-offset);right:var(--ck-resizer-offset);cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{bottom:var(--ck-resizer-offset);left:var(--ck-resizer-offset);cursor:nesw-resize}"},function(e,t,i){var n=i(1);var o=i(87);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .image.image_resized{max-width:100%;display:block;box-sizing:border-box}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}[dir=ltr] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-left:var(--ck-spacing-standard)}.ck.ck-dropdown .ck-button.ck-resize-image-button .ck-button__label{width:4em}"},function(e,t,i){var n=i(1);var o=i(89);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-image-style-spacing:1.5em}.ck-content .image-style-side{float:right;margin-left:var(--ck-image-style-spacing);max-width:50%}.ck-content .image-style-align-left{float:left;margin-right:var(--ck-image-style-spacing)}.ck-content .image-style-align-center{margin-left:auto;margin-right:auto}.ck-content .image-style-align-right{float:right;margin-left:var(--ck-image-style-spacing)}"},function(e,t,i){var n=i(1);var o=i(91);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-form__row{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.ck.ck-form__row>:not(.ck-label){flex-grow:1}.ck.ck-form__row.ck-image-upload-form__action-row{margin-top:var(--ck-spacing-standard)}.ck.ck-form__row.ck-image-upload-form__action-row .ck-button-cancel,.ck.ck-form__row.ck-image-upload-form__action-row .ck-button-save{justify-content:center}.ck.ck-form__row.ck-image-upload-form__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}"},function(e,t,i){var n=i(1);var o=i(93);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-image-upload__panel{padding:var(--ck-spacing-standard)}.ck.ck-image-upload__ck-finder-button{display:block;width:100%;margin:var(--ck-spacing-standard) auto;border:1px solid #ccc;border-radius:var(--ck-border-radius)}"},function(e,t,i){var n=i(1);var o=i(95);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-editor__editable .image{position:relative}.ck.ck-editor__editable .image .ck-progress-bar{position:absolute;top:0;left:0}.ck.ck-editor__editable .image.ck-appear{animation:fadeIn .7s}.ck.ck-editor__editable .image .ck-progress-bar{height:2px;width:0;background:var(--ck-color-upload-bar-background);transition:width .1s}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}"},function(e,t,i){var n=i(1);var o=i(97);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-image-upload-complete-icon{display:block;position:absolute;top:10px;right:10px;border-radius:50%}.ck-image-upload-complete-icon:after{content:"";position:absolute}:root{--ck-color-image-upload-icon:#fff;--ck-color-image-upload-icon-background:#008a00;--ck-image-upload-icon-size:20px;--ck-image-upload-icon-width:2px}.ck-image-upload-complete-icon{width:var(--ck-image-upload-icon-size);height:var(--ck-image-upload-icon-size);opacity:0;background:var(--ck-color-image-upload-icon-background);animation-name:ck-upload-complete-icon-show,ck-upload-complete-icon-hide;animation-fill-mode:forwards,forwards;animation-duration:.5s,.5s;font-size:var(--ck-image-upload-icon-size);animation-delay:0ms,3s}.ck-image-upload-complete-icon:after{left:25%;top:50%;opacity:0;height:0;width:0;transform:scaleX(-1) rotate(135deg);transform-origin:left top;border-top:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);border-right:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);animation-name:ck-upload-complete-icon-check;animation-duration:.5s;animation-delay:.5s;animation-fill-mode:forwards;box-sizing:border-box}@keyframes ck-upload-complete-icon-show{0%{opacity:0}to{opacity:1}}@keyframes ck-upload-complete-icon-hide{0%{opacity:1}to{opacity:0}}@keyframes ck-upload-complete-icon-check{0%{opacity:1;width:0;height:0}33%{width:.3em;height:0}to{opacity:1;width:.3em;height:.45em}}'},function(e,t,i){var n=i(1);var o=i(99);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck .ck-upload-placeholder-loader{position:absolute;display:flex;align-items:center;justify-content:center;top:0;left:0}.ck .ck-upload-placeholder-loader:before{content:"";position:relative}:root{--ck-color-upload-placeholder-loader:#b3b3b3;--ck-upload-placeholder-loader-size:32px}.ck .ck-image-upload-placeholder{width:100%;margin:0}.ck .ck-upload-placeholder-loader{width:100%;height:100%}.ck .ck-upload-placeholder-loader:before{width:var(--ck-upload-placeholder-loader-size);height:var(--ck-upload-placeholder-loader-size);border-radius:50%;border-top:3px solid var(--ck-color-upload-placeholder-loader);border-right:2px solid transparent;animation:ck-upload-placeholder-loader 1s linear infinite}@keyframes ck-upload-placeholder-loader{to{transform:rotate(1turn)}}'},function(e,t,i){var n=i(1);var o=i(101);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-link_selected{background:var(--ck-color-link-selected-background)}.ck .ck-fake-link-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-link-selection_collapsed{height:100%;border-right:1px solid var(--ck-color-base-text);margin-right:-1px;outline:1px solid hsla(0,0%,100%,.5)}"},function(e,t,i){var n=i(1);var o=i(103);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-link-form{display:flex}.ck.ck-link-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-link-form{flex-wrap:wrap}.ck.ck-link-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-link-form .ck-button{flex-basis:50%}}.ck.ck-link-form_layout-vertical{display:block}.ck.ck-link-form{padding:var(--ck-spacing-standard)}.ck.ck-link-form:focus{outline:none}[dir=ltr] .ck.ck-link-form>:not(:first-child),[dir=rtl] .ck.ck-link-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-link-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-link-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}.ck.ck-link-form_layout-vertical{padding:0;min-width:var(--ck-input-text-width)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) var(--ck-spacing-small)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-link-form_layout-vertical .ck-button{padding:var(--ck-spacing-standard);margin:0;border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border);width:50%}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-link-form_layout-vertical .ck.ck-list{margin-left:0}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton{border:0;width:100%}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton:hover{background:none}"},function(e,t,i){var n=i(1);var o=i(105);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-link-actions{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-link-actions .ck-link-actions__preview{display:inline-block}.ck.ck-link-actions .ck-link-actions__preview .ck-button__label{overflow:hidden}@media screen and (max-width:600px){.ck.ck-link-actions{flex-wrap:wrap}.ck.ck-link-actions .ck-link-actions__preview{flex-basis:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){flex-basis:50%}}.ck.ck-link-actions{padding:var(--ck-spacing-standard)}.ck.ck-link-actions .ck-button.ck-link-actions__preview{padding-left:0;padding-right:0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{padding:0 var(--ck-spacing-medium);color:var(--ck-color-link-default);text-overflow:ellipsis;cursor:pointer;max-width:var(--ck-input-text-width);min-width:3em;text-align:center}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label:hover{text-decoration:underline}.ck.ck-link-actions .ck-button.ck-link-actions__preview,.ck.ck-link-actions .ck-button.ck-link-actions__preview:active,.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus,.ck.ck-link-actions .ck-button.ck-link-actions__preview:hover{background:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:active{box-shadow:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus .ck-button__label{text-decoration:underline}.ck.ck-link-actions:focus{outline:none}[dir=ltr] .ck.ck-link-actions .ck-button:not(:first-child),[dir=rtl] .ck.ck-link-actions .ck-button:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-actions{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-link-actions .ck-button.ck-link-actions__preview{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{min-width:0;max-width:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(e,t,i){var n=i(1);var o=i(107);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-list-styles-dropdown>.ck-dropdown__panel>.ck-toolbar>.ck-toolbar__items{display:grid}:root{--ck-list-style-button-size:44px}.ck.ck-list-styles-dropdown>.ck-dropdown__panel>.ck-toolbar{background:none;padding:0}.ck.ck-list-styles-dropdown>.ck-dropdown__panel>.ck-toolbar>.ck-toolbar__items{grid-template-columns:repeat(3,auto);row-gap:var(--ck-spacing-medium);column-gap:var(--ck-spacing-medium);padding:var(--ck-spacing-medium)}.ck.ck-list-styles-dropdown>.ck-dropdown__panel>.ck-toolbar>.ck-toolbar__items .ck-button{width:var(--ck-list-style-button-size);height:var(--ck-list-style-button-size);padding:0;margin:0;box-sizing:content-box}.ck.ck-list-styles-dropdown>.ck-dropdown__panel>.ck-toolbar>.ck-toolbar__items .ck-button .ck-icon{width:var(--ck-list-style-button-size);height:var(--ck-list-style-button-size)}"},function(e,t,i){var n=i(1);var o=i(109);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-media__wrapper .ck-media__placeholder{display:flex;flex-direction:column;align-items:center}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-tooltip{display:block}@media (hover:none){.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-tooltip{display:none}}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url{max-width:100%;position:relative}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url:hover .ck-tooltip{visibility:visible;opacity:1}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-media__placeholder__url__text{overflow:hidden;display:block}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="google.com/maps"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck-media__placeholder__icon *{display:none}.ck-editor__editable:not(.ck-read-only) .ck-media__wrapper>:not(.ck-media__placeholder),.ck-editor__editable:not(.ck-read-only) .ck-widget:not(.ck-widget_selected) .ck-media__placeholder{pointer-events:none}:root{--ck-media-embed-placeholder-icon-size:3em;--ck-color-media-embed-placeholder-url-text:#757575;--ck-color-media-embed-placeholder-url-text-hover:var(--ck-color-base-text)}.ck-media__wrapper{margin:0 auto}.ck-media__wrapper .ck-media__placeholder{padding:calc(3*var(--ck-spacing-standard));background:var(--ck-color-base-foreground)}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon{min-width:var(--ck-media-embed-placeholder-icon-size);height:var(--ck-media-embed-placeholder-icon-size);margin-bottom:var(--ck-spacing-large);background-position:50%;background-size:cover}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon .ck-icon{width:100%;height:100%}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text{color:var(--ck-color-media-embed-placeholder-url-text);white-space:nowrap;text-align:center;font-style:italic;text-overflow:ellipsis}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:var(--ck-color-media-embed-placeholder-url-text-hover);cursor:pointer;text-decoration:underline}.ck-media__wrapper[data-oembed-url*="open.spotify.com"]{max-width:300px;max-height:380px}.ck-media__wrapper[data-oembed-url*="google.com/maps"] .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAuMzc4IiBoZWlnaHQ9IjI1NC4xNjciIHZpZXdCb3g9IjAgMCA2Ni4yNDYgNjcuMjQ4Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcyLjUzMSAtMjE4LjQ1NSkgc2NhbGUoLjk4MDEyKSI+PHJlY3Qgcnk9IjUuMjM4IiByeD0iNS4yMzgiIHk9IjIzMS4zOTkiIHg9IjE3Ni4wMzEiIGhlaWdodD0iNjAuMDk5IiB3aWR0aD0iNjAuMDk5IiBmaWxsPSIjMzRhNjY4IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0yMDYuNDc3IDI2MC45bC0yOC45ODcgMjguOTg3YTUuMjE4IDUuMjE4IDAgMDAzLjc4IDEuNjFoNDkuNjIxYzEuNjk0IDAgMy4xOS0uNzk4IDQuMTQ2LTIuMDM3eiIgZmlsbD0iIzVjODhjNSIvPjxwYXRoIGQ9Ik0yMjYuNzQyIDIyMi45ODhjLTkuMjY2IDAtMTYuNzc3IDcuMTctMTYuNzc3IDE2LjAxNC4wMDcgMi43NjIuNjYzIDUuNDc0IDIuMDkzIDcuODc1LjQzLjcwMy44MyAxLjQwOCAxLjE5IDIuMTA3LjMzMy41MDIuNjUgMS4wMDUuOTUgMS41MDguMzQzLjQ3Ny42NzMuOTU3Ljk4OCAxLjQ0IDEuMzEgMS43NjkgMi41IDMuNTAyIDMuNjM3IDUuMTY4Ljc5MyAxLjI3NSAxLjY4MyAyLjY0IDIuNDY2IDMuOTkgMi4zNjMgNC4wOTQgNC4wMDcgOC4wOTIgNC42IDEzLjkxNHYuMDEyYy4xODIuNDEyLjUxNi42NjYuODc5LjY2Ny40MDMtLjAwMS43NjgtLjMxNC45My0uNzk5LjYwMy01Ljc1NiAyLjIzOC05LjcyOSA0LjU4NS0xMy43OTQuNzgyLTEuMzUgMS42NzMtMi43MTUgMi40NjUtMy45OSAxLjEzNy0xLjY2NiAyLjMyOC0zLjQgMy42MzgtNS4xNjkuMzE1LS40ODIuNjQ1LS45NjIuOTg4LTEuNDM5LjMtLjUwMy42MTctMS4wMDYuOTUtMS41MDguMzU5LS43Ljc2LTEuNDA0IDEuMTktMi4xMDcgMS40MjYtMi40MDIgMi01LjExNCAyLjAwNC03Ljg3NSAwLTguODQ0LTcuNTExLTE2LjAxNC0xNi43NzYtMTYuMDE0eiIgZmlsbD0iI2RkNGIzZSIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48ZWxsaXBzZSByeT0iNS41NjQiIHJ4PSI1LjgyOCIgY3k9IjIzOS4wMDIiIGN4PSIyMjYuNzQyIiBmaWxsPSIjODAyZDI3IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0xOTAuMzAxIDIzNy4yODNjLTQuNjcgMC04LjQ1NyAzLjg1My04LjQ1NyA4LjYwNnMzLjc4NiA4LjYwNyA4LjQ1NyA4LjYwN2MzLjA0MyAwIDQuODA2LS45NTggNi4zMzctMi41MTYgMS41My0xLjU1NyAyLjA4Ny0zLjkxMyAyLjA4Ny02LjI5IDAtLjM2Mi0uMDIzLS43MjItLjA2NC0xLjA3OWgtOC4yNTd2My4wNDNoNC44NWMtLjE5Ny43NTktLjUzMSAxLjQ1LTEuMDU4IDEuOTg2LS45NDIuOTU4LTIuMDI4IDEuNTQ4LTMuOTAxIDEuNTQ4LTIuODc2IDAtNS4yMDgtMi4zNzItNS4yMDgtNS4yOTkgMC0yLjkyNiAyLjMzMi01LjI5OSA1LjIwOC01LjI5OSAxLjM5OSAwIDIuNjE4LjQwNyAzLjU4NCAxLjI5M2wyLjM4MS0yLjM4YzAtLjAwMi0uMDAzLS4wMDQtLjAwNC0uMDA1LTEuNTg4LTEuNTI0LTMuNjItMi4yMTUtNS45NTUtMi4yMTV6bTQuNDMgNS42NmwuMDAzLjAwNnYtLjAwM3oiIGZpbGw9IiNmZmYiIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTIxNS4xODQgMjUxLjkyOWwtNy45OCA3Ljk3OSAyOC40NzcgMjguNDc1YTUuMjMzIDUuMjMzIDAgMDAuNDQ5LTIuMTIzdi0zMS4xNjVjLS40NjkuNjc1LS45MzQgMS4zNDktMS4zODIgMi4wMDUtLjc5MiAxLjI3NS0xLjY4MiAyLjY0LTIuNDY1IDMuOTktMi4zNDcgNC4wNjUtMy45ODIgOC4wMzgtNC41ODUgMTMuNzk0LS4xNjIuNDg1LS41MjcuNzk4LS45My43OTktLjM2My0uMDAxLS42OTctLjI1NS0uODc5LS42Njd2LS4wMTJjLS41OTMtNS44MjItMi4yMzctOS44Mi00LjYtMTMuOTE0LS43ODMtMS4zNS0xLjY3My0yLjcxNS0yLjQ2Ni0zLjk5LTEuMTM3LTEuNjY2LTIuMzI3LTMuNC0zLjYzNy01LjE2OWwtLjAwMi0uMDAzeiIgZmlsbD0iI2MzYzNjMyIvPjxwYXRoIGQ9Ik0yMTIuOTgzIDI0OC40OTVsLTM2Ljk1MiAzNi45NTN2LjgxMmE1LjIyNyA1LjIyNyAwIDAwNS4yMzggNS4yMzhoMS4wMTVsMzUuNjY2LTM1LjY2NmExMzYuMjc1IDEzNi4yNzUgMCAwMC0yLjc2NC0zLjkgMzcuNTc1IDM3LjU3NSAwIDAwLS45ODktMS40NCAzNS4xMjcgMzUuMTI3IDAgMDAtLjk1LTEuNTA4Yy0uMDgzLS4xNjItLjE3Ni0uMzI2LS4yNjQtLjQ4OXoiIGZpbGw9IiNmZGRjNGYiIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTIxMS45OTggMjYxLjA4M2wtNi4xNTIgNi4xNTEgMjQuMjY0IDI0LjI2NGguNzgxYTUuMjI3IDUuMjI3IDAgMDA1LjIzOS01LjIzOHYtMS4wNDV6IiBmaWxsPSIjZmZmIiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjwvZz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder{background:#4268b3}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05NjcuNDg0IDBINTYuNTE3QzI1LjMwNCAwIDAgMjUuMzA0IDAgNTYuNTE3djkxMC45NjZDMCA5OTguNjk0IDI1LjI5NyAxMDI0IDU2LjUyMiAxMDI0SDU0N1Y2MjhINDE0VjQ3M2gxMzNWMzU5LjAyOWMwLTEzMi4yNjIgODAuNzczLTIwNC4yODIgMTk4Ljc1Ni0yMDQuMjgyIDU2LjUxMyAwIDEwNS4wODYgNC4yMDggMTE5LjI0NCA2LjA4OVYyOTlsLTgxLjYxNi4wMzdjLTYzLjk5MyAwLTc2LjM4NCAzMC40OTItNzYuMzg0IDc1LjIzNlY0NzNoMTUzLjQ4N2wtMTkuOTg2IDE1NUg3MDd2Mzk2aDI2MC40ODRjMzEuMjEzIDAgNTYuNTE2LTI1LjMwMyA1Ni41MTYtNTYuNTE2VjU2LjUxNUMxMDI0IDI1LjMwMyA5OTguNjk3IDAgOTY3LjQ4NCAwIiBmaWxsPSIjRkZGRkZFIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__url__text{color:#cdf}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder{background:linear-gradient(-135deg,#1400c7,#b800b1,#f50000)}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTA0IiBoZWlnaHQ9IjUwNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik0wIC4xNTloNTAzLjg0MVY1MDMuOTRIMHoiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjYSIvPjwvbWFzaz48cGF0aCBkPSJNMjUxLjkyMS4xNTljLTY4LjQxOCAwLTc2Ljk5Ny4yOS0xMDMuODY3IDEuNTE2LTI2LjgxNCAxLjIyMy00NS4xMjcgNS40ODItNjEuMTUxIDExLjcxLTE2LjU2NiA2LjQzNy0zMC42MTUgMTUuMDUxLTQ0LjYyMSAyOS4wNTYtMTQuMDA1IDE0LjAwNi0yMi42MTkgMjguMDU1LTI5LjA1NiA0NC42MjEtNi4yMjggMTYuMDI0LTEwLjQ4NyAzNC4zMzctMTEuNzEgNjEuMTUxQy4yOSAxNzUuMDgzIDAgMTgzLjY2MiAwIDI1Mi4wOGMwIDY4LjQxNy4yOSA3Ni45OTYgMS41MTYgMTAzLjg2NiAxLjIyMyAyNi44MTQgNS40ODIgNDUuMTI3IDExLjcxIDYxLjE1MSA2LjQzNyAxNi41NjYgMTUuMDUxIDMwLjYxNSAyOS4wNTYgNDQuNjIxIDE0LjAwNiAxNC4wMDUgMjguMDU1IDIyLjYxOSA0NC42MjEgMjkuMDU3IDE2LjAyNCA2LjIyNyAzNC4zMzcgMTAuNDg2IDYxLjE1MSAxMS43MDkgMjYuODcgMS4yMjYgMzUuNDQ5IDEuNTE2IDEwMy44NjcgMS41MTYgNjguNDE3IDAgNzYuOTk2LS4yOSAxMDMuODY2LTEuNTE2IDI2LjgxNC0xLjIyMyA0NS4xMjctNS40ODIgNjEuMTUxLTExLjcwOSAxNi41NjYtNi40MzggMzAuNjE1LTE1LjA1MiA0NC42MjEtMjkuMDU3IDE0LjAwNS0xNC4wMDYgMjIuNjE5LTI4LjA1NSAyOS4wNTctNDQuNjIxIDYuMjI3LTE2LjAyNCAxMC40ODYtMzQuMzM3IDExLjcwOS02MS4xNTEgMS4yMjYtMjYuODcgMS41MTYtMzUuNDQ5IDEuNTE2LTEwMy44NjYgMC02OC40MTgtLjI5LTc2Ljk5Ny0xLjUxNi0xMDMuODY3LTEuMjIzLTI2LjgxNC01LjQ4Mi00NS4xMjctMTEuNzA5LTYxLjE1MS02LjQzOC0xNi41NjYtMTUuMDUyLTMwLjYxNS0yOS4wNTctNDQuNjIxLTE0LjAwNi0xNC4wMDUtMjguMDU1LTIyLjYxOS00NC42MjEtMjkuMDU2LTE2LjAyNC02LjIyOC0zNC4zMzctMTAuNDg3LTYxLjE1MS0xMS43MUMzMjguOTE3LjQ0OSAzMjAuMzM4LjE1OSAyNTEuOTIxLjE1OXptMCA0NS4zOTFjNjcuMjY1IDAgNzUuMjMzLjI1NyAxMDEuNzk3IDEuNDY5IDI0LjU2MiAxLjEyIDM3LjkwMSA1LjIyNCA0Ni43NzggOC42NzQgMTEuNzU5IDQuNTcgMjAuMTUxIDEwLjAyOSAyOC45NjYgMTguODQ1IDguODE2IDguODE1IDE0LjI3NSAxNy4yMDcgMTguODQ1IDI4Ljk2NiAzLjQ1IDguODc3IDcuNTU0IDIyLjIxNiA4LjY3NCA0Ni43NzggMS4yMTIgMjYuNTY0IDEuNDY5IDM0LjUzMiAxLjQ2OSAxMDEuNzk4IDAgNjcuMjY1LS4yNTcgNzUuMjMzLTEuNDY5IDEwMS43OTctMS4xMiAyNC41NjItNS4yMjQgMzcuOTAxLTguNjc0IDQ2Ljc3OC00LjU3IDExLjc1OS0xMC4wMjkgMjAuMTUxLTE4Ljg0NSAyOC45NjYtOC44MTUgOC44MTYtMTcuMjA3IDE0LjI3NS0yOC45NjYgMTguODQ1LTguODc3IDMuNDUtMjIuMjE2IDcuNTU0LTQ2Ljc3OCA4LjY3NC0yNi41NiAxLjIxMi0zNC41MjcgMS40NjktMTAxLjc5NyAxLjQ2OS02Ny4yNzEgMC03NS4yMzctLjI1Ny0xMDEuNzk4LTEuNDY5LTI0LjU2Mi0xLjEyLTM3LjkwMS01LjIyNC00Ni43NzgtOC42NzQtMTEuNzU5LTQuNTctMjAuMTUxLTEwLjAyOS0yOC45NjYtMTguODQ1LTguODE1LTguODE1LTE0LjI3NS0xNy4yMDctMTguODQ1LTI4Ljk2Ni0zLjQ1LTguODc3LTcuNTU0LTIyLjIxNi04LjY3NC00Ni43NzgtMS4yMTItMjYuNTY0LTEuNDY5LTM0LjUzMi0xLjQ2OS0xMDEuNzk3IDAtNjcuMjY2LjI1Ny03NS4yMzQgMS40NjktMTAxLjc5OCAxLjEyLTI0LjU2MiA1LjIyNC0zNy45MDEgOC42NzQtNDYuNzc4IDQuNTctMTEuNzU5IDEwLjAyOS0yMC4xNTEgMTguODQ1LTI4Ljk2NiA4LjgxNS04LjgxNiAxNy4yMDctMTQuMjc1IDI4Ljk2Ni0xOC44NDUgOC44NzctMy40NSAyMi4yMTYtNy41NTQgNDYuNzc4LTguNjc0IDI2LjU2NC0xLjIxMiAzNC41MzItMS40NjkgMTAxLjc5OC0xLjQ2OXoiIGZpbGw9IiNGRkYiIG1hc2s9InVybCgjYikiLz48cGF0aCBkPSJNMjUxLjkyMSAzMzYuMDUzYy00Ni4zNzggMC04My45NzQtMzcuNTk2LTgzLjk3NC04My45NzMgMC00Ni4zNzggMzcuNTk2LTgzLjk3NCA4My45NzQtODMuOTc0IDQ2LjM3NyAwIDgzLjk3MyAzNy41OTYgODMuOTczIDgzLjk3NCAwIDQ2LjM3Ny0zNy41OTYgODMuOTczLTgzLjk3MyA4My45NzN6bTAtMjEzLjMzOGMtNzEuNDQ3IDAtMTI5LjM2NSA1Ny45MTgtMTI5LjM2NSAxMjkuMzY1IDAgNzEuNDQ2IDU3LjkxOCAxMjkuMzY0IDEyOS4zNjUgMTI5LjM2NCA3MS40NDYgMCAxMjkuMzY0LTU3LjkxOCAxMjkuMzY0LTEyOS4zNjQgMC03MS40NDctNTcuOTE4LTEyOS4zNjUtMTI5LjM2NC0xMjkuMzY1ek00MTYuNjI3IDExNy42MDRjMCAxNi42OTYtMTMuNTM1IDMwLjIzLTMwLjIzMSAzMC4yMy0xNi42OTUgMC0zMC4yMy0xMy41MzQtMzAuMjMtMzAuMjMgMC0xNi42OTYgMTMuNTM1LTMwLjIzMSAzMC4yMy0zMC4yMzEgMTYuNjk2IDAgMzAuMjMxIDEzLjUzNSAzMC4yMzEgMzAuMjMxIiBmaWxsPSIjRkZGIi8+PC9nPjwvc3ZnPg==)}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__url__text{color:#ffe0fe}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder{background:linear-gradient(90deg,#71c6f4,#0d70a5)}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDAwIj48cGF0aCBkPSJNNDAwIDIwMGMwIDExMC41LTg5LjUgMjAwLTIwMCAyMDBTMCAzMTAuNSAwIDIwMCA4OS41IDAgMjAwIDBzMjAwIDg5LjUgMjAwIDIwMHpNMTYzLjQgMzA1LjVjODguNyAwIDEzNy4yLTczLjUgMTM3LjItMTM3LjIgMC0yLjEgMC00LjItLjEtNi4yIDkuNC02LjggMTcuNi0xNS4zIDI0LjEtMjUtOC42IDMuOC0xNy45IDYuNC0yNy43IDcuNiAxMC02IDE3LjYtMTUuNCAyMS4yLTI2LjctOS4zIDUuNS0xOS42IDkuNS0zMC42IDExLjctOC44LTkuNC0yMS4zLTE1LjItMzUuMi0xNS4yLTI2LjYgMC00OC4yIDIxLjYtNDguMiA0OC4yIDAgMy44LjQgNy41IDEuMyAxMS00MC4xLTItNzUuNi0yMS4yLTk5LjQtNTAuNC00LjEgNy4xLTYuNSAxNS40LTYuNSAyNC4yIDAgMTYuNyA4LjUgMzEuNSAyMS41IDQwLjEtNy45LS4yLTE1LjMtMi40LTIxLjgtNnYuNmMwIDIzLjQgMTYuNiA0Mi44IDM4LjcgNDcuMy00IDEuMS04LjMgMS43LTEyLjcgMS43LTMuMSAwLTYuMS0uMy05LjEtLjkgNi4xIDE5LjIgMjMuOSAzMy4xIDQ1IDMzLjUtMTYuNSAxMi45LTM3LjMgMjAuNi01OS45IDIwLjYtMy45IDAtNy43LS4yLTExLjUtLjcgMjEuMSAxMy44IDQ2LjUgMjEuOCA3My43IDIxLjgiIGZpbGw9IiNmZmYiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__url__text{color:#b8e6ff}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}'},function(e,t,i){var n=i(1);var o=i(111);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-media-form{display:flex;align-items:flex-start;flex-direction:row;flex-wrap:nowrap}.ck.ck-media-form .ck-labeled-field-view{display:inline-block}.ck.ck-media-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-media-form{flex-wrap:wrap}.ck.ck-media-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-media-form .ck-button{flex-basis:50%}}.ck.ck-media-form{padding:var(--ck-spacing-standard)}.ck.ck-media-form:focus{outline:none}[dir=ltr] .ck.ck-media-form>:not(:first-child),[dir=rtl] .ck.ck-media-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-media-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-media-form .ck-labeled-field-view{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-media-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-media-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-media-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-media-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-media-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-media-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-media-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(e,t,i){var n=i(1);var o=i(113);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .media{clear:both;margin:1em 0;display:block;min-width:15em}"},function(e,t,i){var n=i(1);var o=i(115);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck-content .page-break{position:relative;clear:both;padding:5px 0;display:flex;align-items:center;justify-content:center}.ck-content .page-break:after{content:"";position:absolute;border-bottom:2px dashed #c4c4c4;width:100%}.ck-content .page-break__label{position:relative;z-index:1;padding:.3em .6em;display:block;text-transform:uppercase;border:1px solid #c4c4c4;border-radius:2px;font-family:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;font-size:.75em;font-weight:700;color:#333;background:#fff;box-shadow:2px 2px 1px rgba(0,0,0,.15);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media print{.ck-content .page-break{padding:0}.ck-content .page-break:after{display:none}}'},function(e,t,i){var n=i(1);var o=i(117);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-form__header{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:space-between}:root{--ck-form-header-height:38px}.ck.ck-form__header{padding:var(--ck-spacing-small) var(--ck-spacing-large);height:var(--ck-form-header-height);line-height:var(--ck-form-header-height);border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-form__header .ck-form__header__label{font-weight:700}"},function(e,t,i){var n=i(1);var o=i(119);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-character-grid .ck-character-grid__tiles{display:grid;grid-template-columns:repeat(10,1fr)}:root{--ck-character-grid-tile-size:24px}.ck.ck-character-grid{overflow-y:auto;overflow-x:hidden;width:350px;max-height:200px}.ck.ck-character-grid .ck-character-grid__tiles{margin:var(--ck-spacing-standard) var(--ck-spacing-large);grid-gap:var(--ck-spacing-standard)}.ck.ck-character-grid .ck-character-grid__tile{width:var(--ck-character-grid-tile-size);height:var(--ck-character-grid-tile-size);min-width:var(--ck-character-grid-tile-size);min-height:var(--ck-character-grid-tile-size);font-size:1.2em;padding:0;transition:box-shadow .2s ease;border:0}.ck.ck-character-grid .ck-character-grid__tile:focus:not(.ck-disabled),.ck.ck-character-grid .ck-character-grid__tile:hover:not(.ck-disabled){border:0;box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-character-grid .ck-character-grid__tile .ck-button__label{line-height:var(--ck-character-grid-tile-size);width:100%;text-align:center}"},function(e,t,i){var n=i(1);var o=i(121);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-character-info{display:flex;justify-content:space-between;padding:var(--ck-spacing-small) var(--ck-spacing-large);border-top:1px solid var(--ck-color-base-border)}.ck.ck-character-info>*{text-transform:uppercase;font-size:var(--ck-font-size-small)}.ck.ck-character-info .ck-character-info__name{max-width:280px;text-overflow:ellipsis;overflow:hidden}.ck.ck-character-info .ck-character-info__code{opacity:.6}"},function(e,t,i){var n=i(1);var o=i(123);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-special-characters-navigation>.ck-label{max-width:160px;text-overflow:ellipsis;overflow:hidden}.ck.ck-special-characters-navigation>.ck-dropdown .ck-dropdown__panel{max-height:250px;overflow-y:auto;overflow-x:hidden}"},function(e,t,i){var n=i(1);var o=i(125);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-color-restricted-editing-exception-background:rgba(255,169,77,0.2);--ck-color-restricted-editing-exception-hover-background:rgba(255,169,77,0.35);--ck-color-restricted-editing-exception-brackets:rgba(204,105,0,0.4);--ck-color-restricted-editing-selected-exception-background:rgba(255,169,77,0.5);--ck-color-restricted-editing-selected-exception-brackets:rgba(204,105,0,0.6)}.ck-editor__editable .restricted-editing-exception{transition:background .2s ease-in-out;background-color:var(--ck-color-restricted-editing-exception-background);border:1px solid;border-image:linear-gradient(90deg,var(--ck-color-restricted-editing-exception-brackets) 0,var(--ck-color-restricted-editing-exception-brackets) 5px,transparent 6px,transparent calc(100% - 6px),var(--ck-color-restricted-editing-exception-brackets) calc(100% - 5px),var(--ck-color-restricted-editing-exception-brackets)) 1}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_selected{background-color:var(--ck-color-restricted-editing-selected-exception-background);border-image:linear-gradient(90deg,var(--ck-color-restricted-editing-selected-exception-brackets) 0,var(--ck-color-restricted-editing-selected-exception-brackets) 5px,var(--ck-color-restricted-editing-selected-exception-brackets) calc(100% - 5px),var(--ck-color-restricted-editing-selected-exception-brackets)) 1}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_collapsed{padding-left:1ch}.ck-restricted-editing_mode_restricted,.ck-restricted-editing_mode_restricted *{cursor:default}.ck-restricted-editing_mode_restricted .restricted-editing-exception,.ck-restricted-editing_mode_restricted .restricted-editing-exception *{cursor:text}.ck-restricted-editing_mode_restricted .restricted-editing-exception:hover{background:var(--ck-color-restricted-editing-exception-hover-background)}"},function(e,t,i){var n=i(1);var o=i(127);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-color-table-focused-cell-background:rgba(158,207,250,0.3)}.ck-widget.table td.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table td.ck-editor__nested-editable:focus,.ck-widget.table th.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table th.ck-editor__nested-editable:focus{background:var(--ck-color-table-focused-cell-background);border-style:none;outline:1px solid var(--ck-color-focus-border);outline-offset:-1px}"},function(e,t,i){var n=i(1);var o=i(129);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-insert-table-dropdown__grid{display:flex;flex-direction:row;flex-wrap:wrap}:root{--ck-insert-table-dropdown-padding:10px;--ck-insert-table-dropdown-box-height:11px;--ck-insert-table-dropdown-box-width:12px;--ck-insert-table-dropdown-box-margin:1px}.ck .ck-insert-table-dropdown__grid{width:calc(var(--ck-insert-table-dropdown-box-width)*10 + var(--ck-insert-table-dropdown-box-margin)*20 + var(--ck-insert-table-dropdown-padding)*2);padding:var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0}.ck .ck-insert-table-dropdown__label{text-align:center}.ck .ck-insert-table-dropdown-grid-box{width:var(--ck-insert-table-dropdown-box-width);height:var(--ck-insert-table-dropdown-box-height);margin:var(--ck-insert-table-dropdown-box-margin);border:1px solid var(--ck-color-base-border);border-radius:1px}.ck .ck-insert-table-dropdown-grid-box.ck-on{border-color:var(--ck-color-focus-border);background:var(--ck-color-focus-outer-shadow)}"},function(e,t,i){var n=i(1);var o=i(131);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=':root{--ck-table-selected-cell-background:rgba(158,207,250,0.3)}.ck.ck-editor__editable .table table td.ck-editor__editable_selected,.ck.ck-editor__editable .table table th.ck-editor__editable_selected{position:relative;caret-color:transparent;outline:unset;box-shadow:unset}.ck.ck-editor__editable .table table td.ck-editor__editable_selected:after,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:after{content:"";pointer-events:none;background-color:var(--ck-table-selected-cell-background);position:absolute;top:0;left:0;right:0;bottom:0}.ck.ck-editor__editable .table table td.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table td.ck-editor__editable_selected:focus,.ck.ck-editor__editable .table table th.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:focus{background-color:transparent}.ck.ck-editor__editable .table table td.ck-editor__editable_selected .ck-widget_selected,.ck.ck-editor__editable .table table th.ck-editor__editable_selected .ck-widget_selected{outline:unset}'},function(e,t,i){var n=i(1);var o=i(133);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .table{margin:1em auto;display:table}.ck-content .table table{border-collapse:collapse;border-spacing:0;width:100%;height:100%;border:1px double #b3b3b3}.ck-content .table table td,.ck-content .table table th{min-width:2em;padding:.4em;border:1px solid #bfbfbf}.ck-content .table table th{font-weight:700;background:hsla(0,0%,0%,5%)}.ck-content[dir=rtl] .table th{text-align:right}.ck-content[dir=ltr] .table th{text-align:left}"},function(e,t,i){var n=i(1);var o=i(135);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-input-color{width:100%;display:flex}.ck.ck-input-color>input.ck.ck-input-text{min-width:auto;flex-grow:1}.ck.ck-input-color>input.ck.ck-input-text:active,.ck.ck-input-color>input.ck.ck-input-text:focus{z-index:var(--ck-z-default)}.ck.ck-input-color>div.ck.ck-dropdown{min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown>.ck-input-color__button .ck-dropdown__arrow{display:none}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview{position:relative;overflow:hidden}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{position:absolute;display:block}[dir=ltr] .ck.ck-input-color>.ck.ck-input-text{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .ck.ck-input-color>.ck.ck-input-text{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{padding:0}[dir=ltr] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}[dir=rtl] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-1px}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button.ck-disabled{background:var(--ck-color-input-disabled-background)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview{border-radius:0}.ck-rounded-corners .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview,.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview{width:20px;height:20px;border:1px solid var(--ck-color-input-border)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-input-color__button>.ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{top:-30%;left:50%;height:150%;width:8%;background:red;border-radius:2px;transform:rotate(45deg);transform-origin:50%}.ck.ck-input-color .ck.ck-input-color__remove-color{width:100%;border-bottom:1px solid var(--ck-color-input-border);padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);border-bottom-left-radius:0;border-bottom-right-radius:0}[dir=ltr] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-right-radius:0}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:0;margin-left:var(--ck-spacing-standard)}"},function(e,t,i){var n=i(1);var o=i(137);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-form__row{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.ck.ck-form__row>:not(.ck-label){flex-grow:1}.ck.ck-form__row.ck-table-form__action-row .ck-button-cancel,.ck.ck-form__row.ck-table-form__action-row .ck-button-save{justify-content:center}.ck.ck-form__row{padding:var(--ck-spacing-standard) var(--ck-spacing-large) 0}[dir=ltr] .ck.ck-form__row>:not(.ck-label)+*{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-form__row>:not(.ck-label)+*{margin-right:var(--ck-spacing-large)}.ck.ck-form__row>.ck-label{width:100%;min-width:100%}.ck.ck-form__row.ck-table-form__action-row{margin-top:var(--ck-spacing-large)}.ck.ck-form__row.ck-table-form__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}"},function(e,t){e.exports=".ck.ck-form{padding:0 0 var(--ck-spacing-large)}.ck.ck-form:focus{outline:none}.ck.ck-form .ck.ck-input-text{min-width:100%;width:0}.ck.ck-form .ck.ck-dropdown{min-width:100%}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button .ck-button__label{width:100%}"},function(e,t){e.exports='.ck.ck-table-form .ck-form__row.ck-table-form__border-row{flex-wrap:wrap}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view{display:flex;flex-direction:column-reverse}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view .ck.ck-dropdown,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{flex-grow:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{flex-wrap:wrap;align-items:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view{display:flex;flex-direction:column-reverse;align-items:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view .ck.ck-dropdown,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{flex-grow:0}.ck.ck-table-form .ck.ck-labeled-field-view{position:relative}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{position:absolute;left:50%;bottom:calc(-1*var(--ck-table-properties-error-arrow-size));transform:translate(-50%,100%);z-index:1}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{content:"";position:absolute;top:calc(-1*var(--ck-table-properties-error-arrow-size));left:50%;transform:translateX(-50%)}:root{--ck-table-properties-error-arrow-size:6px;--ck-table-properties-min-error-width:150px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style{width:80px;min-width:80px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{width:50px;min-width:50px}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{padding:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view>.ck-label{font-size:10px;text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width{margin:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{align-self:start;display:inline-block;height:var(--ck-ui-component-min-height);line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{border-radius:0}.ck-rounded-corners .ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status,.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{background:var(--ck-color-base-error);color:var(--ck-color-base-background);padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-width:var(--ck-table-properties-min-error-width);text-align:center}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-left:var(--ck-table-properties-error-arrow-size) solid transparent;border-bottom:var(--ck-table-properties-error-arrow-size) solid var(--ck-color-base-error);border-right:var(--ck-table-properties-error-arrow-size) solid transparent;border-top:0 solid transparent}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:ck-table-form-labeled-view-status-appear .15s ease both}.ck.ck-table-form .ck.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}@keyframes ck-table-form-labeled-view-status-appear{0%{opacity:0}to{opacity:1}}'},function(e,t,i){var n=i(1);var o=i(141);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row{flex-wrap:wrap}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{flex-grow:0}.ck.ck-table-cell-properties-form{width:320px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__padding-row{padding:0;width:35%}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{background:none}"},function(e,t,i){var n=i(1);var o=i(143);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{flex-wrap:wrap;flex-basis:0;align-content:baseline}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items{flex-wrap:nowrap}.ck.ck-table-properties-form{width:320px}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{padding:0}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar{background:none}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items>*{width:40px}"},function(e,t,i){var n=i(1);var o=i(145);o=o.__esModule?o.default:o;if(typeof o==="string"){o=[[e.i,o,""]]}var r={injectType:"singletonStyleTag",attributes:{"data-cke":true}};r.insert="head";r.singleton=true;var s=n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=':root{--ck-todo-list-checkmark-size:16px}.ck-content .todo-list{list-style:none}.ck-content .todo-list li{margin-bottom:5px}.ck-content .todo-list li .todo-list{margin-top:5px}.ck-content .todo-list .todo-list__label>input{-webkit-appearance:none;display:inline-block;position:relative;width:var(--ck-todo-list-checkmark-size);height:var(--ck-todo-list-checkmark-size);vertical-align:middle;border:0;left:-25px;margin-right:-15px;right:0;margin-left:0}.ck-content .todo-list .todo-list__label>input:before{display:block;position:absolute;box-sizing:border-box;content:"";width:100%;height:100%;border:1px solid #333;border-radius:2px;transition:box-shadow .25s ease-in-out,background .25s ease-in-out,border .25s ease-in-out}.ck-content .todo-list .todo-list__label>input:after{display:block;position:absolute;box-sizing:content-box;pointer-events:none;content:"";left:calc(var(--ck-todo-list-checkmark-size)/3);top:calc(var(--ck-todo-list-checkmark-size)/5.3);width:calc(var(--ck-todo-list-checkmark-size)/5.3);height:calc(var(--ck-todo-list-checkmark-size)/2.6);border-left:0 solid transparent;border-bottom:calc(var(--ck-todo-list-checkmark-size)/8) solid transparent;border-right:calc(var(--ck-todo-list-checkmark-size)/8) solid transparent;border-top:0 solid transparent;transform:rotate(45deg)}.ck-content .todo-list .todo-list__label>input[checked]:before{background:#26ab33;border-color:#26ab33}.ck-content .todo-list .todo-list__label>input[checked]:after{border-color:#fff}.ck-content .todo-list .todo-list__label .todo-list__label__description{vertical-align:middle}[dir=rtl] .todo-list .todo-list__label>input{left:0;margin-right:0;right:-25px;margin-left:-15px}.ck-editor__editable .todo-list .todo-list__label>input{cursor:pointer}.ck-editor__editable .todo-list .todo-list__label>input:hover:before{box-shadow:0 0 0 5px rgba(0,0,0,.1)}'},function(e,t,i){"use strict";i.r(t);var n=i(3);var o=n["a"].Symbol;var r=o;var s=Object.prototype;var a=s.hasOwnProperty;var c=s.toString;var l=r?r.toStringTag:undefined;function d(e){var t=a.call(e,l),i=e[l];try{e[l]=undefined;var n=true}catch(e){}var o=c.call(e);if(n){if(t){e[l]=i}else{delete e[l]}}return o}var u=d;var h=Object.prototype;var f=h.toString;function m(e){return f.call(e)}var g=m;var p="[object Null]",b="[object Undefined]";var w=r?r.toStringTag:undefined;function k(e){if(e==null){return e===undefined?b:p}return w&&w in Object(e)?u(e):g(e)}var _=k;function v(e,t){return function(i){return e(t(i))}}var y=v;var x=y(Object.getPrototypeOf,Object);var A=x;function C(e){return e!=null&&typeof e=="object"}var T=C;var S="[object Object]";var E=Function.prototype,P=Object.prototype;var M=E.toString;var I=P.hasOwnProperty;var L=M.call(Object);function N(e){if(!T(e)||_(e)!=S){return false}var t=A(e);if(t===null){return true}var i=I.call(t,"constructor")&&t.constructor;return typeof i=="function"&&i instanceof i&&M.call(i)==L}var z=N;function R(){this.__data__=[];this.size=0}var O=R;function V(e,t){return e===t||e!==e&&t!==t}var D=V;function B(e,t){var i=e.length;while(i--){if(D(e[i][0],t)){return i}}return-1}var j=B;var F=Array.prototype;var H=F.splice;function U(e){var t=this.__data__,i=j(t,e);if(i<0){return false}var n=t.length-1;if(i==n){t.pop()}else{H.call(t,i,1)}--this.size;return true}var W=U;function q(e){var t=this.__data__,i=j(t,e);return i<0?undefined:t[i][1]}var $=q;function G(e){return j(this.__data__,e)>-1}var K=G;function Y(e,t){var i=this.__data__,n=j(i,e);if(n<0){++this.size;i.push([e,t])}else{i[n][1]=t}return this}var Z=Y;function Q(e){var t=-1,i=e==null?0:e.length;this.clear();while(++t-1&&e%1==0&&e-1&&e%1==0&&e<=ti}var ni=ii;var oi="[object Arguments]",ri="[object Array]",si="[object Boolean]",ai="[object Date]",ci="[object Error]",li="[object Function]",di="[object Map]",ui="[object Number]",hi="[object Object]",fi="[object RegExp]",mi="[object Set]",gi="[object String]",pi="[object WeakMap]";var bi="[object ArrayBuffer]",wi="[object DataView]",ki="[object Float32Array]",_i="[object Float64Array]",vi="[object Int8Array]",yi="[object Int16Array]",xi="[object Int32Array]",Ai="[object Uint8Array]",Ci="[object Uint8ClampedArray]",Ti="[object Uint16Array]",Si="[object Uint32Array]";var Ei={};Ei[ki]=Ei[_i]=Ei[vi]=Ei[yi]=Ei[xi]=Ei[Ai]=Ei[Ci]=Ei[Ti]=Ei[Si]=true;Ei[oi]=Ei[ri]=Ei[bi]=Ei[si]=Ei[wi]=Ei[ai]=Ei[ci]=Ei[li]=Ei[di]=Ei[ui]=Ei[hi]=Ei[fi]=Ei[mi]=Ei[gi]=Ei[pi]=false;function Pi(e){return T(e)&&ni(e.length)&&!!Ei[_(e)]}var Mi=Pi;function Ii(e){return function(t){return e(t)}}var Li=Ii;var Ni=i(5);var zi=Ni["a"]&&Ni["a"].isTypedArray;var Ri=zi?Li(zi):Mi;var Oi=Ri;var Vi=Object.prototype;var Di=Vi.hasOwnProperty;function Bi(e,t){var i=Yt(e),n=!i&&Gt(e),o=!i&&!n&&Object(Zt["a"])(e),r=!i&&!n&&!o&&Oi(e),s=i||n||o||r,a=s?Bt(e.length,String):[],c=a.length;for(var l in e){if((t||Di.call(e,l))&&!(s&&(l=="length"||o&&(l=="offset"||l=="parent")||r&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||ei(l,c)))){a.push(l)}}return a}var ji=Bi;var Fi=Object.prototype;function Hi(e){var t=e&&e.constructor,i=typeof t=="function"&&t.prototype||Fi;return e===i}var Ui=Hi;var Wi=y(Object.keys,Object);var qi=Wi;var $i=Object.prototype;var Gi=$i.hasOwnProperty;function Ki(e){if(!Ui(e)){return qi(e)}var t=[];for(var i in Object(e)){if(Gi.call(e,i)&&i!="constructor"){t.push(i)}}return t}var Yi=Ki;function Zi(e){return e!=null&&ni(e.length)&&!me(e)}var Qi=Zi;function Ji(e){return Qi(e)?ji(e):Yi(e)}var Xi=Ji;function en(e,t){return e&&Vt(t,Xi(t),e)}var tn=en;function nn(e){var t=[];if(e!=null){for(var i in Object(e)){t.push(i)}}return t}var on=nn;var rn=Object.prototype;var sn=rn.hasOwnProperty;function an(e){if(!ce(e)){return on(e)}var t=Ui(e),i=[];for(var n in e){if(!(n=="constructor"&&(t||!sn.call(e,n)))){i.push(n)}}return i}var cn=an;function ln(e){return Qi(e)?ji(e,true):cn(e)}var dn=ln;function un(e,t){return e&&Vt(t,dn(t),e)}var hn=un;var fn=i(8);function mn(e,t){var i=-1,n=e.length;t||(t=Array(n));while(++i{this._setToTarget(e,n,t[n],i)})}}function Zr(e){return $r(e,Qr)}function Qr(e){return Kr(e)?e:undefined}function Jr(){return function e(){e.called=true}}var Xr=Jr;class es{constructor(e,t){this.source=e;this.name=t;this.path=[];this.stop=Xr();this.off=Xr()}}const ts=new Array(256).fill().map((e,t)=>("0"+t.toString(16)).slice(-2));function is(){const e=Math.random()*4294967296>>>0;const t=Math.random()*4294967296>>>0;const i=Math.random()*4294967296>>>0;const n=Math.random()*4294967296>>>0;return"e"+ts[e>>0&255]+ts[e>>8&255]+ts[e>>16&255]+ts[e>>24&255]+ts[t>>0&255]+ts[t>>8&255]+ts[t>>16&255]+ts[t>>24&255]+ts[i>>0&255]+ts[i>>8&255]+ts[i>>16&255]+ts[i>>24&255]+ts[n>>0&255]+ts[n>>8&255]+ts[n>>16&255]+ts[n>>24&255]}const ns={get(e){if(typeof e!="number"){return this[e]||this.normal}else{return e}},highest:1e5,high:1e3,normal:0,low:-1e3,lowest:-1e5};var os=ns;var rs=i(6);var ss=i(0);const as=Symbol("listeningTo");const cs=Symbol("emitterId");const ls={on(e,t,i={}){this.listenTo(this,e,t,i)},once(e,t,i){let n=false;const o=function(e,...i){if(!n){n=true;e.off();t.call(this,e,...i)}};this.listenTo(this,e,o,i)},off(e,t){this.stopListening(this,e,t)},listenTo(e,t,i,n={}){let o,r;if(!this[as]){this[as]={}}const s=this[as];if(!fs(e)){hs(e)}const a=fs(e);if(!(o=s[a])){o=s[a]={emitter:e,callbacks:{}}}if(!(r=o.callbacks[t])){r=o.callbacks[t]=[]}r.push(i);ps(e,t);const c=bs(e,t);const l=os.get(n.priority);const d={callback:i,priority:l};for(const e of c){let t=false;for(let i=0;i{if(!this._delegations){this._delegations=new Map}e.forEach(e=>{const n=this._delegations.get(e);if(!n){this._delegations.set(e,new Map([[t,i]]))}else{n.set(t,i)}})}}},stopDelegating(e,t){if(!this._delegations){return}if(!e){this._delegations.clear()}else if(!t){this._delegations.delete(e)}else{const i=this._delegations.get(e);if(i){i.delete(t)}}}};var ds=ls;function us(e,t){if(e[as]&&e[as][t]){return e[as][t].emitter}return null}function hs(e,t){if(!e[cs]){e[cs]=t||is()}}function fs(e){return e[cs]}function ms(e){if(!e._events){Object.defineProperty(e,"_events",{value:{}})}return e._events}function gs(){return{callbacks:[],childEvents:[]}}function ps(e,t){const i=ms(e);if(i[t]){return}let n=t;let o=null;const r=[];while(n!==""){if(i[n]){break}i[n]=gs();r.push(i[n]);if(o){i[n].childEvents.push(o)}o=n;n=n.substr(0,n.lastIndexOf(":"))}if(n!==""){for(const e of r){e.callbacks=i[n].callbacks.slice()}i[n].childEvents.push(o)}}function bs(e,t){const i=ms(e)[t];if(!i){return[]}let n=[i.callbacks];for(let t=0;t-1){return ws(e,t.substr(0,t.lastIndexOf(":")))}else{return null}}return i.callbacks}function ks(e,t,i){for(let[n,o]of e){if(!o){o=t.name}else if(typeof o=="function"){o=o(t.name)}const e=new es(t.source,o);e.path=[...t.path];n.fire(e,...i)}}function _s(e,t,i){const n=bs(e,t);for(const e of n){for(let t=0;t{Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t)).forEach(i=>{if(i in e.prototype){return}const n=Object.getOwnPropertyDescriptor(t,i);n.enumerable=false;Object.defineProperty(e.prototype,i,n)})})}class xs{constructor(e={},t={}){const i=vs(e);if(!i){t=e}this._items=[];this._itemMap=new Map;this._idProperty=t.idProperty||"id";this._bindToExternalToInternalMap=new WeakMap;this._bindToInternalToExternalMap=new WeakMap;this._skippedIndexesFromExternal=[];if(i){for(const t of e){this._items.push(t);this._itemMap.set(this._getItemIdBeforeAdding(t),t)}}}get length(){return this._items.length}get first(){return this._items[0]||null}get last(){return this._items[this.length-1]||null}add(e,t){return this.addMany([e],t)}addMany(e,t){if(t===undefined){t=this._items.length}else if(t>this._items.length||t<0){throw new ss["b"]("collection-add-item-invalid-index: The index passed to Collection#addMany() is invalid.",this)}for(let i=0;i{this._setUpBindToBinding(t=>new e(t))},using:e=>{if(typeof e=="function"){this._setUpBindToBinding(t=>e(t))}else{this._setUpBindToBinding(t=>t[e])}}}}_setUpBindToBinding(e){const t=this._bindToCollection;const i=(i,n,o)=>{const r=t._bindToCollection==this;const s=t._bindToInternalToExternalMap.get(n);if(r&&s){this._bindToExternalToInternalMap.set(n,s);this._bindToInternalToExternalMap.set(s,n)}else{const i=e(n);if(!i){this._skippedIndexesFromExternal.push(o);return}let r=o;for(const e of this._skippedIndexesFromExternal){if(o>e){r--}}for(const e of t._skippedIndexesFromExternal){if(r>=e){r++}}this._bindToExternalToInternalMap.set(n,i);this._bindToInternalToExternalMap.set(i,n);this.add(i,r);for(let e=0;e{const n=this._bindToExternalToInternalMap.get(t);if(n){this.remove(n)}this._skippedIndexesFromExternal=this._skippedIndexesFromExternal.reduce((e,t)=>{if(it){e.push(t)}return e},[])})}_getItemIdBeforeAdding(e){const t=this._idProperty;let i;if(t in e){i=e[t];if(typeof i!="string"){throw new ss["b"]("collection-add-invalid-id: This item's id should be a string.",this)}if(this.get(i)){throw new ss["b"]("collection-add-item-already-exists: This item already exists in the collection.",this)}}else{e[t]=i=is()}return i}_remove(e){let t,i,n;let o=false;const r=this._idProperty;if(typeof e=="string"){i=e;n=this._itemMap.get(i);o=!n;if(n){t=this._items.indexOf(n)}}else if(typeof e=="number"){t=e;n=this._items[t];o=!n;if(n){i=n[r]}}else{n=e;i=n[r];t=this._items.indexOf(n);o=t==-1||!this._itemMap.get(i)}if(o){throw new ss["b"]("collection-remove-404: Item not found.",this)}this._items.splice(t,1);this._itemMap.delete(i);const s=this._bindToInternalToExternalMap.get(n);this._bindToInternalToExternalMap.delete(n);this._bindToExternalToInternalMap.delete(s);this.fire("remove",n,t);return[n,t]}[Symbol.iterator](){return this._items[Symbol.iterator]()}}ys(xs,ds);class As{constructor(e,t=[],i=[]){this._context=e;this._plugins=new Map;this._availablePlugins=new Map;for(const e of t){if(e.pluginName){this._availablePlugins.set(e.pluginName,e)}}this._contextPlugins=new Map;for(const[e,t]of i){this._contextPlugins.set(e,t);this._contextPlugins.set(t,e);if(e.pluginName){this._availablePlugins.set(e.pluginName,e)}}}*[Symbol.iterator](){for(const e of this._plugins){if(typeof e[0]=="function"){yield e}}}get(e){const t=this._plugins.get(e);if(!t){const t="plugincollection-plugin-not-loaded: The requested plugin is not loaded.";let i=e;if(typeof e=="function"){i=e.pluginName||e.name}throw new ss["b"](t,this._context,{plugin:i})}return t}has(e){return this._plugins.has(e)}init(e,t=[]){const i=this;const n=this._context;const o=new Set;const r=[];const s=m(e);const a=m(t);const c=f(e);if(c){const e="plugincollection-plugin-not-found: Some plugins are not available and could not be loaded.";console.error(Object(ss["a"])(e),{plugins:c});return Promise.reject(new ss["b"](e,n,{plugins:c}))}return Promise.all(s.map(l)).then(()=>d(r,"init")).then(()=>d(r,"afterInit")).then(()=>r);function l(e){if(a.includes(e)){return}if(i._plugins.has(e)||o.has(e)){return}return u(e).catch(t=>{console.error(Object(ss["a"])("plugincollection-load: It was not possible to load the plugin."),{plugin:e});throw t})}function d(e,t){return e.reduce((e,n)=>{if(!n[t]){return e}if(i._contextPlugins.has(n)){return e}return e.then(n[t].bind(n))},Promise.resolve())}function u(e){return new Promise(s=>{o.add(e);if(e.requires){e.requires.forEach(i=>{const o=h(i);if(e.isContextPlugin&&!o.isContextPlugin){throw new ss["b"]("plugincollection-context-required: Context plugin can not require plugin which is not a context plugin",null,{plugin:o.name,requiredBy:e.name})}if(t.includes(o)){throw new ss["b"]("plugincollection-required: Cannot load a plugin because one of its dependencies is listed in"+"the `removePlugins` option.",n,{plugin:o.name,requiredBy:e.name})}l(o)})}const a=i._contextPlugins.get(e)||new e(n);i._add(e,a);r.push(a);s()})}function h(e){if(typeof e=="function"){return e}return i._availablePlugins.get(e)}function f(e){const t=[];for(const i of e){if(!h(i)){t.push(i)}}return t.length?t:null}function m(e){return e.map(e=>h(e)).filter(e=>!!e)}}destroy(){const e=[];for(const[,t]of this){if(typeof t.destroy=="function"&&!this._contextPlugins.has(t)){e.push(t.destroy())}}return Promise.all(e)}_add(e,t){this._plugins.set(e,t);const i=e.pluginName;if(!i){return}if(this._plugins.has(i)){throw new ss["b"]("plugincollection-plugin-name-conflict: Two plugins with the same name were loaded.",null,{pluginName:i,plugin1:this._plugins.get(i).constructor,plugin2:e})}this._plugins.set(i,t)}}ys(As,ds);if(!window.CKEDITOR_TRANSLATIONS){window.CKEDITOR_TRANSLATIONS={}}function Cs(e,t,i){if(!window.CKEDITOR_TRANSLATIONS[e]){window.CKEDITOR_TRANSLATIONS[e]={}}const n=window.CKEDITOR_TRANSLATIONS[e];n.dictionary=n.dictionary||{};n.getPluralForm=i||n.getPluralForm;Object.assign(n.dictionary,t)}function Ts(e,t,i=1){if(typeof i!=="number"){throw new ss["b"]("translation-service-quantity-not-a-number: Expecting `quantity` to be a number.",null,{quantity:i})}const n=Ps();if(n===1){e=Object.keys(window.CKEDITOR_TRANSLATIONS)[0]}const o=t.id||t.string;if(n===0||!Es(e,o)){if(i!==1){return t.plural}return t.string}const r=window.CKEDITOR_TRANSLATIONS[e].dictionary;const s=window.CKEDITOR_TRANSLATIONS[e].getPluralForm||(e=>e===1?0:1);if(typeof r[o]==="string"){return r[o]}const a=Number(s(i));return r[o][a]}function Ss(){window.CKEDITOR_TRANSLATIONS={}}function Es(e,t){return!!window.CKEDITOR_TRANSLATIONS[e]&&!!window.CKEDITOR_TRANSLATIONS[e].dictionary[t]}function Ps(){return Object.keys(window.CKEDITOR_TRANSLATIONS).length}const Ms=["ar","fa","he","ku","ug"];class Is{constructor(e={}){this.uiLanguage=e.uiLanguage||"en";this.contentLanguage=e.contentLanguage||this.uiLanguage;this.uiLanguageDirection=Ns(this.uiLanguage);this.contentLanguageDirection=Ns(this.contentLanguage);this.t=(e,t)=>this._t(e,t)}get language(){console.warn("locale-deprecated-language-property: "+"The Locale#language property has been deprecated and will be removed in the near future. "+"Please use #uiLanguage and #contentLanguage properties instead.");return this.uiLanguage}_t(e,t=[]){if(!Array.isArray(t)){t=[t]}if(typeof e==="string"){e={string:e}}const i=!!e.plural;const n=i?t[0]:1;const o=Ts(this.uiLanguage,e,n);return Ls(o,t)}}function Ls(e,t){return e.replace(/%(\d+)/g,(e,i)=>ie.destroy())).then(()=>this.plugins.destroy())}_addEditor(e,t){if(this._contextOwner){throw new ss["b"]("context-addEditor-private-context: Cannot add multiple editors to the context which is created by the editor.")}this.editors.add(e);if(t){this._contextOwner=e}}_removeEditor(e){if(this.editors.has(e)){this.editors.remove(e)}if(this._contextOwner===e){return this.destroy()}return Promise.resolve()}_getEditorConfig(){const e={};for(const t of this.config.names()){if(!["plugins","removePlugins","extraPlugins"].includes(t)){e[t]=this.config.get(t)}}return e}static create(e){return new Promise(t=>{const i=new this(e);t(i.initPlugins().then(()=>i))})}}function Rs(e,t){const i=Math.min(e.length,t.length);for(let n=0;ne.data.length){throw new ss["b"]("view-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.",this)}if(i<0||t+i>e.data.length){throw new ss["b"]("view-textproxy-wrong-length: Given length value is incorrect.",this)}this.data=e.data.substring(t,t+i);this.offsetInText=t}get offsetSize(){return this.data.length}get isPartial(){return this.data.length!==this.textNode.data.length}get parent(){return this.textNode.parent}get root(){return this.textNode.root}get document(){return this.textNode.document}is(e){return e==="$textProxy"||e==="view:$textProxy"||e==="textProxy"||e==="view:textProxy"}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let i=e.includeSelf?this.textNode:this.parent;while(i!==null){t[e.parentFirst?"push":"unshift"](i);i=i.parent}return t}}function Hs(e){const t=new Map;for(const i in e){t.set(i,e[i])}return t}function Us(e){if(vs(e)){return new Map(e)}else{return Hs(e)}}class Ws{constructor(...e){this._patterns=[];this.add(...e)}add(...e){for(let t of e){if(typeof t=="string"||t instanceof RegExp){t={name:t}}if(t.classes&&(typeof t.classes=="string"||t.classes instanceof RegExp)){t.classes=[t.classes]}this._patterns.push(t)}}match(...e){for(const t of e){for(const e of this._patterns){const i=qs(t,e);if(i){return{element:t,pattern:e,match:i}}}}return null}matchAll(...e){const t=[];for(const i of e){for(const e of this._patterns){const n=qs(i,e);if(n){t.push({element:i,pattern:e,match:n})}}}return t.length>0?t:null}getElementName(){if(this._patterns.length!==1){return null}const e=this._patterns[0];const t=e.name;return typeof e!="function"&&t&&!(t instanceof RegExp)?t:null}}function qs(e,t){if(typeof t=="function"){return t(e)}const i={};if(t.name){i.name=$s(t.name,e.name);if(!i.name){return null}}if(t.attributes){i.attributes=Gs(t.attributes,e);if(!i.attributes){return null}}if(t.classes){i.classes=Ks(t.classes,e);if(!i.classes){return false}}if(t.styles){i.styles=Ys(t.styles,e);if(!i.styles){return false}}return i}function $s(e,t){if(e instanceof RegExp){return e.test(t)}return e===t}function Gs(e,t){const i=[];for(const n in e){const o=e[n];if(t.hasAttribute(n)){const e=t.getAttribute(n);if(o===true){i.push(n)}else if(o instanceof RegExp){if(o.test(e)){i.push(n)}else{return null}}else if(e===o){i.push(n)}else{return null}}else{return null}}return i}function Ks(e,t){const i=[];for(const n of e){if(n instanceof RegExp){const e=t.getClassNames();for(const t of e){if(n.test(t)){i.push(t)}}if(i.length===0){return null}}else if(t.hasClass(n)){i.push(n)}else{return null}}return i}function Ys(e,t){const i=[];for(const n in e){const o=e[n];if(t.hasStyle(n)){const e=t.getStyle(n);if(o instanceof RegExp){if(o.test(e)){i.push(n)}else{return null}}else if(e===o){i.push(n)}else{return null}}else{return null}}return i}var Zs="[object Symbol]";function Qs(e){return typeof e=="symbol"||T(e)&&_(e)==Zs}var Js=Qs;var Xs=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ea=/^\w*$/;function ta(e,t){if(Yt(e)){return false}var i=typeof e;if(i=="number"||i=="symbol"||i=="boolean"||e==null||Js(e)){return true}return ea.test(e)||!Xs.test(e)||t!=null&&e in Object(t)}var ia=ta;var na="Expected a function";function oa(e,t){if(typeof e!="function"||t!=null&&typeof t!="function"){throw new TypeError(na)}var i=function(){var n=arguments,o=t?t.apply(this,n):n[0],r=i.cache;if(r.has(o)){return r.get(o)}var s=e.apply(this,n);i.cache=r.set(o,s)||r;return s};i.cache=new(oa.Cache||_t);return i}oa.Cache=_t;var ra=oa;var sa=500;function aa(e){var t=ra(e,(function(e){if(i.size===sa){i.clear()}return e}));var i=t.cache;return t}var ca=aa;var la=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;var da=/\\(\\)?/g;var ua=ca((function(e){var t=[];if(e.charCodeAt(0)===46){t.push("")}e.replace(la,(function(e,i,n,o){t.push(n?o.replace(da,"$1"):i||e)}));return t}));var ha=ua;function fa(e,t){var i=-1,n=e==null?0:e.length,o=Array(n);while(++io?0:o+t}i=i>o?o:i;if(i<0){i+=o}o=t>i?0:i-t>>>0;t>>>=0;var r=Array(o);while(++n0){if(++t>=mc){return arguments[0]}}else{t=0}return e.apply(undefined,arguments)}}var wc=bc;var kc=wc(fc);var _c=kc;function vc(e,t){return _c(lc(e,t,oc),e+"")}var yc=vc;function xc(e,t,i){if(!ce(i)){return false}var n=typeof t;if(n=="number"?Qi(i)&&ei(t,i.length):n=="string"&&t in i){return D(i[t],e)}return false}var Ac=xc;function Cc(e){return yc((function(t,i){var n=-1,o=i.length,r=o>1?i[o-1]:undefined,s=o>2?i[2]:undefined;r=e.length>3&&typeof r=="function"?(o--,r):undefined;if(s&&Ac(i[0],i[1],s)){r=o<3?undefined:r;o=1}t=Object(t);while(++nt===e);return Array.isArray(i)}set(e,t){if(ce(e)){for(const[t,i]of Object.entries(e)){this._styleProcessor.toNormalizedForm(t,i,this._styles)}}else{this._styleProcessor.toNormalizedForm(e,t,this._styles)}}remove(e){const t=Oc(e);Da(this._styles,t);delete this._styles[e];this._cleanEmptyObjectsOnPath(t)}getNormalized(e){return this._styleProcessor.getNormalized(e,this._styles)}toString(){if(this.isEmpty){return""}return this._getStylesEntries().map(e=>e.join(":")).sort().join(";")+";"}getAsString(e){if(this.isEmpty){return}if(this._styles[e]&&!ce(this._styles[e])){return this._styles[e]}const t=this._styleProcessor.getReducedForm(e,this._styles);const i=t.find(([t])=>t===e);if(Array.isArray(i)){return i[1]}}getStyleNames(){if(this.isEmpty){return[]}const e=this._getStylesEntries();return e.map(([e])=>e)}clear(){this._styles={}}_getStylesEntries(){const e=[];const t=Object.keys(this._styles);for(const i of t){e.push(...this._styleProcessor.getReducedForm(i,this._styles))}return e}_cleanEmptyObjectsOnPath(e){const t=e.split(".");const i=t.length>1;if(!i){return}const n=t.splice(0,t.length-1).join(".");const o=ja(this._styles,n);if(!o){return}const r=!Array.from(Object.keys(o)).length;if(r){this.remove(n)}}}class zc{constructor(){this._normalizers=new Map;this._extractors=new Map;this._reducers=new Map;this._consumables=new Map}toNormalizedForm(e,t,i){if(ce(t)){Vc(i,Oc(e),t);return}if(this._normalizers.has(e)){const n=this._normalizers.get(e);const{path:o,value:r}=n(t);Vc(i,o,r)}else{Vc(i,e,t)}}getNormalized(e,t){if(!e){return Ec({},t)}if(t[e]!==undefined){return t[e]}if(this._extractors.has(e)){const i=this._extractors.get(e);if(typeof i==="string"){return ja(t,i)}const n=i(e,t);if(n){return n}}return ja(t,Oc(e))}getReducedForm(e,t){const i=this.getNormalized(e,t);if(i===undefined){return[]}if(this._reducers.has(e)){const t=this._reducers.get(e);return t(i)}return[[e,i]]}getRelatedStyles(e){return this._consumables.get(e)||[]}setNormalizer(e,t){this._normalizers.set(e,t)}setExtractor(e,t){this._extractors.set(e,t)}setReducer(e,t){this._reducers.set(e,t)}setStyleRelation(e,t){this._mapStyleNames(e,t);for(const i of t){this._mapStyleNames(i,[e])}}_mapStyleNames(e,t){if(!this._consumables.has(e)){this._consumables.set(e,[])}this._consumables.get(e).push(...t)}}function Rc(e){let t=null;let i=0;let n=0;let o=null;const r=new Map;if(e===""){return r}if(e.charAt(e.length-1)!=";"){e=e+";"}for(let s=0;s0){yield"class"}if(!this._styles.isEmpty){yield"style"}yield*this._attrs.keys()}*getAttributes(){yield*this._attrs.entries();if(this._classes.size>0){yield["class",this.getAttribute("class")]}if(!this._styles.isEmpty){yield["style",this.getAttribute("style")]}}getAttribute(e){if(e=="class"){if(this._classes.size>0){return[...this._classes].join(" ")}return undefined}if(e=="style"){const e=this._styles.toString();return e==""?undefined:e}return this._attrs.get(e)}hasAttribute(e){if(e=="class"){return this._classes.size>0}if(e=="style"){return!this._styles.isEmpty}return this._attrs.has(e)}isSimilar(e){if(!(e instanceof Dc)){return false}if(this===e){return true}if(this.name!=e.name){return false}if(this._attrs.size!==e._attrs.size||this._classes.size!==e._classes.size||this._styles.size!==e._styles.size){return false}for(const[t,i]of this._attrs){if(!e._attrs.has(t)||e._attrs.get(t)!==i){return false}}for(const t of this._classes){if(!e._classes.has(t)){return false}}for(const t of this._styles.getStyleNames()){if(!e._styles.has(t)||e._styles.getAsString(t)!==this._styles.getAsString(t)){return false}}return true}hasClass(...e){for(const t of e){if(!this._classes.has(t)){return false}}return true}getClassNames(){return this._classes.keys()}getStyle(e){return this._styles.getAsString(e)}getNormalizedStyle(e){return this._styles.getNormalized(e)}getStyleNames(){return this._styles.getStyleNames()}hasStyle(...e){for(const t of e){if(!this._styles.has(t)){return false}}return true}findAncestor(...e){const t=new Ws(...e);let i=this.parent;while(i){if(t.match(i)){return i}i=i.parent}return null}getCustomProperty(e){return this._customProperties.get(e)}*getCustomProperties(){yield*this._customProperties.entries()}getIdentity(){const e=Array.from(this._classes).sort().join(",");const t=this._styles.toString();const i=Array.from(this._attrs).map(e=>`${e[0]}="${e[1]}"`).sort().join(" ");return this.name+(e==""?"":` class="${e}"`)+(!t?"":` style="${t}"`)+(i==""?"":` ${i}`)}_clone(e=false){const t=[];if(e){for(const i of this.getChildren()){t.push(i._clone(e))}}const i=new this.constructor(this.document,this.name,this._attrs,t);i._classes=new Set(this._classes);i._styles.set(this._styles.getNormalized());i._customProperties=new Map(this._customProperties);i.getFillerOffset=this.getFillerOffset;return i}_appendChild(e){return this._insertChild(this.childCount,e)}_insertChild(e,t){this._fireChange("children",this);let i=0;const n=Fc(this.document,t);for(const t of n){if(t.parent!==null){t._remove()}t.parent=this;t.document=this.document;this._children.splice(e,0,t);e++;i++}return i}_removeChildren(e,t=1){this._fireChange("children",this);for(let i=e;i0){this._classes.clear();return true}return false}if(e=="style"){if(!this._styles.isEmpty){this._styles.clear();return true}return false}return this._attrs.delete(e)}_addClass(e){this._fireChange("attributes",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._classes.add(e))}_removeClass(e){this._fireChange("attributes",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._classes.delete(e))}_setStyle(e,t){this._fireChange("attributes",this);this._styles.set(e,t)}_removeStyle(e){this._fireChange("attributes",this);e=Array.isArray(e)?e:[e];e.forEach(e=>this._styles.remove(e))}_setCustomProperty(e,t){this._customProperties.set(e,t)}_removeCustomProperty(e){return this._customProperties.delete(e)}}function Bc(e){e=Us(e);for(const[t,i]of e){if(i===null){e.delete(t)}else if(typeof i!="string"){e.set(t,String(i))}}return e}function jc(e,t){const i=t.split(/\s+/);e.clear();i.forEach(t=>e.add(t))}function Fc(e,t){if(typeof t=="string"){return[new js(e,t)]}if(!vs(t)){t=[t]}return Array.from(t).map(t=>{if(typeof t=="string"){return new js(e,t)}if(t instanceof Fs){return new js(e,t.data)}return t})}class Hc extends Dc{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=Uc}is(e,t=null){if(!t){return e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element")}}}function Uc(){const e=[...this.getChildren()];const t=e[this.childCount-1];if(t&&t.is("element","br")){return this.childCount}for(const t of e){if(!t.is("uiElement")){return null}}return this.childCount}var Wc=Tc((function(e,t){Vt(t,dn(t),e)}));var qc=Wc;const $c=Symbol("observableProperties");const Gc=Symbol("boundObservables");const Kc=Symbol("boundProperties");const Yc={set(e,t){if(ce(e)){Object.keys(e).forEach(t=>{this.set(t,e[t])},this);return}Qc(this);const i=this[$c];if(e in this&&!i.has(e)){throw new ss["b"]("observable-set-cannot-override: Cannot override an existing property.",this)}Object.defineProperty(this,e,{enumerable:true,configurable:true,get(){return i.get(e)},set(t){const n=i.get(e);let o=this.fire("set:"+e,e,t,n);if(o===undefined){o=t}if(n!==o||!i.has(e)){i.set(e,o);this.fire("change:"+e,e,o,n)}}});this[e]=t},bind(...e){if(!e.length||!tl(e)){throw new ss["b"]("observable-bind-wrong-properties: All properties must be strings.",this)}if(new Set(e).size!==e.length){throw new ss["b"]("observable-bind-duplicate-properties: Properties must be unique.",this)}Qc(this);const t=this[Kc];e.forEach(e=>{if(t.has(e)){throw new ss["b"]("observable-bind-rebind: Cannot bind the same property more than once.",this)}});const i=new Map;e.forEach(e=>{const n={property:e,to:[]};t.set(e,n);i.set(e,n)});return{to:Jc,toMany:Xc,_observable:this,_bindProperties:e,_to:[],_bindings:i}},unbind(...e){if(!this[$c]){return}const t=this[Kc];const i=this[Gc];if(e.length){if(!tl(e)){throw new ss["b"]("observable-unbind-wrong-properties: Properties must be strings.",this)}e.forEach(e=>{const n=t.get(e);if(!n){return}let o,r,s,a;n.to.forEach(e=>{o=e[0];r=e[1];s=i.get(o);a=s[r];a.delete(n);if(!a.size){delete s[r]}if(!Object.keys(s).length){i.delete(o);this.stopListening(o,"change")}});t.delete(e)})}else{i.forEach((e,t)=>{this.stopListening(t,"change")});i.clear();t.clear()}},decorate(e){const t=this[e];if(!t){throw new ss["b"]("observablemixin-cannot-decorate-undefined: Cannot decorate an undefined method.",this,{object:this,methodName:e})}this.on(e,(e,i)=>{e.return=t.apply(this,i)});this[e]=function(...t){return this.fire(e,t)}}};qc(Yc,ds);var Zc=Yc;function Qc(e){if(e[$c]){return}Object.defineProperty(e,$c,{value:new Map});Object.defineProperty(e,Gc,{value:new Map});Object.defineProperty(e,Kc,{value:new Map})}function Jc(...e){const t=il(...e);const i=Array.from(this._bindings.keys());const n=i.length;if(!t.callback&&t.to.length>1){throw new ss["b"]("observable-bind-to-no-callback: Binding multiple observables only possible with callback.",this)}if(n>1&&t.callback){throw new ss["b"]("observable-bind-to-extra-callback: Cannot bind multiple properties and use a callback in one binding.",this)}t.to.forEach(e=>{if(e.properties.length&&e.properties.length!==n){throw new ss["b"]("observable-bind-to-properties-length: The number of properties must match.",this)}if(!e.properties.length){e.properties=this._bindProperties}});this._to=t.to;if(t.callback){this._bindings.get(i[0]).callback=t.callback}sl(this._observable,this._to);ol(this);this._bindProperties.forEach(e=>{rl(this._observable,e)})}function Xc(e,t,i){if(this._bindings.size>1){throw new ss["b"]("observable-bind-to-many-not-one-binding: Cannot bind multiple properties with toMany().",this)}this.to(...el(e,t),i)}function el(e,t){const i=e.map(e=>[e,t]);return Array.prototype.concat.apply([],i)}function tl(e){return e.every(e=>typeof e=="string")}function il(...e){if(!e.length){throw new ss["b"]("observable-bind-to-parse-error: Invalid argument syntax in `to()`.",null)}const t={to:[]};let i;if(typeof e[e.length-1]=="function"){t.callback=e.pop()}e.forEach(e=>{if(typeof e=="string"){i.properties.push(e)}else if(typeof e=="object"){i={observable:e,properties:[]};t.to.push(i)}else{throw new ss["b"]("observable-bind-to-parse-error: Invalid argument syntax in `to()`.",null)}});return t}function nl(e,t,i,n){const o=e[Gc];const r=o.get(i);const s=r||{};if(!s[n]){s[n]=new Set}s[n].add(t);if(!r){o.set(i,s)}}function ol(e){let t;e._bindings.forEach((i,n)=>{e._to.forEach(o=>{t=o.properties[i.callback?0:e._bindProperties.indexOf(n)];i.to.push([o.observable,t]);nl(e._observable,i,o.observable,t)})})}function rl(e,t){const i=e[Kc];const n=i.get(t);let o;if(n.callback){o=n.callback.apply(e,n.to.map(e=>e[0][e[1]]))}else{o=n.to[0];o=o[0][o[1]]}if(Object.prototype.hasOwnProperty.call(e,t)){e[t]=o}else{e.set(t,o)}}function sl(e,t){t.forEach(t=>{const i=e[Gc];let n;if(!i.get(t.observable)){e.listenTo(t.observable,"change",(o,r)=>{n=i.get(t.observable)[r];if(n){n.forEach(t=>{rl(e,t.property)})}})}})}class al extends Hc{constructor(e,t,i,n){super(e,t,i,n);this.set("isReadOnly",false);this.set("isFocused",false);this.bind("isReadOnly").to(e);this.bind("isFocused").to(e,"isFocused",t=>t&&e.selection.editableElement==this);this.listenTo(e.selection,"change",()=>{this.isFocused=e.isFocused&&e.selection.editableElement==this})}is(e,t=null){if(!t){return e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element")}}destroy(){this.stopListening()}}ys(al,Zc);const cl=Symbol("rootName");class ll extends al{constructor(e,t){super(e,t);this.rootName="main"}is(e,t=null){if(!t){return e==="rootElement"||e==="view:rootElement"||e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="rootElement"||e==="view:rootElement"||e==="editableElement"||e==="view:editableElement"||e==="containerElement"||e==="view:containerElement"||e==="element"||e==="view:element")}}get rootName(){return this.getCustomProperty(cl)}set rootName(e){this._setCustomProperty(cl,e)}set _name(e){this.name=e}}class dl{constructor(e={}){if(!e.boundaries&&!e.startPosition){throw new ss["b"]("view-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.",null)}if(e.direction&&e.direction!="forward"&&e.direction!="backward"){throw new ss["b"]("view-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.",e.startPosition,{direction:e.direction})}this.boundaries=e.boundaries||null;if(e.startPosition){this.position=ul._createAt(e.startPosition)}else{this.position=ul._createAt(e.boundaries[e.direction=="backward"?"end":"start"])}this.direction=e.direction||"forward";this.singleCharacters=!!e.singleCharacters;this.shallow=!!e.shallow;this.ignoreElementEnd=!!e.ignoreElementEnd;this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null;this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null}[Symbol.iterator](){return this}skip(e){let t,i,n;do{n=this.position;({done:t,value:i}=this.next())}while(!t&&e(i));if(!t){this.position=n}}next(){if(this.direction=="forward"){return this._next()}else{return this._previous()}}_next(){let e=this.position.clone();const t=this.position;const i=e.parent;if(i.parent===null&&e.offset===i.childCount){return{done:true}}if(i===this._boundaryEndParent&&e.offset==this.boundaries.end.offset){return{done:true}}let n;if(i instanceof js){if(e.isAtEnd){this.position=ul._createAfter(i);return this._next()}n=i.data[e.offset]}else{n=i.getChild(e.offset)}if(n instanceof Dc){if(!this.shallow){e=new ul(n,0)}else{e.offset++}this.position=e;return this._formatReturnValue("elementStart",n,t,e,1)}else if(n instanceof js){if(this.singleCharacters){e=new ul(n,0);this.position=e;return this._next()}else{let i=n.data.length;let o;if(n==this._boundaryEndParent){i=this.boundaries.end.offset;o=new Fs(n,0,i);e=ul._createAfter(o)}else{o=new Fs(n,0,n.data.length);e.offset++}this.position=e;return this._formatReturnValue("text",o,t,e,i)}}else if(typeof n=="string"){let n;if(this.singleCharacters){n=1}else{const t=i===this._boundaryEndParent?this.boundaries.end.offset:i.data.length;n=t-e.offset}const o=new Fs(i,e.offset,n);e.offset+=n;this.position=e;return this._formatReturnValue("text",o,t,e,n)}else{e=ul._createAfter(i);this.position=e;if(this.ignoreElementEnd){return this._next()}else{return this._formatReturnValue("elementEnd",i,t,e)}}}_previous(){let e=this.position.clone();const t=this.position;const i=e.parent;if(i.parent===null&&e.offset===0){return{done:true}}if(i==this._boundaryStartParent&&e.offset==this.boundaries.start.offset){return{done:true}}let n;if(i instanceof js){if(e.isAtStart){this.position=ul._createBefore(i);return this._previous()}n=i.data[e.offset-1]}else{n=i.getChild(e.offset-1)}if(n instanceof Dc){if(!this.shallow){e=new ul(n,n.childCount);this.position=e;if(this.ignoreElementEnd){return this._previous()}else{return this._formatReturnValue("elementEnd",n,t,e)}}else{e.offset--;this.position=e;return this._formatReturnValue("elementStart",n,t,e,1)}}else if(n instanceof js){if(this.singleCharacters){e=new ul(n,n.data.length);this.position=e;return this._previous()}else{let i=n.data.length;let o;if(n==this._boundaryStartParent){const t=this.boundaries.start.offset;o=new Fs(n,t,n.data.length-t);i=o.data.length;e=ul._createBefore(o)}else{o=new Fs(n,0,n.data.length);e.offset--}this.position=e;return this._formatReturnValue("text",o,t,e,i)}}else if(typeof n=="string"){let n;if(!this.singleCharacters){const t=i===this._boundaryStartParent?this.boundaries.start.offset:0;n=e.offset-t}else{n=1}e.offset-=n;const o=new Fs(i,e.offset,n);this.position=e;return this._formatReturnValue("text",o,t,e,n)}else{e=ul._createBefore(i);this.position=e;return this._formatReturnValue("elementStart",i,t,e,1)}}_formatReturnValue(e,t,i,n,o){if(t instanceof Fs){if(t.offsetInText+t.data.length==t.textNode.data.length){if(this.direction=="forward"&&!(this.boundaries&&this.boundaries.end.isEqual(this.position))){n=ul._createAfter(t.textNode);this.position=n}else{i=ul._createAfter(t.textNode)}}if(t.offsetInText===0){if(this.direction=="backward"&&!(this.boundaries&&this.boundaries.start.isEqual(this.position))){n=ul._createBefore(t.textNode);this.position=n}else{i=ul._createBefore(t.textNode)}}}return{done:false,value:{type:e,item:t,previousPosition:i,nextPosition:n,length:o}}}}class ul{constructor(e,t){this.parent=e;this.offset=t}get nodeAfter(){if(this.parent.is("$text")){return null}return this.parent.getChild(this.offset)||null}get nodeBefore(){if(this.parent.is("$text")){return null}return this.parent.getChild(this.offset-1)||null}get isAtStart(){return this.offset===0}get isAtEnd(){const e=this.parent.is("$text")?this.parent.data.length:this.parent.childCount;return this.offset===e}get root(){return this.parent.root}get editableElement(){let e=this.parent;while(!(e instanceof al)){if(e.parent){e=e.parent}else{return null}}return e}getShiftedBy(e){const t=ul._createAt(this);const i=t.offset+e;t.offset=i<0?0:i;return t}getLastMatchingPosition(e,t={}){t.startPosition=this;const i=new dl(t);i.skip(e);return i.position}getAncestors(){if(this.parent.is("documentFragment")){return[this.parent]}else{return this.parent.getAncestors({includeSelf:true})}}getCommonAncestor(e){const t=this.getAncestors();const i=e.getAncestors();let n=0;while(t[n]==i[n]&&t[n]){n++}return n===0?null:t[n-1]}is(e){return e==="position"||e==="view:position"}isEqual(e){return this.parent==e.parent&&this.offset==e.offset}isBefore(e){return this.compareWith(e)=="before"}isAfter(e){return this.compareWith(e)=="after"}compareWith(e){if(this.root!==e.root){return"different"}if(this.isEqual(e)){return"same"}const t=this.parent.is("node")?this.parent.getPath():[];const i=e.parent.is("node")?e.parent.getPath():[];t.push(this.offset);i.push(e.offset);const n=Rs(t,i);switch(n){case"prefix":return"before";case"extension":return"after";default:return t[n]0?new this(i,n):new this(n,i)}static _createIn(e){return this._createFromParentsAndOffsets(e,0,e,e.childCount)}static _createOn(e){const t=e.is("$textProxy")?e.offsetSize:1;return this._createFromPositionAndShift(ul._createBefore(e),t)}}function fl(e){if(e.item.is("attributeElement")||e.item.is("uiElement")){return true}return false}function ml(e){let t=0;for(const i of e){t++}return t}class gl{constructor(e=null,t,i){this._ranges=[];this._lastRangeBackward=false;this._isFake=false;this._fakeSelectionLabel="";this.setTo(e,t,i)}get isFake(){return this._isFake}get fakeSelectionLabel(){return this._fakeSelectionLabel}get anchor(){if(!this._ranges.length){return null}const e=this._ranges[this._ranges.length-1];const t=this._lastRangeBackward?e.end:e.start;return t.clone()}get focus(){if(!this._ranges.length){return null}const e=this._ranges[this._ranges.length-1];const t=this._lastRangeBackward?e.start:e.end;return t.clone()}get isCollapsed(){return this.rangeCount===1&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}get editableElement(){if(this.anchor){return this.anchor.editableElement}return null}*getRanges(){for(const e of this._ranges){yield e.clone()}}getFirstRange(){let e=null;for(const t of this._ranges){if(!e||t.start.isBefore(e.start)){e=t}}return e?e.clone():null}getLastRange(){let e=null;for(const t of this._ranges){if(!e||t.end.isAfter(e.end)){e=t}}return e?e.clone():null}getFirstPosition(){const e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){const e=this.getLastRange();return e?e.end.clone():null}isEqual(e){if(this.isFake!=e.isFake){return false}if(this.isFake&&this.fakeSelectionLabel!=e.fakeSelectionLabel){return false}if(this.rangeCount!=e.rangeCount){return false}else if(this.rangeCount===0){return true}if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus)){return false}for(const t of this._ranges){let i=false;for(const n of e._ranges){if(t.isEqual(n)){i=true;break}}if(!i){return false}}return true}isSimilar(e){if(this.isBackward!=e.isBackward){return false}const t=ml(this.getRanges());const i=ml(e.getRanges());if(t!=i){return false}if(t==0){return true}for(let t of this.getRanges()){t=t.getTrimmed();let i=false;for(let n of e.getRanges()){n=n.getTrimmed();if(t.start.isEqual(n.start)&&t.end.isEqual(n.end)){i=true;break}}if(!i){return false}}return true}getSelectedElement(){if(this.rangeCount!==1){return null}return this.getFirstRange().getContainedElement()}setTo(e,t,i){if(e===null){this._setRanges([]);this._setFakeOptions(t)}else if(e instanceof gl||e instanceof pl){this._setRanges(e.getRanges(),e.isBackward);this._setFakeOptions({fake:e.isFake,label:e.fakeSelectionLabel})}else if(e instanceof hl){this._setRanges([e],t&&t.backward);this._setFakeOptions(t)}else if(e instanceof ul){this._setRanges([new hl(e)]);this._setFakeOptions(t)}else if(e instanceof Bs){const n=!!i&&!!i.backward;let o;if(t===undefined){throw new ss["b"]("view-selection-setTo-required-second-parameter: "+"selection.setTo requires the second parameter when the first parameter is a node.",this)}else if(t=="in"){o=hl._createIn(e)}else if(t=="on"){o=hl._createOn(e)}else{o=new hl(ul._createAt(e,t))}this._setRanges([o],n);this._setFakeOptions(i)}else if(vs(e)){this._setRanges(e,t&&t.backward);this._setFakeOptions(t)}else{throw new ss["b"]("view-selection-setTo-not-selectable: Cannot set selection to given place.",this)}this.fire("change")}setFocus(e,t){if(this.anchor===null){throw new ss["b"]("view-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.",this)}const i=ul._createAt(e,t);if(i.compareWith(this.focus)=="same"){return}const n=this.anchor;this._ranges.pop();if(i.compareWith(n)=="before"){this._addRange(new hl(i,n),true)}else{this._addRange(new hl(n,i))}this.fire("change")}is(e){return e==="selection"||e==="view:selection"}_setRanges(e,t=false){e=Array.from(e);this._ranges=[];for(const t of e){this._addRange(t)}this._lastRangeBackward=!!t}_setFakeOptions(e={}){this._isFake=!!e.fake;this._fakeSelectionLabel=e.fake?e.label||"":""}_addRange(e,t=false){if(!(e instanceof hl)){throw new ss["b"]("view-selection-add-range-not-range: "+"Selection range set to an object that is not an instance of view.Range",this)}this._pushRange(e);this._lastRangeBackward=!!t}_pushRange(e){for(const t of this._ranges){if(e.isIntersecting(t)){throw new ss["b"]("view-selection-range-intersects: Trying to add a range that intersects with another range from selection.",this,{addedRange:e,intersectingRange:t})}}this._ranges.push(new hl(e.start,e.end))}}ys(gl,ds);class pl{constructor(e=null,t,i){this._selection=new gl;this._selection.delegate("change").to(this);this._selection.setTo(e,t,i)}get isFake(){return this._selection.isFake}get fakeSelectionLabel(){return this._selection.fakeSelectionLabel}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get isCollapsed(){return this._selection.isCollapsed}get rangeCount(){return this._selection.rangeCount}get isBackward(){return this._selection.isBackward}get editableElement(){return this._selection.editableElement}get _ranges(){return this._selection._ranges}*getRanges(){yield*this._selection.getRanges()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getSelectedElement(){return this._selection.getSelectedElement()}isEqual(e){return this._selection.isEqual(e)}isSimilar(e){return this._selection.isSimilar(e)}is(e){return e==="selection"||e=="documentSelection"||e=="view:selection"||e=="view:documentSelection"}_setTo(e,t,i){this._selection.setTo(e,t,i)}_setFocus(e,t){this._selection.setFocus(e,t)}}ys(pl,ds);class bl{constructor(e){this.selection=new pl;this.roots=new xs({idProperty:"rootName"});this.stylesProcessor=e;this.set("isReadOnly",false);this.set("isFocused",false);this.set("isComposing",false);this._postFixers=new Set}getRoot(e="main"){return this.roots.get(e)}registerPostFixer(e){this._postFixers.add(e)}destroy(){this.roots.map(e=>e.destroy());this.stopListening()}_callPostFixers(e){let t=false;do{for(const i of this._postFixers){t=i(e);if(t){break}}}while(t)}}ys(bl,Zc);const wl=10;class kl extends Dc{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=_l;this._priority=wl;this._id=null;this._clonesGroup=null}get priority(){return this._priority}get id(){return this._id}getElementsWithSameId(){if(this.id===null){throw new ss["b"]("attribute-element-get-elements-with-same-id-no-id: "+"Cannot get elements with the same id for an attribute element without id.",this)}return new Set(this._clonesGroup)}is(e,t=null){if(!t){return e==="attributeElement"||e==="view:attributeElement"||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="attributeElement"||e==="view:attributeElement"||e==="element"||e==="view:element")}}isSimilar(e){if(this.id!==null||e.id!==null){return this.id===e.id}return super.isSimilar(e)&&this.priority==e.priority}_clone(e){const t=super._clone(e);t._priority=this._priority;t._id=this._id;return t}}kl.DEFAULT_PRIORITY=wl;function _l(){if(vl(this)){return null}let e=this.parent;while(e&&e.is("attributeElement")){if(vl(e)>1){return null}e=e.parent}if(!e||vl(e)>1){return null}return this.childCount}function vl(e){return Array.from(e.getChildren()).filter(e=>!e.is("uiElement")).length}class yl extends Dc{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=xl}is(e,t=null){if(!t){return e==="emptyElement"||e==="view:emptyElement"||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="emptyElement"||e==="view:emptyElement"||e==="element"||e==="view:element")}}_insertChild(e,t){if(t&&(t instanceof Bs||Array.from(t).length>0)){throw new ss["b"]("view-emptyelement-cannot-add: Cannot add child nodes to EmptyElement instance.",[this,t])}}}function xl(){return null}const Al=navigator.userAgent.toLowerCase();const Cl={isMac:Sl(Al),isGecko:El(Al),isSafari:Pl(Al),isAndroid:Ml(Al),features:{isRegExpUnicodePropertySupported:Il()}};var Tl=Cl;function Sl(e){return e.indexOf("macintosh")>-1}function El(e){return!!e.match(/gecko\/\d+/)}function Pl(e){return e.indexOf(" applewebkit/")>-1&&e.indexOf("chrome")===-1}function Ml(e){return e.indexOf("android")>-1}function Il(){let e=false;try{e="ć".search(new RegExp("[\\p{L}]","u"))===0}catch(e){}return e}const Ll={"⌘":"ctrl","⇧":"shift","⌥":"alt"};const Nl={ctrl:"⌘",shift:"⇧",alt:"⌥"};const zl=Fl();function Rl(e){let t;if(typeof e=="string"){t=zl[e.toLowerCase()];if(!t){throw new ss["b"]("keyboard-unknown-key: Unknown key name.",null,{key:e})}}else{t=e.keyCode+(e.altKey?zl.alt:0)+(e.ctrlKey?zl.ctrl:0)+(e.shiftKey?zl.shift:0)}return t}function Ol(e){if(typeof e=="string"){e=Hl(e)}return e.map(e=>typeof e=="string"?Rl(e):e).reduce((e,t)=>t+e,0)}function Vl(e){if(!Tl.isMac){return e}return Hl(e).map(e=>Nl[e.toLowerCase()]||e).reduce((e,t)=>{if(e.slice(-1)in Ll){return e+t}else{return e+"+"+t}})}function Dl(e){return e==zl.arrowright||e==zl.arrowleft||e==zl.arrowup||e==zl.arrowdown}function Bl(e,t){const i=t==="ltr";switch(e){case zl.arrowleft:return i?"left":"right";case zl.arrowright:return i?"right":"left";case zl.arrowup:return"up";case zl.arrowdown:return"down"}}function jl(e,t){const i=Bl(e,t);return i==="down"||i==="right"}function Fl(){const e={arrowleft:37,arrowup:38,arrowright:39,arrowdown:40,backspace:8,delete:46,enter:13,space:32,esc:27,tab:9,ctrl:1114112,cmd:1114112,shift:2228224,alt:4456448};for(let t=65;t<=90;t++){const i=String.fromCharCode(t);e[i.toLowerCase()]=t}for(let t=48;t<=57;t++){e[t-48]=t}for(let t=112;t<=123;t++){e["f"+(t-111)]=t}return e}function Hl(e){return e.split(/\s*\+\s*/)}class Ul extends Dc{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=ql}is(e,t=null){if(!t){return e==="uiElement"||e==="view:uiElement"||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="uiElement"||e==="view:uiElement"||e==="element"||e==="view:element")}}_insertChild(e,t){if(t&&(t instanceof Bs||Array.from(t).length>0)){throw new ss["b"]("view-uielement-cannot-add: Cannot add child nodes to UIElement instance.",this)}}render(e){return this.toDomElement(e)}toDomElement(e){const t=e.createElement(this.name);for(const e of this.getAttributeKeys()){t.setAttribute(e,this.getAttribute(e))}return t}}function Wl(e){e.document.on("keydown",(t,i)=>$l(t,i,e.domConverter))}function ql(){return null}function $l(e,t,i){if(t.keyCode==zl.arrowright){const e=t.domTarget.ownerDocument.defaultView.getSelection();const n=e.rangeCount==1&&e.getRangeAt(0).collapsed;if(n||t.shiftKey){const t=e.focusNode;const o=e.focusOffset;const r=i.domPositionToView(t,o);if(r===null){return}let s=false;const a=r.getLastMatchingPosition(e=>{if(e.item.is("uiElement")){s=true}if(e.item.is("uiElement")||e.item.is("attributeElement")){return true}return false});if(s){const t=i.viewPositionToDom(a);if(n){e.collapse(t.parent,t.offset)}else{e.extend(t.parent,t.offset)}}}}}class Gl extends Dc{constructor(e,t,i,n){super(e,t,i,n);this.getFillerOffset=Kl}is(e,t=null){if(!t){return e==="rawElement"||e==="view:rawElement"||e===this.name||e==="view:"+this.name||e==="element"||e==="view:element"||e==="node"||e==="view:node"}else{return t===this.name&&(e==="rawElement"||e==="view:rawElement"||e==="element"||e==="view:element")}}_insertChild(e,t){if(t&&(t instanceof Bs||Array.from(t).length>0)){throw new ss["b"]("view-rawelement-cannot-add: Cannot add child nodes to a RawElement instance.",[this,t])}}}function Kl(){return null}class Yl{constructor(e,t){this.document=e;this._children=[];if(t){this._insertChild(0,t)}}[Symbol.iterator](){return this._children[Symbol.iterator]()}get childCount(){return this._children.length}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}is(e){return e==="documentFragment"||e==="view:documentFragment"}_appendChild(e){return this._insertChild(this.childCount,e)}getChild(e){return this._children[e]}getChildIndex(e){return this._children.indexOf(e)}getChildren(){return this._children[Symbol.iterator]()}_insertChild(e,t){this._fireChange("children",this);let i=0;const n=Zl(this.document,t);for(const t of n){if(t.parent!==null){t._remove()}t.parent=this;this._children.splice(e,0,t);e++;i++}return i}_removeChildren(e,t=1){this._fireChange("children",this);for(let i=e;i{if(typeof t=="string"){return new js(e,t)}if(t instanceof Fs){return new js(e,t.data)}return t})}class Ql{constructor(e){this.document=e;this._cloneGroups=new Map}setSelection(e,t,i){this.document.selection._setTo(e,t,i)}setSelectionFocus(e,t){this.document.selection._setFocus(e,t)}createText(e){return new js(this.document,e)}createAttributeElement(e,t,i={}){const n=new kl(this.document,e,t);if(i.priority){n._priority=i.priority}if(i.id){n._id=i.id}return n}createContainerElement(e,t){return new Hc(this.document,e,t)}createEditableElement(e,t){const i=new al(this.document,e,t);i._document=this.document;return i}createEmptyElement(e,t){return new yl(this.document,e,t)}createUIElement(e,t,i){const n=new Ul(this.document,e,t);if(i){n.render=i}return n}createRawElement(e,t,i){const n=new Gl(this.document,e,t);n.render=i||(()=>{});return n}setAttribute(e,t,i){i._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,i){if(z(e)&&i===undefined){i=t}i._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,i){i._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}breakAttributes(e){if(e instanceof ul){return this._breakAttributes(e)}else{return this._breakAttributesRange(e)}}breakContainer(e){const t=e.parent;if(!t.is("containerElement")){throw new ss["b"]("view-writer-break-non-container-element: Trying to break an element which is not a container element.",this.document)}if(!t.parent){throw new ss["b"]("view-writer-break-root: Trying to break root element.",this.document)}if(e.isAtStart){return ul._createBefore(t)}else if(!e.isAtEnd){const i=t._clone(false);this.insert(ul._createAfter(t),i);const n=new hl(e,ul._createAt(t,"end"));const o=new ul(i,0);this.move(n,o)}return ul._createAfter(t)}mergeAttributes(e){const t=e.offset;const i=e.parent;if(i.is("$text")){return e}if(i.is("attributeElement")&&i.childCount===0){const e=i.parent;const t=i.index;i._remove();this._removeFromClonedElementsGroup(i);return this.mergeAttributes(new ul(e,t))}const n=i.getChild(t-1);const o=i.getChild(t);if(!n||!o){return e}if(n.is("$text")&&o.is("$text")){return nd(n,o)}else if(n.is("attributeElement")&&o.is("attributeElement")&&n.isSimilar(o)){const e=n.childCount;n._appendChild(o.getChildren());o._remove();this._removeFromClonedElementsGroup(o);return this.mergeAttributes(new ul(n,e))}return e}mergeContainers(e){const t=e.nodeBefore;const i=e.nodeAfter;if(!t||!i||!t.is("containerElement")||!i.is("containerElement")){throw new ss["b"]("view-writer-merge-containers-invalid-position: "+"Element before and after given position cannot be merged.",this.document)}const n=t.getChild(t.childCount-1);const o=n instanceof js?ul._createAt(n,"end"):ul._createAt(t,"end");this.move(hl._createIn(i),ul._createAt(t,"end"));this.remove(hl._createOn(i));return o}insert(e,t){t=vs(t)?[...t]:[t];od(t,this.document);const i=Xl(e);if(!i){throw new ss["b"]("view-writer-invalid-position-container: Position's parent container cannot be found.",this.document)}const n=this._breakAttributes(e,true);const o=i._insertChild(n.offset,t);for(const e of t){this._addToClonedElementsGroup(e)}const r=n.getShiftedBy(o);const s=this.mergeAttributes(n);if(o===0){return new hl(s,s)}else{if(!s.isEqual(n)){r.offset--}const e=this.mergeAttributes(r);return new hl(s,e)}}remove(e){const t=e instanceof hl?e:hl._createOn(e);ad(t,this.document);if(t.isCollapsed){return new Yl(this.document)}const{start:i,end:n}=this._breakAttributesRange(t,true);const o=i.parent;const r=n.offset-i.offset;const s=o._removeChildren(i.offset,r);for(const e of s){this._removeFromClonedElementsGroup(e)}const a=this.mergeAttributes(i);t.start=a;t.end=a.clone();return new Yl(this.document,s)}clear(e,t){ad(e,this.document);const i=e.getWalker({direction:"backward",ignoreElementEnd:true});for(const n of i){const i=n.item;let o;if(i.is("element")&&t.isSimilar(i)){o=hl._createOn(i)}else if(!n.nextPosition.isAfter(e.start)&&i.is("$textProxy")){const e=i.getAncestors().find(e=>e.is("element")&&t.isSimilar(e));if(e){o=hl._createIn(e)}}if(o){if(o.end.isAfter(e.end)){o.end=e.end}if(o.start.isBefore(e.start)){o.start=e.start}this.remove(o)}}}move(e,t){let i;if(t.isAfter(e.end)){t=this._breakAttributes(t,true);const n=t.parent;const o=n.childCount;e=this._breakAttributesRange(e,true);i=this.remove(e);t.offset+=n.childCount-o}else{i=this.remove(e)}return this.insert(t,i)}wrap(e,t){if(!(t instanceof kl)){throw new ss["b"]("view-writer-wrap-invalid-attribute: DowncastWriter#wrap() must be called with an attribute element.",this.document)}ad(e,this.document);if(!e.isCollapsed){return this._wrapRange(e,t)}else{let i=e.start;if(i.parent.is("element")&&!Jl(i.parent)){i=i.getLastMatchingPosition(e=>e.item.is("uiElement"))}i=this._wrapPosition(i,t);const n=this.document.selection;if(n.isCollapsed&&n.getFirstPosition().isEqual(e.start)){this.setSelection(i)}return new hl(i)}}unwrap(e,t){if(!(t instanceof kl)){throw new ss["b"]("view-writer-unwrap-invalid-attribute: DowncastWriter#unwrap() must be called with an attribute element.",this.document)}ad(e,this.document);if(e.isCollapsed){return e}const{start:i,end:n}=this._breakAttributesRange(e,true);const o=i.parent;const r=this._unwrapChildren(o,i.offset,n.offset,t);const s=this.mergeAttributes(r.start);if(!s.isEqual(r.start)){r.end.offset--}const a=this.mergeAttributes(r.end);return new hl(s,a)}rename(e,t){const i=new Hc(this.document,e,t.getAttributes());this.insert(ul._createAfter(t),i);this.move(hl._createIn(t),ul._createAt(i,0));this.remove(hl._createOn(t));return i}clearClonedElementsGroup(e){this._cloneGroups.delete(e)}createPositionAt(e,t){return ul._createAt(e,t)}createPositionAfter(e){return ul._createAfter(e)}createPositionBefore(e){return ul._createBefore(e)}createRange(e,t){return new hl(e,t)}createRangeOn(e){return hl._createOn(e)}createRangeIn(e){return hl._createIn(e)}createSelection(e,t,i){return new gl(e,t,i)}_wrapChildren(e,t,i,n){let o=t;const r=[];while(ofalse;e.parent._insertChild(e.offset,i);const n=new hl(e,e.getShiftedBy(1));this.wrap(n,t);const o=new ul(i.parent,i.index);i._remove();const r=o.nodeBefore;const s=o.nodeAfter;if(r instanceof js&&s instanceof js){return nd(r,s)}return td(o)}_wrapAttributeElement(e,t){if(!cd(e,t)){return false}if(e.name!==t.name||e.priority!==t.priority){return false}for(const i of e.getAttributeKeys()){if(i==="class"||i==="style"){continue}if(t.hasAttribute(i)&&t.getAttribute(i)!==e.getAttribute(i)){return false}}for(const i of e.getStyleNames()){if(t.hasStyle(i)&&t.getStyle(i)!==e.getStyle(i)){return false}}for(const i of e.getAttributeKeys()){if(i==="class"||i==="style"){continue}if(!t.hasAttribute(i)){this.setAttribute(i,e.getAttribute(i),t)}}for(const i of e.getStyleNames()){if(!t.hasStyle(i)){this.setStyle(i,e.getStyle(i),t)}}for(const i of e.getClassNames()){if(!t.hasClass(i)){this.addClass(i,t)}}return true}_unwrapAttributeElement(e,t){if(!cd(e,t)){return false}if(e.name!==t.name||e.priority!==t.priority){return false}for(const i of e.getAttributeKeys()){if(i==="class"||i==="style"){continue}if(!t.hasAttribute(i)||t.getAttribute(i)!==e.getAttribute(i)){return false}}if(!t.hasClass(...e.getClassNames())){return false}for(const i of e.getStyleNames()){if(!t.hasStyle(i)||t.getStyle(i)!==e.getStyle(i)){return false}}for(const i of e.getAttributeKeys()){if(i==="class"||i==="style"){continue}this.removeAttribute(i,t)}this.removeClass(Array.from(e.getClassNames()),t);this.removeStyle(Array.from(e.getStyleNames()),t);return true}_breakAttributesRange(e,t=false){const i=e.start;const n=e.end;ad(e,this.document);if(e.isCollapsed){const i=this._breakAttributes(e.start,t);return new hl(i,i)}const o=this._breakAttributes(n,t);const r=o.parent.childCount;const s=this._breakAttributes(i,t);o.offset+=o.parent.childCount-r;return new hl(s,o)}_breakAttributes(e,t=false){const i=e.offset;const n=e.parent;if(e.parent.is("emptyElement")){throw new ss["b"]("view-writer-cannot-break-empty-element: Cannot break an EmptyElement instance.",this.document)}if(e.parent.is("uiElement")){throw new ss["b"]("view-writer-cannot-break-ui-element: Cannot break a UIElement instance.",this.document)}if(e.parent.is("rawElement")){throw new ss["b"]("view-writer-cannot-break-raw-element: Cannot break a RawElement instance.",this.document)}if(!t&&n.is("$text")&&sd(n.parent)){return e.clone()}if(sd(n)){return e.clone()}if(n.is("$text")){return this._breakAttributes(id(e),t)}const o=n.childCount;if(i==o){const e=new ul(n.parent,n.index+1);return this._breakAttributes(e,t)}else{if(i===0){const e=new ul(n.parent,n.index);return this._breakAttributes(e,t)}else{const e=n.index+1;const o=n._clone();n.parent._insertChild(e,o);this._addToClonedElementsGroup(o);const r=n.childCount-i;const s=n._removeChildren(i,r);o._appendChild(s);const a=new ul(n.parent,e);return this._breakAttributes(a,t)}}}_addToClonedElementsGroup(e){if(!e.root.is("rootElement")){return}if(e.is("element")){for(const t of e.getChildren()){this._addToClonedElementsGroup(t)}}const t=e.id;if(!t){return}let i=this._cloneGroups.get(t);if(!i){i=new Set;this._cloneGroups.set(t,i)}i.add(e);e._clonesGroup=i}_removeFromClonedElementsGroup(e){if(e.is("element")){for(const t of e.getChildren()){this._removeFromClonedElementsGroup(t)}}const t=e.id;if(!t){return}const i=this._cloneGroups.get(t);if(!i){return}i.delete(e)}}function Jl(e){return Array.from(e.getChildren()).some(e=>!e.is("uiElement"))}function Xl(e){let t=e.parent;while(!sd(t)){if(!t){return undefined}t=t.parent}return t}function ed(e,t){if(e.priorityt.priority){return false}return e.getIdentity()i instanceof e)){throw new ss["b"]("view-writer-insert-invalid-node-type: One of the nodes to be inserted is of invalid type.",t)}if(!i.is("$text")){od(i.getChildren(),t)}}}const rd=[js,kl,Hc,yl,Gl,Ul];function sd(e){return e&&(e.is("containerElement")||e.is("documentFragment"))}function ad(e,t){const i=Xl(e.start);const n=Xl(e.end);if(!i||!n||i!==n){throw new ss["b"]("view-writer-invalid-range-container: The container of the given range is invalid.",t)}}function cd(e,t){return e.id===null&&t.id===null}function ld(e){return Object.prototype.toString.call(e)=="[object Text]"}const dd=e=>e.createTextNode(" ");const ud=e=>{const t=e.createElement("br");t.dataset.ckeFiller=true;return t};const hd=7;const fd=(()=>{let e="";for(let t=0;t0){i.push({index:n,type:"insert",values:e.slice(n,r)})}if(o-n>0){i.push({index:n+(r-n),type:"delete",howMany:o-n})}return i}function Ad(e,t){const{firstIndex:i,lastIndexOld:n,lastIndexNew:o}=e;if(i===-1){return Array(t).fill("equal")}let r=[];if(i>0){r=r.concat(Array(i).fill("equal"))}if(o-i>0){r=r.concat(Array(o-i).fill("insert"))}if(n-i>0){r=r.concat(Array(n-i).fill("delete"))}if(o200||o>200||n+o>300){return Cd.fastDiff(e,t,i,true)}let r,s;if(ol?-1:1;if(d[n+h]){d[n]=d[n+h].slice(0)}if(!d[n]){d[n]=[]}d[n].push(o>l?r:s);let f=Math.max(o,l);let m=f-n;while(ml;m--){u[m]=h(m)}u[l]=h(l);f++}while(u[l]!==c);return d[l].slice(1)}Cd.fastDiff=kd;function Td(e,t,i){e.insertBefore(i,e.childNodes[t]||null)}function Sd(e){const t=e.parentNode;if(t){t.removeChild(e)}}function Ed(e){if(e){if(e.defaultView){return e instanceof e.defaultView.Document}else if(e.ownerDocument&&e.ownerDocument.defaultView){return e instanceof e.ownerDocument.defaultView.Node}}return false}class Pd{constructor(e,t){this.domDocuments=new Set;this.domConverter=e;this.markedAttributes=new Set;this.markedChildren=new Set;this.markedTexts=new Set;this.selection=t;this.isFocused=false;this._inlineFiller=null;this._fakeSelectionContainer=null}markToSync(e,t){if(e==="text"){if(this.domConverter.mapViewToDom(t.parent)){this.markedTexts.add(t)}}else{if(!this.domConverter.mapViewToDom(t)){return}if(e==="attributes"){this.markedAttributes.add(t)}else if(e==="children"){this.markedChildren.add(t)}else{throw new ss["b"]("view-renderer-unknown-type: Unknown type passed to Renderer.markToSync.",this)}}}render(){let e;for(const e of this.markedChildren){this._updateChildrenMappings(e)}if(this._inlineFiller&&!this._isSelectionInInlineFiller()){this._removeInlineFiller()}if(this._inlineFiller){e=this._getInlineFillerPosition()}else if(this._needsInlineFillerAtSelection()){e=this.selection.getFirstPosition();this.markedChildren.add(e.parent)}for(const e of this.markedAttributes){this._updateAttrs(e)}for(const t of this.markedChildren){this._updateChildren(t,{inlineFillerPosition:e})}for(const t of this.markedTexts){if(!this.markedChildren.has(t.parent)&&this.domConverter.mapViewToDom(t.parent)){this._updateText(t,{inlineFillerPosition:e})}}if(e){const t=this.domConverter.viewPositionToDom(e);const i=t.parent.ownerDocument;if(!md(t.parent)){this._inlineFiller=Id(i,t.parent,t.offset)}else{this._inlineFiller=t.parent}}else{this._inlineFiller=null}this._updateSelection();this._updateFocus();this.markedTexts.clear();this.markedAttributes.clear();this.markedChildren.clear()}_updateChildrenMappings(e){const t=this.domConverter.mapViewToDom(e);if(!t){return}const i=this.domConverter.mapViewToDom(e).childNodes;const n=Array.from(this.domConverter.viewChildrenToDom(e,t.ownerDocument,{withChildren:false}));const o=this._diffNodeLists(i,n);const r=this._findReplaceActions(o,i,n);if(r.indexOf("replace")!==-1){const t={equal:0,insert:0,delete:0};for(const o of r){if(o==="replace"){const o=t.equal+t.insert;const r=t.equal+t.delete;const s=e.getChild(o);if(s&&!(s.is("uiElement")||s.is("rawElement"))){this._updateElementMappings(s,i[r])}Sd(n[o]);t.equal++}else{t[o]++}}}}_updateElementMappings(e,t){this.domConverter.unbindDomElement(t);this.domConverter.bindElements(t,e);this.markedChildren.add(e);this.markedAttributes.add(e)}_getInlineFillerPosition(){const e=this.selection.getFirstPosition();if(e.parent.is("$text")){return ul._createBefore(this.selection.getFirstPosition().parent)}else{return e}}_isSelectionInInlineFiller(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed){return false}const e=this.selection.getFirstPosition();const t=this.domConverter.viewPositionToDom(e);if(t&&ld(t.parent)&&md(t.parent)){return true}return false}_removeInlineFiller(){const e=this._inlineFiller;if(!md(e)){throw new ss["b"]("view-renderer-filler-was-lost: The inline filler node was lost.",this)}if(gd(e)){e.parentNode.removeChild(e)}else{e.data=e.data.substr(hd)}this._inlineFiller=null}_needsInlineFillerAtSelection(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed){return false}const e=this.selection.getFirstPosition();const t=e.parent;const i=e.offset;if(!this.domConverter.mapViewToDom(t.root)){return false}if(!t.is("element")){return false}if(!Md(t)){return false}if(i===t.getFillerOffset()){return false}const n=e.nodeBefore;const o=e.nodeAfter;if(n instanceof js||o instanceof js){return false}return true}_updateText(e,t){const i=this.domConverter.findCorrespondingDomText(e);const n=this.domConverter.viewToDom(e,i.ownerDocument);const o=i.data;let r=n.data;const s=t.inlineFillerPosition;if(s&&s.parent==e.parent&&s.offset==e.index){r=fd+r}if(o!=r){const e=kd(o,r);for(const t of e){if(t.type==="insert"){i.insertData(t.index,t.values.join(""))}else{i.deleteData(t.index,t.howMany)}}}}_updateAttrs(e){const t=this.domConverter.mapViewToDom(e);if(!t){return}const i=Array.from(t.attributes).map(e=>e.name);const n=e.getAttributeKeys();for(const i of n){t.setAttribute(i,e.getAttribute(i))}for(const n of i){if(!e.hasAttribute(n)){t.removeAttribute(n)}}}_updateChildren(e,t){const i=this.domConverter.mapViewToDom(e);if(!i){return}const n=t.inlineFillerPosition;const o=this.domConverter.mapViewToDom(e).childNodes;const r=Array.from(this.domConverter.viewChildrenToDom(e,i.ownerDocument,{bind:true,inlineFillerPosition:n}));if(n&&n.parent===e){Id(i.ownerDocument,r,n.offset)}const s=this._diffNodeLists(o,r);let a=0;const c=new Set;for(const e of s){if(e==="delete"){c.add(o[a]);Sd(o[a])}else if(e==="equal"){a++}}a=0;for(const e of s){if(e==="insert"){Td(i,a,r[a]);a++}else if(e==="equal"){this._markDescendantTextToSync(this.domConverter.domToView(r[a]));a++}}for(const e of c){if(!e.parentNode){this.domConverter.unbindDomElement(e)}}}_diffNodeLists(e,t){e=Rd(e,this._fakeSelectionContainer);return Cd(e,t,Nd.bind(null,this.domConverter))}_findReplaceActions(e,t,i){if(e.indexOf("insert")===-1||e.indexOf("delete")===-1){return e}let n=[];let o=[];let r=[];const s={equal:0,insert:0,delete:0};for(const a of e){if(a==="insert"){r.push(i[s.equal+s.insert])}else if(a==="delete"){o.push(t[s.equal+s.delete])}else{n=n.concat(Cd(o,r,Ld).map(e=>e==="equal"?"replace":e));n.push("equal");o=[];r=[]}s[a]++}return n.concat(Cd(o,r,Ld).map(e=>e==="equal"?"replace":e))}_markDescendantTextToSync(e){if(!e){return}if(e.is("$text")){this.markedTexts.add(e)}else if(e.is("element")){for(const t of e.getChildren()){this._markDescendantTextToSync(t)}}}_updateSelection(){if(this.selection.rangeCount===0){this._removeDomSelection();this._removeFakeSelection();return}const e=this.domConverter.mapViewToDom(this.selection.editableElement);if(!this.isFocused||!e){return}if(this.selection.isFake){this._updateFakeSelection(e)}else{this._removeFakeSelection();this._updateDomSelection(e)}}_updateFakeSelection(e){const t=e.ownerDocument;if(!this._fakeSelectionContainer){this._fakeSelectionContainer=Od(t)}const i=this._fakeSelectionContainer;this.domConverter.bindFakeSelection(i,this.selection);if(!this._fakeSelectionNeedsUpdate(e)){return}if(!i.parentElement||i.parentElement!=e){e.appendChild(i)}i.textContent=this.selection.fakeSelectionLabel||" ";const n=t.getSelection();const o=t.createRange();n.removeAllRanges();o.selectNodeContents(i);n.addRange(o)}_updateDomSelection(e){const t=e.ownerDocument.defaultView.getSelection();if(!this._domSelectionNeedsUpdate(t)){return}const i=this.domConverter.viewPositionToDom(this.selection.anchor);const n=this.domConverter.viewPositionToDom(this.selection.focus);e.focus();t.collapse(i.parent,i.offset);t.extend(n.parent,n.offset);if(Tl.isGecko){zd(n,t)}}_domSelectionNeedsUpdate(e){if(!this.domConverter.isDomSelectionCorrect(e)){return true}const t=e&&this.domConverter.domSelectionToView(e);if(t&&this.selection.isEqual(t)){return false}if(!this.selection.isCollapsed&&this.selection.isSimilar(t)){return false}return true}_fakeSelectionNeedsUpdate(e){const t=this._fakeSelectionContainer;const i=e.ownerDocument.getSelection();if(!t||t.parentElement!==e){return true}if(i.anchorNode!==t&&!t.contains(i.anchorNode)){return true}return t.textContent!==this.selection.fakeSelectionLabel}_removeDomSelection(){for(const e of this.domDocuments){const t=e.getSelection();if(t.rangeCount){const t=e.activeElement;const i=this.domConverter.mapDomToView(t);if(t&&i){e.getSelection().removeAllRanges()}}}}_removeFakeSelection(){const e=this._fakeSelectionContainer;if(e){e.remove()}}_updateFocus(){if(this.isFocused){const e=this.selection.editableElement;if(e){this.domConverter.focus(e)}}}}ys(Pd,Zc);function Md(e){if(e.getAttribute("contenteditable")=="false"){return false}const t=e.findAncestor(e=>e.hasAttribute("contenteditable"));return!t||t.getAttribute("contenteditable")=="true"}function Id(e,t,i){const n=t instanceof Array?t:t.childNodes;const o=n[i];if(ld(o)){o.data=fd+o.data;return o}else{const o=e.createTextNode(fd);if(Array.isArray(t)){n.splice(i,0,o)}else{Td(t,i,o)}return o}}function Ld(e,t){return Ed(e)&&Ed(t)&&!ld(e)&&!ld(t)&&e.nodeType!==Node.COMMENT_NODE&&t.nodeType!==Node.COMMENT_NODE&&e.tagName.toLowerCase()===t.tagName.toLowerCase()}function Nd(e,t,i){if(t===i){return true}else if(ld(t)&&ld(i)){return t.data===i.data}else if(e.isBlockFiller(t)&&e.isBlockFiller(i)){return true}return false}function zd(e,t){const i=e.parent;if(i.nodeType!=Node.ELEMENT_NODE||e.offset!=i.childNodes.length-1){return}const n=i.childNodes[e.offset];if(n&&n.tagName=="BR"){t.addRange(t.getRangeAt(0))}}function Rd(e,t){const i=Array.from(e);if(i.length==0||!t){return i}const n=i[i.length-1];if(n==t){i.pop()}return i}function Od(e){const t=e.createElement("div");Object.assign(t.style,{position:"fixed",top:0,left:"-9999px",width:"42px"});t.textContent=" ";return t}var Vd={window:window,document:document};function Dd(e){let t=0;while(e.previousSibling){e=e.previousSibling;t++}return t}function Bd(e){const t=[];while(e&&e.nodeType!=Node.DOCUMENT_NODE){t.unshift(e);e=e.parentNode}return t}function jd(e,t){const i=Bd(e);const n=Bd(t);let o=0;while(i[o]==n[o]&&i[o]){o++}return o===0?null:i[o-1]}const Fd=ud(document);class Hd{constructor(e,t={}){this.document=e;this.blockFillerMode=t.blockFillerMode||"br";this.preElements=["pre"];this.blockElements=["p","div","h1","h2","h3","h4","h5","h6","li","dd","dt","figcaption","td","th"];this._blockFiller=this.blockFillerMode=="br"?ud:dd;this._domToViewMapping=new WeakMap;this._viewToDomMapping=new WeakMap;this._fakeSelectionMapping=new WeakMap}bindFakeSelection(e,t){this._fakeSelectionMapping.set(e,new gl(t))}fakeSelectionToView(e){return this._fakeSelectionMapping.get(e)}bindElements(e,t){this._domToViewMapping.set(e,t);this._viewToDomMapping.set(t,e)}unbindDomElement(e){const t=this._domToViewMapping.get(e);if(t){this._domToViewMapping.delete(e);this._viewToDomMapping.delete(t);for(const t of e.childNodes){this.unbindDomElement(t)}}}bindDocumentFragments(e,t){this._domToViewMapping.set(e,t);this._viewToDomMapping.set(t,e)}viewToDom(e,t,i={}){if(e.is("$text")){const i=this._processDataFromViewText(e);return t.createTextNode(i)}else{if(this.mapViewToDom(e)){return this.mapViewToDom(e)}let n;if(e.is("documentFragment")){n=t.createDocumentFragment();if(i.bind){this.bindDocumentFragments(n,e)}}else if(e.is("uiElement")){n=e.render(t);if(i.bind){this.bindElements(n,e)}return n}else{if(e.hasAttribute("xmlns")){n=t.createElementNS(e.getAttribute("xmlns"),e.name)}else{n=t.createElement(e.name)}if(e.is("rawElement")){e.render(n)}if(i.bind){this.bindElements(n,e)}for(const t of e.getAttributeKeys()){n.setAttribute(t,e.getAttribute(t))}}if(i.withChildren||i.withChildren===undefined){for(const o of this.viewChildrenToDom(e,t,i)){n.appendChild(o)}}return n}}*viewChildrenToDom(e,t,i={}){const n=e.getFillerOffset&&e.getFillerOffset();let o=0;for(const r of e.getChildren()){if(n===o){yield this._blockFiller(t)}yield this.viewToDom(r,t,i);o++}if(n===o){yield this._blockFiller(t)}}viewRangeToDom(e){const t=this.viewPositionToDom(e.start);const i=this.viewPositionToDom(e.end);const n=document.createRange();n.setStart(t.parent,t.offset);n.setEnd(i.parent,i.offset);return n}viewPositionToDom(e){const t=e.parent;if(t.is("$text")){const i=this.findCorrespondingDomText(t);if(!i){return null}let n=e.offset;if(md(i)){n+=hd}return{parent:i,offset:n}}else{let i,n,o;if(e.offset===0){i=this.mapViewToDom(t);if(!i){return null}o=i.childNodes[0]}else{const t=e.nodeBefore;n=t.is("$text")?this.findCorrespondingDomText(t):this.mapViewToDom(e.nodeBefore);if(!n){return null}i=n.parentNode;o=n.nextSibling}if(ld(o)&&md(o)){return{parent:o,offset:hd}}const r=n?Dd(n)+1:0;return{parent:i,offset:r}}}domToView(e,t={}){if(this.isBlockFiller(e,this.blockFillerMode)){return null}const i=this.getHostViewElement(e,this._domToViewMapping);if(i){return i}if(ld(e)){if(gd(e)){return null}else{const t=this._processDataFromDomText(e);return t===""?null:new js(this.document,t)}}else if(this.isComment(e)){return null}else{if(this.mapDomToView(e)){return this.mapDomToView(e)}let i;if(this.isDocumentFragment(e)){i=new Yl(this.document);if(t.bind){this.bindDocumentFragments(e,i)}}else{const n=t.keepOriginalCase?e.tagName:e.tagName.toLowerCase();i=new Dc(this.document,n);if(t.bind){this.bindElements(e,i)}const o=e.attributes;for(let e=o.length-1;e>=0;e--){i._setAttribute(o[e].name,o[e].value)}}if(t.withChildren||t.withChildren===undefined){for(const n of this.domChildrenToView(e,t)){i._appendChild(n)}}return i}}*domChildrenToView(e,t={}){for(let i=0;i{const{scrollLeft:t,scrollTop:i}=e;n.push([t,i])});t.focus();Wd(t,e=>{const[t,i]=n.shift();e.scrollLeft=t;e.scrollTop=i});Vd.window.scrollTo(e,i)}}isElement(e){return e&&e.nodeType==Node.ELEMENT_NODE}isDocumentFragment(e){return e&&e.nodeType==Node.DOCUMENT_FRAGMENT_NODE}isComment(e){return e&&e.nodeType==Node.COMMENT_NODE}isBlockFiller(e){if(this.blockFillerMode=="br"){return e.isEqualNode(Fd)}if(e.tagName==="BR"&&$d(e,this.blockElements)&&e.parentNode.childNodes.length===1){return true}return qd(e,this.blockElements)}isDomSelectionBackward(e){if(e.isCollapsed){return false}const t=document.createRange();t.setStart(e.anchorNode,e.anchorOffset);t.setEnd(e.focusNode,e.focusOffset);const i=t.collapsed;t.detach();return i}getHostViewElement(e){const t=Bd(e);t.pop();while(t.length){const e=t.pop();const i=this._domToViewMapping.get(e);if(i&&(i.is("uiElement")||i.is("rawElement"))){return i}}return null}isDomSelectionCorrect(e){return this._isDomSelectionPositionCorrect(e.anchorNode,e.anchorOffset)&&this._isDomSelectionPositionCorrect(e.focusNode,e.focusOffset)}_isDomSelectionPositionCorrect(e,t){if(ld(e)&&md(e)&&tthis.preElements.includes(e.name))){return t}if(t.charAt(0)==" "){const i=this._getTouchingViewTextNode(e,false);const n=i&&this._nodeEndsWithSpace(i);if(n||!i){t=" "+t.substr(1)}}if(t.charAt(t.length-1)==" "){const i=this._getTouchingViewTextNode(e,true);if(t.charAt(t.length-2)==" "||!i||i.data.charAt(0)==" "){t=t.substr(0,t.length-1)+" "}}return t.replace(/ {2}/g,"  ")}_nodeEndsWithSpace(e){if(e.getAncestors().some(e=>this.preElements.includes(e.name))){return false}const t=this._processDataFromViewText(e);return t.charAt(t.length-1)==" "}_processDataFromDomText(e){let t=e.data;if(Ud(e,this.preElements)){return pd(e)}t=t.replace(/[ \n\t\r]{1,}/g," ");const i=this._getTouchingInlineDomNode(e,false);const n=this._getTouchingInlineDomNode(e,true);const o=this._checkShouldLeftTrimDomText(i);const r=this._checkShouldRightTrimDomText(e,n);if(o){t=t.replace(/^ /,"")}if(r){t=t.replace(/ $/,"")}t=pd(new Text(t));t=t.replace(/ \u00A0/g," ");if(/( |\u00A0)\u00A0$/.test(t)||!n||n.data&&n.data.charAt(0)==" "){t=t.replace(/\u00A0$/," ")}if(o){t=t.replace(/^\u00A0/," ")}return t}_checkShouldLeftTrimDomText(e){if(!e){return true}if(Kr(e)){return true}return/[^\S\u00A0]/.test(e.data.charAt(e.data.length-1))}_checkShouldRightTrimDomText(e,t){if(t){return false}return!md(e)}_getTouchingViewTextNode(e,t){const i=new dl({startPosition:t?ul._createAfter(e):ul._createBefore(e),direction:t?"forward":"backward"});for(const e of i){if(e.item.is("containerElement")){return null}else if(e.item.is("element","br")){return null}else if(e.item.is("$textProxy")){return e.item}}return null}_getTouchingInlineDomNode(e,t){if(!e.parentNode){return null}const i=t?"nextNode":"previousNode";const n=e.ownerDocument;const o=Bd(e)[0];const r=n.createTreeWalker(o,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,{acceptNode(e){if(ld(e)){return NodeFilter.FILTER_ACCEPT}if(e.tagName=="BR"){return NodeFilter.FILTER_ACCEPT}return NodeFilter.FILTER_SKIP}});r.currentNode=e;const s=r[i]();if(s!==null){const t=jd(e,s);if(t&&!Ud(e,this.blockElements,t)&&!Ud(s,this.blockElements,t)){return s}}return null}}function Ud(e,t,i){let n=Bd(e);if(i){n=n.slice(n.indexOf(i)+1)}return n.some(e=>e.tagName&&t.includes(e.tagName.toLowerCase()))}function Wd(e,t){while(e&&e!=Vd.document){t(e);e=e.parentNode}}function qd(e,t){const i=ld(e)&&e.data==" ";return i&&$d(e,t)&&e.parentNode.childNodes.length===1}function $d(e,t){const i=e.parentNode;return i&&i.tagName&&t.includes(i.tagName.toLowerCase())}function Gd(e){const t=Object.prototype.toString.apply(e);if(t=="[object Window]"){return true}if(t=="[object global]"){return true}return false}const Kd=qc({},ds,{listenTo(e,...t){if(Ed(e)||Gd(e)){const i=this._getProxyEmitter(e)||new Zd(e);i.attach(...t);e=i}ds.listenTo.call(this,e,...t)},stopListening(e,t,i){if(Ed(e)||Gd(e)){const t=this._getProxyEmitter(e);if(!t){return}e=t}ds.stopListening.call(this,e,t,i);if(e instanceof Zd){e.detach(t)}},_getProxyEmitter(e){return us(this,Qd(e))}});var Yd=Kd;class Zd{constructor(e){hs(this,Qd(e));this._domNode=e}}qc(Zd.prototype,ds,{attach(e,t,i={}){if(this._domListeners&&this._domListeners[e]){return}const n={capture:!!i.useCapture,passive:!!i.usePassive};const o=this._createDomListener(e,n);this._domNode.addEventListener(e,o,n);if(!this._domListeners){this._domListeners={}}this._domListeners[e]=o},detach(e){let t;if(this._domListeners[e]&&(!(t=this._events[e])||!t.callbacks.length)){this._domListeners[e].removeListener()}},_createDomListener(e,t){const i=t=>{this.fire(e,t)};i.removeListener=()=>{this._domNode.removeEventListener(e,i,t);delete this._domListeners[e]};return i}});function Qd(e){return e["data-ck-expando"]||(e["data-ck-expando"]=is())}class Jd{constructor(e){this.view=e;this.document=e.document;this.isEnabled=false}enable(){this.isEnabled=true}disable(){this.isEnabled=false}destroy(){this.disable();this.stopListening()}}ys(Jd,Yd);var Xd="__lodash_hash_undefined__";function eu(e){this.__data__.set(e,Xd);return this}var tu=eu;function iu(e){return this.__data__.has(e)}var nu=iu;function ou(e){var t=-1,i=e==null?0:e.length;this.__data__=new _t;while(++ta)){return false}var l=r.get(e);if(l&&r.get(t)){return l==t}var d=-1,u=true,h=i&uu?new ru:undefined;r.set(e,t);r.set(t,e);while(++d{this.listenTo(e,t,(e,t)=>{if(this.isEnabled){this.onDomEvent(t)}},{useCapture:this.useCapture})})}fire(e,t,i){if(this.isEnabled){this.document.fire(e,new Xu(this.view,t,i))}}}class th extends eh{constructor(e){super(e);this.domEventType=["keydown","keyup"]}onDomEvent(e){this.fire(e.type,e,{keyCode:e.keyCode,altKey:e.altKey,ctrlKey:e.ctrlKey||e.metaKey,shiftKey:e.shiftKey,get keystroke(){return Rl(this)}})}}var ih=function(){return n["a"].Date.now()};var nh=ih;var oh=0/0;var rh=/^\s+|\s+$/g;var sh=/^[-+]0x[0-9a-f]+$/i;var ah=/^0b[01]+$/i;var ch=/^0o[0-7]+$/i;var lh=parseInt;function dh(e){if(typeof e=="number"){return e}if(Js(e)){return oh}if(ce(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=ce(t)?t+"":t}if(typeof e!="string"){return e===0?e:+e}e=e.replace(rh,"");var i=ah.test(e);return i||ch.test(e)?lh(e.slice(2),i?2:8):sh.test(e)?oh:+e}var uh=dh;var hh="Expected a function";var fh=Math.max,mh=Math.min;function gh(e,t,i){var n,o,r,s,a,c,l=0,d=false,u=false,h=true;if(typeof e!="function"){throw new TypeError(hh)}t=uh(t)||0;if(ce(i)){d=!!i.leading;u="maxWait"in i;r=u?fh(uh(i.maxWait)||0,t):r;h="trailing"in i?!!i.trailing:h}function f(t){var i=n,r=o;n=o=undefined;l=t;s=e.apply(r,i);return s}function m(e){l=e;a=setTimeout(b,t);return d?f(e):s}function g(e){var i=e-c,n=e-l,o=t-i;return u?mh(o,r-n):o}function p(e){var i=e-c,n=e-l;return c===undefined||i>=t||i<0||u&&n>=r}function b(){var e=nh();if(p(e)){return w(e)}a=setTimeout(b,g(e))}function w(e){a=undefined;if(h&&n){return f(e)}n=o=undefined;return s}function k(){if(a!==undefined){clearTimeout(a)}l=0;n=c=o=a=undefined}function _(){return a===undefined?s:w(nh())}function v(){var e=nh(),i=p(e);n=arguments;o=this;c=e;if(i){if(a===undefined){return m(c)}if(u){clearTimeout(a);a=setTimeout(b,t);return f(c)}}if(a===undefined){a=setTimeout(b,t)}return s}v.cancel=k;v.flush=_;return v}var ph=gh;class bh extends Jd{constructor(e){super(e);this._fireSelectionChangeDoneDebounced=ph(e=>this.document.fire("selectionChangeDone",e),200)}observe(){const e=this.document;e.on("keydown",(t,i)=>{const n=e.selection;if(n.isFake&&wh(i.keyCode)&&this.isEnabled){i.preventDefault();this._handleSelectionMove(i.keyCode)}},{priority:"lowest"})}destroy(){super.destroy();this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionMove(e){const t=this.document.selection;const i=new gl(t.getRanges(),{backward:t.isBackward,fake:false});if(e==zl.arrowleft||e==zl.arrowup){i.setTo(i.getFirstPosition())}if(e==zl.arrowright||e==zl.arrowdown){i.setTo(i.getLastPosition())}const n={oldSelection:t,newSelection:i,domSelection:null};this.document.fire("selectionChange",n);this._fireSelectionChangeDoneDebounced(n)}}function wh(e){return e==zl.arrowright||e==zl.arrowleft||e==zl.arrowup||e==zl.arrowdown}class kh extends Jd{constructor(e){super(e);this.mutationObserver=e.getObserver(Ju);this.selection=this.document.selection;this.domConverter=e.domConverter;this._documents=new WeakSet;this._fireSelectionChangeDoneDebounced=ph(e=>this.document.fire("selectionChangeDone",e),200);this._clearInfiniteLoopInterval=setInterval(()=>this._clearInfiniteLoop(),1e3);this._loopbackCounter=0}observe(e){const t=e.ownerDocument;if(this._documents.has(t)){return}this.listenTo(t,"selectionchange",()=>{this._handleSelectionChange(t)});this._documents.add(t)}destroy(){super.destroy();clearInterval(this._clearInfiniteLoopInterval);this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionChange(e){if(!this.isEnabled){return}this.mutationObserver.flush();const t=e.defaultView.getSelection();const i=this.domConverter.domSelectionToView(t);if(i.rangeCount==0){this.view.hasDomSelection=false;return}this.view.hasDomSelection=true;if(this.selection.isEqual(i)&&this.domConverter.isDomSelectionCorrect(t)){return}if(++this._loopbackCounter>60){return}if(this.selection.isSimilar(i)){this.view.forceRender()}else{const e={oldSelection:this.selection,newSelection:i,domSelection:t};this.document.fire("selectionChange",e);this._fireSelectionChangeDoneDebounced(e)}}_clearInfiniteLoop(){this._loopbackCounter=0}}class _h extends eh{constructor(e){super(e);this.domEventType=["focus","blur"];this.useCapture=true;const t=this.document;t.on("focus",()=>{t.isFocused=true;this._renderTimeoutId=setTimeout(()=>e.forceRender(),50)});t.on("blur",(i,n)=>{const o=t.selection.editableElement;if(o===null||o===n.target){t.isFocused=false;e.forceRender()}})}onDomEvent(e){this.fire(e.type,e)}destroy(){if(this._renderTimeoutId){clearTimeout(this._renderTimeoutId)}super.destroy()}}class vh extends eh{constructor(e){super(e);this.domEventType=["compositionstart","compositionupdate","compositionend"];const t=this.document;t.on("compositionstart",()=>{t.isComposing=true});t.on("compositionend",()=>{t.isComposing=false})}onDomEvent(e){this.fire(e.type,e)}}class yh extends eh{constructor(e){super(e);this.domEventType=["beforeinput"]}onDomEvent(e){this.fire(e.type,e)}}function xh(e){return Object.prototype.toString.apply(e)=="[object Range]"}function Ah(e){const t=e.ownerDocument.defaultView.getComputedStyle(e);return{top:parseInt(t.borderTopWidth,10),right:parseInt(t.borderRightWidth,10),bottom:parseInt(t.borderBottomWidth,10),left:parseInt(t.borderLeftWidth,10)}}const Ch=["top","right","bottom","left","width","height"];class Th{constructor(e){const t=xh(e);Object.defineProperty(this,"_source",{value:e._source||e,writable:true,enumerable:false});if(Kr(e)||t){if(t){const t=Th.getDomRangeRects(e);Sh(this,Th.getBoundingRect(t))}else{Sh(this,e.getBoundingClientRect())}}else if(Gd(e)){const{innerWidth:t,innerHeight:i}=e;Sh(this,{top:0,right:t,bottom:i,left:0,width:t,height:i})}else{Sh(this,e)}}clone(){return new Th(this)}moveTo(e,t){this.top=t;this.right=e+this.width;this.bottom=t+this.height;this.left=e;return this}moveBy(e,t){this.top+=t;this.right+=e;this.left+=e;this.bottom+=t;return this}getIntersection(e){const t={top:Math.max(this.top,e.top),right:Math.min(this.right,e.right),bottom:Math.min(this.bottom,e.bottom),left:Math.max(this.left,e.left)};t.width=t.right-t.left;t.height=t.bottom-t.top;if(t.width<0||t.height<0){return null}else{return new Th(t)}}getIntersectionArea(e){const t=this.getIntersection(e);if(t){return t.getArea()}else{return 0}}getArea(){return this.width*this.height}getVisible(){const e=this._source;let t=this.clone();if(!Eh(e)){let i=e.parentNode||e.commonAncestorContainer;while(i&&!Eh(i)){const e=new Th(i);const n=t.getIntersection(e);if(n){if(n.getArea()jh(e,n));const s=jh(e,n);Lh(n,s,t);if(n.parent!=n){o=n.frameElement;n=n.parent;if(!o){return}}else{n=null}}}function Ih(e){const t=Bh(e);Nh(t,()=>new Th(e))}Object.assign(Ph,{scrollViewportToShowTarget:Mh,scrollAncestorsToShowTarget:Ih});function Lh(e,t,i){const n=t.clone().moveBy(0,i);const o=t.clone().moveBy(0,-i);const r=new Th(e).excludeScrollbarsAndBorders();const s=[o,n];if(!s.every(e=>r.contains(e))){let{scrollX:s,scrollY:a}=e;if(Rh(o,r)){a-=r.top-t.top+i}else if(zh(n,r)){a+=t.bottom-r.bottom+i}if(Oh(t,r)){s-=r.left-t.left+i}else if(Vh(t,r)){s+=t.right-r.right+i}e.scrollTo(s,a)}}function Nh(e,t){const i=Dh(e);let n,o;while(e!=i.document.body){o=t();n=new Th(e).excludeScrollbarsAndBorders();if(!n.contains(o)){if(Rh(o,n)){e.scrollTop-=n.top-o.top}else if(zh(o,n)){e.scrollTop+=o.bottom-n.bottom}if(Oh(o,n)){e.scrollLeft-=n.left-o.left}else if(Vh(o,n)){e.scrollLeft+=o.right-n.right}}e=e.parentNode}}function zh(e,t){return e.bottom>t.bottom}function Rh(e,t){return e.topt.right}function Dh(e){if(xh(e)){return e.startContainer.ownerDocument.defaultView}else{return e.ownerDocument.defaultView}}function Bh(e){if(xh(e)){let t=e.commonAncestorContainer;if(ld(t)){t=t.parentNode}return t}else{return e.parentNode}}function jh(e,t){const i=Dh(e);const n=new Th(e);if(i===t){return n}else{let e=i;while(e!=t){const t=e.frameElement;const i=new Th(t).excludeScrollbarsAndBorders();n.moveBy(i.left,i.top);e=e.parent}}return n}class Fh{constructor(e){this.document=new bl(e);this.domConverter=new Hd(this.document);this.domRoots=new Map;this.set("isRenderingInProgress",false);this.set("hasDomSelection",false);this._renderer=new Pd(this.domConverter,this.document.selection);this._renderer.bind("isFocused").to(this.document);this._initialDomRootAttributes=new WeakMap;this._observers=new Map;this._ongoingChange=false;this._postFixersInProgress=false;this._renderingDisabled=false;this._hasChangedSinceTheLastRendering=false;this._writer=new Ql(this.document);this.addObserver(Ju);this.addObserver(kh);this.addObserver(_h);this.addObserver(th);this.addObserver(bh);this.addObserver(vh);if(Tl.isAndroid){this.addObserver(yh)}bd(this);Wl(this);this.on("render",()=>{this._render();this.document.fire("layoutChanged");this._hasChangedSinceTheLastRendering=false});this.listenTo(this.document.selection,"change",()=>{this._hasChangedSinceTheLastRendering=true})}attachDomRoot(e,t="main"){const i=this.document.getRoot(t);i._name=e.tagName.toLowerCase();const n={};for(const{name:t,value:o}of Array.from(e.attributes)){n[t]=o;if(t==="class"){this._writer.addClass(o.split(" "),i)}else{this._writer.setAttribute(t,o,i)}}this._initialDomRootAttributes.set(e,n);const o=()=>{this._writer.setAttribute("contenteditable",!i.isReadOnly,i);if(i.isReadOnly){this._writer.addClass("ck-read-only",i)}else{this._writer.removeClass("ck-read-only",i)}};o();this.domRoots.set(t,e);this.domConverter.bindElements(e,i);this._renderer.markToSync("children",i);this._renderer.markToSync("attributes",i);this._renderer.domDocuments.add(e.ownerDocument);i.on("change:children",(e,t)=>this._renderer.markToSync("children",t));i.on("change:attributes",(e,t)=>this._renderer.markToSync("attributes",t));i.on("change:text",(e,t)=>this._renderer.markToSync("text",t));i.on("change:isReadOnly",()=>this.change(o));i.on("change",()=>{this._hasChangedSinceTheLastRendering=true});for(const i of this._observers.values()){i.observe(e,t)}}detachDomRoot(e){const t=this.domRoots.get(e);Array.from(t.attributes).forEach(({name:e})=>t.removeAttribute(e));const i=this._initialDomRootAttributes.get(t);for(const e in i){t.setAttribute(e,i[e])}this.domRoots.delete(e);this.domConverter.unbindDomElement(t)}getDomRoot(e="main"){return this.domRoots.get(e)}addObserver(e){let t=this._observers.get(e);if(t){return t}t=new e(this);this._observers.set(e,t);for(const[e,i]of this.domRoots){t.observe(i,e)}t.enable();return t}getObserver(e){return this._observers.get(e)}disableObservers(){for(const e of this._observers.values()){e.disable()}}enableObservers(){for(const e of this._observers.values()){e.enable()}}scrollToTheSelection(){const e=this.document.selection.getFirstRange();if(e){Mh({target:this.domConverter.viewRangeToDom(e),viewportOffset:20})}}focus(){if(!this.document.isFocused){const e=this.document.selection.editableElement;if(e){this.domConverter.focus(e);this.forceRender()}else{}}}change(e){if(this.isRenderingInProgress||this._postFixersInProgress){throw new ss["b"]("cannot-change-view-tree: "+"Attempting to make changes to the view when it is in an incorrect state: rendering or post-fixers are in progress. "+"This may cause some unexpected behavior and inconsistency between the DOM and the view.",this)}try{if(this._ongoingChange){return e(this._writer)}this._ongoingChange=true;const t=e(this._writer);this._ongoingChange=false;if(!this._renderingDisabled&&this._hasChangedSinceTheLastRendering){this._postFixersInProgress=true;this.document._callPostFixers(this._writer);this._postFixersInProgress=false;this.fire("render")}return t}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}forceRender(){this._hasChangedSinceTheLastRendering=true;this.change(()=>{})}destroy(){for(const e of this._observers.values()){e.destroy()}this.document.destroy();this.stopListening()}createPositionAt(e,t){return ul._createAt(e,t)}createPositionAfter(e){return ul._createAfter(e)}createPositionBefore(e){return ul._createBefore(e)}createRange(e,t){return new hl(e,t)}createRangeOn(e){return hl._createOn(e)}createRangeIn(e){return hl._createIn(e)}createSelection(e,t,i){return new gl(e,t,i)}_disableRendering(e){this._renderingDisabled=e;if(e==false){this.change(()=>{})}}_render(){this.isRenderingInProgress=true;this.disableObservers();this._renderer.render();this.enableObservers();this.isRenderingInProgress=false}}ys(Fh,Zc);class Hh{constructor(e){this.parent=null;this._attrs=Us(e)}get index(){let e;if(!this.parent){return null}if((e=this.parent.getChildIndex(this))===null){throw new ss["b"]("model-node-not-found-in-parent: The node's parent does not contain this node.",this)}return e}get startOffset(){let e;if(!this.parent){return null}if((e=this.parent.getChildStartOffset(this))===null){throw new ss["b"]("model-node-not-found-in-parent: The node's parent does not contain this node.",this)}return e}get offsetSize(){return 1}get endOffset(){if(!this.parent){return null}return this.startOffset+this.offsetSize}get nextSibling(){const e=this.index;return e!==null&&this.parent.getChild(e+1)||null}get previousSibling(){const e=this.index;return e!==null&&this.parent.getChild(e-1)||null}get root(){let e=this;while(e.parent){e=e.parent}return e}isAttached(){return this.root.is("rootElement")}getPath(){const e=[];let t=this;while(t.parent){e.unshift(t.startOffset);t=t.parent}return e}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let i=e.includeSelf?this:this.parent;while(i){t[e.parentFirst?"push":"unshift"](i);i=i.parent}return t}getCommonAncestor(e,t={}){const i=this.getAncestors(t);const n=e.getAncestors(t);let o=0;while(i[o]==n[o]&&i[o]){o++}return o===0?null:i[o-1]}isBefore(e){if(this==e){return false}if(this.root!==e.root){return false}const t=this.getPath();const i=e.getPath();const n=Rs(t,i);switch(n){case"prefix":return true;case"extension":return false;default:return t[n]{e[t[0]]=t[1];return e},{})}return e}is(e){return e==="node"||e==="model:node"}_clone(){return new Hh(this._attrs)}_remove(){this.parent._removeChildren(this.index)}_setAttribute(e,t){this._attrs.set(e,t)}_setAttributesTo(e){this._attrs=Us(e)}_removeAttribute(e){return this._attrs.delete(e)}_clearAttributes(){this._attrs.clear()}}class Uh extends Hh{constructor(e,t){super(t);this._data=e||""}get offsetSize(){return this.data.length}get data(){return this._data}is(e){return e==="$text"||e==="model:$text"||e==="text"||e==="model:text"||e==="node"||e==="model:node"}toJSON(){const e=super.toJSON();e.data=this.data;return e}_clone(){return new Uh(this.data,this.getAttributes())}static fromJSON(e){return new Uh(e.data,e.attributes)}}class Wh{constructor(e,t,i){this.textNode=e;if(t<0||t>e.offsetSize){throw new ss["b"]("model-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.",this)}if(i<0||t+i>e.offsetSize){throw new ss["b"]("model-textproxy-wrong-length: Given length value is incorrect.",this)}this.data=e.data.substring(t,t+i);this.offsetInText=t}get startOffset(){return this.textNode.startOffset!==null?this.textNode.startOffset+this.offsetInText:null}get offsetSize(){return this.data.length}get endOffset(){return this.startOffset!==null?this.startOffset+this.offsetSize:null}get isPartial(){return this.offsetSize!==this.textNode.offsetSize}get parent(){return this.textNode.parent}get root(){return this.textNode.root}is(e){return e==="$textProxy"||e==="model:$textProxy"||e==="textProxy"||e==="model:textProxy"}getPath(){const e=this.textNode.getPath();if(e.length>0){e[e.length-1]+=this.offsetInText}return e}getAncestors(e={includeSelf:false,parentFirst:false}){const t=[];let i=e.includeSelf?this:this.parent;while(i){t[e.parentFirst?"push":"unshift"](i);i=i.parent}return t}hasAttribute(e){return this.textNode.hasAttribute(e)}getAttribute(e){return this.textNode.getAttribute(e)}getAttributes(){return this.textNode.getAttributes()}getAttributeKeys(){return this.textNode.getAttributeKeys()}}class qh{constructor(e){this._nodes=[];if(e){this._insertNodes(0,e)}}[Symbol.iterator](){return this._nodes[Symbol.iterator]()}get length(){return this._nodes.length}get maxOffset(){return this._nodes.reduce((e,t)=>e+t.offsetSize,0)}getNode(e){return this._nodes[e]||null}getNodeIndex(e){const t=this._nodes.indexOf(e);return t==-1?null:t}getNodeStartOffset(e){const t=this.getNodeIndex(e);return t===null?null:this._nodes.slice(0,t).reduce((e,t)=>e+t.offsetSize,0)}indexToOffset(e){if(e==this._nodes.length){return this.maxOffset}const t=this._nodes[e];if(!t){throw new ss["b"]("model-nodelist-index-out-of-bounds: Given index cannot be found in the node list.",this)}return this.getNodeStartOffset(t)}offsetToIndex(e){let t=0;for(const i of this._nodes){if(e>=t&&ee.toJSON())}}class $h extends Hh{constructor(e,t,i){super(t);this.name=e;this._children=new qh;if(i){this._insertChild(0,i)}}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}is(e,t=null){if(!t){return e==="element"||e==="model:element"||e==="node"||e==="model:node"}return t===this.name&&(e==="element"||e==="model:element")}getChild(e){return this._children.getNode(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}offsetToIndex(e){return this._children.offsetToIndex(e)}getNodeByPath(e){let t=this;for(const i of e){t=t.getChild(t.offsetToIndex(i))}return t}findAncestor(e,t={includeSelf:false}){let i=t.includeSelf?this:this.parent;while(i){if(i.name===e){return i}i=i.parent}return null}toJSON(){const e=super.toJSON();e.name=this.name;if(this._children.length>0){e.children=[];for(const t of this._children){e.children.push(t.toJSON())}}return e}_clone(e=false){const t=e?Array.from(this._children).map(e=>e._clone(true)):null;return new $h(this.name,this.getAttributes(),t)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){const i=Gh(t);for(const e of i){if(e.parent!==null){e._remove()}e.parent=this}this._children._insertNodes(e,i)}_removeChildren(e,t=1){const i=this._children._removeNodes(e,t);for(const e of i){e.parent=null}return i}static fromJSON(e){let t=null;if(e.children){t=[];for(const i of e.children){if(i.name){t.push($h.fromJSON(i))}else{t.push(Uh.fromJSON(i))}}}return new $h(e.name,e.attributes,t)}}function Gh(e){if(typeof e=="string"){return[new Uh(e)]}if(!vs(e)){e=[e]}return Array.from(e).map(e=>{if(typeof e=="string"){return new Uh(e)}if(e instanceof Wh){return new Uh(e.data,e.getAttributes())}return e})}class Kh{constructor(e={}){if(!e.boundaries&&!e.startPosition){throw new ss["b"]("model-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.",null)}const t=e.direction||"forward";if(t!="forward"&&t!="backward"){throw new ss["b"]("model-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.",e,{direction:t})}this.direction=t;this.boundaries=e.boundaries||null;if(e.startPosition){this.position=e.startPosition.clone()}else{this.position=Zh._createAt(this.boundaries[this.direction=="backward"?"end":"start"])}this.position.stickiness="toNone";this.singleCharacters=!!e.singleCharacters;this.shallow=!!e.shallow;this.ignoreElementEnd=!!e.ignoreElementEnd;this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null;this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null;this._visitedParent=this.position.parent}[Symbol.iterator](){return this}skip(e){let t,i,n,o;do{n=this.position;o=this._visitedParent;({done:t,value:i}=this.next())}while(!t&&e(i));if(!t){this.position=n;this._visitedParent=o}}next(){if(this.direction=="forward"){return this._next()}else{return this._previous()}}_next(){const e=this.position;const t=this.position.clone();const i=this._visitedParent;if(i.parent===null&&t.offset===i.maxOffset){return{done:true}}if(i===this._boundaryEndParent&&t.offset==this.boundaries.end.offset){return{done:true}}const n=t.parent;const o=Qh(t,n);const r=o?o:Jh(t,n,o);if(r instanceof $h){if(!this.shallow){t.path.push(0);this._visitedParent=r}else{t.offset++}this.position=t;return Yh("elementStart",r,e,t,1)}else if(r instanceof Uh){let n;if(this.singleCharacters){n=1}else{let e=r.endOffset;if(this._boundaryEndParent==i&&this.boundaries.end.offsete){e=this.boundaries.start.offset}n=t.offset-e}const o=t.offset-r.startOffset;const s=new Wh(r,o-n,n);t.offset-=n;this.position=t;return Yh("text",s,e,t,n)}else{t.path.pop();this.position=t;this._visitedParent=i.parent;return Yh("elementStart",i,e,t,1)}}}function Yh(e,t,i,n,o){return{done:false,value:{type:e,item:t,previousPosition:i,nextPosition:n,length:o}}}class Zh{constructor(e,t,i="toNone"){if(!e.is("element")&&!e.is("documentFragment")){throw new ss["b"]("model-position-root-invalid: Position root invalid.",e)}if(!(t instanceof Array)||t.length===0){throw new ss["b"]("model-position-path-incorrect-format: Position path must be an array with at least one item.",e,{path:t})}if(e.is("rootElement")){t=t.slice()}else{t=[...e.getPath(),...t];e=e.root}this.root=e;this.path=t;this.stickiness=i}get offset(){return this.path[this.path.length-1]}set offset(e){this.path[this.path.length-1]=e}get parent(){let e=this.root;for(let t=0;ti.path.length){if(t.offset!==o.maxOffset){return false}t.path=t.path.slice(0,-1);o=o.parent;t.offset++}else{if(i.offset!==0){return false}i.path=i.path.slice(0,-1)}}}is(e){return e==="position"||e==="model:position"}hasSameParentAs(e){if(this.root!==e.root){return false}const t=this.getParentPath();const i=e.getParentPath();return Rs(t,i)=="same"}getTransformedByOperation(e){let t;switch(e.type){case"insert":t=this._getTransformedByInsertOperation(e);break;case"move":case"remove":case"reinsert":t=this._getTransformedByMoveOperation(e);break;case"split":t=this._getTransformedBySplitOperation(e);break;case"merge":t=this._getTransformedByMergeOperation(e);break;default:t=Zh._createAt(this);break}return t}_getTransformedByInsertOperation(e){return this._getTransformedByInsertion(e.position,e.howMany)}_getTransformedByMoveOperation(e){return this._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany)}_getTransformedBySplitOperation(e){const t=e.movedRange;const i=t.containsPosition(this)||t.start.isEqual(this)&&this.stickiness=="toNext";if(i){return this._getCombined(e.splitPosition,e.moveTargetPosition)}else{if(e.graveyardPosition){return this._getTransformedByMove(e.graveyardPosition,e.insertionPosition,1)}else{return this._getTransformedByInsertion(e.insertionPosition,1)}}}_getTransformedByMergeOperation(e){const t=e.movedRange;const i=t.containsPosition(this)||t.start.isEqual(this);let n;if(i){n=this._getCombined(e.sourcePosition,e.targetPosition);if(e.sourcePosition.isBefore(e.targetPosition)){n=n._getTransformedByDeletion(e.deletionPosition,1)}}else if(this.isEqual(e.deletionPosition)){n=Zh._createAt(e.deletionPosition)}else{n=this._getTransformedByMove(e.deletionPosition,e.graveyardPosition,1)}return n}_getTransformedByDeletion(e,t){const i=Zh._createAt(this);if(this.root!=e.root){return i}if(Rs(e.getParentPath(),this.getParentPath())=="same"){if(e.offsetthis.offset){return null}else{i.offset-=t}}}else if(Rs(e.getParentPath(),this.getParentPath())=="prefix"){const n=e.path.length-1;if(e.offset<=this.path[n]){if(e.offset+t>this.path[n]){return null}else{i.path[n]-=t}}}return i}_getTransformedByInsertion(e,t){const i=Zh._createAt(this);if(this.root!=e.root){return i}if(Rs(e.getParentPath(),this.getParentPath())=="same"){if(e.offsett+1){const t=n.maxOffset-i.offset;if(t!==0){e.push(new ef(i,i.getShiftedBy(t)))}i.path=i.path.slice(0,-1);i.offset++;n=n.parent}while(i.path.length<=this.end.path.length){const t=this.end.path[i.path.length-1];const n=t-i.offset;if(n!==0){e.push(new ef(i,i.getShiftedBy(n)))}i.offset=t;i.path.push(0)}return e}getWalker(e={}){e.boundaries=this;return new Kh(e)}*getItems(e={}){e.boundaries=this;e.ignoreElementEnd=true;const t=new Kh(e);for(const e of t){yield e.item}}*getPositions(e={}){e.boundaries=this;const t=new Kh(e);yield t.position;for(const e of t){yield e.nextPosition}}getTransformedByOperation(e){switch(e.type){case"insert":return this._getTransformedByInsertOperation(e);case"move":case"remove":case"reinsert":return this._getTransformedByMoveOperation(e);case"split":return[this._getTransformedBySplitOperation(e)];case"merge":return[this._getTransformedByMergeOperation(e)]}return[new ef(this.start,this.end)]}getTransformedByOperations(e){const t=[new ef(this.start,this.end)];for(const i of e){for(let e=0;e0?new this(i,n):new this(n,i)}static _createIn(e){return new this(Zh._createAt(e,0),Zh._createAt(e,e.maxOffset))}static _createOn(e){return this._createFromPositionAndShift(Zh._createBefore(e),e.offsetSize)}static _createFromRanges(e){if(e.length===0){throw new ss["b"]("range-create-from-ranges-empty-array: At least one range has to be passed.",null)}else if(e.length==1){return e[0].clone()}const t=e[0];e.sort((e,t)=>e.start.isAfter(t.start)?1:-1);const i=e.indexOf(t);const n=new this(t.start,t.end);if(i>0){for(let t=i-1;true;t++){if(e[t].end.isEqual(n.start)){n.start=Zh._createAt(e[t].start)}else{break}}}for(let t=i+1;t{if(t.viewPosition){return}const i=this._modelToViewMapping.get(t.modelPosition.parent);t.viewPosition=this.findPositionIn(i,t.modelPosition.offset)},{priority:"low"});this.on("viewToModelPosition",(e,t)=>{if(t.modelPosition){return}const i=this.findMappedViewAncestor(t.viewPosition);const n=this._viewToModelMapping.get(i);const o=this._toModelOffset(t.viewPosition.parent,t.viewPosition.offset,i);t.modelPosition=Zh._createAt(n,o)},{priority:"low"})}bindElements(e,t){this._modelToViewMapping.set(e,t);this._viewToModelMapping.set(t,e)}unbindViewElement(e){const t=this.toModelElement(e);this._viewToModelMapping.delete(e);if(this._elementToMarkerNames.has(e)){for(const t of this._elementToMarkerNames.get(e)){this._unboundMarkerNames.add(t)}}if(this._modelToViewMapping.get(t)==e){this._modelToViewMapping.delete(t)}}unbindModelElement(e){const t=this.toViewElement(e);this._modelToViewMapping.delete(e);if(this._viewToModelMapping.get(t)==e){this._viewToModelMapping.delete(t)}}bindElementToMarker(e,t){const i=this._markerNameToElements.get(t)||new Set;i.add(e);const n=this._elementToMarkerNames.get(e)||new Set;n.add(t);this._markerNameToElements.set(t,i);this._elementToMarkerNames.set(e,n)}unbindElementFromMarkerName(e,t){const i=this._markerNameToElements.get(t);if(i){i.delete(e);if(i.size==0){this._markerNameToElements.delete(t)}}const n=this._elementToMarkerNames.get(e);if(n){n.delete(t);if(n.size==0){this._elementToMarkerNames.delete(e)}}}flushUnboundMarkerNames(){const e=Array.from(this._unboundMarkerNames);this._unboundMarkerNames.clear();return e}clearBindings(){this._modelToViewMapping=new WeakMap;this._viewToModelMapping=new WeakMap;this._markerNameToElements=new Map;this._elementToMarkerNames=new Map;this._unboundMarkerNames=new Set}toModelElement(e){return this._viewToModelMapping.get(e)}toViewElement(e){return this._modelToViewMapping.get(e)}toModelRange(e){return new ef(this.toModelPosition(e.start),this.toModelPosition(e.end))}toViewRange(e){return new hl(this.toViewPosition(e.start),this.toViewPosition(e.end))}toModelPosition(e){const t={viewPosition:e,mapper:this};this.fire("viewToModelPosition",t);return t.modelPosition}toViewPosition(e,t={isPhantom:false}){const i={modelPosition:e,mapper:this,isPhantom:t.isPhantom};this.fire("modelToViewPosition",i);return i.viewPosition}markerNameToElements(e){const t=this._markerNameToElements.get(e);if(!t){return null}const i=new Set;for(const e of t){if(e.is("attributeElement")){for(const t of e.getElementsWithSameId()){i.add(t)}}else{i.add(e)}}return i}registerViewToModelLength(e,t){this._viewToModelLengthCallbacks.set(e,t)}findMappedViewAncestor(e){let t=e.parent;while(!this._viewToModelMapping.has(t)){t=t.parent}return t}_toModelOffset(e,t,i){if(i!=e){const n=this._toModelOffset(e.parent,e.index,i);const o=this._toModelOffset(e,t,e);return n+o}if(e.is("$text")){return t}let n=0;for(let i=0;i1?t[0]+":"+t[1]:t[0]}class rf{constructor(e){this.conversionApi=Object.assign({dispatcher:this},e)}convertChanges(e,t,i){for(const t of e.getMarkersToRemove()){this.convertMarkerRemove(t.name,t.range,i)}for(const t of e.getChanges()){if(t.type=="insert"){this.convertInsert(ef._createFromPositionAndShift(t.position,t.length),i)}else if(t.type=="remove"){this.convertRemove(t.position,t.length,t.name,i)}else{this.convertAttribute(t.range,t.attributeKey,t.attributeOldValue,t.attributeNewValue,i)}}for(const e of this.conversionApi.mapper.flushUnboundMarkerNames()){const n=t.get(e).getRange();this.convertMarkerRemove(e,n,i);this.convertMarkerAdd(e,n,i)}for(const t of e.getMarkersToAdd()){this.convertMarkerAdd(t.name,t.range,i)}}convertInsert(e,t){this.conversionApi.writer=t;this.conversionApi.consumable=this._createInsertConsumable(e);for(const t of e){const e=t.item;const i=ef._createFromPositionAndShift(t.previousPosition,t.length);const n={item:e,range:i};this._testAndFire("insert",n);for(const t of e.getAttributeKeys()){n.attributeKey=t;n.attributeOldValue=null;n.attributeNewValue=e.getAttribute(t);this._testAndFire(`attribute:${t}`,n)}}this._clearConversionApi()}convertRemove(e,t,i,n){this.conversionApi.writer=n;this.fire("remove:"+i,{position:e,length:t},this.conversionApi);this._clearConversionApi()}convertAttribute(e,t,i,n,o){this.conversionApi.writer=o;this.conversionApi.consumable=this._createConsumableForRange(e,`attribute:${t}`);for(const o of e){const e=o.item;const r=ef._createFromPositionAndShift(o.previousPosition,o.length);const s={item:e,range:r,attributeKey:t,attributeOldValue:i,attributeNewValue:n};this._testAndFire(`attribute:${t}`,s)}this._clearConversionApi()}convertSelection(e,t,i){const n=Array.from(t.getMarkersAtPosition(e.getFirstPosition()));this.conversionApi.writer=i;this.conversionApi.consumable=this._createSelectionConsumable(e,n);this.fire("selection",{selection:e},this.conversionApi);if(!e.isCollapsed){return}for(const t of n){const i=t.getRange();if(!sf(e.getFirstPosition(),t,this.conversionApi.mapper)){continue}const n={item:e,markerName:t.name,markerRange:i};if(this.conversionApi.consumable.test(e,"addMarker:"+t.name)){this.fire("addMarker:"+t.name,n,this.conversionApi)}}for(const t of e.getAttributeKeys()){const i={item:e,range:e.getFirstRange(),attributeKey:t,attributeOldValue:null,attributeNewValue:e.getAttribute(t)};if(this.conversionApi.consumable.test(e,"attribute:"+i.attributeKey)){this.fire("attribute:"+i.attributeKey+":$text",i,this.conversionApi)}}this._clearConversionApi()}convertMarkerAdd(e,t,i){if(!t.root.document||t.root.rootName=="$graveyard"){return}this.conversionApi.writer=i;const n="addMarker:"+e;const o=new nf;o.add(t,n);this.conversionApi.consumable=o;this.fire(n,{markerName:e,markerRange:t},this.conversionApi);if(!o.test(t,n)){return}this.conversionApi.consumable=this._createConsumableForRange(t,n);for(const i of t.getItems()){if(!this.conversionApi.consumable.test(i,n)){continue}const o={item:i,range:ef._createOn(i),markerName:e,markerRange:t};this.fire(n,o,this.conversionApi)}this._clearConversionApi()}convertMarkerRemove(e,t,i){if(!t.root.document||t.root.rootName=="$graveyard"){return}this.conversionApi.writer=i;this.fire("removeMarker:"+e,{markerName:e,markerRange:t},this.conversionApi);this._clearConversionApi()}_createInsertConsumable(e){const t=new nf;for(const i of e){const e=i.item;t.add(e,"insert");for(const i of e.getAttributeKeys()){t.add(e,"attribute:"+i)}}return t}_createConsumableForRange(e,t){const i=new nf;for(const n of e.getItems()){i.add(n,t)}return i}_createSelectionConsumable(e,t){const i=new nf;i.add(e,"selection");for(const n of t){i.add(e,"addMarker:"+n.name)}for(const t of e.getAttributeKeys()){i.add(e,"attribute:"+t)}return i}_testAndFire(e,t){if(!this.conversionApi.consumable.test(t.item,e)){return}const i=t.item.name||"$text";this.fire(e+":"+i,t,this.conversionApi)}_clearConversionApi(){delete this.conversionApi.writer;delete this.conversionApi.consumable}}ys(rf,ds);function sf(e,t,i){const n=t.getRange();const o=Array.from(e.getAncestors());o.shift();o.reverse();const r=o.some(e=>{if(n.containsItem(e)){const t=i.toViewElement(e);return!!t.getCustomProperty("addHighlight")}});return!r}class af{constructor(e,t,i){this._lastRangeBackward=false;this._ranges=[];this._attrs=new Map;if(e){this.setTo(e,t,i)}}get anchor(){if(this._ranges.length>0){const e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.end:e.start}return null}get focus(){if(this._ranges.length>0){const e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.start:e.end}return null}get isCollapsed(){const e=this._ranges.length;if(e===1){return this._ranges[0].isCollapsed}else{return false}}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}isEqual(e){if(this.rangeCount!=e.rangeCount){return false}else if(this.rangeCount===0){return true}if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus)){return false}for(const t of this._ranges){let i=false;for(const n of e._ranges){if(t.isEqual(n)){i=true;break}}if(!i){return false}}return true}*getRanges(){for(const e of this._ranges){yield new ef(e.start,e.end)}}getFirstRange(){let e=null;for(const t of this._ranges){if(!e||t.start.isBefore(e.start)){e=t}}return e?new ef(e.start,e.end):null}getLastRange(){let e=null;for(const t of this._ranges){if(!e||t.end.isAfter(e.end)){e=t}}return e?new ef(e.start,e.end):null}getFirstPosition(){const e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){const e=this.getLastRange();return e?e.end.clone():null}setTo(e,t,i){if(e===null){this._setRanges([])}else if(e instanceof af){this._setRanges(e.getRanges(),e.isBackward)}else if(e&&typeof e.getRanges=="function"){this._setRanges(e.getRanges(),e.isBackward)}else if(e instanceof ef){this._setRanges([e],!!t&&!!t.backward)}else if(e instanceof Zh){this._setRanges([new ef(e)])}else if(e instanceof Hh){const n=!!i&&!!i.backward;let o;if(t=="in"){o=ef._createIn(e)}else if(t=="on"){o=ef._createOn(e)}else if(t!==undefined){o=new ef(Zh._createAt(e,t))}else{throw new ss["b"]("model-selection-setTo-required-second-parameter: "+"selection.setTo requires the second parameter when the first parameter is a node.",[this,e])}this._setRanges([o],n)}else if(vs(e)){this._setRanges(e,t&&!!t.backward)}else{throw new ss["b"]("model-selection-setTo-not-selectable: Cannot set the selection to the given place.",[this,e])}}_setRanges(e,t=false){e=Array.from(e);const i=e.some(t=>{if(!(t instanceof ef)){throw new ss["b"]("model-selection-set-ranges-not-range: "+"Selection range set to an object that is not an instance of model.Range.",[this,e])}return this._ranges.every(e=>!e.isEqual(t))});if(e.length===this._ranges.length&&!i){return}this._removeAllRanges();for(const t of e){this._pushRange(t)}this._lastRangeBackward=!!t;this.fire("change:range",{directChange:true})}setFocus(e,t){if(this.anchor===null){throw new ss["b"]("model-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.",[this,e])}const i=Zh._createAt(e,t);if(i.compareWith(this.focus)=="same"){return}const n=this.anchor;if(this._ranges.length){this._popRange()}if(i.compareWith(n)=="before"){this._pushRange(new ef(i,n));this._lastRangeBackward=true}else{this._pushRange(new ef(n,i));this._lastRangeBackward=false}this.fire("change:range",{directChange:true})}getAttribute(e){return this._attrs.get(e)}getAttributes(){return this._attrs.entries()}getAttributeKeys(){return this._attrs.keys()}hasAttribute(e){return this._attrs.has(e)}removeAttribute(e){if(this.hasAttribute(e)){this._attrs.delete(e);this.fire("change:attribute",{attributeKeys:[e],directChange:true})}}setAttribute(e,t){if(this.getAttribute(e)!==t){this._attrs.set(e,t);this.fire("change:attribute",{attributeKeys:[e],directChange:true})}}getSelectedElement(){if(this.rangeCount!==1){return null}return this.getFirstRange().getContainedElement()}is(e){return e==="selection"||e==="model:selection"}*getSelectedBlocks(){const e=new WeakSet;for(const t of this.getRanges()){const i=df(t.start,e);if(i&&uf(i,t)){yield i}for(const i of t.getWalker()){const n=i.item;if(i.type=="elementEnd"&&lf(n,e,t)){yield n}}const n=df(t.end,e);if(n&&!t.end.isTouching(Zh._createAt(n,0))&&uf(n,t)){yield n}}}containsEntireContent(e=this.anchor.root){const t=Zh._createAt(e,0);const i=Zh._createAt(e,"end");return t.isTouching(this.getFirstPosition())&&i.isTouching(this.getLastPosition())}_pushRange(e){this._checkRange(e);this._ranges.push(new ef(e.start,e.end))}_checkRange(e){for(let t=0;t0){this._popRange()}}_popRange(){this._ranges.pop()}}ys(af,ds);function cf(e,t){if(t.has(e)){return false}t.add(e);return e.root.document.model.schema.isBlock(e)&&e.parent}function lf(e,t,i){return cf(e,t)&&uf(e,i)}function df(e,t){const i=e.parent;const n=i.root.document.model.schema;const o=e.parent.getAncestors({parentFirst:true,includeSelf:true});let r=false;const s=o.find(e=>{if(r){return false}r=n.isLimit(e);return!r&&cf(e,t)});o.forEach(e=>t.add(e));return s}function uf(e,t){const i=hf(e);if(!i){return true}const n=t.containsRange(ef._createOn(i),true);return!n}function hf(e){const t=e.root.document.model.schema;let i=e.parent;while(i){if(t.isBlock(i)){return i}i=i.parent}}class ff extends ef{constructor(e,t){super(e,t);mf.call(this)}detach(){this.stopListening()}is(e){return e==="liveRange"||e==="model:liveRange"||e=="range"||e==="model:range"}toRange(){return new ef(this.start,this.end)}static fromRange(e){return new ff(e.start,e.end)}}function mf(){this.listenTo(this.root.document.model,"applyOperation",(e,t)=>{const i=t[0];if(!i.isDocumentOperation){return}gf.call(this,i)},{priority:"low"})}function gf(e){const t=this.getTransformedByOperation(e);const i=ef._createFromRanges(t);const n=!i.isEqual(this);const o=pf(this,e);let r=null;if(n){if(i.root.rootName=="$graveyard"){if(e.type=="remove"){r=e.sourcePosition}else{r=e.deletionPosition}}const t=this.toRange();this.start=i.start;this.end=i.end;this.fire("change:range",t,{deletionPosition:r})}else if(o){this.fire("change:content",this.toRange(),{deletionPosition:r})}}function pf(e,t){switch(t.type){case"insert":return e.containsPosition(t.position);case"move":case"remove":case"reinsert":case"merge":return e.containsPosition(t.sourcePosition)||e.start.isEqual(t.sourcePosition)||e.containsPosition(t.targetPosition);case"split":return e.containsPosition(t.splitPosition)||e.containsPosition(t.insertionPosition)}return false}ys(ff,ds);const bf="selection:";class wf{constructor(e){this._selection=new kf(e);this._selection.delegate("change:range").to(this);this._selection.delegate("change:attribute").to(this);this._selection.delegate("change:marker").to(this)}get isCollapsed(){return this._selection.isCollapsed}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get rangeCount(){return this._selection.rangeCount}get hasOwnRange(){return this._selection.hasOwnRange}get isBackward(){return this._selection.isBackward}get isGravityOverridden(){return this._selection.isGravityOverridden}get markers(){return this._selection.markers}get _ranges(){return this._selection._ranges}getRanges(){return this._selection.getRanges()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getSelectedBlocks(){return this._selection.getSelectedBlocks()}getSelectedElement(){return this._selection.getSelectedElement()}containsEntireContent(e){return this._selection.containsEntireContent(e)}destroy(){this._selection.destroy()}getAttributeKeys(){return this._selection.getAttributeKeys()}getAttributes(){return this._selection.getAttributes()}getAttribute(e){return this._selection.getAttribute(e)}hasAttribute(e){return this._selection.hasAttribute(e)}refresh(){this._selection._updateMarkers();this._selection._updateAttributes(false)}is(e){return e==="selection"||e=="model:selection"||e=="documentSelection"||e=="model:documentSelection"}_setFocus(e,t){this._selection.setFocus(e,t)}_setTo(e,t,i){this._selection.setTo(e,t,i)}_setAttribute(e,t){this._selection.setAttribute(e,t)}_removeAttribute(e){this._selection.removeAttribute(e)}_getStoredAttributes(){return this._selection._getStoredAttributes()}_overrideGravity(){return this._selection.overrideGravity()}_restoreGravity(e){this._selection.restoreGravity(e)}static _getStoreAttributeKey(e){return bf+e}static _isStoreAttributeKey(e){return e.startsWith(bf)}}ys(wf,ds);class kf extends af{constructor(e){super();this.markers=new xs({idProperty:"name"});this._model=e.model;this._document=e;this._attributePriority=new Map;this._selectionRestorePosition=null;this._hasChangedRange=false;this._overriddenGravityRegister=new Set;this.listenTo(this._model,"applyOperation",(e,t)=>{const i=t[0];if(!i.isDocumentOperation||i.type=="marker"||i.type=="rename"||i.type=="noop"){return}if(this._ranges.length==0&&this._selectionRestorePosition){this._fixGraveyardSelection(this._selectionRestorePosition)}this._selectionRestorePosition=null;if(this._hasChangedRange){this._hasChangedRange=false;this.fire("change:range",{directChange:false})}},{priority:"lowest"});this.on("change:range",()=>{for(const e of this.getRanges()){if(!this._document._validateSelectionRange(e)){throw new ss["b"]("document-selection-wrong-position: Range from document selection starts or ends at incorrect position.",this,{range:e})}}});this.listenTo(this._model.markers,"update",()=>this._updateMarkers());this.listenTo(this._document,"change",(e,t)=>{vf(this._model,t)})}get isCollapsed(){const e=this._ranges.length;return e===0?this._document._getDefaultRange().isCollapsed:super.isCollapsed}get anchor(){return super.anchor||this._document._getDefaultRange().start}get focus(){return super.focus||this._document._getDefaultRange().end}get rangeCount(){return this._ranges.length?this._ranges.length:1}get hasOwnRange(){return this._ranges.length>0}get isGravityOverridden(){return!!this._overriddenGravityRegister.size}destroy(){for(let e=0;e{this._hasChangedRange=true;if(t.root==this._document.graveyard){this._selectionRestorePosition=n.deletionPosition;const e=this._ranges.indexOf(t);this._ranges.splice(e,1);t.detach()}});return t}_updateMarkers(){const e=[];let t=false;for(const t of this._model.markers){const i=t.getRange();for(const n of this.getRanges()){if(i.containsRange(n,!n.isCollapsed)){e.push(t)}}}const i=Array.from(this.markers);for(const i of e){if(!this.markers.has(i)){this.markers.add(i);t=true}}for(const i of Array.from(this.markers)){if(!e.includes(i)){this.markers.remove(i);t=true}}if(t){this.fire("change:marker",{oldMarkers:i,directChange:false})}}_updateAttributes(e){const t=Us(this._getSurroundingAttributes());const i=Us(this.getAttributes());if(e){this._attributePriority=new Map;this._attrs=new Map}else{for(const[e,t]of this._attributePriority){if(t=="low"){this._attrs.delete(e);this._attributePriority.delete(e)}}}this._setAttributesTo(t);const n=[];for(const[e,t]of this.getAttributes()){if(!i.has(e)||i.get(e)!==t){n.push(e)}}for(const[e]of i){if(!this.hasAttribute(e)){n.push(e)}}if(n.length>0){this.fire("change:attribute",{attributeKeys:n,directChange:false})}}_setAttribute(e,t,i=true){const n=i?"normal":"low";if(n=="low"&&this._attributePriority.get(e)=="normal"){return false}const o=super.getAttribute(e);if(o===t){return false}this._attrs.set(e,t);this._attributePriority.set(e,n);return true}_removeAttribute(e,t=true){const i=t?"normal":"low";if(i=="low"&&this._attributePriority.get(e)=="normal"){return false}this._attributePriority.set(e,i);if(!super.hasAttribute(e)){return false}this._attrs.delete(e);return true}_setAttributesTo(e){const t=new Set;for(const[t,i]of this.getAttributes()){if(e.get(t)===i){continue}this._removeAttribute(t,false)}for(const[i,n]of e){const e=this._setAttribute(i,n,false);if(e){t.add(i)}}return t}*_getStoredAttributes(){const e=this.getFirstPosition().parent;if(this.isCollapsed&&e.isEmpty){for(const t of e.getAttributeKeys()){if(t.startsWith(bf)){const i=t.substr(bf.length);yield[i,e.getAttribute(t)]}}}}_getSurroundingAttributes(){const e=this.getFirstPosition();const t=this._model.schema;let i=null;if(!this.isCollapsed){const e=this.getFirstRange();for(const n of e){if(n.item.is("element")&&t.isObject(n.item)){break}if(n.type=="text"){i=n.item.getAttributes();break}}}else{const n=e.textNode?e.textNode:e.nodeBefore;const o=e.textNode?e.textNode:e.nodeAfter;if(!this.isGravityOverridden){i=_f(n)}if(!i){i=_f(o)}if(!this.isGravityOverridden&&!i){let e=n;while(e&&!t.isInline(e)&&!i){e=e.previousSibling;i=_f(e)}}if(!i){let e=o;while(e&&!t.isInline(e)&&!i){e=e.nextSibling;i=_f(e)}}if(!i){i=this._getStoredAttributes()}}return i}_fixGraveyardSelection(e){const t=this._model.schema.getNearestSelectionRange(e);if(t){this._pushRange(t)}}}function _f(e){if(e instanceof Wh||e instanceof Uh){return e.getAttributes()}return null}function vf(e,t){const i=e.document.differ;for(const n of i.getChanges()){if(n.type!="insert"){continue}const i=n.position.parent;const o=n.length===i.maxOffset;if(o){e.enqueueChange(t,e=>{const t=Array.from(i.getAttributeKeys()).filter(e=>e.startsWith(bf));for(const n of t){e.removeAttribute(n,i)}})}}}class yf{constructor(e){this._dispatchers=e}add(e){for(const t of this._dispatchers){e(t)}return this}}var xf=1,Af=4;function Cf(e){return Hr(e,xf|Af)}var Tf=Cf;class Sf extends yf{elementToElement(e){return this.add(Gf(e))}attributeToElement(e){return this.add(Kf(e))}attributeToAttribute(e){return this.add(Yf(e))}markerToElement(e){return this.add(Zf(e))}markerToHighlight(e){return this.add(Jf(e))}markerToData(e){return this.add(Qf(e))}}function Ef(){return(e,t,i)=>{if(!i.consumable.consume(t.item,"insert")){return}const n=i.writer;const o=i.mapper.toViewPosition(t.range.start);const r=n.createText(t.item.data);n.insert(o,r)}}function Pf(){return(e,t,i)=>{const n=i.mapper.toViewPosition(t.position);const o=t.position.getShiftedBy(t.length);const r=i.mapper.toViewPosition(o,{isPhantom:true});const s=i.writer.createRange(n,r);const a=i.writer.remove(s.getTrimmed());for(const e of i.writer.createRangeIn(a).getItems()){i.mapper.unbindViewElement(e)}}}function Mf(e,t){const i=e.createAttributeElement("span",t.attributes);if(t.classes){i._addClass(t.classes)}if(t.priority){i._priority=t.priority}i._id=t.id;return i}function If(){return(e,t,i)=>{const n=t.selection;if(n.isCollapsed){return}if(!i.consumable.consume(n,"selection")){return}const o=[];for(const e of n.getRanges()){const t=i.mapper.toViewRange(e);o.push(t)}i.writer.setSelection(o,{backward:n.isBackward})}}function Lf(){return(e,t,i)=>{const n=t.selection;if(!n.isCollapsed){return}if(!i.consumable.consume(n,"selection")){return}const o=i.writer;const r=n.getFirstPosition();const s=i.mapper.toViewPosition(r);const a=o.breakAttributes(s);o.setSelection(a)}}function Nf(){return(e,t,i)=>{const n=i.writer;const o=n.document.selection;for(const e of o.getRanges()){if(e.isCollapsed){if(e.end.parent.isAttached()){i.writer.mergeAttributes(e.start)}}}n.setSelection(null)}}function zf(e){return(t,i,n)=>{const o=e(i.attributeOldValue,n);const r=e(i.attributeNewValue,n);if(!o&&!r){return}if(!n.consumable.consume(i.item,t.name)){return}const s=n.writer;const a=s.document.selection;if(i.item instanceof af||i.item instanceof wf){s.wrap(a.getFirstRange(),r)}else{let e=n.mapper.toViewRange(i.range);if(i.attributeOldValue!==null&&o){e=s.unwrap(e,o)}if(i.attributeNewValue!==null&&r){s.wrap(e,r)}}}}function Rf(e){return(t,i,n)=>{const o=e(i.item,n);if(!o){return}if(!n.consumable.consume(i.item,"insert")){return}const r=n.mapper.toViewPosition(i.range.start);n.mapper.bindElements(i.item,o);n.writer.insert(r,o)}}function Of(e){return(t,i,n)=>{i.isOpening=true;const o=e(i,n);i.isOpening=false;const r=e(i,n);if(!o||!r){return}const s=i.markerRange;if(s.isCollapsed&&!n.consumable.consume(s,t.name)){return}for(const e of s){if(!n.consumable.consume(e.item,t.name)){return}}const a=n.mapper;const c=n.writer;c.insert(a.toViewPosition(s.start),o);n.mapper.bindElementToMarker(o,i.markerName);if(!s.isCollapsed){c.insert(a.toViewPosition(s.end),r);n.mapper.bindElementToMarker(r,i.markerName)}t.stop()}}function Vf(){return(e,t,i)=>{const n=i.mapper.markerNameToElements(t.markerName);if(!n){return}for(const e of n){i.mapper.unbindElementFromMarkerName(e,t.markerName);i.writer.clear(i.writer.createRangeOn(e),e)}i.writer.clearClonedElementsGroup(t.markerName);e.stop()}}function Df(e){return(t,i,n)=>{const o=e(i.markerName,n);if(!o){return}const r=i.markerRange;if(!n.consumable.consume(r,t.name)){return}Bf(r,false,n,i,o);Bf(r,true,n,i,o);t.stop()}}function Bf(e,t,i,n,o){const r=t?e.start:e.end;const s=i.schema.checkChild(r,"$text");if(s){const e=i.mapper.toViewPosition(r);Ff(e,t,i,n,o)}else{let e;let s;if(t&&r.nodeAfter||!t&&!r.nodeBefore){e=r.nodeAfter;s=true}else{e=r.nodeBefore;s=false}const a=i.mapper.toViewElement(e);jf(a,t,s,i,n,o)}}function jf(e,t,i,n,o,r){const s=`data-${r.group}-${t?"start":"end"}-${i?"before":"after"}`;const a=e.hasAttribute(s)?e.getAttribute(s).split(","):[];a.unshift(r.name);n.writer.setAttribute(s,a.join(","),e);n.mapper.bindElementToMarker(e,o.markerName)}function Ff(e,t,i,n,o){const r=`${o.group}-${t?"start":"end"}`;const s=o.name?{name:o.name}:null;const a=i.writer.createUIElement(r,s);i.writer.insert(e,a);i.mapper.bindElementToMarker(a,n.markerName)}function Hf(e){return(t,i,n)=>{const o=e(i.markerName,n);if(!o){return}const r=n.mapper.markerNameToElements(i.markerName);if(!r){return}for(const e of r){n.mapper.unbindElementFromMarkerName(e,i.markerName);if(e.is("containerElement")){s(`data-${o.group}-start-before`,e);s(`data-${o.group}-start-after`,e);s(`data-${o.group}-end-before`,e);s(`data-${o.group}-end-after`,e)}else{n.writer.clear(n.writer.createRangeOn(e),e)}}n.writer.clearClonedElementsGroup(i.markerName);t.stop();function s(e,t){if(t.hasAttribute(e)){const i=new Set(t.getAttribute(e).split(","));i.delete(o.name);if(i.size==0){n.writer.removeAttribute(e,t)}else{n.writer.setAttribute(e,Array.from(i).join(","),t)}}}}}function Uf(e){return(t,i,n)=>{const o=e(i.attributeOldValue,n);const r=e(i.attributeNewValue,n);if(!o&&!r){return}if(!n.consumable.consume(i.item,t.name)){return}const s=n.mapper.toViewElement(i.item);const a=n.writer;if(!s){throw new ss["b"]("conversion-attribute-to-attribute-on-text: "+"Trying to convert text node's attribute with attribute-to-attribute converter.",[i,n])}if(i.attributeOldValue!==null&&o){if(o.key=="class"){const e=Array.isArray(o.value)?o.value:[o.value];for(const t of e){a.removeClass(t,s)}}else if(o.key=="style"){const e=Object.keys(o.value);for(const t of e){a.removeStyle(t,s)}}else{a.removeAttribute(o.key,s)}}if(i.attributeNewValue!==null&&r){if(r.key=="class"){const e=Array.isArray(r.value)?r.value:[r.value];for(const t of e){a.addClass(t,s)}}else if(r.key=="style"){const e=Object.keys(r.value);for(const t of e){a.setStyle(t,r.value[t],s)}}else{a.setAttribute(r.key,r.value,s)}}}}function Wf(e){return(t,i,n)=>{if(!i.item){return}if(!(i.item instanceof af||i.item instanceof wf)&&!i.item.is("$textProxy")){return}const o=nm(e,i,n);if(!o){return}if(!n.consumable.consume(i.item,t.name)){return}const r=n.writer;const s=Mf(r,o);const a=r.document.selection;if(i.item instanceof af||i.item instanceof wf){r.wrap(a.getFirstRange(),s,a)}else{const e=n.mapper.toViewRange(i.range);const t=r.wrap(e,s);for(const e of t.getItems()){if(e.is("attributeElement")&&e.isSimilar(s)){n.mapper.bindElementToMarker(e,i.markerName);break}}}}}function qf(e){return(t,i,n)=>{if(!i.item){return}if(!(i.item instanceof $h)){return}const o=nm(e,i,n);if(!o){return}if(!n.consumable.test(i.item,t.name)){return}const r=n.mapper.toViewElement(i.item);if(r&&r.getCustomProperty("addHighlight")){n.consumable.consume(i.item,t.name);for(const e of ef._createIn(i.item)){n.consumable.consume(e.item,t.name)}r.getCustomProperty("addHighlight")(r,o,n.writer);n.mapper.bindElementToMarker(r,i.markerName)}}}function $f(e){return(t,i,n)=>{if(i.markerRange.isCollapsed){return}const o=nm(e,i,n);if(!o){return}const r=Mf(n.writer,o);const s=n.mapper.markerNameToElements(i.markerName);if(!s){return}for(const e of s){n.mapper.unbindElementFromMarkerName(e,i.markerName);if(e.is("attributeElement")){n.writer.unwrap(n.writer.createRangeOn(e),r)}else{e.getCustomProperty("removeHighlight")(e,o.id,n.writer)}}n.writer.clearClonedElementsGroup(i.markerName);t.stop()}}function Gf(e){e=Tf(e);e.view=Xf(e.view,"container");return t=>{t.on("insert:"+e.model,Rf(e.view),{priority:e.converterPriority||"normal"})}}function Kf(e){e=Tf(e);const t=e.model.key?e.model.key:e.model;let i="attribute:"+t;if(e.model.name){i+=":"+e.model.name}if(e.model.values){for(const t of e.model.values){e.view[t]=Xf(e.view[t],"attribute")}}else{e.view=Xf(e.view,"attribute")}const n=tm(e);return t=>{t.on(i,zf(n),{priority:e.converterPriority||"normal"})}}function Yf(e){e=Tf(e);const t=e.model.key?e.model.key:e.model;let i="attribute:"+t;if(e.model.name){i+=":"+e.model.name}if(e.model.values){for(const t of e.model.values){e.view[t]=im(e.view[t])}}else{e.view=im(e.view)}const n=tm(e);return t=>{t.on(i,Uf(n),{priority:e.converterPriority||"normal"})}}function Zf(e){e=Tf(e);e.view=Xf(e.view,"ui");return t=>{t.on("addMarker:"+e.model,Of(e.view),{priority:e.converterPriority||"normal"});t.on("removeMarker:"+e.model,Vf(e.view),{priority:e.converterPriority||"normal"})}}function Qf(e){e=Tf(e);const t=e.model;if(!e.view){e.view=i=>({group:t,name:i.substr(e.model.length+1)})}return i=>{i.on("addMarker:"+t,Df(e.view),{priority:e.converterPriority||"normal"});i.on("removeMarker:"+t,Hf(e.view),{priority:e.converterPriority||"normal"})}}function Jf(e){return t=>{t.on("addMarker:"+e.model,Wf(e.view),{priority:e.converterPriority||"normal"});t.on("addMarker:"+e.model,qf(e.view),{priority:e.converterPriority||"normal"});t.on("removeMarker:"+e.model,$f(e.view),{priority:e.converterPriority||"normal"})}}function Xf(e,t){if(typeof e=="function"){return e}return(i,n)=>em(e,n,t)}function em(e,t,i){if(typeof e=="string"){e={name:e}}let n;const o=t.writer;const r=Object.assign({},e.attributes);if(i=="container"){n=o.createContainerElement(e.name,r)}else if(i=="attribute"){const t={priority:e.priority||kl.DEFAULT_PRIORITY};n=o.createAttributeElement(e.name,r,t)}else{n=o.createUIElement(e.name,r)}if(e.styles){const t=Object.keys(e.styles);for(const i of t){o.setStyle(i,e.styles[i],n)}}if(e.classes){const t=e.classes;if(typeof t=="string"){o.addClass(t,n)}else{for(const e of t){o.addClass(e,n)}}}return n}function tm(e){if(e.model.values){return(t,i)=>{const n=e.view[t];if(n){return n(t,i)}return null}}else{return e.view}}function im(e){if(typeof e=="string"){return t=>({key:e,value:t})}else if(typeof e=="object"){if(e.value){return()=>e}else{return t=>({key:e.key,value:t})}}else{return e}}function nm(e,t,i){const n=typeof e=="function"?e(t,i):e;if(!n){return null}if(!n.priority){n.priority=10}if(!n.id){n.id=t.markerName}return n}function om(e){const{schema:t,document:i}=e.model;for(const n of i.getRootNames()){const o=i.getRoot(n);if(o.isEmpty&&!t.checkChild(o,"$text")){if(t.checkChild(o,"paragraph")){e.insertElement("paragraph",o);return true}}}return false}function rm(e,t,i){const n=i.createContext(e);if(!i.checkChild(n,"paragraph")){return false}if(!i.checkChild(n.push("paragraph"),t)){return false}return true}function sm(e,t){const i=t.createElement("paragraph");t.insert(i,e);return t.createPositionAt(i,0)}class am extends yf{elementToElement(e){return this.add(um(e))}elementToAttribute(e){return this.add(hm(e))}attributeToAttribute(e){return this.add(fm(e))}elementToMarker(e){console.warn(Object(ss["a"])("upcast-helpers-element-to-marker-deprecated: "+"The UpcastHelpers#elementToMarker() method was deprecated and will be removed in the near future. "+"Please use UpcastHelpers#dataToMarker() instead."));return this.add(mm(e))}dataToMarker(e){return this.add(gm(e))}}function cm(){return(e,t,i)=>{if(!t.modelRange&&i.consumable.consume(t.viewItem,{name:true})){const{modelRange:e,modelCursor:n}=i.convertChildren(t.viewItem,t.modelCursor);t.modelRange=e;t.modelCursor=n}}}function lm(){return(e,t,{schema:i,consumable:n,writer:o})=>{let r=t.modelCursor;if(!n.test(t.viewItem)){return}if(!i.checkChild(r,"$text")){if(!rm(r,"$text",i)){return}r=sm(r,o)}n.consume(t.viewItem);const s=o.createText(t.viewItem.data);o.insert(s,r);t.modelRange=o.createRange(r,r.getShiftedBy(s.offsetSize));t.modelCursor=t.modelRange.end}}function dm(e,t){return(i,n)=>{const o=n.newSelection;const r=[];for(const e of o.getRanges()){r.push(t.toModelRange(e))}const s=e.createSelection(r,{backward:o.isBackward});if(!s.isEqual(e.document.selection)){e.change(e=>{e.setSelection(s)})}}}function um(e){e=Tf(e);const t=wm(e);const i=bm(e.view);const n=i?"element:"+i:"element";return i=>{i.on(n,t,{priority:e.converterPriority||"normal"})}}function hm(e){e=Tf(e);vm(e);const t=ym(e,false);const i=bm(e.view);const n=i?"element:"+i:"element";return i=>{i.on(n,t,{priority:e.converterPriority||"low"})}}function fm(e){e=Tf(e);let t=null;if(typeof e.view=="string"||e.view.key){t=_m(e)}vm(e,t);const i=ym(e,true);return t=>{t.on("element",i,{priority:e.converterPriority||"low"})}}function mm(e){e=Tf(e);Cm(e);return um(e)}function gm(e){e=Tf(e);if(!e.model){e.model=t=>t?e.view+":"+t:e.view}const t=wm(Tm(e,"start"));const i=wm(Tm(e,"end"));return n=>{n.on("element:"+e.view+"-start",t,{priority:e.converterPriority||"normal"});n.on("element:"+e.view+"-end",i,{priority:e.converterPriority||"normal"});const o=os.get("low");const r=os.get("highest");const s=os.get(e.converterPriority)/r;n.on("element",pm(e),{priority:o+s})}}function pm(e){return(t,i,n)=>{const o=`data-${e.view}`;if(!i.modelRange){i=Object.assign(i,n.convertChildren(i.viewItem,i.modelCursor))}if(n.consumable.consume(i.viewItem,{attributes:o+"-end-after"})){r(i.modelRange.end,i.viewItem.getAttribute(o+"-end-after").split(","))}if(n.consumable.consume(i.viewItem,{attributes:o+"-start-after"})){r(i.modelRange.end,i.viewItem.getAttribute(o+"-start-after").split(","))}if(n.consumable.consume(i.viewItem,{attributes:o+"-end-before"})){r(i.modelRange.start,i.viewItem.getAttribute(o+"-end-before").split(","))}if(n.consumable.consume(i.viewItem,{attributes:o+"-start-before"})){r(i.modelRange.start,i.viewItem.getAttribute(o+"-start-before").split(","))}function r(t,o){for(const r of o){const o=e.model(r,n);const s=n.writer.createElement("$marker",{"data-name":o});n.writer.insert(s,t);if(i.modelCursor.isEqual(t)){i.modelCursor=i.modelCursor.getShiftedBy(1)}else{i.modelCursor=i.modelCursor._getTransformedByInsertion(t,1)}i.modelRange=i.modelRange._getTransformedByInsertion(t,1)[0]}}}}function bm(e){if(typeof e=="string"){return e}if(typeof e=="object"&&typeof e.name=="string"){return e.name}return null}function wm(e){const t=new Ws(e.view);return(i,n,o)=>{const r=t.match(n.viewItem);if(!r){return}const s=r.match;s.name=true;if(!o.consumable.test(n.viewItem,s)){return}const a=km(e.model,n.viewItem,o);if(!a){return}if(!o.safeInsert(a,n.modelCursor)){return}o.consumable.consume(n.viewItem,s);o.convertChildren(n.viewItem,a);o.updateConversionResult(a,n)}}function km(e,t,i){if(e instanceof Function){return e(t,i)}else{return i.writer.createElement(e)}}function _m(e){if(typeof e.view=="string"){e.view={key:e.view}}const t=e.view.key;let i;if(t=="class"||t=="style"){const n=t=="class"?"classes":"styles";i={[n]:e.view.value}}else{const n=typeof e.view.value=="undefined"?/[\s\S]*/:e.view.value;i={attributes:{[t]:n}}}if(e.view.name){i.name=e.view.name}e.view=i;return t}function vm(e,t=null){const i=t===null?true:e=>e.getAttribute(t);const n=typeof e.model!="object"?e.model:e.model.key;const o=typeof e.model!="object"||typeof e.model.value=="undefined"?i:e.model.value;e.model={key:n,value:o}}function ym(e,t){const i=new Ws(e.view);return(n,o,r)=>{const s=i.match(o.viewItem);if(!s){return}const a=e.model.key;const c=typeof e.model.value=="function"?e.model.value(o.viewItem,r):e.model.value;if(c===null){return}if(xm(e.view,o.viewItem)){s.match.name=true}else{delete s.match.name}if(!r.consumable.test(o.viewItem,s.match)){return}if(!o.modelRange){o=Object.assign(o,r.convertChildren(o.viewItem,o.modelCursor))}const l=Am(o.modelRange,{key:a,value:c},t,r);if(l){r.consumable.consume(o.viewItem,s.match)}}}function xm(e,t){const i=typeof e=="function"?e(t):e;if(typeof i=="object"&&!bm(i)){return false}return!i.classes&&!i.attributes&&!i.styles}function Am(e,t,i,n){let o=false;for(const r of Array.from(e.getItems({shallow:i}))){if(n.schema.checkAttribute(r,t.key)){n.writer.setAttribute(t.key,t.value,r);o=true}}return o}function Cm(e){const t=e.model;e.model=(e,i)=>{const n=typeof t=="string"?t:t(e,i);return i.writer.createElement("$marker",{"data-name":n})}}function Tm(e,t){const i={};i.view=e.view+"-"+t;i.model=(t,i)=>{const n=t.getAttribute("name");const o=e.model(n,i);return i.writer.createElement("$marker",{"data-name":o})};return i}class Sm{constructor(e,t){this.model=e;this.view=new Fh(t);this.mapper=new tf;this.downcastDispatcher=new rf({mapper:this.mapper,schema:e.schema});const i=this.model.document;const n=i.selection;const o=this.model.markers;this.listenTo(this.model,"_beforeChanges",()=>{this.view._disableRendering(true)},{priority:"highest"});this.listenTo(this.model,"_afterChanges",()=>{this.view._disableRendering(false)},{priority:"lowest"});this.listenTo(i,"change",()=>{this.view.change(e=>{this.downcastDispatcher.convertChanges(i.differ,o,e);this.downcastDispatcher.convertSelection(n,o,e)})},{priority:"low"});this.listenTo(this.view.document,"selectionChange",dm(this.model,this.mapper));this.downcastDispatcher.on("insert:$text",Ef(),{priority:"lowest"});this.downcastDispatcher.on("remove",Pf(),{priority:"low"});this.downcastDispatcher.on("selection",Nf(),{priority:"low"});this.downcastDispatcher.on("selection",If(),{priority:"low"});this.downcastDispatcher.on("selection",Lf(),{priority:"low"});this.view.document.roots.bindTo(this.model.document.roots).using(e=>{if(e.rootName=="$graveyard"){return null}const t=new ll(this.view.document,e.name);t.rootName=e.rootName;this.mapper.bindElements(e,t);return t})}destroy(){this.view.destroy();this.stopListening()}}ys(Sm,Zc);class Em{constructor(){this._commands=new Map}add(e,t){this._commands.set(e,t)}get(e){return this._commands.get(e)}execute(e,...t){const i=this.get(e);if(!i){throw new ss["b"]("commandcollection-command-not-found: Command does not exist.",this,{commandName:e})}return i.execute(...t)}*names(){yield*this._commands.keys()}*commands(){yield*this._commands.values()}[Symbol.iterator](){return this._commands[Symbol.iterator]()}destroy(){for(const e of this.commands()){e.destroy()}}}class Pm{constructor(){this._consumables=new Map}add(e,t){let i;if(e.is("$text")||e.is("documentFragment")){this._consumables.set(e,true);return}if(!this._consumables.has(e)){i=new Mm(e);this._consumables.set(e,i)}else{i=this._consumables.get(e)}i.add(t)}test(e,t){const i=this._consumables.get(e);if(i===undefined){return null}if(e.is("$text")||e.is("documentFragment")){return i}return i.test(t)}consume(e,t){if(this.test(e,t)){if(e.is("$text")||e.is("documentFragment")){this._consumables.set(e,false)}else{this._consumables.get(e).consume(t)}return true}return false}revert(e,t){const i=this._consumables.get(e);if(i!==undefined){if(e.is("$text")||e.is("documentFragment")){this._consumables.set(e,true)}else{i.revert(t)}}}static consumablesFromElement(e){const t={element:e,name:true,attributes:[],classes:[],styles:[]};const i=e.getAttributeKeys();for(const e of i){if(e=="style"||e=="class"){continue}t.attributes.push(e)}const n=e.getClassNames();for(const e of n){t.classes.push(e)}const o=e.getStyleNames();for(const e of o){t.styles.push(e)}return t}static createFrom(e,t){if(!t){t=new Pm(e)}if(e.is("$text")){t.add(e);return t}if(e.is("element")){t.add(e,Pm.consumablesFromElement(e))}if(e.is("documentFragment")){t.add(e)}for(const i of e.getChildren()){t=Pm.createFrom(i,t)}return t}}class Mm{constructor(e){this.element=e;this._canConsumeName=null;this._consumables={attributes:new Map,styles:new Map,classes:new Map}}add(e){if(e.name){this._canConsumeName=true}for(const t in this._consumables){if(t in e){this._add(t,e[t])}}}test(e){if(e.name&&!this._canConsumeName){return this._canConsumeName}for(const t in this._consumables){if(t in e){const i=this._test(t,e[t]);if(i!==true){return i}}}return true}consume(e){if(e.name){this._canConsumeName=false}for(const t in this._consumables){if(t in e){this._consume(t,e[t])}}}revert(e){if(e.name){this._canConsumeName=true}for(const t in this._consumables){if(t in e){this._revert(t,e[t])}}}_add(e,t){const i=Yt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e==="attributes"&&(t==="class"||t==="style")){throw new ss["b"]("viewconsumable-invalid-attribute: Classes and styles should be handled separately.",this)}n.set(t,true);if(e==="styles"){for(const e of this.element.document.stylesProcessor.getRelatedStyles(t)){n.set(e,true)}}}}_test(e,t){const i=Yt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e==="attributes"&&(t==="class"||t==="style")){const e=t=="class"?"classes":"styles";const i=this._test(e,[...this._consumables[e].keys()]);if(i!==true){return i}}else{const e=n.get(t);if(e===undefined){return null}if(!e){return false}}}return true}_consume(e,t){const i=Yt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e==="attributes"&&(t==="class"||t==="style")){const e=t=="class"?"classes":"styles";this._consume(e,[...this._consumables[e].keys()])}else{n.set(t,false);if(e=="styles"){for(const e of this.element.document.stylesProcessor.getRelatedStyles(t)){n.set(e,false)}}}}}_revert(e,t){const i=Yt(t)?t:[t];const n=this._consumables[e];for(const t of i){if(e==="attributes"&&(t==="class"||t==="style")){const e=t=="class"?"classes":"styles";this._revert(e,[...this._consumables[e].keys()])}else{const e=n.get(t);if(e===false){n.set(t,true)}}}}}class Im{constructor(){this._sourceDefinitions={};this._attributeProperties={};this.decorate("checkChild");this.decorate("checkAttribute");this.on("checkAttribute",(e,t)=>{t[0]=new Lm(t[0])},{priority:"highest"});this.on("checkChild",(e,t)=>{t[0]=new Lm(t[0]);t[1]=this.getDefinition(t[1])},{priority:"highest"})}register(e,t){if(this._sourceDefinitions[e]){throw new ss["b"]("schema-cannot-register-item-twice: A single item cannot be registered twice in the schema.",this,{itemName:e})}this._sourceDefinitions[e]=[Object.assign({},t)];this._clearCache()}extend(e,t){if(!this._sourceDefinitions[e]){throw new ss["b"]("schema-cannot-extend-missing-item: Cannot extend an item which was not registered yet.",this,{itemName:e})}this._sourceDefinitions[e].push(Object.assign({},t));this._clearCache()}getDefinitions(){if(!this._compiledDefinitions){this._compile()}return this._compiledDefinitions}getDefinition(e){let t;if(typeof e=="string"){t=e}else if(e.is&&(e.is("$text")||e.is("$textProxy"))){t="$text"}else{t=e.name}return this.getDefinitions()[t]}isRegistered(e){return!!this.getDefinition(e)}isBlock(e){const t=this.getDefinition(e);return!!(t&&t.isBlock)}isLimit(e){const t=this.getDefinition(e);if(!t){return false}return!!(t.isLimit||t.isObject)}isObject(e){const t=this.getDefinition(e);if(!t){return false}return!!(t.isObject||t.isLimit&&t.isSelectable&&t.isContent)}isInline(e){const t=this.getDefinition(e);return!!(t&&t.isInline)}isSelectable(e){const t=this.getDefinition(e);if(!t){return false}return!!(t.isSelectable||t.isObject)}isContent(e){const t=this.getDefinition(e);if(!t){return false}return!!(t.isContent||t.isObject)}checkChild(e,t){if(!t){return false}return this._checkContextMatch(t,e)}checkAttribute(e,t){const i=this.getDefinition(e.last);if(!i){return false}return i.allowAttributes.includes(t)}checkMerge(e,t=null){if(e instanceof Zh){const t=e.nodeBefore;const i=e.nodeAfter;if(!(t instanceof $h)){throw new ss["b"]("schema-check-merge-no-element-before: The node before the merge position must be an element.",this)}if(!(i instanceof $h)){throw new ss["b"]("schema-check-merge-no-element-after: The node after the merge position must be an element.",this)}return this.checkMerge(t,i)}for(const i of t.getChildren()){if(!this.checkChild(e,i)){return false}}return true}addChildCheck(e){this.on("checkChild",(t,[i,n])=>{if(!n){return}const o=e(i,n);if(typeof o=="boolean"){t.stop();t.return=o}},{priority:"high"})}addAttributeCheck(e){this.on("checkAttribute",(t,[i,n])=>{const o=e(i,n);if(typeof o=="boolean"){t.stop();t.return=o}},{priority:"high"})}setAttributeProperties(e,t){this._attributeProperties[e]=Object.assign(this.getAttributeProperties(e),t)}getAttributeProperties(e){return this._attributeProperties[e]||{}}getLimitElement(e){let t;if(e instanceof Zh){t=e.parent}else{const i=e instanceof ef?[e]:Array.from(e.getRanges());t=i.reduce((e,t)=>{const i=t.getCommonAncestor();if(!e){return i}return e.getCommonAncestor(i,{includeSelf:true})},null)}while(!this.isLimit(t)){if(t.parent){t=t.parent}else{break}}return t}checkAttributeInSelection(e,t){if(e.isCollapsed){const i=e.getFirstPosition();const n=[...i.getAncestors(),new Uh("",e.getAttributes())];return this.checkAttribute(n,t)}else{const i=e.getRanges();for(const e of i){for(const i of e){if(this.checkAttribute(i.item,t)){return true}}}}return false}*getValidRanges(e,t){e=Gm(e);for(const i of e){yield*this._getValidRangesForRange(i,t)}}getNearestSelectionRange(e,t="both"){if(this.checkChild(e,"$text")){return new ef(e)}let i,n;const o=e.getAncestors().reverse().find(e=>this.isLimit(e))||e.root;if(t=="both"||t=="backward"){i=new Kh({boundaries:ef._createIn(o),startPosition:e,direction:"backward"})}if(t=="both"||t=="forward"){n=new Kh({boundaries:ef._createIn(o),startPosition:e})}for(const e of $m(i,n)){const t=e.walker==i?"elementEnd":"elementStart";const n=e.value;if(n.type==t&&this.isObject(n.item)){return ef._createOn(n.item)}if(this.checkChild(n.nextPosition,"$text")){return new ef(n.nextPosition)}}return null}findAllowedParent(e,t){let i=e.parent;while(i){if(this.checkChild(i,t)){return i}if(this.isLimit(i)){return null}i=i.parent}return null}removeDisallowedAttributes(e,t){for(const i of e){if(i.is("$text")){Km(this,i,t)}else{const e=ef._createIn(i);const n=e.getPositions();for(const e of n){const i=e.nodeBefore||e.parent;Km(this,i,t)}}}}createContext(e){return new Lm(e)}_clearCache(){this._compiledDefinitions=null}_compile(){const e={};const t=this._sourceDefinitions;const i=Object.keys(t);for(const n of i){e[n]=Nm(t[n],n)}for(const t of i){zm(e,t)}for(const t of i){Rm(e,t)}for(const t of i){Om(e,t);Vm(e,t)}for(const t of i){Dm(e,t);Bm(e,t)}this._compiledDefinitions=e}_checkContextMatch(e,t,i=t.length-1){const n=t.getItem(i);if(e.allowIn.includes(n.name)){if(i==0){return true}else{const e=this.getDefinition(n);return this._checkContextMatch(e,t,i-1)}}else{return false}}*_getValidRangesForRange(e,t){let i=e.start;let n=e.start;for(const o of e.getItems({shallow:true})){if(o.is("element")){yield*this._getValidRangesForRange(ef._createIn(o),t)}if(!this.checkAttribute(o,t)){if(!i.isEqual(n)){yield new ef(i,n)}i=Zh._createAfter(o)}n=Zh._createAfter(o)}if(!i.isEqual(n)){yield new ef(i,n)}}}ys(Im,Zc);class Lm{constructor(e){if(e instanceof Lm){return e}if(typeof e=="string"){e=[e]}else if(!Array.isArray(e)){e=e.getAncestors({includeSelf:true})}if(e[0]&&typeof e[0]!="string"&&e[0].is("documentFragment")){e.shift()}this._items=e.map(qm)}get length(){return this._items.length}get last(){return this._items[this._items.length-1]}[Symbol.iterator](){return this._items[Symbol.iterator]()}push(e){const t=new Lm([e]);t._items=[...this._items,...t._items];return t}getItem(e){return this._items[e]}*getNames(){yield*this._items.map(e=>e.name)}endsWith(e){return Array.from(this.getNames()).join(" ").endsWith(e)}startsWith(e){return Array.from(this.getNames()).join(" ").startsWith(e)}}function Nm(e,t){const i={name:t,allowIn:[],allowContentOf:[],allowWhere:[],allowAttributes:[],allowAttributesOf:[],inheritTypesFrom:[]};jm(e,i);Fm(e,i,"allowIn");Fm(e,i,"allowContentOf");Fm(e,i,"allowWhere");Fm(e,i,"allowAttributes");Fm(e,i,"allowAttributesOf");Fm(e,i,"inheritTypesFrom");Hm(e,i);return i}function zm(e,t){for(const i of e[t].allowContentOf){if(e[i]){const n=Um(e,i);n.forEach(e=>{e.allowIn.push(t)})}}delete e[t].allowContentOf}function Rm(e,t){for(const i of e[t].allowWhere){const n=e[i];if(n){const i=n.allowIn;e[t].allowIn.push(...i)}}delete e[t].allowWhere}function Om(e,t){for(const i of e[t].allowAttributesOf){const n=e[i];if(n){const i=n.allowAttributes;e[t].allowAttributes.push(...i)}}delete e[t].allowAttributesOf}function Vm(e,t){const i=e[t];for(const t of i.inheritTypesFrom){const n=e[t];if(n){const e=Object.keys(n).filter(e=>e.startsWith("is"));for(const t of e){if(!(t in i)){i[t]=n[t]}}}}delete i.inheritTypesFrom}function Dm(e,t){const i=e[t];const n=i.allowIn.filter(t=>e[t]);i.allowIn=Array.from(new Set(n))}function Bm(e,t){const i=e[t];i.allowAttributes=Array.from(new Set(i.allowAttributes))}function jm(e,t){for(const i of e){const e=Object.keys(i).filter(e=>e.startsWith("is"));for(const n of e){t[n]=i[n]}}}function Fm(e,t,i){for(const n of e){if(typeof n[i]=="string"){t[i].push(n[i])}else if(Array.isArray(n[i])){t[i].push(...n[i])}}}function Hm(e,t){for(const i of e){const e=i.inheritAllFrom;if(e){t.allowContentOf.push(e);t.allowWhere.push(e);t.allowAttributesOf.push(e);t.inheritTypesFrom.push(e)}}}function Um(e,t){const i=e[t];return Wm(e).filter(e=>e.allowIn.includes(i.name))}function Wm(e){return Object.keys(e).map(t=>e[t])}function qm(e){if(typeof e=="string"){return{name:e,*getAttributeKeys(){},getAttribute(){}}}else{return{name:e.is("element")?e.name:"$text",*getAttributeKeys(){yield*e.getAttributeKeys()},getAttribute(t){return e.getAttribute(t)}}}}function*$m(e,t){let i=false;while(!i){i=true;if(e){const t=e.next();if(!t.done){i=false;yield{walker:e,value:t.value}}}if(t){const e=t.next();if(!e.done){i=false;yield{walker:t,value:e.value}}}}}function*Gm(e){for(const t of e){yield*t.getMinimalFlatRanges()}}function Km(e,t,i){for(const n of t.getAttributeKeys()){if(!e.checkAttribute(t,n)){i.removeAttribute(n,t)}}}class Ym{constructor(e={}){this._splitParts=new Map;this._cursorParents=new Map;this._modelCursor=null;this.conversionApi=Object.assign({},e);this.conversionApi.convertItem=this._convertItem.bind(this);this.conversionApi.convertChildren=this._convertChildren.bind(this);this.conversionApi.safeInsert=this._safeInsert.bind(this);this.conversionApi.updateConversionResult=this._updateConversionResult.bind(this);this.conversionApi.splitToAllowedParent=this._splitToAllowedParent.bind(this);this.conversionApi.getSplitParts=this._getSplitParts.bind(this)}convert(e,t,i=["$root"]){this.fire("viewCleanup",e);this._modelCursor=Qm(i,t);this.conversionApi.writer=t;this.conversionApi.consumable=Pm.createFrom(e);this.conversionApi.store={};const{modelRange:n}=this._convertItem(e,this._modelCursor);const o=t.createDocumentFragment();if(n){this._removeEmptyElements();for(const e of Array.from(this._modelCursor.parent.getChildren())){t.append(e,o)}o.markers=Zm(o,t)}this._modelCursor=null;this._splitParts.clear();this._cursorParents.clear();this.conversionApi.writer=null;this.conversionApi.store=null;return o}_convertItem(e,t){const i=Object.assign({viewItem:e,modelCursor:t,modelRange:null});if(e.is("element")){this.fire("element:"+e.name,i,this.conversionApi)}else if(e.is("$text")){this.fire("text",i,this.conversionApi)}else{this.fire("documentFragment",i,this.conversionApi)}if(i.modelRange&&!(i.modelRange instanceof ef)){throw new ss["b"]("view-conversion-dispatcher-incorrect-result: Incorrect conversion result was dropped.",this)}return{modelRange:i.modelRange,modelCursor:i.modelCursor}}_convertChildren(e,t){let i=t.is("position")?t:Zh._createAt(t,0);const n=new ef(i);for(const t of Array.from(e.getChildren())){const e=this._convertItem(t,i);if(e.modelRange instanceof ef){n.end=e.modelRange.end;i=e.modelCursor}}return{modelRange:n,modelCursor:i}}_safeInsert(e,t){const i=this._splitToAllowedParent(e,t);if(!i){return false}this.conversionApi.writer.insert(e,i.position);return true}_updateConversionResult(e,t){const i=this._getSplitParts(e);const n=this.conversionApi.writer;if(!t.modelRange){t.modelRange=n.createRange(n.createPositionBefore(e),n.createPositionAfter(i[i.length-1]))}const o=this._cursorParents.get(e);if(o){t.modelCursor=n.createPositionAt(o,0)}else{t.modelCursor=t.modelRange.end}}_splitToAllowedParent(e,t){const{schema:i,writer:n}=this.conversionApi;let o=i.findAllowedParent(t,e);if(o){if(o===t.parent){return{position:t}}if(this._modelCursor.parent.getAncestors().includes(o)){o=null}}if(!o){if(!rm(t,e,i)){return null}return{position:sm(t,n)}}const r=this.conversionApi.writer.split(t,o);const s=[];for(const e of r.range.getWalker()){if(e.type=="elementEnd"){s.push(e.item)}else{const t=s.pop();const i=e.item;this._registerSplitPair(t,i)}}const a=r.range.end.parent;this._cursorParents.set(e,a);return{position:r.position,cursorParent:a}}_registerSplitPair(e,t){if(!this._splitParts.has(e)){this._splitParts.set(e,[e])}const i=this._splitParts.get(e);this._splitParts.set(t,i);i.push(t)}_getSplitParts(e){let t;if(!this._splitParts.has(e)){t=[e]}else{t=this._splitParts.get(e)}return t}_removeEmptyElements(){let e=false;for(const t of this._splitParts.keys()){if(t.isEmpty){this.conversionApi.writer.remove(t);this._splitParts.delete(t);e=true}}if(e){this._removeEmptyElements()}}}ys(Ym,ds);function Zm(e,t){const i=new Set;const n=new Map;const o=ef._createIn(e).getItems();for(const e of o){if(e.name=="$marker"){i.add(e)}}for(const e of i){const i=e.getAttribute("data-name");const o=t.createPositionBefore(e);if(!n.has(i)){n.set(i,new ef(o.clone()))}else{n.get(i).end=o.clone()}t.remove(e)}return n}function Qm(e,t){let i;for(const n of new Lm(e)){const e={};for(const t of n.getAttributeKeys()){e[t]=n.getAttribute(t)}const o=t.createElement(n.name,e);if(i){t.append(o,i)}i=Zh._createAt(o,0)}return i}class Jm{constructor(e,t){this.model=e;this.stylesProcessor=t;this.processor;this.mapper=new tf;this.downcastDispatcher=new rf({mapper:this.mapper,schema:e.schema});this.downcastDispatcher.on("insert:$text",Ef(),{priority:"lowest"});this.upcastDispatcher=new Ym({schema:e.schema});this.viewDocument=new bl(t);this._viewWriter=new Ql(this.viewDocument);this.upcastDispatcher.on("text",lm(),{priority:"lowest"});this.upcastDispatcher.on("element",cm(),{priority:"lowest"});this.upcastDispatcher.on("documentFragment",cm(),{priority:"lowest"});this.decorate("init");this.decorate("set");this.on("init",()=>{this.fire("ready")},{priority:"lowest"});this.on("ready",()=>{this.model.enqueueChange("transparent",om)},{priority:"lowest"})}get(e={}){const{rootName:t="main",trim:i="empty"}=e;if(!this._checkIfRootsExists([t])){throw new ss["b"]("datacontroller-get-non-existent-root: Attempting to get data from a non-existing root.",this)}const n=this.model.document.getRoot(t);if(i==="empty"&&!this.model.hasContent(n,{ignoreWhitespaces:true})){return""}return this.stringify(n,e)}stringify(e,t){const i=this.toView(e,t);return this.processor.toData(i)}toView(e,t){const i=this.viewDocument;const n=this._viewWriter;this.mapper.clearBindings();const o=ef._createIn(e);const r=new Yl(i);this.mapper.bindElements(e,r);this.downcastDispatcher.conversionApi.options=t;this.downcastDispatcher.convertInsert(o,n);if(!e.is("documentFragment")){const t=Xm(e);for(const[e,i]of t){this.downcastDispatcher.convertMarkerAdd(e,i,n)}}delete this.downcastDispatcher.conversionApi.options;return r}init(e){if(this.model.document.version){throw new ss["b"]("datacontroller-init-document-not-empty: Trying to set initial data to not empty document.",this)}let t={};if(typeof e==="string"){t.main=e}else{t=e}if(!this._checkIfRootsExists(Object.keys(t))){throw new ss["b"]("datacontroller-init-non-existent-root: Attempting to init data on a non-existing root.",this)}this.model.enqueueChange("transparent",e=>{for(const i of Object.keys(t)){const n=this.model.document.getRoot(i);e.insert(this.parse(t[i],n),n,0)}});return Promise.resolve()}set(e){let t={};if(typeof e==="string"){t.main=e}else{t=e}if(!this._checkIfRootsExists(Object.keys(t))){throw new ss["b"]("datacontroller-set-non-existent-root: Attempting to set data on a non-existing root.",this)}this.model.enqueueChange("transparent",e=>{e.setSelection(null);e.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());for(const i of Object.keys(t)){const n=this.model.document.getRoot(i);e.remove(e.createRangeIn(n));e.insert(this.parse(t[i],n),n,0)}})}parse(e,t="$root"){const i=this.processor.toView(e);return this.toModel(i,t)}toModel(e,t="$root"){return this.model.change(i=>this.upcastDispatcher.convert(e,i,t))}addStyleProcessorRules(e){e(this.stylesProcessor)}destroy(){this.stopListening()}_checkIfRootsExists(e){for(const t of e){if(!this.model.document.getRootNames().includes(t)){return false}}return true}}ys(Jm,Zc);function Xm(e){const t=[];const i=e.root.document;if(!i){return[]}const n=ef._createIn(e);for(const e of i.model.markers){const i=n.getIntersection(e.getRange());if(i){t.push([e.name,i])}}return t}class eg{constructor(e,t){this._helpers=new Map;this._downcast=Array.isArray(e)?e:[e];this._createConversionHelpers({name:"downcast",dispatchers:this._downcast,isDowncast:true});this._upcast=Array.isArray(t)?t:[t];this._createConversionHelpers({name:"upcast",dispatchers:this._upcast,isDowncast:false})}addAlias(e,t){const i=this._downcast.includes(t);const n=this._upcast.includes(t);if(!n&&!i){throw new ss["b"]("conversion-add-alias-dispatcher-not-registered: "+"Trying to register and alias for a dispatcher that nas not been registered.",this)}this._createConversionHelpers({name:e,dispatchers:[t],isDowncast:i})}for(e){if(!this._helpers.has(e)){throw new ss["b"]("conversion-for-unknown-group: Trying to add a converter to an unknown dispatchers group.",this)}return this._helpers.get(e)}elementToElement(e){this.for("downcast").elementToElement(e);for(const{model:t,view:i}of tg(e)){this.for("upcast").elementToElement({model:t,view:i,converterPriority:e.converterPriority})}}attributeToElement(e){this.for("downcast").attributeToElement(e);for(const{model:t,view:i}of tg(e)){this.for("upcast").elementToAttribute({view:i,model:t,converterPriority:e.converterPriority})}}attributeToAttribute(e){this.for("downcast").attributeToAttribute(e);for(const{model:t,view:i}of tg(e)){this.for("upcast").attributeToAttribute({view:i,model:t})}}_createConversionHelpers({name:e,dispatchers:t,isDowncast:i}){if(this._helpers.has(e)){throw new ss["b"]("conversion-group-exists: Trying to register a group name that has already been registered.",this)}const n=i?new Sf(t):new am(t);this._helpers.set(e,n)}}function*tg(e){if(e.model.values){for(const t of e.model.values){const i={key:e.model.key,value:t};const n=e.view[t];const o=e.upcastAlso?e.upcastAlso[t]:undefined;yield*ig(i,n,o)}}else{yield*ig(e.model,e.view,e.upcastAlso)}}function*ig(e,t,i){yield{model:e,view:t};if(i){i=Array.isArray(i)?i:[i];for(const t of i){yield{model:e,view:t}}}}class ng{constructor(e="default"){this.operations=[];this.type=e}get baseVersion(){for(const e of this.operations){if(e.baseVersion!==null){return e.baseVersion}}return null}addOperation(e){e.batch=this;this.operations.push(e);return e}}class og{constructor(e){this.baseVersion=e;this.isDocumentOperation=this.baseVersion!==null;this.batch=null}_validate(){}toJSON(){const e=Object.assign({},this);e.__className=this.constructor.className;delete e.batch;delete e.isDocumentOperation;return e}static get className(){return"Operation"}static fromJSON(e){return new this(e.baseVersion)}}class rg{constructor(e){this.markers=new Map;this._children=new qh;if(e){this._insertChild(0,e)}}[Symbol.iterator](){return this.getChildren()}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}is(e){return e==="documentFragment"||e==="model:documentFragment"}getChild(e){return this._children.getNode(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}getPath(){return[]}getNodeByPath(e){let t=this;for(const i of e){t=t.getChild(t.offsetToIndex(i))}return t}offsetToIndex(e){return this._children.offsetToIndex(e)}toJSON(){const e=[];for(const t of this._children){e.push(t.toJSON())}return e}static fromJSON(e){const t=[];for(const i of e){if(i.name){t.push($h.fromJSON(i))}else{t.push(Uh.fromJSON(i))}}return new rg(t)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){const i=sg(t);for(const e of i){if(e.parent!==null){e._remove()}e.parent=this}this._children._insertNodes(e,i)}_removeChildren(e,t=1){const i=this._children._removeNodes(e,t);for(const e of i){e.parent=null}return i}}function sg(e){if(typeof e=="string"){return[new Uh(e)]}if(!vs(e)){e=[e]}return Array.from(e).map(e=>{if(typeof e=="string"){return new Uh(e)}if(e instanceof Wh){return new Uh(e.data,e.getAttributes())}return e})}function ag(e,t){t=ug(t);const i=t.reduce((e,t)=>e+t.offsetSize,0);const n=e.parent;fg(e);const o=e.index;n._insertChild(o,t);hg(n,o+t.length);hg(n,o);return new ef(e,e.getShiftedBy(i))}function cg(e){if(!e.isFlat){throw new ss["b"]("operation-utils-remove-range-not-flat: "+"Trying to remove a range which starts and ends in different element.",this)}const t=e.start.parent;fg(e.start);fg(e.end);const i=t._removeChildren(e.start.index,e.end.index-e.start.index);hg(t,e.start.index);return i}function lg(e,t){if(!e.isFlat){throw new ss["b"]("operation-utils-move-range-not-flat: "+"Trying to move a range which starts and ends in different element.",this)}const i=cg(e);t=t._getTransformedByDeletion(e.start,e.end.offset-e.start.offset);return ag(t,i)}function dg(e,t,i){fg(e.start);fg(e.end);for(const n of e.getItems({shallow:true})){const e=n.is("$textProxy")?n.textNode:n;if(i!==null){e._setAttribute(t,i)}else{e._removeAttribute(t)}hg(e.parent,e.index)}hg(e.end.parent,e.end.index)}function ug(e){const t=[];if(!(e instanceof Array)){e=[e]}for(let i=0;ie.maxOffset){throw new ss["b"]("move-operation-nodes-do-not-exist: The nodes which should be moved do not exist.",this)}else if(e===t&&i=i&&this.targetPosition.path[e]e._clone(true)));const t=new _g(this.position,e,this.baseVersion);t.shouldReceiveAttributes=this.shouldReceiveAttributes;return t}getReversed(){const e=this.position.root.document.graveyard;const t=new Zh(e,[0]);return new kg(this.position,this.nodes.maxOffset,t,this.baseVersion+1)}_validate(){const e=this.position.parent;if(!e||e.maxOffsete._clone(true)));ag(this.position,e)}toJSON(){const e=super.toJSON();e.position=this.position.toJSON();e.nodes=this.nodes.toJSON();return e}static get className(){return"InsertOperation"}static fromJSON(e,t){const i=[];for(const t of e.nodes){if(t.name){i.push($h.fromJSON(t))}else{i.push(Uh.fromJSON(t))}}const n=new _g(Zh.fromJSON(e.position,t),i,e.baseVersion);n.shouldReceiveAttributes=e.shouldReceiveAttributes;return n}}class vg extends og{constructor(e,t,i,n,o,r){super(r);this.name=e;this.oldRange=t?t.clone():null;this.newRange=i?i.clone():null;this.affectsData=o;this._markers=n}get type(){return"marker"}clone(){return new vg(this.name,this.oldRange,this.newRange,this._markers,this.affectsData,this.baseVersion)}getReversed(){return new vg(this.name,this.newRange,this.oldRange,this._markers,this.affectsData,this.baseVersion+1)}_execute(){const e=this.newRange?"_set":"_remove";this._markers[e](this.name,this.newRange,true,this.affectsData)}toJSON(){const e=super.toJSON();if(this.oldRange){e.oldRange=this.oldRange.toJSON()}if(this.newRange){e.newRange=this.newRange.toJSON()}delete e._markers;return e}static get className(){return"MarkerOperation"}static fromJSON(e,t){return new vg(e.name,e.oldRange?ef.fromJSON(e.oldRange,t):null,e.newRange?ef.fromJSON(e.newRange,t):null,t.model.markers,e.affectsData,e.baseVersion)}}class yg extends og{constructor(e,t,i,n){super(n);this.position=e;this.position.stickiness="toNext";this.oldName=t;this.newName=i}get type(){return"rename"}clone(){return new yg(this.position.clone(),this.oldName,this.newName,this.baseVersion)}getReversed(){return new yg(this.position.clone(),this.newName,this.oldName,this.baseVersion+1)}_validate(){const e=this.position.nodeAfter;if(!(e instanceof $h)){throw new ss["b"]("rename-operation-wrong-position: Given position is invalid or node after it is not an instance of Element.",this)}else if(e.name!==this.oldName){throw new ss["b"]("rename-operation-wrong-name: Element to change has different name than operation's old name.",this)}}_execute(){const e=this.position.nodeAfter;e.name=this.newName}toJSON(){const e=super.toJSON();e.position=this.position.toJSON();return e}static get className(){return"RenameOperation"}static fromJSON(e,t){return new yg(Zh.fromJSON(e.position,t),e.oldName,e.newName,e.baseVersion)}}class xg extends og{constructor(e,t,i,n,o){super(o);this.root=e;this.key=t;this.oldValue=i;this.newValue=n}get type(){if(this.oldValue===null){return"addRootAttribute"}else if(this.newValue===null){return"removeRootAttribute"}else{return"changeRootAttribute"}}clone(){return new xg(this.root,this.key,this.oldValue,this.newValue,this.baseVersion)}getReversed(){return new xg(this.root,this.key,this.newValue,this.oldValue,this.baseVersion+1)}_validate(){if(this.root!=this.root.root||this.root.is("documentFragment")){throw new ss["b"]("rootattribute-operation-not-a-root: The element to change is not a root element.",this,{root:this.root,key:this.key})}if(this.oldValue!==null&&this.root.getAttribute(this.key)!==this.oldValue){throw new ss["b"]("rootattribute-operation-wrong-old-value: Changed node has different attribute value than operation's "+"old attribute value.",this,{root:this.root,key:this.key})}if(this.oldValue===null&&this.newValue!==null&&this.root.hasAttribute(this.key)){throw new ss["b"]("rootattribute-operation-attribute-exists: The attribute with given key already exists.",this,{root:this.root,key:this.key})}}_execute(){if(this.newValue!==null){this.root._setAttribute(this.key,this.newValue)}else{this.root._removeAttribute(this.key)}}toJSON(){const e=super.toJSON();e.root=this.root.toJSON();return e}static get className(){return"RootAttributeOperation"}static fromJSON(e,t){if(!t.getRoot(e.root)){throw new ss["b"]("rootattribute-operation-fromjson-no-root: Cannot create RootAttributeOperation. Root with specified name does not exist.",this,{rootName:e.root})}return new xg(t.getRoot(e.root),e.key,e.oldValue,e.newValue,e.baseVersion)}}class Ag extends og{constructor(e,t,i,n,o){super(o);this.sourcePosition=e.clone();this.sourcePosition.stickiness="toPrevious";this.howMany=t;this.targetPosition=i.clone();this.targetPosition.stickiness="toNext";this.graveyardPosition=n.clone()}get type(){return"merge"}get deletionPosition(){return new Zh(this.sourcePosition.root,this.sourcePosition.path.slice(0,-1))}get movedRange(){const e=this.sourcePosition.getShiftedBy(Number.POSITIVE_INFINITY);return new ef(this.sourcePosition,e)}clone(){return new this.constructor(this.sourcePosition,this.howMany,this.targetPosition,this.graveyardPosition,this.baseVersion)}getReversed(){const e=this.targetPosition._getTransformedByMergeOperation(this);const t=this.sourcePosition.path.slice(0,-1);const i=new Zh(this.sourcePosition.root,t)._getTransformedByMergeOperation(this);const n=new Cg(e,this.howMany,this.graveyardPosition,this.baseVersion+1);n.insertionPosition=i;return n}_validate(){const e=this.sourcePosition.parent;const t=this.targetPosition.parent;if(!e.parent){throw new ss["b"]("merge-operation-source-position-invalid: Merge source position is invalid.",this)}else if(!t.parent){throw new ss["b"]("merge-operation-target-position-invalid: Merge target position is invalid.",this)}else if(this.howMany!=e.maxOffset){throw new ss["b"]("merge-operation-how-many-invalid: Merge operation specifies wrong number of nodes to move.",this)}}_execute(){const e=this.sourcePosition.parent;const t=ef._createIn(e);lg(t,this.targetPosition);lg(ef._createOn(e),this.graveyardPosition)}toJSON(){const e=super.toJSON();e.sourcePosition=e.sourcePosition.toJSON();e.targetPosition=e.targetPosition.toJSON();e.graveyardPosition=e.graveyardPosition.toJSON();return e}static get className(){return"MergeOperation"}static fromJSON(e,t){const i=Zh.fromJSON(e.sourcePosition,t);const n=Zh.fromJSON(e.targetPosition,t);const o=Zh.fromJSON(e.graveyardPosition,t);return new this(i,e.howMany,n,o,e.baseVersion)}}class Cg extends og{constructor(e,t,i,n){super(n);this.splitPosition=e.clone();this.splitPosition.stickiness="toNext";this.howMany=t;this.insertionPosition=Cg.getInsertionPosition(e);this.insertionPosition.stickiness="toNone";this.graveyardPosition=i?i.clone():null;if(this.graveyardPosition){this.graveyardPosition.stickiness="toNext"}}get type(){return"split"}get moveTargetPosition(){const e=this.insertionPosition.path.slice();e.push(0);return new Zh(this.insertionPosition.root,e)}get movedRange(){const e=this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);return new ef(this.splitPosition,e)}clone(){const e=new this.constructor(this.splitPosition,this.howMany,this.graveyardPosition,this.baseVersion);e.insertionPosition=this.insertionPosition;return e}getReversed(){const e=this.splitPosition.root.document.graveyard;const t=new Zh(e,[0]);return new Ag(this.moveTargetPosition,this.howMany,this.splitPosition,t,this.baseVersion+1)}_validate(){const e=this.splitPosition.parent;const t=this.splitPosition.offset;if(!e||e.maxOffset{for(const t of e.getAttributeKeys()){this.removeAttribute(t,e)}};if(!(e instanceof ef)){t(e)}else{for(const i of e.getItems()){t(i)}}}move(e,t,i){this._assertWriterUsedCorrectly();if(!(e instanceof ef)){throw new ss["b"]("writer-move-invalid-range: Invalid range to move.",this)}if(!e.isFlat){throw new ss["b"]("writer-move-range-not-flat: Range to move is not flat.",this)}const n=Zh._createAt(t,i);if(n.isEqual(e.start)){return}this._addOperationForAffectedMarkers("move",e);if(!Lg(e.root,n.root)){throw new ss["b"]("writer-move-different-document: Range is going to be moved between different documents.",this)}const o=e.root.document?e.root.document.version:null;const r=new kg(e.start,e.end.offset-e.start.offset,n,o);this.batch.addOperation(r);this.model.applyOperation(r)}remove(e){this._assertWriterUsedCorrectly();const t=e instanceof ef?e:ef._createOn(e);const i=t.getMinimalFlatRanges().reverse();for(const e of i){this._addOperationForAffectedMarkers("move",e);Ig(e.start,e.end.offset-e.start.offset,this.batch,this.model)}}merge(e){this._assertWriterUsedCorrectly();const t=e.nodeBefore;const i=e.nodeAfter;this._addOperationForAffectedMarkers("merge",e);if(!(t instanceof $h)){throw new ss["b"]("writer-merge-no-element-before: Node before merge position must be an element.",this)}if(!(i instanceof $h)){throw new ss["b"]("writer-merge-no-element-after: Node after merge position must be an element.",this)}if(!e.root.document){this._mergeDetached(e)}else{this._merge(e)}}createPositionFromPath(e,t,i){return this.model.createPositionFromPath(e,t,i)}createPositionAt(e,t){return this.model.createPositionAt(e,t)}createPositionAfter(e){return this.model.createPositionAfter(e)}createPositionBefore(e){return this.model.createPositionBefore(e)}createRange(e,t){return this.model.createRange(e,t)}createRangeIn(e){return this.model.createRangeIn(e)}createRangeOn(e){return this.model.createRangeOn(e)}createSelection(e,t,i){return this.model.createSelection(e,t,i)}_mergeDetached(e){const t=e.nodeBefore;const i=e.nodeAfter;this.move(ef._createIn(i),Zh._createAt(t,"end"));this.remove(i)}_merge(e){const t=Zh._createAt(e.nodeBefore,"end");const i=Zh._createAt(e.nodeAfter,0);const n=e.root.document.graveyard;const o=new Zh(n,[0]);const r=e.root.document.version;const s=new Ag(i,e.nodeAfter.maxOffset,t,o,r);this.batch.addOperation(s);this.model.applyOperation(s)}rename(e,t){this._assertWriterUsedCorrectly();if(!(e instanceof $h)){throw new ss["b"]("writer-rename-not-element-instance: Trying to rename an object which is not an instance of Element.",this)}const i=e.root.document?e.root.document.version:null;const n=new yg(Zh._createBefore(e),e.name,t,i);this.batch.addOperation(n);this.model.applyOperation(n)}split(e,t){this._assertWriterUsedCorrectly();let i=e.parent;if(!i.parent){throw new ss["b"]("writer-split-element-no-parent: Element with no parent can not be split.",this)}if(!t){t=i.parent}if(!e.parent.getAncestors({includeSelf:true}).includes(t)){throw new ss["b"]("writer-split-invalid-limit-element: Limit element is not a position ancestor.",this)}let n,o;do{const t=i.root.document?i.root.document.version:null;const r=i.maxOffset-e.offset;const s=new Cg(e,r,null,t);this.batch.addOperation(s);this.model.applyOperation(s);if(!n&&!o){n=i;o=e.parent.nextSibling}e=this.createPositionAfter(e.parent);i=e.parent}while(i!==t);return{position:e,range:new ef(Zh._createAt(n,"end"),Zh._createAt(o,0))}}wrap(e,t){this._assertWriterUsedCorrectly();if(!e.isFlat){throw new ss["b"]("writer-wrap-range-not-flat: Range to wrap is not flat.",this)}const i=t instanceof $h?t:new $h(t);if(i.childCount>0){throw new ss["b"]("writer-wrap-element-not-empty: Element to wrap with is not empty.",this)}if(i.parent!==null){throw new ss["b"]("writer-wrap-element-attached: Element to wrap with is already attached to tree model.",this)}this.insert(i,e.start);const n=new ef(e.start.getShiftedBy(1),e.end.getShiftedBy(1));this.move(n,Zh._createAt(i,0))}unwrap(e){this._assertWriterUsedCorrectly();if(e.parent===null){throw new ss["b"]("writer-unwrap-element-no-parent: Trying to unwrap an element which has no parent.",this)}this.move(ef._createIn(e),this.createPositionAfter(e));this.remove(e)}addMarker(e,t){this._assertWriterUsedCorrectly();if(!t||typeof t.usingOperation!="boolean"){throw new ss["b"]("writer-addMarker-no-usingOperation: The options.usingOperation parameter is required when adding a new marker.",this)}const i=t.usingOperation;const n=t.range;const o=t.affectsData===undefined?false:t.affectsData;if(this.model.markers.has(e)){throw new ss["b"]("writer-addMarker-marker-exists: Marker with provided name already exists.",this)}if(!n){throw new ss["b"]("writer-addMarker-no-range: Range parameter is required when adding a new marker.",this)}if(!i){return this.model.markers._set(e,n,i,o)}Mg(this,e,null,n,o);return this.model.markers.get(e)}updateMarker(e,t){this._assertWriterUsedCorrectly();const i=typeof e=="string"?e:e.name;const n=this.model.markers.get(i);if(!n){throw new ss["b"]("writer-updateMarker-marker-not-exists: Marker with provided name does not exists.",this)}if(!t){this.model.markers._refresh(n);return}const o=typeof t.usingOperation=="boolean";const r=typeof t.affectsData=="boolean";const s=r?t.affectsData:n.affectsData;if(!o&&!t.range&&!r){throw new ss["b"]("writer-updateMarker-wrong-options: One of the options is required - provide range, usingOperations or affectsData.",this)}const a=n.getRange();const c=t.range?t.range:a;if(o&&t.usingOperation!==n.managedUsingOperations){if(t.usingOperation){Mg(this,i,null,c,s)}else{Mg(this,i,a,null,s);this.model.markers._set(i,c,undefined,s)}return}if(n.managedUsingOperations){Mg(this,i,a,c,s)}else{this.model.markers._set(i,c,undefined,s)}}removeMarker(e){this._assertWriterUsedCorrectly();const t=typeof e=="string"?e:e.name;if(!this.model.markers.has(t)){throw new ss["b"]("writer-removeMarker-no-marker: Trying to remove marker which does not exist.",this)}const i=this.model.markers.get(t);if(!i.managedUsingOperations){this.model.markers._remove(t);return}const n=i.getRange();Mg(this,t,n,null,i.affectsData)}setSelection(e,t,i){this._assertWriterUsedCorrectly();this.model.document.selection._setTo(e,t,i)}setSelectionFocus(e,t){this._assertWriterUsedCorrectly();this.model.document.selection._setFocus(e,t)}setSelectionAttribute(e,t){this._assertWriterUsedCorrectly();if(typeof e==="string"){this._setSelectionAttribute(e,t)}else{for(const[t,i]of Us(e)){this._setSelectionAttribute(t,i)}}}removeSelectionAttribute(e){this._assertWriterUsedCorrectly();if(typeof e==="string"){this._removeSelectionAttribute(e)}else{for(const t of e){this._removeSelectionAttribute(t)}}}overrideSelectionGravity(){return this.model.document.selection._overrideGravity()}restoreSelectionGravity(e){this.model.document.selection._restoreGravity(e)}_setSelectionAttribute(e,t){const i=this.model.document.selection;if(i.isCollapsed&&i.anchor.parent.isEmpty){const n=wf._getStoreAttributeKey(e);this.setAttribute(n,t,i.anchor.parent)}i._setAttribute(e,t)}_removeSelectionAttribute(e){const t=this.model.document.selection;if(t.isCollapsed&&t.anchor.parent.isEmpty){const i=wf._getStoreAttributeKey(e);this.removeAttribute(i,t.anchor.parent)}t._removeAttribute(e)}_assertWriterUsedCorrectly(){if(this.model._currentWriter!==this){throw new ss["b"]("writer-incorrect-use: Trying to use a writer outside the change() block.",this)}}_addOperationForAffectedMarkers(e,t){for(const i of this.model.markers){if(!i.managedUsingOperations){continue}const n=i.getRange();let o=false;if(e==="move"){o=t.containsPosition(n.start)||t.start.isEqual(n.start)||t.containsPosition(n.end)||t.end.isEqual(n.end)}else{const e=t.nodeBefore;const i=t.nodeAfter;const r=n.start.parent==e&&n.start.isAtEnd;const s=n.end.parent==i&&n.end.offset==0;const a=n.end.nodeAfter==i;const c=n.start.nodeAfter==i;o=r||s||a||c}if(o){this.updateMarker(i.name,{range:n})}}}}function Eg(e,t,i,n){const o=e.model;const r=o.document;let s=n.start;let a;let c;let l;for(const e of n.getWalker({shallow:true})){l=e.item.getAttribute(t);if(a&&c!=l){if(c!=i){d()}s=a}a=e.nextPosition;c=l}if(a instanceof Zh&&a!=s&&c!=i){d()}function d(){const n=new ef(s,a);const l=n.root.document?r.version:null;const d=new bg(n,t,c,i,l);e.batch.addOperation(d);o.applyOperation(d)}}function Pg(e,t,i,n){const o=e.model;const r=o.document;const s=n.getAttribute(t);let a,c;if(s!=i){const l=n.root===n;if(l){const e=n.document?r.version:null;c=new xg(n,t,s,i,e)}else{a=new ef(Zh._createBefore(n),e.createPositionAfter(n));const o=a.root.document?r.version:null;c=new bg(a,t,s,i,o)}e.batch.addOperation(c);o.applyOperation(c)}}function Mg(e,t,i,n,o){const r=e.model;const s=r.document;const a=new vg(t,i,n,r.markers,o,s.version);e.batch.addOperation(a);r.applyOperation(a)}function Ig(e,t,i,n){let o;if(e.root.document){const i=n.document;const r=new Zh(i.graveyard,[0]);o=new kg(e,t,r,i.version)}else{o=new wg(e,t)}i.addOperation(o);n.applyOperation(o)}function Lg(e,t){if(e===t){return true}if(e instanceof Tg&&t instanceof Tg){return true}return false}class Ng{constructor(e){this._markerCollection=e;this._changesInElement=new Map;this._elementSnapshots=new Map;this._changedMarkers=new Map;this._changeCount=0;this._cachedChanges=null;this._cachedChangesWithGraveyard=null}get isEmpty(){return this._changesInElement.size==0&&this._changedMarkers.size==0}refreshItem(e){if(this._isInInsertedElement(e.parent)){return}this._markRemove(e.parent,e.startOffset,e.offsetSize);this._markInsert(e.parent,e.startOffset,e.offsetSize);const t=ef._createOn(e);for(const e of this._markerCollection.getMarkersIntersectingRange(t)){const t=e.getRange();this.bufferMarkerChange(e.name,t,t,e.affectsData)}this._cachedChanges=null}bufferOperation(e){switch(e.type){case"insert":{if(this._isInInsertedElement(e.position.parent)){return}this._markInsert(e.position.parent,e.position.offset,e.nodes.maxOffset);break}case"addAttribute":case"removeAttribute":case"changeAttribute":{for(const t of e.range.getItems({shallow:true})){if(this._isInInsertedElement(t.parent)){continue}this._markAttribute(t)}break}case"remove":case"move":case"reinsert":{if(e.sourcePosition.isEqual(e.targetPosition)||e.sourcePosition.getShiftedBy(e.howMany).isEqual(e.targetPosition)){return}const t=this._isInInsertedElement(e.sourcePosition.parent);const i=this._isInInsertedElement(e.targetPosition.parent);if(!t){this._markRemove(e.sourcePosition.parent,e.sourcePosition.offset,e.howMany)}if(!i){this._markInsert(e.targetPosition.parent,e.getMovedRangeStart().offset,e.howMany)}break}case"rename":{if(this._isInInsertedElement(e.position.parent)){return}this._markRemove(e.position.parent,e.position.offset,1);this._markInsert(e.position.parent,e.position.offset,1);const t=ef._createFromPositionAndShift(e.position,1);for(const e of this._markerCollection.getMarkersIntersectingRange(t)){const t=e.getRange();this.bufferMarkerChange(e.name,t,t,e.affectsData)}break}case"split":{const t=e.splitPosition.parent;if(!this._isInInsertedElement(t)){this._markRemove(t,e.splitPosition.offset,e.howMany)}if(!this._isInInsertedElement(e.insertionPosition.parent)){this._markInsert(e.insertionPosition.parent,e.insertionPosition.offset,1)}if(e.graveyardPosition){this._markRemove(e.graveyardPosition.parent,e.graveyardPosition.offset,1)}break}case"merge":{const t=e.sourcePosition.parent;if(!this._isInInsertedElement(t.parent)){this._markRemove(t.parent,t.startOffset,1)}const i=e.graveyardPosition.parent;this._markInsert(i,e.graveyardPosition.offset,1);const n=e.targetPosition.parent;if(!this._isInInsertedElement(n)){this._markInsert(n,e.targetPosition.offset,t.maxOffset)}break}}this._cachedChanges=null}bufferMarkerChange(e,t,i,n){const o=this._changedMarkers.get(e);if(!o){this._changedMarkers.set(e,{oldRange:t,newRange:i,affectsData:n})}else{o.newRange=i;o.affectsData=n;if(o.oldRange==null&&o.newRange==null){this._changedMarkers.delete(e)}}}getMarkersToRemove(){const e=[];for(const[t,i]of this._changedMarkers){if(i.oldRange!=null){e.push({name:t,range:i.oldRange})}}return e}getMarkersToAdd(){const e=[];for(const[t,i]of this._changedMarkers){if(i.newRange!=null){e.push({name:t,range:i.newRange})}}return e}getChangedMarkers(){return Array.from(this._changedMarkers).map(e=>({name:e[0],data:{oldRange:e[1].oldRange,newRange:e[1].newRange}}))}hasDataChanges(){for(const[,e]of this._changedMarkers){if(e.affectsData){return true}}return this._changesInElement.size>0}getChanges(e={includeChangesInGraveyard:false}){if(this._cachedChanges){if(e.includeChangesInGraveyard){return this._cachedChangesWithGraveyard.slice()}else{return this._cachedChanges.slice()}}const t=[];for(const e of this._changesInElement.keys()){const i=this._changesInElement.get(e).sort((e,t)=>{if(e.offset===t.offset){if(e.type!=t.type){return e.type=="remove"?-1:1}return 0}return e.offset{if(e.position.root!=t.position.root){return e.position.root.rootNamei.offset){if(n>o){const e={type:"attribute",offset:o,howMany:n-o,count:this._changeCount++};this._handleChange(e,t);t.push(e)}e.nodesToHandle=i.offset-e.offset;e.howMany=e.nodesToHandle}else if(e.offset>=i.offset&&e.offseto){e.nodesToHandle=n-o;e.offset=o}else{e.nodesToHandle=0}}}if(i.type=="remove"){if(e.offseti.offset){const o={type:"attribute",offset:i.offset,howMany:n-i.offset,count:this._changeCount++};this._handleChange(o,t);t.push(o);e.nodesToHandle=i.offset-e.offset;e.howMany=e.nodesToHandle}}if(i.type=="attribute"){if(e.offset>=i.offset&&n<=o){e.nodesToHandle=0;e.howMany=0;e.offset=0}else if(e.offset<=i.offset&&n>=o){i.howMany=0}}}}e.howMany=e.nodesToHandle;delete e.nodesToHandle}_getInsertDiff(e,t,i){return{type:"insert",position:Zh._createAt(e,t),name:i,length:1,changeCount:this._changeCount++}}_getRemoveDiff(e,t,i){return{type:"remove",position:Zh._createAt(e,t),name:i,length:1,changeCount:this._changeCount++}}_getAttributesDiff(e,t,i){const n=[];i=new Map(i);for(const[o,r]of t){const t=i.has(o)?i.get(o):null;if(t!==r){n.push({type:"attribute",position:e.start,range:e.clone(),length:1,attributeKey:o,attributeOldValue:r,attributeNewValue:t,changeCount:this._changeCount++})}i.delete(o)}for(const[t,o]of i){n.push({type:"attribute",position:e.start,range:e.clone(),length:1,attributeKey:t,attributeOldValue:null,attributeNewValue:o,changeCount:this._changeCount++})}return n}_isInInsertedElement(e){const t=e.parent;if(!t){return false}const i=this._changesInElement.get(t);const n=e.startOffset;if(i){for(const e of i){if(e.type=="insert"&&n>=e.offset&&nn){for(let t=0;t{const i=t[0];if(i.isDocumentOperation&&i.baseVersion!==this.version){throw new ss["b"]("model-document-applyOperation-wrong-version: Only operations with matching versions can be applied.",this,{operation:i})}},{priority:"highest"});this.listenTo(e,"applyOperation",(e,t)=>{const i=t[0];if(i.isDocumentOperation){this.differ.bufferOperation(i)}},{priority:"high"});this.listenTo(e,"applyOperation",(e,t)=>{const i=t[0];if(i.isDocumentOperation){this.version++;this.history.addOperation(i)}},{priority:"low"});this.listenTo(this.selection,"change",()=>{this._hasSelectionChangedFromTheLastChangeBlock=true});this.listenTo(e.markers,"update",(e,t,i,n)=>{this.differ.bufferMarkerChange(t.name,i,n,t.affectsData);if(i===null){t.on("change",(e,i)=>{this.differ.bufferMarkerChange(t.name,i,t.getRange(),t.affectsData)})}})}get graveyard(){return this.getRoot(Ug)}createRoot(e="$root",t="main"){if(this.roots.get(t)){throw new ss["b"]("model-document-createRoot-name-exists: Root with specified name already exists.",this,{name:t})}const i=new Tg(this,e,t);this.roots.add(i);return i}destroy(){this.selection.destroy();this.stopListening()}getRoot(e="main"){return this.roots.get(e)}getRootNames(){return Array.from(this.roots,e=>e.rootName).filter(e=>e!=Ug)}registerPostFixer(e){this._postFixers.add(e)}toJSON(){const e=Ds(this);e.selection="[engine.model.DocumentSelection]";e.model="[engine.model.Model]";return e}_handleChangeBlock(e){if(this._hasDocumentChangedFromTheLastChangeBlock()){this._callPostFixers(e);this.selection.refresh();if(this.differ.hasDataChanges()){this.fire("change:data",e.batch)}else{this.fire("change",e.batch)}this.selection.refresh();this.differ.reset()}this._hasSelectionChangedFromTheLastChangeBlock=false}_hasDocumentChangedFromTheLastChangeBlock(){return!this.differ.isEmpty||this._hasSelectionChangedFromTheLastChangeBlock}_getDefaultRoot(){for(const e of this.roots){if(e!==this.graveyard){return e}}return this.graveyard}_getDefaultRange(){const e=this._getDefaultRoot();const t=this.model;const i=t.schema;const n=t.createPositionFromPath(e,[0]);const o=i.getNearestSelectionRange(n);return o||t.createRange(n)}_validateSelectionRange(e){return qg(e.start)&&qg(e.end)}_callPostFixers(e){let t=false;do{for(const i of this._postFixers){this.selection.refresh();t=i(e);if(t){break}}}while(t)}}ys(Wg,ds);function qg(e){const t=e.textNode;if(t){const i=t.data;const n=e.offset-t.startOffset;return!Fg(i,n)&&!Hg(i,n)}return true}class $g{constructor(){this._markers=new Map}[Symbol.iterator](){return this._markers.values()}has(e){return this._markers.has(e)}get(e){return this._markers.get(e)||null}_set(e,t,i=false,n=false){const o=e instanceof Gg?e.name:e;if(o.includes(",")){throw new ss["b"]('markercollection-incorrect-marker-name: Marker name cannot contain the "," character.',this)}const r=this._markers.get(o);if(r){const e=r.getRange();let s=false;if(!e.isEqual(t)){r._attachLiveRange(ff.fromRange(t));s=true}if(i!=r.managedUsingOperations){r._managedUsingOperations=i;s=true}if(typeof n==="boolean"&&n!=r.affectsData){r._affectsData=n;s=true}if(s){this.fire("update:"+o,r,e,t)}return r}const s=ff.fromRange(t);const a=new Gg(o,s,i,n);this._markers.set(o,a);this.fire("update:"+o,a,null,t);return a}_remove(e){const t=e instanceof Gg?e.name:e;const i=this._markers.get(t);if(i){this._markers.delete(t);this.fire("update:"+t,i,i.getRange(),null);this._destroyMarker(i);return true}return false}_refresh(e){const t=e instanceof Gg?e.name:e;const i=this._markers.get(t);if(!i){throw new ss["b"]("markercollection-refresh-marker-not-exists: Marker with provided name does not exists.",this)}const n=i.getRange();this.fire("update:"+t,i,n,n,i.managedUsingOperations,i.affectsData)}*getMarkersAtPosition(e){for(const t of this){if(t.getRange().containsPosition(e)){yield t}}}*getMarkersIntersectingRange(e){for(const t of this){if(t.getRange().getIntersection(e)!==null){yield t}}}destroy(){for(const e of this._markers.values()){this._destroyMarker(e)}this._markers=null;this.stopListening()}*getMarkersGroup(e){for(const t of this._markers.values()){if(t.name.startsWith(e+":")){yield t}}}_destroyMarker(e){e.stopListening();e._detachLiveRange()}}ys($g,ds);class Gg{constructor(e,t,i,n){this.name=e;this._liveRange=this._attachLiveRange(t);this._managedUsingOperations=i;this._affectsData=n}get managedUsingOperations(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._managedUsingOperations}get affectsData(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._affectsData}getStart(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._liveRange.start.clone()}getEnd(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._liveRange.end.clone()}getRange(){if(!this._liveRange){throw new ss["b"]("marker-destroyed: Cannot use a destroyed marker instance.",this)}return this._liveRange.toRange()}is(e){return e==="marker"||e==="model:marker"}_attachLiveRange(e){if(this._liveRange){this._detachLiveRange()}e.delegate("change:range").to(this);e.delegate("change:content").to(this);this._liveRange=e;return e}_detachLiveRange(){this._liveRange.stopDelegating("change:range",this);this._liveRange.stopDelegating("change:content",this);this._liveRange.detach();this._liveRange=null}}ys(Gg,ds);class Kg extends og{get type(){return"noop"}clone(){return new Kg(this.baseVersion)}getReversed(){return new Kg(this.baseVersion+1)}_execute(){}static get className(){return"NoOperation"}}const Yg={};Yg[bg.className]=bg;Yg[_g.className]=_g;Yg[vg.className]=vg;Yg[kg.className]=kg;Yg[Kg.className]=Kg;Yg[og.className]=og;Yg[yg.className]=yg;Yg[xg.className]=xg;Yg[Cg.className]=Cg;Yg[Ag.className]=Ag;class Zg{static fromJSON(e,t){return Yg[e.__className].fromJSON(e,t)}}class Qg extends Zh{constructor(e,t,i="toNone"){super(e,t,i);if(!this.root.is("rootElement")){throw new ss["b"]("model-liveposition-root-not-rootelement: LivePosition's root has to be an instance of RootElement.",e)}Jg.call(this)}detach(){this.stopListening()}is(e){return e==="livePosition"||e==="model:livePosition"||e=="position"||e==="model:position"}toPosition(){return new Zh(this.root,this.path.slice(),this.stickiness)}static fromPosition(e,t){return new this(e.root,e.path.slice(),t?t:e.stickiness)}}function Jg(){this.listenTo(this.root.document.model,"applyOperation",(e,t)=>{const i=t[0];if(!i.isDocumentOperation){return}Xg.call(this,i)},{priority:"low"})}function Xg(e){const t=this.getTransformedByOperation(e);if(!this.isEqual(t)){const e=this.toPosition();this.path=t.path;this.root=t.root;this.fire("change",e)}}ys(Qg,ds);function ep(e,t,i,n){return e.change(o=>{let r;if(!i){r=e.document.selection}else if(i instanceof af||i instanceof wf){r=i}else{r=o.createSelection(i,n)}if(!r.isCollapsed){e.deleteContent(r,{doNotAutoparagraph:true})}const s=new tp(e,o,r.anchor);let a;if(t.is("documentFragment")){a=t.getChildren()}else{a=[t]}s.handleNodes(a,{isFirst:true,isLast:true});const c=s.getSelectionRange();if(c){if(r instanceof wf){o.setSelection(c)}else{r.setTo(c)}}else{}const l=s.getAffectedRange()||e.createRange(r.anchor);s.destroy();return l})}class tp{constructor(e,t,i){this.model=e;this.writer=t;this.position=i;this.canMergeWith=new Set([this.position.parent]);this.schema=e.schema;this._filterAttributesOf=[];this._affectedStart=null;this._affectedEnd=null}handleNodes(e,t){e=Array.from(e);for(let i=0;i{if(!i.doNotResetEntireContent&&gp(o,t)){mp(e,t,o);return}const[r,s]=np(n);if(!n.start.isTouching(n.end)){e.remove(n)}if(!i.leaveUnmerged){rp(e,r,s);o.removeDisallowedAttributes(r.parent.getChildren(),e)}pp(e,t,r);if(!i.doNotAutoparagraph&&up(o,r)){fp(e,r,t)}r.detach();s.detach()})}function np(e){const t=e.root.document.model;const i=e.start;let n=e.end;if(t.hasContent(e,{ignoreMarkers:true})){const i=op(n);if(i&&n.isTouching(t.createPositionAt(i,0))){const i=t.createSelection(e);t.modifySelection(i,{direction:"backward"});n=i.getLastPosition()}}return[Qg.fromPosition(i,"toPrevious"),Qg.fromPosition(n,"toNext")]}function op(e){const t=e.parent;const i=t.root.document.model.schema;const n=t.getAncestors({parentFirst:true,includeSelf:true});for(const e of n){if(i.isLimit(e)){return null}if(i.isBlock(e)){return e}}}function rp(e,t,i){const n=e.model;if(!lp(e.model.schema,t,i)){return}const[o,r]=dp(t,i);if(!n.hasContent(o,{ignoreMarkers:true})&&n.hasContent(r,{ignoreMarkers:true})){ap(e,t,i,o.parent)}else{sp(e,t,i,o.parent)}}function sp(e,t,i,n){const o=t.parent;const r=i.parent;if(o==n||r==n){return}t=e.createPositionAfter(o);i=e.createPositionBefore(r);if(!i.isEqual(t)){e.insert(r,t)}e.merge(t);while(i.parent.isEmpty){const t=i.parent;i=e.createPositionBefore(t);e.remove(t)}if(!lp(e.model.schema,t,i)){return}sp(e,t,i,n)}function ap(e,t,i,n){const o=t.parent;const r=i.parent;if(o==n||r==n){return}t=e.createPositionAfter(o);i=e.createPositionBefore(r);if(!i.isEqual(t)){e.insert(o,i)}while(t.parent.isEmpty){const i=t.parent;t=e.createPositionBefore(i);e.remove(i)}i=e.createPositionBefore(r);cp(e,i);if(!lp(e.model.schema,t,i)){return}ap(e,t,i,n)}function cp(e,t){const i=t.nodeBefore;const n=t.nodeAfter;if(i.name!=n.name){e.rename(i,n.name)}e.clearAttributes(i);e.setAttributes(Object.fromEntries(n.getAttributes()),i);e.merge(t)}function lp(e,t,i){const n=t.parent;const o=i.parent;if(n==o){return false}if(e.isLimit(n)||e.isLimit(o)){return false}return hp(t,i,e)}function dp(e,t){const i=e.getAncestors();const n=t.getAncestors();let o=0;while(i[o]&&i[o]==n[o]){o++}return[i[o],n[o]]}function up(e,t){const i=e.checkChild(t,"$text");const n=e.checkChild(t,"paragraph");return!i&&n}function hp(e,t,i){const n=new ef(e,t);for(const e of n.getWalker()){if(i.isLimit(e.item)){return false}}return true}function fp(e,t,i){const n=e.createElement("paragraph");e.insert(n,t);pp(e,i,e.createPositionAt(n,0))}function mp(e,t){const i=e.model.schema.getLimitElement(t);e.remove(e.createRangeIn(i));fp(e,e.createPositionAt(i,0),t)}function gp(e,t){const i=e.getLimitElement(t);if(!t.containsEntireContent(i)){return false}const n=t.getFirstRange();if(n.start.parent==n.end.parent){return false}return e.checkChild(i,"paragraph")}function pp(e,t,i){if(t instanceof wf){e.setSelection(i)}else{t.setTo(i)}}const bp=' ,.?!:;"-()';function wp(e,t,i={}){const n=e.schema;const o=i.direction!="backward";const r=i.unit?i.unit:"character";const s=t.focus;const a=new Kh({boundaries:yp(s,o),singleCharacters:true,direction:o?"forward":"backward"});const c={walker:a,schema:n,isForward:o,unit:r};let l;while(l=a.next()){if(l.done){return}const i=kp(c,l.value);if(i){if(t instanceof wf){e.change(e=>{e.setSelectionFocus(i)})}else{t.setFocus(i)}return}}}function kp(e,t){const{isForward:i,walker:n,unit:o,schema:r}=e;const{type:s,item:a,nextPosition:c}=t;if(s=="text"){if(e.unit==="word"){return vp(n,i)}return _p(n,o,i)}if(s==(i?"elementStart":"elementEnd")){if(r.isSelectable(a)){return Zh._createAt(a,i?"after":"before")}if(r.checkChild(c,"$text")){return c}}else{if(r.isLimit(a)){n.skip(()=>true);return}if(r.checkChild(c,"$text")){return c}}}function _p(e,t){const i=e.position.textNode;if(i){const n=i.data;let o=e.position.offset-i.startOffset;while(Fg(n,o)||t=="character"&&Hg(n,o)){e.next();o=e.position.offset-i.startOffset}}return e.position}function vp(e,t){let i=e.position.textNode;if(i){let n=e.position.offset-i.startOffset;while(!xp(i.data,n,t)&&!Ap(i,n,t)){e.next();const o=t?e.position.nodeAfter:e.position.nodeBefore;if(o&&o.is("$text")){const n=o.data.charAt(t?0:o.data.length-1);if(!bp.includes(n)){e.next();i=e.position.textNode}}n=e.position.offset-i.startOffset}}return e.position}function yp(e,t){const i=e.root;const n=Zh._createAt(i,t?"end":0);if(t){return new ef(e,n)}else{return new ef(n,e)}}function xp(e,t,i){const n=t+(i?0:-1);return bp.includes(e.charAt(n))}function Ap(e,t,i){return t===(i?e.endOffset:0)}function Cp(e,t){return e.change(e=>{const i=e.createDocumentFragment();const n=t.getFirstRange();if(!n||n.isCollapsed){return i}const o=n.start.root;const r=n.start.getCommonPath(n.end);const s=o.getNodeByPath(r);let a;if(n.start.parent==n.end.parent){a=n}else{a=e.createRange(e.createPositionAt(s,n.start.path[r.length]),e.createPositionAt(s,n.end.path[r.length]+1))}const c=a.end.offset-a.start.offset;for(const t of a.getItems({shallow:true})){if(t.is("$textProxy")){e.appendText(t.data,t.getAttributes(),i)}else{e.append(e.cloneElement(t,true),i)}}if(a!=n){const t=n._getTransformedByMove(a.start,e.createPositionAt(i,0),c)[0];const o=e.createRange(e.createPositionAt(i,0),t.start);const r=e.createRange(t.end,e.createPositionAt(i,"end"));Tp(r,e);Tp(o,e)}return i})}function Tp(e,t){const i=[];Array.from(e.getItems({direction:"backward"})).map(e=>t.createRangeOn(e)).filter(t=>{const i=(t.start.isAfter(e.start)||t.start.isEqual(e.start))&&(t.end.isBefore(e.end)||t.end.isEqual(e.end));return i}).forEach(e=>{i.push(e.start.parent);t.remove(e)});i.forEach(e=>{let i=e;while(i.parent&&i.isEmpty){const e=t.createRangeOn(i);i=i.parent;t.remove(e)}})}function Sp(e){e.document.registerPostFixer(t=>Ep(t,e))}function Ep(e,t){const i=t.document.selection;const n=t.schema;const o=[];let r=false;for(const e of i.getRanges()){const t=Pp(e,n);if(t&&!t.isEqual(e)){o.push(t);r=true}else{o.push(e)}}if(r){e.setSelection(zp(o),{backward:i.isBackward})}}function Pp(e,t){if(e.isCollapsed){return Mp(e,t)}return Ip(e,t)}function Mp(e,t){const i=e.start;const n=t.getNearestSelectionRange(i);if(!n){return null}if(!n.isCollapsed){return n}const o=n.start;if(i.isEqual(o)){return null}return new ef(o)}function Ip(e,t){const{start:i,end:n}=e;const o=t.checkChild(i,"$text");const r=t.checkChild(n,"$text");const s=t.getLimitElement(i);const a=t.getLimitElement(n);if(s===a){if(o&&r){return null}if(Np(i,n,t)){const e=i.nodeAfter&&t.isSelectable(i.nodeAfter);const o=e?null:t.getNearestSelectionRange(i,"forward");const r=n.nodeBefore&&t.isSelectable(n.nodeBefore);const s=r?null:t.getNearestSelectionRange(n,"backward");const a=o?o.start:i;const c=s?s.start:n;return new ef(a,c)}}const c=s&&!s.is("rootElement");const l=a&&!a.is("rootElement");if(c||l){const e=i.nodeAfter&&n.nodeBefore&&i.nodeAfter.parent===n.nodeBefore.parent;const o=c&&(!e||!Rp(i.nodeAfter,t));const r=l&&(!e||!Rp(n.nodeBefore,t));let d=i;let u=n;if(o){d=Zh._createBefore(Lp(s,t))}if(r){u=Zh._createAfter(Lp(a,t))}return new ef(d,u)}return null}function Lp(e,t){let i=e;let n=i;while(t.isLimit(n)&&n.parent){i=n;n=n.parent}return i}function Np(e,t,i){const n=e.nodeAfter&&!i.isLimit(e.nodeAfter)||i.checkChild(e,"$text");const o=t.nodeBefore&&!i.isLimit(t.nodeBefore)||i.checkChild(t,"$text");return n||o}function zp(e){const t=[];t.push(e.shift());for(const i of e){const e=t.pop();if(i.isIntersecting(e)){const n=e.start.isAfter(i.start)?i.start:e.start;const o=e.end.isAfter(i.end)?e.end:i.end;const r=new ef(n,o);t.push(r)}else{t.push(e);t.push(i)}}return t}function Rp(e,t){return e&&t.isSelectable(e)}class Op{constructor(){this.markers=new $g;this.document=new Wg(this);this.schema=new Im;this._pendingChanges=[];this._currentWriter=null;["insertContent","deleteContent","modifySelection","getSelectedContent","applyOperation"].forEach(e=>this.decorate(e));this.on("applyOperation",(e,t)=>{const i=t[0];i._validate()},{priority:"highest"});this.schema.register("$root",{isLimit:true});this.schema.register("$block",{allowIn:"$root",isBlock:true});this.schema.register("$text",{allowIn:"$block",isInline:true,isContent:true});this.schema.register("$clipboardHolder",{allowContentOf:"$root",isLimit:true});this.schema.extend("$text",{allowIn:"$clipboardHolder"});this.schema.register("$marker");this.schema.addChildCheck((e,t)=>{if(t.name==="$marker"){return true}});Sp(this);this.document.registerPostFixer(om)}change(e){try{if(this._pendingChanges.length===0){this._pendingChanges.push({batch:new ng,callback:e});return this._runPendingChanges()[0]}else{return e(this._currentWriter)}}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}enqueueChange(e,t){try{if(typeof e==="string"){e=new ng(e)}else if(typeof e=="function"){t=e;e=new ng}this._pendingChanges.push({batch:e,callback:t});if(this._pendingChanges.length==1){this._runPendingChanges()}}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}applyOperation(e){e._execute()}insertContent(e,t,i){return ep(this,e,t,i)}deleteContent(e,t){ip(this,e,t)}modifySelection(e,t){wp(this,e,t)}getSelectedContent(e){return Cp(this,e)}hasContent(e,t={}){const i=e instanceof $h?ef._createIn(e):e;if(i.isCollapsed){return false}const{ignoreWhitespaces:n=false,ignoreMarkers:o=false}=t;if(!o){for(const e of this.markers.getMarkersIntersectingRange(i)){if(e.affectsData){return true}}}for(const e of i.getItems()){if(this.schema.isContent(e)){if(e.is("$textProxy")){if(!n){return true}else if(e.data.search(/\S/)!==-1){return true}}else{return true}}}return false}createPositionFromPath(e,t,i){return new Zh(e,t,i)}createPositionAt(e,t){return Zh._createAt(e,t)}createPositionAfter(e){return Zh._createAfter(e)}createPositionBefore(e){return Zh._createBefore(e)}createRange(e,t){return new ef(e,t)}createRangeIn(e){return ef._createIn(e)}createRangeOn(e){return ef._createOn(e)}createSelection(e,t,i){return new af(e,t,i)}createBatch(e){return new ng(e)}createOperationFromJSON(e){return Zg.fromJSON(e,this.document)}destroy(){this.document.destroy();this.stopListening()}_runPendingChanges(){const e=[];this.fire("_beforeChanges");while(this._pendingChanges.length){const t=this._pendingChanges[0].batch;this._currentWriter=new Sg(this,t);const i=this._pendingChanges[0].callback(this._currentWriter);e.push(i);this.document._handleChangeBlock(this._currentWriter);this._pendingChanges.shift();this._currentWriter=null}this.fire("_afterChanges");return e}}ys(Op,Zc);class Vp{constructor(){this._listener=Object.create(Yd)}listenTo(e){this._listener.listenTo(e,"keydown",(e,t)=>{this._listener.fire("_keydown:"+Rl(t),t)})}set(e,t,i={}){const n=Ol(e);const o=i.priority;this._listener.listenTo(this._listener,"_keydown:"+n,(e,i)=>{t(i,()=>{i.preventDefault();i.stopPropagation();e.stop()});e.return=true},{priority:o})}press(e){return!!this._listener.fire("_keydown:"+Rl(e),e)}destroy(){this._listener.stopListening()}}class Dp extends Vp{constructor(e){super();this.editor=e}set(e,t,i={}){if(typeof t=="string"){const e=t;t=(t,i)=>{this.editor.execute(e);i()}}super.set(e,t,i)}}class Bp{constructor(e={}){this._context=e.context||new zs({language:e.language});this._context._addEditor(this,!e.context);const t=Array.from(this.constructor.builtinPlugins||[]);this.config=new Yr(e,this.constructor.defaultConfig);this.config.define("plugins",t);this.config.define(this._context._getEditorConfig());this.plugins=new As(this,t,this._context.plugins);this.locale=this._context.locale;this.t=this.locale.t;this.commands=new Em;this.set("state","initializing");this.once("ready",()=>this.state="ready",{priority:"high"});this.once("destroy",()=>this.state="destroyed",{priority:"high"});this.set("isReadOnly",false);this.model=new Op;const i=new zc;this.data=new Jm(this.model,i);this.editing=new Sm(this.model,i);this.editing.view.document.bind("isReadOnly").to(this);this.conversion=new eg([this.editing.downcastDispatcher,this.data.downcastDispatcher],this.data.upcastDispatcher);this.conversion.addAlias("dataDowncast",this.data.downcastDispatcher);this.conversion.addAlias("editingDowncast",this.editing.downcastDispatcher);this.keystrokes=new Dp(this);this.keystrokes.listenTo(this.editing.view.document)}initPlugins(){const e=this.config;const t=e.get("plugins");const i=e.get("removePlugins")||[];const n=e.get("extraPlugins")||[];return this.plugins.init(t.concat(n),i)}destroy(){let e=Promise.resolve();if(this.state=="initializing"){e=new Promise(e=>this.once("ready",e))}return e.then(()=>{this.fire("destroy");this.stopListening();this.commands.destroy()}).then(()=>this.plugins.destroy()).then(()=>{this.model.destroy();this.data.destroy();this.editing.destroy();this.keystrokes.destroy()}).then(()=>this._context._removeEditor(this))}execute(...e){try{return this.commands.execute(...e)}catch(e){ss["b"].rethrowUnexpectedError(e,this)}}}ys(Bp,Zc);const jp={setData(e){this.data.set(e)},getData(e){return this.data.get(e)}};var Fp=jp;function Hp(e,t){if(e instanceof HTMLTextAreaElement){e.value=t}e.innerHTML=t}const Up={updateSourceElement(){if(!this.sourceElement){throw new ss["b"]("editor-missing-sourceelement: Cannot update the source element of a detached editor.",this)}Hp(this.sourceElement,this.data.get())}};var Wp=Up;function qp(e){if(!me(e.updateSourceElement)){throw new ss["b"]("attachtoform-missing-elementapi-interface: Editor passed to attachToForm() must implement ElementApi.",e)}const t=e.sourceElement;if(t&&t.tagName.toLowerCase()==="textarea"&&t.form){let i;const n=t.form;const o=()=>e.updateSourceElement();if(me(n.submit)){i=n.submit;n.submit=()=>{o();i.apply(n)}}n.addEventListener("submit",o);e.on("destroy",()=>{n.removeEventListener("submit",o);if(i){n.submit=i}})}}class $p{getHtml(e){const t=document.implementation.createHTMLDocument("");const i=t.createElement("div");i.appendChild(e);return i.innerHTML}}class Gp{constructor(e){this._domParser=new DOMParser;this._domConverter=new Hd(e,{blockFillerMode:"nbsp"});this._htmlWriter=new $p}toData(e){const t=this._domConverter.viewToDom(e,document);return this._htmlWriter.getHtml(t)}toView(e){const t=this._toDom(e);return this._domConverter.domToView(t)}_toDom(e){const t=this._domParser.parseFromString(e,"text/html");const i=t.createDocumentFragment();const n=t.body.childNodes;while(n.length>0){i.appendChild(n[0])}return i}}class Kp{constructor(e){this.editor=e;this._components=new Map}*names(){for(const e of this._components.values()){yield e.originalName}}add(e,t){this._components.set(Yp(e),{callback:t,originalName:e})}create(e){if(!this.has(e)){throw new ss["b"]("componentfactory-item-missing: The required component is not registered in the factory.",this,{name:e})}return this._components.get(Yp(e)).callback(this.editor.locale)}has(e){return this._components.has(Yp(e))}}function Yp(e){return String(e).toLowerCase()}class Zp{constructor(){this.set("isFocused",false);this.set("focusedElement",null);this._elements=new Set;this._nextEventLoopTimeout=null}add(e){if(this._elements.has(e)){throw new ss["b"]("focusTracker-add-element-already-exist: This element is already tracked by FocusTracker.",this)}this.listenTo(e,"focus",()=>this._focus(e),{useCapture:true});this.listenTo(e,"blur",()=>this._blur(),{useCapture:true});this._elements.add(e)}remove(e){if(e===this.focusedElement){this._blur(e)}if(this._elements.has(e)){this.stopListening(e);this._elements.delete(e)}}destroy(){this.stopListening()}_focus(e){clearTimeout(this._nextEventLoopTimeout);this.focusedElement=e;this.isFocused=true}_blur(){clearTimeout(this._nextEventLoopTimeout);this._nextEventLoopTimeout=setTimeout(()=>{this.focusedElement=null;this.isFocused=false},0)}}ys(Zp,Yd);ys(Zp,Zc);class Qp{constructor(e){this.editor=e;this.componentFactory=new Kp(e);this.focusTracker=new Zp;this._editableElementsMap=new Map;this.listenTo(e.editing.view.document,"layoutChanged",()=>this.update())}get element(){return null}update(){this.fire("update")}destroy(){this.stopListening();this.focusTracker.destroy();for(const e of this._editableElementsMap.values()){e.ckeditorInstance=null}this._editableElementsMap=new Map}setEditableElement(e,t){this._editableElementsMap.set(e,t);if(!t.ckeditorInstance){t.ckeditorInstance=this.editor}}getEditableElement(e="main"){return this._editableElementsMap.get(e)}getEditableElementsNames(){return this._editableElementsMap.keys()}get _editableElements(){console.warn("editor-ui-deprecated-editable-elements: "+"The EditorUI#_editableElements property has been deprecated and will be removed in the near future.",{editorUI:this});return this._editableElementsMap}}ys(Qp,ds);function Jp({origin:e,originKeystrokeHandler:t,originFocusTracker:i,toolbar:n,beforeFocus:o,afterBlur:r}){i.add(n.element);t.set("Alt+F10",(e,t)=>{if(i.isFocused&&!n.focusTracker.isFocused){if(o){o()}n.focus();t()}});n.keystrokes.set("Esc",(t,i)=>{if(n.focusTracker.isFocused){e.focus();if(r){r()}i()}})}function Xp(e){if(Array.isArray(e)){return{items:e}}if(!e){return{items:[]}}return Object.assign({items:[]},e)}var eb=i(16);const tb=new WeakMap;function ib(e){const{view:t,element:i,text:n,isDirectHost:o=true}=e;const r=t.document;if(!tb.has(r)){tb.set(r,new Map);r.registerPostFixer(e=>ab(r,e))}tb.get(r).set(i,{text:n,isDirectHost:o});t.change(e=>ab(r,e))}function nb(e,t){const i=t.document;e.change(e=>{if(!tb.has(i)){return}const n=tb.get(i);const o=n.get(t);e.removeAttribute("data-placeholder",o.hostElement);rb(e,o.hostElement);n.delete(t)})}function ob(e,t){if(!t.hasClass("ck-placeholder")){e.addClass("ck-placeholder",t);return true}return false}function rb(e,t){if(t.hasClass("ck-placeholder")){e.removeClass("ck-placeholder",t);return true}return false}function sb(e){if(!e.isAttached()){return false}const t=!Array.from(e.getChildren()).some(e=>!e.is("uiElement"));const i=e.document;if(!i.isFocused&&t){return true}const n=i.selection;const o=n.anchor;if(t&&o&&o.parent!==e){return true}return false}function ab(e,t){const i=tb.get(e);let n=false;for(const[e,o]of i){if(cb(t,e,o)){n=true}}return n}function cb(e,t,i){const{text:n,isDirectHost:o}=i;const r=o?t:lb(t);let s=false;if(!r){return false}i.hostElement=r;if(r.getAttribute("data-placeholder")!==n){e.setAttribute("data-placeholder",n,r);s=true}if(sb(r)){if(ob(e,r)){s=true}}else if(rb(e,r)){s=true}return s}function lb(e){if(e.childCount===1){const t=e.getChild(0);if(t.is("element")&&!t.is("uiElement")){return t}}return null}class db{constructor(){this._replacedElements=[]}replace(e,t){this._replacedElements.push({element:e,newElement:t});e.style.display="none";if(t){e.parentNode.insertBefore(t,e.nextSibling)}}restore(){this._replacedElements.forEach(({element:e,newElement:t})=>{e.style.display="";if(t){t.remove()}});this._replacedElements=[]}}class ub extends Qp{constructor(e,t){super(e);this.view=t;this._toolbarConfig=Xp(e.config.get("toolbar"));this._elementReplacer=new db}get element(){return this.view.element}init(e){const t=this.editor;const i=this.view;const n=t.editing.view;const o=i.editable;const r=n.document.getRoot();o.name=r.rootName;i.render();const s=o.element;this.setEditableElement(o.name,s);this.focusTracker.add(s);i.editable.bind("isFocused").to(this.focusTracker);n.attachDomRoot(s);if(e){this._elementReplacer.replace(e,this.element)}this._initPlaceholder();this._initToolbar();this.fire("ready")}destroy(){const e=this.view;const t=this.editor.editing.view;this._elementReplacer.restore();t.detachDomRoot(e.editable.name);e.destroy();super.destroy()}_initToolbar(){const e=this.editor;const t=this.view;const i=e.editing.view;t.stickyPanel.bind("isActive").to(this.focusTracker,"isFocused");t.stickyPanel.limiterElement=t.element;if(this._toolbarConfig.viewportTopOffset){t.stickyPanel.viewportTopOffset=this._toolbarConfig.viewportTopOffset}t.toolbar.fillFromConfig(this._toolbarConfig.items,this.componentFactory);Jp({origin:i,originFocusTracker:this.focusTracker,originKeystrokeHandler:e.keystrokes,toolbar:t.toolbar})}_initPlaceholder(){const e=this.editor;const t=e.editing.view;const i=t.document.getRoot();const n=e.sourceElement;const o=e.config.get("placeholder")||n&&n.tagName.toLowerCase()==="textarea"&&n.getAttribute("placeholder");if(o){ib({view:t,element:i,text:o,isDirectHost:false})}}}class hb extends xs{constructor(e=[]){super(e,{idProperty:"viewUid"});this.on("add",(e,t,i)=>{this._renderViewIntoCollectionParent(t,i)});this.on("remove",(e,t)=>{if(t.element&&this._parentElement){t.element.remove()}});this._parentElement=null}destroy(){this.map(e=>e.destroy())}setParent(e){this._parentElement=e;for(const e of this){this._renderViewIntoCollectionParent(e)}}delegate(...e){if(!e.length||!fb(e)){throw new ss["b"]("ui-viewcollection-delegate-wrong-events: All event names must be strings.",this)}return{to:t=>{for(const i of this){for(const n of e){i.delegate(n).to(t)}}this.on("add",(i,n)=>{for(const i of e){n.delegate(i).to(t)}});this.on("remove",(i,n)=>{for(const i of e){n.stopDelegating(i,t)}})}}}_renderViewIntoCollectionParent(e,t){if(!e.isRendered){e.render()}if(e.element&&this._parentElement){this._parentElement.insertBefore(e.element,this._parentElement.children[t])}}}function fb(e){return e.every(e=>typeof e=="string")}const mb="http://www.w3.org/1999/xhtml";class gb{constructor(e){Object.assign(this,Tb(Cb(e)));this._isRendered=false;this._revertData=null}render(){const e=this._renderNode({intoFragment:true});this._isRendered=true;return e}apply(e){this._revertData=Bb();this._renderNode({node:e,isApplying:true,revertData:this._revertData});return e}revert(e){if(!this._revertData){throw new ss["b"]("ui-template-revert-not-applied: Attempting to revert a template which has not been applied yet.",[this,e])}this._revertTemplateFromNode(e,this._revertData)}*getViews(){function*e(t){if(t.children){for(const i of t.children){if(Ob(i)){yield i}else if(Vb(i)){yield*e(i)}}}}yield*e(this)}static bind(e,t){return{to(i,n){return new bb({eventNameOrFunction:i,attribute:i,observable:e,emitter:t,callback:n})},if(i,n,o){return new wb({observable:e,emitter:t,attribute:i,valueIfTrue:n,callback:o})}}}static extend(e,t){if(e._isRendered){throw new ss["b"]("template-extend-render: Attempting to extend a template which has already been rendered.",[this,e])}zb(e,Tb(Cb(t)))}_renderNode(e){let t;if(e.node){t=this.tag&&this.text}else{t=this.tag?this.text:!this.text}if(t){throw new ss["b"]('ui-template-wrong-syntax: Node definition must have either "tag" or "text" when rendering a new Node.',this)}if(this.text){return this._renderText(e)}else{return this._renderElement(e)}}_renderElement(e){let t=e.node;if(!t){t=e.node=document.createElementNS(this.ns||mb,this.tag)}this._renderAttributes(e);this._renderElementChildren(e);this._setUpListeners(e);return t}_renderText(e){let t=e.node;if(t){e.revertData.text=t.textContent}else{t=e.node=document.createTextNode("")}if(kb(this.text)){this._bindToObservable({schema:this.text,updater:yb(t),data:e})}else{t.textContent=this.text.join("")}return t}_renderAttributes(e){let t,i,n,o;if(!this.attributes){return}const r=e.node;const s=e.revertData;for(t in this.attributes){n=r.getAttribute(t);i=this.attributes[t];if(s){s.attributes[t]=n}o=ce(i[0])&&i[0].ns?i[0].ns:null;if(kb(i)){const a=o?i[0].value:i;if(s&&jb(t)){a.unshift(n)}this._bindToObservable({schema:a,updater:xb(r,t,o),data:e})}else if(t=="style"&&typeof i[0]!=="string"){this._renderStyleAttribute(i[0],e)}else{if(s&&n&&jb(t)){i.unshift(n)}i=i.map(e=>e?e.value||e:e).reduce((e,t)=>e.concat(t),[]).reduce(Lb,"");if(!Rb(i)){r.setAttributeNS(o,t,i)}}}}_renderStyleAttribute(e,t){const i=t.node;for(const n in e){const o=e[n];if(kb(o)){this._bindToObservable({schema:[o],updater:Ab(i,n),data:t})}else{i.style[n]=o}}}_renderElementChildren(e){const t=e.node;const i=e.intoFragment?document.createDocumentFragment():t;const n=e.isApplying;let o=0;for(const r of this.children){if(Db(r)){if(!n){r.setParent(t);for(const e of r){i.appendChild(e.element)}}}else if(Ob(r)){if(!n){if(!r.isRendered){r.render()}i.appendChild(r.element)}}else if(Ed(r)){i.appendChild(r)}else{if(n){const t=e.revertData;const n=Bb();t.children.push(n);r._renderNode({node:i.childNodes[o++],isApplying:true,revertData:n})}else{i.appendChild(r.render())}}}if(e.intoFragment){t.appendChild(i)}}_setUpListeners(e){if(!this.eventListeners){return}for(const t in this.eventListeners){const i=this.eventListeners[t].map(i=>{const[n,o]=t.split("@");return i.activateDomEventListener(n,o,e)});if(e.revertData){e.revertData.bindings.push(i)}}}_bindToObservable({schema:e,updater:t,data:i}){const n=i.revertData;vb(e,t,i);const o=e.filter(e=>!Rb(e)).filter(e=>e.observable).map(n=>n.activateAttributeListener(e,t,i));if(n){n.bindings.push(o)}}_revertTemplateFromNode(e,t){for(const e of t.bindings){for(const t of e){t()}}if(t.text){e.textContent=t.text;return}for(const i in t.attributes){const n=t.attributes[i];if(n===null){e.removeAttribute(i)}else{e.setAttribute(i,n)}}for(let i=0;ivb(e,t,i);this.emitter.listenTo(this.observable,"change:"+this.attribute,n);return()=>{this.emitter.stopListening(this.observable,"change:"+this.attribute,n)}}}class bb extends pb{activateDomEventListener(e,t,i){const n=(e,i)=>{if(!t||i.target.matches(t)){if(typeof this.eventNameOrFunction=="function"){this.eventNameOrFunction(i)}else{this.observable.fire(this.eventNameOrFunction,i)}}};this.emitter.listenTo(i.node,e,n);return()=>{this.emitter.stopListening(i.node,e,n)}}}class wb extends pb{getValue(e){const t=super.getValue(e);return Rb(t)?false:this.valueIfTrue||true}}function kb(e){if(!e){return false}if(e.value){e=e.value}if(Array.isArray(e)){return e.some(kb)}else if(e instanceof pb){return true}return false}function _b(e,t){return e.map(e=>{if(e instanceof pb){return e.getValue(t)}return e})}function vb(e,t,{node:i}){let n=_b(e,i);if(e.length==1&&e[0]instanceof wb){n=n[0]}else{n=n.reduce(Lb,"")}if(Rb(n)){t.remove()}else{t.set(n)}}function yb(e){return{set(t){e.textContent=t},remove(){e.textContent=""}}}function xb(e,t,i){return{set(n){e.setAttributeNS(i,t,n)},remove(){e.removeAttributeNS(i,t)}}}function Ab(e,t){return{set(i){e.style[t]=i},remove(){e.style[t]=null}}}function Cb(e){const t=$r(e,e=>{if(e&&(e instanceof pb||Vb(e)||Ob(e)||Db(e))){return e}});return t}function Tb(e){if(typeof e=="string"){e=Pb(e)}else if(e.text){Mb(e)}if(e.on){e.eventListeners=Eb(e.on);delete e.on}if(!e.text){if(e.attributes){Sb(e.attributes)}const t=[];if(e.children){if(Db(e.children)){t.push(e.children)}else{for(const i of e.children){if(Vb(i)||Ob(i)||Ed(i)){t.push(i)}else{t.push(new gb(i))}}}}e.children=t}return e}function Sb(e){for(const t in e){if(e[t].value){e[t].value=[].concat(e[t].value)}Ib(e,t)}}function Eb(e){for(const t in e){Ib(e,t)}return e}function Pb(e){return{text:[e]}}function Mb(e){if(!Array.isArray(e.text)){e.text=[e.text]}}function Ib(e,t){if(!Array.isArray(e[t])){e[t]=[e[t]]}}function Lb(e,t){if(Rb(t)){return e}else if(Rb(e)){return t}else{return`${e} ${t}`}}function Nb(e,t){for(const i in t){if(e[i]){e[i].push(...t[i])}else{e[i]=t[i]}}}function zb(e,t){if(t.attributes){if(!e.attributes){e.attributes={}}Nb(e.attributes,t.attributes)}if(t.eventListeners){if(!e.eventListeners){e.eventListeners={}}Nb(e.eventListeners,t.eventListeners)}if(t.text){e.text.push(...t.text)}if(t.children&&t.children.length){if(e.children.length!=t.children.length){throw new ss["b"]("ui-template-extend-children-mismatch: The number of children in extended definition does not match.",e)}let i=0;for(const n of t.children){zb(e.children[i++],n)}}}function Rb(e){return!e&&e!==0}function Ob(e){return e instanceof Hb}function Vb(e){return e instanceof gb}function Db(e){return e instanceof hb}function Bb(){return{children:[],bindings:[],attributes:{}}}function jb(e){return e=="class"||e=="style"}var Fb=i(18);class Hb{constructor(e){this.element=null;this.isRendered=false;this.locale=e;this.t=e&&e.t;this._viewCollections=new xs;this._unboundChildren=this.createCollection();this._viewCollections.on("add",(t,i)=>{i.locale=e});this.decorate("render")}get bindTemplate(){if(this._bindTemplate){return this._bindTemplate}return this._bindTemplate=gb.bind(this,this)}createCollection(e){const t=new hb(e);this._viewCollections.add(t);return t}registerChild(e){if(!vs(e)){e=[e]}for(const t of e){this._unboundChildren.add(t)}}deregisterChild(e){if(!vs(e)){e=[e]}for(const t of e){this._unboundChildren.remove(t)}}setTemplate(e){this.template=new gb(e)}extendTemplate(e){gb.extend(this.template,e)}render(){if(this.isRendered){throw new ss["b"]("ui-view-render-already-rendered: This View has already been rendered.",this)}if(this.template){this.element=this.template.render();this.registerChild(this.template.getViews())}this.isRendered=true}destroy(){this.stopListening();this._viewCollections.map(e=>e.destroy());if(this.template&&this.template._revertData){this.template.revert(this.element)}}}ys(Hb,Yd);ys(Hb,Zc);var Ub="[object String]";function Wb(e){return typeof e=="string"||!Yt(e)&&T(e)&&_(e)==Ub}var qb=Wb;function $b(e,t,i={},n=[]){const o=i&&i.xmlns;const r=o?e.createElementNS(o,t):e.createElement(t);for(const e in i){r.setAttribute(e,i[e])}if(qb(n)||!vs(n)){n=[n]}for(let t of n){if(qb(t)){t=e.createTextNode(t)}r.appendChild(t)}return r}class Gb extends hb{constructor(e,t=[]){super(t);this.locale=e}attachToDom(){this._bodyCollectionContainer=new gb({tag:"div",attributes:{class:["ck","ck-reset_all","ck-body","ck-rounded-corners"],dir:this.locale.uiLanguageDirection},children:this}).render();let e=document.querySelector(".ck-body-wrapper");if(!e){e=$b(document,"div",{class:"ck-body-wrapper"});document.body.appendChild(e)}e.appendChild(this._bodyCollectionContainer)}detachFromDom(){super.destroy();if(this._bodyCollectionContainer){this._bodyCollectionContainer.remove()}const e=document.querySelector(".ck-body-wrapper");if(e&&e.childElementCount==0){e.remove()}}}var Kb=i(20);class Yb extends Hb{constructor(e){super(e);this.body=new Gb(e)}render(){super.render();this.body.attachToDom()}destroy(){this.body.detachFromDom();return super.destroy()}}var Zb=i(22);class Qb extends Hb{constructor(e){super(e);this.set("text");this.set("for");this.id=`ck-editor__label_${is()}`;const t=this.bindTemplate;this.setTemplate({tag:"label",attributes:{class:["ck","ck-label"],id:this.id,for:t.to("for")},children:[{text:t.to("text")}]})}}class Jb extends Yb{constructor(e){super(e);this.top=this.createCollection();this.main=this.createCollection();this._voiceLabelView=this._createVoiceLabel();this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-editor","ck-rounded-corners"],role:"application",dir:e.uiLanguageDirection,lang:e.uiLanguage,"aria-labelledby":this._voiceLabelView.id},children:[this._voiceLabelView,{tag:"div",attributes:{class:["ck","ck-editor__top","ck-reset_all"],role:"presentation"},children:this.top},{tag:"div",attributes:{class:["ck","ck-editor__main"],role:"presentation"},children:this.main}]})}_createVoiceLabel(){const e=this.t;const t=new Qb;t.text=e("Rich Text Editor");t.extendTemplate({attributes:{class:"ck-voice-label"}});return t}}class Xb extends Hb{constructor(e,t,i){super(e);this.setTemplate({tag:"div",attributes:{class:["ck","ck-content","ck-editor__editable","ck-rounded-corners"],lang:e.contentLanguage,dir:e.contentLanguageDirection}});this.name=null;this.set("isFocused",false);this._editableElement=i;this._hasExternalElement=!!this._editableElement;this._editingView=t}render(){super.render();if(this._hasExternalElement){this.template.apply(this.element=this._editableElement)}else{this._editableElement=this.element}this.on("change:isFocused",()=>this._updateIsFocusedClasses());this._updateIsFocusedClasses()}destroy(){if(this._hasExternalElement){this.template.revert(this._editableElement)}super.destroy()}_updateIsFocusedClasses(){const e=this._editingView;if(e.isRenderingInProgress){i(this)}else{t(this)}function t(t){e.change(i=>{const n=e.document.getRoot(t.name);i.addClass(t.isFocused?"ck-focused":"ck-blurred",n);i.removeClass(t.isFocused?"ck-blurred":"ck-focused",n)})}function i(n){e.once("change:isRenderingInProgress",(e,o,r)=>{if(!r){t(n)}else{i(n)}})}}}class ew extends Xb{constructor(e,t,i){super(e,t,i);this.extendTemplate({attributes:{role:"textbox",class:"ck-editor__editable_inline"}})}render(){super.render();const e=this._editingView;const t=this.t;e.change(i=>{const n=e.document.getRoot(this.name);i.setAttribute("aria-label",t("Rich Text Editor, %0",[this.name]),n)})}}function tw(e){return t=>t+e}var iw=i(24);const nw=tw("px");class ow extends Hb{constructor(e){super(e);const t=this.bindTemplate;this.set("isActive",false);this.set("isSticky",false);this.set("limiterElement",null);this.set("limiterBottomOffset",50);this.set("viewportTopOffset",0);this.set("_marginLeft",null);this.set("_isStickyToTheLimiter",false);this.set("_hasViewportTopOffset",false);this.content=this.createCollection();this._contentPanelPlaceholder=new gb({tag:"div",attributes:{class:["ck","ck-sticky-panel__placeholder"],style:{display:t.to("isSticky",e=>e?"block":"none"),height:t.to("isSticky",e=>e?nw(this._panelRect.height):null)}}}).render();this._contentPanel=new gb({tag:"div",attributes:{class:["ck","ck-sticky-panel__content",t.if("isSticky","ck-sticky-panel__content_sticky"),t.if("_isStickyToTheLimiter","ck-sticky-panel__content_sticky_bottom-limit")],style:{width:t.to("isSticky",e=>e?nw(this._contentPanelPlaceholder.getBoundingClientRect().width):null),top:t.to("_hasViewportTopOffset",e=>e?nw(this.viewportTopOffset):null),bottom:t.to("_isStickyToTheLimiter",e=>e?nw(this.limiterBottomOffset):null),marginLeft:t.to("_marginLeft")}},children:this.content}).render();this.setTemplate({tag:"div",attributes:{class:["ck","ck-sticky-panel"]},children:[this._contentPanelPlaceholder,this._contentPanel]})}render(){super.render();this._checkIfShouldBeSticky();this.listenTo(Vd.window,"scroll",()=>{this._checkIfShouldBeSticky()});this.listenTo(this,"change:isActive",()=>{this._checkIfShouldBeSticky()})}_checkIfShouldBeSticky(){const e=this._panelRect=this._contentPanel.getBoundingClientRect();let t;if(!this.limiterElement){this.isSticky=false}else{t=this._limiterRect=this.limiterElement.getBoundingClientRect();this.isSticky=this.isActive&&t.top{this[t]();i()})}}}}get first(){return this.focusables.find(sw)||null}get last(){return this.focusables.filter(sw).slice(-1)[0]||null}get next(){return this._getFocusableItem(1)}get previous(){return this._getFocusableItem(-1)}get current(){let e=null;if(this.focusTracker.focusedElement===null){return null}this.focusables.find((t,i)=>{const n=t.element===this.focusTracker.focusedElement;if(n){e=i}return n});return e}focusFirst(){this._focus(this.first)}focusLast(){this._focus(this.last)}focusNext(){this._focus(this.next)}focusPrevious(){this._focus(this.previous)}_focus(e){if(e){e.focus()}}_getFocusableItem(e){const t=this.current;const i=this.focusables.length;if(!i){return null}if(t===null){return this[e===1?"first":"last"]}let n=(t+i+e)%i;do{const t=this.focusables.get(n);if(sw(t)){return t}n=(n+i+e)%i}while(n!==t);return null}}function sw(e){return!!(e.focus&&Vd.window.getComputedStyle(e.element).display!="none")}class aw extends Hb{constructor(e){super(e);this.setTemplate({tag:"span",attributes:{class:["ck","ck-toolbar__separator"]}})}}const cw=100;class lw{constructor(e,t){if(!lw._observerInstance){lw._createObserver()}this._element=e;this._callback=t;lw._addElementCallback(e,t);lw._observerInstance.observe(e)}destroy(){lw._deleteElementCallback(this._element,this._callback)}static _addElementCallback(e,t){if(!lw._elementCallbacks){lw._elementCallbacks=new Map}let i=lw._elementCallbacks.get(e);if(!i){i=new Set;lw._elementCallbacks.set(e,i)}i.add(t)}static _deleteElementCallback(e,t){const i=lw._getElementCallbacks(e);if(i){i.delete(t);if(!i.size){lw._elementCallbacks.delete(e);lw._observerInstance.unobserve(e)}}if(lw._elementCallbacks&&!lw._elementCallbacks.size){lw._observerInstance=null;lw._elementCallbacks=null}}static _getElementCallbacks(e){if(!lw._elementCallbacks){return null}return lw._elementCallbacks.get(e)}static _createObserver(){let e;if(typeof Vd.window.ResizeObserver==="function"){e=Vd.window.ResizeObserver}else{e=dw}lw._observerInstance=new e(e=>{for(const t of e){const e=lw._getElementCallbacks(t.target);if(e){for(const i of e){i(t)}}}})}}lw._observerInstance=null;lw._elementCallbacks=null;class dw{constructor(e){this._callback=e;this._elements=new Set;this._previousRects=new Map;this._periodicCheckTimeout=null}observe(e){this._elements.add(e);this._checkElementRectsAndExecuteCallback();if(this._elements.size===1){this._startPeriodicCheck()}}unobserve(e){this._elements.delete(e);this._previousRects.delete(e);if(!this._elements.size){this._stopPeriodicCheck()}}_startPeriodicCheck(){const e=()=>{this._checkElementRectsAndExecuteCallback();this._periodicCheckTimeout=setTimeout(e,cw)};this.listenTo(Vd.window,"resize",()=>{this._checkElementRectsAndExecuteCallback()});this._periodicCheckTimeout=setTimeout(e,cw)}_stopPeriodicCheck(){clearTimeout(this._periodicCheckTimeout);this.stopListening();this._previousRects.clear()}_checkElementRectsAndExecuteCallback(){const e=[];for(const t of this._elements){if(this._hasRectChanged(t)){e.push({target:t,contentRect:this._previousRects.get(t)})}}if(e.length){this._callback(e)}}_hasRectChanged(e){if(!e.ownerDocument.body.contains(e)){return false}const t=new Th(e);const i=this._previousRects.get(e);const n=!i||!i.isEqual(t);this._previousRects.set(e,t);return n}}ys(dw,Yd);function uw(e){return e.bindTemplate.to(t=>{if(t.target===e.element){t.preventDefault()}})}class hw extends Hb{constructor(e){super(e);const t=this.bindTemplate;this.set("isVisible",false);this.set("position","se");this.children=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-dropdown__panel",t.to("position",e=>`ck-dropdown__panel_${e}`),t.if("isVisible","ck-dropdown__panel-visible")]},children:this.children,on:{selectstart:t.to(e=>e.preventDefault())}})}focus(){if(this.children.length){this.children.first.focus()}}focusLast(){if(this.children.length){const e=this.children.last;if(typeof e.focusLast==="function"){e.focusLast()}else{e.focus()}}}}var fw=i(26);function mw(e){if(!e||!e.parentNode){return null}if(e.offsetParent===Vd.document.body){return null}return e.offsetParent}function gw({element:e,target:t,positions:i,limiter:n,fitInViewport:o}){if(me(t)){t=t()}if(me(n)){n=n()}const r=mw(e);const s=new Th(e);const a=new Th(t);let c;let l;if(!n&&!o){[l,c]=pw(i[0],a,s)}else{const e=n&&new Th(n).getVisible();const t=o&&new Th(Vd.window);const r=bw(i,{targetRect:a,elementRect:s,limiterRect:e,viewportRect:t});[l,c]=r||pw(i[0],a,s)}let d=vw(c);if(r){d=_w(d,r)}return{left:d.left,top:d.top,name:l}}function pw(e,t,i){const n=e(t,i);if(!n){return null}const{left:o,top:r,name:s}=n;return[s,i.clone().moveTo(o,r)]}function bw(e,t){const{elementRect:i,viewportRect:n}=t;const o=i.getArea();const r=ww(e,t);if(n){const e=r.filter(({viewportIntersectArea:e})=>e===o);const t=kw(e,o);if(t){return t}}return kw(r,o)}function ww(e,{targetRect:t,elementRect:i,limiterRect:n,viewportRect:o}){const r=[];const s=i.getArea();for(const a of e){const e=pw(a,t,i);if(!e){continue}const[c,l]=e;let d=0;let u=0;if(n){if(o){const e=n.getIntersection(o);if(e){d=e.getIntersectionArea(l)}}else{d=n.getIntersectionArea(l)}}if(o){u=o.getIntersectionArea(l)}const h={positionName:c,positionRect:l,limiterIntersectArea:d,viewportIntersectArea:u};if(d===s){return[h]}r.push(h)}return r}function kw(e,t){let i=0;let n;let o;for(const{positionName:r,positionRect:s,limiterIntersectArea:a,viewportIntersectArea:c}of e){if(a===t){return[r,s]}const e=c**2+a**2;if(e>i){i=e;n=s;o=r}}return n?[o,n]:null}function _w({left:e,top:t},i){const n=vw(new Th(i));const o=Ah(i);e-=n.left;t-=n.top;e+=i.scrollLeft;t+=i.scrollTop;e-=o.left;t-=o.top;return{left:e,top:t}}function vw({left:e,top:t}){const{scrollX:i,scrollY:n}=Vd.window;return{left:e+i,top:t+n}}class yw extends Hb{constructor(e,t,i){super(e);const n=this.bindTemplate;this.buttonView=t;this.panelView=i;this.set("isOpen",false);this.set("isEnabled",true);this.set("class");this.set("id");this.set("panelPosition","auto");this.keystrokes=new Vp;this.setTemplate({tag:"div",attributes:{class:["ck","ck-dropdown",n.to("class"),n.if("isEnabled","ck-disabled",e=>!e)],id:n.to("id"),"aria-describedby":n.to("ariaDescribedById")},children:[t,i]});t.extendTemplate({attributes:{class:["ck-dropdown__button"]}})}render(){super.render();this.listenTo(this.buttonView,"open",()=>{this.isOpen=!this.isOpen});this.panelView.bind("isVisible").to(this,"isOpen");this.on("change:isOpen",()=>{if(!this.isOpen){return}if(this.panelPosition==="auto"){this.panelView.position=yw._getOptimalPosition({element:this.panelView.element,target:this.buttonView.element,fitInViewport:true,positions:this._panelPositions}).name}else{this.panelView.position=this.panelPosition}});this.keystrokes.listenTo(this.element);const e=(e,t)=>{if(this.isOpen){this.buttonView.focus();this.isOpen=false;t()}};this.keystrokes.set("arrowdown",(e,t)=>{if(this.buttonView.isEnabled&&!this.isOpen){this.isOpen=true;t()}});this.keystrokes.set("arrowright",(e,t)=>{if(this.isOpen){t()}});this.keystrokes.set("arrowleft",e);this.keystrokes.set("esc",e)}focus(){this.buttonView.focus()}get _panelPositions(){const{southEast:e,southWest:t,northEast:i,northWest:n}=yw.defaultPanelPositions;if(this.locale.uiLanguageDirection==="ltr"){return[e,t,i,n]}else{return[t,e,n,i]}}}yw.defaultPanelPositions={southEast:e=>({top:e.bottom,left:e.left,name:"se"}),southWest:(e,t)=>({top:e.bottom,left:e.left-t.width+e.width,name:"sw"}),northEast:(e,t)=>({top:e.top-t.height,left:e.left,name:"ne"}),northWest:(e,t)=>({top:e.bottom-t.height,left:e.left-t.width+e.width,name:"nw"})};yw._getOptimalPosition=gw;var xw=i(28);class Aw extends Hb{constructor(){super();const e=this.bindTemplate;this.set("content","");this.set("viewBox","0 0 20 20");this.set("fillColor","");this.setTemplate({tag:"svg",ns:"http://www.w3.org/2000/svg",attributes:{class:["ck","ck-icon"],viewBox:e.to("viewBox")}})}render(){super.render();this._updateXMLContent();this._colorFillPaths();this.on("change:content",()=>{this._updateXMLContent();this._colorFillPaths()});this.on("change:fillColor",()=>{this._colorFillPaths()})}_updateXMLContent(){if(this.content){const e=(new DOMParser).parseFromString(this.content.trim(),"image/svg+xml");const t=e.querySelector("svg");const i=t.getAttribute("viewBox");if(i){this.viewBox=i}this.element.innerHTML="";while(t.childNodes.length>0){this.element.appendChild(t.childNodes[0])}}}_colorFillPaths(){if(this.fillColor){this.element.querySelectorAll(".ck-icon__fill").forEach(e=>{e.style.fill=this.fillColor})}}}var Cw=i(30);class Tw extends Hb{constructor(e){super(e);this.set("text","");this.set("position","s");const t=this.bindTemplate;this.setTemplate({tag:"span",attributes:{class:["ck","ck-tooltip",t.to("position",e=>"ck-tooltip_"+e),t.if("text","ck-hidden",e=>!e.trim())]},children:[{tag:"span",attributes:{class:["ck","ck-tooltip__text"]},children:[{text:t.to("text")}]}]})}}var Sw=i(32);class Ew extends Hb{constructor(e){super(e);const t=this.bindTemplate;const i=is();this.set("class");this.set("labelStyle");this.set("icon");this.set("isEnabled",true);this.set("isOn",false);this.set("isVisible",true);this.set("isToggleable",false);this.set("keystroke");this.set("label");this.set("tabindex",-1);this.set("tooltip");this.set("tooltipPosition","s");this.set("type","button");this.set("withText",false);this.set("withKeystroke",false);this.children=this.createCollection();this.tooltipView=this._createTooltipView();this.labelView=this._createLabelView(i);this.iconView=new Aw;this.iconView.extendTemplate({attributes:{class:"ck-button__icon"}});this.keystrokeView=this._createKeystrokeView();this.bind("_tooltipString").to(this,"tooltip",this,"label",this,"keystroke",this._getTooltipString.bind(this));this.setTemplate({tag:"button",attributes:{class:["ck","ck-button",t.to("class"),t.if("isEnabled","ck-disabled",e=>!e),t.if("isVisible","ck-hidden",e=>!e),t.to("isOn",e=>e?"ck-on":"ck-off"),t.if("withText","ck-button_with-text"),t.if("withKeystroke","ck-button_with-keystroke")],type:t.to("type",e=>e?e:"button"),tabindex:t.to("tabindex"),"aria-labelledby":`ck-editor__aria-label_${i}`,"aria-disabled":t.if("isEnabled",true,e=>!e),"aria-pressed":t.to("isOn",e=>this.isToggleable?String(e):false)},children:this.children,on:{mousedown:t.to(e=>{e.preventDefault()}),click:t.to(e=>{if(this.isEnabled){this.fire("execute")}else{e.preventDefault()}})}})}render(){super.render();if(this.icon){this.iconView.bind("content").to(this,"icon");this.children.add(this.iconView)}this.children.add(this.tooltipView);this.children.add(this.labelView);if(this.withKeystroke){this.children.add(this.keystrokeView)}}focus(){this.element.focus()}_createTooltipView(){const e=new Tw;e.bind("text").to(this,"_tooltipString");e.bind("position").to(this,"tooltipPosition");return e}_createLabelView(e){const t=new Hb;const i=this.bindTemplate;t.setTemplate({tag:"span",attributes:{class:["ck","ck-button__label"],style:i.to("labelStyle"),id:`ck-editor__aria-label_${e}`},children:[{text:this.bindTemplate.to("label")}]});return t}_createKeystrokeView(){const e=new Hb;e.setTemplate({tag:"span",attributes:{class:["ck","ck-button__keystroke"]},children:[{text:this.bindTemplate.to("keystroke",e=>Vl(e))}]});return e}_getTooltipString(e,t,i){if(e){if(typeof e=="string"){return e}else{if(i){i=Vl(i)}if(e instanceof Function){return e(t,i)}else{return`${t}${i?` (${i})`:""}`}}}return""}}var Pw='';class Mw extends Ew{constructor(e){super(e);this.arrowView=this._createArrowView();this.extendTemplate({attributes:{"aria-haspopup":true}});this.delegate("execute").to(this,"open")}render(){super.render();this.children.add(this.arrowView)}_createArrowView(){const e=new Aw;e.content=Pw;e.extendTemplate({attributes:{class:"ck-dropdown__arrow"}});return e}}var Iw=i(34);class Lw extends Hb{constructor(){super();this.items=this.createCollection();this.focusTracker=new Zp;this.keystrokes=new Vp;this._focusCycler=new rw({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowup",focusNext:"arrowdown"}});this.setTemplate({tag:"ul",attributes:{class:["ck","ck-reset","ck-list"]},children:this.items})}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)});this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}}class Nw extends Hb{constructor(e){super(e);this.children=this.createCollection();this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__item"]},children:this.children})}focus(){this.children.first.focus()}}class zw extends Hb{constructor(e){super(e);this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__separator"]}})}}var Rw=i(36);class Ow extends Ew{constructor(e){super(e);this.isToggleable=true;this.toggleSwitchView=this._createToggleView();this.extendTemplate({attributes:{class:"ck-switchbutton"}})}render(){super.render();this.children.add(this.toggleSwitchView)}_createToggleView(){const e=new Hb;e.setTemplate({tag:"span",attributes:{class:["ck","ck-button__toggle"]},children:[{tag:"span",attributes:{class:["ck","ck-button__toggle__inner"]}}]});return e}}function Vw({emitter:e,activator:t,callback:i,contextElements:n}){e.listenTo(document,"mousedown",(e,o)=>{if(!t()){return}const r=typeof o.composedPath=="function"?o.composedPath():[];for(const e of n){if(e.contains(o.target)||r.includes(e)){return}}i()})}var Dw=i(38);var Bw=i(40);function jw(e,t=Mw){const i=new t(e);const n=new hw(e);const o=new yw(e,i,n);i.bind("isEnabled").to(o);if(i instanceof Mw){i.bind("isOn").to(o,"isOpen")}else{i.arrowView.bind("isOn").to(o,"isOpen")}Uw(o);return o}function Fw(e,t){const i=e.locale;const n=i.t;const o=e.toolbarView=new Yw(i);o.set("ariaLabel",n("Dropdown toolbar"));e.extendTemplate({attributes:{class:["ck-toolbar-dropdown"]}});t.map(e=>o.items.add(e));e.panelView.children.add(o);o.items.delegate("execute").to(e)}function Hw(e,t){const i=e.locale;const n=e.listView=new Lw(i);n.items.bindTo(t).using(({type:e,model:t})=>{if(e==="separator"){return new zw(i)}else if(e==="button"||e==="switchbutton"){const n=new Nw(i);let o;if(e==="button"){o=new Ew(i)}else{o=new Ow(i)}o.bind(...Object.keys(t)).to(t);o.delegate("execute").to(n);n.children.add(o);return n}});e.panelView.children.add(n);n.items.delegate("execute").to(e)}function Uw(e){Ww(e);qw(e);$w(e)}function Ww(e){e.on("render",()=>{Vw({emitter:e,activator:()=>e.isOpen,callback:()=>{e.isOpen=false},contextElements:[e.element]})})}function qw(e){e.on("execute",t=>{if(t.source instanceof Ow){return}e.isOpen=false})}function $w(e){e.keystrokes.set("arrowdown",(t,i)=>{if(e.isOpen){e.panelView.focus();i()}});e.keystrokes.set("arrowup",(t,i)=>{if(e.isOpen){e.panelView.focusLast();i()}})}var Gw='';var Kw=i(42);class Yw extends Hb{constructor(e,t){super(e);const i=this.bindTemplate;const n=this.t;this.options=t||{};this.set("ariaLabel",n("Editor toolbar"));this.set("maxWidth","auto");this.items=this.createCollection();this.focusTracker=new Zp;this.keystrokes=new Vp;this.set("class");this.set("isCompact",false);this.itemsView=new Zw(e);this.children=this.createCollection();this.children.add(this.itemsView);this.focusables=this.createCollection();this._focusCycler=new rw({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:["arrowleft","arrowup"],focusNext:["arrowright","arrowdown"]}});this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar",i.to("class"),i.if("isCompact","ck-toolbar_compact")],role:"toolbar","aria-label":i.to("ariaLabel"),style:{maxWidth:i.to("maxWidth")}},children:this.children,on:{mousedown:uw(this)}});this._behavior=this.options.shouldGroupWhenFull?new Jw(this):new Qw(this)}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)});this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element);this._behavior.render(this)}destroy(){this._behavior.destroy();return super.destroy()}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}fillFromConfig(e,t){this.items.addMany(e.map(e=>{if(e=="|"){return new aw}else if(t.has(e)){return t.create(e)}else{console.warn(Object(ss["a"])("toolbarview-item-unavailable: The requested toolbar item is unavailable."),{name:e})}}).filter(e=>e!==undefined))}}class Zw extends Hb{constructor(e){super(e);this.children=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar__items"]},children:this.children})}}class Qw{constructor(e){const t=e.bindTemplate;e.set("isVertical",false);e.itemsView.children.bindTo(e.items).using(e=>e);e.focusables.bindTo(e.items).using(e=>e);e.extendTemplate({attributes:{class:[t.if("isVertical","ck-toolbar_vertical")]}})}render(){}destroy(){}}class Jw{constructor(e){this.view=e;this.viewChildren=e.children;this.viewFocusables=e.focusables;this.viewItemsView=e.itemsView;this.viewFocusTracker=e.focusTracker;this.viewLocale=e.locale;this.ungroupedItems=e.createCollection();this.groupedItems=e.createCollection();this.groupedItemsDropdown=this._createGroupedItemsDropdown();this.resizeObserver=null;this.cachedPadding=null;this.shouldUpdateGroupingOnNextResize=false;e.itemsView.children.bindTo(this.ungroupedItems).using(e=>e);this.ungroupedItems.on("add",this._updateFocusCycleableItems.bind(this));this.ungroupedItems.on("remove",this._updateFocusCycleableItems.bind(this));e.children.on("add",this._updateFocusCycleableItems.bind(this));e.children.on("remove",this._updateFocusCycleableItems.bind(this));e.items.on("change",(e,t)=>{const i=t.index;for(const e of t.removed){if(i>=this.ungroupedItems.length){this.groupedItems.remove(e)}else{this.ungroupedItems.remove(e)}}for(let e=i;ethis.ungroupedItems.length){this.groupedItems.add(n,e-this.ungroupedItems.length)}else{this.ungroupedItems.add(n,e)}}this._updateGrouping()});e.extendTemplate({attributes:{class:["ck-toolbar_grouping"]}})}render(e){this.viewElement=e.element;this._enableGroupingOnResize();this._enableGroupingOnMaxWidthChange(e)}destroy(){this.groupedItemsDropdown.destroy();this.resizeObserver.destroy()}_updateGrouping(){if(!this.viewElement.ownerDocument.body.contains(this.viewElement)){return}if(!this.viewElement.offsetParent){this.shouldUpdateGroupingOnNextResize=true;return}const e=this.groupedItems.length;let t;while(this._areItemsOverflowing){this._groupLastItem();t=true}if(!t&&this.groupedItems.length){while(this.groupedItems.length&&!this._areItemsOverflowing){this._ungroupFirstItem()}if(this._areItemsOverflowing){this._groupLastItem()}}if(this.groupedItems.length!==e){this.view.fire("groupedItemsUpdate")}}get _areItemsOverflowing(){if(!this.ungroupedItems.length){return false}const e=this.viewElement;const t=this.viewLocale.uiLanguageDirection;const i=new Th(e.lastChild);const n=new Th(e);if(!this.cachedPadding){const i=Vd.window.getComputedStyle(e);const n=t==="ltr"?"paddingRight":"paddingLeft";this.cachedPadding=Number.parseInt(i[n])}if(t==="ltr"){return i.right>n.right-this.cachedPadding}else{return i.left{if(!e||e!==t.contentRect.width||this.shouldUpdateGroupingOnNextResize){this.shouldUpdateGroupingOnNextResize=false;this._updateGrouping();e=t.contentRect.width}});this._updateGrouping()}_enableGroupingOnMaxWidthChange(e){e.on("change:maxWidth",()=>{this._updateGrouping()})}_groupLastItem(){if(!this.groupedItems.length){this.viewChildren.add(new aw);this.viewChildren.add(this.groupedItemsDropdown);this.viewFocusTracker.add(this.groupedItemsDropdown.element)}this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last),0)}_ungroupFirstItem(){this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first));if(!this.groupedItems.length){this.viewChildren.remove(this.groupedItemsDropdown);this.viewChildren.remove(this.viewChildren.last);this.viewFocusTracker.remove(this.groupedItemsDropdown.element)}}_createGroupedItemsDropdown(){const e=this.viewLocale;const t=e.t;const i=jw(e);i.class="ck-toolbar__grouped-dropdown";i.panelPosition=e.uiLanguageDirection==="ltr"?"sw":"se";Fw(i,[]);i.buttonView.set({label:t("Show more items"),tooltip:true,icon:Gw});i.toolbarView.items.bindTo(this.groupedItems).using(e=>e);return i}_updateFocusCycleableItems(){this.viewFocusables.clear();this.ungroupedItems.map(e=>{this.viewFocusables.add(e)});if(this.groupedItems.length){this.viewFocusables.add(this.groupedItemsDropdown)}}}var Xw=i(44);class ek extends Jb{constructor(e,t,i={}){super(e);this.stickyPanel=new ow(e);this.toolbar=new Yw(e,{shouldGroupWhenFull:i.shouldToolbarGroupWhenFull});this.editable=new ew(e,t)}render(){super.render();this.stickyPanel.content.add(this.toolbar);this.top.add(this.stickyPanel);this.main.add(this.editable)}}function tk(e){if(e instanceof HTMLTextAreaElement){return e.value}return e.innerHTML}class ik extends Bp{constructor(e,t){super(t);if(Kr(e)){this.sourceElement=e}this.data.processor=new Gp(this.data.viewDocument);this.model.document.createRoot();const i=!this.config.get("toolbar.shouldNotGroupWhenFull");const n=new ek(this.locale,this.editing.view,{shouldToolbarGroupWhenFull:i});this.ui=new ub(this,n);qp(this)}destroy(){if(this.sourceElement){this.updateSourceElement()}this.ui.destroy();return super.destroy()}static create(e,t={}){return new Promise(i=>{const n=new this(e,t);i(n.initPlugins().then(()=>n.ui.init(Kr(e)?e:null)).then(()=>{if(!Kr(e)&&t.initialData){throw new ss["b"]("editor-create-initial-data: "+"The config.initialData option cannot be used together with initial data passed in Editor.create().",null)}const i=t.initialData||nk(e);return n.data.init(i)}).then(()=>n.fire("ready")).then(()=>n))})}}ys(ik,Fp);ys(ik,Wp);function nk(e){return Kr(e)?tk(e):e}class ok{constructor(e){this.editor=e;this.set("isEnabled",true);this._disableStack=new Set}forceDisabled(e){this._disableStack.add(e);if(this._disableStack.size==1){this.on("set:isEnabled",rk,{priority:"highest"});this.isEnabled=false}}clearForceDisabled(e){this._disableStack.delete(e);if(this._disableStack.size==0){this.off("set:isEnabled",rk);this.isEnabled=true}}destroy(){this.stopListening()}static get isContextPlugin(){return false}}ys(ok,Zc);function rk(e){e.return=false;e.stop()}class sk{constructor(e){this.editor=e;this.set("value",undefined);this.set("isEnabled",false);this._disableStack=new Set;this.decorate("execute");this.listenTo(this.editor.model.document,"change",()=>{this.refresh()});this.on("execute",e=>{if(!this.isEnabled){e.stop()}},{priority:"high"});this.listenTo(e,"change:isReadOnly",(e,t,i)=>{if(i){this.forceDisabled("readOnlyMode")}else{this.clearForceDisabled("readOnlyMode")}})}refresh(){this.isEnabled=true}forceDisabled(e){this._disableStack.add(e);if(this._disableStack.size==1){this.on("set:isEnabled",ak,{priority:"highest"});this.isEnabled=false}}clearForceDisabled(e){this._disableStack.delete(e);if(this._disableStack.size==0){this.off("set:isEnabled",ak);this.refresh()}}execute(){}destroy(){this.stopListening()}}ys(sk,Zc);function ak(e){e.return=false;e.stop()}function ck(e){const t=e.next();if(t.done){return null}return t.value}const lk=["left","right","center","justify"];function dk(e){return lk.includes(e)}function uk(e,t){if(t.contentLanguageDirection=="rtl"){return e==="right"}else{return e==="left"}}const hk="alignment";class fk extends sk{refresh(){const e=this.editor;const t=e.locale;const i=ck(this.editor.model.document.selection.getSelectedBlocks());this.isEnabled=!!i&&this._canBeAligned(i);if(this.isEnabled&&i.hasAttribute("alignment")){this.value=i.getAttribute("alignment")}else{this.value=t.contentLanguageDirection==="rtl"?"right":"left"}}execute(e={}){const t=this.editor;const i=t.locale;const n=t.model;const o=n.document;const r=e.value;n.change(e=>{const t=Array.from(o.selection.getSelectedBlocks()).filter(e=>this._canBeAligned(e));const n=t[0].getAttribute("alignment");const s=uk(r,i)||n===r||!r;if(s){mk(t,e)}else{gk(t,e,r)}})}_canBeAligned(e){return this.editor.model.schema.checkAttribute(e,hk)}}function mk(e,t){for(const i of e){t.removeAttribute(hk,i)}}function gk(e,t,i){for(const n of e){t.setAttribute(hk,i,n)}}class pk extends ok{static get pluginName(){return"AlignmentEditing"}constructor(e){super(e);e.config.define("alignment",{options:[...lk]})}init(){const e=this.editor;const t=e.locale;const i=e.model.schema;const n=e.config.get("alignment.options").filter(dk);i.extend("$block",{allowAttributes:"alignment"});e.model.schema.setAttributeProperties("alignment",{isFormatting:true});const o=bk(n.filter(e=>!uk(e,t)));e.conversion.attributeToAttribute(o);e.commands.add("alignment",new fk(e))}}function bk(e){const t={model:{key:"alignment",values:e.slice()},view:{}};for(const i of e){t.view[i]={key:"style",value:{"text-align":i}}}return t}var wk='';var kk='';var _k='';var vk='';const yk=new Map([["left",wk],["right",kk],["center",_k],["justify",vk]]);class xk extends ok{get localizedOptionTitles(){const e=this.editor.t;return{left:e("Align left"),right:e("Align right"),center:e("Align center"),justify:e("Justify")}}static get pluginName(){return"AlignmentUI"}init(){const e=this.editor;const t=e.ui.componentFactory;const i=e.t;const n=e.config.get("alignment.options");n.filter(dk).forEach(e=>this._addButton(e));t.add("alignment",e=>{const o=jw(e);const r=n.map(e=>t.create(`alignment:${e}`));Fw(o,r);o.buttonView.set({label:i("Text alignment"),tooltip:true});o.toolbarView.isVertical=true;o.toolbarView.ariaLabel=i("Text alignment toolbar");o.extendTemplate({attributes:{class:"ck-alignment-dropdown"}});const s=e.contentLanguageDirection==="rtl"?kk:wk;o.buttonView.bind("icon").toMany(r,"isOn",(...e)=>{const t=e.findIndex(e=>e);if(t<0){return s}return r[t].icon});o.bind("isEnabled").toMany(r,"isEnabled",(...e)=>e.some(e=>e));return o})}_addButton(e){const t=this.editor;t.ui.componentFactory.add(`alignment:${e}`,i=>{const n=t.commands.get("alignment");const o=new Ew(i);o.set({label:this.localizedOptionTitles[e],icon:yk.get(e),tooltip:true,isToggleable:true});o.bind("isEnabled").to(n);o.bind("isOn").to(n,"value",t=>t===e);this.listenTo(o,"execute",()=>{t.execute("alignment",{value:e});t.editing.view.focus()});return o})}}class Ak extends ok{static get requires(){return[pk,xk]}static get pluginName(){return"Alignment"}}function Ck(e,t,i,n){let o;let r=null;if(typeof n=="function"){o=n}else{r=e.commands.get(n);o=()=>{e.execute(n)}}e.model.document.on("change:data",(n,s)=>{if(r&&!r.isEnabled||!t.isEnabled){return}const a=ck(e.model.document.selection.getRanges());if(!a.isCollapsed){return}if(s.type=="transparent"){return}const c=Array.from(e.model.document.differ.getChanges());const l=c[0];if(c.length!=1||l.type!=="insert"||l.name!="$text"||l.length!=1){return}const d=l.position.parent;if(d.is("element","codeBlock")){return}if(r&&r.value===true){return}const u=d.getChild(0);const h=e.model.createRangeOn(u);if(!h.containsRange(a)&&!a.end.isEqual(h.end)){return}const f=i.exec(u.data.substr(0,a.end.offset));if(!f){return}e.model.enqueueChange(e=>{const t=e.createPositionAt(d,0);const i=e.createPositionAt(d,f[0].length);const n=new ff(t,i);const r=o({match:f});if(r!==false){e.remove(n)}n.detach()})})}function Tk(e,t,i,n){let o;let r;if(i instanceof RegExp){o=i}else{r=i}r=r||(e=>{let t;const i=[];const n=[];while((t=o.exec(e))!==null){if(t&&t.length<4){break}let{index:e,1:o,2:r,3:s}=t;const a=o+r+s;e+=t[0].length-a.length;const c=[e,e+o.length];const l=[e+o.length+r.length,e+o.length+r.length+s.length];i.push(c);i.push(l);n.push([e+o.length,e+o.length+r.length])}return{remove:i,format:n}});e.model.document.on("change:data",(i,o)=>{if(o.type=="transparent"||!t.isEnabled){return}const s=e.model;const a=s.document.selection;if(!a.isCollapsed){return}const c=Array.from(s.document.differ.getChanges());const l=c[0];if(c.length!=1||l.type!=="insert"||l.name!="$text"||l.length!=1){return}const d=a.focus;const u=d.parent;const{text:h,range:f}=Ek(s.createRange(s.createPositionAt(u,0),d),s);const m=r(h);const g=Sk(f.start,m.format,s);const p=Sk(f.start,m.remove,s);if(!(g.length&&p.length)){return}s.enqueueChange(e=>{const t=n(e,g);if(t===false){return}for(const t of p.reverse()){e.remove(t)}})})}function Sk(e,t,i){return t.filter(e=>e[0]!==undefined&&e[1]!==undefined).map(t=>i.createRange(e.getShiftedBy(t[0]),e.getShiftedBy(t[1])))}function Ek(e,t){let i=e.start;const n=Array.from(e.getItems()).reduce((e,n)=>{if(!(n.is("$text")||n.is("$textProxy"))||n.getAttribute("code")){i=t.createPositionAfter(n);return""}return e+n.data},"");return{text:n,range:t.createRange(i,e.end)}}class Pk extends ok{static get pluginName(){return"Autoformat"}afterInit(){this._addListAutoformats();this._addBasicStylesAutoformats();this._addHeadingAutoformats();this._addBlockQuoteAutoformats();this._addCodeBlockAutoformats()}_addListAutoformats(){const e=this.editor.commands;if(e.get("bulletedList")){Ck(this.editor,this,/^[*-]\s$/,"bulletedList")}if(e.get("numberedList")){Ck(this.editor,this,/^1[.|)]\s$/,"numberedList")}}_addBasicStylesAutoformats(){const e=this.editor.commands;if(e.get("bold")){const e=Mk(this.editor,"bold");Tk(this.editor,this,/(\*\*)([^*]+)(\*\*)$/g,e);Tk(this.editor,this,/(__)([^_]+)(__)$/g,e)}if(e.get("italic")){const e=Mk(this.editor,"italic");Tk(this.editor,this,/(?:^|[^*])(\*)([^*_]+)(\*)$/g,e);Tk(this.editor,this,/(?:^|[^_])(_)([^_]+)(_)$/g,e)}if(e.get("code")){const e=Mk(this.editor,"code");Tk(this.editor,this,/(`)([^`]+)(`)$/g,e)}if(e.get("strikethrough")){const e=Mk(this.editor,"strikethrough");Tk(this.editor,this,/(~~)([^~]+)(~~)$/g,e)}}_addHeadingAutoformats(){const e=this.editor.commands.get("heading");if(e){e.modelElements.filter(e=>e.match(/^heading[1-6]$/)).forEach(t=>{const i=t[7];const n=new RegExp(`^(#{${i}})\\s$`);Ck(this.editor,this,n,()=>{if(!e.isEnabled||e.value===t){return false}this.editor.execute("heading",{value:t})})})}}_addBlockQuoteAutoformats(){if(this.editor.commands.get("blockQuote")){Ck(this.editor,this,/^>\s$/,"blockQuote")}}_addCodeBlockAutoformats(){if(this.editor.commands.get("codeBlock")){Ck(this.editor,this,/^```$/,"codeBlock")}}}function Mk(e,t){return(i,n)=>{const o=e.commands.get(t);if(!o.isEnabled){return false}const r=e.model.schema.getValidRanges(n,t);for(const e of r){i.setAttribute(t,true,e)}i.removeSelectionAttribute(t)}}function Ik(e,t){let i=e.start;const n=Array.from(e.getItems()).reduce((e,n)=>{if(!(n.is("$text")||n.is("$textProxy"))){i=t.createPositionAfter(n);return""}return e+n.data},"");return{text:n,range:t.createRange(i,e.end)}}class Lk{constructor(e,t){this.model=e;this.testCallback=t;this.hasMatch=false;this.set("isEnabled",true);this.on("change:isEnabled",()=>{if(this.isEnabled){this._startListening()}else{this.stopListening(e.document.selection);this.stopListening(e.document)}});this._startListening()}_startListening(){const e=this.model;const t=e.document;this.listenTo(t.selection,"change:range",(e,{directChange:i})=>{if(!i){return}if(!t.selection.isCollapsed){if(this.hasMatch){this.fire("unmatched");this.hasMatch=false}return}this._evaluateTextBeforeSelection("selection")});this.listenTo(t,"change:data",(e,t)=>{if(t.type=="transparent"){return}this._evaluateTextBeforeSelection("data",{batch:t})})}_evaluateTextBeforeSelection(e,t={}){const i=this.model;const n=i.document;const o=n.selection;const r=i.createRange(i.createPositionAt(o.focus.parent,0),o.focus);const{text:s,range:a}=Ik(r,i);const c=this.testCallback(s);if(!c&&this.hasMatch){this.fire("unmatched")}this.hasMatch=!!c;if(c){const i=Object.assign(t,{text:s,range:a});if(typeof c=="object"){Object.assign(i,c)}this.fire(`matched:${e}`,i)}}}ys(Lk,Zc);const Nk=4;const zk=new RegExp("(^|\\s)"+"("+"("+"(?:(?:(?:https?|ftp):)?\\/\\/)"+"(?:\\S+(?::\\S*)?@)?"+"(?:"+"(?![-_])(?:[-\\w\\u00a1-\\uffff]{0,63}[^-_]\\.)+"+"(?:[a-z\\u00a1-\\uffff]{2,})"+")"+"(?::\\d{2,5})?"+"(?:[/?#]\\S*)?"+")"+"|"+"("+"(www.|(\\S+@))"+"((?![-_])(?:[-\\w\\u00a1-\\uffff]{0,63}[^-_]\\.))+"+"(?:[a-z\\u00a1-\\uffff]{2,})"+")"+")$","i");const Rk=2;const Ok=/^[\S]+@((?![-_])(?:[-\w\u00a1-\uffff]{0,63}[^-_]\.))+(?:[a-z\u00a1-\uffff]{2,})$/i;class Vk extends ok{static get pluginName(){return"AutoLink"}init(){const e=this.editor;const t=e.model.document.selection;t.on("change:range",()=>{this.isEnabled=!t.anchor.parent.is("element","codeBlock")});this._enableTypingHandling()}afterInit(){this._enableEnterHandling();this._enableShiftEnterHandling()}_enableTypingHandling(){const e=this.editor;const t=new Lk(e.model,e=>{if(!Dk(e)){return}const t=Bk(e.substr(0,e.length-1));if(t){return{url:t}}});const i=e.plugins.get("Input");t.on("matched:data",(t,n)=>{const{batch:o,range:r,url:s}=n;if(!i.isInput(o)){return}const a=r.end.getShiftedBy(-1);const c=a.getShiftedBy(-s.length);const l=e.model.createRange(c,a);this._applyAutoLink(s,l)});t.bind("isEnabled").to(this)}_enableEnterHandling(){const e=this.editor;const t=e.model;const i=e.commands.get("enter");if(!i){return}i.on("execute",()=>{const e=t.document.selection.getFirstPosition();const i=t.createRange(t.createPositionAt(e.parent.previousSibling,0),t.createPositionAt(e.parent.previousSibling,"end"));this._checkAndApplyAutoLinkOnRange(i)})}_enableShiftEnterHandling(){const e=this.editor;const t=e.model;const i=e.commands.get("shiftEnter");if(!i){return}i.on("execute",()=>{const e=t.document.selection.getFirstPosition();const i=t.createRange(t.createPositionAt(e.parent,0),e.getShiftedBy(-1));this._checkAndApplyAutoLinkOnRange(i)})}_checkAndApplyAutoLinkOnRange(e){const t=this.editor.model;const{text:i,range:n}=Ik(e,t);const o=Bk(i);if(o){const e=t.createRange(n.end.getShiftedBy(-o.length),n.end);this._applyAutoLink(o,e)}}_applyAutoLink(e,t){const i=this.editor.model;if(!this.isEnabled||!Fk(t,i)){return}i.enqueueChange(i=>{const n=jk(e)?`mailto:${e}`:e;i.setAttribute("linkHref",n,t)})}}function Dk(e){return e.length>Nk&&e[e.length-1]===" "&&e[e.length-2]!==" "}function Bk(e){const t=zk.exec(e);return t?t[Rk]:null}function jk(e){return Ok.exec(e)}function Fk(e,t){return t.schema.checkAttributeInSelection(t.createSelection(e),"linkHref")}class Hk extends sk{refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(e={}){const t=this.editor.model;const i=t.schema;const n=t.document.selection;const o=Array.from(n.getSelectedBlocks());const r=e.forceValue===undefined?!this.value:e.forceValue;t.change(e=>{if(!r){this._removeQuote(e,o.filter(Uk))}else{const t=o.filter(e=>Uk(e)||qk(i,e));this._applyQuote(e,t)}})}_getValue(){const e=this.editor.model.document.selection;const t=ck(e.getSelectedBlocks());return!!(t&&Uk(t))}_checkEnabled(){if(this.value){return true}const e=this.editor.model.document.selection;const t=this.editor.model.schema;const i=ck(e.getSelectedBlocks());if(!i){return false}return qk(t,i)}_removeQuote(e,t){Wk(e,t).reverse().forEach(t=>{if(t.start.isAtStart&&t.end.isAtEnd){e.unwrap(t.start.parent);return}if(t.start.isAtStart){const i=e.createPositionBefore(t.start.parent);e.move(t,i);return}if(!t.end.isAtEnd){e.split(t.end)}const i=e.createPositionAfter(t.end.parent);e.move(t,i)})}_applyQuote(e,t){const i=[];Wk(e,t).reverse().forEach(t=>{let n=Uk(t.start);if(!n){n=e.createElement("blockQuote");e.wrap(t,n)}i.push(n)});i.reverse().reduce((t,i)=>{if(t.nextSibling==i){e.merge(e.createPositionAfter(t));return t}return i})}}function Uk(e){return e.parent.name=="blockQuote"?e.parent:null}function Wk(e,t){let i;let n=0;const o=[];while(n{if(e.endsWith("blockQuote")&&t.name=="blockQuote"){return false}});e.conversion.elementToElement({model:"blockQuote",view:"blockquote"});e.model.document.registerPostFixer(i=>{const n=e.model.document.differ.getChanges();for(const e of n){if(e.type=="insert"){const n=e.position.nodeAfter;if(!n){continue}if(n.is("element","blockQuote")&&n.isEmpty){i.remove(n);return true}else if(n.is("element","blockQuote")&&!t.checkChild(e.position,n)){i.unwrap(n);return true}else if(n.is("element")){const e=i.createRangeIn(n);for(const n of e.getItems()){if(n.is("element","blockQuote")&&!t.checkChild(i.createPositionBefore(n),n)){i.unwrap(n);return true}}}}else if(e.type=="remove"){const t=e.position.parent;if(t.is("element","blockQuote")&&t.isEmpty){i.remove(t);return true}}}return false})}afterInit(){const e=this.editor;const t=e.commands.get("blockQuote");this.listenTo(this.editor.editing.view.document,"enter",(e,i)=>{const n=this.editor.model.document;const o=n.selection.getLastPosition().parent;if(n.selection.isCollapsed&&o.isEmpty&&t.value){this.editor.execute("blockQuote");this.editor.editing.view.scrollToTheSelection();i.preventDefault();e.stop()}})}}var Gk='';var Kk=i(46);class Yk extends ok{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("blockQuote",i=>{const n=e.commands.get("blockQuote");const o=new Ew(i);o.set({label:t("Block quote"),icon:Gk,tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute("blockQuote");e.editing.view.focus()});return o})}}class Zk extends ok{static get requires(){return[$k,Yk]}static get pluginName(){return"BlockQuote"}}class Qk extends sk{constructor(e,t){super(e);this.attributeKey=t}refresh(){const e=this.editor.model;const t=e.document;this.value=this._getValueFromFirstAllowedNode();this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){const t=this.editor.model;const i=t.document;const n=i.selection;const o=e.forceValue===undefined?!this.value:e.forceValue;t.change(e=>{if(n.isCollapsed){if(o){e.setSelectionAttribute(this.attributeKey,true)}else{e.removeSelectionAttribute(this.attributeKey)}}else{const i=t.schema.getValidRanges(n.getRanges(),this.attributeKey);for(const t of i){if(o){e.setAttribute(this.attributeKey,o,t)}else{e.removeAttribute(this.attributeKey,t)}}}})}_getValueFromFirstAllowedNode(){const e=this.editor.model;const t=e.schema;const i=e.document.selection;if(i.isCollapsed){return i.hasAttribute(this.attributeKey)}for(const e of i.getRanges()){for(const i of e.getItems()){if(t.checkAttribute(i,this.attributeKey)){return i.hasAttribute(this.attributeKey)}}}return false}}const Jk="bold";class Xk extends ok{static get pluginName(){return"BoldEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:Jk});e.model.schema.setAttributeProperties(Jk,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:Jk,view:"strong",upcastAlso:["b",e=>{const t=e.getStyle("font-weight");if(!t){return null}if(t=="bold"||Number(t)>=600){return{name:true,styles:["font-weight"]}}}]});e.commands.add(Jk,new Qk(e,Jk));e.keystrokes.set("CTRL+B",Jk)}}var e_='';const t_="bold";class i_ extends ok{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(t_,i=>{const n=e.commands.get(t_);const o=new Ew(i);o.set({label:t("Bold"),icon:e_,keystroke:"CTRL+B",tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(t_);e.editing.view.focus()});return o})}}class n_ extends ok{static get requires(){return[Xk,i_]}static get pluginName(){return"Bold"}}class o_ extends ok{static get pluginName(){return"TwoStepCaretMovement"}constructor(e){super(e);this.attributes=new Set;this._overrideUid=null}init(){const e=this.editor;const t=e.model;const i=e.editing.view;const n=e.locale;const o=t.document.selection;this.listenTo(i.document,"keydown",(e,t)=>{if(!o.isCollapsed){return}if(t.shiftKey||t.altKey||t.ctrlKey){return}const i=t.keyCode==zl.arrowright;const r=t.keyCode==zl.arrowleft;if(!i&&!r){return}const s=n.contentLanguageDirection;let a=false;if(s==="ltr"&&i||s==="rtl"&&r){a=this._handleForwardMovement(t)}else{a=this._handleBackwardMovement(t)}if(a===true){e.stop()}},{priority:os.get("high")+1});this._isNextGravityRestorationSkipped=false;this.listenTo(o,"change:range",(e,t)=>{if(this._isNextGravityRestorationSkipped){this._isNextGravityRestorationSkipped=false;return}if(!this._isGravityOverridden){return}if(!t.directChange&&l_(o.getFirstPosition(),this.attributes)){return}this._restoreGravity()})}registerAttribute(e){this.attributes.add(e)}_handleForwardMovement(e){const t=this.attributes;const i=this.editor.model;const n=i.document.selection;const o=n.getFirstPosition();if(this._isGravityOverridden){return false}if(o.isAtStart&&r_(n,t)){return false}if(l_(o,t)){a_(e);this._overrideGravity();return true}}_handleBackwardMovement(e){const t=this.attributes;const i=this.editor.model;const n=i.document.selection;const o=n.getFirstPosition();if(this._isGravityOverridden){a_(e);this._restoreGravity();s_(i,t,o);return true}else{if(o.isAtStart){if(r_(n,t)){a_(e);s_(i,t,o);return true}return false}if(c_(o,t)){if(o.isAtEnd&&!r_(n,t)&&l_(o,t)){a_(e);s_(i,t,o);return true}this._isNextGravityRestorationSkipped=true;this._overrideGravity();return false}}}get _isGravityOverridden(){return!!this._overrideUid}_overrideGravity(){this._overrideUid=this.editor.model.change(e=>e.overrideSelectionGravity())}_restoreGravity(){this.editor.model.change(e=>{e.restoreSelectionGravity(this._overrideUid);this._overrideUid=null})}}function r_(e,t){for(const i of t){if(e.hasAttribute(i)){return true}}return false}function s_(e,t,i){const n=i.nodeBefore;e.change(e=>{if(n){e.setSelectionAttribute(n.getAttributes())}else{e.removeSelectionAttribute(t)}})}function a_(e){e.preventDefault()}function c_(e,t){const i=e.getShiftedBy(-1);return l_(i,t)}function l_(e,t){const{nodeBefore:i,nodeAfter:n}=e;for(const e of t){const t=i?i.getAttribute(e):undefined;const o=n?n.getAttribute(e):undefined;if(o!==t){return true}}return false}function d_(e,t,i,n){return n.createRange(u_(e,t,i,true,n),u_(e,t,i,false,n))}function u_(e,t,i,n,o){let r=e.textNode||(n?e.nodeBefore:e.nodeAfter);let s=null;while(r&&r.getAttribute(t)==i){s=r;r=n?r.previousSibling:r.nextSibling}return s?o.createPositionAt(s,n?"before":"after"):e}function h_(e,t,i,n){const o=e.editing.view;const r=new Set;o.document.registerPostFixer(o=>{const s=e.model.document.selection;let a=false;if(s.hasAttribute(t)){const c=d_(s.getFirstPosition(),t,s.getAttribute(t),e.model);const l=e.editing.mapper.toViewRange(c);for(const e of l.getItems()){if(e.is("element",i)&&!e.hasClass(n)){o.addClass(n,e);r.add(e);a=true}}}return a});e.conversion.for("editingDowncast").add(e=>{e.on("insert",t,{priority:"highest"});e.on("remove",t,{priority:"highest"});e.on("attribute",t,{priority:"highest"});e.on("selection",t,{priority:"highest"});function t(){o.change(e=>{for(const t of r.values()){e.removeClass(n,t);r.delete(t)}})}})}const f_="code";const m_="ck-code_selected";class g_ extends ok{static get pluginName(){return"CodeEditing"}static get requires(){return[o_]}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:f_});e.model.schema.setAttributeProperties(f_,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:f_,view:"code",upcastAlso:{styles:{"word-wrap":"break-word"}}});e.commands.add(f_,new Qk(e,f_));e.plugins.get(o_).registerAttribute(f_);h_(e,f_,"code",m_)}}var p_='';var b_=i(11);const w_="code";class k_ extends ok{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(w_,i=>{const n=e.commands.get(w_);const o=new Ew(i);o.set({label:t("Code"),icon:p_,tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(w_);e.editing.view.focus()});return o})}}class __ extends ok{static get requires(){return[g_,k_]}static get pluginName(){return"Code"}}function*v_(e,t){for(const i of t){if(i&&e.getAttributeProperties(i[0]).copyOnEnter){yield i}}}class y_ extends sk{execute(){const e=this.editor.model;const t=e.document;e.change(i=>{A_(e,i,t.selection);this.fire("afterExecute",{writer:i})})}refresh(){const e=this.editor.model;const t=e.document;this.isEnabled=x_(e.schema,t.selection)}}function x_(e,t){if(t.rangeCount>1){return false}const i=t.anchor;if(!i||!e.checkChild(i,"softBreak")){return false}const n=t.getFirstRange();const o=n.start.parent;const r=n.end.parent;if((T_(o,e)||T_(r,e))&&o!==r){return false}return true}function A_(e,t,i){const n=i.isCollapsed;const o=i.getFirstRange();const r=o.start.parent;const s=o.end.parent;const a=r==s;if(n){const n=v_(e.schema,i.getAttributes());C_(e,t,o.end);t.removeSelectionAttribute(i.getAttributeKeys());t.setSelectionAttribute(n)}else{const n=!(o.start.isAtStart&&o.end.isAtEnd);e.deleteContent(i,{leaveUnmerged:n});if(a){C_(e,t,i.focus)}else{if(n){t.setSelection(s,0)}}}}function C_(e,t,i){const n=t.createElement("softBreak");e.insertContent(n,i);t.setSelection(n,"after")}function T_(e,t){if(e.is("rootElement")){return false}return t.isLimit(e)||T_(e.parent,t)}class S_ extends Jd{constructor(e){super(e);const t=this.document;t.on("keydown",(e,i)=>{if(this.isEnabled&&i.keyCode==zl.enter){let n;t.once("enter",e=>n=e,{priority:"highest"});t.fire("enter",new Xu(t,i.domEvent,{isSoft:i.shiftKey}));if(n&&n.stop.called){e.stop()}}})}observe(){}}class E_ extends ok{static get pluginName(){return"ShiftEnter"}init(){const e=this.editor;const t=e.model.schema;const i=e.conversion;const n=e.editing.view;const o=n.document;t.register("softBreak",{allowWhere:"$text",isInline:true});i.for("upcast").elementToElement({model:"softBreak",view:"br"});i.for("downcast").elementToElement({model:"softBreak",view:(e,{writer:t})=>t.createEmptyElement("br")});n.addObserver(S_);e.commands.add("shiftEnter",new y_(e));this.listenTo(o,"enter",(t,i)=>{i.preventDefault();if(!i.isSoft){return}e.execute("shiftEnter");n.scrollToTheSelection()},{priority:"low"})}}function P_(e){const t=e.t;const i=e.config.get("codeBlock.languages");for(const e of i){if(e.label==="Plain text"){e.label=t("Plain text")}if(e.class===undefined){e.class=`language-${e.language}`}}return i}function M_(e,t,i){const n={};for(const o of e){if(t==="class"){n[o[t].split(" ").shift()]=o[i]}else{n[o[t]]=o[i]}}return n}function I_(e){return e.data.match(/^(\s*)/)[0]}function L_(e,t){const i=e.createDocumentFragment();const n=t.split("\n").map(t=>e.createText(t));const o=n[n.length-1];for(const t of n){e.append(t,i);if(t!==o){e.appendElement("softBreak",i)}}return i}function N_(e){const t=e.document.selection;const i=[];if(t.isCollapsed){i.push(t.anchor)}else{const n=t.getFirstRange().getWalker({ignoreElementEnd:true,direction:"backward"});for(const{item:t}of n){if(t.is("$textProxy")&&t.parent.is("element","codeBlock")){const n=I_(t.textNode);const{parent:o,startOffset:r}=t.textNode;const s=e.createPositionAt(o,r+n.length);i.push(s)}}}return i}function z_(e){const t=ck(e.getSelectedBlocks());return t&&t.is("element","codeBlock")}class R_ extends sk{refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(e={}){const t=this.editor;const i=t.model;const n=i.document.selection;const o=P_(t);const r=o[0];const s=Array.from(n.getSelectedBlocks());const a=e.forceValue===undefined?!this.value:e.forceValue;const c=e.language||r.language;i.change(e=>{if(a){this._applyCodeBlock(e,s,c)}else{this._removeCodeBlock(e,s)}})}_getValue(){const e=this.editor.model.document.selection;const t=ck(e.getSelectedBlocks());const i=!!(t&&t.is("element","codeBlock"));return i?t.getAttribute("language"):false}_checkEnabled(){if(this.value){return true}const e=this.editor.model.document.selection;const t=this.editor.model.schema;const i=ck(e.getSelectedBlocks());if(!i){return false}return O_(t,i)}_applyCodeBlock(e,t,i){const n=this.editor.model.schema;const o=t.filter(e=>O_(n,e));for(const t of o){e.rename(t,"codeBlock");e.setAttribute("language",i,t);n.removeDisallowedAttributes([t],e)}o.reverse().forEach((t,i)=>{const n=o[i+1];if(t.previousSibling===n){e.appendElement("softBreak",n);e.merge(e.createPositionBefore(t))}})}_removeCodeBlock(e,t){const i=t.filter(e=>e.is("element","codeBlock"));for(const t of i){const i=e.createRangeOn(t);for(const t of Array.from(i.getItems()).reverse()){if(t.is("element","softBreak")&&t.parent.is("element","codeBlock")){const{position:i}=e.split(e.createPositionBefore(t));e.rename(i.nodeAfter,"paragraph");e.removeAttribute("language",i.nodeAfter);e.remove(t)}}e.rename(t,"paragraph");e.removeAttribute("language",t)}}}function O_(e,t){if(t.is("rootElement")||e.isLimit(t)){return false}return e.checkChild(t.parent,"codeBlock")}class V_ extends sk{constructor(e){super(e);this._indentSequence=e.config.get("codeBlock.indentSequence")}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor;const t=e.model;t.change(e=>{const i=N_(t);for(const t of i){e.insertText(this._indentSequence,t)}})}_checkEnabled(){if(!this._indentSequence){return false}return z_(this.editor.model.document.selection)}}class D_ extends sk{constructor(e){super(e);this._indentSequence=e.config.get("codeBlock.indentSequence")}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor;const t=e.model;t.change(e=>{const i=N_(t);for(const t of i){const i=B_(this.editor.model,t,this._indentSequence);if(i){e.remove(i)}}})}_checkEnabled(){if(!this._indentSequence){return false}const e=this.editor.model;if(!z_(e.document.selection)){return false}return N_(e).some(t=>B_(e,t,this._indentSequence))}}function B_(e,t,i){const n=j_(t);if(!n){return null}const o=I_(n);const r=o.lastIndexOf(i);if(r+i.length!==o.length){return null}if(r===-1){return null}const{parent:s,startOffset:a}=n;return e.createRange(e.createPositionAt(s,a+r),e.createPositionAt(s,a+r+i.length))}function j_(e){let t=e.parent.getChild(e.index);if(!t||t.is("element","softBreak")){t=e.nodeBefore}if(!t||t.is("element","softBreak")){return null}return t}function F_(e,t,i=false){const n=M_(t,"language","class");const o=M_(t,"language","label");return(t,r,s)=>{const{writer:a,mapper:c,consumable:l}=s;if(!l.consume(r.item,"insert")){return}const d=r.item.getAttribute("language");const u=c.toViewPosition(e.createPositionBefore(r.item));const h={};if(i){h["data-language"]=o[d];h.spellcheck="false"}const f=a.createContainerElement("pre",h);const m=a.createContainerElement("code",{class:n[d]||null});a.insert(a.createPositionAt(f,0),m);a.insert(u,f);c.bindElements(r.item,m)}}function H_(e){return(t,i,n)=>{if(i.item.parent.name!=="codeBlock"){return}const{writer:o,mapper:r,consumable:s}=n;if(!s.consume(i.item,"insert")){return}const a=r.toViewPosition(e.createPositionBefore(i.item));o.insert(a,o.createText("\n"))}}function U_(e,t){const i=M_(t,"class","language");const n=t[0].language;return(t,o,r)=>{const s=o.viewItem;const a=s.getChild(0);if(!a||!a.is("element","code")){return}const{consumable:c,writer:l}=r;if(!c.test(s,{name:true})||!c.test(a,{name:true})){return}const d=l.createElement("codeBlock");const u=[...a.getClassNames()];if(!u.length){u.push("")}for(const e of u){const t=i[e];if(t){l.setAttribute("language",t,d);break}}if(!d.hasAttribute("language")){l.setAttribute("language",n,d)}const h=[...e.createRangeIn(a)].filter(e=>e.type==="text").map(({item:e})=>e.data).join("");const f=L_(l,h);l.append(f,d);if(!r.safeInsert(d,o.modelCursor)){return}c.consume(s,{name:true});c.consume(a,{name:true});r.updateConversionResult(d,o)}}const W_="paragraph";class q_ extends ok{static get pluginName(){return"CodeBlockEditing"}static get requires(){return[E_]}constructor(e){super(e);e.config.define("codeBlock",{languages:[{language:"plaintext",label:"Plain text"},{language:"c",label:"C"},{language:"cs",label:"C#"},{language:"cpp",label:"C++"},{language:"css",label:"CSS"},{language:"diff",label:"Diff"},{language:"html",label:"HTML"},{language:"java",label:"Java"},{language:"javascript",label:"JavaScript"},{language:"php",label:"PHP"},{language:"python",label:"Python"},{language:"ruby",label:"Ruby"},{language:"typescript",label:"TypeScript"},{language:"xml",label:"XML"}],indentSequence:"\t"})}init(){const e=this.editor;const t=e.model.schema;const i=e.model;const n=P_(e);e.commands.add("codeBlock",new R_(e));e.commands.add("indentCodeBlock",new V_(e));e.commands.add("outdentCodeBlock",new D_(e));const o=e=>(t,i)=>{const n=this.editor.commands.get(e);if(n.isEnabled){this.editor.execute(e);i()}};e.keystrokes.set("Tab",o("indentCodeBlock"));e.keystrokes.set("Shift+Tab",o("outdentCodeBlock"));t.register("codeBlock",{allowWhere:"$block",isBlock:true,allowAttributes:["language"]});t.extend("$text",{allowIn:"codeBlock"});t.addAttributeCheck(e=>{if(e.endsWith("codeBlock $text")){return false}});e.editing.downcastDispatcher.on("insert:codeBlock",F_(i,n,true));e.data.downcastDispatcher.on("insert:codeBlock",F_(i,n));e.data.downcastDispatcher.on("insert:softBreak",H_(i),{priority:"high"});e.data.upcastDispatcher.on("element:pre",U_(e.editing.view,n));this.listenTo(e.editing.view.document,"clipboardInput",(e,t)=>{const n=i.document.selection;if(!n.anchor.parent.is("element","codeBlock")){return}const o=t.dataTransfer.getData("text/plain");i.change(t=>{i.insertContent(L_(t,o),n);e.stop()})});this.listenTo(i,"getSelectedContent",(e,[n])=>{const o=n.anchor;if(n.isCollapsed||!o.parent.is("element","codeBlock")||!o.hasSameParentAs(n.focus)){return}i.change(i=>{const r=e.return;if(r.childCount>1||n.containsEntireContent(o.parent)){const t=i.createElement("codeBlock",o.parent.getAttributes());i.append(r,t);const n=i.createDocumentFragment();i.append(t,n);e.return=n}else{const e=r.getChild(0);if(t.checkAttribute(e,"code")){i.setAttribute("code",true,e)}}})})}afterInit(){const e=this.editor;const t=e.commands;const i=t.get("indent");const n=t.get("outdent");if(i){i.registerChildCommand(t.get("indentCodeBlock"))}if(n){n.registerChildCommand(t.get("outdentCodeBlock"))}this.listenTo(e.editing.view.document,"enter",(t,i)=>{const n=e.model.document.selection.getLastPosition().parent;if(!n.is("element","codeBlock")){return}G_(e,i.isSoft)||K_(e,i.isSoft)||$_(e);i.preventDefault();t.stop()})}}function $_(e){const t=e.model;const i=t.document;const n=i.selection.getLastPosition();const o=n.nodeBefore||n.textNode;let r;if(o&&o.is("$text")){r=I_(o)}e.model.change(t=>{e.execute("shiftEnter");if(r){t.insertText(r,i.selection.anchor)}})}function G_(e,t){const i=e.model;const n=i.document;const o=e.editing.view;const r=n.selection.getLastPosition();const s=r.nodeAfter;if(t||!n.selection.isCollapsed||!r.isAtStart){return false}if(!s||!s.is("element","softBreak")){return false}e.model.change(t=>{e.execute("enter");const i=n.selection.anchor.parent.previousSibling;t.rename(i,W_);t.setSelection(i,"in");e.model.schema.removeDisallowedAttributes([i],t);t.remove(s)});o.scrollToTheSelection();return true}function K_(e,t){const i=e.model;const n=i.document;const o=e.editing.view;const r=n.selection.getLastPosition();const s=r.nodeBefore;let a;if(t||!n.selection.isCollapsed||!r.isAtEnd||!s){return false}if(s.is("element","softBreak")){a=i.createRangeOn(s)}else if(s.is("$text")&&!s.data.match(/\S/)&&s.previousSibling&&s.previousSibling.is("element","softBreak")){a=i.createRange(i.createPositionBefore(s.previousSibling),i.createPositionAfter(s))}else{return false}e.model.change(t=>{t.remove(a);e.execute("enter");const i=n.selection.anchor.parent;t.rename(i,W_);e.model.schema.removeDisallowedAttributes([i],t)});o.scrollToTheSelection();return true}class Y_{constructor(e,t){if(t){qc(this,t)}if(e){this.set(e)}}}ys(Y_,Zc);var Z_=i(49);class Q_ extends Hb{constructor(e){super(e);const t=this.bindTemplate;this.set("icon");this.set("isEnabled",true);this.set("isOn",false);this.set("isToggleable",false);this.set("isVisible",true);this.set("keystroke");this.set("label");this.set("tabindex",-1);this.set("tooltip");this.set("tooltipPosition","s");this.set("type","button");this.set("withText",false);this.children=this.createCollection();this.actionView=this._createActionView();this.arrowView=this._createArrowView();this.keystrokes=new Vp;this.focusTracker=new Zp;this.setTemplate({tag:"div",attributes:{class:["ck","ck-splitbutton",t.if("isVisible","ck-hidden",e=>!e),this.arrowView.bindTemplate.if("isOn","ck-splitbutton_open")]},children:this.children})}render(){super.render();this.children.add(this.actionView);this.children.add(this.arrowView);this.focusTracker.add(this.actionView.element);this.focusTracker.add(this.arrowView.element);this.keystrokes.listenTo(this.element);this.keystrokes.set("arrowright",(e,t)=>{if(this.focusTracker.focusedElement===this.actionView.element){this.arrowView.focus();t()}});this.keystrokes.set("arrowleft",(e,t)=>{if(this.focusTracker.focusedElement===this.arrowView.element){this.actionView.focus();t()}})}focus(){this.actionView.focus()}_createActionView(){const e=new Ew;e.bind("icon","isEnabled","isOn","isToggleable","keystroke","label","tabindex","tooltip","tooltipPosition","type","withText").to(this);e.extendTemplate({attributes:{class:"ck-splitbutton__action"}});e.delegate("execute").to(this);return e}_createArrowView(){const e=new Ew;const t=e.bindTemplate;e.icon=Pw;e.extendTemplate({attributes:{class:"ck-splitbutton__arrow","aria-haspopup":true,"aria-expanded":t.to("isOn",e=>String(e))}});e.bind("isEnabled").to(this);e.delegate("execute").to(this,"open");return e}}var J_='';var X_=i(51);class ev extends ok{init(){const e=this.editor;const t=e.t;const i=e.ui.componentFactory;const n=P_(e);const o=n[0];i.add("codeBlock",i=>{const r=e.commands.get("codeBlock");const s=jw(i,Q_);const a=s.buttonView;a.set({label:t("Insert code block"),tooltip:true,icon:J_,isToggleable:true});a.bind("isOn").to(r,"value",e=>!!e);a.on("execute",()=>{e.execute("codeBlock",{language:o.language});e.editing.view.focus()});s.on("execute",t=>{e.execute("codeBlock",{language:t.source._codeBlockLanguage,forceValue:true});e.editing.view.focus()});s.class="ck-code-block-dropdown";s.bind("isEnabled").to(r);Hw(s,this._getLanguageListItemDefinitions(n));return s})}_getLanguageListItemDefinitions(e){const t=this.editor;const i=t.commands.get("codeBlock");const n=new xs;for(const t of e){const e={type:"button",model:new Y_({_codeBlockLanguage:t.language,label:t.label,withText:true})};e.model.bind("isOn").to(i,"value",t=>t===e.model._codeBlockLanguage);n.add(e)}return n}}class tv extends ok{static get requires(){return[q_,ev]}static get pluginName(){return"CodeBlock"}}class iv{constructor(e){this.files=nv(e);this._native=e}get types(){return this._native.types}getData(e){return this._native.getData(e)}setData(e,t){this._native.setData(e,t)}}function nv(e){const t=e.files?Array.from(e.files):[];const i=e.items?Array.from(e.items):[];if(t.length){return t}return i.filter(e=>e.kind==="file").map(e=>e.getAsFile())}class ov extends eh{constructor(e){super(e);const t=this.document;this.domEventType=["paste","copy","cut","drop","dragover"];this.listenTo(t,"paste",i,{priority:"low"});this.listenTo(t,"drop",i,{priority:"low"});function i(e,i){i.preventDefault();const n=i.dropRange?[i.dropRange]:Array.from(t.selection.getRanges());const o=new es(t,"clipboardInput");t.fire(o,{dataTransfer:i.dataTransfer,targetRanges:n});if(o.stop.called){i.stopPropagation()}}}onDomEvent(e){const t={dataTransfer:new iv(e.clipboardData?e.clipboardData:e.dataTransfer)};if(e.type=="drop"){t.dropRange=rv(this.view,e)}this.fire(e.type,e,t)}}function rv(e,t){const i=t.target.ownerDocument;const n=t.clientX;const o=t.clientY;let r;if(i.caretRangeFromPoint&&i.caretRangeFromPoint(n,o)){r=i.caretRangeFromPoint(n,o)}else if(t.rangeParent){r=i.createRange();r.setStart(t.rangeParent,t.rangeOffset);r.collapse(true)}if(r){return e.domConverter.domRangeToView(r)}else{return e.document.selection.getFirstRange()}}function sv(e){e=e.replace(//g,">").replace(/\n/g,"

    ").replace(/^\s/," ").replace(/\s$/," ").replace(/\s\s/g,"  ");if(e.indexOf("

    ")>-1){e=`

    ${e}

    `}return e}function av(e){return e.replace(/(\s+)<\/span>/g,(e,t)=>{if(t.length==1){return" "}return t})}const cv=["figcaption","li"];function lv(e){let t="";if(e.is("$text")||e.is("$textProxy")){t=e.data}else if(e.is("element","img")&&e.hasAttribute("alt")){t=e.getAttribute("alt")}else{let i=null;for(const n of e.getChildren()){const e=lv(n);if(i&&(i.is("containerElement")||n.is("containerElement"))){if(cv.includes(i.name)||cv.includes(n.name)){t+="\n"}else{t+="\n\n"}}t+=e;i=n}}return t}class dv extends ok{static get pluginName(){return"Clipboard"}init(){const e=this.editor;const t=e.model.document;const i=e.editing.view;const n=i.document;this._htmlDataProcessor=new Gp(n);i.addObserver(ov);this.listenTo(n,"clipboardInput",t=>{if(e.isReadOnly){t.stop()}},{priority:"highest"});this.listenTo(n,"clipboardInput",(e,t)=>{const n=t.dataTransfer;let o="";if(n.getData("text/html")){o=av(n.getData("text/html"))}else if(n.getData("text/plain")){o=sv(n.getData("text/plain"))}o=this._htmlDataProcessor.toView(o);const r=new es(this,"inputTransformation");this.fire(r,{content:o,dataTransfer:n});if(r.stop.called){e.stop()}i.scrollToTheSelection()},{priority:"low"});this.listenTo(this,"inputTransformation",(e,i)=>{if(!i.content.isEmpty){const n=this.editor.data;const o=this.editor.model;const r=n.toModel(i.content,"$clipboardHolder");if(r.childCount==0){return}if(uv(r)){const e=r.getChild(0);o.change(i=>{i.setAttributes(t.selection.getAttributes(),e)})}o.insertContent(r);e.stop()}},{priority:"low"});function o(i,o){const r=o.dataTransfer;o.preventDefault();const s=e.data.toView(e.model.getSelectedContent(t.selection));n.fire("clipboardOutput",{dataTransfer:r,content:s,method:i.name})}this.listenTo(n,"copy",o,{priority:"low"});this.listenTo(n,"cut",(t,i)=>{if(e.isReadOnly){i.preventDefault()}else{o(t,i)}},{priority:"low"});this.listenTo(n,"clipboardOutput",(i,n)=>{if(!n.content.isEmpty){n.dataTransfer.setData("text/html",this._htmlDataProcessor.toData(n.content));n.dataTransfer.setData("text/plain",lv(n.content))}if(n.method=="cut"){e.model.deleteContent(t.selection)}},{priority:"low"})}}function uv(e){if(e.childCount>1){return false}const t=e.getChild(0);return[...t.getAttributeKeys()].length==0}class hv extends sk{execute(){const e=this.editor.model;const t=e.document;e.change(i=>{fv(this.editor.model,i,t.selection,e.schema);this.fire("afterExecute",{writer:i})})}}function fv(e,t,i,n){const o=i.isCollapsed;const r=i.getFirstRange();const s=r.start.parent;const a=r.end.parent;if(n.isLimit(s)||n.isLimit(a)){if(!o&&s==a){e.deleteContent(i)}return}if(o){const e=v_(t.model.schema,i.getAttributes());mv(t,r.start);t.setSelectionAttribute(e)}else{const n=!(r.start.isAtStart&&r.end.isAtEnd);const o=s==a;e.deleteContent(i,{leaveUnmerged:n});if(n){if(o){mv(t,i.focus)}else{t.setSelection(a,0)}}}}function mv(e,t){e.split(t);e.setSelection(t.parent.nextSibling,0)}class gv extends ok{static get pluginName(){return"Enter"}init(){const e=this.editor;const t=e.editing.view;const i=t.document;t.addObserver(S_);e.commands.add("enter",new hv(e));this.listenTo(i,"enter",(i,n)=>{n.preventDefault();if(n.isSoft){return}e.execute("enter");t.scrollToTheSelection()},{priority:"low"})}}class pv extends sk{execute(){const e=this.editor.model;const t=e.document.selection;let i=e.schema.getLimitElement(t);if(t.containsEntireContent(i)||!bv(e.schema,i)){do{i=i.parent;if(!i){return}}while(!bv(e.schema,i))}e.change(e=>{e.setSelection(i,"in")})}}function bv(e,t){return e.isLimit(t)&&(e.checkChild(t,"$text")||e.checkChild(t,"paragraph"))}const wv=Ol("Ctrl+A");class kv extends ok{static get pluginName(){return"SelectAllEditing"}init(){const e=this.editor;const t=e.editing.view;const i=t.document;e.commands.add("selectAll",new pv(e));this.listenTo(i,"keydown",(t,i)=>{if(Rl(i)===wv){e.execute("selectAll");i.preventDefault()}})}}var _v='';class vv extends ok{static get pluginName(){return"SelectAllUI"}init(){const e=this.editor;e.ui.componentFactory.add("selectAll",t=>{const i=e.commands.get("selectAll");const n=new Ew(t);const o=t.t;n.set({label:o("Select all"),icon:_v,keystroke:"Ctrl+A",tooltip:true});n.bind("isOn","isEnabled").to(i,"value","isEnabled");this.listenTo(n,"execute",()=>{e.execute("selectAll");e.editing.view.focus()});return n})}}class yv extends ok{static get requires(){return[kv,vv]}static get pluginName(){return"SelectAll"}}class xv{constructor(e,t=20){this.model=e;this.size=0;this.limit=t;this.isLocked=false;this._changeCallback=(e,t)=>{if(t.type!="transparent"&&t!==this._batch){this._reset(true)}};this._selectionChangeCallback=()=>{this._reset()};this.model.document.on("change",this._changeCallback);this.model.document.selection.on("change:range",this._selectionChangeCallback);this.model.document.selection.on("change:attribute",this._selectionChangeCallback)}get batch(){if(!this._batch){this._batch=this.model.createBatch()}return this._batch}input(e){this.size+=e;if(this.size>=this.limit){this._reset(true)}}lock(){this.isLocked=true}unlock(){this.isLocked=false}destroy(){this.model.document.off("change",this._changeCallback);this.model.document.selection.off("change:range",this._selectionChangeCallback);this.model.document.selection.off("change:attribute",this._selectionChangeCallback)}_reset(e){if(!this.isLocked||e){this._batch=null;this.size=0}}}class Av extends sk{constructor(e,t){super(e);this._buffer=new xv(e.model,t);this._batches=new WeakSet}get buffer(){return this._buffer}destroy(){super.destroy();this._buffer.destroy()}execute(e={}){const t=this.editor.model;const i=t.document;const n=e.text||"";const o=n.length;const r=e.range?t.createSelection(e.range):i.selection;const s=e.resultRange;t.enqueueChange(this._buffer.batch,e=>{this._buffer.lock();this._batches.add(this._buffer.batch);t.deleteContent(r);if(n){t.insertContent(e.createText(n,i.selection.getAttributes()),r)}if(s){e.setSelection(s)}else if(!r.is("documentSelection")){e.setSelection(r)}this._buffer.unlock();this._buffer.input(o)})}}function Cv(e){let t=null;const i=e.model;const n=e.editing.view;const o=e.commands.get("input");if(Tl.isAndroid){n.document.on("beforeinput",(e,t)=>r(t),{priority:"lowest"})}else{n.document.on("keydown",(e,t)=>r(t),{priority:"lowest"})}n.document.on("compositionstart",s,{priority:"lowest"});n.document.on("compositionend",()=>{t=i.createSelection(i.document.selection)},{priority:"lowest"});function r(e){const r=i.document;const s=n.document.isComposing;const c=t&&t.isEqual(r.selection);t=null;if(!o.isEnabled){return}if(Sv(e)||r.selection.isCollapsed){return}if(s&&e.keyCode===229){return}if(!s&&e.keyCode===229&&c){return}a()}function s(){const e=i.document;const t=e.selection.rangeCount===1?e.selection.getFirstRange().isFlat:true;if(e.selection.isCollapsed||t){return}a()}function a(){const e=o.buffer;e.lock();const t=e.batch;o._batches.add(t);i.enqueueChange(t,()=>{i.deleteContent(i.document.selection)});e.unlock()}}const Tv=[Rl("arrowUp"),Rl("arrowRight"),Rl("arrowDown"),Rl("arrowLeft"),9,16,17,18,19,20,27,33,34,35,36,45,91,93,144,145,173,174,175,176,177,178,179,255];for(let e=112;e<=135;e++){Tv.push(e)}function Sv(e){if(e.ctrlKey){return true}return Tv.includes(e.keyCode)}function Ev(e,t){const i=[];let n=0;let o;e.forEach(e=>{if(e=="equal"){r();n++}else if(e=="insert"){if(s("insert")){o.values.push(t[n])}else{r();o={type:"insert",index:n,values:[t[n]]}}n++}else{if(s("delete")){o.howMany++}else{r();o={type:"delete",index:n,howMany:1}}}});r();return i;function r(){if(o){i.push(o);o=null}}function s(e){return o&&o.type==e}}function Pv(e){if(e.length==0){return false}for(const t of e){if(t.type==="children"&&!Mv(t)){return true}}return false}function Mv(e){if(e.newChildren.length-e.oldChildren.length!=1){return}const t=Cd(e.oldChildren,e.newChildren,Iv);const i=Ev(t,e.newChildren);if(i.length>1){return}const n=i[0];if(!(!!n.values[0]&&n.values[0].is("$text"))){return}return n}function Iv(e,t){if(!!e&&e.is("$text")&&!!t&&t.is("$text")){return e.data===t.data}else{return e===t}}function Lv(e){e.editing.view.document.on("mutations",(t,i,n)=>{new Nv(e).handle(i,n)})}class Nv{constructor(e){this.editor=e;this.editing=this.editor.editing}handle(e,t){if(Pv(e)){this._handleContainerChildrenMutations(e,t)}else{for(const i of e){this._handleTextMutation(i,t);this._handleTextNodeInsertion(i)}}}_handleContainerChildrenMutations(e,t){const i=zv(e);if(!i){return}const n=this.editor.editing.view.domConverter;const o=n.mapViewToDom(i);const r=new Hd(this.editor.editing.view.document);const s=this.editor.data.toModel(r.domToView(o)).getChild(0);const a=this.editor.editing.mapper.toModelElement(i);if(!a){return}const c=Array.from(s.getChildren());const l=Array.from(a.getChildren());const d=c[c.length-1];const u=l[l.length-1];const h=d&&d.is("element","softBreak");const f=u&&!u.is("element","softBreak");if(h&&f){c.pop()}const m=this.editor.model.schema;if(!Rv(c,m)||!Rv(l,m)){return}const g=c.map(e=>e.is("$text")?e.data:"@").join("").replace(/\u00A0/g," ");const p=l.map(e=>e.is("$text")?e.data:"@").join("").replace(/\u00A0/g," ");if(p===g){return}const b=Cd(p,g);const{firstChangeAt:w,insertions:k,deletions:_}=Ov(b);let v=null;if(t){v=this.editing.mapper.toModelRange(t.getFirstRange())}const y=g.substr(w,k);const x=this.editor.model.createRange(this.editor.model.createPositionAt(a,w),this.editor.model.createPositionAt(a,w+_));this.editor.execute("input",{text:y,range:x,resultRange:v})}_handleTextMutation(e,t){if(e.type!="text"){return}const i=e.newText.replace(/\u00A0/g," ");const n=e.oldText.replace(/\u00A0/g," ");if(n===i){return}const o=Cd(n,i);const{firstChangeAt:r,insertions:s,deletions:a}=Ov(o);let c=null;if(t){c=this.editing.mapper.toModelRange(t.getFirstRange())}const l=this.editing.view.createPositionAt(e.node,r);const d=this.editing.mapper.toModelPosition(l);const u=this.editor.model.createRange(d,d.getShiftedBy(a));const h=i.substr(r,s);this.editor.execute("input",{text:h,range:u,resultRange:c})}_handleTextNodeInsertion(e){if(e.type!="children"){return}const t=Mv(e);const i=this.editing.view.createPositionAt(e.node,t.index);const n=this.editing.mapper.toModelPosition(i);const o=t.values[0].data;this.editor.execute("input",{text:o.replace(/\u00A0/g," "),range:this.editor.model.createRange(n)})}}function zv(e){const t=e.map(e=>e.node).reduce((e,t)=>e.getCommonAncestor(t,{includeSelf:true}));if(!t){return}return t.getAncestors({includeSelf:true,parentFirst:true}).find(e=>e.is("containerElement")||e.is("rootElement"))}function Rv(e,t){return e.every(e=>t.isInline(e))}function Ov(e){let t=null;let i=null;for(let n=0;n{this._buffer.lock();const o=n.createSelection(e.selection||i.selection);const r=o.isCollapsed;if(o.isCollapsed){t.modifySelection(o,{direction:this.direction,unit:e.unit})}if(this._shouldEntireContentBeReplacedWithParagraph(e.sequence||1)){this._replaceEntireContentWithParagraph(n);return}if(o.isCollapsed){return}let s=0;o.getFirstRange().getMinimalFlatRanges().forEach(e=>{s+=ml(e.getWalker({singleCharacters:true,ignoreElementEnd:true,shallow:true}))});t.deleteContent(o,{doNotResetEntireContent:r,direction:this.direction});this._buffer.input(s);n.setSelection(o);this._buffer.unlock()})}_shouldEntireContentBeReplacedWithParagraph(e){if(e>1){return false}const t=this.editor.model;const i=t.document;const n=i.selection;const o=t.schema.getLimitElement(n);const r=n.isCollapsed&&n.containsEntireContent(o);if(!r){return false}if(!t.schema.checkChild(o,"paragraph")){return false}const s=o.getChild(0);if(s&&s.name==="paragraph"){return false}return true}_replaceEntireContentWithParagraph(e){const t=this.editor.model;const i=t.document;const n=i.selection;const o=t.schema.getLimitElement(n);const r=e.createElement("paragraph");e.remove(e.createRangeIn(o));e.insert(r,o);e.setSelection(r,0)}}class Bv extends Jd{constructor(e){super(e);const t=e.document;let i=0;t.on("keyup",(e,t)=>{if(t.keyCode==zl.delete||t.keyCode==zl.backspace){i=0}});t.on("keydown",(e,t)=>{const o={};if(t.keyCode==zl.delete){o.direction="forward";o.unit="character"}else if(t.keyCode==zl.backspace){o.direction="backward";o.unit="codePoint"}else{return}const r=Tl.isMac?t.altKey:t.ctrlKey;o.unit=r?"word":o.unit;o.sequence=++i;n(e,t.domEvent,o)});if(Tl.isAndroid){t.on("beforeinput",(t,i)=>{if(i.domEvent.inputType!="deleteContentBackward"){return}const o={unit:"codepoint",direction:"backward",sequence:1};const r=i.domTarget.ownerDocument.defaultView.getSelection();if(r.anchorNode==r.focusNode&&r.anchorOffset+1!=r.focusOffset){o.selectionToRemove=e.domConverter.domSelectionToView(r)}n(t,i.domEvent,o)})}function n(e,i,n){let o;t.once("delete",e=>o=e,{priority:Number.POSITIVE_INFINITY});t.fire("delete",new Xu(t,i,n));if(o&&o.stop.called){e.stop()}}}observe(){}}class jv extends ok{static get pluginName(){return"Delete"}init(){const e=this.editor;const t=e.editing.view;const i=t.document;t.addObserver(Bv);e.commands.add("forwardDelete",new Dv(e,"forward"));e.commands.add("delete",new Dv(e,"backward"));this.listenTo(i,"delete",(i,n)=>{const o={unit:n.unit,sequence:n.sequence};if(n.selectionToRemove){const t=e.model.createSelection();const i=[];for(const t of n.selectionToRemove.getRanges()){i.push(e.editing.mapper.toModelRange(t))}t.setTo(i);o.selection=t}e.execute(n.direction=="forward"?"forwardDelete":"delete",o);n.preventDefault();t.scrollToTheSelection()});if(Tl.isAndroid){let e=null;this.listenTo(i,"delete",(t,i)=>{const n=i.domTarget.ownerDocument.defaultView.getSelection();e={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}},{priority:"lowest"});this.listenTo(i,"keyup",(t,i)=>{if(e){const t=i.domTarget.ownerDocument.defaultView.getSelection();t.collapse(e.anchorNode,e.anchorOffset);t.extend(e.focusNode,e.focusOffset);e=null}})}}}class Fv extends ok{static get requires(){return[Vv,jv]}static get pluginName(){return"Typing"}}const Hv=new Map;function Uv(e,t,i){let n=Hv.get(e);if(!n){n=new Map;Hv.set(e,n)}n.set(t,i)}function Wv(e,t){const i=Hv.get(e);if(i&&i.has(t)){return i.get(t)}return qv}function qv(e){return[e]}function $v(e,t,i={}){const n=Wv(e.constructor,t.constructor);try{e=e.clone();return n(e,t,i)}catch(e){throw e}}function Gv(e,t,i){e=e.slice();t=t.slice();const n=new Kv(i.document,i.useRelations,i.forceWeakRemove);n.setOriginalOperations(e);n.setOriginalOperations(t);const o=n.originalOperations;if(e.length==0||t.length==0){return{operationsA:e,operationsB:t,originalOperations:o}}const r=new WeakMap;for(const t of e){r.set(t,0)}const s={nextBaseVersionA:e[e.length-1].baseVersion+1,nextBaseVersionB:t[t.length-1].baseVersion+1,originalOperationsACount:e.length,originalOperationsBCount:t.length};let a=0;while(a{if(e.key===t.key&&e.range.start.hasSameParentAs(t.range.start)){const n=e.range.getDifference(t.range).map(t=>new bg(t,e.key,e.oldValue,e.newValue,0));const o=e.range.getIntersection(t.range);if(o){if(i.aIsStrong){n.push(new bg(o,t.key,t.newValue,e.newValue,0))}}if(n.length==0){return[new Kg(0)]}return n}else{return[e]}});Uv(bg,_g,(e,t)=>{if(e.range.start.hasSameParentAs(t.position)&&e.range.containsPosition(t.position)){const i=e.range._getTransformedByInsertion(t.position,t.howMany,!t.shouldReceiveAttributes);const n=i.map(t=>new bg(t,e.key,e.oldValue,e.newValue,e.baseVersion));if(t.shouldReceiveAttributes){const i=Qv(t,e.key,e.oldValue);if(i){n.unshift(i)}}return n}e.range=e.range._getTransformedByInsertion(t.position,t.howMany,false)[0];return[e]});function Qv(e,t,i){const n=e.nodes;const o=n.getNode(0).getAttribute(t);if(o==i){return null}const r=new ef(e.position,e.position.getShiftedBy(e.howMany));return new bg(r,t,o,i,0)}Uv(bg,Ag,(e,t)=>{const i=[];if(e.range.start.hasSameParentAs(t.deletionPosition)){if(e.range.containsPosition(t.deletionPosition)||e.range.start.isEqual(t.deletionPosition)){i.push(ef._createFromPositionAndShift(t.graveyardPosition,1))}}const n=e.range._getTransformedByMergeOperation(t);if(!n.isCollapsed){i.push(n)}return i.map(t=>new bg(t,e.key,e.oldValue,e.newValue,e.baseVersion))});Uv(bg,kg,(e,t)=>{const i=Jv(e.range,t);return i.map(t=>new bg(t,e.key,e.oldValue,e.newValue,e.baseVersion))});function Jv(e,t){const i=ef._createFromPositionAndShift(t.sourcePosition,t.howMany);let n=null;let o=[];if(i.containsRange(e,true)){n=e}else if(e.start.hasSameParentAs(i.start)){o=e.getDifference(i);n=e.getIntersection(i)}else{o=[e]}const r=[];for(let e of o){e=e._getTransformedByDeletion(t.sourcePosition,t.howMany);const i=t.getMovedRangeStart();const n=e.start.hasSameParentAs(i);e=e._getTransformedByInsertion(i,t.howMany,n);r.push(...e)}if(n){r.push(n._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany,false)[0])}return r}Uv(bg,Cg,(e,t)=>{if(e.range.end.isEqual(t.insertionPosition)){if(!t.graveyardPosition){e.range.end.offset++}return[e]}if(e.range.start.hasSameParentAs(t.splitPosition)&&e.range.containsPosition(t.splitPosition)){const i=e.clone();i.range=new ef(t.moveTargetPosition.clone(),e.range.end._getCombined(t.splitPosition,t.moveTargetPosition));e.range.end=t.splitPosition.clone();e.range.end.stickiness="toPrevious";return[e,i]}e.range=e.range._getTransformedBySplitOperation(t);return[e]});Uv(_g,bg,(e,t)=>{const i=[e];if(e.shouldReceiveAttributes&&e.position.hasSameParentAs(t.range.start)&&t.range.containsPosition(e.position)){const n=Qv(e,t.key,t.newValue);if(n){i.push(n)}}return i});Uv(_g,_g,(e,t,i)=>{if(e.position.isEqual(t.position)&&i.aIsStrong){return[e]}e.position=e.position._getTransformedByInsertOperation(t);return[e]});Uv(_g,kg,(e,t)=>{e.position=e.position._getTransformedByMoveOperation(t);return[e]});Uv(_g,Cg,(e,t)=>{e.position=e.position._getTransformedBySplitOperation(t);return[e]});Uv(_g,Ag,(e,t)=>{e.position=e.position._getTransformedByMergeOperation(t);return[e]});Uv(vg,_g,(e,t)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedByInsertOperation(t)[0]}if(e.newRange){e.newRange=e.newRange._getTransformedByInsertOperation(t)[0]}return[e]});Uv(vg,vg,(e,t,i)=>{if(e.name==t.name){if(i.aIsStrong){e.oldRange=t.newRange?t.newRange.clone():null}else{return[new Kg(0)]}}return[e]});Uv(vg,Ag,(e,t)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedByMergeOperation(t)}if(e.newRange){e.newRange=e.newRange._getTransformedByMergeOperation(t)}return[e]});Uv(vg,kg,(e,t,i)=>{if(e.oldRange){e.oldRange=ef._createFromRanges(e.oldRange._getTransformedByMoveOperation(t))}if(e.newRange){if(i.abRelation){const n=ef._createFromRanges(e.newRange._getTransformedByMoveOperation(t));if(i.abRelation.side=="left"&&t.targetPosition.isEqual(e.newRange.start)){e.newRange.start.path=i.abRelation.path;e.newRange.end=n.end;return[e]}else if(i.abRelation.side=="right"&&t.targetPosition.isEqual(e.newRange.end)){e.newRange.start=n.start;e.newRange.end.path=i.abRelation.path;return[e]}}e.newRange=ef._createFromRanges(e.newRange._getTransformedByMoveOperation(t))}return[e]});Uv(vg,Cg,(e,t,i)=>{if(e.oldRange){e.oldRange=e.oldRange._getTransformedBySplitOperation(t)}if(e.newRange){if(i.abRelation){const n=e.newRange._getTransformedBySplitOperation(t);if(e.newRange.start.isEqual(t.splitPosition)&&i.abRelation.wasStartBeforeMergedElement){e.newRange.start=Zh._createAt(t.insertionPosition)}else if(e.newRange.start.isEqual(t.splitPosition)&&!i.abRelation.wasInLeftElement){e.newRange.start=Zh._createAt(t.moveTargetPosition)}if(e.newRange.end.isEqual(t.splitPosition)&&i.abRelation.wasInRightElement){e.newRange.end=Zh._createAt(t.moveTargetPosition)}else if(e.newRange.end.isEqual(t.splitPosition)&&i.abRelation.wasEndBeforeMergedElement){e.newRange.end=Zh._createAt(t.insertionPosition)}else{e.newRange.end=n.end}return[e]}e.newRange=e.newRange._getTransformedBySplitOperation(t)}return[e]});Uv(Ag,_g,(e,t)=>{if(e.sourcePosition.hasSameParentAs(t.position)){e.howMany+=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByInsertOperation(t);e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t);return[e]});Uv(Ag,Ag,(e,t,i)=>{if(e.sourcePosition.isEqual(t.sourcePosition)&&e.targetPosition.isEqual(t.targetPosition)){if(!i.bWasUndone){return[new Kg(0)]}else{const i=t.graveyardPosition.path.slice();i.push(0);e.sourcePosition=new Zh(t.graveyardPosition.root,i);e.howMany=0;return[e]}}if(e.sourcePosition.isEqual(t.sourcePosition)&&!e.targetPosition.isEqual(t.targetPosition)&&!i.bWasUndone&&i.abRelation!="splitAtSource"){const n=e.targetPosition.root.rootName=="$graveyard";const o=t.targetPosition.root.rootName=="$graveyard";const r=n&&!o;const s=o&&!n;const a=s||!r&&i.aIsStrong;if(a){const i=t.targetPosition._getTransformedByMergeOperation(t);const n=e.targetPosition._getTransformedByMergeOperation(t);return[new kg(i,e.howMany,n,0)]}else{return[new Kg(0)]}}if(e.sourcePosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByMergeOperation(t);e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);if(!e.graveyardPosition.isEqual(t.graveyardPosition)||!i.aIsStrong){e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)}return[e]});Uv(Ag,kg,(e,t,i)=>{const n=ef._createFromPositionAndShift(t.sourcePosition,t.howMany);if(t.type=="remove"&&!i.bWasUndone&&!i.forceWeakRemove){if(e.deletionPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(e.sourcePosition)){return[new Kg(0)]}}if(e.sourcePosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}if(e.sourcePosition.hasSameParentAs(t.sourcePosition)){e.howMany-=t.howMany}e.sourcePosition=e.sourcePosition._getTransformedByMoveOperation(t);e.targetPosition=e.targetPosition._getTransformedByMoveOperation(t);if(!e.graveyardPosition.isEqual(t.targetPosition)){e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)}return[e]});Uv(Ag,Cg,(e,t,i)=>{if(t.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedByDeletion(t.graveyardPosition,1);if(e.deletionPosition.isEqual(t.graveyardPosition)){e.howMany=t.howMany}}if(e.targetPosition.isEqual(t.splitPosition)){const n=t.howMany!=0;const o=t.graveyardPosition&&e.deletionPosition.isEqual(t.graveyardPosition);if(n||o||i.abRelation=="mergeTargetNotMoved"){e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t);return[e]}}if(e.sourcePosition.isEqual(t.splitPosition)){if(i.abRelation=="mergeSourceNotMoved"){e.howMany=0;e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]}if(i.abRelation=="mergeSameElement"||e.sourcePosition.offset>0){e.sourcePosition=t.moveTargetPosition.clone();e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]}}if(e.sourcePosition.hasSameParentAs(t.splitPosition)){e.howMany=t.splitPosition.offset}e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t);e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t);return[e]});Uv(kg,_g,(e,t)=>{const i=ef._createFromPositionAndShift(e.sourcePosition,e.howMany);const n=i._getTransformedByInsertOperation(t,false)[0];e.sourcePosition=n.start;e.howMany=n.end.offset-n.start.offset;if(!e.targetPosition.isEqual(t.position)){e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t)}return[e]});Uv(kg,kg,(e,t,i)=>{const n=ef._createFromPositionAndShift(e.sourcePosition,e.howMany);const o=ef._createFromPositionAndShift(t.sourcePosition,t.howMany);let r=i.aIsStrong;let s=!i.aIsStrong;if(i.abRelation=="insertBefore"||i.baRelation=="insertAfter"){s=true}else if(i.abRelation=="insertAfter"||i.baRelation=="insertBefore"){s=false}let a;if(e.targetPosition.isEqual(t.targetPosition)&&s){a=e.targetPosition._getTransformedByDeletion(t.sourcePosition,t.howMany)}else{a=e.targetPosition._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany)}if(Xv(e,t)&&Xv(t,e)){return[t.getReversed()]}const c=n.containsPosition(t.targetPosition);if(c&&n.containsRange(o,true)){n.start=n.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);n.end=n.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);return ey([n],a)}const l=o.containsPosition(e.targetPosition);if(l&&o.containsRange(n,true)){n.start=n.start._getCombined(t.sourcePosition,t.getMovedRangeStart());n.end=n.end._getCombined(t.sourcePosition,t.getMovedRangeStart());return ey([n],a)}const d=Rs(e.sourcePosition.getParentPath(),t.sourcePosition.getParentPath());if(d=="prefix"||d=="extension"){n.start=n.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);n.end=n.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany);return ey([n],a)}if(e.type=="remove"&&t.type!="remove"&&!i.aWasUndone&&!i.forceWeakRemove){r=true}else if(e.type!="remove"&&t.type=="remove"&&!i.bWasUndone&&!i.forceWeakRemove){r=false}const u=[];const h=n.getDifference(o);for(const e of h){e.start=e.start._getTransformedByDeletion(t.sourcePosition,t.howMany);e.end=e.end._getTransformedByDeletion(t.sourcePosition,t.howMany);const i=Rs(e.start.getParentPath(),t.getMovedRangeStart().getParentPath())=="same";const n=e._getTransformedByInsertion(t.getMovedRangeStart(),t.howMany,i);u.push(...n)}const f=n.getIntersection(o);if(f!==null&&r){f.start=f.start._getCombined(t.sourcePosition,t.getMovedRangeStart());f.end=f.end._getCombined(t.sourcePosition,t.getMovedRangeStart());if(u.length===0){u.push(f)}else if(u.length==1){if(o.start.isBefore(n.start)||o.start.isEqual(n.start)){u.unshift(f)}else{u.push(f)}}else{u.splice(1,0,f)}}if(u.length===0){return[new Kg(e.baseVersion)]}return ey(u,a)});Uv(kg,Cg,(e,t,i)=>{let n=e.targetPosition.clone();if(!e.targetPosition.isEqual(t.insertionPosition)||!t.graveyardPosition||i.abRelation=="moveTargetAfter"){n=e.targetPosition._getTransformedBySplitOperation(t)}const o=ef._createFromPositionAndShift(e.sourcePosition,e.howMany);if(o.end.isEqual(t.insertionPosition)){if(!t.graveyardPosition){e.howMany++}e.targetPosition=n;return[e]}if(o.start.hasSameParentAs(t.splitPosition)&&o.containsPosition(t.splitPosition)){let e=new ef(t.splitPosition,o.end);e=e._getTransformedBySplitOperation(t);const i=[new ef(o.start,t.splitPosition),e];return ey(i,n)}if(e.targetPosition.isEqual(t.splitPosition)&&i.abRelation=="insertAtSource"){n=t.moveTargetPosition}if(e.targetPosition.isEqual(t.insertionPosition)&&i.abRelation=="insertBetween"){n=e.targetPosition}const r=o._getTransformedBySplitOperation(t);const s=[r];if(t.graveyardPosition){const n=o.start.isEqual(t.graveyardPosition)||o.containsPosition(t.graveyardPosition);if(e.howMany>1&&n&&!i.aWasUndone){s.push(ef._createFromPositionAndShift(t.insertionPosition,1))}}return ey(s,n)});Uv(kg,Ag,(e,t,i)=>{const n=ef._createFromPositionAndShift(e.sourcePosition,e.howMany);if(t.deletionPosition.hasSameParentAs(e.sourcePosition)&&n.containsPosition(t.sourcePosition)){if(e.type=="remove"&&!i.forceWeakRemove){if(!i.aWasUndone){const i=[];let n=t.graveyardPosition.clone();let o=t.targetPosition._getTransformedByMergeOperation(t);if(e.howMany>1){i.push(new kg(e.sourcePosition,e.howMany-1,e.targetPosition,0));n=n._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany-1);o=o._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany-1)}const r=t.deletionPosition._getCombined(e.sourcePosition,e.targetPosition);const s=new kg(n,1,r,0);const a=s.getMovedRangeStart().path.slice();a.push(0);const c=new Zh(s.targetPosition.root,a);o=o._getTransformedByMove(n,r,1);const l=new kg(o,t.howMany,c,0);i.push(s);i.push(l);return i}}else{if(e.howMany==1){if(!i.bWasUndone){return[new Kg(0)]}else{e.sourcePosition=t.graveyardPosition.clone();e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);return[e]}}}}const o=ef._createFromPositionAndShift(e.sourcePosition,e.howMany);const r=o._getTransformedByMergeOperation(t);e.sourcePosition=r.start;e.howMany=r.end.offset-r.start.offset;e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t);return[e]});Uv(yg,_g,(e,t)=>{e.position=e.position._getTransformedByInsertOperation(t);return[e]});Uv(yg,Ag,(e,t)=>{if(e.position.isEqual(t.deletionPosition)){e.position=t.graveyardPosition.clone();e.position.stickiness="toNext";return[e]}e.position=e.position._getTransformedByMergeOperation(t);return[e]});Uv(yg,kg,(e,t)=>{e.position=e.position._getTransformedByMoveOperation(t);return[e]});Uv(yg,yg,(e,t,i)=>{if(e.position.isEqual(t.position)){if(i.aIsStrong){e.oldName=t.newName}else{return[new Kg(0)]}}return[e]});Uv(yg,Cg,(e,t)=>{const i=e.position.path;const n=t.splitPosition.getParentPath();if(Rs(i,n)=="same"&&!t.graveyardPosition){const t=new yg(e.position.getShiftedBy(1),e.oldName,e.newName,0);return[e,t]}e.position=e.position._getTransformedBySplitOperation(t);return[e]});Uv(xg,xg,(e,t,i)=>{if(e.root===t.root&&e.key===t.key){if(!i.aIsStrong||e.newValue===t.newValue){return[new Kg(0)]}else{e.oldValue=t.newValue}}return[e]});Uv(Cg,_g,(e,t)=>{if(e.splitPosition.hasSameParentAs(t.position)&&e.splitPosition.offset{if(!e.graveyardPosition&&!i.bWasUndone&&e.splitPosition.hasSameParentAs(t.sourcePosition)){const i=t.graveyardPosition.path.slice();i.push(0);const n=new Zh(t.graveyardPosition.root,i);const o=Cg.getInsertionPosition(new Zh(t.graveyardPosition.root,i));const r=new Cg(n,0,null,0);r.insertionPosition=o;e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t);e.insertionPosition=Cg.getInsertionPosition(e.splitPosition);e.graveyardPosition=r.insertionPosition.clone();e.graveyardPosition.stickiness="toNext";return[r,e]}if(e.splitPosition.hasSameParentAs(t.deletionPosition)&&!e.splitPosition.isAfter(t.deletionPosition)){e.howMany--}if(e.splitPosition.hasSameParentAs(t.targetPosition)){e.howMany+=t.howMany}e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t);e.insertionPosition=Cg.getInsertionPosition(e.splitPosition);if(e.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)}return[e]});Uv(Cg,kg,(e,t,i)=>{const n=ef._createFromPositionAndShift(t.sourcePosition,t.howMany);if(e.graveyardPosition){const o=n.start.isEqual(e.graveyardPosition)||n.containsPosition(e.graveyardPosition);if(!i.bWasUndone&&o){const i=e.splitPosition._getTransformedByMoveOperation(t);const n=e.graveyardPosition._getTransformedByMoveOperation(t);const o=n.path.slice();o.push(0);const r=new Zh(n.root,o);const s=new kg(i,e.howMany,r,0);return[s]}e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)}if(e.splitPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(e.splitPosition)){const i=t.howMany-(e.splitPosition.offset-t.sourcePosition.offset);e.howMany-=i;if(e.splitPosition.hasSameParentAs(t.targetPosition)&&e.splitPosition.offset{if(e.splitPosition.isEqual(t.splitPosition)){if(!e.graveyardPosition&&!t.graveyardPosition){return[new Kg(0)]}if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition)){return[new Kg(0)]}if(i.abRelation=="splitBefore"){e.howMany=0;e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t);return[e]}}if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition)){const n=e.splitPosition.root.rootName=="$graveyard";const o=t.splitPosition.root.rootName=="$graveyard";const r=n&&!o;const s=o&&!n;const a=s||!r&&i.aIsStrong;if(a){const i=[];if(t.howMany){i.push(new kg(t.moveTargetPosition,t.howMany,t.splitPosition,0))}if(e.howMany){i.push(new kg(e.splitPosition,e.howMany,e.moveTargetPosition,0))}return i}else{return[new Kg(0)]}}if(e.graveyardPosition){e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t)}if(e.splitPosition.isEqual(t.insertionPosition)&&i.abRelation=="splitBefore"){e.howMany++;return[e]}if(t.splitPosition.isEqual(e.insertionPosition)&&i.baRelation=="splitBefore"){const i=t.insertionPosition.path.slice();i.push(0);const n=new Zh(t.insertionPosition.root,i);const o=new kg(e.insertionPosition,1,n,0);return[e,o]}if(e.splitPosition.hasSameParentAs(t.splitPosition)&&e.splitPosition.offsetthis.clearStack())}refresh(){this.isEnabled=this._stack.length>0}addBatch(e){const t=this.editor.model.document.selection;const i={ranges:t.hasOwnRange?Array.from(t.getRanges()):[],isBackward:t.isBackward};this._stack.push({batch:e,selection:i});this.refresh()}clearStack(){this._stack=[];this.refresh()}_restoreSelection(e,t,i){const n=this.editor.model;const o=n.document;const r=[];const s=e.map(e=>e.getTransformedByOperations(i));const a=s.flat();for(const e of s){const t=e.filter(e=>!ny(e,a));iy(t);const i=t.find(e=>e.root!=o.graveyard);if(i){r.push(i)}}if(r.length){n.change(e=>{e.setSelection(r,{backward:t})})}}_undo(e,t){const i=this.editor.model;const n=i.document;this._createdBatches.add(t);const o=e.operations.slice().filter(e=>e.isDocumentOperation);o.reverse();for(const e of o){const o=e.baseVersion+1;const r=Array.from(n.history.getOperations(o));const s=Gv([e.getReversed()],r,{useRelations:true,document:this.editor.model.document,padWithNoOps:false,forceWeakRemove:true});const a=s.operationsA;for(const o of a){t.addOperation(o);i.applyOperation(o);n.history.setOperationAsUndone(e,o)}}}}function iy(e){e.sort((e,t)=>e.start.isBefore(t.start)?-1:1);for(let t=1;tt!==e&&t.containsRange(e,true))}class oy extends ty{execute(e=null){const t=e?this._stack.findIndex(t=>t.batch==e):this._stack.length-1;const i=this._stack.splice(t,1)[0];const n=this.editor.model.createBatch("transparent");this.editor.model.enqueueChange(n,()=>{this._undo(i.batch,n);const e=this.editor.model.document.history.getOperations(i.batch.baseVersion);this._restoreSelection(i.selection.ranges,i.selection.isBackward,e);this.fire("revert",i.batch,n)});this.refresh()}}class ry extends ty{execute(){const e=this._stack.pop();const t=this.editor.model.createBatch("transparent");this.editor.model.enqueueChange(t,()=>{const i=e.batch.operations[e.batch.operations.length-1];const n=i.baseVersion+1;const o=this.editor.model.document.history.getOperations(n);this._restoreSelection(e.selection.ranges,e.selection.isBackward,o);this._undo(e.batch,t)});this.refresh()}}class sy extends ok{static get pluginName(){return"UndoEditing"}constructor(e){super(e);this._batchRegistry=new WeakSet}init(){const e=this.editor;this._undoCommand=new oy(e);this._redoCommand=new ry(e);e.commands.add("undo",this._undoCommand);e.commands.add("redo",this._redoCommand);this.listenTo(e.model,"applyOperation",(e,t)=>{const i=t[0];if(!i.isDocumentOperation){return}const n=i.batch;const o=this._redoCommand._createdBatches.has(n);const r=this._undoCommand._createdBatches.has(n);const s=this._batchRegistry.has(n);if(s||n.type=="transparent"&&!o&&!r){return}else{if(o){this._undoCommand.addBatch(n)}else if(!r){this._undoCommand.addBatch(n);this._redoCommand.clearStack()}}this._batchRegistry.add(n)},{priority:"highest"});this.listenTo(this._undoCommand,"revert",(e,t,i)=>{this._redoCommand.addBatch(i)});e.keystrokes.set("CTRL+Z","undo");e.keystrokes.set("CTRL+Y","redo");e.keystrokes.set("CTRL+SHIFT+Z","redo")}}var ay='';var cy='';class ly extends ok{init(){const e=this.editor;const t=e.locale;const i=e.t;const n=t.uiLanguageDirection=="ltr"?ay:cy;const o=t.uiLanguageDirection=="ltr"?cy:ay;this._addButton("undo",i("Undo"),"CTRL+Z",n);this._addButton("redo",i("Redo"),"CTRL+Y",o)}_addButton(e,t,i,n){const o=this.editor;o.ui.componentFactory.add(e,r=>{const s=o.commands.get(e);const a=new Ew(r);a.set({label:t,icon:n,keystroke:i,tooltip:true});a.bind("isEnabled").to(s,"isEnabled");this.listenTo(a,"execute",()=>{o.execute(e);o.editing.view.focus()});return a})}}class dy extends ok{static get requires(){return[sy,ly]}static get pluginName(){return"Undo"}}class uy extends ok{static get requires(){return[dv,gv,yv,E_,Fv,dy]}static get pluginName(){return"Essentials"}}class hy extends sk{constructor(e,t){super(e);this.attributeKey=t}refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute(this.attributeKey);this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){const t=this.editor.model;const i=t.document;const n=i.selection;const o=e.value;t.change(e=>{if(n.isCollapsed){if(o){e.setSelectionAttribute(this.attributeKey,o)}else{e.removeSelectionAttribute(this.attributeKey)}}else{const i=t.schema.getValidRanges(n.getRanges(),this.attributeKey);for(const t of i){if(o){e.setAttribute(this.attributeKey,o,t)}else{e.removeAttribute(this.attributeKey,t)}}}})}}var fy='';class my extends Ew{constructor(e){super(e);const t=this.bindTemplate;this.set("color");this.set("hasBorder");this.icon=fy;this.extendTemplate({attributes:{style:{backgroundColor:t.to("color")},class:["ck","ck-color-grid__tile",t.if("hasBorder","ck-color-table__color-tile_bordered")]}})}render(){super.render();this.iconView.fillColor="hsl(0, 0%, 100%)"}}var gy=i(53);class py extends Hb{constructor(e,t){super(e);const i=t&&t.colorDefinitions||[];const n={};if(t&&t.columns){n.gridTemplateColumns=`repeat( ${t.columns}, 1fr)`}this.set("selectedColor");this.items=this.createCollection();this.focusTracker=new Zp;this.keystrokes=new Vp;this._focusCycler=new rw({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowleft",focusNext:"arrowright"}});this.items.on("add",(e,t)=>{t.isOn=t.color===this.selectedColor});i.forEach(e=>{const t=new my;t.set({color:e.color,label:e.label,tooltip:true,hasBorder:e.options.hasBorder});t.on("execute",()=>{this.fire("execute",{value:e.color,hasBorder:e.options.hasBorder,label:e.label})});this.items.add(t)});this.setTemplate({tag:"div",children:this.items,attributes:{class:["ck","ck-color-grid"],style:n}});this.on("change:selectedColor",(e,t,i)=>{for(const e of this.items){e.isOn=e.color===i}})}focus(){if(this.items.length){this.items.first.focus()}}focusLast(){if(this.items.length){this.items.last.focus()}}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)});this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)});this.keystrokes.listenTo(this.element)}}class by extends xs{constructor(e){super(e);this.set("isEmpty",true);this.on("change",()=>{this.set("isEmpty",this.length===0)})}add(e,t){if(this.find(t=>t.color===e.color)){return}super.add(e,t)}hasColor(e){return!!this.find(t=>t.color===e)}}ys(by,Zc);var wy='';var ky=i(55);class _y extends Hb{constructor(e,{colors:t,columns:i,removeButtonLabel:n,documentColorsLabel:o,documentColorsCount:r}){super(e);this.items=this.createCollection();this.colorDefinitions=t;this.focusTracker=new Zp;this.keystrokes=new Vp;this.set("selectedColor");this.removeButtonLabel=n;this.columns=i;this.documentColors=new by;this.documentColorsCount=r;this._focusCycler=new rw({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowup",focusNext:"arrowdown"}});this._documentColorsLabel=o;this.setTemplate({tag:"div",attributes:{class:["ck","ck-color-table"]},children:this.items});this.items.add(this._removeColorButton())}updateDocumentColors(e,t){const i=e.document;const n=this.documentColorsCount;this.documentColors.clear();for(const o of i.getRootNames()){const r=i.getRoot(o);const s=e.createRangeIn(r);for(const e of s.getItems()){if(e.is("$textProxy")&&e.hasAttribute(t)){this._addColorToDocumentColors(e.getAttribute(t));if(this.documentColors.length>=n){return}}}}}updateSelectedColors(){const e=this.documentColorsGrid;const t=this.staticColorsGrid;const i=this.selectedColor;t.selectedColor=i;if(e){e.selectedColor=i}}render(){super.render();for(const e of this.items){this.focusTracker.add(e.element)}this.keystrokes.listenTo(this.element)}appendGrids(){if(this.staticColorsGrid){return}this.staticColorsGrid=this._createStaticColorsGrid();this.items.add(this.staticColorsGrid);if(this.documentColorsCount){const e=gb.bind(this.documentColors,this.documentColors);const t=new Qb(this.locale);t.text=this._documentColorsLabel;t.extendTemplate({attributes:{class:["ck","ck-color-grid__label",e.if("isEmpty","ck-hidden")]}});this.items.add(t);this.documentColorsGrid=this._createDocumentColorsGrid();this.items.add(this.documentColorsGrid)}}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}_removeColorButton(){const e=new Ew;e.set({withText:true,icon:wy,tooltip:true,label:this.removeButtonLabel});e.class="ck-color-table__remove-color";e.on("execute",()=>{this.fire("execute",{value:null})});return e}_createStaticColorsGrid(){const e=new py(this.locale,{colorDefinitions:this.colorDefinitions,columns:this.columns});e.delegate("execute").to(this);return e}_createDocumentColorsGrid(){const e=gb.bind(this.documentColors,this.documentColors);const t=new py(this.locale,{columns:this.columns});t.delegate("execute").to(this);t.extendTemplate({attributes:{class:e.if("isEmpty","ck-hidden")}});t.items.bindTo(this.documentColors).using(e=>{const t=new my;t.set({color:e.color,hasBorder:e.options&&e.options.hasBorder});if(e.label){t.set({label:e.label,tooltip:true})}t.on("execute",()=>{this.fire("execute",{value:e.color})});return t});this.documentColors.on("change:isEmpty",(e,i,n)=>{if(n){t.selectedColor=null}});return t}_addColorToDocumentColors(e){const t=this.colorDefinitions.find(t=>t.color===e);if(!t){this.documentColors.add({color:e,label:e,options:{hasBorder:false}})}else{this.documentColors.add(Object.assign({},t))}}}const vy="fontSize";const yy="fontFamily";const xy="fontColor";const Ay="fontBackgroundColor";function Cy(e,t){const i={model:{key:e,values:[]},view:{},upcastAlso:{}};for(const e of t){i.model.values.push(e.model);i.view[e.model]=e.view;if(e.upcastAlso){i.upcastAlso[e.model]=e.upcastAlso}}return i}function Ty(e){return t=>Py(t.getStyle(e))}function Sy(e){return(t,{writer:i})=>i.createAttributeElement("span",{style:`${e}:${t}`},{priority:7})}function Ey({dropdownView:e,colors:t,columns:i,removeButtonLabel:n,documentColorsLabel:o,documentColorsCount:r}){const s=e.locale;const a=new _y(s,{colors:t,columns:i,removeButtonLabel:n,documentColorsLabel:o,documentColorsCount:r});e.colorTableView=a;e.panelView.children.add(a);a.delegate("execute").to(e,"execute");return a}function Py(e){return e.replace(/\s/g,"")}class My extends hy{constructor(e){super(e,Ay)}}const Iy=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;const Ly=/^rgb\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}[0-9]{1,3}[ %]?\)$/i;const Ny=/^rgba\([ ]?([0-9]{1,3}[ %]?,[ ]?){3}(1|[0-9]+%|[0]?\.?[0-9]+)\)$/i;const zy=/^hsl\([ ]?([0-9]{1,3}[ %]?[,]?[ ]*){3}(1|[0-9]+%|[0]?\.?[0-9]+)?\)$/i;const Ry=/^hsla\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}(1|[0-9]+%|[0]?\.?[0-9]+)\)$/i;const Oy=new Set(["black","silver","gray","white","maroon","red","purple","fuchsia","green","lime","olive","yellow","navy","blue","teal","aqua","orange","aliceblue","antiquewhite","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","gainsboro","ghostwhite","gold","goldenrod","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","limegreen","linen","magenta","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","oldlace","olivedrab","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","rebeccapurple","currentcolor","transparent"]);function Vy(e){if(e.startsWith("#")){return Iy.test(e)}if(e.startsWith("rgb")){return Ly.test(e)||Ny.test(e)}if(e.startsWith("hsl")){return zy.test(e)||Ry.test(e)}return Oy.has(e.toLowerCase())}const Dy=["none","hidden","dotted","dashed","solid","double","groove","ridge","inset","outset"];function By(e){return Dy.includes(e)}const jy=/^([+-]?[0-9]*[.]?[0-9]+(px|cm|mm|in|pc|pt|ch|em|ex|rem|vh|vw|vmin|vmax)|0)$/;function Fy(e){return jy.test(e)}const Hy=/^[+-]?[0-9]*[.]?[0-9]+%$/;function Uy(e){return Hy.test(e)}const Wy=["repeat-x","repeat-y","repeat","space","round","no-repeat"];function qy(e){return Wy.includes(e)}const $y=["center","top","bottom","left","right"];function Gy(e){return $y.includes(e)}const Ky=["fixed","scroll","local"];function Yy(e){return Ky.includes(e)}const Zy=/^url\(/;function Qy(e){return Zy.test(e)}function Jy(e=""){if(e===""){return{top:undefined,right:undefined,bottom:undefined,left:undefined}}const t=ix(e);const i=t[0];const n=t[2]||i;const o=t[1]||i;const r=t[3]||o;return{top:i,bottom:n,right:o,left:r}}function Xy(e){return t=>{const{top:i,right:n,bottom:o,left:r}=t;const s=[];if(![i,n,r,o].every(e=>!!e)){if(i){s.push([e+"-top",i])}if(n){s.push([e+"-right",n])}if(o){s.push([e+"-bottom",o])}if(r){s.push([e+"-left",r])}}else{s.push([e,ex(t)])}return s}}function ex({top:e,right:t,bottom:i,left:n}){const o=[];if(n!==t){o.push(e,t,i,n)}else if(i!==e){o.push(e,t,i)}else if(t!==e){o.push(e,t)}else{o.push(e)}return o.join(" ")}function tx(e){return t=>({path:e,value:Jy(t)})}function ix(e){return e.replace(/, /g,",").split(" ").map(e=>e.replace(/,/g,", "))}function nx(e){e.setNormalizer("background",ox);e.setNormalizer("background-color",e=>({path:"background.color",value:e}));e.setReducer("background",e=>{const t=[];t.push(["background-color",e.color]);return t})}function ox(e){const t={};const i=ix(e);for(const e of i){if(qy(e)){t.repeat=t.repeat||[];t.repeat.push(e)}else if(Gy(e)){t.position=t.position||[];t.position.push(e)}else if(Yy(e)){t.attachment=e}else if(Vy(e)){t.color=e}else if(Qy(e)){t.image=e}}return{path:"background",value:t}}class rx extends ok{static get pluginName(){return"FontBackgroundColorEditing"}constructor(e){super(e);e.config.define(Ay,{colors:[{color:"hsl(0, 0%, 0%)",label:"Black"},{color:"hsl(0, 0%, 30%)",label:"Dim grey"},{color:"hsl(0, 0%, 60%)",label:"Grey"},{color:"hsl(0, 0%, 90%)",label:"Light grey"},{color:"hsl(0, 0%, 100%)",label:"White",hasBorder:true},{color:"hsl(0, 75%, 60%)",label:"Red"},{color:"hsl(30, 75%, 60%)",label:"Orange"},{color:"hsl(60, 75%, 60%)",label:"Yellow"},{color:"hsl(90, 75%, 60%)",label:"Light green"},{color:"hsl(120, 75%, 60%)",label:"Green"},{color:"hsl(150, 75%, 60%)",label:"Aquamarine"},{color:"hsl(180, 75%, 60%)",label:"Turquoise"},{color:"hsl(210, 75%, 60%)",label:"Light blue"},{color:"hsl(240, 75%, 60%)",label:"Blue"},{color:"hsl(270, 75%, 60%)",label:"Purple"}],columns:5});e.data.addStyleProcessorRules(nx);e.conversion.for("upcast").elementToAttribute({view:{name:"span",styles:{"background-color":/[\s\S]+/}},model:{key:Ay,value:Ty("background-color")}});e.conversion.for("downcast").attributeToElement({model:Ay,view:Sy("background-color")});e.commands.add(Ay,new My(e));e.model.schema.extend("$text",{allowAttributes:Ay});e.model.schema.setAttributeProperties(Ay,{isFormatting:true,copyOnEnter:true})}}function sx(e,t){const i=e.t;const n={Black:i("Black"),"Dim grey":i("Dim grey"),Grey:i("Grey"),"Light grey":i("Light grey"),White:i("White"),Red:i("Red"),Orange:i("Orange"),Yellow:i("Yellow"),"Light green":i("Light green"),Green:i("Green"),Aquamarine:i("Aquamarine"),Turquoise:i("Turquoise"),"Light blue":i("Light blue"),Blue:i("Blue"),Purple:i("Purple")};return t.map(e=>{const t=n[e.label];if(t&&t!=e.label){e.label=t}return e})}function ax(e){return e.map(cx).filter(e=>!!e)}function cx(e){if(typeof e==="string"){return{model:e,label:e,hasBorder:false,view:{name:"span",styles:{color:e}}}}else{return{model:e.color,label:e.label||e.color,hasBorder:e.hasBorder===undefined?false:e.hasBorder,view:{name:"span",styles:{color:`${e.color}`}}}}}class lx extends ok{constructor(e,{commandName:t,icon:i,componentName:n,dropdownLabel:o}){super(e);this.commandName=t;this.componentName=n;this.icon=i;this.dropdownLabel=o;this.columns=e.config.get(`${this.componentName}.columns`);this.colorTableView}init(){const e=this.editor;const t=e.locale;const i=t.t;const n=e.commands.get(this.commandName);const o=ax(e.config.get(this.componentName).colors);const r=sx(t,o);const s=e.config.get(`${this.componentName}.documentColors`);e.ui.componentFactory.add(this.componentName,t=>{const o=jw(t);this.colorTableView=Ey({dropdownView:o,colors:r.map(e=>({label:e.label,color:e.model,options:{hasBorder:e.hasBorder}})),columns:this.columns,removeButtonLabel:i("Remove color"),documentColorsLabel:s!==0?i("Document colors"):undefined,documentColorsCount:s===undefined?this.columns:s});this.colorTableView.bind("selectedColor").to(n,"value");o.buttonView.set({label:this.dropdownLabel,icon:this.icon,tooltip:true});o.extendTemplate({attributes:{class:"ck-color-ui-dropdown"}});o.bind("isEnabled").to(n);o.on("execute",(t,i)=>{e.execute(this.commandName,i);e.editing.view.focus()});o.on("change:isOpen",(t,i,n)=>{o.colorTableView.appendGrids();if(n){if(s!==0){this.colorTableView.updateDocumentColors(e.model,this.componentName)}this.colorTableView.updateSelectedColors()}});return o})}}var dx='';class ux extends lx{constructor(e){const t=e.locale.t;super(e,{commandName:Ay,componentName:Ay,icon:dx,dropdownLabel:t("Font Background Color")})}static get pluginName(){return"FontBackgroundColorUI"}}class hx extends ok{static get requires(){return[rx,ux]}static get pluginName(){return"FontBackgroundColor"}}class fx extends hy{constructor(e){super(e,xy)}}class mx extends ok{static get pluginName(){return"FontColorEditing"}constructor(e){super(e);e.config.define(xy,{colors:[{color:"hsl(0, 0%, 0%)",label:"Black"},{color:"hsl(0, 0%, 30%)",label:"Dim grey"},{color:"hsl(0, 0%, 60%)",label:"Grey"},{color:"hsl(0, 0%, 90%)",label:"Light grey"},{color:"hsl(0, 0%, 100%)",label:"White",hasBorder:true},{color:"hsl(0, 75%, 60%)",label:"Red"},{color:"hsl(30, 75%, 60%)",label:"Orange"},{color:"hsl(60, 75%, 60%)",label:"Yellow"},{color:"hsl(90, 75%, 60%)",label:"Light green"},{color:"hsl(120, 75%, 60%)",label:"Green"},{color:"hsl(150, 75%, 60%)",label:"Aquamarine"},{color:"hsl(180, 75%, 60%)",label:"Turquoise"},{color:"hsl(210, 75%, 60%)",label:"Light blue"},{color:"hsl(240, 75%, 60%)",label:"Blue"},{color:"hsl(270, 75%, 60%)",label:"Purple"}],columns:5});e.conversion.for("upcast").elementToAttribute({view:{name:"span",styles:{color:/[\s\S]+/}},model:{key:xy,value:Ty("color")}});e.conversion.for("downcast").attributeToElement({model:xy,view:Sy("color")});e.commands.add(xy,new fx(e));e.model.schema.extend("$text",{allowAttributes:xy});e.model.schema.setAttributeProperties(xy,{isFormatting:true,copyOnEnter:true})}}var gx='';class px extends lx{constructor(e){const t=e.locale.t;super(e,{commandName:xy,componentName:xy,icon:gx,dropdownLabel:t("Font Color")})}static get pluginName(){return"FontColorUI"}}class bx extends ok{static get requires(){return[mx,px]}static get pluginName(){return"FontColor"}}class wx extends hy{constructor(e){super(e,yy)}}function kx(e){return e.map(_x).filter(e=>!!e)}function _x(e){if(typeof e==="object"){return e}if(e==="default"){return{title:"Default",model:undefined}}if(typeof e!=="string"){return}return vx(e)}function vx(e){const t=e.replace(/"|'/g,"").split(",");const i=t[0];const n=t.map(yx).join(", ");return{title:i,model:n,view:{name:"span",styles:{"font-family":n},priority:7}}}function yx(e){e=e.trim();if(e.indexOf(" ")>0){e=`'${e}'`}return e}class xx extends ok{static get pluginName(){return"FontFamilyEditing"}constructor(e){super(e);e.config.define(yy,{options:["default","Arial, Helvetica, sans-serif","Courier New, Courier, monospace","Georgia, serif","Lucida Sans Unicode, Lucida Grande, sans-serif","Tahoma, Geneva, sans-serif","Times New Roman, Times, serif","Trebuchet MS, Helvetica, sans-serif","Verdana, Geneva, sans-serif"],supportAllValues:false})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:yy});e.model.schema.setAttributeProperties(yy,{isFormatting:true,copyOnEnter:true});const t=kx(e.config.get("fontFamily.options")).filter(e=>e.model);const i=Cy(yy,t);if(e.config.get("fontFamily.supportAllValues")){this._prepareAnyValueConverters()}else{e.conversion.attributeToElement(i)}e.commands.add(yy,new wx(e))}_prepareAnyValueConverters(){const e=this.editor;e.conversion.for("downcast").attributeToElement({model:yy,view:(e,{writer:t})=>t.createAttributeElement("span",{style:"font-family:"+e},{priority:7})});e.conversion.for("upcast").attributeToAttribute({model:{key:yy,value:e=>e.getStyle("font-family")},view:{name:"span",styles:{"font-family":/.*/}}})}}var Ax='';class Cx extends ok{init(){const e=this.editor;const t=e.t;const i=this._getLocalizedOptions();const n=e.commands.get(yy);e.ui.componentFactory.add(yy,o=>{const r=jw(o);Hw(r,Tx(i,n));r.buttonView.set({label:t("Font Family"),icon:Ax,tooltip:true});r.extendTemplate({attributes:{class:"ck-font-family-dropdown"}});r.bind("isEnabled").to(n);this.listenTo(r,"execute",t=>{e.execute(t.source.commandName,{value:t.source.commandParam});e.editing.view.focus()});return r})}_getLocalizedOptions(){const e=this.editor;const t=e.t;const i=kx(e.config.get(yy).options);return i.map(e=>{if(e.title==="Default"){e.title=t("Default")}return e})}}function Tx(e,t){const i=new xs;for(const n of e){const e={type:"button",model:new Y_({commandName:yy,commandParam:n.model,label:n.title,withText:true})};e.model.bind("isOn").to(t,"value",e=>{if(e===n.model){return true}if(!e||!n.model){return false}return e.split(",")[0].replace(/'/g,"").toLowerCase()===n.model.toLowerCase()});if(n.view&&n.view.styles){e.model.set("labelStyle",`font-family: ${n.view.styles["font-family"]}`)}i.add(e)}return i}class Sx extends ok{static get requires(){return[xx,Cx]}static get pluginName(){return"FontFamily"}}class Ex extends hy{constructor(e){super(e,vy)}}function Px(e){return e.map(e=>Ix(e)).filter(e=>!!e)}const Mx={get tiny(){return{title:"Tiny",model:"tiny",view:{name:"span",classes:"text-tiny",priority:7}}},get small(){return{title:"Small",model:"small",view:{name:"span",classes:"text-small",priority:7}}},get big(){return{title:"Big",model:"big",view:{name:"span",classes:"text-big",priority:7}}},get huge(){return{title:"Huge",model:"huge",view:{name:"span",classes:"text-huge",priority:7}}}};function Ix(e){if(Rx(e)){return Nx(e)}const t=zx(e);if(t){return Nx(t)}if(e==="default"){return{model:undefined,title:"Default"}}if(Ox(e)){return}return Lx(e)}function Lx(e){if(typeof e==="number"||typeof e==="string"){e={title:String(e),model:`${parseFloat(e)}px`}}e.view={name:"span",styles:{"font-size":e.model}};return Nx(e)}function Nx(e){if(!e.view.priority){e.view.priority=7}return e}function zx(e){return Mx[e]||Mx[e.model]}function Rx(e){return typeof e==="object"&&e.title&&e.model&&e.view}function Ox(e){let t;if(typeof e==="object"){if(!e.model){throw new ss["b"]("font-size-invalid-definition: Provided font size definition is invalid.",null,e)}else{t=parseFloat(e.model)}}else{t=parseFloat(e)}return isNaN(t)}class Vx extends ok{static get pluginName(){return"FontSizeEditing"}constructor(e){super(e);e.config.define(vy,{options:["tiny","small","default","big","huge"],supportAllValues:false})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:vy});e.model.schema.setAttributeProperties(vy,{isFormatting:true,copyOnEnter:true});const t=e.config.get("fontSize.supportAllValues");const i=Px(this.editor.config.get("fontSize.options")).filter(e=>e.model);const n=Cy(vy,i);if(t){this._prepareAnyValueConverters(n)}else{e.conversion.attributeToElement(n)}e.commands.add(vy,new Ex(e))}_prepareAnyValueConverters(e){const t=this.editor;const i=e.model.values.filter(e=>!String(e).match(/[\d.]+[\w%]+/));if(i.length){throw new ss["b"]("font-size-invalid-use-of-named-presets: "+"If config.fontSize.supportAllValues is set to true, you need to use numerical values as font size options.",null,{presets:i})}t.conversion.for("downcast").attributeToElement({model:vy,view:(e,{writer:t})=>{if(!e){return}return t.createAttributeElement("span",{style:"font-size:"+e},{priority:7})}});t.conversion.for("upcast").attributeToAttribute({model:{key:vy,value:e=>e.getStyle("font-size")},view:{name:"span"}})}}var Dx='';var Bx=i(57);class jx extends ok{init(){const e=this.editor;const t=e.t;const i=this._getLocalizedOptions();const n=e.commands.get(vy);e.ui.componentFactory.add(vy,o=>{const r=jw(o);Hw(r,Fx(i,n));r.buttonView.set({label:t("Font Size"),icon:Dx,tooltip:true});r.extendTemplate({attributes:{class:["ck-font-size-dropdown"]}});r.bind("isEnabled").to(n);this.listenTo(r,"execute",t=>{e.execute(t.source.commandName,{value:t.source.commandParam});e.editing.view.focus()});return r})}_getLocalizedOptions(){const e=this.editor;const t=e.t;const i={Default:t("Default"),Tiny:t("Tiny"),Small:t("Small"),Big:t("Big"),Huge:t("Huge")};const n=Px(e.config.get(vy).options);return n.map(e=>{const t=i[e.title];if(t&&t!=e.title){e=Object.assign({},e,{title:t})}return e})}}function Fx(e,t){const i=new xs;for(const n of e){const e={type:"button",model:new Y_({commandName:vy,commandParam:n.model,label:n.title,class:"ck-fontsize-option",withText:true})};if(n.view&&n.view.styles){e.model.set("labelStyle",`font-size:${n.view.styles["font-size"]}`)}if(n.view&&n.view.classes){e.model.set("class",`${e.model.class} ${n.view.classes}`)}e.model.bind("isOn").to(t,"value",e=>e===n.model);i.add(e)}return i}class Hx extends ok{static get requires(){return[Vx,jx]}static get pluginName(){return"FontSize"}}class Ux extends sk{refresh(){const e=this.editor.model;const t=e.document;const i=ck(t.selection.getSelectedBlocks());this.value=!!i&&i.is("element","paragraph");this.isEnabled=!!i&&Wx(i,e.schema)}execute(e={}){const t=this.editor.model;const i=t.document;t.change(n=>{const o=(e.selection||i.selection).getSelectedBlocks();for(const e of o){if(!e.is("element","paragraph")&&Wx(e,t.schema)){n.rename(e,"paragraph")}}})}}function Wx(e,t){return t.checkChild(e.parent,"paragraph")&&!t.isObject(e)}class qx extends sk{execute(e){const t=this.editor.model;let i=e.position;t.change(e=>{const n=e.createElement("paragraph");if(!t.schema.checkChild(i.parent,n)){const o=t.schema.findAllowedParent(i,n);if(!o){return}i=e.split(i,o).position}t.insertContent(n,i);e.setSelection(n,"in")})}}class $x extends ok{static get pluginName(){return"Paragraph"}init(){const e=this.editor;const t=e.model;e.commands.add("paragraph",new Ux(e));e.commands.add("insertParagraph",new qx(e));t.schema.register("paragraph",{inheritAllFrom:"$block"});e.conversion.elementToElement({model:"paragraph",view:"p"});e.conversion.for("upcast").elementToElement({model:(e,{writer:t})=>{if(!$x.paragraphLikeElements.has(e.name)){return null}if(e.isEmpty){return null}return t.createElement("paragraph")},view:/.+/,converterPriority:"low"})}}$x.paragraphLikeElements=new Set(["blockquote","dd","div","dt","h1","h2","h3","h4","h5","h6","li","p","td","th"]);class Gx extends sk{constructor(e,t){super(e);this.modelElements=t}refresh(){const e=ck(this.editor.model.document.selection.getSelectedBlocks());this.value=!!e&&this.modelElements.includes(e.name)&&e.name;this.isEnabled=!!e&&this.modelElements.some(t=>Kx(e,t,this.editor.model.schema))}execute(e){const t=this.editor.model;const i=t.document;const n=e.value;t.change(e=>{const o=Array.from(i.selection.getSelectedBlocks()).filter(e=>Kx(e,n,t.schema));for(const t of o){if(!t.is("element",n)){e.rename(t,n)}}})}}function Kx(e,t,i){return i.checkChild(e.parent,t)&&!i.isObject(e)}const Yx="paragraph";class Zx extends ok{static get pluginName(){return"HeadingEditing"}constructor(e){super(e);e.config.define("heading",{options:[{model:"paragraph",title:"Paragraph",class:"ck-heading_paragraph"},{model:"heading1",view:"h2",title:"Heading 1",class:"ck-heading_heading1"},{model:"heading2",view:"h3",title:"Heading 2",class:"ck-heading_heading2"},{model:"heading3",view:"h4",title:"Heading 3",class:"ck-heading_heading3"}]})}static get requires(){return[$x]}init(){const e=this.editor;const t=e.config.get("heading.options");const i=[];for(const n of t){if(n.model!==Yx){e.model.schema.register(n.model,{inheritAllFrom:"$block"});e.conversion.elementToElement(n);i.push(n.model)}}this._addDefaultH1Conversion(e);e.commands.add("heading",new Gx(e,i))}afterInit(){const e=this.editor;const t=e.commands.get("enter");const i=e.config.get("heading.options");if(t){this.listenTo(t,"afterExecute",(t,n)=>{const o=e.model.document.selection.getFirstPosition().parent;const r=i.some(e=>o.is("element",e.model));if(r&&!o.is("element",Yx)&&o.childCount===0){n.writer.rename(o,Yx)}})}}_addDefaultH1Conversion(e){e.conversion.for("upcast").elementToElement({model:"heading1",view:"h1",converterPriority:os.get("low")+1})}}function Qx(e){const t=e.t;const i={Paragraph:t("Paragraph"),"Heading 1":t("Heading 1"),"Heading 2":t("Heading 2"),"Heading 3":t("Heading 3"),"Heading 4":t("Heading 4"),"Heading 5":t("Heading 5"),"Heading 6":t("Heading 6")};return e.config.get("heading.options").map(e=>{const t=i[e.title];if(t&&t!=e.title){e.title=t}return e})}var Jx=i(12);class Xx extends ok{init(){const e=this.editor;const t=e.t;const i=Qx(e);const n=t("Choose heading");const o=t("Heading");e.ui.componentFactory.add("heading",t=>{const r={};const s=new xs;const a=e.commands.get("heading");const c=e.commands.get("paragraph");const l=[a];for(const e of i){const t={type:"button",model:new Y_({label:e.title,class:e.class,withText:true})};if(e.model==="paragraph"){t.model.bind("isOn").to(c,"value");t.model.set("commandName","paragraph");l.push(c)}else{t.model.bind("isOn").to(a,"value",t=>t===e.model);t.model.set({commandName:"heading",commandValue:e.model})}s.add(t);r[e.model]=e.title}const d=jw(t);Hw(d,s);d.buttonView.set({isOn:false,withText:true,tooltip:o});d.extendTemplate({attributes:{class:["ck-heading-dropdown"]}});d.bind("isEnabled").toMany(l,"isEnabled",(...e)=>e.some(e=>e));d.buttonView.bind("label").to(a,"value",c,"value",(e,t)=>{const i=e||t&&"paragraph";return r[i]?r[i]:n});this.listenTo(d,"execute",t=>{e.execute(t.source.commandName,t.source.commandValue?{value:t.source.commandValue}:undefined);e.editing.view.focus()});return d})}}class eA extends ok{static get requires(){return[Zx,Xx]}static get pluginName(){return"Heading"}}class tA extends sk{refresh(){const e=this.editor.model;const t=e.document;this.value=t.selection.getAttribute("highlight");this.isEnabled=e.schema.checkAttributeInSelection(t.selection,"highlight")}execute(e={}){const t=this.editor.model;const i=t.document;const n=i.selection;const o=e.value;t.change(e=>{const i=t.schema.getValidRanges(n.getRanges(),"highlight");if(n.isCollapsed){const t=n.getFirstPosition();if(n.hasAttribute("highlight")){const i=e=>e.item.hasAttribute("highlight")&&e.item.getAttribute("highlight")===this.value;const n=t.getLastMatchingPosition(i,{direction:"backward"});const r=t.getLastMatchingPosition(i);const s=e.createRange(n,r);if(!o||this.value===o){e.removeAttribute("highlight",s);e.removeSelectionAttribute("highlight")}else{e.setAttribute("highlight",o,s);e.setSelectionAttribute("highlight",o)}}else if(o){e.setSelectionAttribute("highlight",o)}}else{for(const t of i){if(o){e.setAttribute("highlight",o,t)}else{e.removeAttribute("highlight",t)}}}})}}class iA extends ok{static get pluginName(){return"HighlightEditing"}constructor(e){super(e);e.config.define("highlight",{options:[{model:"yellowMarker",class:"marker-yellow",title:"Yellow marker",color:"var(--ck-highlight-marker-yellow)",type:"marker"},{model:"greenMarker",class:"marker-green",title:"Green marker",color:"var(--ck-highlight-marker-green)",type:"marker"},{model:"pinkMarker",class:"marker-pink",title:"Pink marker",color:"var(--ck-highlight-marker-pink)",type:"marker"},{model:"blueMarker",class:"marker-blue",title:"Blue marker",color:"var(--ck-highlight-marker-blue)",type:"marker"},{model:"redPen",class:"pen-red",title:"Red pen",color:"var(--ck-highlight-pen-red)",type:"pen"},{model:"greenPen",class:"pen-green",title:"Green pen",color:"var(--ck-highlight-pen-green)",type:"pen"}]})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:"highlight"});const t=e.config.get("highlight.options");e.conversion.attributeToElement(nA(t));e.commands.add("highlight",new tA(e))}}function nA(e){const t={model:{key:"highlight",values:[]},view:{}};for(const i of e){t.model.values.push(i.model);t.view[i.model]={name:"mark",classes:i.class}}return t}var oA='';var rA='';var sA=i(60);class aA extends ok{get localizedOptionTitles(){const e=this.editor.t;return{"Yellow marker":e("Yellow marker"),"Green marker":e("Green marker"),"Pink marker":e("Pink marker"),"Blue marker":e("Blue marker"),"Red pen":e("Red pen"),"Green pen":e("Green pen")}}static get pluginName(){return"HighlightUI"}init(){const e=this.editor.config.get("highlight.options");for(const t of e){this._addHighlighterButton(t)}this._addRemoveHighlightButton();this._addDropdown(e)}_addRemoveHighlightButton(){const e=this.editor.t;this._addButton("removeHighlight",e("Remove highlight"),wy)}_addHighlighterButton(e){const t=this.editor.commands.get("highlight");this._addButton("highlight:"+e.model,e.title,lA(e.type),e.model,i);function i(i){i.bind("isEnabled").to(t,"isEnabled");i.bind("isOn").to(t,"value",t=>t===e.model);i.iconView.fillColor=e.color;i.isToggleable=true}}_addButton(e,t,i,n,o=(()=>{})){const r=this.editor;r.ui.componentFactory.add(e,e=>{const s=new Ew(e);const a=this.localizedOptionTitles[t]?this.localizedOptionTitles[t]:t;s.set({label:a,icon:i,tooltip:true});s.on("execute",()=>{r.execute("highlight",{value:n});r.editing.view.focus()});o(s);return s})}_addDropdown(e){const t=this.editor;const i=t.t;const n=t.ui.componentFactory;const o=e[0];const r=e.reduce((e,t)=>{e[t.model]=t;return e},{});n.add("highlight",s=>{const a=t.commands.get("highlight");const c=jw(s,Q_);const l=c.buttonView;l.set({tooltip:i("Highlight"),lastExecuted:o.model,commandValue:o.model,isToggleable:true});l.bind("icon").to(a,"value",e=>lA(u(e,"type")));l.bind("color").to(a,"value",e=>u(e,"color"));l.bind("commandValue").to(a,"value",e=>u(e,"model"));l.bind("isOn").to(a,"value",e=>!!e);l.delegate("execute").to(c);const d=e.map(e=>{const t=n.create("highlight:"+e.model);this.listenTo(t,"execute",()=>c.buttonView.set({lastExecuted:e.model}));return t});c.bind("isEnabled").toMany(d,"isEnabled",(...e)=>e.some(e=>e));d.push(new aw);d.push(n.create("removeHighlight"));Fw(c,d);cA(c);c.toolbarView.ariaLabel=i("Text highlight toolbar");l.on("execute",()=>{t.execute("highlight",{value:l.commandValue});t.editing.view.focus()});function u(e,t){const i=!e||e===l.lastExecuted?l.lastExecuted:e;return r[i][t]}return c})}}function cA(e){const t=e.buttonView.actionView;t.iconView.bind("fillColor").to(e.buttonView,"color")}function lA(e){return e==="marker"?oA:rA}class dA extends ok{static get requires(){return[iA,aA]}static get pluginName(){return"Highlight"}}class uA{constructor(){this._stack=[]}add(e,t){const i=this._stack;const n=i[0];this._insertDescriptor(e);const o=i[0];if(n!==o&&!hA(n,o)){this.fire("change:top",{oldDescriptor:n,newDescriptor:o,writer:t})}}remove(e,t){const i=this._stack;const n=i[0];this._removeDescriptor(e);const o=i[0];if(n!==o&&!hA(n,o)){this.fire("change:top",{oldDescriptor:n,newDescriptor:o,writer:t})}}_insertDescriptor(e){const t=this._stack;const i=t.findIndex(t=>t.id===e.id);if(hA(e,t[i])){return}if(i>-1){t.splice(i,1)}let n=0;while(t[n]&&fA(t[n],e)){n++}t.splice(n,0,e)}_removeDescriptor(e){const t=this._stack;const i=t.findIndex(t=>t.id===e);if(i>-1){t.splice(i,1)}}}ys(uA,ds);function hA(e,t){return e&&t&&e.priority==t.priority&&mA(e.classes)==mA(t.classes)}function fA(e,t){if(e.priority>t.priority){return true}else if(e.prioritymA(t.classes)}function mA(e){return Array.isArray(e)?e.sort().join(","):e}var gA=i(62);const pA=tw("px");const bA=Vd.document.body;class wA extends Hb{constructor(e){super(e);const t=this.bindTemplate;this.set("top",0);this.set("left",0);this.set("position","arrow_nw");this.set("isVisible",false);this.set("withArrow",true);this.set("class");this.content=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-panel",t.to("position",e=>`ck-balloon-panel_${e}`),t.if("isVisible","ck-balloon-panel_visible"),t.if("withArrow","ck-balloon-panel_with-arrow"),t.to("class")],style:{top:t.to("top",pA),left:t.to("left",pA)}},children:this.content})}show(){this.isVisible=true}hide(){this.isVisible=false}attachTo(e){this.show();const t=wA.defaultPositions;const i=Object.assign({},{element:this.element,positions:[t.southArrowNorth,t.southArrowNorthMiddleWest,t.southArrowNorthMiddleEast,t.southArrowNorthWest,t.southArrowNorthEast,t.northArrowSouth,t.northArrowSouthMiddleWest,t.northArrowSouthMiddleEast,t.northArrowSouthWest,t.northArrowSouthEast],limiter:bA,fitInViewport:true},e);const n=wA._getOptimalPosition(i);const o=parseInt(n.left);const r=parseInt(n.top);const s=n.name;Object.assign(this,{top:r,left:o,position:s})}pin(e){this.unpin();this._pinWhenIsVisibleCallback=()=>{if(this.isVisible){this._startPinning(e)}else{this._stopPinning()}};this._startPinning(e);this.listenTo(this,"change:isVisible",this._pinWhenIsVisibleCallback)}unpin(){if(this._pinWhenIsVisibleCallback){this._stopPinning();this.stopListening(this,"change:isVisible",this._pinWhenIsVisibleCallback);this._pinWhenIsVisibleCallback=null;this.hide()}}_startPinning(e){this.attachTo(e);const t=kA(e.target);const i=e.limiter?kA(e.limiter):bA;this.listenTo(Vd.document,"scroll",(n,o)=>{const r=o.target;const s=t&&r.contains(t);const a=i&&r.contains(i);if(s||a||!t||!i){this.attachTo(e)}},{useCapture:true});this.listenTo(Vd.window,"resize",()=>{this.attachTo(e)})}_stopPinning(){this.stopListening(Vd.document,"scroll");this.stopListening(Vd.window,"resize")}}function kA(e){if(Kr(e)){return e}if(xh(e)){return e.commonAncestorContainer}if(typeof e=="function"){return kA(e())}return null}wA.arrowHorizontalOffset=25;wA.arrowVerticalOffset=10;wA._getOptimalPosition=gw;wA.defaultPositions={northWestArrowSouthWest:(e,t)=>({top:_A(e,t),left:e.left-wA.arrowHorizontalOffset,name:"arrow_sw"}),northWestArrowSouthMiddleWest:(e,t)=>({top:_A(e,t),left:e.left-t.width*.25-wA.arrowHorizontalOffset,name:"arrow_smw"}),northWestArrowSouth:(e,t)=>({top:_A(e,t),left:e.left-t.width/2,name:"arrow_s"}),northWestArrowSouthMiddleEast:(e,t)=>({top:_A(e,t),left:e.left-t.width*.75+wA.arrowHorizontalOffset,name:"arrow_sme"}),northWestArrowSouthEast:(e,t)=>({top:_A(e,t),left:e.left-t.width+wA.arrowHorizontalOffset,name:"arrow_se"}),northArrowSouthWest:(e,t)=>({top:_A(e,t),left:e.left+e.width/2-wA.arrowHorizontalOffset,name:"arrow_sw"}),northArrowSouthMiddleWest:(e,t)=>({top:_A(e,t),left:e.left+e.width/2-t.width*.25-wA.arrowHorizontalOffset,name:"arrow_smw"}),northArrowSouth:(e,t)=>({top:_A(e,t),left:e.left+e.width/2-t.width/2,name:"arrow_s"}),northArrowSouthMiddleEast:(e,t)=>({top:_A(e,t),left:e.left+e.width/2-t.width*.75+wA.arrowHorizontalOffset,name:"arrow_sme"}),northArrowSouthEast:(e,t)=>({top:_A(e,t),left:e.left+e.width/2-t.width+wA.arrowHorizontalOffset,name:"arrow_se"}),northEastArrowSouthWest:(e,t)=>({top:_A(e,t),left:e.right-wA.arrowHorizontalOffset,name:"arrow_sw"}),northEastArrowSouthMiddleWest:(e,t)=>({top:_A(e,t),left:e.right-t.width*.25-wA.arrowHorizontalOffset,name:"arrow_smw"}),northEastArrowSouth:(e,t)=>({top:_A(e,t),left:e.right-t.width/2,name:"arrow_s"}),northEastArrowSouthMiddleEast:(e,t)=>({top:_A(e,t),left:e.right-t.width*.75+wA.arrowHorizontalOffset,name:"arrow_sme"}),northEastArrowSouthEast:(e,t)=>({top:_A(e,t),left:e.right-t.width+wA.arrowHorizontalOffset,name:"arrow_se"}),southWestArrowNorthWest:(e,t)=>({top:vA(e,t),left:e.left-wA.arrowHorizontalOffset,name:"arrow_nw"}),southWestArrowNorthMiddleWest:(e,t)=>({top:vA(e,t),left:e.left-t.width*.25-wA.arrowHorizontalOffset,name:"arrow_nmw"}),southWestArrowNorth:(e,t)=>({top:vA(e,t),left:e.left-t.width/2,name:"arrow_n"}),southWestArrowNorthMiddleEast:(e,t)=>({top:vA(e,t),left:e.left-t.width*.75+wA.arrowHorizontalOffset,name:"arrow_nme"}),southWestArrowNorthEast:(e,t)=>({top:vA(e,t),left:e.left-t.width+wA.arrowHorizontalOffset,name:"arrow_ne"}),southArrowNorthWest:(e,t)=>({top:vA(e,t),left:e.left+e.width/2-wA.arrowHorizontalOffset,name:"arrow_nw"}),southArrowNorthMiddleWest:(e,t)=>({top:vA(e,t),left:e.left+e.width/2-t.width*.25-wA.arrowHorizontalOffset,name:"arrow_nmw"}),southArrowNorth:(e,t)=>({top:vA(e,t),left:e.left+e.width/2-t.width/2,name:"arrow_n"}),southArrowNorthMiddleEast:(e,t)=>({top:vA(e,t),left:e.left+e.width/2-t.width*.75+wA.arrowHorizontalOffset,name:"arrow_nme"}),southArrowNorthEast:(e,t)=>({top:vA(e,t),left:e.left+e.width/2-t.width+wA.arrowHorizontalOffset,name:"arrow_ne"}),southEastArrowNorthWest:(e,t)=>({top:vA(e,t),left:e.right-wA.arrowHorizontalOffset,name:"arrow_nw"}),southEastArrowNorthMiddleWest:(e,t)=>({top:vA(e,t),left:e.right-t.width*.25-wA.arrowHorizontalOffset,name:"arrow_nmw"}),southEastArrowNorth:(e,t)=>({top:vA(e,t),left:e.right-t.width/2,name:"arrow_n"}),southEastArrowNorthMiddleEast:(e,t)=>({top:vA(e,t),left:e.right-t.width*.75+wA.arrowHorizontalOffset,name:"arrow_nme"}),southEastArrowNorthEast:(e,t)=>({top:vA(e,t),left:e.right-t.width+wA.arrowHorizontalOffset,name:"arrow_ne"})};function _A(e,t){return e.top-t.height-wA.arrowVerticalOffset}function vA(e){return e.bottom+wA.arrowVerticalOffset}var yA='';const xA="widget-type-around";function AA(e,t,i){return e&&IA(e)&&!i.isInline(t)}function CA(e){return e.closest(".ck-widget__type-around__button")}function TA(e){return e.classList.contains("ck-widget__type-around__button_before")?"before":"after"}function SA(e,t){const i=e.closest(".ck-widget");return t.mapDomToView(i)}function EA(e){return e.getAttribute(xA)}const PA="ck-widget";const MA="ck-widget_selected";function IA(e){if(!e.is("element")){return false}return!!e.getCustomProperty("widget")}function LA(e,t,i={}){if(!e.is("containerElement")){throw new ss["b"]("widget-to-widget-wrong-element-type: The element passed to toWidget() must be a container element instance.",null,{element:e})}t.setAttribute("contenteditable","false",e);t.addClass(PA,e);t.setCustomProperty("widget",true,e);e.getFillerOffset=jA;if(i.label){zA(e,i.label,t)}if(i.hasSelectionHandle){FA(e,t)}NA(e,t,(e,t,i)=>i.addClass(n(t.classes),e),(e,t,i)=>i.removeClass(n(t.classes),e));return e;function n(e){return Array.isArray(e)?e:[e]}}function NA(e,t,i,n){const o=new uA;o.on("change:top",(t,o)=>{if(o.oldDescriptor){n(e,o.oldDescriptor,o.writer)}if(o.newDescriptor){i(e,o.newDescriptor,o.writer)}});t.setCustomProperty("addHighlight",(e,t,i)=>o.add(t,i),e);t.setCustomProperty("removeHighlight",(e,t,i)=>o.remove(t,i),e)}function zA(e,t,i){i.setCustomProperty("widgetLabel",t,e)}function RA(e){const t=e.getCustomProperty("widgetLabel");if(!t){return""}return typeof t=="function"?t():t}function OA(e,t){t.addClass(["ck-editor__editable","ck-editor__nested-editable"],e);t.setAttribute("contenteditable",e.isReadOnly?"false":"true",e);e.on("change:isReadOnly",(i,n,o)=>{t.setAttribute("contenteditable",o?"false":"true",e)});e.on("change:isFocused",(i,n,o)=>{if(o){t.addClass("ck-editor__nested-editable_focused",e)}else{t.removeClass("ck-editor__nested-editable_focused",e)}});return e}function VA(e,t){const i=e.getSelectedElement();if(i){const n=EA(e);if(n){return t.createPositionAt(i,n)}if(t.schema.isBlock(i)){return t.createPositionAfter(i)}}const n=e.getSelectedBlocks().next().value;if(n){if(n.isEmpty){return t.createPositionAt(n,0)}const i=t.createPositionAfter(n);if(e.focus.isTouching(i)){return i}return t.createPositionBefore(n)}return e.focus}function DA(e,t){return(i,n)=>{const{mapper:o,viewPosition:r}=n;const s=o.findMappedViewAncestor(r);if(!t(s)){return}const a=o.toModelElement(s);n.modelPosition=e.createPositionAt(a,r.isAtStart?"before":"after")}}function BA(e,t){const i=new Th(Vd.window);const n=i.getIntersection(e);const o=t.height+wA.arrowVerticalOffset;if(e.top-o>i.top||e.bottom+o{const i=t.createElement("horizontalLine");e.insertContent(i);let n=i.nextSibling;const o=n&&e.schema.checkChild(n,"$text");if(!o&&e.schema.checkChild(i.parent,"paragraph")){n=t.createElement("paragraph");e.insertContent(n,t.createPositionAfter(i))}if(n){t.setSelection(n,0)}})}}function UA(e){const t=e.schema;const i=e.document.selection;return WA(i,t,e)&&!qA(i,t)}function WA(e,t,i){const n=$A(e,i);return t.checkChild(n,"horizontalLine")}function qA(e,t){const i=e.getSelectedElement();return i&&t.isObject(i)}function $A(e,t){const i=VA(e,t);const n=i.parent;if(n.isEmpty&&!n.is("element","$root")){return n.parent}return n}var GA=i(64);class KA extends ok{static get pluginName(){return"HorizontalLineEditing"}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;t.register("horizontalLine",{isObject:true,allowWhere:"$block"});n.for("dataDowncast").elementToElement({model:"horizontalLine",view:(e,{writer:t})=>t.createEmptyElement("hr")});n.for("editingDowncast").elementToElement({model:"horizontalLine",view:(e,{writer:t})=>{const n=i("Horizontal line");const o=t.createContainerElement("div");const r=t.createEmptyElement("hr");t.addClass("ck-horizontal-line",o);t.setCustomProperty("hr",true,o);t.insert(t.createPositionAt(o,0),r);return YA(o,t,n)}});n.for("upcast").elementToElement({view:"hr",model:"horizontalLine"});e.commands.add("horizontalLine",new HA(e))}}function YA(e,t,i){t.setCustomProperty("horizontalLine",true,e);return LA(e,t,{label:i})}var ZA='';class QA extends ok{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("horizontalLine",i=>{const n=e.commands.get("horizontalLine");const o=new Ew(i);o.set({label:t("Horizontal line"),icon:ZA,tooltip:true});o.bind("isEnabled").to(n,"isEnabled");this.listenTo(o,"execute",()=>{e.execute("horizontalLine");e.editing.view.focus()});return o})}}class JA extends ok{static get requires(){return[KA,QA]}static get pluginName(){return"HorizontalLine"}}class XA extends Jd{observe(e){this.listenTo(e,"load",(e,t)=>{const i=t.target;if(i.tagName=="IMG"){this._fireEvents(t)}},{useCapture:true})}_fireEvents(e){if(this.isEnabled){this.document.fire("layoutChanged");this.document.fire("imageLoaded",e)}}}function eC(e,t,i){t.setCustomProperty("image",true,e);return LA(e,t,{label:n});function n(){const t=sC(e);const n=t.getAttribute("alt");return n?`${n} ${i}`:i}}function tC(e){return!!e.getCustomProperty("image")&&IA(e)}function iC(e){const t=e.getSelectedElement();if(t&&tC(t)){return t}return null}function nC(e){return!!e&&e.is("element","image")}function oC(e,t,i={}){const n=e.createElement("image",i);const o=VA(t.document.selection,t);t.insertContent(n,o);if(n.parent){e.setSelection(n,"on")}}function rC(e){const t=e.schema;const i=e.document.selection;return aC(i,t,e)&&!cC(i,t)&&lC(i)}function sC(e){const t=[];for(const i of e.getChildren()){t.push(i);if(i.is("element")){t.push(...i.getChildren())}}return t.find(e=>e.is("element","img"))}function aC(e,t,i){const n=dC(e,i);return t.checkChild(n,"image")}function cC(e,t){const i=e.getSelectedElement();return i&&t.isObject(i)}function lC(e){return[...e.focus.getAncestors()].every(e=>!e.is("element","image"))}function dC(e,t){const i=VA(e,t);const n=i.parent;if(n.isEmpty&&!n.is("element","$root")){return n.parent}return n}function uC(){return t=>{t.on("element:figure",e)};function e(e,t,i){if(!i.consumable.test(t.viewItem,{name:true,classes:"image"})){return}const n=sC(t.viewItem);if(!n||!n.hasAttribute("src")||!i.consumable.test(n,{name:true})){return}const o=i.convertItem(n,t.modelCursor);const r=ck(o.modelRange.getItems());if(!r){return}i.convertChildren(t.viewItem,r);i.updateConversionResult(r,t)}}function hC(){return t=>{t.on("attribute:srcset:image",e)};function e(e,t,i){if(!i.consumable.consume(t.item,e.name)){return}const n=i.writer;const o=i.mapper.toViewElement(t.item);const r=sC(o);if(t.attributeNewValue===null){const e=t.attributeOldValue;if(e.data){n.removeAttribute("srcset",r);n.removeAttribute("sizes",r);if(e.width){n.removeAttribute("width",r)}}}else{const e=t.attributeNewValue;if(e.data){n.setAttribute("srcset",e.data,r);n.setAttribute("sizes","100vw",r);if(e.width){n.setAttribute("width",e.width,r)}}}}}function fC(e){return i=>{i.on(`attribute:${e}:image`,t)};function t(e,t,i){if(!i.consumable.consume(t.item,e.name)){return}const n=i.writer;const o=i.mapper.toViewElement(t.item);const r=sC(o);n.setAttribute(t.attributeKey,t.attributeNewValue||"",r)}}class mC extends sk{refresh(){this.isEnabled=rC(this.editor.model)}execute(e){const t=this.editor.model;t.change(i=>{const n=Array.isArray(e.source)?e.source:[e.source];for(const e of n){oC(i,t,{src:e})}})}}class gC extends ok{static get pluginName(){return"ImageEditing"}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;e.editing.view.addObserver(XA);t.register("image",{isObject:true,isBlock:true,allowWhere:"$block",allowAttributes:["alt","src","srcset"]});n.for("dataDowncast").elementToElement({model:"image",view:(e,{writer:t})=>pC(t)});n.for("editingDowncast").elementToElement({model:"image",view:(e,{writer:t})=>eC(pC(t),t,i("image widget"))});n.for("downcast").add(fC("src")).add(fC("alt")).add(hC());n.for("upcast").elementToElement({view:{name:"img",attributes:{src:true}},model:(e,{writer:t})=>t.createElement("image",{src:e.getAttribute("src")})}).attributeToAttribute({view:{name:"img",key:"alt"},model:"alt"}).attributeToAttribute({view:{name:"img",key:"srcset"},model:{key:"srcset",value:e=>{const t={data:e.getAttribute("srcset")};if(e.hasAttribute("width")){t.width=e.getAttribute("width")}return t}}}).add(uC());e.commands.add("imageInsert",new mC(e))}}function pC(e){const t=e.createEmptyElement("img");const i=e.createContainerElement("figure",{class:"image"});e.insert(e.createPositionAt(i,0),t);return i}class bC extends eh{constructor(e){super(e);this.domEventType="mousedown"}onDomEvent(e){this.fire(e.type,e)}}var wC='\n';var kC=i(66);const _C=["before","after"];const vC=(new DOMParser).parseFromString(wC,"image/svg+xml").firstChild;const yC="ck-widget__type-around_disabled";class xC extends ok{static get pluginName(){return"WidgetTypeAround"}constructor(e){super(e);this._currentFakeCaretModelElement=null}init(){const e=this.editor;const t=e.editing.view;this.on("change:isEnabled",(i,n,o)=>{t.change(e=>{for(const i of t.document.roots){if(o){e.removeClass(yC,i)}else{e.addClass(yC,i)}}});if(!o){e.model.change(e=>{e.removeSelectionAttribute(xA)})}});this._enableTypeAroundUIInjection();this._enableInsertingParagraphsOnButtonClick();this._enableInsertingParagraphsOnEnterKeypress();this._enableInsertingParagraphsOnTypingKeystroke();this._enableTypeAroundFakeCaretActivationUsingKeyboardArrows();this._enableDeleteIntegration();this._enableInsertContentIntegration()}destroy(){this._currentFakeCaretModelElement=null}_insertParagraph(e,t){const i=this.editor;const n=i.editing.view;i.execute("insertParagraph",{position:i.model.createPositionAt(e,t)});n.focus();n.scrollToTheSelection()}_listenToIfEnabled(e,t,i,n){this.listenTo(e,t,(...e)=>{if(this.isEnabled){i(...e)}},n)}_insertParagraphAccordingToFakeCaretPosition(){const e=this.editor;const t=e.model;const i=t.document.selection;const n=EA(i);if(!n){return false}const o=i.getSelectedElement();this._insertParagraph(o,n);return true}_enableTypeAroundUIInjection(){const e=this.editor;const t=e.model.schema;const i=e.locale.t;const n={before:i("Insert paragraph before block"),after:i("Insert paragraph after block")};e.editing.downcastDispatcher.on("insert",(e,i,o)=>{const r=o.mapper.toViewElement(i.item);if(AA(r,i.item,t)){AC(o.writer,n,r)}},{priority:"low"})}_enableTypeAroundFakeCaretActivationUsingKeyboardArrows(){const e=this.editor;const t=e.model;const i=t.document.selection;const n=t.schema;const o=e.editing.view;this._listenToIfEnabled(o.document,"keydown",(e,t)=>{if(Dl(t.keyCode)){this._handleArrowKeyPress(e,t)}},{priority:os.get("high")+10});this._listenToIfEnabled(i,"change:range",(t,i)=>{if(!i.directChange){return}e.model.change(e=>{e.removeSelectionAttribute(xA)})});this._listenToIfEnabled(t.document,"change:data",()=>{const t=i.getSelectedElement();if(t){const i=e.editing.mapper.toViewElement(t);if(AA(i,t,n)){return}}e.model.change(e=>{e.removeSelectionAttribute(xA)})});this._listenToIfEnabled(e.editing.downcastDispatcher,"selection",(e,t,i)=>{const o=i.writer;if(this._currentFakeCaretModelElement){const e=i.mapper.toViewElement(this._currentFakeCaretModelElement);if(e){o.removeClass(_C.map(r),e);this._currentFakeCaretModelElement=null}}const s=t.selection.getSelectedElement();if(!s){return}const a=i.mapper.toViewElement(s);if(!AA(a,s,n)){return}const c=EA(t.selection);if(!c){return}o.addClass(r(c),a);this._currentFakeCaretModelElement=s});this._listenToIfEnabled(e.ui.focusTracker,"change:isFocused",(t,i,n)=>{if(!n){e.model.change(e=>{e.removeSelectionAttribute(xA)})}});function r(e){return`ck-widget_type-around_show-fake-caret_${e}`}}_handleArrowKeyPress(e,t){const i=this.editor;const n=i.model;const o=n.document.selection;const r=n.schema;const s=i.editing.view;const a=t.keyCode;const c=jl(a,i.locale.contentLanguageDirection);const l=s.document.selection.getSelectedElement();const d=i.editing.mapper.toModelElement(l);let u;if(AA(l,d,r)){u=this._handleArrowKeyPressOnSelectedWidget(c)}else if(o.isCollapsed){u=this._handleArrowKeyPressWhenSelectionNextToAWidget(c)}if(u){t.preventDefault();e.stop()}}_handleArrowKeyPressOnSelectedWidget(e){const t=this.editor;const i=t.model;const n=i.document.selection;const o=EA(n);return i.change(t=>{if(o){const i=o===(e?"after":"before");if(!i){t.removeSelectionAttribute(xA);return true}}else{t.setSelectionAttribute(xA,e?"after":"before");return true}return false})}_handleArrowKeyPressWhenSelectionNextToAWidget(e){const t=this.editor;const i=t.model;const n=i.schema;const o=t.plugins.get("Widget");const r=o._getObjectElementNextToSelection(e);const s=t.editing.mapper.toViewElement(r);if(AA(s,r,n)){i.change(t=>{o._setSelectionOverElement(r);t.setSelectionAttribute(xA,e?"before":"after")});return true}return false}_enableInsertingParagraphsOnButtonClick(){const e=this.editor;const t=e.editing.view;this._listenToIfEnabled(t.document,"mousedown",(i,n)=>{const o=CA(n.domTarget);if(!o){return}const r=TA(o);const s=SA(o,t.domConverter);const a=e.editing.mapper.toModelElement(s);this._insertParagraph(a,r);n.preventDefault();i.stop()})}_enableInsertingParagraphsOnEnterKeypress(){const e=this.editor;const t=e.editing.view;this._listenToIfEnabled(t.document,"enter",(i,n)=>{const o=t.document.selection.getSelectedElement();const r=e.editing.mapper.toModelElement(o);const s=e.model.schema;let a;if(this._insertParagraphAccordingToFakeCaretPosition()){a=true}else if(AA(o,r,s)){this._insertParagraph(r,n.isSoft?"before":"after");a=true}if(a){n.preventDefault();i.stop()}})}_enableInsertingParagraphsOnTypingKeystroke(){const e=this.editor;const t=e.editing.view;const i=[zl.enter,zl.delete,zl.backspace];this._listenToIfEnabled(t.document,"keydown",(e,t)=>{if(!i.includes(t.keyCode)&&!Sv(t)){this._insertParagraphAccordingToFakeCaretPosition()}},{priority:os.get("high")+1})}_enableDeleteIntegration(){const e=this.editor;const t=e.editing.view;const i=e.model;const n=i.schema;this._listenToIfEnabled(t.document,"delete",(t,o)=>{const r=EA(i.document.selection);if(!r){return}const s=o.direction;const a=i.document.selection.getSelectedElement();const c=r==="before";const l=s=="forward";const d=c===l;if(d){e.execute("delete",{selection:i.createSelection(a,"on")})}else{const t=n.getNearestSelectionRange(i.createPositionAt(a,r),s);if(t){if(!t.isCollapsed){i.change(i=>{i.setSelection(t);e.execute(l?"forwardDelete":"delete")})}else{const o=i.createSelection(t.start);i.modifySelection(o,{direction:s});if(!o.focus.isEqual(t.start)){i.change(i=>{i.setSelection(t);e.execute(l?"forwardDelete":"delete")})}else{const e=SC(n,t.start.parent);i.deleteContent(i.createSelection(e,"on"),{doNotAutoparagraph:true})}}}}o.preventDefault();t.stop()},{priority:os.get("high")+1})}_enableInsertContentIntegration(){const e=this.editor;const t=this.editor.model;const i=t.document.selection;this._listenToIfEnabled(e.model,"insertContent",(e,[n,o])=>{if(o&&!o.is("documentSelection")){return}const r=EA(i);if(!r){return}e.stop();return t.change(e=>{const o=i.getSelectedElement();const s=t.createPositionAt(o,r);const a=e.createSelection(s);const c=t.insertContent(n,a);e.setSelection(a);return c})},{priority:"high"})}}function AC(e,t,i){const n=e.createUIElement("div",{class:"ck ck-reset_all ck-widget__type-around"},(function(e){const i=this.toDomElement(e);CC(i,t);TC(i);return i}));e.insert(e.createPositionAt(i,"end"),n)}function CC(e,t){for(const i of _C){const n=new gb({tag:"div",attributes:{class:["ck","ck-widget__type-around__button",`ck-widget__type-around__button_${i}`],title:t[i]},children:[e.ownerDocument.importNode(vC,true)]});e.appendChild(n.render())}}function TC(e){const t=new gb({tag:"div",attributes:{class:["ck","ck-widget__type-around__fake-caret"]}});e.appendChild(t.render())}function SC(e,t){let i=t;for(const n of t.getAncestors({parentFirst:true})){if(n.childCount>1||e.isLimit(n)){break}i=n}return i}var EC=i(68);function PC(e){const t=e.model;return(i,n)=>{const o=n.keyCode==zl.arrowup;const r=n.keyCode==zl.arrowdown;const s=n.shiftKey;const a=t.document.selection;if(!o&&!r){return}const c=r;if(s&&zC(a,c)){return}const l=MC(e,a,c);if(!l||l.isCollapsed){return}if(NC(e,l,c)){t.change(e=>{const i=c?l.end:l.start;if(s){const n=t.createSelection(a.anchor);n.setFocus(i);e.setSelection(n)}else{e.setSelection(i)}});i.stop();n.preventDefault();n.stopPropagation()}}}function MC(e,t,i){const n=e.model;if(i){const e=t.isCollapsed?t.focus:t.getLastPosition();const i=IC(n,e,"forward");if(!i){return null}const o=n.createRange(e,i);const r=LC(n.schema,o,"backward");if(r&&e.isBefore(r)){return n.createRange(e,r)}return null}else{const e=t.isCollapsed?t.focus:t.getFirstPosition();const i=IC(n,e,"backward");if(!i){return null}const o=n.createRange(i,e);const r=LC(n.schema,o,"forward");if(r&&e.isAfter(r)){return n.createRange(r,e)}return null}}function IC(e,t,i){const n=e.schema;const o=e.createRangeIn(t.root);const r=i=="forward"?"elementStart":"elementEnd";for(const{previousPosition:e,item:s,type:a}of o.getWalker({startPosition:t,direction:i})){if(n.isLimit(s)&&!n.isInline(s)){return e}if(a==r&&n.isBlock(s)){return null}}return null}function LC(e,t,i){const n=i=="backward"?t.end:t.start;if(e.checkChild(n,"$text")){return n}for(const{nextPosition:n}of t.getWalker({direction:i})){if(e.checkChild(n,"$text")){return n}}}function NC(e,t,i){const n=e.model;const o=e.view.domConverter;if(i){const e=n.createSelection(t.start);n.modifySelection(e);if(!e.focus.isAtEnd&&!t.start.isEqual(e.focus)){t=n.createRange(e.focus,t.end)}}const r=e.mapper.toViewRange(t);const s=o.viewRangeToDom(r);const a=Th.getDomRangeRects(s);let c;for(const e of a){if(c===undefined){c=Math.round(e.bottom);continue}if(Math.round(e.top)>=c){return false}c=Math.max(c,Math.round(e.bottom))}return true}function zC(e,t){return!e.isCollapsed&&e.isBackward==t}class RC extends ok{static get pluginName(){return"Widget"}static get requires(){return[xC]}init(){const e=this.editor.editing.view;const t=e.document;this._previouslySelected=new Set;this.editor.editing.downcastDispatcher.on("selection",(e,t,i)=>{this._clearPreviouslySelectedWidgets(i.writer);const n=i.writer;const o=n.document.selection;const r=o.getSelectedElement();let s=null;for(const e of o.getRanges()){for(const t of e){const e=t.item;if(IA(e)&&!VC(e,s)){n.addClass(MA,e);this._previouslySelected.add(e);s=e;if(e==r){n.setSelection(o.getRanges(),{fake:true,label:RA(r)})}}}}},{priority:"low"});e.addObserver(bC);this.listenTo(t,"mousedown",(...e)=>this._onMousedown(...e));this.listenTo(t,"keydown",(...e)=>{this._handleSelectionChangeOnArrowKeyPress(...e)},{priority:"high"});this.listenTo(t,"keydown",(...e)=>{this._preventDefaultOnArrowKeyPress(...e)},{priority:os.get("high")-20});this.listenTo(t,"keydown",PC(this.editor.editing));this.listenTo(t,"delete",(e,t)=>{if(this._handleDelete(t.direction=="forward")){t.preventDefault();e.stop()}},{priority:"high"})}_onMousedown(e,t){const i=this.editor;const n=i.editing.view;const o=n.document;let r=t.target;if(OC(r)){if((Tl.isSafari||Tl.isGecko)&&t.domEvent.detail>=3){const e=i.editing.mapper;const n=r.is("attributeElement")?r.findAncestor(e=>!e.is("attributeElement")):r;const o=e.toModelElement(n);t.preventDefault();this.editor.model.change(e=>{e.setSelection(o,"in")})}return}if(!IA(r)){r=r.findAncestor(IA);if(!r){return}}t.preventDefault();if(!o.isFocused){n.focus()}const s=i.editing.mapper.toModelElement(r);this._setSelectionOverElement(s)}_handleSelectionChangeOnArrowKeyPress(e,t){const i=t.keyCode;if(!Dl(i)){return}const n=this.editor.model;const o=n.schema;const r=n.document.selection;const s=r.getSelectedElement();const a=jl(i,this.editor.locale.contentLanguageDirection);if(s&&o.isObject(s)){const i=a?r.getLastPosition():r.getFirstPosition();const s=o.getNearestSelectionRange(i,a?"forward":"backward");if(s){n.change(e=>{e.setSelection(s)});t.preventDefault();e.stop()}return}if(!r.isCollapsed){return}const c=this._getObjectElementNextToSelection(a);if(c&&o.isObject(c)){this._setSelectionOverElement(c);t.preventDefault();e.stop()}}_preventDefaultOnArrowKeyPress(e,t){const i=t.keyCode;if(!Dl(i)){return}const n=this.editor.model;const o=n.schema;const r=n.document.selection.getSelectedElement();if(r&&o.isObject(r)){t.preventDefault();e.stop()}}_handleDelete(e){if(this.editor.isReadOnly){return}const t=this.editor.model.document;const i=t.selection;if(!i.isCollapsed){return}const n=this._getObjectElementNextToSelection(e);if(n){this.editor.model.change(e=>{let t=i.anchor.parent;while(t.isEmpty){const i=t;t=i.parent;e.remove(i)}this._setSelectionOverElement(n)});return true}}_setSelectionOverElement(e){this.editor.model.change(t=>{t.setSelection(t.createRangeOn(e))})}_getObjectElementNextToSelection(e){const t=this.editor.model;const i=t.schema;const n=t.document.selection;const o=t.createSelection(n);t.modifySelection(o,{direction:e?"forward":"backward"});const r=e?o.focus.nodeBefore:o.focus.nodeAfter;if(!!r&&i.isObject(r)){return r}return null}_clearPreviouslySelectedWidgets(e){for(const t of this._previouslySelected){e.removeClass(MA,t)}this._previouslySelected.clear()}}function OC(e){while(e){if(e.is("editableElement")&&!e.is("rootElement")){return true}if(IA(e)){return false}e=e.parent}return false}function VC(e,t){if(!t){return false}return Array.from(e.getAncestors()).includes(t)}class DC extends sk{refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=nC(e);if(nC(e)&&e.hasAttribute("alt")){this.value=e.getAttribute("alt")}else{this.value=false}}execute(e){const t=this.editor.model;const i=t.document.selection.getSelectedElement();t.change(t=>{t.setAttribute("alt",e.newValue,i)})}}class BC extends ok{static get pluginName(){return"ImageTextAlternativeEditing"}init(){this.editor.commands.add("imageTextAlternative",new DC(this.editor))}}var jC=i(70);class FC extends Hb{constructor(e,t){super(e);const i=`ck-labeled-field-view-${is()}`;const n=`ck-labeled-field-view-status-${is()}`;this.fieldView=t(this,i,n);this.set("label");this.set("isEnabled",true);this.set("errorText",null);this.set("infoText",null);this.set("class");this.labelView=this._createLabelView(i);this.statusView=this._createStatusView(n);this.bind("_statusText").to(this,"errorText",this,"infoText",(e,t)=>e||t);const o=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view",o.to("class"),o.if("isEnabled","ck-disabled",e=>!e)]},children:[this.labelView,this.fieldView,this.statusView]})}_createLabelView(e){const t=new Qb(this.locale);t.for=e;t.bind("text").to(this,"label");return t}_createStatusView(e){const t=new Hb(this.locale);const i=this.bindTemplate;t.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view__status",i.if("errorText","ck-labeled-field-view__status_error"),i.if("_statusText","ck-hidden",e=>!e)],id:e,role:i.if("errorText","alert")},children:[{text:i.to("_statusText")}]});return t}focus(){this.fieldView.focus()}}var HC=i(72);class UC extends Hb{constructor(e){super(e);this.set("value");this.set("id");this.set("placeholder");this.set("isReadOnly",false);this.set("hasError",false);this.set("ariaDescribedById");const t=this.bindTemplate;this.setTemplate({tag:"input",attributes:{type:"text",class:["ck","ck-input","ck-input-text",t.if("hasError","ck-error")],id:t.to("id"),placeholder:t.to("placeholder"),readonly:t.to("isReadOnly"),"aria-invalid":t.if("hasError",true),"aria-describedby":t.to("ariaDescribedById")},on:{input:t.to("input")}})}render(){super.render();const e=e=>{this.element.value=!e&&e!==0?"":e};e(this.value);this.on("change:value",(t,i,n)=>{e(n)})}select(){this.element.select()}focus(){this.element.focus()}}function WC(e,t,i){const n=new UC(e.locale);n.set({id:t,ariaDescribedById:i});n.bind("isReadOnly").to(e,"isEnabled",e=>!e);n.bind("hasError").to(e,"errorText",e=>!!e);n.on("input",()=>{e.errorText=null});return n}function qC(e,t,i){const n=jw(e.locale);n.set({id:t,ariaDescribedById:i});n.bind("isEnabled").to(e);return n}function $C({view:e}){e.listenTo(e.element,"submit",(t,i)=>{i.preventDefault();e.fire("submit")},{useCapture:true})}var GC='';var KC='';var YC=i(74);class ZC extends Hb{constructor(e){super(e);const t=this.locale.t;this.focusTracker=new Zp;this.keystrokes=new Vp;this.labeledInput=this._createLabeledInputView();this.saveButtonView=this._createButton(t("Save"),GC,"ck-button-save");this.saveButtonView.type="submit";this.cancelButtonView=this._createButton(t("Cancel"),KC,"ck-button-cancel","cancel");this._focusables=new hb;this._focusCycler=new rw({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this.setTemplate({tag:"form",attributes:{class:["ck","ck-text-alternative-form"],tabindex:"-1"},children:[this.labeledInput,this.saveButtonView,this.cancelButtonView]})}render(){super.render();this.keystrokes.listenTo(this.element);$C({view:this});[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)})}_createButton(e,t,i,n){const o=new Ew(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:i}});if(n){o.delegate("execute").to(this,n)}return o}_createLabeledInputView(){const e=this.locale.t;const t=new FC(this.locale,WC);t.label=e("Text alternative");t.fieldView.placeholder=e("Text alternative");return t}}var QC='';var JC='';var XC=i(76);var eT=i(78);const tT=tw("px");class iT extends ok{static get pluginName(){return"ContextualBalloon"}constructor(e){super(e);this.positionLimiter=()=>{const e=this.editor.editing.view;const t=e.document;const i=t.selection.editableElement;if(i){return e.domConverter.mapViewToDom(i.root)}return null};this.set("visibleView",null);this.view=new wA(e.locale);e.ui.view.body.add(this.view);e.ui.focusTracker.add(this.view.element);this._viewToStack=new Map;this._idToStack=new Map;this.set("_numberOfStacks",0);this.set("_singleViewMode",false);this._rotatorView=this._createRotatorView();this._fakePanelsView=this._createFakePanelsView()}hasView(e){return Array.from(this._viewToStack.keys()).includes(e)}add(e){if(this.hasView(e.view)){throw new ss["b"]("contextualballoon-add-view-exist: Cannot add configuration of the same view twice.",[this,e])}const t=e.stackId||"main";if(!this._idToStack.has(t)){this._idToStack.set(t,new Map([[e.view,e]]));this._viewToStack.set(e.view,this._idToStack.get(t));this._numberOfStacks=this._idToStack.size;if(!this._visibleStack||e.singleViewMode){this.showStack(t)}return}const i=this._idToStack.get(t);if(e.singleViewMode){this.showStack(t)}i.set(e.view,e);this._viewToStack.set(e.view,i);if(i===this._visibleStack){this._showView(e)}}remove(e){if(!this.hasView(e)){throw new ss["b"]("contextualballoon-remove-view-not-exist: Cannot remove the configuration of a non-existent view.",[this,e])}const t=this._viewToStack.get(e);if(this._singleViewMode&&this.visibleView===e){this._singleViewMode=false}if(this.visibleView===e){if(t.size===1){if(this._idToStack.size>1){this._showNextStack()}else{this.view.hide();this.visibleView=null;this._rotatorView.hideView()}}else{this._showView(Array.from(t.values())[t.size-2])}}if(t.size===1){this._idToStack.delete(this._getStackId(t));this._numberOfStacks=this._idToStack.size}else{t.delete(e)}this._viewToStack.delete(e)}updatePosition(e){if(e){this._visibleStack.get(this.visibleView).position=e}this.view.pin(this._getBalloonPosition());this._fakePanelsView.updatePosition()}showStack(e){this.visibleStack=e;const t=this._idToStack.get(e);if(!t){throw new ss["b"]("contextualballoon-showstack-stack-not-exist: Cannot show a stack that does not exist.",this)}if(this._visibleStack===t){return}this._showView(Array.from(t.values()).pop())}get _visibleStack(){return this._viewToStack.get(this.visibleView)}_getStackId(e){const t=Array.from(this._idToStack.entries()).find(t=>t[1]===e);return t[0]}_showNextStack(){const e=Array.from(this._idToStack.values());let t=e.indexOf(this._visibleStack)+1;if(!e[t]){t=0}this.showStack(this._getStackId(e[t]))}_showPrevStack(){const e=Array.from(this._idToStack.values());let t=e.indexOf(this._visibleStack)-1;if(!e[t]){t=e.length-1}this.showStack(this._getStackId(e[t]))}_createRotatorView(){const e=new nT(this.editor.locale);const t=this.editor.locale.t;this.view.content.add(e);e.bind("isNavigationVisible").to(this,"_numberOfStacks",this,"_singleViewMode",(e,t)=>!t&&e>1);e.on("change:isNavigationVisible",()=>this.updatePosition(),{priority:"low"});e.bind("counter").to(this,"visibleView",this,"_numberOfStacks",(e,i)=>{if(i<2){return""}const n=Array.from(this._idToStack.values()).indexOf(this._visibleStack)+1;return t("%0 of %1",[n,i])});e.buttonNextView.on("execute",()=>{if(e.focusTracker.isFocused){this.editor.editing.view.focus()}this._showNextStack()});e.buttonPrevView.on("execute",()=>{if(e.focusTracker.isFocused){this.editor.editing.view.focus()}this._showPrevStack()});return e}_createFakePanelsView(){const e=new oT(this.editor.locale,this.view);e.bind("numberOfPanels").to(this,"_numberOfStacks",this,"_singleViewMode",(e,t)=>{const i=!t&&e>=2;return i?Math.min(e-1,2):0});e.listenTo(this.view,"change:top",()=>e.updatePosition());e.listenTo(this.view,"change:left",()=>e.updatePosition());this.editor.ui.view.body.add(e);return e}_showView({view:e,balloonClassName:t="",withArrow:i=true,singleViewMode:n=false}){this.view.class=t;this.view.withArrow=i;this._rotatorView.showView(e);this.visibleView=e;this.view.pin(this._getBalloonPosition());this._fakePanelsView.updatePosition();if(n){this._singleViewMode=true}}_getBalloonPosition(){let e=Array.from(this._visibleStack.values()).pop().position;if(e&&!e.limiter){e=Object.assign({},e,{limiter:this.positionLimiter})}return e}}class nT extends Hb{constructor(e){super(e);const t=e.t;const i=this.bindTemplate;this.set("isNavigationVisible",true);this.focusTracker=new Zp;this.buttonPrevView=this._createButtonView(t("Previous"),QC);this.buttonNextView=this._createButtonView(t("Next"),JC);this.content=this.createCollection();this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-rotator"],"z-index":"-1"},children:[{tag:"div",attributes:{class:["ck-balloon-rotator__navigation",i.to("isNavigationVisible",e=>e?"":"ck-hidden")]},children:[this.buttonPrevView,{tag:"span",attributes:{class:["ck-balloon-rotator__counter"]},children:[{text:i.to("counter")}]},this.buttonNextView]},{tag:"div",attributes:{class:"ck-balloon-rotator__content"},children:this.content}]})}render(){super.render();this.focusTracker.add(this.element)}showView(e){this.hideView();this.content.add(e)}hideView(){this.content.clear()}_createButtonView(e,t){const i=new Ew(this.locale);i.set({label:e,icon:t,tooltip:true});return i}}class oT extends Hb{constructor(e,t){super(e);const i=this.bindTemplate;this.set("top",0);this.set("left",0);this.set("height",0);this.set("width",0);this.set("numberOfPanels",0);this.content=this.createCollection();this._balloonPanelView=t;this.setTemplate({tag:"div",attributes:{class:["ck-fake-panel",i.to("numberOfPanels",e=>e?"":"ck-hidden")],style:{top:i.to("top",tT),left:i.to("left",tT),width:i.to("width",tT),height:i.to("height",tT)}},children:this.content});this.on("change:numberOfPanels",(e,t,i,n)=>{if(i>n){this._addPanels(i-n)}else{this._removePanels(n-i)}this.updatePosition()})}_addPanels(e){while(e--){const e=new Hb;e.setTemplate({tag:"div"});this.content.add(e);this.registerChild(e)}}_removePanels(e){while(e--){const e=this.content.last;this.content.remove(e);this.deregisterChild(e);e.destroy()}}updatePosition(){if(this.numberOfPanels){const{top:e,left:t}=this._balloonPanelView;const{width:i,height:n}=new Th(this._balloonPanelView.element);Object.assign(this,{top:e,left:t,width:i,height:n})}}}var rT='';function sT(e){const t=e.plugins.get("ContextualBalloon");if(iC(e.editing.view.document.selection)){const i=aT(e);t.updatePosition(i)}}function aT(e){const t=e.editing.view;const i=wA.defaultPositions;return{target:t.domConverter.viewToDom(t.document.selection.getSelectedElement()),positions:[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast]}}class cT extends ok{static get requires(){return[iT]}static get pluginName(){return"ImageTextAlternativeUI"}init(){this._createButton();this._createForm()}destroy(){super.destroy();this._form.destroy()}_createButton(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("imageTextAlternative",i=>{const n=e.commands.get("imageTextAlternative");const o=new Ew(i);o.set({label:t("Change image text alternative"),icon:rT,tooltip:true});o.bind("isEnabled").to(n,"isEnabled");this.listenTo(o,"execute",()=>{this._showForm()});return o})}_createForm(){const e=this.editor;const t=e.editing.view;const i=t.document;this._balloon=this.editor.plugins.get("ContextualBalloon");this._form=new ZC(e.locale);this._form.render();this.listenTo(this._form,"submit",()=>{e.execute("imageTextAlternative",{newValue:this._form.labeledInput.fieldView.element.value});this._hideForm(true)});this.listenTo(this._form,"cancel",()=>{this._hideForm(true)});this._form.keystrokes.set("Esc",(e,t)=>{this._hideForm(true);t()});this.listenTo(e.ui,"update",()=>{if(!iC(i.selection)){this._hideForm(true)}else if(this._isVisible){sT(e)}});Vw({emitter:this._form,activator:()=>this._isVisible,contextElements:[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible){return}const e=this.editor;const t=e.commands.get("imageTextAlternative");const i=this._form.labeledInput;if(!this._isInBalloon){this._balloon.add({view:this._form,position:aT(e)})}i.fieldView.value=i.fieldView.element.value=t.value||"";this._form.labeledInput.fieldView.select()}_hideForm(e){if(!this._isInBalloon){return}if(this._form.focusTracker.isFocused){this._form.saveButtonView.focus()}this._balloon.remove(this._form);if(e){this.editor.editing.view.focus()}}get _isVisible(){return this._balloon.visibleView===this._form}get _isInBalloon(){return this._balloon.hasView(this._form)}}class lT extends ok{static get requires(){return[BC,cT]}static get pluginName(){return"ImageTextAlternative"}}var dT=i(80);class uT extends ok{static get requires(){return[gC,RC,lT]}static get pluginName(){return"Image"}}function hT(e,t){return i=>{const n=i.createEditableElement("figcaption");i.setCustomProperty("imageCaption",true,n);ib({view:e,element:n,text:t});return OA(n,i)}}function fT(e){return!!e.getCustomProperty("imageCaption")}function mT(e){for(const t of e.getChildren()){if(!!t&&t.is("element","caption")){return t}}return null}function gT(e){const t=e.parent;if(e.name=="figcaption"&&t&&t.name=="figure"&&t.hasClass("image")){return{name:true}}return null}class pT extends ok{static get pluginName(){return"ImageCaptionEditing"}init(){const e=this.editor;const t=e.editing.view;const i=e.model.schema;const n=e.data;const o=e.editing;const r=e.t;i.register("caption",{allowIn:"image",allowContentOf:"$block",isLimit:true});e.model.document.registerPostFixer(e=>this._insertMissingModelCaptionElement(e));e.conversion.for("upcast").elementToElement({view:gT,model:"caption"});const s=e=>e.createContainerElement("figcaption");n.downcastDispatcher.on("insert:caption",bT(s,false));const a=hT(t,r("Enter image caption"));o.downcastDispatcher.on("insert:caption",bT(a));o.downcastDispatcher.on("insert",this._fixCaptionVisibility(e=>e.item),{priority:"high"});o.downcastDispatcher.on("remove",this._fixCaptionVisibility(e=>e.position.parent),{priority:"high"});t.document.registerPostFixer(e=>this._updateCaptionVisibility(e))}_updateCaptionVisibility(e){const t=this.editor.editing.mapper;const i=this._lastSelectedCaption;let n;const o=this.editor.model.document.selection;const r=o.getSelectedElement();if(r&&r.is("element","image")){const e=mT(r);n=t.toViewElement(e)}const s=o.getFirstPosition();const a=kT(s.parent);if(a){n=t.toViewElement(a)}if(n){if(i){if(i===n){return vT(n,e)}else{_T(i,e);this._lastSelectedCaption=n;return vT(n,e)}}else{this._lastSelectedCaption=n;return vT(n,e)}}else{if(i){const t=_T(i,e);this._lastSelectedCaption=null;return t}else{return false}}}_fixCaptionVisibility(e){return(t,i,n)=>{const o=e(i);const r=kT(o);const s=this.editor.editing.mapper;const a=n.writer;if(r){const e=s.toViewElement(r);if(e){if(r.childCount){a.removeClass("ck-hidden",e)}else{a.addClass("ck-hidden",e)}}}}}_insertMissingModelCaptionElement(e){const t=this.editor.model;const i=t.document.differ.getChanges();const n=[];for(const e of i){if(e.type=="insert"&&e.name!="$text"){const i=e.position.nodeAfter;if(i.is("element","image")&&!mT(i)){n.push(i)}if(!i.is("element","image")&&i.childCount){for(const e of t.createRangeIn(i).getItems()){if(e.is("element","image")&&!mT(e)){n.push(e)}}}}}for(const t of n){e.appendElement("caption",t)}return!!n.length}}function bT(e,t=true){return(i,n,o)=>{const r=n.item;if(!r.childCount&&!t){return}if(nC(r.parent)){if(!o.consumable.consume(n.item,"insert")){return}const t=o.mapper.toViewElement(n.range.start.parent);const i=e(o.writer);const s=o.writer;if(!r.childCount){s.addClass("ck-hidden",i)}wT(i,n.item,t,o)}}}function wT(e,t,i,n){const o=n.writer.createPositionAt(i,"end");n.writer.insert(o,e);n.mapper.bindElements(t,e)}function kT(e){const t=e.getAncestors({includeSelf:true});const i=t.find(e=>e.name=="caption");if(i&&i.parent&&i.parent.name=="image"){return i}return null}function _T(e,t){if(!e.childCount&&!e.hasClass("ck-hidden")){t.addClass("ck-hidden",e);return true}return false}function vT(e,t){if(e.hasClass("ck-hidden")){t.removeClass("ck-hidden",e);return true}return false}var yT=i(82);class xT extends ok{static get requires(){return[pT]}static get pluginName(){return"ImageCaption"}}class AT extends sk{refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=nC(e);if(!e||!e.hasAttribute("width")){this.value=null}else{this.value={width:e.getAttribute("width"),height:null}}}execute(e){const t=this.editor.model;const i=t.document.selection.getSelectedElement();this.value={width:e.width,height:null};if(i){t.change(t=>{t.setAttribute("width",e.width,i)})}}}class CT extends ok{static get pluginName(){return"ImageResizeEditing"}constructor(e){super(e);e.config.define("image",{resizeUnit:"%",resizeOptions:[{name:"imageResize:original",value:null,icon:"original"},{name:"imageResize:25",value:"25",icon:"small"},{name:"imageResize:50",value:"50",icon:"medium"},{name:"imageResize:75",value:"75",icon:"large"}]})}init(){const e=this.editor;const t=new AT(e);this._registerSchema();this._registerConverters();e.commands.add("imageResize",t)}_registerSchema(){this.editor.model.schema.extend("image",{allowAttributes:"width"});this.editor.model.schema.setAttributeProperties("width",{isFormatting:true})}_registerConverters(){const e=this.editor;e.conversion.for("downcast").add(e=>e.on("attribute:width:image",(e,t,i)=>{if(!i.consumable.consume(t.item,e.name)){return}const n=i.writer;const o=i.mapper.toViewElement(t.item);if(t.attributeNewValue!==null){n.setStyle("width",t.attributeNewValue,o);n.addClass("image_resized",o)}else{n.removeStyle("width",o);n.removeClass("image_resized",o)}}));e.conversion.for("upcast").attributeToAttribute({view:{name:"figure",styles:{width:/.+/}},model:{key:"width",value:e=>e.getStyle("width")}})}}var TT='';var ST='';var ET='';var PT='';const MT={small:TT,medium:ST,large:ET,original:PT};class IT extends ok{static get requires(){return[CT]}static get pluginName(){return"ImageResizeButtons"}constructor(e){super(e);this._resizeUnit=e.config.get("image.resizeUnit")}init(){const e=this.editor;const t=e.config.get("image.resizeOptions");const i=e.commands.get("imageResize");this.bind("isEnabled").to(i);for(const e of t){this._registerImageResizeButton(e)}this._registerImageResizeDropdown(t)}_registerImageResizeButton(e){const t=this.editor;const{name:i,value:n,icon:o}=e;const r=n?n+this._resizeUnit:null;t.ui.componentFactory.add(i,n=>{const s=new Ew(n);const a=t.commands.get("imageResize");const c=this._getOptionLabelValue(e,true);if(!MT[o]){throw new ss["b"]("imageresizebuttons-missing-icon: "+'The resize option "'+i+'" misses the "icon" property '+"or the property value doesn't match any of the available icons.",t,e)}s.set({label:c,icon:MT[o],tooltip:c,isToggleable:true});s.bind("isEnabled").to(this);s.bind("isOn").to(a,"value",LT(r));this.listenTo(s,"execute",()=>{t.execute("imageResize",{width:r})});return s})}_registerImageResizeDropdown(e){const t=this.editor;const i=t.t;const n=e.find(e=>!e.value);t.ui.componentFactory.add("imageResize",o=>{const r=t.commands.get("imageResize");const s=jw(o,Mw);const a=s.buttonView;a.set({tooltip:i("Resize image"),commandValue:n.value,icon:ST,isToggleable:true,label:this._getOptionLabelValue(n),withText:true,class:"ck-resize-image-button"});a.bind("label").to(r,"value",e=>{if(e&&e.width){return e.width}else{return this._getOptionLabelValue(n)}});s.bind("isOn").to(r);s.bind("isEnabled").to(this);Hw(s,this._getResizeDropdownListItemDefinitions(e,r));s.listView.ariaLabel=i("Image resize list");this.listenTo(s,"execute",e=>{t.execute(e.source.commandName,{width:e.source.commandValue});t.editing.view.focus()});return s})}_getOptionLabelValue(e,t){const i=this.editor.t;if(e.label){return e.label}else if(t){if(e.value){return i("Resize image to %0",e.value+this._resizeUnit)}else{return i("Resize image to the original size")}}else{if(e.value){return e.value+this._resizeUnit}else{return i("Original")}}}_getResizeDropdownListItemDefinitions(e,t){const i=new xs;e.map(e=>{const n=e.value?e.value+this._resizeUnit:null;const o={type:"button",model:new Y_({commandName:"imageResize",commandValue:n,label:this._getOptionLabelValue(e),withText:true,icon:null})};o.model.bind("isOn").to(t,"value",LT(n));i.add(o)});return i}}function LT(e){return t=>{if(e===null&&t===e){return true}return t&&t.width===e}}class NT{constructor(e){this.set("activeHandlePosition",null);this.set("proposedWidthPercents",null);this.set("proposedWidth",null);this.set("proposedHeight",null);this.set("proposedHandleHostWidth",null);this.set("proposedHandleHostHeight",null);this._options=e;this._referenceCoordinates=null}begin(e,t,i){const n=new Th(t);this.activeHandlePosition=VT(e);this._referenceCoordinates=RT(t,DT(this.activeHandlePosition));this.originalWidth=n.width;this.originalHeight=n.height;this.aspectRatio=n.width/n.height;const o=i.style.width;if(o&&o.match(/^\d+\.?\d*%$/)){this.originalWidthPercents=parseFloat(o)}else{this.originalWidthPercents=zT(i,n)}}update(e){this.proposedWidth=e.width;this.proposedHeight=e.height;this.proposedWidthPercents=e.widthPercents;this.proposedHandleHostWidth=e.handleHostWidth;this.proposedHandleHostHeight=e.handleHostHeight}}ys(NT,Zc);function zT(e,t){const i=e.parentElement;const n=parseFloat(i.ownerDocument.defaultView.getComputedStyle(i).width);return t.width/n*100}function RT(e,t){const i=new Th(e);const n=t.split("-");const o={x:n[1]=="right"?i.right:i.left,y:n[0]=="bottom"?i.bottom:i.top};o.x+=e.ownerDocument.defaultView.scrollX;o.y+=e.ownerDocument.defaultView.scrollY;return o}function OT(e){return`ck-widget__resizer__handle-${e}`}function VT(e){const t=["top-left","top-right","bottom-right","bottom-left"];for(const i of t){if(e.classList.contains(OT(i))){return i}}}function DT(e){const t=e.split("-");const i={top:"bottom",bottom:"top",left:"right",right:"left"};return`${i[t[0]]}-${i[t[1]]}`}class BT{constructor(e){this._options=e;this._domResizerWrapper=null;this._viewResizerWrapper=null;this.set("isEnabled",true);this.decorate("begin");this.decorate("cancel");this.decorate("commit");this.decorate("updateSize");this.on("commit",e=>{if(!this.state.proposedWidth&&!this.state.proposedWidthPercents){this._cleanup();e.stop()}},{priority:"high"});this.on("change:isEnabled",()=>{if(this.isEnabled){this.redraw()}})}attach(){const e=this;const t=this._options.viewElement;const i=this._options.editor.editing.view;i.change(i=>{const n=i.createUIElement("div",{class:"ck ck-reset_all ck-widget__resizer"},(function(t){const i=this.toDomElement(t);e._appendHandles(i);e._appendSizeUI(i);e._domResizerWrapper=i;e.on("change:isEnabled",(e,t,n)=>{i.style.display=n?"":"none"});i.style.display=e.isEnabled?"":"none";return i}));i.insert(i.createPositionAt(t,"end"),n);i.addClass("ck-widget_with-resizer",t);this._viewResizerWrapper=n})}begin(e){this.state=new NT(this._options);this._sizeUI.bindToState(this._options,this.state);this._initialViewWidth=this._options.viewElement.getStyle("width");this.state.begin(e,this._getHandleHost(),this._getResizeHost())}updateSize(e){const t=this._proposeNewSize(e);const i=this._options.editor.editing.view;i.change(e=>{const i=this._options.unit||"%";const n=(i==="%"?t.widthPercents:t.width)+i;e.setStyle("width",n,this._options.viewElement)});const n=this._getHandleHost();const o=new Th(n);t.handleHostWidth=Math.round(o.width);t.handleHostHeight=Math.round(o.height);const r=new Th(n);t.width=Math.round(r.width);t.height=Math.round(r.height);this.redraw(o);this.state.update(t)}commit(){const e=this._options.unit||"%";const t=(e==="%"?this.state.proposedWidthPercents:this.state.proposedWidth)+e;this._options.editor.editing.view.change(()=>{this._cleanup();this._options.onCommit(t)})}cancel(){this._cleanup()}destroy(){this.cancel()}redraw(e){const t=this._domResizerWrapper;if(!UT(t)){return}const i=t.parentElement;const n=this._getHandleHost();const o=this._viewResizerWrapper;const r=[o.getStyle("width"),o.getStyle("height"),o.getStyle("left"),o.getStyle("top")];let s;if(i.isSameNode(n)){const t=e||new Th(n);s=[t.width+"px",t.height+"px",undefined,undefined]}else{s=[n.offsetWidth+"px",n.offsetHeight+"px",n.offsetLeft+"px",n.offsetTop+"px"]}if(Rs(r,s)!=="same"){this._options.editor.editing.view.change(e=>{e.setStyle({width:s[0],height:s[1],left:s[2],top:s[3]},o)})}}containsHandle(e){return this._domResizerWrapper.contains(e)}static isResizeHandle(e){return e.classList.contains("ck-widget__resizer__handle")}_cleanup(){this._sizeUI.dismiss();this._sizeUI.isVisible=false;const e=this._options.editor.editing.view;e.change(e=>{e.setStyle("width",this._initialViewWidth,this._options.viewElement)})}_proposeNewSize(e){const t=this.state;const i=HT(e);const n=this._options.isCentered?this._options.isCentered(this):true;const o={x:t._referenceCoordinates.x-(i.x+t.originalWidth),y:i.y-t.originalHeight-t._referenceCoordinates.y};if(n&&t.activeHandlePosition.endsWith("-right")){o.x=i.x-(t._referenceCoordinates.x+t.originalWidth)}if(n){o.x*=2}const r={width:Math.abs(t.originalWidth+o.x),height:Math.abs(t.originalHeight+o.y)};r.dominant=r.width/t.aspectRatio>r.height?"width":"height";r.max=r[r.dominant];const s={width:r.width,height:r.height};if(r.dominant=="width"){s.height=s.width/t.aspectRatio}else{s.width=s.height*t.aspectRatio}return{width:Math.round(s.width),height:Math.round(s.height),widthPercents:Math.min(Math.round(t.originalWidthPercents/t.originalWidth*s.width*100)/100,100)}}_getResizeHost(){const e=this._domResizerWrapper.parentElement;return this._options.getResizeHost(e)}_getHandleHost(){const e=this._domResizerWrapper.parentElement;return this._options.getHandleHost(e)}_appendHandles(e){const t=["top-left","top-right","bottom-right","bottom-left"];for(const i of t){e.appendChild(new gb({tag:"div",attributes:{class:`ck-widget__resizer__handle ${FT(i)}`}}).render())}}_appendSizeUI(e){const t=new jT;t.render();this._sizeUI=t;e.appendChild(t.element)}}ys(BT,Zc);class jT extends Hb{constructor(){super();const e=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-size-view",e.to("activeHandlePosition",e=>e?`ck-orientation-${e}`:"")],style:{display:e.if("isVisible","none",e=>!e)}},children:[{text:e.to("label")}]})}bindToState(e,t){this.bind("isVisible").to(t,"proposedWidth",t,"proposedHeight",(e,t)=>e!==null&&t!==null);this.bind("label").to(t,"proposedHandleHostWidth",t,"proposedHandleHostHeight",t,"proposedWidthPercents",(t,i,n)=>{if(e.unit==="px"){return`${t}×${i}`}else{return`${n}%`}});this.bind("activeHandlePosition").to(t)}dismiss(){this.unbind();this.isVisible=false}}function FT(e){return`ck-widget__resizer__handle-${e}`}function HT(e){return{x:e.pageX,y:e.pageY}}function UT(e){return e&&e.ownerDocument&&e.ownerDocument.contains(e)}var WT="Expected a function";function qT(e,t,i){var n=true,o=true;if(typeof e!="function"){throw new TypeError(WT)}if(ce(i)){n="leading"in i?!!i.leading:n;o="trailing"in i?!!i.trailing:o}return ph(e,t,{leading:n,maxWait:t,trailing:o})}var $T=qT;var GT=i(84);class KT extends ok{static get pluginName(){return"WidgetResize"}init(){this.set("_visibleResizer",null);this.set("_activeResizer",null);this._resizers=new Map;const e=Vd.window.document;this.editor.model.schema.setAttributeProperties("width",{isFormatting:true});this.editor.editing.view.addObserver(bC);this._observer=Object.create(Yd);this.listenTo(this.editor.editing.view.document,"mousedown",this._mouseDownListener.bind(this),{priority:"high"});this._observer.listenTo(e,"mousemove",this._mouseMoveListener.bind(this));this._observer.listenTo(e,"mouseup",this._mouseUpListener.bind(this));const t=()=>{if(this._visibleResizer){this._visibleResizer.redraw()}};const i=$T(t,200);this.on("change:_visibleResizer",t);this.editor.ui.on("update",i);this._observer.listenTo(Vd.window,"resize",i);const n=this.editor.editing.view.document.selection;n.on("change",()=>{const e=n.getSelectedElement();this._visibleResizer=this._getResizerByViewElement(e)||null})}destroy(){this._observer.stopListening();for(const e of this._resizers.values()){e.destroy()}}attachTo(e){const t=new BT(e);const i=this.editor.plugins;t.attach();if(i.has("WidgetToolbarRepository")){const e=i.get("WidgetToolbarRepository");t.on("begin",()=>{e.forceDisabled("resize")},{priority:"lowest"});t.on("cancel",()=>{e.clearForceDisabled("resize")},{priority:"highest"});t.on("commit",()=>{e.clearForceDisabled("resize")},{priority:"highest"})}this._resizers.set(e.viewElement,t);return t}_getResizerByHandle(e){for(const t of this._resizers.values()){if(t.containsHandle(e)){return t}}}_getResizerByViewElement(e){return this._resizers.get(e)}_mouseDownListener(e,t){const i=t.domTarget;if(!BT.isResizeHandle(i)){return}this._activeResizer=this._getResizerByHandle(i);if(this._activeResizer){this._activeResizer.begin(i);e.stop();t.preventDefault()}}_mouseMoveListener(e,t){if(this._activeResizer){this._activeResizer.updateSize(t)}}_mouseUpListener(){if(this._activeResizer){this._activeResizer.commit();this._activeResizer=null}}}ys(KT,Zc);class YT extends ok{static get requires(){return[KT]}static get pluginName(){return"ImageResizeHandles"}init(){const e=this.editor;const t=e.commands.get("imageResize");this.bind("isEnabled").to(t);e.editing.downcastDispatcher.on("insert:image",(t,i,n)=>{const o=n.mapper.toViewElement(i.item);const r=e.plugins.get(KT).attachTo({unit:e.config.get("image.resizeUnit"),modelElement:i.item,viewElement:o,editor:e,getHandleHost(e){return e.querySelector("img")},getResizeHost(e){return e},isCentered(){const e=i.item.getAttribute("imageStyle");return!e||e=="full"||e=="alignCenter"},onCommit(t){e.execute("imageResize",{width:t})}});r.on("updateSize",()=>{if(!o.hasClass("image_resized")){e.editing.view.change(e=>{e.addClass("image_resized",o)})}});r.bind("isEnabled").to(this)},{priority:"low"})}}var ZT=i(86);class QT extends ok{static get requires(){return[CT,YT,IT]}static get pluginName(){return"ImageResize"}}class JT extends sk{constructor(e,t){super(e);this.defaultStyle=false;this.styles=t.reduce((e,t)=>{e[t.name]=t;if(t.isDefault){this.defaultStyle=t.name}return e},{})}refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=nC(e);if(!e){this.value=false}else if(e.hasAttribute("imageStyle")){const t=e.getAttribute("imageStyle");this.value=this.styles[t]?t:false}else{this.value=this.defaultStyle}}execute(e){const t=e.value;const i=this.editor.model;const n=i.document.selection.getSelectedElement();i.change(e=>{if(this.styles[t].isDefault){e.removeAttribute("imageStyle",n)}else{e.setAttribute("imageStyle",t,n)}})}}function XT(e){return(t,i,n)=>{if(!n.consumable.consume(i.item,t.name)){return}const o=tS(i.attributeNewValue,e);const r=tS(i.attributeOldValue,e);const s=n.mapper.toViewElement(i.item);const a=n.writer;if(r){a.removeClass(r.className,s)}if(o){a.addClass(o.className,s)}}}function eS(e){const t=e.filter(e=>!e.isDefault);return(e,i,n)=>{if(!i.modelRange){return}const o=i.viewItem;const r=ck(i.modelRange.getItems());if(!n.schema.checkAttribute(r,"imageStyle")){return}for(const e of t){if(n.consumable.consume(o,{classes:e.className})){n.writer.setAttribute("imageStyle",e.name,r)}}}}function tS(e,t){for(const i of t){if(i.name===e){return i}}}var iS='';var nS='';var oS='';var rS='';const sS={full:{name:"full",title:"Full size image",icon:iS,isDefault:true},side:{name:"side",title:"Side image",icon:rS,className:"image-style-side"},alignLeft:{name:"alignLeft",title:"Left aligned image",icon:nS,className:"image-style-align-left"},alignCenter:{name:"alignCenter",title:"Centered image",icon:oS,className:"image-style-align-center"},alignRight:{name:"alignRight",title:"Right aligned image",icon:rS,className:"image-style-align-right"}};const aS={full:iS,left:nS,right:rS,center:oS};function cS(e=[]){return e.map(lS)}function lS(e){if(typeof e=="string"){const t=e;if(sS[t]){e=Object.assign({},sS[t])}else{console.warn(Object(ss["a"])("image-style-not-found: There is no such image style of given name."),{name:t});e={name:t}}}else if(sS[e.name]){const t=sS[e.name];const i=Object.assign({},e);for(const n in t){if(!Object.prototype.hasOwnProperty.call(e,n)){i[n]=t[n]}}e=i}if(typeof e.icon=="string"&&aS[e.icon]){e.icon=aS[e.icon]}return e}class dS extends ok{static get pluginName(){return"ImageStyleEditing"}init(){const e=this.editor;const t=e.model.schema;const i=e.data;const n=e.editing;e.config.define("image.styles",["full","side"]);const o=cS(e.config.get("image.styles"));t.extend("image",{allowAttributes:"imageStyle"});const r=XT(o);n.downcastDispatcher.on("attribute:imageStyle:image",r);i.downcastDispatcher.on("attribute:imageStyle:image",r);i.upcastDispatcher.on("element:figure",eS(o),{priority:"low"});e.commands.add("imageStyle",new JT(e,o))}}var uS=i(88);class hS extends ok{static get pluginName(){return"ImageStyleUI"}get localizedDefaultStylesTitles(){const e=this.editor.t;return{"Full size image":e("Full size image"),"Side image":e("Side image"),"Left aligned image":e("Left aligned image"),"Centered image":e("Centered image"),"Right aligned image":e("Right aligned image")}}init(){const e=this.editor;const t=e.config.get("image.styles");const i=fS(cS(t),this.localizedDefaultStylesTitles);for(const e of i){this._createButton(e)}}_createButton(e){const t=this.editor;const i=`imageStyle:${e.name}`;t.ui.componentFactory.add(i,i=>{const n=t.commands.get("imageStyle");const o=new Ew(i);o.set({label:e.title,icon:e.icon,tooltip:true,isToggleable:true});o.bind("isEnabled").to(n,"isEnabled");o.bind("isOn").to(n,"value",t=>t===e.name);this.listenTo(o,"execute",()=>{t.execute("imageStyle",{value:e.name});t.editing.view.focus()});return o})}}function fS(e,t){for(const i of e){if(t[i.title]){i.title=t[i.title]}}return e}class mS extends ok{static get requires(){return[dS,hS]}static get pluginName(){return"ImageStyle"}}class gS extends ok{static get requires(){return[iT]}static get pluginName(){return"WidgetToolbarRepository"}init(){const e=this.editor;if(e.plugins.has("BalloonToolbar")){const t=e.plugins.get("BalloonToolbar");this.listenTo(t,"show",t=>{if(wS(e.editing.view.document.selection)){t.stop()}},{priority:"high"})}this._toolbarDefinitions=new Map;this._balloon=this.editor.plugins.get("ContextualBalloon");this.on("change:isEnabled",()=>{this._updateToolbarsVisibility()});this.listenTo(e.ui,"update",()=>{this._updateToolbarsVisibility()});this.listenTo(e.ui.focusTracker,"change:isFocused",()=>{this._updateToolbarsVisibility()},{priority:"low"})}destroy(){super.destroy();for(const e of this._toolbarDefinitions.values()){e.view.destroy()}}register(e,{ariaLabel:t,items:i,getRelatedElement:n,balloonClassName:o="ck-toolbar-container"}){if(!i.length){console.warn(Object(ss["a"])("widget-toolbar-no-items: Trying to register a toolbar without items."),{toolbarId:e});return}const r=this.editor;const s=r.t;const a=new Yw(r.locale);a.ariaLabel=t||s("Widget toolbar");if(this._toolbarDefinitions.has(e)){throw new ss["b"]("widget-toolbar-duplicated: Toolbar with the given id was already added.",this,{toolbarId:e})}a.fillFromConfig(i,r.ui.componentFactory);this._toolbarDefinitions.set(e,{view:a,getRelatedElement:n,balloonClassName:o})}_updateToolbarsVisibility(){let e=0;let t=null;let i=null;for(const n of this._toolbarDefinitions.values()){const o=n.getRelatedElement(this.editor.editing.view.document.selection);if(!this.isEnabled||!o){if(this._isToolbarInBalloon(n)){this._hideToolbar(n)}}else if(!this.editor.ui.focusTracker.isFocused){if(this._isToolbarVisible(n)){this._hideToolbar(n)}}else{const r=o.getAncestors().length;if(r>e){e=r;t=o;i=n}}}if(i){this._showToolbar(i,t)}}_hideToolbar(e){this._balloon.remove(e.view);this.stopListening(this._balloon,"change:visibleView")}_showToolbar(e,t){if(this._isToolbarVisible(e)){pS(this.editor,t)}else if(!this._isToolbarInBalloon(e)){this._balloon.add({view:e.view,position:bS(this.editor,t),balloonClassName:e.balloonClassName});this.listenTo(this._balloon,"change:visibleView",()=>{for(const e of this._toolbarDefinitions.values()){if(this._isToolbarVisible(e)){const t=e.getRelatedElement(this.editor.editing.view.document.selection);pS(this.editor,t)}}})}}_isToolbarVisible(e){return this._balloon.visibleView===e.view}_isToolbarInBalloon(e){return this._balloon.hasView(e.view)}}function pS(e,t){const i=e.plugins.get("ContextualBalloon");const n=bS(e,t);i.updatePosition(n)}function bS(e,t){const i=e.editing.view;const n=wA.defaultPositions;return{target:i.domConverter.mapViewToDom(t),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,BA]}}function wS(e){const t=e.getSelectedElement();return!!(t&&IA(t))}class kS extends ok{static get requires(){return[gS]}static get pluginName(){return"ImageToolbar"}afterInit(){const e=this.editor;const t=e.t;const i=e.plugins.get(gS);i.register("image",{ariaLabel:t("Image toolbar"),items:e.config.get("image.toolbar")||[],getRelatedElement:iC})}}var _S=i(90);class vS extends Hb{constructor(e,t={}){super(e);const i=this.bindTemplate;this.set("class",t.class||null);this.children=this.createCollection();if(t.children){t.children.forEach(e=>this.children.add(e))}this.set("_role",null);this.set("_ariaLabelledBy",null);if(t.labelView){this.set({_role:"group",_ariaLabelledBy:t.labelView.id})}this.setTemplate({tag:"div",attributes:{class:["ck","ck-form__row",i.to("class")],role:i.to("_role"),"aria-labelledby":i.to("_ariaLabelledBy")},children:this.children})}}var yS='';var xS=i(92);class AS extends Hb{constructor(e,t){super(e);const{insertButtonView:i,cancelButtonView:n}=this._createActionButtons(e);this.insertButtonView=i;this.cancelButtonView=n;this.dropdownView=this._createDropdownView(e);this.set("imageURLInputValue","");this.focusTracker=new Zp;this.keystrokes=new Vp;this._focusables=new hb;this._focusCycler=new rw({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this.set("_integrations",new xs);if(t){for(const[e,i]of Object.entries(t)){if(e==="insertImageViaUrl"){i.fieldView.bind("value").to(this,"imageURLInputValue",e=>e||"");i.fieldView.on("input",()=>{this.imageURLInputValue=i.fieldView.element.value})}this._integrations.add(i)}}this.setTemplate({tag:"form",attributes:{class:["ck","ck-image-upload-form"],tabindex:"-1"},children:[...this._integrations,new vS(e,{children:[this.insertButtonView,this.cancelButtonView],class:"ck-image-upload-form__action-row"})]})}render(){super.render();$C({view:this});const e=[...this._integrations,this.insertButtonView,this.cancelButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element);const t=e=>e.stopPropagation();this.keystrokes.set("arrowright",t);this.keystrokes.set("arrowleft",t);this.keystrokes.set("arrowup",t);this.keystrokes.set("arrowdown",t);this.listenTo(e[0].element,"selectstart",(e,t)=>{t.stopPropagation()},{priority:"high"})}_createDropdownView(e){const t=e.t;const i=jw(e,Q_);const n=i.buttonView;const o=i.panelView;n.set({label:t("Insert image"),icon:yS,tooltip:true});o.extendTemplate({attributes:{class:"ck-image-upload__panel"}});return i}_createActionButtons(e){const t=e.t;const i=new Ew(e);const n=new Ew(e);i.set({label:t("Insert"),icon:GC,class:"ck-button-save",type:"submit",withText:true,isEnabled:this.imageURLInputValue});n.set({label:t("Cancel"),icon:KC,class:"ck-button-cancel",withText:true});i.bind("isEnabled").to(this,"imageURLInputValue");i.delegate("execute").to(this,"submit");n.delegate("execute").to(this,"cancel");return{insertButtonView:i,cancelButtonView:n}}focus(){this._focusCycler.focusFirst()}}class CS extends Hb{constructor(e){super(e);this.buttonView=new Ew(e);this._fileInputView=new TS(e);this._fileInputView.bind("acceptedType").to(this);this._fileInputView.bind("allowMultipleFiles").to(this);this._fileInputView.delegate("done").to(this);this.setTemplate({tag:"span",attributes:{class:"ck-file-dialog-button"},children:[this.buttonView,this._fileInputView]});this.buttonView.on("execute",()=>{this._fileInputView.open()})}focus(){this.buttonView.focus()}}class TS extends Hb{constructor(e){super(e);this.set("acceptedType");this.set("allowMultipleFiles",false);const t=this.bindTemplate;this.setTemplate({tag:"input",attributes:{class:["ck-hidden"],type:"file",tabindex:"-1",accept:t.to("acceptedType"),multiple:t.to("allowMultipleFiles")},on:{change:t.to(()=>{if(this.element&&this.element.files&&this.element.files.length){this.fire("done",this.element.files)}this.element.value=""})}})}open(){this.element.click()}}function SS(e){const t=e.map(e=>e.replace("+","\\+"));return new RegExp(`^image\\/(${t.join("|")})$`)}function ES(e){return new Promise((t,i)=>{const n=e.getAttribute("src");fetch(n).then(e=>e.blob()).then(e=>{const i=MS(e,n);const o=i.replace("image/","");const r=`image.${o}`;const s=new File([e],r,{type:i});t(s)}).catch(i)})}function PS(e){if(!e.is("element","img")||!e.getAttribute("src")){return false}return e.getAttribute("src").match(/^data:image\/\w+;base64,/g)||e.getAttribute("src").match(/^blob:/g)}function MS(e,t){if(e.type){return e.type}else if(t.match(/data:(image\/\w+);base64/)){return t.match(/data:(image\/\w+);base64/)[1].toLowerCase()}else{return"image/jpeg"}}function IS(e){const t=e.config.get("image.upload.panel.items");const i=e.plugins.get("ImageUploadUI");const n={insertImageViaUrl:LS(e.locale)};if(!t){return n}if(t.find(e=>e==="openCKFinder")&&e.ui.componentFactory.has("ckfinder")){const t=e.ui.componentFactory.create("ckfinder");t.set({withText:true,class:"ck-image-upload__ck-finder-button"});t.delegate("execute").to(i,"cancel");n.openCKFinder=t}return t.reduce((t,i)=>{if(n[i]){t[i]=n[i]}else if(e.ui.componentFactory.has(i)){t[i]=e.ui.componentFactory.create(i)}return t},{})}function LS(e){const t=e.t;const i=new FC(e,WC);i.set({label:t("Insert image via URL")});i.fieldView.placeholder="https://example.com/src/image.png";i.infoText=t("Paste the image source URL.");return i}class NS extends ok{static get pluginName(){return"ImageUploadUI"}init(){const e=this.editor;const t=!!e.config.get("image.upload.panel.items");e.ui.componentFactory.add("imageUpload",e=>{if(t){return this._createDropdownView(e)}else{return this._createFileDialogButtonView(e)}})}_setUpDropdown(e,t,i){const n=this.editor;const o=n.t;const r=t.insertButtonView;e.bind("isEnabled").to(i);e.on("change:isOpen",()=>{const i=n.model.document.selection.getSelectedElement();if(e.isOpen){t.focus();if(nC(i)){t.imageURLInputValue=i.getAttribute("src");r.label=o("Update")}else{t.imageURLInputValue="";r.label=o("Insert")}}});t.delegate("submit","cancel").to(e);this.delegate("cancel").to(e);e.on("submit",()=>{a();s()});e.on("cancel",()=>{a()});function s(){const e=n.model.document.selection.getSelectedElement();if(nC(e)){n.model.change(i=>{i.setAttribute("src",t.imageURLInputValue,e);i.removeAttribute("srcset",e);i.removeAttribute("sizes",e)})}else{n.execute("imageInsert",{source:t.imageURLInputValue})}}function a(){n.editing.view.focus();e.isOpen=false}return e}_createDropdownView(e){const t=this.editor;const i=new AS(e,IS(t));const n=t.commands.get("imageUpload");const o=i.dropdownView;const r=o.panelView;const s=o.buttonView;s.actionView=this._createFileDialogButtonView(e);r.children.add(i);return this._setUpDropdown(o,i,n)}_createFileDialogButtonView(e){const t=this.editor;const i=e.t;const n=t.config.get("image.upload.types");const o=new CS(e);const r=SS(n);const s=t.commands.get("imageUpload");o.set({acceptedType:n.map(e=>`image/${e}`).join(","),allowMultipleFiles:true});o.buttonView.set({label:i("Insert image"),icon:yS,tooltip:true});o.buttonView.bind("isEnabled").to(s);o.on("done",(e,i)=>{const n=Array.from(i).filter(e=>r.test(e.type));if(n.length){t.execute("imageUpload",{file:n})}});return o}}class zS{constructor(e){this.context=e}destroy(){this.stopListening()}static get isContextPlugin(){return true}}ys(zS,Zc);class RS extends zS{static get pluginName(){return"PendingActions"}init(){this.set("hasAny",false);this._actions=new xs({idProperty:"_id"});this._actions.delegate("add","remove").to(this)}add(e){if(typeof e!=="string"){throw new ss["b"]("pendingactions-add-invalid-message: The message must be a string.",this)}const t=Object.create(Zc);t.set("message",e);this._actions.add(t);this.hasAny=true;return t}remove(e){this._actions.remove(e);this.hasAny=!!this._actions.length}get first(){return this._actions.get(0)}[Symbol.iterator](){return this._actions[Symbol.iterator]()}}class OS{constructor(){const e=new window.FileReader;this._reader=e;this._data=undefined;this.set("loaded",0);e.onprogress=e=>{this.loaded=e.loaded}}get error(){return this._reader.error}get data(){return this._data}read(e){const t=this._reader;this.total=e.size;return new Promise((i,n)=>{t.onload=()=>{const e=t.result;this._data=e;i(e)};t.onerror=()=>{n("error")};t.onabort=()=>{n("aborted")};this._reader.readAsDataURL(e)})}abort(){this._reader.abort()}}ys(OS,Zc);class VS extends ok{static get pluginName(){return"FileRepository"}static get requires(){return[RS]}init(){this.loaders=new xs;this.loaders.on("add",()=>this._updatePendingAction());this.loaders.on("remove",()=>this._updatePendingAction());this._loadersMap=new Map;this._pendingAction=null;this.set("uploaded",0);this.set("uploadTotal",null);this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(e,t)=>t?e/t*100:0)}getLoader(e){return this._loadersMap.get(e)||null}createLoader(e){if(!this.createUploadAdapter){console.warn(Object(ss["a"])("filerepository-no-upload-adapter: Upload adapter is not defined."));return null}const t=new DS(Promise.resolve(e),this.createUploadAdapter);this.loaders.add(t);this._loadersMap.set(e,t);if(e instanceof Promise){t.file.then(e=>{this._loadersMap.set(e,t)}).catch(()=>{})}t.on("change:uploaded",()=>{let e=0;for(const t of this.loaders){e+=t.uploaded}this.uploaded=e});t.on("change:uploadTotal",()=>{let e=0;for(const t of this.loaders){if(t.uploadTotal){e+=t.uploadTotal}}this.uploadTotal=e});return t}destroyLoader(e){const t=e instanceof DS?e:this.getLoader(e);t._destroy();this.loaders.remove(t);this._loadersMap.forEach((e,i)=>{if(e===t){this._loadersMap.delete(i)}})}_updatePendingAction(){const e=this.editor.plugins.get(RS);if(this.loaders.length){if(!this._pendingAction){const t=this.editor.t;const i=e=>`${t("Upload in progress")} ${parseInt(e)}%.`;this._pendingAction=e.add(i(this.uploadedPercent));this._pendingAction.bind("message").to(this,"uploadedPercent",i)}}else{e.remove(this._pendingAction);this._pendingAction=null}}}ys(VS,Zc);class DS{constructor(e,t){this.id=is();this._filePromiseWrapper=this._createFilePromiseWrapper(e);this._adapter=t(this);this._reader=new OS;this.set("status","idle");this.set("uploaded",0);this.set("uploadTotal",null);this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(e,t)=>t?e/t*100:0);this.set("uploadResponse",null)}get file(){if(!this._filePromiseWrapper){return Promise.resolve(null)}else{return this._filePromiseWrapper.promise.then(e=>this._filePromiseWrapper?e:null)}}get data(){return this._reader.data}read(){if(this.status!="idle"){throw new ss["b"]("filerepository-read-wrong-status: You cannot call read if the status is different than idle.",this)}this.status="reading";return this.file.then(e=>this._reader.read(e)).then(e=>{if(this.status!=="reading"){throw this.status}this.status="idle";return e}).catch(e=>{if(e==="aborted"){this.status="aborted";throw"aborted"}this.status="error";throw this._reader.error?this._reader.error:e})}upload(){if(this.status!="idle"){throw new ss["b"]("filerepository-upload-wrong-status: You cannot call upload if the status is different than idle.",this)}this.status="uploading";return this.file.then(()=>this._adapter.upload()).then(e=>{this.uploadResponse=e;this.status="idle";return e}).catch(e=>{if(this.status==="aborted"){throw"aborted"}this.status="error";throw e})}abort(){const e=this.status;this.status="aborted";if(!this._filePromiseWrapper.isFulfilled){this._filePromiseWrapper.promise.catch(()=>{});this._filePromiseWrapper.rejecter("aborted")}else if(e=="reading"){this._reader.abort()}else if(e=="uploading"&&this._adapter.abort){this._adapter.abort()}this._destroy()}_destroy(){this._filePromiseWrapper=undefined;this._reader=undefined;this._adapter=undefined;this.uploadResponse=undefined}_createFilePromiseWrapper(e){const t={};t.promise=new Promise((i,n)=>{t.rejecter=n;t.isFulfilled=false;e.then(e=>{t.isFulfilled=true;i(e)}).catch(e=>{t.isFulfilled=true;n(e)})});return t}}ys(DS,Zc);var BS='';var jS=i(94);var FS=i(96);var HS=i(98);class US extends ok{constructor(e){super(e);this.placeholder="data:image/svg+xml;utf8,"+encodeURIComponent(BS)}init(){const e=this.editor;e.editing.downcastDispatcher.on("attribute:uploadStatus:image",(...e)=>this.uploadStatusChange(...e))}uploadStatusChange(e,t,i){const n=this.editor;const o=t.item;const r=o.getAttribute("uploadId");if(!i.consumable.consume(t.item,e.name)){return}const s=n.plugins.get(VS);const a=r?t.attributeNewValue:null;const c=this.placeholder;const l=n.editing.mapper.toViewElement(o);const d=i.writer;if(a=="reading"){WS(l,d);$S(c,l,d);return}if(a=="uploading"){const e=s.loaders.get(r);WS(l,d);if(!e){$S(c,l,d)}else{GS(l,d);KS(l,d,e,n.editing.view);tE(l,d,e)}return}if(a=="complete"&&s.loaders.get(r)){ZS(l,d,n.editing.view)}YS(l,d);GS(l,d);qS(l,d)}}function WS(e,t){if(!e.hasClass("ck-appear")){t.addClass("ck-appear",e)}}function qS(e,t){t.removeClass("ck-appear",e)}function $S(e,t,i){if(!t.hasClass("ck-image-upload-placeholder")){i.addClass("ck-image-upload-placeholder",t)}const n=sC(t);if(n.getAttribute("src")!==e){i.setAttribute("src",e,n)}if(!XS(t,"placeholder")){i.insert(i.createPositionAfter(n),JS(i))}}function GS(e,t){if(e.hasClass("ck-image-upload-placeholder")){t.removeClass("ck-image-upload-placeholder",e)}eE(e,t,"placeholder")}function KS(e,t,i,n){const o=QS(t);t.insert(t.createPositionAt(e,"end"),o);i.on("change:uploadedPercent",(e,t,i)=>{n.change(e=>{e.setStyle("width",i+"%",o)})})}function YS(e,t){eE(e,t,"progressBar")}function ZS(e,t,i){const n=t.createUIElement("div",{class:"ck-image-upload-complete-icon"});t.insert(t.createPositionAt(e,"end"),n);setTimeout(()=>{i.change(e=>e.remove(e.createRangeOn(n)))},3e3)}function QS(e){const t=e.createUIElement("div",{class:"ck-progress-bar"});e.setCustomProperty("progressBar",true,t);return t}function JS(e){const t=e.createUIElement("div",{class:"ck-upload-placeholder-loader"});e.setCustomProperty("placeholder",true,t);return t}function XS(e,t){for(const i of e.getChildren()){if(i.getCustomProperty(t)){return i}}}function eE(e,t,i){const n=XS(e,i);if(n){t.remove(t.createRangeOn(n))}}function tE(e,t,i){if(i.data){const n=sC(e);t.setAttribute("src",i.data,n)}}class iE extends zS{static get pluginName(){return"Notification"}init(){this.on("show:warning",(e,t)=>{window.alert(t.message)},{priority:"lowest"})}showSuccess(e,t={}){this._showNotification({message:e,type:"success",namespace:t.namespace,title:t.title})}showInfo(e,t={}){this._showNotification({message:e,type:"info",namespace:t.namespace,title:t.title})}showWarning(e,t={}){this._showNotification({message:e,type:"warning",namespace:t.namespace,title:t.title})}_showNotification(e){const t=`show:${e.type}`+(e.namespace?`:${e.namespace}`:"");this.fire(t,{message:e.message,type:e.type,title:e.title||""})}}class nE{constructor(e){this.document=e}createDocumentFragment(e){return new Yl(this.document,e)}createElement(e,t,i){return new Dc(this.document,e,t,i)}createText(e){return new js(this.document,e)}clone(e,t=false){return e._clone(t)}appendChild(e,t){return t._appendChild(e)}insertChild(e,t,i){return i._insertChild(e,t)}removeChildren(e,t,i){return i._removeChildren(e,t)}remove(e){const t=e.parent;if(t){return this.removeChildren(t.getChildIndex(e),1,t)}return[]}replace(e,t){const i=e.parent;if(i){const n=i.getChildIndex(e);this.removeChildren(n,1,i);this.insertChild(n,t,i);return true}return false}unwrapElement(e){const t=e.parent;if(t){const i=t.getChildIndex(e);this.remove(e);this.insertChild(i,e.getChildren(),t)}}rename(e,t){const i=new Dc(this.document,e,t.getAttributes(),t.getChildren());return this.replace(t,i)?i:null}setAttribute(e,t,i){i._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,i){if(z(e)&&i===undefined){i=t}i._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,i){i._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}createPositionAt(e,t){return ul._createAt(e,t)}createPositionAfter(e){return ul._createAfter(e)}createPositionBefore(e){return ul._createBefore(e)}createRange(e,t){return new hl(e,t)}createRangeOn(e){return hl._createOn(e)}createRangeIn(e){return hl._createIn(e)}createSelection(e,t,i){return new gl(e,t,i)}}class oE extends sk{refresh(){const e=this.editor.model.document.selection.getSelectedElement();const t=e&&e.name==="image"||false;this.isEnabled=rC(this.editor.model)||t}execute(e){const t=this.editor;const i=t.model;const n=t.plugins.get(VS);i.change(t=>{const o=Array.isArray(e.file)?e.file:[e.file];for(const e of o){rE(t,i,n,e)}})}}function rE(e,t,i,n){const o=i.createLoader(n);if(!o){return}oC(e,t,{uploadId:o.id})}class sE extends ok{static get requires(){return[VS,iE,dv]}static get pluginName(){return"ImageUploadEditing"}constructor(e){super(e);e.config.define("image",{upload:{types:["jpeg","png","gif","bmp","webp","tiff"]}})}init(){const e=this.editor;const t=e.model.document;const i=e.model.schema;const n=e.conversion;const o=e.plugins.get(VS);const r=SS(e.config.get("image.upload.types"));i.extend("image",{allowAttributes:["uploadId","uploadStatus"]});e.commands.add("imageUpload",new oE(e));n.for("upcast").attributeToAttribute({view:{name:"img",key:"uploadId"},model:"uploadId"});this.listenTo(e.editing.view.document,"clipboardInput",(t,i)=>{if(aE(i.dataTransfer)){return}const n=Array.from(i.dataTransfer.files).filter(e=>{if(!e){return false}return r.test(e.type)});const o=i.targetRanges.map(t=>e.editing.mapper.toModelRange(t));e.model.change(i=>{i.setSelection(o);if(n.length){t.stop();e.model.enqueueChange("default",()=>{e.execute("imageUpload",{file:n})})}})});this.listenTo(e.plugins.get(dv),"inputTransformation",(t,i)=>{const n=Array.from(e.editing.view.createRangeIn(i.content)).filter(e=>PS(e.item)&&!e.item.getAttribute("uploadProcessed")).map(e=>({promise:ES(e.item),imageElement:e.item}));if(!n.length){return}const r=new nE(e.editing.view.document);for(const e of n){r.setAttribute("uploadProcessed",true,e.imageElement);const t=o.createLoader(e.promise);if(t){r.setAttribute("src","",e.imageElement);r.setAttribute("uploadId",t.id,e.imageElement)}}});e.editing.view.document.on("dragover",(e,t)=>{t.preventDefault()});t.on("change",()=>{const i=t.differ.getChanges({includeChangesInGraveyard:true});for(const t of i){if(t.type=="insert"&&t.name!="$text"){const i=t.position.nodeAfter;const n=t.position.root.rootName=="$graveyard";for(const t of cE(e,i)){const e=t.getAttribute("uploadId");if(!e){continue}const i=o.loaders.get(e);if(!i){continue}if(n){i.abort()}else if(i.status=="idle"){this._readAndUpload(i,t)}}}}})}_readAndUpload(e,t){const i=this.editor;const n=i.model;const o=i.locale.t;const r=i.plugins.get(VS);const s=i.plugins.get(iE);n.enqueueChange("transparent",e=>{e.setAttribute("uploadStatus","reading",t)});return e.read().then(()=>{const o=e.upload();if(Tl.isSafari){const e=i.editing.mapper.toViewElement(t);const n=sC(e);i.editing.view.once("render",()=>{if(!n.parent){return}const e=i.editing.view.domConverter.mapViewToDom(n.parent);if(!e){return}const t=e.style.display;e.style.display="none";e._ckHack=e.offsetHeight;e.style.display=t})}n.enqueueChange("transparent",e=>{e.setAttribute("uploadStatus","uploading",t)});return o}).then(e=>{n.enqueueChange("transparent",i=>{i.setAttributes({uploadStatus:"complete",src:e.default},t);this._parseAndSetSrcsetAttributeOnImage(e,t,i)});a()}).catch(i=>{if(e.status!=="error"&&e.status!=="aborted"){throw i}if(e.status=="error"&&i){s.showWarning(i,{title:o("Upload failed"),namespace:"upload"})}a();n.enqueueChange("transparent",e=>{e.remove(t)})});function a(){n.enqueueChange("transparent",e=>{e.removeAttribute("uploadId",t);e.removeAttribute("uploadStatus",t)});r.destroyLoader(e)}}_parseAndSetSrcsetAttributeOnImage(e,t,i){let n=0;const o=Object.keys(e).filter(e=>{const t=parseInt(e,10);if(!isNaN(t)){n=Math.max(n,t);return true}}).map(t=>`${e[t]} ${t}w`).join(", ");if(o!=""){i.setAttribute("srcset",{data:o,width:n},t)}}}function aE(e){return Array.from(e.types).includes("text/html")&&e.getData("text/html")!==""}function cE(e,t){return Array.from(e.model.createRangeOn(t)).filter(e=>e.item.is("element","image")).map(e=>e.item)}class lE extends ok{static get pluginName(){return"ImageUpload"}static get requires(){return[sE,NS,US]}}class dE extends sk{constructor(e){super(e);this._childCommands=[]}refresh(){}execute(...e){const t=this._getFirstEnabledCommand();return t.execute(e)}registerChildCommand(e){this._childCommands.push(e);e.on("change:isEnabled",()=>this._checkEnabled());this._checkEnabled()}_checkEnabled(){this.isEnabled=!!this._getFirstEnabledCommand()}_getFirstEnabledCommand(){return this._childCommands.find(e=>e.isEnabled)}}class uE extends ok{static get pluginName(){return"IndentEditing"}init(){const e=this.editor;e.commands.add("indent",new dE(e));e.commands.add("outdent",new dE(e))}}var hE='';var fE='';class mE extends ok{static get pluginName(){return"IndentUI"}init(){const e=this.editor;const t=e.locale;const i=e.t;const n=t.uiLanguageDirection=="ltr"?hE:fE;const o=t.uiLanguageDirection=="ltr"?fE:hE;this._defineButton("indent",i("Increase indent"),n);this._defineButton("outdent",i("Decrease indent"),o)}_defineButton(e,t,i){const n=this.editor;n.ui.componentFactory.add(e,o=>{const r=n.commands.get(e);const s=new Ew(o);s.set({label:t,icon:i,tooltip:true});s.bind("isOn","isEnabled").to(r,"value","isEnabled");this.listenTo(s,"execute",()=>{n.execute(e);n.editing.view.focus()});return s})}}class gE extends ok{static get pluginName(){return"Indent"}static get requires(){return[uE,mE]}}class pE extends sk{constructor(e,t){super(e);this._indentBehavior=t}refresh(){const e=this.editor;const t=e.model;const i=ck(t.document.selection.getSelectedBlocks());if(!i||!t.schema.checkAttribute(i,"blockIndent")){this.isEnabled=false;return}this.isEnabled=this._indentBehavior.checkEnabled(i.getAttribute("blockIndent"))}execute(){const e=this.editor.model;const t=bE(e);e.change(e=>{for(const i of t){const t=i.getAttribute("blockIndent");const n=this._indentBehavior.getNextIndent(t);if(n){e.setAttribute("blockIndent",n,i)}else{e.removeAttribute("blockIndent",i)}}})}}function bE(e){const t=e.document.selection;const i=e.schema;const n=Array.from(t.getSelectedBlocks());return n.filter(e=>i.checkAttribute(e,"blockIndent"))}class wE{constructor(e){this.isForward=e.direction==="forward";this.offset=e.offset;this.unit=e.unit}checkEnabled(e){const t=parseFloat(e||0);return this.isForward||t>0}getNextIndent(e){const t=parseFloat(e||0);const i=!e||e.endsWith(this.unit);if(!i){return this.isForward?this.offset+this.unit:undefined}const n=this.isForward?this.offset:-this.offset;const o=t+n;return o>0?o+this.unit:undefined}}class kE{constructor(e){this.isForward=e.direction==="forward";this.classes=e.classes}checkEnabled(e){const t=this.classes.indexOf(e);if(this.isForward){return t=0}}getNextIndent(e){const t=this.classes.indexOf(e);const i=this.isForward?1:-1;return this.classes[t+i]}}function _E(e){e.setNormalizer("margin",tx("margin"));e.setNormalizer("margin-top",e=>({path:"margin.top",value:e}));e.setNormalizer("margin-right",e=>({path:"margin.right",value:e}));e.setNormalizer("margin-bottom",e=>({path:"margin.bottom",value:e}));e.setNormalizer("margin-left",e=>({path:"margin.left",value:e}));e.setReducer("margin",Xy("margin"));e.setStyleRelation("margin",["margin-top","margin-right","margin-bottom","margin-left"])}class vE extends ok{constructor(e){super(e);e.config.define("indentBlock",{offset:40,unit:"px"})}static get pluginName(){return"IndentBlock"}init(){const e=this.editor;const t=e.config.get("indentBlock");const i=!t.classes||!t.classes.length;const n=Object.assign({direction:"forward"},t);const o=Object.assign({direction:"backward"},t);if(i){e.data.addStyleProcessorRules(_E);this._setupConversionUsingOffset(e.conversion);e.commands.add("indentBlock",new pE(e,new wE(n)));e.commands.add("outdentBlock",new pE(e,new wE(o)))}else{this._setupConversionUsingClasses(t.classes);e.commands.add("indentBlock",new pE(e,new kE(n)));e.commands.add("outdentBlock",new pE(e,new kE(o)))}}afterInit(){const e=this.editor;const t=e.model.schema;const i=e.commands.get("indent");const n=e.commands.get("outdent");const o=["paragraph","heading1","heading2","heading3","heading4","heading5","heading6"];o.forEach(e=>{if(t.isRegistered(e)){t.extend(e,{allowAttributes:"blockIndent"})}});t.setAttributeProperties("blockIndent",{isFormatting:true});i.registerChildCommand(e.commands.get("indentBlock"));n.registerChildCommand(e.commands.get("outdentBlock"))}_setupConversionUsingOffset(){const e=this.editor.conversion;const t=this.editor.locale;const i=t.contentLanguageDirection==="rtl"?"margin-right":"margin-left";e.for("upcast").attributeToAttribute({view:{styles:{[i]:/[\s\S]+/}},model:{key:"blockIndent",value:e=>e.getStyle(i)}});e.for("downcast").attributeToAttribute({model:"blockIndent",view:e=>({key:"style",value:{[i]:e}})})}_setupConversionUsingClasses(e){const t={model:{key:"blockIndent",values:[]},view:{}};for(const i of e){t.model.values.push(i);t.view[i]={key:"class",value:[i]}}this.editor.conversion.attributeToAttribute(t)}}const yE="italic";class xE extends ok{static get pluginName(){return"ItalicEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:yE});e.model.schema.setAttributeProperties(yE,{isFormatting:true,copyOnEnter:true});e.conversion.attributeToElement({model:yE,view:"i",upcastAlso:["em",{styles:{"font-style":"italic"}}]});e.commands.add(yE,new Qk(e,yE));e.keystrokes.set("CTRL+I",yE)}}var AE='';const CE="italic";class TE extends ok{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add(CE,i=>{const n=e.commands.get(CE);const o=new Ew(i);o.set({label:t("Italic"),icon:AE,keystroke:"CTRL+I",tooltip:true,isToggleable:true});o.bind("isOn","isEnabled").to(n,"value","isEnabled");this.listenTo(o,"execute",()=>{e.execute(CE);e.editing.view.focus()});return o})}}class SE extends ok{static get requires(){return[xE,TE]}static get pluginName(){return"Italic"}}class EE{constructor(){this._definitions=new Set}get length(){return this._definitions.size}add(e){if(Array.isArray(e)){e.forEach(e=>this._definitions.add(e))}else{this._definitions.add(e)}}getDispatcher(){return e=>{e.on("attribute:linkHref",(e,t,i)=>{if(!i.consumable.test(t.item,"attribute:linkHref")){return}const n=i.writer;const o=n.document.selection;for(const e of this._definitions){const r=n.createAttributeElement("a",e.attributes,{priority:5});n.setCustomProperty("link",true,r);if(e.callback(t.attributeNewValue)){if(t.item.is("selection")){n.wrap(o.getFirstRange(),r)}else{n.wrap(i.mapper.toViewRange(t.range),r)}}else{n.unwrap(i.mapper.toViewRange(t.range),r)}}},{priority:"high"})}}getDispatcherForLinkedImage(){return e=>{e.on("attribute:linkHref:image",(e,t,i)=>{const n=i.mapper.toViewElement(t.item);const o=Array.from(n.getChildren()).find(e=>e.name==="a");for(const e of this._definitions){const n=Us(e.attributes);if(e.callback(t.attributeNewValue)){for(const[e,t]of n){if(e==="class"){i.writer.addClass(t,o)}else{i.writer.setAttribute(e,t,o)}}}else{for(const[e,t]of n){if(e==="class"){i.writer.removeClass(t,o)}else{i.writer.removeAttribute(e,o)}}}}})}}}function PE(e,t,i){var n=e.length;i=i===undefined?n:i;return!t&&i>=n?e:La(e,t,i)}var ME=PE;var IE="\\ud800-\\udfff",LE="\\u0300-\\u036f",NE="\\ufe20-\\ufe2f",zE="\\u20d0-\\u20ff",RE=LE+NE+zE,OE="\\ufe0e\\ufe0f";var VE="\\u200d";var DE=RegExp("["+VE+IE+RE+OE+"]");function BE(e){return DE.test(e)}var jE=BE;function FE(e){return e.split("")}var HE=FE;var UE="\\ud800-\\udfff",WE="\\u0300-\\u036f",qE="\\ufe20-\\ufe2f",$E="\\u20d0-\\u20ff",GE=WE+qE+$E,KE="\\ufe0e\\ufe0f";var YE="["+UE+"]",ZE="["+GE+"]",QE="\\ud83c[\\udffb-\\udfff]",JE="(?:"+ZE+"|"+QE+")",XE="[^"+UE+"]",eP="(?:\\ud83c[\\udde6-\\uddff]){2}",tP="[\\ud800-\\udbff][\\udc00-\\udfff]",iP="\\u200d";var nP=JE+"?",oP="["+KE+"]?",rP="(?:"+iP+"(?:"+[XE,eP,tP].join("|")+")"+oP+nP+")*",sP=oP+nP+rP,aP="(?:"+[XE+ZE+"?",ZE,eP,tP,YE].join("|")+")";var cP=RegExp(QE+"(?="+QE+")|"+aP+sP,"g");function lP(e){return e.match(cP)||[]}var dP=lP;function uP(e){return jE(e)?dP(e):HE(e)}var hP=uP;function fP(e){return function(t){t=va(t);var i=jE(t)?hP(t):undefined;var n=i?i[0]:t.charAt(0);var o=i?ME(i,1).join(""):t.slice(1);return n[e]()+o}}var mP=fP;var gP=mP("toUpperCase");var pP=gP;const bP=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g;const wP=/^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i;const kP="Ctrl+K";function _P(e){return e.is("attributeElement")&&!!e.getCustomProperty("link")}function vP(e,{writer:t}){const i=t.createAttributeElement("a",{href:e},{priority:5});t.setCustomProperty("link",true,i);return i}function yP(e){e=String(e);return xP(e)?e:"#"}function xP(e){const t=e.replace(bP,"");return t.match(wP)}function AP(e,t){const i={"Open in a new tab":e("Open in a new tab"),Downloadable:e("Downloadable")};t.forEach(e=>{if(e.label&&i[e.label]){e.label=i[e.label]}return e});return t}function CP(e){const t=[];if(e){for(const[i,n]of Object.entries(e)){const e=Object.assign({},n,{id:`link${pP(i)}`});t.push(e)}}return t}function TP(e,t){if(!e){return false}return e.is("element","image")&&t.checkAttribute("image","linkHref")}class SP extends sk{constructor(e){super(e);this.manualDecorators=new xs;this.automaticDecorators=new EE}restoreManualDecoratorStates(){for(const e of this.manualDecorators){e.value=this._getDecoratorStateFromModel(e.id)}}refresh(){const e=this.editor.model;const t=e.document;const i=ck(t.selection.getSelectedBlocks());if(TP(i,e.schema)){this.value=i.getAttribute("linkHref");this.isEnabled=e.schema.checkAttribute(i,"linkHref")}else{this.value=t.selection.getAttribute("linkHref");this.isEnabled=e.schema.checkAttributeInSelection(t.selection,"linkHref")}for(const e of this.manualDecorators){e.value=this._getDecoratorStateFromModel(e.id)}}execute(e,t={}){const i=this.editor.model;const n=i.document.selection;const o=[];const r=[];for(const e in t){if(t[e]){o.push(e)}else{r.push(e)}}i.change(t=>{if(n.isCollapsed){const s=n.getFirstPosition();if(n.hasAttribute("linkHref")){const a=d_(s,"linkHref",n.getAttribute("linkHref"),i);t.setAttribute("linkHref",e,a);o.forEach(e=>{t.setAttribute(e,true,a)});r.forEach(e=>{t.removeAttribute(e,a)});t.setSelection(t.createPositionAfter(a.end.nodeBefore))}else if(e!==""){const r=Us(n.getAttributes());r.set("linkHref",e);o.forEach(e=>{r.set(e,true)});const a=t.createText(e,r);i.insertContent(a,s);t.setSelection(t.createPositionAfter(a))}["linkHref",...o,...r].forEach(e=>{t.removeSelectionAttribute(e)})}else{const s=i.schema.getValidRanges(n.getRanges(),"linkHref");const a=[];for(const e of n.getSelectedBlocks()){if(i.schema.checkAttribute(e,"linkHref")){a.push(t.createRangeOn(e))}}const c=a.slice();for(const e of s){if(this._isRangeToUpdate(e,a)){c.push(e)}}for(const i of c){t.setAttribute("linkHref",e,i);o.forEach(e=>{t.setAttribute(e,true,i)});r.forEach(e=>{t.removeAttribute(e,i)})}}})}_getDecoratorStateFromModel(e){const t=this.editor.model;const i=t.document;const n=ck(i.selection.getSelectedBlocks());if(TP(n,t.schema)){return n.getAttribute(e)}return i.selection.getAttribute(e)}_isRangeToUpdate(e,t){for(const i of t){if(i.containsRange(e)){return false}}return true}}class EP extends sk{refresh(){const e=this.editor.model;const t=e.document;const i=ck(t.selection.getSelectedBlocks());if(TP(i,e.schema)){this.isEnabled=e.schema.checkAttribute(i,"linkHref")}else{this.isEnabled=e.schema.checkAttributeInSelection(t.selection,"linkHref")}}execute(){const e=this.editor;const t=this.editor.model;const i=t.document.selection;const n=e.commands.get("link");t.change(e=>{const o=i.isCollapsed?[d_(i.getFirstPosition(),"linkHref",i.getAttribute("linkHref"),t)]:i.getRanges();for(const t of o){e.removeAttribute("linkHref",t);if(n){for(const i of n.manualDecorators){e.removeAttribute(i.id,t)}}}})}}class PP{constructor({id:e,label:t,attributes:i,defaultValue:n}){this.id=e;this.set("value");this.defaultValue=n;this.label=t;this.attributes=i}}ys(PP,Zc);var MP=i(100);const IP="ck-link_selected";const LP="automatic";const NP="manual";const zP=/^(https?:)?\/\//;class RP extends ok{static get pluginName(){return"LinkEditing"}static get requires(){return[o_,Vv,dv]}constructor(e){super(e);e.config.define("link",{addTargetToExternalLinks:false})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:"linkHref"});e.conversion.for("dataDowncast").attributeToElement({model:"linkHref",view:vP});e.conversion.for("editingDowncast").attributeToElement({model:"linkHref",view:(e,t)=>vP(yP(e),t)});e.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{href:true}},model:{key:"linkHref",value:e=>e.getAttribute("href")}});e.commands.add("link",new SP(e));e.commands.add("unlink",new EP(e));const t=AP(e.t,CP(e.config.get("link.decorators")));this._enableAutomaticDecorators(t.filter(e=>e.mode===LP));this._enableManualDecorators(t.filter(e=>e.mode===NP));const i=e.plugins.get(o_);i.registerAttribute("linkHref");h_(e,"linkHref","a",IP);this._enableInsertContentSelectionAttributesFixer();this._enableClickingAfterLink();this._enableTypingOverLink();this._handleDeleteContentAfterLink()}_enableAutomaticDecorators(e){const t=this.editor;const i=t.commands.get("link");const n=i.automaticDecorators;if(t.config.get("link.addTargetToExternalLinks")){n.add({id:"linkIsExternal",mode:LP,callback:e=>zP.test(e),attributes:{target:"_blank",rel:"noopener noreferrer"}})}n.add(e);if(n.length){t.conversion.for("downcast").add(n.getDispatcher())}}_enableManualDecorators(e){if(!e.length){return}const t=this.editor;const i=t.commands.get("link");const n=i.manualDecorators;e.forEach(e=>{t.model.schema.extend("$text",{allowAttributes:e.id});n.add(new PP(e));t.conversion.for("downcast").attributeToElement({model:e.id,view:(t,{writer:i})=>{if(t){const t=n.get(e.id).attributes;const o=i.createAttributeElement("a",t,{priority:5});i.setCustomProperty("link",true,o);return o}}});t.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:n.get(e.id).attributes},model:{key:e.id}})})}_enableInsertContentSelectionAttributesFixer(){const e=this.editor;const t=e.model;const i=t.document.selection;const n=e.commands.get("link");this.listenTo(t,"insertContent",()=>{const e=i.anchor.nodeBefore;const o=i.anchor.nodeAfter;if(!i.hasAttribute("linkHref")){return}if(!e){return}if(!e.hasAttribute("linkHref")){return}if(o&&o.hasAttribute("linkHref")){return}t.change(e=>{OP(e,n.manualDecorators)})},{priority:"low"})}_enableClickingAfterLink(){const e=this.editor;const t=e.commands.get("link");e.editing.view.addObserver(bC);let i=false;this.listenTo(e.editing.view.document,"mousedown",()=>{i=true});this.listenTo(e.editing.view.document,"selectionChange",()=>{if(!i){return}i=false;const n=e.model.document.selection;if(!n.isCollapsed){return}if(!n.hasAttribute("linkHref")){return}const o=n.getFirstPosition();const r=d_(o,"linkHref",n.getAttribute("linkHref"),e.model);if(o.isTouching(r.start)||o.isTouching(r.end)){e.model.change(e=>{OP(e,t.manualDecorators)})}})}_enableTypingOverLink(){const e=this.editor;const t=e.editing.view;let i;let n;this.listenTo(t.document,"delete",()=>{n=true},{priority:"high"});this.listenTo(e.model,"deleteContent",()=>{const t=e.model.document.selection;if(t.isCollapsed){return}if(n){n=false;return}if(!DP(e)){return}if(VP(e.model)){i=t.getAttributes()}},{priority:"high"});this.listenTo(e.model,"insertContent",(t,[o])=>{n=false;if(!DP(e)){return}if(!i){return}e.model.change(e=>{for(const[t,n]of i){e.setAttribute(t,n,o)}});i=null},{priority:"high"})}_handleDeleteContentAfterLink(){const e=this.editor;const t=e.model;const i=t.document.selection;const n=e.editing.view;const o=e.commands.get("link");let r=false;let s=false;this.listenTo(n.document,"delete",(e,t)=>{s=t.domEvent.keyCode===zl.backspace},{priority:"high"});this.listenTo(t,"deleteContent",()=>{r=false;const e=i.getFirstPosition();const n=i.getAttribute("linkHref");if(!n){return}const o=d_(e,"linkHref",n,t);r=o.containsPosition(e)||o.end.isEqual(e)},{priority:"high"});this.listenTo(t,"deleteContent",()=>{if(!s){return}s=false;if(r){return}e.model.enqueueChange(e=>{OP(e,o.manualDecorators)})},{priority:"low"})}}function OP(e,t){e.removeSelectionAttribute("linkHref");for(const i of t){e.removeSelectionAttribute(i.id)}}function VP(e){const t=e.document.selection;const i=t.getFirstPosition();const n=t.getLastPosition();const o=i.nodeAfter;if(!o){return false}if(!o.is("$text")){return false}if(!o.hasAttribute("linkHref")){return false}const r=n.textNode||n.nodeBefore;if(o===r){return true}const s=d_(i,"linkHref",o.getAttribute("linkHref"),e);return s.containsRange(e.createRange(i,n),true)}function DP(e){const t=e.plugins.get("Input");return t.isInput(e.model.change(e=>e.batch))}class BP extends eh{constructor(e){super(e);this.domEventType="click"}onDomEvent(e){this.fire(e.type,e)}}var jP=i(102);class FP extends Hb{constructor(e,t,i){super(e);const n=e.t;this.focusTracker=new Zp;this.keystrokes=new Vp;this.urlInputView=this._createUrlInput(i);this.saveButtonView=this._createButton(n("Save"),GC,"ck-button-save");this.saveButtonView.type="submit";this.cancelButtonView=this._createButton(n("Cancel"),KC,"ck-button-cancel","cancel");this._manualDecoratorSwitches=this._createManualDecoratorSwitches(t);this.children=this._createFormChildren(t.manualDecorators);this._focusables=new hb;this._focusCycler=new rw({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});const o=["ck","ck-link-form"];if(t.manualDecorators.length){o.push("ck-link-form_layout-vertical")}this.setTemplate({tag:"form",attributes:{class:o,tabindex:"-1"},children:this.children})}getDecoratorSwitchesState(){return Array.from(this._manualDecoratorSwitches).reduce((e,t)=>{e[t.name]=t.isOn;return e},{})}render(){super.render();$C({view:this});const e=[this.urlInputView,...this._manualDecoratorSwitches,this.saveButtonView,this.cancelButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createUrlInput(e="https://"){const t=this.locale.t;const i=new FC(this.locale,WC);i.label=t("Link URL");i.fieldView.placeholder=e+"example.com";return i}_createButton(e,t,i,n){const o=new Ew(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:i}});if(n){o.delegate("execute").to(this,n)}return o}_createManualDecoratorSwitches(e){const t=this.createCollection();for(const i of e.manualDecorators){const n=new Ow(this.locale);n.set({name:i.id,label:i.label,withText:true});n.bind("isOn").toMany([i,e],"value",(e,t)=>t===undefined&&e===undefined?i.defaultValue:e);n.on("execute",()=>{i.set("value",!n.isOn)});t.add(n)}return t}_createFormChildren(e){const t=this.createCollection();t.add(this.urlInputView);if(e.length){const e=new Hb;e.setTemplate({tag:"ul",children:this._manualDecoratorSwitches.map(e=>({tag:"li",children:[e],attributes:{class:["ck","ck-list__item"]}})),attributes:{class:["ck","ck-reset","ck-list"]}});t.add(e)}t.add(this.saveButtonView);t.add(this.cancelButtonView);return t}}var HP='';var UP='';var WP=i(104);class qP extends Hb{constructor(e){super(e);const t=e.t;this.focusTracker=new Zp;this.keystrokes=new Vp;this.previewButtonView=this._createPreviewButton();this.unlinkButtonView=this._createButton(t("Unlink"),HP,"unlink");this.editButtonView=this._createButton(t("Edit link"),UP,"edit");this.set("href");this._focusables=new hb;this._focusCycler=new rw({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this.setTemplate({tag:"div",attributes:{class:["ck","ck-link-actions"],tabindex:"-1"},children:[this.previewButtonView,this.editButtonView,this.unlinkButtonView]})}render(){super.render();const e=[this.previewButtonView,this.editButtonView,this.unlinkButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createButton(e,t,i){const n=new Ew(this.locale);n.set({label:e,icon:t,tooltip:true});n.delegate("execute").to(this,i);return n}_createPreviewButton(){const e=new Ew(this.locale);const t=this.bindTemplate;const i=this.t;e.set({withText:true,tooltip:i("Open link in new tab")});e.extendTemplate({attributes:{class:["ck","ck-link-actions__preview"],href:t.to("href",e=>e&&yP(e)),target:"_blank",rel:"noopener noreferrer"}});e.bind("label").to(this,"href",e=>e||i("This link has no URL"));e.bind("isEnabled").to(this,"href",e=>!!e);e.template.tag="a";e.template.eventListeners={};return e}}var $P='';const GP=/^((\w+:(\/{2,})?)|(\W))/i;const KP=/[\w-]+@[\w-]+\.+[\w-]+/i;const YP="link-ui";class ZP extends ok{static get requires(){return[iT]}static get pluginName(){return"LinkUI"}init(){const e=this.editor;e.editing.view.addObserver(BP);this.actionsView=this._createActionsView();this.formView=this._createFormView();this._balloon=e.plugins.get(iT);this._createToolbarLinkButton();this._enableUserBalloonInteractions();e.conversion.for("editingDowncast").markerToHighlight({model:YP,view:{classes:["ck-fake-link-selection"]}});e.conversion.for("editingDowncast").markerToElement({model:YP,view:{name:"span",classes:["ck-fake-link-selection","ck-fake-link-selection_collapsed"]}})}destroy(){super.destroy();this.formView.destroy()}_createActionsView(){const e=this.editor;const t=new qP(e.locale);const i=e.commands.get("link");const n=e.commands.get("unlink");t.bind("href").to(i,"value");t.editButtonView.bind("isEnabled").to(i);t.unlinkButtonView.bind("isEnabled").to(n);this.listenTo(t,"edit",()=>{this._addFormView()});this.listenTo(t,"unlink",()=>{e.execute("unlink");this._hideUI()});t.keystrokes.set("Esc",(e,t)=>{this._hideUI();t()});t.keystrokes.set(kP,(e,t)=>{this._addFormView();t()});return t}_createFormView(){const e=this.editor;const t=e.commands.get("link");const i=e.config.get("link.defaultProtocol");const n=new FP(e.locale,t,i);n.urlInputView.fieldView.bind("value").to(t,"value");n.urlInputView.bind("isReadOnly").to(t,"isEnabled",e=>!e);n.saveButtonView.bind("isEnabled").to(t);this.listenTo(n,"submit",()=>{const{value:t}=n.urlInputView.fieldView.element;const o=!!i&&!GP.test(t);const r=KP.test(t);const s=r?"mailto:":i;const a=t&&o?s+t:t;e.execute("link",a,n.getDecoratorSwitchesState());this._closeFormView()});this.listenTo(n,"cancel",()=>{this._closeFormView()});n.keystrokes.set("Esc",(e,t)=>{this._closeFormView();t()});return n}_createToolbarLinkButton(){const e=this.editor;const t=e.commands.get("link");const i=e.t;e.keystrokes.set(kP,(e,t)=>{t();this._showUI(true)});e.ui.componentFactory.add("link",e=>{const n=new Ew(e);n.isEnabled=true;n.label=i("Link");n.icon=$P;n.keystroke=kP;n.tooltip=true;n.isToggleable=true;n.bind("isEnabled").to(t,"isEnabled");n.bind("isOn").to(t,"value",e=>!!e);this.listenTo(n,"execute",()=>this._showUI(true));return n})}_enableUserBalloonInteractions(){const e=this.editor.editing.view.document;this.listenTo(e,"click",()=>{const e=this._getSelectedLinkElement();if(e){this._showUI()}});this.editor.keystrokes.set("Tab",(e,t)=>{if(this._areActionsVisible&&!this.actionsView.focusTracker.isFocused){this.actionsView.focus();t()}},{priority:"high"});this.editor.keystrokes.set("Esc",(e,t)=>{if(this._isUIVisible){this._hideUI();t()}});Vw({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:[this._balloon.view.element],callback:()=>this._hideUI()})}_addActionsView(){if(this._areActionsInPanel){return}this._balloon.add({view:this.actionsView,position:this._getBalloonPositionData()})}_addFormView(){if(this._isFormInPanel){return}const e=this.editor;const t=e.commands.get("link");this._balloon.add({view:this.formView,position:this._getBalloonPositionData()});if(this._balloon.visibleView===this.formView){this.formView.urlInputView.fieldView.select()}this.formView.urlInputView.fieldView.element.value=t.value||""}_closeFormView(){const e=this.editor.commands.get("link");e.restoreManualDecoratorStates();if(e.value!==undefined){this._removeFormView()}else{this._hideUI()}}_removeFormView(){if(this._isFormInPanel){this.formView.saveButtonView.focus();this._balloon.remove(this.formView);this.editor.editing.view.focus();this._hideFakeVisualSelection()}}_showUI(e=false){if(!this._getSelectedLinkElement()){this._showFakeVisualSelection();this._addActionsView();if(e){this._balloon.showStack("main")}this._addFormView()}else{if(this._areActionsVisible){this._addFormView()}else{this._addActionsView()}if(e){this._balloon.showStack("main")}}this._startUpdatingUI()}_hideUI(){if(!this._isUIInPanel){return}const e=this.editor;this.stopListening(e.ui,"update");this.stopListening(this._balloon,"change:visibleView");e.editing.view.focus();this._removeFormView();this._balloon.remove(this.actionsView);this._hideFakeVisualSelection()}_startUpdatingUI(){const e=this.editor;const t=e.editing.view.document;let i=this._getSelectedLinkElement();let n=r();const o=()=>{const e=this._getSelectedLinkElement();const t=r();if(i&&!e||!i&&t!==n){this._hideUI()}else if(this._isUIVisible){this._balloon.updatePosition(this._getBalloonPositionData())}i=e;n=t};function r(){return t.selection.focus.getAncestors().reverse().find(e=>e.is("element"))}this.listenTo(e.ui,"update",o);this.listenTo(this._balloon,"change:visibleView",o)}get _isFormInPanel(){return this._balloon.hasView(this.formView)}get _areActionsInPanel(){return this._balloon.hasView(this.actionsView)}get _areActionsVisible(){return this._balloon.visibleView===this.actionsView}get _isUIInPanel(){return this._isFormInPanel||this._areActionsInPanel}get _isUIVisible(){const e=this._balloon.visibleView;return e==this.formView||this._areActionsVisible}_getBalloonPositionData(){const e=this.editor.editing.view;const t=this.editor.model;const i=e.document;const n=this._getSelectedLinkElement();const o=t.markers.has(YP)?this.editor.editing.mapper.toViewRange(t.markers.get(YP).getRange()):i.selection.getFirstRange();const r=n?e.domConverter.mapViewToDom(n):e.domConverter.viewRangeToDom(o);return{target:r}}_getSelectedLinkElement(){const e=this.editor.editing.view;const t=e.document.selection;if(t.isCollapsed){return QP(t.getFirstPosition())}else{const i=t.getFirstRange().getTrimmed();const n=QP(i.start);const o=QP(i.end);if(!n||n!=o){return null}if(e.createRangeIn(n).getTrimmed().isEqual(i)){return n}else{return null}}}_showFakeVisualSelection(){const e=this.editor.model;e.change(t=>{if(e.markers.has(YP)){t.updateMarker(YP,{range:e.document.selection.getFirstRange()})}else{t.addMarker(YP,{usingOperation:false,affectsData:false,range:e.document.selection.getFirstRange()})}})}_hideFakeVisualSelection(){const e=this.editor.model;if(e.markers.has(YP)){e.change(e=>{e.removeMarker(YP)})}}}function QP(e){return e.getAncestors().find(e=>_P(e))}class JP extends ok{static get requires(){return[RP,ZP]}static get pluginName(){return"Link"}}class XP extends sk{constructor(e,t){super(e);this.type=t}refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(){const e=this.editor.model;const t=e.document;const i=Array.from(t.selection.getSelectedBlocks()).filter(t=>tM(t,e.schema));const n=this.value===true;e.change(e=>{if(n){let t=i[i.length-1].nextSibling;let n=Number.POSITIVE_INFINITY;let o=[];while(t&&t.name=="listItem"&&t.getAttribute("listIndent")!==0){const e=t.getAttribute("listIndent");if(e=i){if(r>o.getAttribute("listIndent")){r=o.getAttribute("listIndent")}if(o.getAttribute("listIndent")==r){e[t?"unshift":"push"](o)}o=o[t?"previousSibling":"nextSibling"]}}}function tM(e,t){return t.checkChild(e.parent,"listItem")&&!t.isObject(e)}class iM extends sk{constructor(e,t){super(e);this._indentBy=t=="forward"?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=this.editor.model;const t=e.document;let i=Array.from(t.selection.getSelectedBlocks());e.change(e=>{const t=i[i.length-1];let n=t.nextSibling;while(n&&n.name=="listItem"&&n.getAttribute("listIndent")>t.getAttribute("listIndent")){i.push(n);n=n.nextSibling}if(this._indentBy<0){i=i.reverse()}for(const t of i){const i=t.getAttribute("listIndent")+this._indentBy;if(i<0){e.rename(t,"paragraph")}else{e.setAttribute("listIndent",i,t)}}this.fire("_executeCleanup",i)})}_checkEnabled(){const e=ck(this.editor.model.document.selection.getSelectedBlocks());if(!e||!e.is("element","listItem")){return false}if(this._indentBy>0){const t=e.getAttribute("listIndent");const i=e.getAttribute("listType");let n=e.previousSibling;while(n&&n.is("element","listItem")&&n.getAttribute("listIndent")>=t){if(n.getAttribute("listIndent")==t){return n.getAttribute("listType")==i}n=n.previousSibling}return false}return true}}function nM(e){const t=e.createContainerElement("li");t.getFillerOffset=uM;return t}function oM(e,t){const i=t.mapper;const n=t.writer;const o=e.getAttribute("listType")=="numbered"?"ol":"ul";const r=nM(n);const s=n.createContainerElement(o,null);n.insert(n.createPositionAt(s,0),r);i.bindElements(e,r);return r}function rM(e,t,i,n){const o=t.parent;const r=i.mapper;const s=i.writer;let a=r.toViewPosition(n.createPositionBefore(e));const c=cM(e.previousSibling,{sameIndent:true,smallerIndent:true,listIndent:e.getAttribute("listIndent")});const l=e.previousSibling;if(c&&c.getAttribute("listIndent")==e.getAttribute("listIndent")){const e=r.toViewElement(c);a=s.breakContainer(s.createPositionAfter(e))}else{if(l&&l.name=="listItem"){a=r.toViewPosition(n.createPositionAt(l,"end"));const e=r.findMappedViewAncestor(a);const t=dM(e);if(t){a=s.createPositionBefore(t)}else{a=s.createPositionAt(e,"end")}}else{a=r.toViewPosition(n.createPositionBefore(e))}}a=aM(a);s.insert(a,o);if(l&&l.name=="listItem"){const e=r.toViewElement(l);const i=s.createRange(s.createPositionAt(e,0),a);const n=i.getWalker({ignoreElementEnd:true});for(const e of n){if(e.item.is("element","li")){const i=s.breakContainer(s.createPositionBefore(e.item));const o=e.item.parent;const r=s.createPositionAt(t,"end");sM(s,r.nodeBefore,r.nodeAfter);s.move(s.createRangeOn(o),r);n.position=i}}}else{const i=o.nextSibling;if(i&&(i.is("element","ul")||i.is("element","ol"))){let n=null;for(const t of i.getChildren()){const i=r.toModelElement(t);if(i&&i.getAttribute("listIndent")>e.getAttribute("listIndent")){n=t}else{break}}if(n){s.breakContainer(s.createPositionAfter(n));s.move(s.createRangeOn(n.parent),s.createPositionAt(t,"end"))}}}sM(s,o,o.nextSibling);sM(s,o.previousSibling,o)}function sM(e,t,i){if(!t||!i||t.name!="ul"&&t.name!="ol"){return null}if(t.name!=i.name||t.getAttribute("class")!==i.getAttribute("class")){return null}return e.mergeContainers(e.createPositionAfter(t))}function aM(e){return e.getLastMatchingPosition(e=>e.item.is("uiElement"))}function cM(e,t){const i=!!t.sameIndent;const n=!!t.smallerIndent;const o=t.listIndent;let r=e;while(r&&r.name=="listItem"){const e=r.getAttribute("listIndent");if(i&&o==e||n&&o>e){return r}r=r.previousSibling}return null}function lM(e,t,i,n){e.ui.componentFactory.add(t,o=>{const r=e.commands.get(t);const s=new Ew(o);s.set({label:i,icon:n,tooltip:true,isToggleable:true});s.bind("isOn","isEnabled").to(r,"value","isEnabled");s.on("execute",()=>{e.execute(t);e.editing.view.focus()});return s})}function dM(e){for(const t of e.getChildren()){if(t.name=="ul"||t.name=="ol"){return t}}return null}function uM(){const e=!this.isEmpty&&(this.getChild(0).name=="ul"||this.getChild(0).name=="ol");if(this.isEmpty||e){return 0}return Uc.call(this)}function hM(e){return(t,i,n)=>{const o=n.consumable;if(!o.test(i.item,"insert")||!o.test(i.item,"attribute:listType")||!o.test(i.item,"attribute:listIndent")){return}o.consume(i.item,"insert");o.consume(i.item,"attribute:listType");o.consume(i.item,"attribute:listIndent");const r=i.item;const s=oM(r,n);rM(r,s,n,e)}}function fM(e){return(t,i,n)=>{const o=n.mapper.toViewPosition(i.position);const r=o.getLastMatchingPosition(e=>!e.item.is("element","li"));const s=r.nodeAfter;const a=n.writer;a.breakContainer(a.createPositionBefore(s));a.breakContainer(a.createPositionAfter(s));const c=s.parent;const l=c.previousSibling;const d=a.createRangeOn(c);const u=a.remove(d);if(l&&l.nextSibling){sM(a,l,l.nextSibling)}const h=n.mapper.toModelElement(s);EM(h.getAttribute("listIndent")+1,i.position,d.start,s,n,e);for(const e of a.createRangeIn(u).getItems()){n.mapper.unbindViewElement(e)}t.stop()}}function mM(e,t,i){if(!i.consumable.consume(t.item,"attribute:listType")){return}const n=i.mapper.toViewElement(t.item);const o=i.writer;o.breakContainer(o.createPositionBefore(n));o.breakContainer(o.createPositionAfter(n));const r=n.parent;const s=t.attributeNewValue=="numbered"?"ol":"ul";o.rename(s,r)}function gM(e,t,i){const n=i.mapper.toViewElement(t.item);const o=n.parent;const r=i.writer;sM(r,o,o.nextSibling);sM(r,o.previousSibling,o);for(const e of t.item.getChildren()){i.consumable.consume(e,"insert")}}function pM(e){return(t,i,n)=>{if(!n.consumable.consume(i.item,"attribute:listIndent")){return}const o=n.mapper.toViewElement(i.item);const r=n.writer;r.breakContainer(r.createPositionBefore(o));r.breakContainer(r.createPositionAfter(o));const s=o.parent;const a=s.previousSibling;const c=r.createRangeOn(s);r.remove(c);if(a&&a.nextSibling){sM(r,a,a.nextSibling)}EM(i.attributeOldValue+1,i.range.start,c.start,o,n,e);rM(i.item,o,n,e);for(const e of i.item.getChildren()){n.consumable.consume(e,"insert")}}}function bM(e,t,i){if(t.item.name!="listItem"){let e=i.mapper.toViewPosition(t.range.start);const n=i.writer;const o=[];while(e.parent.name=="ul"||e.parent.name=="ol"){e=n.breakContainer(e);if(e.parent.name!="li"){break}const t=e;const i=n.createPositionAt(e.parent,"end");if(!t.isEqual(i)){const e=n.remove(n.createRange(t,i));o.push(e)}e=n.createPositionAfter(e.parent)}if(o.length>0){for(let t=0;t0){const t=sM(n,i,i.nextSibling);if(t&&t.parent==i){e.offset--}}}sM(n,e.nodeBefore,e.nodeAfter)}}}function wM(e,t,i){const n=i.mapper.toViewPosition(t.position);const o=n.nodeBefore;const r=n.nodeAfter;sM(i.writer,o,r)}function kM(e,t,i){if(i.consumable.consume(t.viewItem,{name:true})){const e=i.writer;const n=e.createElement("listItem");const o=MM(t.viewItem);e.setAttribute("listIndent",o,n);const r=t.viewItem.parent&&t.viewItem.parent.name=="ol"?"numbered":"bulleted";e.setAttribute("listType",r,n);if(!i.safeInsert(n,t.modelCursor)){return}const s=TM(n,t.viewItem.getChildren(),i);t.modelRange=e.createRange(t.modelCursor,s);i.updateConversionResult(n,t)}}function _M(e,t,i){if(i.consumable.test(t.viewItem,{name:true})){const e=Array.from(t.viewItem.getChildren());for(const t of e){const e=!(t.is("element","li")||PM(t));if(e){t._remove()}}}}function vM(e,t,i){if(i.consumable.test(t.viewItem,{name:true})){if(t.viewItem.childCount===0){return}const e=[...t.viewItem.getChildren()];let i=false;let n=true;for(const t of e){if(i&&!PM(t)){t._remove()}if(t.is("$text")){if(n){t._data=t.data.replace(/^\s+/,"")}if(!t.nextSibling||PM(t.nextSibling)){t._data=t.data.replace(/\s+$/,"")}}else if(PM(t)){i=true}n=false}}}function yM(e){return(t,i)=>{if(i.isPhantom){return}const n=i.modelPosition.nodeBefore;if(n&&n.is("element","listItem")){const t=i.mapper.toViewElement(n);const o=t.getAncestors().find(PM);const r=e.createPositionAt(t,0).getWalker();for(const e of r){if(e.type=="elementStart"&&e.item.is("element","li")){i.viewPosition=e.previousPosition;break}else if(e.type=="elementEnd"&&e.item==o){i.viewPosition=e.nextPosition;break}}}}}function xM(e){return(t,i)=>{const n=i.viewPosition;const o=n.parent;const r=i.mapper;if(o.name=="ul"||o.name=="ol"){if(!n.isAtEnd){const t=r.toModelElement(n.nodeAfter);i.modelPosition=e.createPositionBefore(t)}else{const t=r.toModelElement(n.nodeBefore);const o=r.getModelLength(n.nodeBefore);i.modelPosition=e.createPositionBefore(t).getShiftedBy(o)}t.stop()}else if(o.name=="li"&&n.nodeBefore&&(n.nodeBefore.name=="ul"||n.nodeBefore.name=="ol")){const s=r.toModelElement(o);let a=1;let c=n.nodeBefore;while(c&&PM(c)){a+=r.getModelLength(c);c=c.previousSibling}i.modelPosition=e.createPositionBefore(s).getShiftedBy(a);t.stop()}}}function AM(e,t){const i=e.document.differ.getChanges();const n=new Map;let o=false;for(const n of i){if(n.type=="insert"&&n.name=="listItem"){r(n.position)}else if(n.type=="insert"&&n.name!="listItem"){if(n.name!="$text"){const i=n.position.nodeAfter;if(i.hasAttribute("listIndent")){t.removeAttribute("listIndent",i);o=true}if(i.hasAttribute("listType")){t.removeAttribute("listType",i);o=true}if(i.hasAttribute("listStyle")){t.removeAttribute("listStyle",i);o=true}for(const t of Array.from(e.createRangeIn(i)).filter(e=>e.item.is("element","listItem"))){r(t.previousPosition)}}const i=n.position.getShiftedBy(n.length);r(i)}else if(n.type=="remove"&&n.name=="listItem"){r(n.position)}else if(n.type=="attribute"&&n.attributeKey=="listIndent"){r(n.range.start)}else if(n.type=="attribute"&&n.attributeKey=="listType"){r(n.range.start)}}for(const e of n.values()){s(e);a(e)}return o;function r(e){const t=e.nodeBefore;if(!t||!t.is("element","listItem")){const t=e.nodeAfter;if(t&&t.is("element","listItem")){n.set(t,t)}}else{let e=t;if(n.has(e)){return}for(let t=e.previousSibling;t&&t.is("element","listItem");t=e.previousSibling){e=t;if(n.has(e)){return}}n.set(t,e)}}function s(e){let i=0;let n=null;while(e&&e.is("element","listItem")){const r=e.getAttribute("listIndent");if(r>i){let s;if(n===null){n=r-i;s=i}else{if(n>r){n=r}s=r-n}t.setAttribute("listIndent",s,e);o=true}else{n=null;i=e.getAttribute("listIndent")+1}e=e.nextSibling}}function a(e){let i=[];let n=null;while(e&&e.is("element","listItem")){const r=e.getAttribute("listIndent");if(n&&n.getAttribute("listIndent")>r){i=i.slice(0,r+1)}if(r!=0){if(i[r]){const n=i[r];if(e.getAttribute("listType")!=n){t.setAttribute("listType",n,e);o=true}}else{i[r]=e.getAttribute("listType")}}n=e;e=e.nextSibling}}}function CM(e,[t,i]){let n=t.is("documentFragment")?t.getChild(0):t;let o;if(!i){o=this.document.selection}else{o=this.createSelection(i)}if(n&&n.is("element","listItem")){const e=o.getFirstPosition();let t=null;if(e.parent.is("element","listItem")){t=e.parent}else if(e.nodeBefore&&e.nodeBefore.is("element","listItem")){t=e.nodeBefore}if(t){const e=t.getAttribute("listIndent");if(e>0){while(n&&n.is("element","listItem")){n._setAttribute("listIndent",n.getAttribute("listIndent")+e);n=n.nextSibling}}}}}function TM(e,t,i){const{writer:n,schema:o}=i;let r=n.createPositionAfter(e);for(const s of t){if(s.name=="ul"||s.name=="ol"){r=i.convertItem(s,r).modelCursor}else{const t=i.convertItem(s,n.createPositionAt(e,"end"));const a=t.modelRange.start.nodeAfter;const c=a&&a.is("element")&&!o.checkChild(e,a.name);if(c){if(t.modelCursor.parent.is("element","listItem")){e=t.modelCursor.parent}else{e=SM(t.modelCursor)}r=n.createPositionAfter(e)}}}return r}function SM(e){const t=new Kh({startPosition:e});let i;do{i=t.next()}while(!i.value.item.is("element","listItem"));return i.value.item}function EM(e,t,i,n,o,r){const s=cM(t.nodeBefore,{sameIndent:true,smallerIndent:true,listIndent:e,foo:"b"});const a=o.mapper;const c=o.writer;const l=s?s.getAttribute("listIndent"):null;let d;if(!s){d=i}else if(l==e){const e=a.toViewElement(s).parent;d=c.createPositionAfter(e)}else{const e=r.createPositionAt(s,"end");d=a.toViewPosition(e)}d=aM(d);for(const e of[...n.getChildren()]){if(PM(e)){d=c.move(c.createRangeOn(e),d).end;sM(c,e,e.nextSibling);sM(c,e.previousSibling,e)}}}function PM(e){return e.is("element","ol")||e.is("element","ul")}function MM(e){let t=0;let i=e.parent;while(i){if(i.is("element","li")){t++}else{const e=i.previousSibling;if(e&&e.is("element","li")){t++}}i=i.parent}return t}class IM extends ok{static get pluginName(){return"ListEditing"}static get requires(){return[$x]}init(){const e=this.editor;e.model.schema.register("listItem",{inheritAllFrom:"$block",allowAttributes:["listType","listIndent"]});const t=e.data;const i=e.editing;e.model.document.registerPostFixer(t=>AM(e.model,t));i.mapper.registerViewToModelLength("li",LM);t.mapper.registerViewToModelLength("li",LM);i.mapper.on("modelToViewPosition",yM(i.view));i.mapper.on("viewToModelPosition",xM(e.model));t.mapper.on("modelToViewPosition",yM(i.view));e.conversion.for("editingDowncast").add(t=>{t.on("insert",bM,{priority:"high"});t.on("insert:listItem",hM(e.model));t.on("attribute:listType:listItem",mM,{priority:"high"});t.on("attribute:listType:listItem",gM,{priority:"low"});t.on("attribute:listIndent:listItem",pM(e.model));t.on("remove:listItem",fM(e.model));t.on("remove",wM,{priority:"low"})});e.conversion.for("dataDowncast").add(t=>{t.on("insert",bM,{priority:"high"});t.on("insert:listItem",hM(e.model))});e.conversion.for("upcast").add(e=>{e.on("element:ul",_M,{priority:"high"});e.on("element:ol",_M,{priority:"high"});e.on("element:li",vM,{priority:"high"});e.on("element:li",kM)});e.model.on("insertContent",CM,{priority:"high"});e.commands.add("numberedList",new XP(e,"numbered"));e.commands.add("bulletedList",new XP(e,"bulleted"));e.commands.add("indentList",new iM(e,"forward"));e.commands.add("outdentList",new iM(e,"backward"));const n=i.view.document;this.listenTo(n,"enter",(e,t)=>{const i=this.editor.model.document;const n=i.selection.getLastPosition().parent;if(i.selection.isCollapsed&&n.name=="listItem"&&n.isEmpty){this.editor.execute("outdentList");t.preventDefault();e.stop()}});this.listenTo(n,"delete",(e,t)=>{if(t.direction!=="backward"){return}const i=this.editor.model.document.selection;if(!i.isCollapsed){return}const n=i.getFirstPosition();if(!n.isAtStart){return}const o=n.parent;if(o.name!=="listItem"){return}const r=o.previousSibling&&o.previousSibling.name==="listItem";if(r){return}this.editor.execute("outdentList");t.preventDefault();e.stop()},{priority:"high"});const o=e=>(t,i)=>{const n=this.editor.commands.get(e);if(n.isEnabled){this.editor.execute(e);i()}};e.keystrokes.set("Tab",o("indentList"));e.keystrokes.set("Shift+Tab",o("outdentList"))}afterInit(){const e=this.editor.commands;const t=e.get("indent");const i=e.get("outdent");if(t){t.registerChildCommand(e.get("indentList"))}if(i){i.registerChildCommand(e.get("outdentList"))}}}function LM(e){let t=1;for(const i of e.getChildren()){if(i.name=="ul"||i.name=="ol"){for(const e of i.getChildren()){t+=LM(e)}}}return t}var NM='';var zM='';class RM extends ok{init(){const e=this.editor.t;lM(this.editor,"numberedList",e("Numbered List"),NM);lM(this.editor,"bulletedList",e("Bulleted List"),zM)}}class OM extends ok{static get requires(){return[IM,RM]}static get pluginName(){return"List"}}class VM extends sk{constructor(e,t){super(e);this._defaultType=t}refresh(){this.value=this._getValue();this.isEnabled=this._checkEnabled()}execute(e={}){const t=this.editor.model;const i=t.document;let n=[...i.selection.getSelectedBlocks()].filter(e=>e.is("element","listItem")).map(e=>{const i=t.change(t=>t.createPositionAt(e,0));return[...DM(i,"backward"),...DM(i,"forward")]}).flat();n=[...new Set(n)];if(!n.length){return}t.change(t=>{for(const i of n){t.setAttribute("listStyle",e.type||this._defaultType,i)}})}_getValue(){const e=this.editor.model.document.selection.getFirstPosition().parent;if(e&&e.is("element","listItem")){return e.getAttribute("listStyle")}return null}_checkEnabled(){const e=this.editor;const t=e.commands.get("numberedList");const i=e.commands.get("bulletedList");return t.isEnabled||i.isEnabled}}function DM(e,t){const i=[];const n=e.parent;const o={ignoreElementEnd:true,startPosition:e,shallow:true,direction:t};const r=n.getAttribute("listIndent");const s=[...new Kh(o)].filter(e=>e.item.is("element")).map(e=>e.item);for(const e of s){if(!e.is("element","listItem")){break}if(e.getAttribute("listIndent")r){continue}if(e.getAttribute("listType")!==n.getAttribute("listType")){break}if(e.getAttribute("listStyle")!==n.getAttribute("listStyle")){break}if(t==="backward"){i.unshift(e)}else{i.push(e)}}return i}const BM="default";class jM extends ok{static get requires(){return[IM]}static get pluginName(){return"ListStyleEditing"}init(){const e=this.editor;const t=e.model;t.schema.extend("listItem",{allowAttributes:["listStyle"]});e.commands.add("listStyle",new VM(e,BM));this.listenTo(e.commands.get("indentList"),"_executeCleanup",UM(e));this.listenTo(e.commands.get("outdentList"),"_executeCleanup",WM(e));this.listenTo(e.commands.get("bulletedList"),"_executeCleanup",GM(e));this.listenTo(e.commands.get("numberedList"),"_executeCleanup",GM(e));t.document.registerPostFixer(qM(e));e.conversion.for("upcast").add(FM());e.conversion.for("downcast").add(HM())}afterInit(){const e=this.editor;if(e.commands.get("todoList")){e.model.document.registerPostFixer($M(e))}}}function FM(){return e=>{e.on("element:li",(e,t,i)=>{const n=t.viewItem.parent;const o=n.getStyle("list-style-type")||BM;const r=t.modelRange.start.nodeAfter;i.writer.setAttribute("listStyle",o,r)},{priority:"low"})}}function HM(){return i=>{i.on("attribute:listStyle:listItem",(i,n,o)=>{const r=o.writer;const s=n.item;const a=n.attributeNewValue;const c=cM(s.previousSibling,{sameIndent:true,listIndent:s.getAttribute("listIndent"),direction:"backward"});const l=o.mapper.toViewElement(s);if(!c){t(r,a,l.parent)}else if(!e(c,s)){r.breakContainer(r.createPositionBefore(l));r.breakContainer(r.createPositionAfter(l));t(r,a,l.parent)}},{priority:"low"})};function e(e,t){return e.getAttribute("listType")===t.getAttribute("listType")&&e.getAttribute("listIndent")===t.getAttribute("listIndent")&&e.getAttribute("listStyle")===t.getAttribute("listStyle")}function t(e,t,i){if(t&&t!==BM){e.setStyle("list-style-type",t,i)}else{e.removeStyle("list-style-type",i)}}}function UM(e){return(t,i)=>{let n;const o=i[0];const r=o.getAttribute("listIndent");const s=i.filter(e=>e.getAttribute("listIndent")===r);if(o.previousSibling.getAttribute("listIndent")+1===r){n=BM}else{const e=cM(o.previousSibling,{sameIndent:true,direction:"backward",listIndent:r});n=e.getAttribute("listStyle")}e.model.change(e=>{for(const t of s){e.setAttribute("listStyle",n,t)}})}}function WM(e){return(t,i)=>{i=i.reverse().filter(e=>e.is("element","listItem"));if(!i.length){return}const n=i[0].getAttribute("listIndent");const o=i[0].getAttribute("listType");let r=i[0].previousSibling;if(r.is("element","listItem")){while(r.getAttribute("listIndent")!==n){r=r.previousSibling}}else{r=null}if(!r){r=i[i.length-1].nextSibling}if(!r||!r.is("element","listItem")){return}if(r.getAttribute("listType")!==o){return}e.model.change(e=>{const t=i.filter(e=>e.getAttribute("listIndent")===n);for(const i of t){e.setAttribute("listStyle",r.getAttribute("listStyle"),i)}})}}function qM(e){return i=>{let n=false;let o=[];for(const t of e.model.document.differ.getChanges()){if(t.type=="insert"&&t.name=="listItem"){o.push(t.position.nodeAfter)}}o=o.filter(e=>e.getAttribute("listType")!=="todo");if(!o.length){return n}let r=o[o.length-1].nextSibling;if(!r||!r.is("element","listItem")){r=o[o.length-1].previousSibling;if(r){const e=o[0].getAttribute("listIndent");while(r.is("element","listItem")&&r.getAttribute("listIndent")!==e){r=r.previousSibling}}}for(const e of o){if(!e.hasAttribute("listStyle")){if(t(r)){i.setAttribute("listStyle",r.getAttribute("listStyle"),e)}else{i.setAttribute("listStyle",BM,e)}n=true}}return n};function t(e){if(!e){return false}const t=e.getAttribute("listStyle");if(!t){return false}if(t===BM){return false}return true}}function $M(e){return i=>{let n=[];for(const i of e.model.document.differ.getChanges()){const e=t(i);if(e&&e.is("element","listItem")&&e.getAttribute("listType")==="todo"){n.push(e)}}n=n.filter(e=>e.hasAttribute("listStyle"));if(!n.length){return false}for(const e of n){i.removeAttribute("listStyle",e)}return true};function t(e){if(e.type==="attribute"){return e.range.start.nodeAfter}if(e.type==="insert"){return e.position.nodeAfter}return null}}function GM(e){return(t,i)=>{i=i.filter(e=>e.is("element","listItem"));e.model.change(e=>{for(const t of i){e.removeAttribute("listStyle",t)}})}}var KM='\n';var YM='\n';var ZM='\n';var QM='\n';var JM='\n';var XM='\n';var eI='\n';var tI='\n';var iI='\n';var nI=i(106);class oI extends ok{static get pluginName(){return"ListStyleUI"}init(){const e=this.editor;const t=e.locale.t;e.ui.componentFactory.add("bulletedList",rI({editor:e,parentCommandName:"bulletedList",buttonLabel:t("Bulleted List"),buttonIcon:zM,toolbarAriaLabel:t("Bulleted list styles toolbar"),styleDefinitions:[{label:t("Toggle the disc list style"),tooltip:t("Disc"),type:"disc",icon:KM},{label:t("Toggle the circle list style"),tooltip:t("Circle"),type:"circle",icon:YM},{label:t("Toggle the square list style"),tooltip:t("Square"),type:"square",icon:ZM}]}));e.ui.componentFactory.add("numberedList",rI({editor:e,parentCommandName:"numberedList",buttonLabel:t("Numbered List"),buttonIcon:NM,toolbarAriaLabel:t("Numbered list styles toolbar"),styleDefinitions:[{label:t("Toggle the decimal list style"),tooltip:t("Decimal"),type:"decimal",icon:QM},{label:t("Toggle the decimal with leading zero list style"),tooltip:t("Decimal with leading zero"),type:"decimal-leading-zero",icon:JM},{label:t("Toggle the lower–roman list style"),tooltip:t("Lower–roman"),type:"lower-roman",icon:XM},{label:t("Toggle the upper–roman list style"),tooltip:t("Upper-roman"),type:"upper-roman",icon:eI},{label:t("Toggle the lower–latin list style"),tooltip:t("Lower-latin"),type:"lower-latin",icon:tI},{label:t("Toggle the upper–latin list style"),tooltip:t("Upper-latin"),type:"upper-latin",icon:iI}]}))}}function rI({editor:e,parentCommandName:t,buttonLabel:i,buttonIcon:n,toolbarAriaLabel:o,styleDefinitions:r}){const s=e.commands.get(t);const a=e.commands.get("listStyle");return c=>{const l=jw(c,Q_);const d=l.buttonView;const u=sI({editor:e,parentCommandName:t,listStyleCommand:a});Fw(l,r.map(u));l.bind("isEnabled").to(s);l.toolbarView.ariaLabel=o;l.class="ck-list-styles-dropdown";d.on("execute",()=>{e.execute(t);e.editing.view.focus()});d.set({label:i,icon:n,tooltip:true,isToggleable:true});d.bind("isOn").to(s,"value",e=>!!e);return l}}function sI({editor:e,listStyleCommand:t,parentCommandName:i}){const n=e.locale;const o=e.commands.get(i);return({label:r,type:s,icon:a,tooltip:c})=>{const l=new Ew(n);l.set({label:r,icon:a,tooltip:c});t.on("change:value",()=>{l.isOn=t.value===s});l.on("execute",()=>{if(o.value){if(t.value!==s){e.execute("listStyle",{type:s})}else{e.execute("listStyle",{type:t._defaultType})}}else{e.model.change(()=>{e.execute(i);e.execute("listStyle",{type:s})})}e.editing.view.focus()});return l}}class aI extends ok{static get requires(){return[jM,oI]}static get pluginName(){return"ListStyle"}}function cI(e,t){return e=>{e.on("attribute:url:media",i)};function i(i,n,o){if(!o.consumable.consume(n.item,i.name)){return}const r=n.attributeNewValue;const s=o.writer;const a=o.mapper.toViewElement(n.item);const c=[...a.getChildren()].find(e=>e.getCustomProperty("media-content"));s.remove(c);const l=e.getMediaViewElement(s,r,t);s.insert(s.createPositionAt(a,0),l)}}function lI(e,t,i){t.setCustomProperty("media",true,e);return LA(e,t,{label:i})}function dI(e){const t=e.getSelectedElement();if(t&&uI(t)){return t}return null}function uI(e){return!!e.getCustomProperty("media")&&IA(e)}function hI(e,t,i,n){const o=e.createContainerElement("figure",{class:"media"});e.insert(e.createPositionAt(o,0),t.getMediaViewElement(e,i,n));return o}function fI(e){const t=e.getSelectedElement();if(t&&t.is("element","media")){return t}return null}function mI(e,t,i){e.change(n=>{const o=n.createElement("media",{url:t});e.insertContent(o,i);n.setSelection(o,"on")})}class gI extends sk{refresh(){const e=this.editor.model;const t=e.document.selection;const i=e.schema;const n=t.getFirstPosition();const o=fI(t);let r=n.parent;if(r!=r.root){r=r.parent}this.value=o?o.getAttribute("url"):null;this.isEnabled=i.checkChild(r,"media")}execute(e){const t=this.editor.model;const i=t.document.selection;const n=fI(i);if(n){t.change(t=>{t.setAttribute("url",e,n)})}else{const n=VA(i,t);mI(t,e,n)}}}var pI='';const bI="0 0 64 42";class wI{constructor(e,t){const i=t.providers;const n=t.extraProviders||[];const o=new Set(t.removeProviders);const r=i.concat(n).filter(e=>{const t=e.name;if(!t){console.warn(Object(ss["a"])("media-embed-no-provider-name: The configured media provider has no name and cannot be used."),{provider:e});return false}return!o.has(t)});this.locale=e;this.providerDefinitions=r}hasMedia(e){return!!this._getMedia(e)}getMediaViewElement(e,t,i){return this._getMedia(t).getViewElement(e,i)}_getMedia(e){if(!e){return new kI(this.locale)}e=e.trim();for(const t of this.providerDefinitions){const i=t.html;let n=t.url;if(!Array.isArray(n)){n=[n]}for(const t of n){const n=this._getUrlMatches(e,t);if(n){return new kI(this.locale,e,n,i)}}}return null}_getUrlMatches(e,t){let i=e.match(t);if(i){return i}let n=e.replace(/^https?:\/\//,"");i=n.match(t);if(i){return i}n=n.replace(/^www\./,"");i=n.match(t);if(i){return i}return null}}class kI{constructor(e,t,i,n){this.url=this._getValidUrl(t);this._t=e.t;this._match=i;this._previewRenderer=n}getViewElement(e,t){const i={};let n;if(t.renderForEditingView||t.renderMediaPreview&&this.url&&this._previewRenderer){if(this.url){i["data-oembed-url"]=this.url}if(t.renderForEditingView){i.class="ck-media__wrapper"}const o=this._getPreviewHtml(t);n=e.createRawElement("div",i,(function(e){e.innerHTML=o}))}else{if(this.url){i.url=this.url}n=e.createEmptyElement("oembed",i)}e.setCustomProperty("media-content",true,n);return n}_getPreviewHtml(e){if(this._previewRenderer){return this._previewRenderer(this._match)}else{if(this.url&&e.renderForEditingView){return this._getPlaceholderHtml()}return""}}_getPlaceholderHtml(){const e=new Tw;const t=new Aw;e.text=this._t("Open media in new tab");t.content=pI;t.viewBox=bI;const i=new gb({tag:"div",attributes:{class:"ck ck-reset_all ck-media__placeholder"},children:[{tag:"div",attributes:{class:"ck-media__placeholder__icon"},children:[t]},{tag:"a",attributes:{class:"ck-media__placeholder__url",target:"_blank",rel:"noopener noreferrer",href:this.url},children:[{tag:"span",attributes:{class:"ck-media__placeholder__url__text"},children:[this.url]},e]}]}).render();return i.outerHTML}_getValidUrl(e){if(!e){return null}if(e.match(/^https?/)){return e}return"https://"+e}}var _I=i(108);class vI extends ok{static get pluginName(){return"MediaEmbedEditing"}constructor(e){super(e);e.config.define("mediaEmbed",{providers:[{name:"dailymotion",url:/^dailymotion\.com\/video\/(\w+)/,html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"spotify",url:[/^open\.spotify\.com\/(artist\/\w+)/,/^open\.spotify\.com\/(album\/\w+)/,/^open\.spotify\.com\/(track\/\w+)/],html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"youtube",url:[/^(?:m\.)?youtube\.com\/watch\?v=([\w-]+)/,/^(?:m\.)?youtube\.com\/v\/([\w-]+)/,/^youtube\.com\/embed\/([\w-]+)/,/^youtu\.be\/([\w-]+)/],html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"vimeo",url:[/^vimeo\.com\/(\d+)/,/^vimeo\.com\/[^/]+\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/album\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/channels\/[^/]+\/(\d+)/,/^vimeo\.com\/groups\/[^/]+\/videos\/(\d+)/,/^vimeo\.com\/ondemand\/[^/]+\/(\d+)/,/^player\.vimeo\.com\/video\/(\d+)/],html:e=>{const t=e[1];return'
    '+`"+"
    "}},{name:"instagram",url:/^instagram\.com\/p\/(\w+)/},{name:"twitter",url:/^twitter\.com/},{name:"googleMaps",url:/^google\.com\/maps/},{name:"flickr",url:/^flickr\.com/},{name:"facebook",url:/^facebook\.com/}]});this.registry=new wI(e.locale,e.config.get("mediaEmbed"))}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;const o=e.config.get("mediaEmbed.previewsInData");const r=this.registry;e.commands.add("mediaEmbed",new gI(e));t.register("media",{isObject:true,isBlock:true,allowWhere:"$block",allowAttributes:["url"]});n.for("dataDowncast").elementToElement({model:"media",view:(e,{writer:t})=>{const i=e.getAttribute("url");return hI(t,r,i,{renderMediaPreview:i&&o})}});n.for("dataDowncast").add(cI(r,{renderMediaPreview:o}));n.for("editingDowncast").elementToElement({model:"media",view:(e,{writer:t})=>{const n=e.getAttribute("url");const o=hI(t,r,n,{renderForEditingView:true});return lI(o,t,i("media widget"))}});n.for("editingDowncast").add(cI(r,{renderForEditingView:true}));n.for("upcast").elementToElement({view:{name:"oembed",attributes:{url:true}},model:(e,{writer:t})=>{const i=e.getAttribute("url");if(r.hasMedia(i)){return t.createElement("media",{url:i})}}}).elementToElement({view:{name:"div",attributes:{"data-oembed-url":true}},model:(e,{writer:t})=>{const i=e.getAttribute("data-oembed-url");if(r.hasMedia(i)){return t.createElement("media",{url:i})}}})}}const yI=/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w.-]+)+[\w\-._~:/?#[\]@!$&'()*+,;=]+$/;class xI extends ok{static get requires(){return[dv,dy]}static get pluginName(){return"AutoMediaEmbed"}constructor(e){super(e);this._timeoutId=null;this._positionToInsert=null}init(){const e=this.editor;const t=e.model.document;this.listenTo(e.plugins.get(dv),"inputTransformation",()=>{const e=t.selection.getFirstRange();const i=Qg.fromPosition(e.start);i.stickiness="toPrevious";const n=Qg.fromPosition(e.end);n.stickiness="toNext";t.once("change:data",()=>{this._embedMediaBetweenPositions(i,n);i.detach();n.detach()},{priority:"high"})});e.commands.get("undo").on("execute",()=>{if(this._timeoutId){Vd.window.clearTimeout(this._timeoutId);this._positionToInsert.detach();this._timeoutId=null;this._positionToInsert=null}},{priority:"high"})}_embedMediaBetweenPositions(e,t){const i=this.editor;const n=i.plugins.get(vI).registry;const o=new ff(e,t);const r=o.getWalker({ignoreElementEnd:true});let s="";for(const e of r){if(e.item.is("$textProxy")){s+=e.item.data}}s=s.trim();if(!s.match(yI)){o.detach();return}if(!n.hasMedia(s)){o.detach();return}const a=i.commands.get("mediaEmbed");if(!a.isEnabled){o.detach();return}this._positionToInsert=Qg.fromPosition(e);this._timeoutId=Vd.window.setTimeout(()=>{i.model.change(e=>{this._timeoutId=null;e.remove(o);o.detach();let t;if(this._positionToInsert.root.rootName!=="$graveyard"){t=this._positionToInsert}mI(i.model,s,t);this._positionToInsert.detach();this._positionToInsert=null})},100)}}var AI=i(110);class CI extends Hb{constructor(e,t){super(t);const i=t.t;this.focusTracker=new Zp;this.keystrokes=new Vp;this.urlInputView=this._createUrlInput();this.saveButtonView=this._createButton(i("Save"),GC,"ck-button-save");this.saveButtonView.type="submit";this.cancelButtonView=this._createButton(i("Cancel"),KC,"ck-button-cancel","cancel");this._focusables=new hb;this._focusCycler=new rw({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});this._validators=e;this.setTemplate({tag:"form",attributes:{class:["ck","ck-media-form"],tabindex:"-1"},children:[this.urlInputView,this.saveButtonView,this.cancelButtonView]})}render(){super.render();$C({view:this});const e=[this.urlInputView,this.saveButtonView,this.cancelButtonView];e.forEach(e=>{this._focusables.add(e);this.focusTracker.add(e.element)});this.keystrokes.listenTo(this.element);const t=e=>e.stopPropagation();this.keystrokes.set("arrowright",t);this.keystrokes.set("arrowleft",t);this.keystrokes.set("arrowup",t);this.keystrokes.set("arrowdown",t);this.listenTo(this.urlInputView.element,"selectstart",(e,t)=>{t.stopPropagation()},{priority:"high"})}focus(){this._focusCycler.focusFirst()}get url(){return this.urlInputView.fieldView.element.value.trim()}set url(e){this.urlInputView.fieldView.element.value=e.trim()}isValid(){this.resetFormStatus();for(const e of this._validators){const t=e(this);if(t){this.urlInputView.errorText=t;return false}}return true}resetFormStatus(){this.urlInputView.errorText=null;this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){const e=this.locale.t;const t=new FC(this.locale,WC);const i=t.fieldView;this._urlInputViewInfoDefault=e("Paste the media URL in the input.");this._urlInputViewInfoTip=e("Tip: Paste the URL into the content to embed faster.");t.label=e("Media URL");t.infoText=this._urlInputViewInfoDefault;i.placeholder="https://example.com";i.on("input",()=>{t.infoText=i.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault});return t}_createButton(e,t,i,n){const o=new Ew(this.locale);o.set({label:e,icon:t,tooltip:true});o.extendTemplate({attributes:{class:i}});if(n){o.delegate("execute").to(this,n)}return o}}var TI='';class SI extends ok{static get requires(){return[vI]}static get pluginName(){return"MediaEmbedUI"}init(){const e=this.editor;const t=e.commands.get("mediaEmbed");const i=e.plugins.get(vI).registry;e.ui.componentFactory.add("mediaEmbed",n=>{const o=jw(n);const r=new CI(EI(e.t,i),e.locale);this._setUpDropdown(o,r,t,e);this._setUpForm(o,r,t);return o})}_setUpDropdown(e,t,i){const n=this.editor;const o=n.t;const r=e.buttonView;e.bind("isEnabled").to(i);e.panelView.children.add(t);r.set({label:o("Insert media"),icon:TI,tooltip:true});r.on("open",()=>{t.url=i.value||"";t.urlInputView.fieldView.select();t.focus()},{priority:"low"});e.on("submit",()=>{if(t.isValid()){n.execute("mediaEmbed",t.url);s()}});e.on("change:isOpen",()=>t.resetFormStatus());e.on("cancel",()=>s());function s(){n.editing.view.focus();e.isOpen=false}}_setUpForm(e,t,i){t.delegate("submit","cancel").to(e);t.urlInputView.bind("value").to(i,"value");t.urlInputView.bind("isReadOnly").to(i,"isEnabled",e=>!e);t.saveButtonView.bind("isEnabled").to(i)}}function EI(e,t){return[t=>{if(!t.url.length){return e("The URL must not be empty.")}},i=>{if(!t.hasMedia(i.url)){return e("This media URL is not supported.")}}]}var PI=i(112);class MI extends ok{static get requires(){return[vI,SI,xI,RC]}static get pluginName(){return"MediaEmbed"}}class II extends sk{refresh(){this.isEnabled=LI(this.editor.model)}execute(){const e=this.editor.model;e.change(t=>{const i=t.createElement("pageBreak");e.insertContent(i);let n=i.nextSibling;const o=n&&e.schema.checkChild(n,"$text");if(!o&&e.schema.checkChild(i.parent,"paragraph")){n=t.createElement("paragraph");e.insertContent(n,t.createPositionAfter(i))}if(n){t.setSelection(n,0)}})}}function LI(e){const t=e.schema;const i=e.document.selection;return NI(i,t,e)&&!zI(i,t)}function NI(e,t,i){const n=RI(e,i);return t.checkChild(n,"pageBreak")}function zI(e,t){const i=e.getSelectedElement();return i&&t.isObject(i)}function RI(e,t){const i=VA(e,t);const n=i.parent;if(n.isEmpty&&!n.is("element","$root")){return n.parent}return n}var OI=i(114);class VI extends ok{static get pluginName(){return"PageBreakEditing"}init(){const e=this.editor;const t=e.model.schema;const i=e.t;const n=e.conversion;t.register("pageBreak",{isObject:true,allowWhere:"$block"});n.for("dataDowncast").elementToElement({model:"pageBreak",view:(e,{writer:t})=>{const i=t.createContainerElement("div",{class:"page-break",style:"page-break-after: always"});const n=t.createContainerElement("span",{style:"display: none"});t.insert(t.createPositionAt(i,0),n);return i}});n.for("editingDowncast").elementToElement({model:"pageBreak",view:(e,{writer:t})=>{const n=i("Page break");const o=t.createContainerElement("div");const r=t.createContainerElement("span");const s=t.createText(i("Page break"));t.addClass("page-break",o);t.setCustomProperty("pageBreak",true,o);t.addClass("page-break__label",r);t.insert(t.createPositionAt(o,0),r);t.insert(t.createPositionAt(r,0),s);return DI(o,t,n)}});n.for("upcast").elementToElement({view:e=>{const t=e.getStyle("page-break-before")=="always";const i=e.getStyle("page-break-after")=="always";if(!t&&!i){return}if(e.childCount==1){const t=e.getChild(0);if(!t.is("element","span")||t.getStyle("display")!="none"||t.childCount!=1){return}const i=t.getChild(0);if(!i.is("$text")||i.data!==" "){return}}else if(e.childCount>1){return}return{name:true}},model:"pageBreak",converterPriority:"high"});e.commands.add("pageBreak",new II(e))}}function DI(e,t,i){t.setCustomProperty("pageBreak",true,e);return LA(e,t,{label:i})}var BI='';class jI extends ok{init(){const e=this.editor;const t=e.t;e.ui.componentFactory.add("pageBreak",i=>{const n=e.commands.get("pageBreak");const o=new Ew(i);o.set({label:t("Page break"),icon:BI,tooltip:true});o.bind("isEnabled").to(n,"isEnabled");this.listenTo(o,"execute",()=>{e.execute("pageBreak");e.editing.view.focus()});return o})}}class FI extends ok{static get requires(){return[VI,jI]}static get pluginName(){return"PageBreak"}}function HI(e,t){for(const i of e.getChildren()){if(i.is("element","b")&&i.getStyle("font-weight")==="normal"){const n=e.getChildIndex(i);t.remove(i);t.insertChild(n,i.getChildren(),e)}}}function UI(e,t){if(!e.childCount){return}const i=new nE(e.document);const n=qI(e,i);if(!n.length){return}let o=null;let r=1;n.forEach((e,s)=>{const a=QI(n[s-1],e);const c=a?null:n[s-1];const l=XI(c,e);if(a){o=null;r=1}if(!o||l!==0){const n=$I(e,t);if(!o){o=GI(n,e.element,i)}else if(e.indent>r){const e=o.getChild(o.childCount-1);const t=e.getChild(e.childCount-1);o=GI(n,t,i);r+=1}else if(e.indent[\s]*?)[\r\n]+(\s*<\/span>)/g,"$1$2").replace(/<\/span>/g,"").replace(/ <\//g," <\/o:p>/g," ").replace(/( |\u00A0)<\/o:p>/g,"").replace(/>(\s*[\r\n]\s*)<")}function oL(e){e.querySelectorAll("span[style*=spacerun]").forEach(e=>{const t=e.innerText.length||0;e.innerHTML=Array(t+1).join("  ").substr(0,t)})}function rL(e){return e.replace(/(\s+)<\/span>/g,(e,t)=>t.length===1?" ":Array(t.length+1).join("  ").substr(0,t.length))}function sL(e,t){const i=new DOMParser;e=e.replace(/ + + + + + + + + + +
    +

    ITIS-API::Admin-Portal

    +
    + + + +

    <%= controller()->name() + ": " + controller()->activeAction() %>

    +
    + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + + + +
    + +
    +
    + + +
    +

    Anmeldung

    +

    +

    + + +

    + + + + +

    +
    +

    +
    + + +
    +
    + +
    + + + + + + diff --git a/public/vue.html b/public/vue.html new file mode 100644 index 0000000..ce40f6c --- /dev/null +++ b/public/vue.html @@ -0,0 +1,287 @@ + + + + + + + + + ReST API Methoden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    IaaS::IT-IS ReST API

    +
    + +

    + +
    + +

    API Methoden

    + +
    + {{ message }} +
    +
    + + + + + + + + + + + + + + + + + + + + +
    +

    BMW Group

    +
    Unterlagenklasse: 3.2 + Nr.: 01 +
    Gültigkeitsbereich: BMW Group + Version: {{ lenk_version }} +

    Vorgabedokument der BMW Group

    für die passive IT Infrastruktur

    {{ obj_sname }}

     

     

    Status:

    {{ status }}

    +
      +

    Beteiligte Personen/Fachstellen/Gremien: 

    +
    {{ lenk_departments }} +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Änderungshistorie
    VersionInhaltErsteller
    Kurzzeichen
    Datum
    Prüfer
    Kurzzeichen
    Datum
    Freigeber
    Kurzzeichen
    Datum
    {{ item.lenk_version }}{{ item.lenk_content }}{{ item.lenk_creator }}
    {{ item.lenk_creator_date }}
    {{ item.lenk_auditor }}
    {{ item.lenk_auditor_date }}
    {{ item.lenk_approver }}
    {{ item.lenk_approver_date }}
    {{ lenk_version }}{{ lenk_content }}{{ lenk_creator }}
    {{ lenk_creator_date }}
    {{ lenk_auditor }}
    -/-
    {{ lenk_approver }}
    -/-
    +
    +
    + +
    + + +
    + +
    +

    Eingabe Lenkungsinformation zum aktuellen Release

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    + + + +

    +
    + +
    +
    + +
    +

    + +

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +

     

    +

    + +

    +
    +
    + +
    +
    + + +
    + + + + + + diff --git a/public/vue.html_2021-05-13_1840 b/public/vue.html_2021-05-13_1840 new file mode 100644 index 0000000..4c481aa --- /dev/null +++ b/public/vue.html_2021-05-13_1840 @@ -0,0 +1,203 @@ + + + + + + + + + ReST API Methoden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    IaaS::IT-IS ReST API

    +
    + +

    + +
    + +

    API Methoden

    + +
    + {{ message }} +
    +

    hier: {{ totalVuePackages[0].cat_class }}

    +

    {{ totalVuePackages[0].obj_sname }}

    +
      +
    • + {{ item.obj_sname }} + {{ item.relrequest_date }} +
    • +
    +
    + +
    + + +
    + +
    +

    Eingabe Lenkungsinformation zum aktuellen Release

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +

    + +

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +

     

    +

    + +

    +
    +
    + +
    +
    + + +
    + + + + + + diff --git a/script/JSXTransformer.js b/script/JSXTransformer.js new file mode 100644 index 0000000..a9f50a3 --- /dev/null +++ b/script/JSXTransformer.js @@ -0,0 +1,15919 @@ +/** + * JSXTransformer v0.13.3 + */ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSXTransformer = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + * @license MIT + */ + +var base64 = _dereq_('base64-js') +var ieee754 = _dereq_('ieee754') +var isArray = _dereq_('is-array') + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 +Buffer.poolSize = 8192 // not used by this implementation + +var kMaxLength = 0x3fffffff +var rootParent = {} + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Note: + * + * - Implementation must support adding new properties to `Uint8Array` instances. + * Firefox 4-29 lacked support, fixed in Firefox 30+. + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + * + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will + * get the Object implementation, which is slower but will work correctly. + */ +Buffer.TYPED_ARRAY_SUPPORT = (function () { + try { + var buf = new ArrayBuffer(0) + var arr = new Uint8Array(buf) + arr.foo = function () { return 42 } + return arr.foo() === 42 && // typed array instances can be augmented + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } +})() + +/** + * Class: Buffer + * ============= + * + * The Buffer constructor returns instances of `Uint8Array` that are augmented + * with function properties for all the node `Buffer` API functions. We use + * `Uint8Array` so that square bracket notation works as expected -- it returns + * a single octet. + * + * By augmenting the instances, we can avoid modifying the `Uint8Array` + * prototype. + */ +function Buffer (subject, encoding) { + var self = this + if (!(self instanceof Buffer)) return new Buffer(subject, encoding) + + var type = typeof subject + var length + + if (type === 'number') { + length = +subject + } else if (type === 'string') { + length = Buffer.byteLength(subject, encoding) + } else if (type === 'object' && subject !== null) { + // assume object is array-like + if (subject.type === 'Buffer' && isArray(subject.data)) subject = subject.data + length = +subject.length + } else { + throw new TypeError('must start with number, buffer, array or string') + } + + if (length > kMaxLength) { + throw new RangeError('Attempt to allocate Buffer larger than maximum size: 0x' + + kMaxLength.toString(16) + ' bytes') + } + + if (length < 0) length = 0 + else length >>>= 0 // coerce to uint32 + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Preferred: Return an augmented `Uint8Array` instance for best performance + self = Buffer._augment(new Uint8Array(length)) // eslint-disable-line consistent-this + } else { + // Fallback: Return THIS instance of Buffer (created by `new`) + self.length = length + self._isBuffer = true + } + + var i + if (Buffer.TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') { + // Speed optimization -- use set if we're copying from a typed array + self._set(subject) + } else if (isArrayish(subject)) { + // Treat array-ish objects as a byte array + if (Buffer.isBuffer(subject)) { + for (i = 0; i < length; i++) { + self[i] = subject.readUInt8(i) + } + } else { + for (i = 0; i < length; i++) { + self[i] = ((subject[i] % 256) + 256) % 256 + } + } + } else if (type === 'string') { + self.write(subject, 0, encoding) + } else if (type === 'number' && !Buffer.TYPED_ARRAY_SUPPORT) { + for (i = 0; i < length; i++) { + self[i] = 0 + } + } + + if (length > 0 && length <= Buffer.poolSize) self.parent = rootParent + + return self +} + +function SlowBuffer (subject, encoding) { + if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding) + + var buf = new Buffer(subject, encoding) + delete buf.parent + return buf +} + +Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) +} + +Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {} + if (i !== len) { + x = a[i] + y = b[i] + } + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'raw': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, totalLength) { + if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.') + + if (list.length === 0) { + return new Buffer(0) + } else if (list.length === 1) { + return list[0] + } + + var i + if (totalLength === undefined) { + totalLength = 0 + for (i = 0; i < list.length; i++) { + totalLength += list[i].length + } + } + + var buf = new Buffer(totalLength) + var pos = 0 + for (i = 0; i < list.length; i++) { + var item = list[i] + item.copy(buf, pos) + pos += item.length + } + return buf +} + +Buffer.byteLength = function byteLength (str, encoding) { + var ret + str = str + '' + switch (encoding || 'utf8') { + case 'ascii': + case 'binary': + case 'raw': + ret = str.length + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = str.length * 2 + break + case 'hex': + ret = str.length >>> 1 + break + case 'utf8': + case 'utf-8': + ret = utf8ToBytes(str).length + break + case 'base64': + ret = base64ToBytes(str).length + break + default: + ret = str.length + } + return ret +} + +// pre-set for values that may exist in the future +Buffer.prototype.length = undefined +Buffer.prototype.parent = undefined + +// toString(encoding, start=0, end=buffer.length) +Buffer.prototype.toString = function toString (encoding, start, end) { + var loweredCase = false + + start = start >>> 0 + end = end === undefined || end === Infinity ? this.length : end >>> 0 + + if (!encoding) encoding = 'utf8' + if (start < 0) start = 0 + if (end > this.length) end = this.length + if (end <= start) return '' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'binary': + return binarySlice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' + } + return '' +} + +Buffer.prototype.compare = function compare (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return 0 + return Buffer.compare(this, b) +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset) { + if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff + else if (byteOffset < -0x80000000) byteOffset = -0x80000000 + byteOffset >>= 0 + + if (this.length === 0) return -1 + if (byteOffset >= this.length) return -1 + + // Negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0) + + if (typeof val === 'string') { + if (val.length === 0) return -1 // special case: looking for empty string always fails + return String.prototype.indexOf.call(this, val, byteOffset) + } + if (Buffer.isBuffer(val)) { + return arrayIndexOf(this, val, byteOffset) + } + if (typeof val === 'number') { + if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') { + return Uint8Array.prototype.indexOf.call(this, val, byteOffset) + } + return arrayIndexOf(this, [ val ], byteOffset) + } + + function arrayIndexOf (arr, val, byteOffset) { + var foundIndex = -1 + for (var i = 0; byteOffset + i < arr.length; i++) { + if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex + } else { + foundIndex = -1 + } + } + return -1 + } + + throw new TypeError('val must be string, number or Buffer') +} + +// `get` will be removed in Node 0.13+ +Buffer.prototype.get = function get (offset) { + console.log('.get() is deprecated. Access using array indexes instead.') + return this.readUInt8(offset) +} + +// `set` will be removed in Node 0.13+ +Buffer.prototype.set = function set (v, offset) { + console.log('.set() is deprecated. Access using array indexes instead.') + return this.writeUInt8(v, offset) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new Error('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; i++) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) throw new Error('Invalid hex string') + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + var charsWritten = blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) + return charsWritten +} + +function asciiWrite (buf, string, offset, length) { + var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length) + return charsWritten +} + +function binaryWrite (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length) + return charsWritten +} + +function utf16leWrite (buf, string, offset, length) { + var charsWritten = blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) + return charsWritten +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length + length = undefined + } + } else { // legacy + var swap = encoding + encoding = offset + offset = length + length = swap + } + + offset = Number(offset) || 0 + + if (length < 0 || offset < 0 || offset > this.length) { + throw new RangeError('attempt to write outside buffer bounds') + } + + var remaining = this.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + encoding = String(encoding || 'utf8').toLowerCase() + + var ret + switch (encoding) { + case 'hex': + ret = hexWrite(this, string, offset, length) + break + case 'utf8': + case 'utf-8': + ret = utf8Write(this, string, offset, length) + break + case 'ascii': + ret = asciiWrite(this, string, offset, length) + break + case 'binary': + ret = binaryWrite(this, string, offset, length) + break + case 'base64': + ret = base64Write(this, string, offset, length) + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = utf16leWrite(this, string, offset, length) + break + default: + throw new TypeError('Unknown encoding: ' + encoding) + } + return ret +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + var res = '' + var tmp = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + if (buf[i] <= 0x7F) { + res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i]) + tmp = '' + } else { + tmp += '%' + buf[i].toString(16) + } + } + + return res + decodeUtf8Char(tmp) +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function binarySlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; i++) { + out += toHex(buf[i]) + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = Buffer._augment(this.subarray(start, end)) + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined) + for (var i = 0; i < sliceLen; i++) { + newBuf[i] = this[i + start] + } + } + + if (newBuf.length) newBuf.parent = this.parent || this + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) >>> 0 & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) >>> 0 & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = value + return offset + 1 +} + +function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = value + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = value + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = value + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkInt( + this, value, offset, byteLength, + Math.pow(2, 8 * byteLength - 1) - 1, + -Math.pow(2, 8 * byteLength - 1) + ) + } + + var i = 0 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkInt( + this, value, offset, byteLength, + Math.pow(2, 8 * byteLength - 1) - 1, + -Math.pow(2, 8 * byteLength - 1) + ) + } + + var i = byteLength - 1 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = value + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = value + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = value + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') + if (offset < 0) throw new RangeError('index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, target_start, start, end) { + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (target_start >= target.length) target_start = target.length + if (!target_start) target_start = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (target_start < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - target_start < end - start) { + end = target.length - target_start + start + } + + var len = end - start + + if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < len; i++) { + target[i + target_start] = this[i + start] + } + } else { + target._set(this.subarray(start, start + len), target_start) + } + + return len +} + +// fill(value, start=0, end=buffer.length) +Buffer.prototype.fill = function fill (value, start, end) { + if (!value) value = 0 + if (!start) start = 0 + if (!end) end = this.length + + if (end < start) throw new RangeError('end < start') + + // Fill 0 bytes; we're done + if (end === start) return + if (this.length === 0) return + + if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') + if (end < 0 || end > this.length) throw new RangeError('end out of bounds') + + var i + if (typeof value === 'number') { + for (i = start; i < end; i++) { + this[i] = value + } + } else { + var bytes = utf8ToBytes(value.toString()) + var len = bytes.length + for (i = start; i < end; i++) { + this[i] = bytes[i % len] + } + } + + return this +} + +/** + * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. + * Added in Node 0.12. Only available in browsers that support ArrayBuffer. + */ +Buffer.prototype.toArrayBuffer = function toArrayBuffer () { + if (typeof Uint8Array !== 'undefined') { + if (Buffer.TYPED_ARRAY_SUPPORT) { + return (new Buffer(this)).buffer + } else { + var buf = new Uint8Array(this.length) + for (var i = 0, len = buf.length; i < len; i += 1) { + buf[i] = this[i] + } + return buf.buffer + } + } else { + throw new TypeError('Buffer.toArrayBuffer not supported in this browser') + } +} + +// HELPER FUNCTIONS +// ================ + +var BP = Buffer.prototype + +/** + * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods + */ +Buffer._augment = function _augment (arr) { + arr.constructor = Buffer + arr._isBuffer = true + + // save reference to original Uint8Array set method before overwriting + arr._set = arr.set + + // deprecated, will be removed in node 0.13+ + arr.get = BP.get + arr.set = BP.set + + arr.write = BP.write + arr.toString = BP.toString + arr.toLocaleString = BP.toString + arr.toJSON = BP.toJSON + arr.equals = BP.equals + arr.compare = BP.compare + arr.indexOf = BP.indexOf + arr.copy = BP.copy + arr.slice = BP.slice + arr.readUIntLE = BP.readUIntLE + arr.readUIntBE = BP.readUIntBE + arr.readUInt8 = BP.readUInt8 + arr.readUInt16LE = BP.readUInt16LE + arr.readUInt16BE = BP.readUInt16BE + arr.readUInt32LE = BP.readUInt32LE + arr.readUInt32BE = BP.readUInt32BE + arr.readIntLE = BP.readIntLE + arr.readIntBE = BP.readIntBE + arr.readInt8 = BP.readInt8 + arr.readInt16LE = BP.readInt16LE + arr.readInt16BE = BP.readInt16BE + arr.readInt32LE = BP.readInt32LE + arr.readInt32BE = BP.readInt32BE + arr.readFloatLE = BP.readFloatLE + arr.readFloatBE = BP.readFloatBE + arr.readDoubleLE = BP.readDoubleLE + arr.readDoubleBE = BP.readDoubleBE + arr.writeUInt8 = BP.writeUInt8 + arr.writeUIntLE = BP.writeUIntLE + arr.writeUIntBE = BP.writeUIntBE + arr.writeUInt16LE = BP.writeUInt16LE + arr.writeUInt16BE = BP.writeUInt16BE + arr.writeUInt32LE = BP.writeUInt32LE + arr.writeUInt32BE = BP.writeUInt32BE + arr.writeIntLE = BP.writeIntLE + arr.writeIntBE = BP.writeIntBE + arr.writeInt8 = BP.writeInt8 + arr.writeInt16LE = BP.writeInt16LE + arr.writeInt16BE = BP.writeInt16BE + arr.writeInt32LE = BP.writeInt32LE + arr.writeInt32BE = BP.writeInt32BE + arr.writeFloatLE = BP.writeFloatLE + arr.writeFloatBE = BP.writeFloatBE + arr.writeDoubleLE = BP.writeDoubleLE + arr.writeDoubleBE = BP.writeDoubleBE + arr.fill = BP.fill + arr.inspect = BP.inspect + arr.toArrayBuffer = BP.toArrayBuffer + + return arr +} + +var INVALID_BASE64_RE = /[^+\/0-9A-z\-]/g + +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') +} + +function isArrayish (subject) { + return isArray(subject) || Buffer.isBuffer(subject) || + subject && typeof subject === 'object' && + typeof subject.length === 'number' +} + +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + var i = 0 + + for (; i < length; i++) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (leadSurrogate) { + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } else { + // valid surrogate pair + codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000 + leadSurrogate = null + } + } else { + // no lead yet + + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else { + // valid lead + leadSurrogate = codePoint + continue + } + } + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = null + } + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x200000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; i++) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; i++) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; i++) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +function decodeUtf8Char (str) { + try { + return decodeURIComponent(str) + } catch (err) { + return String.fromCharCode(0xFFFD) // UTF 8 invalid char + } +} + +},{"base64-js":4,"ieee754":5,"is-array":6}],4:[function(_dereq_,module,exports){ +var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +;(function (exports) { + 'use strict'; + + var Arr = (typeof Uint8Array !== 'undefined') + ? Uint8Array + : Array + + var PLUS = '+'.charCodeAt(0) + var SLASH = '/'.charCodeAt(0) + var NUMBER = '0'.charCodeAt(0) + var LOWER = 'a'.charCodeAt(0) + var UPPER = 'A'.charCodeAt(0) + var PLUS_URL_SAFE = '-'.charCodeAt(0) + var SLASH_URL_SAFE = '_'.charCodeAt(0) + + function decode (elt) { + var code = elt.charCodeAt(0) + if (code === PLUS || + code === PLUS_URL_SAFE) + return 62 // '+' + if (code === SLASH || + code === SLASH_URL_SAFE) + return 63 // '/' + if (code < NUMBER) + return -1 //no match + if (code < NUMBER + 10) + return code - NUMBER + 26 + 26 + if (code < UPPER + 26) + return code - UPPER + if (code < LOWER + 26) + return code - LOWER + 26 + } + + function b64ToByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + + if (b64.length % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + var len = b64.length + placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(b64.length * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length + + var L = 0 + + function push (v) { + arr[L++] = v + } + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) + push((tmp & 0xFF0000) >> 16) + push((tmp & 0xFF00) >> 8) + push(tmp & 0xFF) + } + + if (placeHolders === 2) { + tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) + push(tmp & 0xFF) + } else if (placeHolders === 1) { + tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) + push((tmp >> 8) & 0xFF) + push(tmp & 0xFF) + } + + return arr + } + + function uint8ToBase64 (uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length + + function encode (num) { + return lookup.charAt(num) + } + + function tripletToBase64 (num) { + return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) + } + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output += tripletToBase64(temp) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1] + output += encode(temp >> 2) + output += encode((temp << 4) & 0x3F) + output += '==' + break + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) + output += encode(temp >> 10) + output += encode((temp >> 4) & 0x3F) + output += encode((temp << 2) & 0x3F) + output += '=' + break + } + + return output + } + + exports.toByteArray = b64ToByteArray + exports.fromByteArray = uint8ToBase64 +}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) + +},{}],5:[function(_dereq_,module,exports){ +exports.read = function(buffer, offset, isLE, mLen, nBytes) { + var e, m, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + nBits = -7, + i = isLE ? (nBytes - 1) : 0, + d = isLE ? -1 : 1, + s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity); + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; + +exports.write = function(buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), + i = isLE ? 0 : (nBytes - 1), + d = isLE ? 1 : -1, + s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); + + buffer[offset + i - d] |= s * 128; +}; + +},{}],6:[function(_dereq_,module,exports){ + +/** + * isArray + */ + +var isArray = Array.isArray; + +/** + * toString + */ + +var str = Object.prototype.toString; + +/** + * Whether or not the given `val` + * is an array. + * + * example: + * + * isArray([]); + * // > true + * isArray(arguments); + * // > false + * isArray(''); + * // > false + * + * @param {mixed} val + * @return {bool} + */ + +module.exports = isArray || function (val) { + return !! val && '[object Array]' == str.call(val); +}; + +},{}],7:[function(_dereq_,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,_dereq_('_process')) +},{"_process":8}],8:[function(_dereq_,module,exports){ +// shim for using process in browser + +var process = module.exports = {}; +var queue = []; +var draining = false; + +function drainQueue() { + if (draining) { + return; + } + draining = true; + var currentQueue; + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + var i = -1; + while (++i < len) { + currentQueue[i](); + } + len = queue.length; + } + draining = false; +} +process.nextTick = function (fun) { + queue.push(fun); + if (!draining) { + setTimeout(drainQueue, 0); + } +}; + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],9:[function(_dereq_,module,exports){ +/* + Copyright (C) 2013 Ariya Hidayat + Copyright (C) 2013 Thaddee Tyl + Copyright (C) 2012 Ariya Hidayat + Copyright (C) 2012 Mathias Bynens + Copyright (C) 2012 Joost-Wim Boekesteijn + Copyright (C) 2012 Kris Kowal + Copyright (C) 2012 Yusuke Suzuki + Copyright (C) 2012 Arpad Borsos + Copyright (C) 2011 Ariya Hidayat + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +(function (root, factory) { + 'use strict'; + + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, + // Rhino, and plain browser loading. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define(['exports'], factory); + } else if (typeof exports !== 'undefined') { + factory(exports); + } else { + factory((root.esprima = {})); + } +}(this, function (exports) { + 'use strict'; + + var Token, + TokenName, + FnExprTokens, + Syntax, + PropertyKind, + Messages, + Regex, + SyntaxTreeDelegate, + XHTMLEntities, + ClassPropertyType, + source, + strict, + index, + lineNumber, + lineStart, + length, + delegate, + lookahead, + state, + extra; + + Token = { + BooleanLiteral: 1, + EOF: 2, + Identifier: 3, + Keyword: 4, + NullLiteral: 5, + NumericLiteral: 6, + Punctuator: 7, + StringLiteral: 8, + RegularExpression: 9, + Template: 10, + JSXIdentifier: 11, + JSXText: 12 + }; + + TokenName = {}; + TokenName[Token.BooleanLiteral] = 'Boolean'; + TokenName[Token.EOF] = ''; + TokenName[Token.Identifier] = 'Identifier'; + TokenName[Token.Keyword] = 'Keyword'; + TokenName[Token.NullLiteral] = 'Null'; + TokenName[Token.NumericLiteral] = 'Numeric'; + TokenName[Token.Punctuator] = 'Punctuator'; + TokenName[Token.StringLiteral] = 'String'; + TokenName[Token.JSXIdentifier] = 'JSXIdentifier'; + TokenName[Token.JSXText] = 'JSXText'; + TokenName[Token.RegularExpression] = 'RegularExpression'; + + // A function following one of those tokens is an expression. + FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new', + 'return', 'case', 'delete', 'throw', 'void', + // assignment operators + '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=', + '&=', '|=', '^=', ',', + // binary/unary operators + '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&', + '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=', + '<=', '<', '>', '!=', '!==']; + + Syntax = { + AnyTypeAnnotation: 'AnyTypeAnnotation', + ArrayExpression: 'ArrayExpression', + ArrayPattern: 'ArrayPattern', + ArrayTypeAnnotation: 'ArrayTypeAnnotation', + ArrowFunctionExpression: 'ArrowFunctionExpression', + AssignmentExpression: 'AssignmentExpression', + BinaryExpression: 'BinaryExpression', + BlockStatement: 'BlockStatement', + BooleanTypeAnnotation: 'BooleanTypeAnnotation', + BreakStatement: 'BreakStatement', + CallExpression: 'CallExpression', + CatchClause: 'CatchClause', + ClassBody: 'ClassBody', + ClassDeclaration: 'ClassDeclaration', + ClassExpression: 'ClassExpression', + ClassImplements: 'ClassImplements', + ClassProperty: 'ClassProperty', + ComprehensionBlock: 'ComprehensionBlock', + ComprehensionExpression: 'ComprehensionExpression', + ConditionalExpression: 'ConditionalExpression', + ContinueStatement: 'ContinueStatement', + DebuggerStatement: 'DebuggerStatement', + DeclareClass: 'DeclareClass', + DeclareFunction: 'DeclareFunction', + DeclareModule: 'DeclareModule', + DeclareVariable: 'DeclareVariable', + DoWhileStatement: 'DoWhileStatement', + EmptyStatement: 'EmptyStatement', + ExportDeclaration: 'ExportDeclaration', + ExportBatchSpecifier: 'ExportBatchSpecifier', + ExportSpecifier: 'ExportSpecifier', + ExpressionStatement: 'ExpressionStatement', + ForInStatement: 'ForInStatement', + ForOfStatement: 'ForOfStatement', + ForStatement: 'ForStatement', + FunctionDeclaration: 'FunctionDeclaration', + FunctionExpression: 'FunctionExpression', + FunctionTypeAnnotation: 'FunctionTypeAnnotation', + FunctionTypeParam: 'FunctionTypeParam', + GenericTypeAnnotation: 'GenericTypeAnnotation', + Identifier: 'Identifier', + IfStatement: 'IfStatement', + ImportDeclaration: 'ImportDeclaration', + ImportDefaultSpecifier: 'ImportDefaultSpecifier', + ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', + ImportSpecifier: 'ImportSpecifier', + InterfaceDeclaration: 'InterfaceDeclaration', + InterfaceExtends: 'InterfaceExtends', + IntersectionTypeAnnotation: 'IntersectionTypeAnnotation', + LabeledStatement: 'LabeledStatement', + Literal: 'Literal', + LogicalExpression: 'LogicalExpression', + MemberExpression: 'MemberExpression', + MethodDefinition: 'MethodDefinition', + ModuleSpecifier: 'ModuleSpecifier', + NewExpression: 'NewExpression', + NullableTypeAnnotation: 'NullableTypeAnnotation', + NumberTypeAnnotation: 'NumberTypeAnnotation', + ObjectExpression: 'ObjectExpression', + ObjectPattern: 'ObjectPattern', + ObjectTypeAnnotation: 'ObjectTypeAnnotation', + ObjectTypeCallProperty: 'ObjectTypeCallProperty', + ObjectTypeIndexer: 'ObjectTypeIndexer', + ObjectTypeProperty: 'ObjectTypeProperty', + Program: 'Program', + Property: 'Property', + QualifiedTypeIdentifier: 'QualifiedTypeIdentifier', + ReturnStatement: 'ReturnStatement', + SequenceExpression: 'SequenceExpression', + SpreadElement: 'SpreadElement', + SpreadProperty: 'SpreadProperty', + StringLiteralTypeAnnotation: 'StringLiteralTypeAnnotation', + StringTypeAnnotation: 'StringTypeAnnotation', + SwitchCase: 'SwitchCase', + SwitchStatement: 'SwitchStatement', + TaggedTemplateExpression: 'TaggedTemplateExpression', + TemplateElement: 'TemplateElement', + TemplateLiteral: 'TemplateLiteral', + ThisExpression: 'ThisExpression', + ThrowStatement: 'ThrowStatement', + TupleTypeAnnotation: 'TupleTypeAnnotation', + TryStatement: 'TryStatement', + TypeAlias: 'TypeAlias', + TypeAnnotation: 'TypeAnnotation', + TypeCastExpression: 'TypeCastExpression', + TypeofTypeAnnotation: 'TypeofTypeAnnotation', + TypeParameterDeclaration: 'TypeParameterDeclaration', + TypeParameterInstantiation: 'TypeParameterInstantiation', + UnaryExpression: 'UnaryExpression', + UnionTypeAnnotation: 'UnionTypeAnnotation', + UpdateExpression: 'UpdateExpression', + VariableDeclaration: 'VariableDeclaration', + VariableDeclarator: 'VariableDeclarator', + VoidTypeAnnotation: 'VoidTypeAnnotation', + WhileStatement: 'WhileStatement', + WithStatement: 'WithStatement', + JSXIdentifier: 'JSXIdentifier', + JSXNamespacedName: 'JSXNamespacedName', + JSXMemberExpression: 'JSXMemberExpression', + JSXEmptyExpression: 'JSXEmptyExpression', + JSXExpressionContainer: 'JSXExpressionContainer', + JSXElement: 'JSXElement', + JSXClosingElement: 'JSXClosingElement', + JSXOpeningElement: 'JSXOpeningElement', + JSXAttribute: 'JSXAttribute', + JSXSpreadAttribute: 'JSXSpreadAttribute', + JSXText: 'JSXText', + YieldExpression: 'YieldExpression', + AwaitExpression: 'AwaitExpression' + }; + + PropertyKind = { + Data: 1, + Get: 2, + Set: 4 + }; + + ClassPropertyType = { + 'static': 'static', + prototype: 'prototype' + }; + + // Error messages should be identical to V8. + Messages = { + UnexpectedToken: 'Unexpected token %0', + UnexpectedNumber: 'Unexpected number', + UnexpectedString: 'Unexpected string', + UnexpectedIdentifier: 'Unexpected identifier', + UnexpectedReserved: 'Unexpected reserved word', + UnexpectedTemplate: 'Unexpected quasi %0', + UnexpectedEOS: 'Unexpected end of input', + NewlineAfterThrow: 'Illegal newline after throw', + InvalidRegExp: 'Invalid regular expression', + UnterminatedRegExp: 'Invalid regular expression: missing /', + InvalidLHSInAssignment: 'Invalid left-hand side in assignment', + InvalidLHSInFormalsList: 'Invalid left-hand side in formals list', + InvalidLHSInForIn: 'Invalid left-hand side in for-in', + MultipleDefaultsInSwitch: 'More than one default clause in switch statement', + NoCatchOrFinally: 'Missing catch or finally after try', + UnknownLabel: 'Undefined label \'%0\'', + Redeclaration: '%0 \'%1\' has already been declared', + IllegalContinue: 'Illegal continue statement', + IllegalBreak: 'Illegal break statement', + IllegalDuplicateClassProperty: 'Illegal duplicate property in class definition', + IllegalClassConstructorProperty: 'Illegal constructor property in class definition', + IllegalReturn: 'Illegal return statement', + IllegalSpread: 'Illegal spread element', + StrictModeWith: 'Strict mode code may not include a with statement', + StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', + StrictVarName: 'Variable name may not be eval or arguments in strict mode', + StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', + StrictParamDupe: 'Strict mode function may not have duplicate parameter names', + ParameterAfterRestParameter: 'Rest parameter must be final parameter of an argument list', + DefaultRestParameter: 'Rest parameter can not have a default value', + ElementAfterSpreadElement: 'Spread must be the final element of an element list', + PropertyAfterSpreadProperty: 'A rest property must be the final property of an object literal', + ObjectPatternAsRestParameter: 'Invalid rest parameter', + ObjectPatternAsSpread: 'Invalid spread argument', + StrictFunctionName: 'Function name may not be eval or arguments in strict mode', + StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', + StrictDelete: 'Delete of an unqualified identifier in strict mode.', + StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode', + AccessorDataProperty: 'Object literal may not have data and accessor property with the same name', + AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name', + StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', + StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', + StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', + StrictReservedWord: 'Use of future reserved word in strict mode', + MissingFromClause: 'Missing from clause', + NoAsAfterImportNamespace: 'Missing as after import *', + InvalidModuleSpecifier: 'Invalid module specifier', + IllegalImportDeclaration: 'Illegal import declaration', + IllegalExportDeclaration: 'Illegal export declaration', + NoUninitializedConst: 'Const must be initialized', + ComprehensionRequiresBlock: 'Comprehension must have at least one block', + ComprehensionError: 'Comprehension Error', + EachNotAllowed: 'Each is not supported', + InvalidJSXAttributeValue: 'JSX value should be either an expression or a quoted JSX text', + ExpectedJSXClosingTag: 'Expected corresponding JSX closing tag for %0', + AdjacentJSXElements: 'Adjacent JSX elements must be wrapped in an enclosing tag', + ConfusedAboutFunctionType: 'Unexpected token =>. It looks like ' + + 'you are trying to write a function type, but you ended up ' + + 'writing a grouped type followed by an =>, which is a syntax ' + + 'error. Remember, function type parameters are named so function ' + + 'types look like (name1: type1, name2: type2) => returnType. You ' + + 'probably wrote (type1) => returnType' + }; + + // See also tools/generate-unicode-regex.py. + Regex = { + NonAsciiIdentifierStart: new RegExp('[\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]'), + NonAsciiIdentifierPart: new RegExp('[\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u0800-\u082d\u0840-\u085b\u08a0\u08a2-\u08ac\u08e4-\u08fe\u0900-\u0963\u0966-\u096f\u0971-\u0977\u0979-\u097f\u0981-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58\u0c59\u0c60-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2\u0d02\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d57\u0d60-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17d3\u17d7\u17dc\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191c\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19d9\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1cd0-\u1cd2\u1cd4-\u1cf6\u1d00-\u1de6\u1dfc-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u200c\u200d\u203f\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099\u309a\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua697\ua69f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua827\ua840-\ua873\ua880-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua900-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a\uaa7b\uaa80-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabea\uabec\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\ufe70-\ufe74\ufe76-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]'), + LeadingZeros: new RegExp('^0+(?!$)') + }; + + // Ensure the condition is true, otherwise throw an error. + // This is only to have a better contract semantic, i.e. another safety net + // to catch a logic error. The condition shall be fulfilled in normal case. + // Do NOT use this to enforce a certain condition on any user input. + + function assert(condition, message) { + /* istanbul ignore if */ + if (!condition) { + throw new Error('ASSERT: ' + message); + } + } + + function StringMap() { + this.$data = {}; + } + + StringMap.prototype.get = function (key) { + key = '$' + key; + return this.$data[key]; + }; + + StringMap.prototype.set = function (key, value) { + key = '$' + key; + this.$data[key] = value; + return this; + }; + + StringMap.prototype.has = function (key) { + key = '$' + key; + return Object.prototype.hasOwnProperty.call(this.$data, key); + }; + + StringMap.prototype["delete"] = function (key) { + key = '$' + key; + return delete this.$data[key]; + }; + + function isDecimalDigit(ch) { + return (ch >= 48 && ch <= 57); // 0..9 + } + + function isHexDigit(ch) { + return '0123456789abcdefABCDEF'.indexOf(ch) >= 0; + } + + function isOctalDigit(ch) { + return '01234567'.indexOf(ch) >= 0; + } + + + // 7.2 White Space + + function isWhiteSpace(ch) { + return (ch === 32) || // space + (ch === 9) || // tab + (ch === 0xB) || + (ch === 0xC) || + (ch === 0xA0) || + (ch >= 0x1680 && '\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\uFEFF'.indexOf(String.fromCharCode(ch)) > 0); + } + + // 7.3 Line Terminators + + function isLineTerminator(ch) { + return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029); + } + + // 7.6 Identifier Names and Identifiers + + function isIdentifierStart(ch) { + return (ch === 36) || (ch === 95) || // $ (dollar) and _ (underscore) + (ch >= 65 && ch <= 90) || // A..Z + (ch >= 97 && ch <= 122) || // a..z + (ch === 92) || // \ (backslash) + ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch))); + } + + function isIdentifierPart(ch) { + return (ch === 36) || (ch === 95) || // $ (dollar) and _ (underscore) + (ch >= 65 && ch <= 90) || // A..Z + (ch >= 97 && ch <= 122) || // a..z + (ch >= 48 && ch <= 57) || // 0..9 + (ch === 92) || // \ (backslash) + ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch))); + } + + // 7.6.1.2 Future Reserved Words + + function isFutureReservedWord(id) { + switch (id) { + case 'class': + case 'enum': + case 'export': + case 'extends': + case 'import': + case 'super': + return true; + default: + return false; + } + } + + function isStrictModeReservedWord(id) { + switch (id) { + case 'implements': + case 'interface': + case 'package': + case 'private': + case 'protected': + case 'public': + case 'static': + case 'yield': + case 'let': + return true; + default: + return false; + } + } + + function isRestrictedWord(id) { + return id === 'eval' || id === 'arguments'; + } + + // 7.6.1.1 Keywords + + function isKeyword(id) { + if (strict && isStrictModeReservedWord(id)) { + return true; + } + + // 'const' is specialized as Keyword in V8. + // 'yield' is only treated as a keyword in strict mode. + // 'let' is for compatiblity with SpiderMonkey and ES.next. + // Some others are from future reserved words. + + switch (id.length) { + case 2: + return (id === 'if') || (id === 'in') || (id === 'do'); + case 3: + return (id === 'var') || (id === 'for') || (id === 'new') || + (id === 'try') || (id === 'let'); + case 4: + return (id === 'this') || (id === 'else') || (id === 'case') || + (id === 'void') || (id === 'with') || (id === 'enum'); + case 5: + return (id === 'while') || (id === 'break') || (id === 'catch') || + (id === 'throw') || (id === 'const') || + (id === 'class') || (id === 'super'); + case 6: + return (id === 'return') || (id === 'typeof') || (id === 'delete') || + (id === 'switch') || (id === 'export') || (id === 'import'); + case 7: + return (id === 'default') || (id === 'finally') || (id === 'extends'); + case 8: + return (id === 'function') || (id === 'continue') || (id === 'debugger'); + case 10: + return (id === 'instanceof'); + default: + return false; + } + } + + // 7.4 Comments + + function addComment(type, value, start, end, loc) { + var comment; + assert(typeof start === 'number', 'Comment must have valid position'); + + // Because the way the actual token is scanned, often the comments + // (if any) are skipped twice during the lexical analysis. + // Thus, we need to skip adding a comment if the comment array already + // handled it. + if (state.lastCommentStart >= start) { + return; + } + state.lastCommentStart = start; + + comment = { + type: type, + value: value + }; + if (extra.range) { + comment.range = [start, end]; + } + if (extra.loc) { + comment.loc = loc; + } + extra.comments.push(comment); + if (extra.attachComment) { + extra.leadingComments.push(comment); + extra.trailingComments.push(comment); + } + } + + function skipSingleLineComment() { + var start, loc, ch, comment; + + start = index - 2; + loc = { + start: { + line: lineNumber, + column: index - lineStart - 2 + } + }; + + while (index < length) { + ch = source.charCodeAt(index); + ++index; + if (isLineTerminator(ch)) { + if (extra.comments) { + comment = source.slice(start + 2, index - 1); + loc.end = { + line: lineNumber, + column: index - lineStart - 1 + }; + addComment('Line', comment, start, index - 1, loc); + } + if (ch === 13 && source.charCodeAt(index) === 10) { + ++index; + } + ++lineNumber; + lineStart = index; + return; + } + } + + if (extra.comments) { + comment = source.slice(start + 2, index); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + addComment('Line', comment, start, index, loc); + } + } + + function skipMultiLineComment() { + var start, loc, ch, comment; + + if (extra.comments) { + start = index - 2; + loc = { + start: { + line: lineNumber, + column: index - lineStart - 2 + } + }; + } + + while (index < length) { + ch = source.charCodeAt(index); + if (isLineTerminator(ch)) { + if (ch === 13 && source.charCodeAt(index + 1) === 10) { + ++index; + } + ++lineNumber; + ++index; + lineStart = index; + if (index >= length) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } else if (ch === 42) { + // Block comment ends with '*/' (char #42, char #47). + if (source.charCodeAt(index + 1) === 47) { + ++index; + ++index; + if (extra.comments) { + comment = source.slice(start + 2, index - 2); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + addComment('Block', comment, start, index, loc); + } + return; + } + ++index; + } else { + ++index; + } + } + + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + function skipComment() { + var ch; + + while (index < length) { + ch = source.charCodeAt(index); + + if (isWhiteSpace(ch)) { + ++index; + } else if (isLineTerminator(ch)) { + ++index; + if (ch === 13 && source.charCodeAt(index) === 10) { + ++index; + } + ++lineNumber; + lineStart = index; + } else if (ch === 47) { // 47 is '/' + ch = source.charCodeAt(index + 1); + if (ch === 47) { + ++index; + ++index; + skipSingleLineComment(); + } else if (ch === 42) { // 42 is '*' + ++index; + ++index; + skipMultiLineComment(); + } else { + break; + } + } else { + break; + } + } + } + + function scanHexEscape(prefix) { + var i, len, ch, code = 0; + + len = (prefix === 'u') ? 4 : 2; + for (i = 0; i < len; ++i) { + if (index < length && isHexDigit(source[index])) { + ch = source[index++]; + code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); + } else { + return ''; + } + } + return String.fromCharCode(code); + } + + function scanUnicodeCodePointEscape() { + var ch, code, cu1, cu2; + + ch = source[index]; + code = 0; + + // At least, one hex digit is required. + if (ch === '}') { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + while (index < length) { + ch = source[index++]; + if (!isHexDigit(ch)) { + break; + } + code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); + } + + if (code > 0x10FFFF || ch !== '}') { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + // UTF-16 Encoding + if (code <= 0xFFFF) { + return String.fromCharCode(code); + } + cu1 = ((code - 0x10000) >> 10) + 0xD800; + cu2 = ((code - 0x10000) & 1023) + 0xDC00; + return String.fromCharCode(cu1, cu2); + } + + function getEscapedIdentifier() { + var ch, id; + + ch = source.charCodeAt(index++); + id = String.fromCharCode(ch); + + // '\u' (char #92, char #117) denotes an escaped character. + if (ch === 92) { + if (source.charCodeAt(index) !== 117) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + ++index; + ch = scanHexEscape('u'); + if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + id = ch; + } + + while (index < length) { + ch = source.charCodeAt(index); + if (!isIdentifierPart(ch)) { + break; + } + ++index; + id += String.fromCharCode(ch); + + // '\u' (char #92, char #117) denotes an escaped character. + if (ch === 92) { + id = id.substr(0, id.length - 1); + if (source.charCodeAt(index) !== 117) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + ++index; + ch = scanHexEscape('u'); + if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + id += ch; + } + } + + return id; + } + + function getIdentifier() { + var start, ch; + + start = index++; + while (index < length) { + ch = source.charCodeAt(index); + if (ch === 92) { + // Blackslash (char #92) marks Unicode escape sequence. + index = start; + return getEscapedIdentifier(); + } + if (isIdentifierPart(ch)) { + ++index; + } else { + break; + } + } + + return source.slice(start, index); + } + + function scanIdentifier() { + var start, id, type; + + start = index; + + // Backslash (char #92) starts an escaped character. + id = (source.charCodeAt(index) === 92) ? getEscapedIdentifier() : getIdentifier(); + + // There is no keyword or literal with only one character. + // Thus, it must be an identifier. + if (id.length === 1) { + type = Token.Identifier; + } else if (isKeyword(id)) { + type = Token.Keyword; + } else if (id === 'null') { + type = Token.NullLiteral; + } else if (id === 'true' || id === 'false') { + type = Token.BooleanLiteral; + } else { + type = Token.Identifier; + } + + return { + type: type, + value: id, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + + // 7.7 Punctuators + + function scanPunctuator() { + var start = index, + code = source.charCodeAt(index), + code2, + ch1 = source[index], + ch2, + ch3, + ch4; + + if (state.inJSXTag || state.inJSXChild) { + // Don't need to check for '{' and '}' as it's already handled + // correctly by default. + switch (code) { + case 60: // < + case 62: // > + ++index; + return { + type: Token.Punctuator, + value: String.fromCharCode(code), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + } + + switch (code) { + // Check for most common single-character punctuators. + case 40: // ( open bracket + case 41: // ) close bracket + case 59: // ; semicolon + case 44: // , comma + case 123: // { open curly brace + case 125: // } close curly brace + case 91: // [ + case 93: // ] + case 58: // : + case 63: // ? + case 126: // ~ + ++index; + if (extra.tokenize) { + if (code === 40) { + extra.openParenToken = extra.tokens.length; + } else if (code === 123) { + extra.openCurlyToken = extra.tokens.length; + } + } + return { + type: Token.Punctuator, + value: String.fromCharCode(code), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + + default: + code2 = source.charCodeAt(index + 1); + + // '=' (char #61) marks an assignment or comparison operator. + if (code2 === 61) { + switch (code) { + case 37: // % + case 38: // & + case 42: // *: + case 43: // + + case 45: // - + case 47: // / + case 60: // < + case 62: // > + case 94: // ^ + case 124: // | + index += 2; + return { + type: Token.Punctuator, + value: String.fromCharCode(code) + String.fromCharCode(code2), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + + case 33: // ! + case 61: // = + index += 2; + + // !== and === + if (source.charCodeAt(index) === 61) { + ++index; + } + return { + type: Token.Punctuator, + value: source.slice(start, index), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + default: + break; + } + } + break; + } + + // Peek more characters. + + ch2 = source[index + 1]; + ch3 = source[index + 2]; + ch4 = source[index + 3]; + + // 4-character punctuator: >>>= + + if (ch1 === '>' && ch2 === '>' && ch3 === '>') { + if (ch4 === '=') { + index += 4; + return { + type: Token.Punctuator, + value: '>>>=', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + } + + // 3-character punctuators: === !== >>> <<= >>= + + if (ch1 === '>' && ch2 === '>' && ch3 === '>' && !state.inType) { + index += 3; + return { + type: Token.Punctuator, + value: '>>>', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '<' && ch2 === '<' && ch3 === '=') { + index += 3; + return { + type: Token.Punctuator, + value: '<<=', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '>' && ch2 === '>' && ch3 === '=') { + index += 3; + return { + type: Token.Punctuator, + value: '>>=', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '.' && ch2 === '.' && ch3 === '.') { + index += 3; + return { + type: Token.Punctuator, + value: '...', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // Other 2-character punctuators: ++ -- << >> && || + + // Don't match these tokens if we're in a type, since they never can + // occur and can mess up types like Map> + if (ch1 === ch2 && ('+-<>&|'.indexOf(ch1) >= 0) && !state.inType) { + index += 2; + return { + type: Token.Punctuator, + value: ch1 + ch2, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '=' && ch2 === '>') { + index += 2; + return { + type: Token.Punctuator, + value: '=>', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) { + ++index; + return { + type: Token.Punctuator, + value: ch1, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '.') { + ++index; + return { + type: Token.Punctuator, + value: ch1, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + // 7.8.3 Numeric Literals + + function scanHexLiteral(start) { + var number = ''; + + while (index < length) { + if (!isHexDigit(source[index])) { + break; + } + number += source[index++]; + } + + if (number.length === 0) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + if (isIdentifierStart(source.charCodeAt(index))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.NumericLiteral, + value: parseInt('0x' + number, 16), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanBinaryLiteral(start) { + var ch, number; + + number = ''; + + while (index < length) { + ch = source[index]; + if (ch !== '0' && ch !== '1') { + break; + } + number += source[index++]; + } + + if (number.length === 0) { + // only 0b or 0B + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + if (index < length) { + ch = source.charCodeAt(index); + /* istanbul ignore else */ + if (isIdentifierStart(ch) || isDecimalDigit(ch)) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + + return { + type: Token.NumericLiteral, + value: parseInt(number, 2), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanOctalLiteral(prefix, start) { + var number, octal; + + if (isOctalDigit(prefix)) { + octal = true; + number = '0' + source[index++]; + } else { + octal = false; + ++index; + number = ''; + } + + while (index < length) { + if (!isOctalDigit(source[index])) { + break; + } + number += source[index++]; + } + + if (!octal && number.length === 0) { + // only 0o or 0O + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.NumericLiteral, + value: parseInt(number, 8), + octal: octal, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanNumericLiteral() { + var number, start, ch; + + ch = source[index]; + assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), + 'Numeric literal must start with a decimal digit or a decimal point'); + + start = index; + number = ''; + if (ch !== '.') { + number = source[index++]; + ch = source[index]; + + // Hex number starts with '0x'. + // Octal number starts with '0'. + // Octal number in ES6 starts with '0o'. + // Binary number in ES6 starts with '0b'. + if (number === '0') { + if (ch === 'x' || ch === 'X') { + ++index; + return scanHexLiteral(start); + } + if (ch === 'b' || ch === 'B') { + ++index; + return scanBinaryLiteral(start); + } + if (ch === 'o' || ch === 'O' || isOctalDigit(ch)) { + return scanOctalLiteral(ch, start); + } + // decimal number starts with '0' such as '09' is illegal. + if (ch && isDecimalDigit(ch.charCodeAt(0))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + + while (isDecimalDigit(source.charCodeAt(index))) { + number += source[index++]; + } + ch = source[index]; + } + + if (ch === '.') { + number += source[index++]; + while (isDecimalDigit(source.charCodeAt(index))) { + number += source[index++]; + } + ch = source[index]; + } + + if (ch === 'e' || ch === 'E') { + number += source[index++]; + + ch = source[index]; + if (ch === '+' || ch === '-') { + number += source[index++]; + } + if (isDecimalDigit(source.charCodeAt(index))) { + while (isDecimalDigit(source.charCodeAt(index))) { + number += source[index++]; + } + } else { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + + if (isIdentifierStart(source.charCodeAt(index))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.NumericLiteral, + value: parseFloat(number), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // 7.8.4 String Literals + + function scanStringLiteral() { + var str = '', quote, start, ch, code, unescaped, restore, octal = false; + + quote = source[index]; + assert((quote === '\'' || quote === '"'), + 'String literal must starts with a quote'); + + start = index; + ++index; + + while (index < length) { + ch = source[index++]; + + if (ch === quote) { + quote = ''; + break; + } else if (ch === '\\') { + ch = source[index++]; + if (!ch || !isLineTerminator(ch.charCodeAt(0))) { + switch (ch) { + case 'n': + str += '\n'; + break; + case 'r': + str += '\r'; + break; + case 't': + str += '\t'; + break; + case 'u': + case 'x': + if (source[index] === '{') { + ++index; + str += scanUnicodeCodePointEscape(); + } else { + restore = index; + unescaped = scanHexEscape(ch); + if (unescaped) { + str += unescaped; + } else { + index = restore; + str += ch; + } + } + break; + case 'b': + str += '\b'; + break; + case 'f': + str += '\f'; + break; + case 'v': + str += '\x0B'; + break; + + default: + if (isOctalDigit(ch)) { + code = '01234567'.indexOf(ch); + + // \0 is not octal escape sequence + if (code !== 0) { + octal = true; + } + + /* istanbul ignore else */ + if (index < length && isOctalDigit(source[index])) { + octal = true; + code = code * 8 + '01234567'.indexOf(source[index++]); + + // 3 digits are only allowed when string starts + // with 0, 1, 2, 3 + if ('0123'.indexOf(ch) >= 0 && + index < length && + isOctalDigit(source[index])) { + code = code * 8 + '01234567'.indexOf(source[index++]); + } + } + str += String.fromCharCode(code); + } else { + str += ch; + } + break; + } + } else { + ++lineNumber; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + lineStart = index; + } + } else if (isLineTerminator(ch.charCodeAt(0))) { + break; + } else { + str += ch; + } + } + + if (quote !== '') { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.StringLiteral, + value: str, + octal: octal, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanTemplate() { + var cooked = '', ch, start, terminated, tail, restore, unescaped, code, octal; + + terminated = false; + tail = false; + start = index; + + ++index; + + while (index < length) { + ch = source[index++]; + if (ch === '`') { + tail = true; + terminated = true; + break; + } else if (ch === '$') { + if (source[index] === '{') { + ++index; + terminated = true; + break; + } + cooked += ch; + } else if (ch === '\\') { + ch = source[index++]; + if (!isLineTerminator(ch.charCodeAt(0))) { + switch (ch) { + case 'n': + cooked += '\n'; + break; + case 'r': + cooked += '\r'; + break; + case 't': + cooked += '\t'; + break; + case 'u': + case 'x': + if (source[index] === '{') { + ++index; + cooked += scanUnicodeCodePointEscape(); + } else { + restore = index; + unescaped = scanHexEscape(ch); + if (unescaped) { + cooked += unescaped; + } else { + index = restore; + cooked += ch; + } + } + break; + case 'b': + cooked += '\b'; + break; + case 'f': + cooked += '\f'; + break; + case 'v': + cooked += '\v'; + break; + + default: + if (isOctalDigit(ch)) { + code = '01234567'.indexOf(ch); + + // \0 is not octal escape sequence + if (code !== 0) { + octal = true; + } + + /* istanbul ignore else */ + if (index < length && isOctalDigit(source[index])) { + octal = true; + code = code * 8 + '01234567'.indexOf(source[index++]); + + // 3 digits are only allowed when string starts + // with 0, 1, 2, 3 + if ('0123'.indexOf(ch) >= 0 && + index < length && + isOctalDigit(source[index])) { + code = code * 8 + '01234567'.indexOf(source[index++]); + } + } + cooked += String.fromCharCode(code); + } else { + cooked += ch; + } + break; + } + } else { + ++lineNumber; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + lineStart = index; + } + } else if (isLineTerminator(ch.charCodeAt(0))) { + ++lineNumber; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + lineStart = index; + cooked += '\n'; + } else { + cooked += ch; + } + } + + if (!terminated) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.Template, + value: { + cooked: cooked, + raw: source.slice(start + 1, index - ((tail) ? 1 : 2)) + }, + tail: tail, + octal: octal, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanTemplateElement(option) { + var startsWith, template; + + lookahead = null; + skipComment(); + + startsWith = (option.head) ? '`' : '}'; + + if (source[index] !== startsWith) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + template = scanTemplate(); + + peek(); + + return template; + } + + function testRegExp(pattern, flags) { + var tmp = pattern, + value; + + if (flags.indexOf('u') >= 0) { + // Replace each astral symbol and every Unicode code point + // escape sequence with a single ASCII symbol to avoid throwing on + // regular expressions that are only valid in combination with the + // `/u` flag. + // Note: replacing with the ASCII symbol `x` might cause false + // negatives in unlikely scenarios. For example, `[\u{61}-b]` is a + // perfectly valid pattern that is equivalent to `[a-b]`, but it + // would be replaced by `[x-b]` which throws an error. + tmp = tmp + .replace(/\\u\{([0-9a-fA-F]+)\}/g, function ($0, $1) { + if (parseInt($1, 16) <= 0x10FFFF) { + return 'x'; + } + throwError({}, Messages.InvalidRegExp); + }) + .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, 'x'); + } + + // First, detect invalid regular expressions. + try { + value = new RegExp(tmp); + } catch (e) { + throwError({}, Messages.InvalidRegExp); + } + + // Return a regular expression object for this pattern-flag pair, or + // `null` in case the current environment doesn't support the flags it + // uses. + try { + return new RegExp(pattern, flags); + } catch (exception) { + return null; + } + } + + function scanRegExpBody() { + var ch, str, classMarker, terminated, body; + + ch = source[index]; + assert(ch === '/', 'Regular expression literal must start with a slash'); + str = source[index++]; + + classMarker = false; + terminated = false; + while (index < length) { + ch = source[index++]; + str += ch; + if (ch === '\\') { + ch = source[index++]; + // ECMA-262 7.8.5 + if (isLineTerminator(ch.charCodeAt(0))) { + throwError({}, Messages.UnterminatedRegExp); + } + str += ch; + } else if (isLineTerminator(ch.charCodeAt(0))) { + throwError({}, Messages.UnterminatedRegExp); + } else if (classMarker) { + if (ch === ']') { + classMarker = false; + } + } else { + if (ch === '/') { + terminated = true; + break; + } else if (ch === '[') { + classMarker = true; + } + } + } + + if (!terminated) { + throwError({}, Messages.UnterminatedRegExp); + } + + // Exclude leading and trailing slash. + body = str.substr(1, str.length - 2); + return { + value: body, + literal: str + }; + } + + function scanRegExpFlags() { + var ch, str, flags, restore; + + str = ''; + flags = ''; + while (index < length) { + ch = source[index]; + if (!isIdentifierPart(ch.charCodeAt(0))) { + break; + } + + ++index; + if (ch === '\\' && index < length) { + ch = source[index]; + if (ch === 'u') { + ++index; + restore = index; + ch = scanHexEscape('u'); + if (ch) { + flags += ch; + for (str += '\\u'; restore < index; ++restore) { + str += source[restore]; + } + } else { + index = restore; + flags += 'u'; + str += '\\u'; + } + throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL'); + } else { + str += '\\'; + throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } else { + flags += ch; + str += ch; + } + } + + return { + value: flags, + literal: str + }; + } + + function scanRegExp() { + var start, body, flags, value; + + lookahead = null; + skipComment(); + start = index; + + body = scanRegExpBody(); + flags = scanRegExpFlags(); + value = testRegExp(body.value, flags.value); + + if (extra.tokenize) { + return { + type: Token.RegularExpression, + value: value, + regex: { + pattern: body.value, + flags: flags.value + }, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + return { + literal: body.literal + flags.literal, + value: value, + regex: { + pattern: body.value, + flags: flags.value + }, + range: [start, index] + }; + } + + function isIdentifierName(token) { + return token.type === Token.Identifier || + token.type === Token.Keyword || + token.type === Token.BooleanLiteral || + token.type === Token.NullLiteral; + } + + function advanceSlash() { + var prevToken, + checkToken; + // Using the following algorithm: + // https://github.com/mozilla/sweet.js/wiki/design + prevToken = extra.tokens[extra.tokens.length - 1]; + if (!prevToken) { + // Nothing before that: it cannot be a division. + return scanRegExp(); + } + if (prevToken.type === 'Punctuator') { + if (prevToken.value === ')') { + checkToken = extra.tokens[extra.openParenToken - 1]; + if (checkToken && + checkToken.type === 'Keyword' && + (checkToken.value === 'if' || + checkToken.value === 'while' || + checkToken.value === 'for' || + checkToken.value === 'with')) { + return scanRegExp(); + } + return scanPunctuator(); + } + if (prevToken.value === '}') { + // Dividing a function by anything makes little sense, + // but we have to check for that. + if (extra.tokens[extra.openCurlyToken - 3] && + extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') { + // Anonymous function. + checkToken = extra.tokens[extra.openCurlyToken - 4]; + if (!checkToken) { + return scanPunctuator(); + } + } else if (extra.tokens[extra.openCurlyToken - 4] && + extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') { + // Named function. + checkToken = extra.tokens[extra.openCurlyToken - 5]; + if (!checkToken) { + return scanRegExp(); + } + } else { + return scanPunctuator(); + } + // checkToken determines whether the function is + // a declaration or an expression. + if (FnExprTokens.indexOf(checkToken.value) >= 0) { + // It is an expression. + return scanPunctuator(); + } + // It is a declaration. + return scanRegExp(); + } + return scanRegExp(); + } + if (prevToken.type === 'Keyword' && prevToken.value !== 'this') { + return scanRegExp(); + } + return scanPunctuator(); + } + + function advance() { + var ch; + + if (!state.inJSXChild) { + skipComment(); + } + + if (index >= length) { + return { + type: Token.EOF, + lineNumber: lineNumber, + lineStart: lineStart, + range: [index, index] + }; + } + + if (state.inJSXChild) { + return advanceJSXChild(); + } + + ch = source.charCodeAt(index); + + // Very common: ( and ) and ; + if (ch === 40 || ch === 41 || ch === 58) { + return scanPunctuator(); + } + + // String literal starts with single quote (#39) or double quote (#34). + if (ch === 39 || ch === 34) { + if (state.inJSXTag) { + return scanJSXStringLiteral(); + } + return scanStringLiteral(); + } + + if (state.inJSXTag && isJSXIdentifierStart(ch)) { + return scanJSXIdentifier(); + } + + if (ch === 96) { + return scanTemplate(); + } + if (isIdentifierStart(ch)) { + return scanIdentifier(); + } + + // Dot (.) char #46 can also start a floating-point number, hence the need + // to check the next character. + if (ch === 46) { + if (isDecimalDigit(source.charCodeAt(index + 1))) { + return scanNumericLiteral(); + } + return scanPunctuator(); + } + + if (isDecimalDigit(ch)) { + return scanNumericLiteral(); + } + + // Slash (/) char #47 can also start a regex. + if (extra.tokenize && ch === 47) { + return advanceSlash(); + } + + return scanPunctuator(); + } + + function lex() { + var token; + + token = lookahead; + index = token.range[1]; + lineNumber = token.lineNumber; + lineStart = token.lineStart; + + lookahead = advance(); + + index = token.range[1]; + lineNumber = token.lineNumber; + lineStart = token.lineStart; + + return token; + } + + function peek() { + var pos, line, start; + + pos = index; + line = lineNumber; + start = lineStart; + lookahead = advance(); + index = pos; + lineNumber = line; + lineStart = start; + } + + function lookahead2() { + var adv, pos, line, start, result; + + // If we are collecting the tokens, don't grab the next one yet. + /* istanbul ignore next */ + adv = (typeof extra.advance === 'function') ? extra.advance : advance; + + pos = index; + line = lineNumber; + start = lineStart; + + // Scan for the next immediate token. + /* istanbul ignore if */ + if (lookahead === null) { + lookahead = adv(); + } + index = lookahead.range[1]; + lineNumber = lookahead.lineNumber; + lineStart = lookahead.lineStart; + + // Grab the token right after. + result = adv(); + index = pos; + lineNumber = line; + lineStart = start; + + return result; + } + + function rewind(token) { + index = token.range[0]; + lineNumber = token.lineNumber; + lineStart = token.lineStart; + lookahead = token; + } + + function markerCreate() { + if (!extra.loc && !extra.range) { + return undefined; + } + skipComment(); + return {offset: index, line: lineNumber, col: index - lineStart}; + } + + function markerCreatePreserveWhitespace() { + if (!extra.loc && !extra.range) { + return undefined; + } + return {offset: index, line: lineNumber, col: index - lineStart}; + } + + function processComment(node) { + var lastChild, + trailingComments, + bottomRight = extra.bottomRightStack, + last = bottomRight[bottomRight.length - 1]; + + if (node.type === Syntax.Program) { + /* istanbul ignore else */ + if (node.body.length > 0) { + return; + } + } + + if (extra.trailingComments.length > 0) { + if (extra.trailingComments[0].range[0] >= node.range[1]) { + trailingComments = extra.trailingComments; + extra.trailingComments = []; + } else { + extra.trailingComments.length = 0; + } + } else { + if (last && last.trailingComments && last.trailingComments[0].range[0] >= node.range[1]) { + trailingComments = last.trailingComments; + delete last.trailingComments; + } + } + + // Eating the stack. + if (last) { + while (last && last.range[0] >= node.range[0]) { + lastChild = last; + last = bottomRight.pop(); + } + } + + if (lastChild) { + if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) { + node.leadingComments = lastChild.leadingComments; + delete lastChild.leadingComments; + } + } else if (extra.leadingComments.length > 0 && extra.leadingComments[extra.leadingComments.length - 1].range[1] <= node.range[0]) { + node.leadingComments = extra.leadingComments; + extra.leadingComments = []; + } + + if (trailingComments) { + node.trailingComments = trailingComments; + } + + bottomRight.push(node); + } + + function markerApply(marker, node) { + if (extra.range) { + node.range = [marker.offset, index]; + } + if (extra.loc) { + node.loc = { + start: { + line: marker.line, + column: marker.col + }, + end: { + line: lineNumber, + column: index - lineStart + } + }; + node = delegate.postProcess(node); + } + if (extra.attachComment) { + processComment(node); + } + return node; + } + + SyntaxTreeDelegate = { + + name: 'SyntaxTree', + + postProcess: function (node) { + return node; + }, + + createArrayExpression: function (elements) { + return { + type: Syntax.ArrayExpression, + elements: elements + }; + }, + + createAssignmentExpression: function (operator, left, right) { + return { + type: Syntax.AssignmentExpression, + operator: operator, + left: left, + right: right + }; + }, + + createBinaryExpression: function (operator, left, right) { + var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : + Syntax.BinaryExpression; + return { + type: type, + operator: operator, + left: left, + right: right + }; + }, + + createBlockStatement: function (body) { + return { + type: Syntax.BlockStatement, + body: body + }; + }, + + createBreakStatement: function (label) { + return { + type: Syntax.BreakStatement, + label: label + }; + }, + + createCallExpression: function (callee, args) { + return { + type: Syntax.CallExpression, + callee: callee, + 'arguments': args + }; + }, + + createCatchClause: function (param, body) { + return { + type: Syntax.CatchClause, + param: param, + body: body + }; + }, + + createConditionalExpression: function (test, consequent, alternate) { + return { + type: Syntax.ConditionalExpression, + test: test, + consequent: consequent, + alternate: alternate + }; + }, + + createContinueStatement: function (label) { + return { + type: Syntax.ContinueStatement, + label: label + }; + }, + + createDebuggerStatement: function () { + return { + type: Syntax.DebuggerStatement + }; + }, + + createDoWhileStatement: function (body, test) { + return { + type: Syntax.DoWhileStatement, + body: body, + test: test + }; + }, + + createEmptyStatement: function () { + return { + type: Syntax.EmptyStatement + }; + }, + + createExpressionStatement: function (expression) { + return { + type: Syntax.ExpressionStatement, + expression: expression + }; + }, + + createForStatement: function (init, test, update, body) { + return { + type: Syntax.ForStatement, + init: init, + test: test, + update: update, + body: body + }; + }, + + createForInStatement: function (left, right, body) { + return { + type: Syntax.ForInStatement, + left: left, + right: right, + body: body, + each: false + }; + }, + + createForOfStatement: function (left, right, body) { + return { + type: Syntax.ForOfStatement, + left: left, + right: right, + body: body + }; + }, + + createFunctionDeclaration: function (id, params, defaults, body, rest, generator, expression, + isAsync, returnType, typeParameters) { + var funDecl = { + type: Syntax.FunctionDeclaration, + id: id, + params: params, + defaults: defaults, + body: body, + rest: rest, + generator: generator, + expression: expression, + returnType: returnType, + typeParameters: typeParameters + }; + + if (isAsync) { + funDecl.async = true; + } + + return funDecl; + }, + + createFunctionExpression: function (id, params, defaults, body, rest, generator, expression, + isAsync, returnType, typeParameters) { + var funExpr = { + type: Syntax.FunctionExpression, + id: id, + params: params, + defaults: defaults, + body: body, + rest: rest, + generator: generator, + expression: expression, + returnType: returnType, + typeParameters: typeParameters + }; + + if (isAsync) { + funExpr.async = true; + } + + return funExpr; + }, + + createIdentifier: function (name) { + return { + type: Syntax.Identifier, + name: name, + // Only here to initialize the shape of the object to ensure + // that the 'typeAnnotation' key is ordered before others that + // are added later (like 'loc' and 'range'). This just helps + // keep the shape of Identifier nodes consistent with everything + // else. + typeAnnotation: undefined, + optional: undefined + }; + }, + + createTypeAnnotation: function (typeAnnotation) { + return { + type: Syntax.TypeAnnotation, + typeAnnotation: typeAnnotation + }; + }, + + createTypeCast: function (expression, typeAnnotation) { + return { + type: Syntax.TypeCastExpression, + expression: expression, + typeAnnotation: typeAnnotation + }; + }, + + createFunctionTypeAnnotation: function (params, returnType, rest, typeParameters) { + return { + type: Syntax.FunctionTypeAnnotation, + params: params, + returnType: returnType, + rest: rest, + typeParameters: typeParameters + }; + }, + + createFunctionTypeParam: function (name, typeAnnotation, optional) { + return { + type: Syntax.FunctionTypeParam, + name: name, + typeAnnotation: typeAnnotation, + optional: optional + }; + }, + + createNullableTypeAnnotation: function (typeAnnotation) { + return { + type: Syntax.NullableTypeAnnotation, + typeAnnotation: typeAnnotation + }; + }, + + createArrayTypeAnnotation: function (elementType) { + return { + type: Syntax.ArrayTypeAnnotation, + elementType: elementType + }; + }, + + createGenericTypeAnnotation: function (id, typeParameters) { + return { + type: Syntax.GenericTypeAnnotation, + id: id, + typeParameters: typeParameters + }; + }, + + createQualifiedTypeIdentifier: function (qualification, id) { + return { + type: Syntax.QualifiedTypeIdentifier, + qualification: qualification, + id: id + }; + }, + + createTypeParameterDeclaration: function (params) { + return { + type: Syntax.TypeParameterDeclaration, + params: params + }; + }, + + createTypeParameterInstantiation: function (params) { + return { + type: Syntax.TypeParameterInstantiation, + params: params + }; + }, + + createAnyTypeAnnotation: function () { + return { + type: Syntax.AnyTypeAnnotation + }; + }, + + createBooleanTypeAnnotation: function () { + return { + type: Syntax.BooleanTypeAnnotation + }; + }, + + createNumberTypeAnnotation: function () { + return { + type: Syntax.NumberTypeAnnotation + }; + }, + + createStringTypeAnnotation: function () { + return { + type: Syntax.StringTypeAnnotation + }; + }, + + createStringLiteralTypeAnnotation: function (token) { + return { + type: Syntax.StringLiteralTypeAnnotation, + value: token.value, + raw: source.slice(token.range[0], token.range[1]) + }; + }, + + createVoidTypeAnnotation: function () { + return { + type: Syntax.VoidTypeAnnotation + }; + }, + + createTypeofTypeAnnotation: function (argument) { + return { + type: Syntax.TypeofTypeAnnotation, + argument: argument + }; + }, + + createTupleTypeAnnotation: function (types) { + return { + type: Syntax.TupleTypeAnnotation, + types: types + }; + }, + + createObjectTypeAnnotation: function (properties, indexers, callProperties) { + return { + type: Syntax.ObjectTypeAnnotation, + properties: properties, + indexers: indexers, + callProperties: callProperties + }; + }, + + createObjectTypeIndexer: function (id, key, value, isStatic) { + return { + type: Syntax.ObjectTypeIndexer, + id: id, + key: key, + value: value, + "static": isStatic + }; + }, + + createObjectTypeCallProperty: function (value, isStatic) { + return { + type: Syntax.ObjectTypeCallProperty, + value: value, + "static": isStatic + }; + }, + + createObjectTypeProperty: function (key, value, optional, isStatic) { + return { + type: Syntax.ObjectTypeProperty, + key: key, + value: value, + optional: optional, + "static": isStatic + }; + }, + + createUnionTypeAnnotation: function (types) { + return { + type: Syntax.UnionTypeAnnotation, + types: types + }; + }, + + createIntersectionTypeAnnotation: function (types) { + return { + type: Syntax.IntersectionTypeAnnotation, + types: types + }; + }, + + createTypeAlias: function (id, typeParameters, right) { + return { + type: Syntax.TypeAlias, + id: id, + typeParameters: typeParameters, + right: right + }; + }, + + createInterface: function (id, typeParameters, body, extended) { + return { + type: Syntax.InterfaceDeclaration, + id: id, + typeParameters: typeParameters, + body: body, + "extends": extended + }; + }, + + createInterfaceExtends: function (id, typeParameters) { + return { + type: Syntax.InterfaceExtends, + id: id, + typeParameters: typeParameters + }; + }, + + createDeclareFunction: function (id) { + return { + type: Syntax.DeclareFunction, + id: id + }; + }, + + createDeclareVariable: function (id) { + return { + type: Syntax.DeclareVariable, + id: id + }; + }, + + createDeclareModule: function (id, body) { + return { + type: Syntax.DeclareModule, + id: id, + body: body + }; + }, + + createJSXAttribute: function (name, value) { + return { + type: Syntax.JSXAttribute, + name: name, + value: value || null + }; + }, + + createJSXSpreadAttribute: function (argument) { + return { + type: Syntax.JSXSpreadAttribute, + argument: argument + }; + }, + + createJSXIdentifier: function (name) { + return { + type: Syntax.JSXIdentifier, + name: name + }; + }, + + createJSXNamespacedName: function (namespace, name) { + return { + type: Syntax.JSXNamespacedName, + namespace: namespace, + name: name + }; + }, + + createJSXMemberExpression: function (object, property) { + return { + type: Syntax.JSXMemberExpression, + object: object, + property: property + }; + }, + + createJSXElement: function (openingElement, closingElement, children) { + return { + type: Syntax.JSXElement, + openingElement: openingElement, + closingElement: closingElement, + children: children + }; + }, + + createJSXEmptyExpression: function () { + return { + type: Syntax.JSXEmptyExpression + }; + }, + + createJSXExpressionContainer: function (expression) { + return { + type: Syntax.JSXExpressionContainer, + expression: expression + }; + }, + + createJSXOpeningElement: function (name, attributes, selfClosing) { + return { + type: Syntax.JSXOpeningElement, + name: name, + selfClosing: selfClosing, + attributes: attributes + }; + }, + + createJSXClosingElement: function (name) { + return { + type: Syntax.JSXClosingElement, + name: name + }; + }, + + createIfStatement: function (test, consequent, alternate) { + return { + type: Syntax.IfStatement, + test: test, + consequent: consequent, + alternate: alternate + }; + }, + + createLabeledStatement: function (label, body) { + return { + type: Syntax.LabeledStatement, + label: label, + body: body + }; + }, + + createLiteral: function (token) { + var object = { + type: Syntax.Literal, + value: token.value, + raw: source.slice(token.range[0], token.range[1]) + }; + if (token.regex) { + object.regex = token.regex; + } + return object; + }, + + createMemberExpression: function (accessor, object, property) { + return { + type: Syntax.MemberExpression, + computed: accessor === '[', + object: object, + property: property + }; + }, + + createNewExpression: function (callee, args) { + return { + type: Syntax.NewExpression, + callee: callee, + 'arguments': args + }; + }, + + createObjectExpression: function (properties) { + return { + type: Syntax.ObjectExpression, + properties: properties + }; + }, + + createPostfixExpression: function (operator, argument) { + return { + type: Syntax.UpdateExpression, + operator: operator, + argument: argument, + prefix: false + }; + }, + + createProgram: function (body) { + return { + type: Syntax.Program, + body: body + }; + }, + + createProperty: function (kind, key, value, method, shorthand, computed) { + return { + type: Syntax.Property, + key: key, + value: value, + kind: kind, + method: method, + shorthand: shorthand, + computed: computed + }; + }, + + createReturnStatement: function (argument) { + return { + type: Syntax.ReturnStatement, + argument: argument + }; + }, + + createSequenceExpression: function (expressions) { + return { + type: Syntax.SequenceExpression, + expressions: expressions + }; + }, + + createSwitchCase: function (test, consequent) { + return { + type: Syntax.SwitchCase, + test: test, + consequent: consequent + }; + }, + + createSwitchStatement: function (discriminant, cases) { + return { + type: Syntax.SwitchStatement, + discriminant: discriminant, + cases: cases + }; + }, + + createThisExpression: function () { + return { + type: Syntax.ThisExpression + }; + }, + + createThrowStatement: function (argument) { + return { + type: Syntax.ThrowStatement, + argument: argument + }; + }, + + createTryStatement: function (block, guardedHandlers, handlers, finalizer) { + return { + type: Syntax.TryStatement, + block: block, + guardedHandlers: guardedHandlers, + handlers: handlers, + finalizer: finalizer + }; + }, + + createUnaryExpression: function (operator, argument) { + if (operator === '++' || operator === '--') { + return { + type: Syntax.UpdateExpression, + operator: operator, + argument: argument, + prefix: true + }; + } + return { + type: Syntax.UnaryExpression, + operator: operator, + argument: argument, + prefix: true + }; + }, + + createVariableDeclaration: function (declarations, kind) { + return { + type: Syntax.VariableDeclaration, + declarations: declarations, + kind: kind + }; + }, + + createVariableDeclarator: function (id, init) { + return { + type: Syntax.VariableDeclarator, + id: id, + init: init + }; + }, + + createWhileStatement: function (test, body) { + return { + type: Syntax.WhileStatement, + test: test, + body: body + }; + }, + + createWithStatement: function (object, body) { + return { + type: Syntax.WithStatement, + object: object, + body: body + }; + }, + + createTemplateElement: function (value, tail) { + return { + type: Syntax.TemplateElement, + value: value, + tail: tail + }; + }, + + createTemplateLiteral: function (quasis, expressions) { + return { + type: Syntax.TemplateLiteral, + quasis: quasis, + expressions: expressions + }; + }, + + createSpreadElement: function (argument) { + return { + type: Syntax.SpreadElement, + argument: argument + }; + }, + + createSpreadProperty: function (argument) { + return { + type: Syntax.SpreadProperty, + argument: argument + }; + }, + + createTaggedTemplateExpression: function (tag, quasi) { + return { + type: Syntax.TaggedTemplateExpression, + tag: tag, + quasi: quasi + }; + }, + + createArrowFunctionExpression: function (params, defaults, body, rest, expression, isAsync) { + var arrowExpr = { + type: Syntax.ArrowFunctionExpression, + id: null, + params: params, + defaults: defaults, + body: body, + rest: rest, + generator: false, + expression: expression + }; + + if (isAsync) { + arrowExpr.async = true; + } + + return arrowExpr; + }, + + createMethodDefinition: function (propertyType, kind, key, value, computed) { + return { + type: Syntax.MethodDefinition, + key: key, + value: value, + kind: kind, + 'static': propertyType === ClassPropertyType["static"], + computed: computed + }; + }, + + createClassProperty: function (key, typeAnnotation, computed, isStatic) { + return { + type: Syntax.ClassProperty, + key: key, + typeAnnotation: typeAnnotation, + computed: computed, + "static": isStatic + }; + }, + + createClassBody: function (body) { + return { + type: Syntax.ClassBody, + body: body + }; + }, + + createClassImplements: function (id, typeParameters) { + return { + type: Syntax.ClassImplements, + id: id, + typeParameters: typeParameters + }; + }, + + createClassExpression: function (id, superClass, body, typeParameters, superTypeParameters, implemented) { + return { + type: Syntax.ClassExpression, + id: id, + superClass: superClass, + body: body, + typeParameters: typeParameters, + superTypeParameters: superTypeParameters, + "implements": implemented + }; + }, + + createClassDeclaration: function (id, superClass, body, typeParameters, superTypeParameters, implemented) { + return { + type: Syntax.ClassDeclaration, + id: id, + superClass: superClass, + body: body, + typeParameters: typeParameters, + superTypeParameters: superTypeParameters, + "implements": implemented + }; + }, + + createModuleSpecifier: function (token) { + return { + type: Syntax.ModuleSpecifier, + value: token.value, + raw: source.slice(token.range[0], token.range[1]) + }; + }, + + createExportSpecifier: function (id, name) { + return { + type: Syntax.ExportSpecifier, + id: id, + name: name + }; + }, + + createExportBatchSpecifier: function () { + return { + type: Syntax.ExportBatchSpecifier + }; + }, + + createImportDefaultSpecifier: function (id) { + return { + type: Syntax.ImportDefaultSpecifier, + id: id + }; + }, + + createImportNamespaceSpecifier: function (id) { + return { + type: Syntax.ImportNamespaceSpecifier, + id: id + }; + }, + + createExportDeclaration: function (isDefault, declaration, specifiers, src) { + return { + type: Syntax.ExportDeclaration, + 'default': !!isDefault, + declaration: declaration, + specifiers: specifiers, + source: src + }; + }, + + createImportSpecifier: function (id, name) { + return { + type: Syntax.ImportSpecifier, + id: id, + name: name + }; + }, + + createImportDeclaration: function (specifiers, src, isType) { + return { + type: Syntax.ImportDeclaration, + specifiers: specifiers, + source: src, + isType: isType + }; + }, + + createYieldExpression: function (argument, dlg) { + return { + type: Syntax.YieldExpression, + argument: argument, + delegate: dlg + }; + }, + + createAwaitExpression: function (argument) { + return { + type: Syntax.AwaitExpression, + argument: argument + }; + }, + + createComprehensionExpression: function (filter, blocks, body) { + return { + type: Syntax.ComprehensionExpression, + filter: filter, + blocks: blocks, + body: body + }; + } + + }; + + // Return true if there is a line terminator before the next token. + + function peekLineTerminator() { + var pos, line, start, found; + + pos = index; + line = lineNumber; + start = lineStart; + skipComment(); + found = lineNumber !== line; + index = pos; + lineNumber = line; + lineStart = start; + + return found; + } + + // Throw an exception + + function throwError(token, messageFormat) { + var error, + args = Array.prototype.slice.call(arguments, 2), + msg = messageFormat.replace( + /%(\d)/g, + function (whole, idx) { + assert(idx < args.length, 'Message reference must be in range'); + return args[idx]; + } + ); + + if (typeof token.lineNumber === 'number') { + error = new Error('Line ' + token.lineNumber + ': ' + msg); + error.index = token.range[0]; + error.lineNumber = token.lineNumber; + error.column = token.range[0] - lineStart + 1; + } else { + error = new Error('Line ' + lineNumber + ': ' + msg); + error.index = index; + error.lineNumber = lineNumber; + error.column = index - lineStart + 1; + } + + error.description = msg; + throw error; + } + + function throwErrorTolerant() { + try { + throwError.apply(null, arguments); + } catch (e) { + if (extra.errors) { + extra.errors.push(e); + } else { + throw e; + } + } + } + + + // Throw an exception because of the token. + + function throwUnexpected(token) { + if (token.type === Token.EOF) { + throwError(token, Messages.UnexpectedEOS); + } + + if (token.type === Token.NumericLiteral) { + throwError(token, Messages.UnexpectedNumber); + } + + if (token.type === Token.StringLiteral || token.type === Token.JSXText) { + throwError(token, Messages.UnexpectedString); + } + + if (token.type === Token.Identifier) { + throwError(token, Messages.UnexpectedIdentifier); + } + + if (token.type === Token.Keyword) { + if (isFutureReservedWord(token.value)) { + throwError(token, Messages.UnexpectedReserved); + } else if (strict && isStrictModeReservedWord(token.value)) { + throwErrorTolerant(token, Messages.StrictReservedWord); + return; + } + throwError(token, Messages.UnexpectedToken, token.value); + } + + if (token.type === Token.Template) { + throwError(token, Messages.UnexpectedTemplate, token.value.raw); + } + + // BooleanLiteral, NullLiteral, or Punctuator. + throwError(token, Messages.UnexpectedToken, token.value); + } + + // Expect the next token to match the specified punctuator. + // If not, an exception will be thrown. + + function expect(value) { + var token = lex(); + if (token.type !== Token.Punctuator || token.value !== value) { + throwUnexpected(token); + } + } + + // Expect the next token to match the specified keyword. + // If not, an exception will be thrown. + + function expectKeyword(keyword, contextual) { + var token = lex(); + if (token.type !== (contextual ? Token.Identifier : Token.Keyword) || + token.value !== keyword) { + throwUnexpected(token); + } + } + + // Expect the next token to match the specified contextual keyword. + // If not, an exception will be thrown. + + function expectContextualKeyword(keyword) { + return expectKeyword(keyword, true); + } + + // Return true if the next token matches the specified punctuator. + + function match(value) { + return lookahead.type === Token.Punctuator && lookahead.value === value; + } + + // Return true if the next token matches the specified keyword + + function matchKeyword(keyword, contextual) { + var expectedType = contextual ? Token.Identifier : Token.Keyword; + return lookahead.type === expectedType && lookahead.value === keyword; + } + + // Return true if the next token matches the specified contextual keyword + + function matchContextualKeyword(keyword) { + return matchKeyword(keyword, true); + } + + // Return true if the next token is an assignment operator + + function matchAssign() { + var op; + + if (lookahead.type !== Token.Punctuator) { + return false; + } + op = lookahead.value; + return op === '=' || + op === '*=' || + op === '/=' || + op === '%=' || + op === '+=' || + op === '-=' || + op === '<<=' || + op === '>>=' || + op === '>>>=' || + op === '&=' || + op === '^=' || + op === '|='; + } + + // Note that 'yield' is treated as a keyword in strict mode, but a + // contextual keyword (identifier) in non-strict mode, so we need to + // use matchKeyword('yield', false) and matchKeyword('yield', true) + // (i.e. matchContextualKeyword) appropriately. + function matchYield() { + return state.yieldAllowed && matchKeyword('yield', !strict); + } + + function matchAsync() { + var backtrackToken = lookahead, matches = false; + + if (matchContextualKeyword('async')) { + lex(); // Make sure peekLineTerminator() starts after 'async'. + matches = !peekLineTerminator(); + rewind(backtrackToken); // Revert the lex(). + } + + return matches; + } + + function matchAwait() { + return state.awaitAllowed && matchContextualKeyword('await'); + } + + function consumeSemicolon() { + var line, oldIndex = index, oldLineNumber = lineNumber, + oldLineStart = lineStart, oldLookahead = lookahead; + + // Catch the very common case first: immediately a semicolon (char #59). + if (source.charCodeAt(index) === 59) { + lex(); + return; + } + + line = lineNumber; + skipComment(); + if (lineNumber !== line) { + index = oldIndex; + lineNumber = oldLineNumber; + lineStart = oldLineStart; + lookahead = oldLookahead; + return; + } + + if (match(';')) { + lex(); + return; + } + + if (lookahead.type !== Token.EOF && !match('}')) { + throwUnexpected(lookahead); + } + } + + // Return true if provided expression is LeftHandSideExpression + + function isLeftHandSide(expr) { + return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression; + } + + function isAssignableLeftHandSide(expr) { + return isLeftHandSide(expr) || expr.type === Syntax.ObjectPattern || expr.type === Syntax.ArrayPattern; + } + + // 11.1.4 Array Initialiser + + function parseArrayInitialiser() { + var elements = [], blocks = [], filter = null, tmp, possiblecomprehension = true, + marker = markerCreate(); + + expect('['); + while (!match(']')) { + if (lookahead.value === 'for' && + lookahead.type === Token.Keyword) { + if (!possiblecomprehension) { + throwError({}, Messages.ComprehensionError); + } + matchKeyword('for'); + tmp = parseForStatement({ignoreBody: true}); + tmp.of = tmp.type === Syntax.ForOfStatement; + tmp.type = Syntax.ComprehensionBlock; + if (tmp.left.kind) { // can't be let or const + throwError({}, Messages.ComprehensionError); + } + blocks.push(tmp); + } else if (lookahead.value === 'if' && + lookahead.type === Token.Keyword) { + if (!possiblecomprehension) { + throwError({}, Messages.ComprehensionError); + } + expectKeyword('if'); + expect('('); + filter = parseExpression(); + expect(')'); + } else if (lookahead.value === ',' && + lookahead.type === Token.Punctuator) { + possiblecomprehension = false; // no longer allowed. + lex(); + elements.push(null); + } else { + tmp = parseSpreadOrAssignmentExpression(); + elements.push(tmp); + if (tmp && tmp.type === Syntax.SpreadElement) { + if (!match(']')) { + throwError({}, Messages.ElementAfterSpreadElement); + } + } else if (!(match(']') || matchKeyword('for') || matchKeyword('if'))) { + expect(','); // this lexes. + possiblecomprehension = false; + } + } + } + + expect(']'); + + if (filter && !blocks.length) { + throwError({}, Messages.ComprehensionRequiresBlock); + } + + if (blocks.length) { + if (elements.length !== 1) { + throwError({}, Messages.ComprehensionError); + } + return markerApply(marker, delegate.createComprehensionExpression(filter, blocks, elements[0])); + } + return markerApply(marker, delegate.createArrayExpression(elements)); + } + + // 11.1.5 Object Initialiser + + function parsePropertyFunction(options) { + var previousStrict, previousYieldAllowed, previousAwaitAllowed, + params, defaults, body, marker = markerCreate(); + + previousStrict = strict; + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = options.generator; + previousAwaitAllowed = state.awaitAllowed; + state.awaitAllowed = options.async; + params = options.params || []; + defaults = options.defaults || []; + + body = parseConciseBody(); + if (options.name && strict && isRestrictedWord(params[0].name)) { + throwErrorTolerant(options.name, Messages.StrictParamName); + } + strict = previousStrict; + state.yieldAllowed = previousYieldAllowed; + state.awaitAllowed = previousAwaitAllowed; + + return markerApply(marker, delegate.createFunctionExpression( + null, + params, + defaults, + body, + options.rest || null, + options.generator, + body.type !== Syntax.BlockStatement, + options.async, + options.returnType, + options.typeParameters + )); + } + + + function parsePropertyMethodFunction(options) { + var previousStrict, tmp, method; + + previousStrict = strict; + strict = true; + + tmp = parseParams(); + + if (tmp.stricted) { + throwErrorTolerant(tmp.stricted, tmp.message); + } + + method = parsePropertyFunction({ + params: tmp.params, + defaults: tmp.defaults, + rest: tmp.rest, + generator: options.generator, + async: options.async, + returnType: tmp.returnType, + typeParameters: options.typeParameters + }); + + strict = previousStrict; + + return method; + } + + + function parseObjectPropertyKey() { + var marker = markerCreate(), + token = lex(), + propertyKey, + result; + + // Note: This function is called only from parseObjectProperty(), where + // EOF and Punctuator tokens are already filtered out. + + if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) { + if (strict && token.octal) { + throwErrorTolerant(token, Messages.StrictOctalLiteral); + } + return markerApply(marker, delegate.createLiteral(token)); + } + + if (token.type === Token.Punctuator && token.value === '[') { + // For computed properties we should skip the [ and ], and + // capture in marker only the assignment expression itself. + marker = markerCreate(); + propertyKey = parseAssignmentExpression(); + result = markerApply(marker, propertyKey); + expect(']'); + return result; + } + + return markerApply(marker, delegate.createIdentifier(token.value)); + } + + function parseObjectProperty() { + var token, key, id, param, computed, + marker = markerCreate(), returnType, typeParameters; + + token = lookahead; + computed = (token.value === '[' && token.type === Token.Punctuator); + + if (token.type === Token.Identifier || computed || matchAsync()) { + id = parseObjectPropertyKey(); + + if (match(':')) { + lex(); + + return markerApply( + marker, + delegate.createProperty( + 'init', + id, + parseAssignmentExpression(), + false, + false, + computed + ) + ); + } + + if (match('(') || match('<')) { + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + return markerApply( + marker, + delegate.createProperty( + 'init', + id, + parsePropertyMethodFunction({ + generator: false, + async: false, + typeParameters: typeParameters + }), + true, + false, + computed + ) + ); + } + + // Property Assignment: Getter and Setter. + + if (token.value === 'get') { + computed = (lookahead.value === '['); + key = parseObjectPropertyKey(); + + expect('('); + expect(')'); + if (match(':')) { + returnType = parseTypeAnnotation(); + } + + return markerApply( + marker, + delegate.createProperty( + 'get', + key, + parsePropertyFunction({ + generator: false, + async: false, + returnType: returnType + }), + false, + false, + computed + ) + ); + } + + if (token.value === 'set') { + computed = (lookahead.value === '['); + key = parseObjectPropertyKey(); + + expect('('); + token = lookahead; + param = [ parseTypeAnnotatableIdentifier() ]; + expect(')'); + if (match(':')) { + returnType = parseTypeAnnotation(); + } + + return markerApply( + marker, + delegate.createProperty( + 'set', + key, + parsePropertyFunction({ + params: param, + generator: false, + async: false, + name: token, + returnType: returnType + }), + false, + false, + computed + ) + ); + } + + if (token.value === 'async') { + computed = (lookahead.value === '['); + key = parseObjectPropertyKey(); + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + return markerApply( + marker, + delegate.createProperty( + 'init', + key, + parsePropertyMethodFunction({ + generator: false, + async: true, + typeParameters: typeParameters + }), + true, + false, + computed + ) + ); + } + + if (computed) { + // Computed properties can only be used with full notation. + throwUnexpected(lookahead); + } + + return markerApply( + marker, + delegate.createProperty('init', id, id, false, true, false) + ); + } + + if (token.type === Token.EOF || token.type === Token.Punctuator) { + if (!match('*')) { + throwUnexpected(token); + } + lex(); + + computed = (lookahead.type === Token.Punctuator && lookahead.value === '['); + + id = parseObjectPropertyKey(); + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + if (!match('(')) { + throwUnexpected(lex()); + } + + return markerApply(marker, delegate.createProperty( + 'init', + id, + parsePropertyMethodFunction({ + generator: true, + typeParameters: typeParameters + }), + true, + false, + computed + )); + } + key = parseObjectPropertyKey(); + if (match(':')) { + lex(); + return markerApply(marker, delegate.createProperty('init', key, parseAssignmentExpression(), false, false, false)); + } + if (match('(') || match('<')) { + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + return markerApply(marker, delegate.createProperty( + 'init', + key, + parsePropertyMethodFunction({ + generator: false, + typeParameters: typeParameters + }), + true, + false, + false + )); + } + throwUnexpected(lex()); + } + + function parseObjectSpreadProperty() { + var marker = markerCreate(); + expect('...'); + return markerApply(marker, delegate.createSpreadProperty(parseAssignmentExpression())); + } + + function getFieldName(key) { + var toString = String; + if (key.type === Syntax.Identifier) { + return key.name; + } + return toString(key.value); + } + + function parseObjectInitialiser() { + var properties = [], property, name, kind, storedKind, map = new StringMap(), + marker = markerCreate(), toString = String; + + expect('{'); + + while (!match('}')) { + if (match('...')) { + property = parseObjectSpreadProperty(); + } else { + property = parseObjectProperty(); + + if (property.key.type === Syntax.Identifier) { + name = property.key.name; + } else { + name = toString(property.key.value); + } + kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set; + + if (map.has(name)) { + storedKind = map.get(name); + if (storedKind === PropertyKind.Data) { + if (strict && kind === PropertyKind.Data) { + throwErrorTolerant({}, Messages.StrictDuplicateProperty); + } else if (kind !== PropertyKind.Data) { + throwErrorTolerant({}, Messages.AccessorDataProperty); + } + } else { + if (kind === PropertyKind.Data) { + throwErrorTolerant({}, Messages.AccessorDataProperty); + } else if (storedKind & kind) { + throwErrorTolerant({}, Messages.AccessorGetSet); + } + } + map.set(name, storedKind | kind); + } else { + map.set(name, kind); + } + } + + properties.push(property); + + if (!match('}')) { + expect(','); + } + } + + expect('}'); + + return markerApply(marker, delegate.createObjectExpression(properties)); + } + + function parseTemplateElement(option) { + var marker = markerCreate(), + token = scanTemplateElement(option); + if (strict && token.octal) { + throwError(token, Messages.StrictOctalLiteral); + } + return markerApply(marker, delegate.createTemplateElement({ raw: token.value.raw, cooked: token.value.cooked }, token.tail)); + } + + function parseTemplateLiteral() { + var quasi, quasis, expressions, marker = markerCreate(); + + quasi = parseTemplateElement({ head: true }); + quasis = [ quasi ]; + expressions = []; + + while (!quasi.tail) { + expressions.push(parseExpression()); + quasi = parseTemplateElement({ head: false }); + quasis.push(quasi); + } + + return markerApply(marker, delegate.createTemplateLiteral(quasis, expressions)); + } + + // 11.1.6 The Grouping Operator + + function parseGroupExpression() { + var expr, marker, typeAnnotation; + + expect('('); + + ++state.parenthesizedCount; + + marker = markerCreate(); + + expr = parseExpression(); + + if (match(':')) { + typeAnnotation = parseTypeAnnotation(); + expr = markerApply(marker, delegate.createTypeCast( + expr, + typeAnnotation + )); + } + + expect(')'); + + return expr; + } + + function matchAsyncFuncExprOrDecl() { + var token; + + if (matchAsync()) { + token = lookahead2(); + if (token.type === Token.Keyword && token.value === 'function') { + return true; + } + } + + return false; + } + + // 11.1 Primary Expressions + + function parsePrimaryExpression() { + var marker, type, token, expr; + + type = lookahead.type; + + if (type === Token.Identifier) { + marker = markerCreate(); + return markerApply(marker, delegate.createIdentifier(lex().value)); + } + + if (type === Token.StringLiteral || type === Token.NumericLiteral) { + if (strict && lookahead.octal) { + throwErrorTolerant(lookahead, Messages.StrictOctalLiteral); + } + marker = markerCreate(); + return markerApply(marker, delegate.createLiteral(lex())); + } + + if (type === Token.Keyword) { + if (matchKeyword('this')) { + marker = markerCreate(); + lex(); + return markerApply(marker, delegate.createThisExpression()); + } + + if (matchKeyword('function')) { + return parseFunctionExpression(); + } + + if (matchKeyword('class')) { + return parseClassExpression(); + } + + if (matchKeyword('super')) { + marker = markerCreate(); + lex(); + return markerApply(marker, delegate.createIdentifier('super')); + } + } + + if (type === Token.BooleanLiteral) { + marker = markerCreate(); + token = lex(); + token.value = (token.value === 'true'); + return markerApply(marker, delegate.createLiteral(token)); + } + + if (type === Token.NullLiteral) { + marker = markerCreate(); + token = lex(); + token.value = null; + return markerApply(marker, delegate.createLiteral(token)); + } + + if (match('[')) { + return parseArrayInitialiser(); + } + + if (match('{')) { + return parseObjectInitialiser(); + } + + if (match('(')) { + return parseGroupExpression(); + } + + if (match('/') || match('/=')) { + marker = markerCreate(); + expr = delegate.createLiteral(scanRegExp()); + peek(); + return markerApply(marker, expr); + } + + if (type === Token.Template) { + return parseTemplateLiteral(); + } + + if (match('<')) { + return parseJSXElement(); + } + + throwUnexpected(lex()); + } + + // 11.2 Left-Hand-Side Expressions + + function parseArguments() { + var args = [], arg; + + expect('('); + + if (!match(')')) { + while (index < length) { + arg = parseSpreadOrAssignmentExpression(); + args.push(arg); + + if (match(')')) { + break; + } else if (arg.type === Syntax.SpreadElement) { + throwError({}, Messages.ElementAfterSpreadElement); + } + + expect(','); + } + } + + expect(')'); + + return args; + } + + function parseSpreadOrAssignmentExpression() { + if (match('...')) { + var marker = markerCreate(); + lex(); + return markerApply(marker, delegate.createSpreadElement(parseAssignmentExpression())); + } + return parseAssignmentExpression(); + } + + function parseNonComputedProperty() { + var marker = markerCreate(), + token = lex(); + + if (!isIdentifierName(token)) { + throwUnexpected(token); + } + + return markerApply(marker, delegate.createIdentifier(token.value)); + } + + function parseNonComputedMember() { + expect('.'); + + return parseNonComputedProperty(); + } + + function parseComputedMember() { + var expr; + + expect('['); + + expr = parseExpression(); + + expect(']'); + + return expr; + } + + function parseNewExpression() { + var callee, args, marker = markerCreate(); + + expectKeyword('new'); + callee = parseLeftHandSideExpression(); + args = match('(') ? parseArguments() : []; + + return markerApply(marker, delegate.createNewExpression(callee, args)); + } + + function parseLeftHandSideExpressionAllowCall() { + var expr, args, marker = markerCreate(); + + expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression(); + + while (match('.') || match('[') || match('(') || lookahead.type === Token.Template) { + if (match('(')) { + args = parseArguments(); + expr = markerApply(marker, delegate.createCallExpression(expr, args)); + } else if (match('[')) { + expr = markerApply(marker, delegate.createMemberExpression('[', expr, parseComputedMember())); + } else if (match('.')) { + expr = markerApply(marker, delegate.createMemberExpression('.', expr, parseNonComputedMember())); + } else { + expr = markerApply(marker, delegate.createTaggedTemplateExpression(expr, parseTemplateLiteral())); + } + } + + return expr; + } + + function parseLeftHandSideExpression() { + var expr, marker = markerCreate(); + + expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression(); + + while (match('.') || match('[') || lookahead.type === Token.Template) { + if (match('[')) { + expr = markerApply(marker, delegate.createMemberExpression('[', expr, parseComputedMember())); + } else if (match('.')) { + expr = markerApply(marker, delegate.createMemberExpression('.', expr, parseNonComputedMember())); + } else { + expr = markerApply(marker, delegate.createTaggedTemplateExpression(expr, parseTemplateLiteral())); + } + } + + return expr; + } + + // 11.3 Postfix Expressions + + function parsePostfixExpression() { + var marker = markerCreate(), + expr = parseLeftHandSideExpressionAllowCall(), + token; + + if (lookahead.type !== Token.Punctuator) { + return expr; + } + + if ((match('++') || match('--')) && !peekLineTerminator()) { + // 11.3.1, 11.3.2 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + throwErrorTolerant({}, Messages.StrictLHSPostfix); + } + + if (!isLeftHandSide(expr)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + + token = lex(); + expr = markerApply(marker, delegate.createPostfixExpression(token.value, expr)); + } + + return expr; + } + + // 11.4 Unary Operators + + function parseUnaryExpression() { + var marker, token, expr; + + if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) { + return parsePostfixExpression(); + } + + if (match('++') || match('--')) { + marker = markerCreate(); + token = lex(); + expr = parseUnaryExpression(); + // 11.4.4, 11.4.5 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + throwErrorTolerant({}, Messages.StrictLHSPrefix); + } + + if (!isLeftHandSide(expr)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + + return markerApply(marker, delegate.createUnaryExpression(token.value, expr)); + } + + if (match('+') || match('-') || match('~') || match('!')) { + marker = markerCreate(); + token = lex(); + expr = parseUnaryExpression(); + return markerApply(marker, delegate.createUnaryExpression(token.value, expr)); + } + + if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { + marker = markerCreate(); + token = lex(); + expr = parseUnaryExpression(); + expr = markerApply(marker, delegate.createUnaryExpression(token.value, expr)); + if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) { + throwErrorTolerant({}, Messages.StrictDelete); + } + return expr; + } + + return parsePostfixExpression(); + } + + function binaryPrecedence(token, allowIn) { + var prec = 0; + + if (token.type !== Token.Punctuator && token.type !== Token.Keyword) { + return 0; + } + + switch (token.value) { + case '||': + prec = 1; + break; + + case '&&': + prec = 2; + break; + + case '|': + prec = 3; + break; + + case '^': + prec = 4; + break; + + case '&': + prec = 5; + break; + + case '==': + case '!=': + case '===': + case '!==': + prec = 6; + break; + + case '<': + case '>': + case '<=': + case '>=': + case 'instanceof': + prec = 7; + break; + + case 'in': + prec = allowIn ? 7 : 0; + break; + + case '<<': + case '>>': + case '>>>': + prec = 8; + break; + + case '+': + case '-': + prec = 9; + break; + + case '*': + case '/': + case '%': + prec = 11; + break; + + default: + break; + } + + return prec; + } + + // 11.5 Multiplicative Operators + // 11.6 Additive Operators + // 11.7 Bitwise Shift Operators + // 11.8 Relational Operators + // 11.9 Equality Operators + // 11.10 Binary Bitwise Operators + // 11.11 Binary Logical Operators + + function parseBinaryExpression() { + var expr, token, prec, previousAllowIn, stack, right, operator, left, i, + marker, markers; + + previousAllowIn = state.allowIn; + state.allowIn = true; + + marker = markerCreate(); + left = parseUnaryExpression(); + + token = lookahead; + prec = binaryPrecedence(token, previousAllowIn); + if (prec === 0) { + return left; + } + token.prec = prec; + lex(); + + markers = [marker, markerCreate()]; + right = parseUnaryExpression(); + + stack = [left, token, right]; + + while ((prec = binaryPrecedence(lookahead, previousAllowIn)) > 0) { + + // Reduce: make a binary expression from the three topmost entries. + while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { + right = stack.pop(); + operator = stack.pop().value; + left = stack.pop(); + expr = delegate.createBinaryExpression(operator, left, right); + markers.pop(); + marker = markers.pop(); + markerApply(marker, expr); + stack.push(expr); + markers.push(marker); + } + + // Shift. + token = lex(); + token.prec = prec; + stack.push(token); + markers.push(markerCreate()); + expr = parseUnaryExpression(); + stack.push(expr); + } + + state.allowIn = previousAllowIn; + + // Final reduce to clean-up the stack. + i = stack.length - 1; + expr = stack[i]; + markers.pop(); + while (i > 1) { + expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr); + i -= 2; + marker = markers.pop(); + markerApply(marker, expr); + } + + return expr; + } + + + // 11.12 Conditional Operator + + function parseConditionalExpression() { + var expr, previousAllowIn, consequent, alternate, marker = markerCreate(); + expr = parseBinaryExpression(); + + if (match('?')) { + lex(); + previousAllowIn = state.allowIn; + state.allowIn = true; + consequent = parseAssignmentExpression(); + state.allowIn = previousAllowIn; + expect(':'); + alternate = parseAssignmentExpression(); + + expr = markerApply(marker, delegate.createConditionalExpression(expr, consequent, alternate)); + } + + return expr; + } + + // 11.13 Assignment Operators + + // 12.14.5 AssignmentPattern + + function reinterpretAsAssignmentBindingPattern(expr) { + var i, len, property, element; + + if (expr.type === Syntax.ObjectExpression) { + expr.type = Syntax.ObjectPattern; + for (i = 0, len = expr.properties.length; i < len; i += 1) { + property = expr.properties[i]; + if (property.type === Syntax.SpreadProperty) { + if (i < len - 1) { + throwError({}, Messages.PropertyAfterSpreadProperty); + } + reinterpretAsAssignmentBindingPattern(property.argument); + } else { + if (property.kind !== 'init') { + throwError({}, Messages.InvalidLHSInAssignment); + } + reinterpretAsAssignmentBindingPattern(property.value); + } + } + } else if (expr.type === Syntax.ArrayExpression) { + expr.type = Syntax.ArrayPattern; + for (i = 0, len = expr.elements.length; i < len; i += 1) { + element = expr.elements[i]; + /* istanbul ignore else */ + if (element) { + reinterpretAsAssignmentBindingPattern(element); + } + } + } else if (expr.type === Syntax.Identifier) { + if (isRestrictedWord(expr.name)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + } else if (expr.type === Syntax.SpreadElement) { + reinterpretAsAssignmentBindingPattern(expr.argument); + if (expr.argument.type === Syntax.ObjectPattern) { + throwError({}, Messages.ObjectPatternAsSpread); + } + } else { + /* istanbul ignore else */ + if (expr.type !== Syntax.MemberExpression && expr.type !== Syntax.CallExpression && expr.type !== Syntax.NewExpression) { + throwError({}, Messages.InvalidLHSInAssignment); + } + } + } + + // 13.2.3 BindingPattern + + function reinterpretAsDestructuredParameter(options, expr) { + var i, len, property, element; + + if (expr.type === Syntax.ObjectExpression) { + expr.type = Syntax.ObjectPattern; + for (i = 0, len = expr.properties.length; i < len; i += 1) { + property = expr.properties[i]; + if (property.type === Syntax.SpreadProperty) { + if (i < len - 1) { + throwError({}, Messages.PropertyAfterSpreadProperty); + } + reinterpretAsDestructuredParameter(options, property.argument); + } else { + if (property.kind !== 'init') { + throwError({}, Messages.InvalidLHSInFormalsList); + } + reinterpretAsDestructuredParameter(options, property.value); + } + } + } else if (expr.type === Syntax.ArrayExpression) { + expr.type = Syntax.ArrayPattern; + for (i = 0, len = expr.elements.length; i < len; i += 1) { + element = expr.elements[i]; + if (element) { + reinterpretAsDestructuredParameter(options, element); + } + } + } else if (expr.type === Syntax.Identifier) { + validateParam(options, expr, expr.name); + } else if (expr.type === Syntax.SpreadElement) { + // BindingRestElement only allows BindingIdentifier + if (expr.argument.type !== Syntax.Identifier) { + throwError({}, Messages.InvalidLHSInFormalsList); + } + validateParam(options, expr.argument, expr.argument.name); + } else { + throwError({}, Messages.InvalidLHSInFormalsList); + } + } + + function reinterpretAsCoverFormalsList(expressions) { + var i, len, param, params, defaults, defaultCount, options, rest; + + params = []; + defaults = []; + defaultCount = 0; + rest = null; + options = { + paramSet: new StringMap() + }; + + for (i = 0, len = expressions.length; i < len; i += 1) { + param = expressions[i]; + if (param.type === Syntax.Identifier) { + params.push(param); + defaults.push(null); + validateParam(options, param, param.name); + } else if (param.type === Syntax.ObjectExpression || param.type === Syntax.ArrayExpression) { + reinterpretAsDestructuredParameter(options, param); + params.push(param); + defaults.push(null); + } else if (param.type === Syntax.SpreadElement) { + assert(i === len - 1, 'It is guaranteed that SpreadElement is last element by parseExpression'); + if (param.argument.type !== Syntax.Identifier) { + throwError({}, Messages.InvalidLHSInFormalsList); + } + reinterpretAsDestructuredParameter(options, param.argument); + rest = param.argument; + } else if (param.type === Syntax.AssignmentExpression) { + params.push(param.left); + defaults.push(param.right); + ++defaultCount; + validateParam(options, param.left, param.left.name); + } else { + return null; + } + } + + if (options.message === Messages.StrictParamDupe) { + throwError( + strict ? options.stricted : options.firstRestricted, + options.message + ); + } + + if (defaultCount === 0) { + defaults = []; + } + + return { + params: params, + defaults: defaults, + rest: rest, + stricted: options.stricted, + firstRestricted: options.firstRestricted, + message: options.message + }; + } + + function parseArrowFunctionExpression(options, marker) { + var previousStrict, previousYieldAllowed, previousAwaitAllowed, body; + + expect('=>'); + + previousStrict = strict; + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = false; + previousAwaitAllowed = state.awaitAllowed; + state.awaitAllowed = !!options.async; + body = parseConciseBody(); + + if (strict && options.firstRestricted) { + throwError(options.firstRestricted, options.message); + } + if (strict && options.stricted) { + throwErrorTolerant(options.stricted, options.message); + } + + strict = previousStrict; + state.yieldAllowed = previousYieldAllowed; + state.awaitAllowed = previousAwaitAllowed; + + return markerApply(marker, delegate.createArrowFunctionExpression( + options.params, + options.defaults, + body, + options.rest, + body.type !== Syntax.BlockStatement, + !!options.async + )); + } + + function parseAssignmentExpression() { + var marker, expr, token, params, oldParenthesizedCount, + startsWithParen = false, backtrackToken = lookahead, + possiblyAsync = false; + + if (matchYield()) { + return parseYieldExpression(); + } + + if (matchAwait()) { + return parseAwaitExpression(); + } + + oldParenthesizedCount = state.parenthesizedCount; + + marker = markerCreate(); + + if (matchAsyncFuncExprOrDecl()) { + return parseFunctionExpression(); + } + + if (matchAsync()) { + // We can't be completely sure that this 'async' token is + // actually a contextual keyword modifying a function + // expression, so we might have to un-lex() it later by + // calling rewind(backtrackToken). + possiblyAsync = true; + lex(); + } + + if (match('(')) { + token = lookahead2(); + if ((token.type === Token.Punctuator && token.value === ')') || token.value === '...') { + params = parseParams(); + if (!match('=>')) { + throwUnexpected(lex()); + } + params.async = possiblyAsync; + return parseArrowFunctionExpression(params, marker); + } + startsWithParen = true; + } + + token = lookahead; + + // If the 'async' keyword is not followed by a '(' character or an + // identifier, then it can't be an arrow function modifier, and we + // should interpret it as a normal identifer. + if (possiblyAsync && !match('(') && token.type !== Token.Identifier) { + possiblyAsync = false; + rewind(backtrackToken); + } + + expr = parseConditionalExpression(); + + if (match('=>') && + (state.parenthesizedCount === oldParenthesizedCount || + state.parenthesizedCount === (oldParenthesizedCount + 1))) { + if (expr.type === Syntax.Identifier) { + params = reinterpretAsCoverFormalsList([ expr ]); + } else if (expr.type === Syntax.AssignmentExpression || + expr.type === Syntax.ArrayExpression || + expr.type === Syntax.ObjectExpression) { + if (!startsWithParen) { + throwUnexpected(lex()); + } + params = reinterpretAsCoverFormalsList([ expr ]); + } else if (expr.type === Syntax.SequenceExpression) { + params = reinterpretAsCoverFormalsList(expr.expressions); + } + if (params) { + params.async = possiblyAsync; + return parseArrowFunctionExpression(params, marker); + } + } + + // If we haven't returned by now, then the 'async' keyword was not + // a function modifier, and we should rewind and interpret it as a + // normal identifier. + if (possiblyAsync) { + possiblyAsync = false; + rewind(backtrackToken); + expr = parseConditionalExpression(); + } + + if (matchAssign()) { + // 11.13.1 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + throwErrorTolerant(token, Messages.StrictLHSAssignment); + } + + // ES.next draf 11.13 Runtime Semantics step 1 + if (match('=') && (expr.type === Syntax.ObjectExpression || expr.type === Syntax.ArrayExpression)) { + reinterpretAsAssignmentBindingPattern(expr); + } else if (!isLeftHandSide(expr)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + + expr = markerApply(marker, delegate.createAssignmentExpression(lex().value, expr, parseAssignmentExpression())); + } + + return expr; + } + + // 11.14 Comma Operator + + function parseExpression() { + var marker, expr, expressions, sequence, spreadFound; + + marker = markerCreate(); + expr = parseAssignmentExpression(); + expressions = [ expr ]; + + if (match(',')) { + while (index < length) { + if (!match(',')) { + break; + } + + lex(); + expr = parseSpreadOrAssignmentExpression(); + expressions.push(expr); + + if (expr.type === Syntax.SpreadElement) { + spreadFound = true; + if (!match(')')) { + throwError({}, Messages.ElementAfterSpreadElement); + } + break; + } + } + + sequence = markerApply(marker, delegate.createSequenceExpression(expressions)); + } + + if (spreadFound && lookahead2().value !== '=>') { + throwError({}, Messages.IllegalSpread); + } + + return sequence || expr; + } + + // 12.1 Block + + function parseStatementList() { + var list = [], + statement; + + while (index < length) { + if (match('}')) { + break; + } + statement = parseSourceElement(); + if (typeof statement === 'undefined') { + break; + } + list.push(statement); + } + + return list; + } + + function parseBlock() { + var block, marker = markerCreate(); + + expect('{'); + + block = parseStatementList(); + + expect('}'); + + return markerApply(marker, delegate.createBlockStatement(block)); + } + + // 12.2 Variable Statement + + function parseTypeParameterDeclaration() { + var marker = markerCreate(), paramTypes = []; + + expect('<'); + while (!match('>')) { + paramTypes.push(parseTypeAnnotatableIdentifier()); + if (!match('>')) { + expect(','); + } + } + expect('>'); + + return markerApply(marker, delegate.createTypeParameterDeclaration( + paramTypes + )); + } + + function parseTypeParameterInstantiation() { + var marker = markerCreate(), oldInType = state.inType, paramTypes = []; + + state.inType = true; + + expect('<'); + while (!match('>')) { + paramTypes.push(parseType()); + if (!match('>')) { + expect(','); + } + } + expect('>'); + + state.inType = oldInType; + + return markerApply(marker, delegate.createTypeParameterInstantiation( + paramTypes + )); + } + + function parseObjectTypeIndexer(marker, isStatic) { + var id, key, value; + + expect('['); + id = parseObjectPropertyKey(); + expect(':'); + key = parseType(); + expect(']'); + expect(':'); + value = parseType(); + + return markerApply(marker, delegate.createObjectTypeIndexer( + id, + key, + value, + isStatic + )); + } + + function parseObjectTypeMethodish(marker) { + var params = [], rest = null, returnType, typeParameters = null; + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + expect('('); + while (lookahead.type === Token.Identifier) { + params.push(parseFunctionTypeParam()); + if (!match(')')) { + expect(','); + } + } + + if (match('...')) { + lex(); + rest = parseFunctionTypeParam(); + } + expect(')'); + expect(':'); + returnType = parseType(); + + return markerApply(marker, delegate.createFunctionTypeAnnotation( + params, + returnType, + rest, + typeParameters + )); + } + + function parseObjectTypeMethod(marker, isStatic, key) { + var optional = false, value; + value = parseObjectTypeMethodish(marker); + + return markerApply(marker, delegate.createObjectTypeProperty( + key, + value, + optional, + isStatic + )); + } + + function parseObjectTypeCallProperty(marker, isStatic) { + var valueMarker = markerCreate(); + return markerApply(marker, delegate.createObjectTypeCallProperty( + parseObjectTypeMethodish(valueMarker), + isStatic + )); + } + + function parseObjectType(allowStatic) { + var callProperties = [], indexers = [], marker, optional = false, + properties = [], propertyKey, propertyTypeAnnotation, + token, isStatic, matchStatic; + + expect('{'); + + while (!match('}')) { + marker = markerCreate(); + matchStatic = + strict + ? matchKeyword('static') + : matchContextualKeyword('static'); + + if (allowStatic && matchStatic) { + token = lex(); + isStatic = true; + } + + if (match('[')) { + indexers.push(parseObjectTypeIndexer(marker, isStatic)); + } else if (match('(') || match('<')) { + callProperties.push(parseObjectTypeCallProperty(marker, allowStatic)); + } else { + if (isStatic && match(':')) { + propertyKey = markerApply(marker, delegate.createIdentifier(token)); + throwErrorTolerant(token, Messages.StrictReservedWord); + } else { + propertyKey = parseObjectPropertyKey(); + } + if (match('<') || match('(')) { + // This is a method property + properties.push(parseObjectTypeMethod(marker, isStatic, propertyKey)); + } else { + if (match('?')) { + lex(); + optional = true; + } + expect(':'); + propertyTypeAnnotation = parseType(); + properties.push(markerApply(marker, delegate.createObjectTypeProperty( + propertyKey, + propertyTypeAnnotation, + optional, + isStatic + ))); + } + } + + if (match(';')) { + lex(); + } else if (!match('}')) { + throwUnexpected(lookahead); + } + } + + expect('}'); + + return delegate.createObjectTypeAnnotation( + properties, + indexers, + callProperties + ); + } + + function parseGenericType() { + var marker = markerCreate(), + typeParameters = null, typeIdentifier; + + typeIdentifier = parseVariableIdentifier(); + + while (match('.')) { + expect('.'); + typeIdentifier = markerApply(marker, delegate.createQualifiedTypeIdentifier( + typeIdentifier, + parseVariableIdentifier() + )); + } + + if (match('<')) { + typeParameters = parseTypeParameterInstantiation(); + } + + return markerApply(marker, delegate.createGenericTypeAnnotation( + typeIdentifier, + typeParameters + )); + } + + function parseVoidType() { + var marker = markerCreate(); + expectKeyword('void'); + return markerApply(marker, delegate.createVoidTypeAnnotation()); + } + + function parseTypeofType() { + var argument, marker = markerCreate(); + expectKeyword('typeof'); + argument = parsePrimaryType(); + return markerApply(marker, delegate.createTypeofTypeAnnotation( + argument + )); + } + + function parseTupleType() { + var marker = markerCreate(), types = []; + expect('['); + // We allow trailing commas + while (index < length && !match(']')) { + types.push(parseType()); + if (match(']')) { + break; + } + expect(','); + } + expect(']'); + return markerApply(marker, delegate.createTupleTypeAnnotation( + types + )); + } + + function parseFunctionTypeParam() { + var marker = markerCreate(), name, optional = false, typeAnnotation; + name = parseVariableIdentifier(); + if (match('?')) { + lex(); + optional = true; + } + expect(':'); + typeAnnotation = parseType(); + return markerApply(marker, delegate.createFunctionTypeParam( + name, + typeAnnotation, + optional + )); + } + + function parseFunctionTypeParams() { + var ret = { params: [], rest: null }; + while (lookahead.type === Token.Identifier) { + ret.params.push(parseFunctionTypeParam()); + if (!match(')')) { + expect(','); + } + } + + if (match('...')) { + lex(); + ret.rest = parseFunctionTypeParam(); + } + return ret; + } + + // The parsing of types roughly parallels the parsing of expressions, and + // primary types are kind of like primary expressions...they're the + // primitives with which other types are constructed. + function parsePrimaryType() { + var params = null, returnType = null, + marker = markerCreate(), rest = null, tmp, + typeParameters, token, type, isGroupedType = false; + + switch (lookahead.type) { + case Token.Identifier: + switch (lookahead.value) { + case 'any': + lex(); + return markerApply(marker, delegate.createAnyTypeAnnotation()); + case 'bool': // fallthrough + case 'boolean': + lex(); + return markerApply(marker, delegate.createBooleanTypeAnnotation()); + case 'number': + lex(); + return markerApply(marker, delegate.createNumberTypeAnnotation()); + case 'string': + lex(); + return markerApply(marker, delegate.createStringTypeAnnotation()); + } + return markerApply(marker, parseGenericType()); + case Token.Punctuator: + switch (lookahead.value) { + case '{': + return markerApply(marker, parseObjectType()); + case '[': + return parseTupleType(); + case '<': + typeParameters = parseTypeParameterDeclaration(); + expect('('); + tmp = parseFunctionTypeParams(); + params = tmp.params; + rest = tmp.rest; + expect(')'); + + expect('=>'); + + returnType = parseType(); + + return markerApply(marker, delegate.createFunctionTypeAnnotation( + params, + returnType, + rest, + typeParameters + )); + case '(': + lex(); + // Check to see if this is actually a grouped type + if (!match(')') && !match('...')) { + if (lookahead.type === Token.Identifier) { + token = lookahead2(); + isGroupedType = token.value !== '?' && token.value !== ':'; + } else { + isGroupedType = true; + } + } + + if (isGroupedType) { + type = parseType(); + expect(')'); + + // If we see a => next then someone was probably confused about + // function types, so we can provide a better error message + if (match('=>')) { + throwError({}, Messages.ConfusedAboutFunctionType); + } + + return type; + } + + tmp = parseFunctionTypeParams(); + params = tmp.params; + rest = tmp.rest; + + expect(')'); + + expect('=>'); + + returnType = parseType(); + + return markerApply(marker, delegate.createFunctionTypeAnnotation( + params, + returnType, + rest, + null /* typeParameters */ + )); + } + break; + case Token.Keyword: + switch (lookahead.value) { + case 'void': + return markerApply(marker, parseVoidType()); + case 'typeof': + return markerApply(marker, parseTypeofType()); + } + break; + case Token.StringLiteral: + token = lex(); + if (token.octal) { + throwError(token, Messages.StrictOctalLiteral); + } + return markerApply(marker, delegate.createStringLiteralTypeAnnotation( + token + )); + } + + throwUnexpected(lookahead); + } + + function parsePostfixType() { + var marker = markerCreate(), t = parsePrimaryType(); + if (match('[')) { + expect('['); + expect(']'); + return markerApply(marker, delegate.createArrayTypeAnnotation(t)); + } + return t; + } + + function parsePrefixType() { + var marker = markerCreate(); + if (match('?')) { + lex(); + return markerApply(marker, delegate.createNullableTypeAnnotation( + parsePrefixType() + )); + } + return parsePostfixType(); + } + + + function parseIntersectionType() { + var marker = markerCreate(), type, types; + type = parsePrefixType(); + types = [type]; + while (match('&')) { + lex(); + types.push(parsePrefixType()); + } + + return types.length === 1 ? + type : + markerApply(marker, delegate.createIntersectionTypeAnnotation( + types + )); + } + + function parseUnionType() { + var marker = markerCreate(), type, types; + type = parseIntersectionType(); + types = [type]; + while (match('|')) { + lex(); + types.push(parseIntersectionType()); + } + return types.length === 1 ? + type : + markerApply(marker, delegate.createUnionTypeAnnotation( + types + )); + } + + function parseType() { + var oldInType = state.inType, type; + state.inType = true; + + type = parseUnionType(); + + state.inType = oldInType; + return type; + } + + function parseTypeAnnotation() { + var marker = markerCreate(), type; + + expect(':'); + type = parseType(); + + return markerApply(marker, delegate.createTypeAnnotation(type)); + } + + function parseVariableIdentifier() { + var marker = markerCreate(), + token = lex(); + + if (token.type !== Token.Identifier) { + throwUnexpected(token); + } + + return markerApply(marker, delegate.createIdentifier(token.value)); + } + + function parseTypeAnnotatableIdentifier(requireTypeAnnotation, canBeOptionalParam) { + var marker = markerCreate(), + ident = parseVariableIdentifier(), + isOptionalParam = false; + + if (canBeOptionalParam && match('?')) { + expect('?'); + isOptionalParam = true; + } + + if (requireTypeAnnotation || match(':')) { + ident.typeAnnotation = parseTypeAnnotation(); + ident = markerApply(marker, ident); + } + + if (isOptionalParam) { + ident.optional = true; + ident = markerApply(marker, ident); + } + + return ident; + } + + function parseVariableDeclaration(kind) { + var id, + marker = markerCreate(), + init = null, + typeAnnotationMarker = markerCreate(); + if (match('{')) { + id = parseObjectInitialiser(); + reinterpretAsAssignmentBindingPattern(id); + if (match(':')) { + id.typeAnnotation = parseTypeAnnotation(); + markerApply(typeAnnotationMarker, id); + } + } else if (match('[')) { + id = parseArrayInitialiser(); + reinterpretAsAssignmentBindingPattern(id); + if (match(':')) { + id.typeAnnotation = parseTypeAnnotation(); + markerApply(typeAnnotationMarker, id); + } + } else { + /* istanbul ignore next */ + id = state.allowKeyword ? parseNonComputedProperty() : parseTypeAnnotatableIdentifier(); + // 12.2.1 + if (strict && isRestrictedWord(id.name)) { + throwErrorTolerant({}, Messages.StrictVarName); + } + } + + if (kind === 'const') { + if (!match('=')) { + throwError({}, Messages.NoUninitializedConst); + } + expect('='); + init = parseAssignmentExpression(); + } else if (match('=')) { + lex(); + init = parseAssignmentExpression(); + } + + return markerApply(marker, delegate.createVariableDeclarator(id, init)); + } + + function parseVariableDeclarationList(kind) { + var list = []; + + do { + list.push(parseVariableDeclaration(kind)); + if (!match(',')) { + break; + } + lex(); + } while (index < length); + + return list; + } + + function parseVariableStatement() { + var declarations, marker = markerCreate(); + + expectKeyword('var'); + + declarations = parseVariableDeclarationList(); + + consumeSemicolon(); + + return markerApply(marker, delegate.createVariableDeclaration(declarations, 'var')); + } + + // kind may be `const` or `let` + // Both are experimental and not in the specification yet. + // see http://wiki.ecmascript.org/doku.php?id=harmony:const + // and http://wiki.ecmascript.org/doku.php?id=harmony:let + function parseConstLetDeclaration(kind) { + var declarations, marker = markerCreate(); + + expectKeyword(kind); + + declarations = parseVariableDeclarationList(kind); + + consumeSemicolon(); + + return markerApply(marker, delegate.createVariableDeclaration(declarations, kind)); + } + + // people.mozilla.org/~jorendorff/es6-draft.html + + function parseModuleSpecifier() { + var marker = markerCreate(), + specifier; + + if (lookahead.type !== Token.StringLiteral) { + throwError({}, Messages.InvalidModuleSpecifier); + } + specifier = delegate.createModuleSpecifier(lookahead); + lex(); + return markerApply(marker, specifier); + } + + function parseExportBatchSpecifier() { + var marker = markerCreate(); + expect('*'); + return markerApply(marker, delegate.createExportBatchSpecifier()); + } + + function parseExportSpecifier() { + var id, name = null, marker = markerCreate(), from; + if (matchKeyword('default')) { + lex(); + id = markerApply(marker, delegate.createIdentifier('default')); + // export {default} from "something"; + } else { + id = parseVariableIdentifier(); + } + if (matchContextualKeyword('as')) { + lex(); + name = parseNonComputedProperty(); + } + + return markerApply(marker, delegate.createExportSpecifier(id, name)); + } + + function parseExportDeclaration() { + var declaration = null, + possibleIdentifierToken, sourceElement, + isExportFromIdentifier, + src = null, specifiers = [], + marker = markerCreate(); + + expectKeyword('export'); + + if (matchKeyword('default')) { + // covers: + // export default ... + lex(); + if (matchKeyword('function') || matchKeyword('class')) { + possibleIdentifierToken = lookahead2(); + if (isIdentifierName(possibleIdentifierToken)) { + // covers: + // export default function foo () {} + // export default class foo {} + sourceElement = parseSourceElement(); + return markerApply(marker, delegate.createExportDeclaration(true, sourceElement, [sourceElement.id], null)); + } + // covers: + // export default function () {} + // export default class {} + switch (lookahead.value) { + case 'class': + return markerApply(marker, delegate.createExportDeclaration(true, parseClassExpression(), [], null)); + case 'function': + return markerApply(marker, delegate.createExportDeclaration(true, parseFunctionExpression(), [], null)); + } + } + + if (matchContextualKeyword('from')) { + throwError({}, Messages.UnexpectedToken, lookahead.value); + } + + // covers: + // export default {}; + // export default []; + if (match('{')) { + declaration = parseObjectInitialiser(); + } else if (match('[')) { + declaration = parseArrayInitialiser(); + } else { + declaration = parseAssignmentExpression(); + } + consumeSemicolon(); + return markerApply(marker, delegate.createExportDeclaration(true, declaration, [], null)); + } + + // non-default export + if (lookahead.type === Token.Keyword || matchContextualKeyword('type')) { + // covers: + // export var f = 1; + switch (lookahead.value) { + case 'type': + case 'let': + case 'const': + case 'var': + case 'class': + case 'function': + return markerApply(marker, delegate.createExportDeclaration(false, parseSourceElement(), specifiers, null)); + } + } + + if (match('*')) { + // covers: + // export * from "foo"; + specifiers.push(parseExportBatchSpecifier()); + + if (!matchContextualKeyword('from')) { + throwError({}, lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + + return markerApply(marker, delegate.createExportDeclaration(false, null, specifiers, src)); + } + + expect('{'); + if (!match('}')) { + do { + isExportFromIdentifier = isExportFromIdentifier || matchKeyword('default'); + specifiers.push(parseExportSpecifier()); + } while (match(',') && lex()); + } + expect('}'); + + if (matchContextualKeyword('from')) { + // covering: + // export {default} from "foo"; + // export {foo} from "foo"; + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + } else if (isExportFromIdentifier) { + // covering: + // export {default}; // missing fromClause + throwError({}, lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } else { + // cover + // export {foo}; + consumeSemicolon(); + } + return markerApply(marker, delegate.createExportDeclaration(false, declaration, specifiers, src)); + } + + + function parseImportSpecifier() { + // import {} ...; + var id, name = null, marker = markerCreate(); + + id = parseNonComputedProperty(); + if (matchContextualKeyword('as')) { + lex(); + name = parseVariableIdentifier(); + } + + return markerApply(marker, delegate.createImportSpecifier(id, name)); + } + + function parseNamedImports() { + var specifiers = []; + // {foo, bar as bas} + expect('{'); + if (!match('}')) { + do { + specifiers.push(parseImportSpecifier()); + } while (match(',') && lex()); + } + expect('}'); + return specifiers; + } + + function parseImportDefaultSpecifier() { + // import ...; + var id, marker = markerCreate(); + + id = parseNonComputedProperty(); + + return markerApply(marker, delegate.createImportDefaultSpecifier(id)); + } + + function parseImportNamespaceSpecifier() { + // import <* as foo> ...; + var id, marker = markerCreate(); + + expect('*'); + if (!matchContextualKeyword('as')) { + throwError({}, Messages.NoAsAfterImportNamespace); + } + lex(); + id = parseNonComputedProperty(); + + return markerApply(marker, delegate.createImportNamespaceSpecifier(id)); + } + + function parseImportDeclaration() { + var specifiers, src, marker = markerCreate(), isType = false, token2; + + expectKeyword('import'); + + if (matchContextualKeyword('type')) { + token2 = lookahead2(); + if ((token2.type === Token.Identifier && token2.value !== 'from') || + (token2.type === Token.Punctuator && + (token2.value === '{' || token2.value === '*'))) { + isType = true; + lex(); + } + } + + specifiers = []; + + if (lookahead.type === Token.StringLiteral) { + // covers: + // import "foo"; + src = parseModuleSpecifier(); + consumeSemicolon(); + return markerApply(marker, delegate.createImportDeclaration(specifiers, src, isType)); + } + + if (!matchKeyword('default') && isIdentifierName(lookahead)) { + // covers: + // import foo + // import foo, ... + specifiers.push(parseImportDefaultSpecifier()); + if (match(',')) { + lex(); + } + } + if (match('*')) { + // covers: + // import foo, * as foo + // import * as foo + specifiers.push(parseImportNamespaceSpecifier()); + } else if (match('{')) { + // covers: + // import foo, {bar} + // import {bar} + specifiers = specifiers.concat(parseNamedImports()); + } + + if (!matchContextualKeyword('from')) { + throwError({}, lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + + return markerApply(marker, delegate.createImportDeclaration(specifiers, src, isType)); + } + + // 12.3 Empty Statement + + function parseEmptyStatement() { + var marker = markerCreate(); + expect(';'); + return markerApply(marker, delegate.createEmptyStatement()); + } + + // 12.4 Expression Statement + + function parseExpressionStatement() { + var marker = markerCreate(), expr = parseExpression(); + consumeSemicolon(); + return markerApply(marker, delegate.createExpressionStatement(expr)); + } + + // 12.5 If statement + + function parseIfStatement() { + var test, consequent, alternate, marker = markerCreate(); + + expectKeyword('if'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + consequent = parseStatement(); + + if (matchKeyword('else')) { + lex(); + alternate = parseStatement(); + } else { + alternate = null; + } + + return markerApply(marker, delegate.createIfStatement(test, consequent, alternate)); + } + + // 12.6 Iteration Statements + + function parseDoWhileStatement() { + var body, test, oldInIteration, marker = markerCreate(); + + expectKeyword('do'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + body = parseStatement(); + + state.inIteration = oldInIteration; + + expectKeyword('while'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + if (match(';')) { + lex(); + } + + return markerApply(marker, delegate.createDoWhileStatement(body, test)); + } + + function parseWhileStatement() { + var test, body, oldInIteration, marker = markerCreate(); + + expectKeyword('while'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + body = parseStatement(); + + state.inIteration = oldInIteration; + + return markerApply(marker, delegate.createWhileStatement(test, body)); + } + + function parseForVariableDeclaration() { + var marker = markerCreate(), + token = lex(), + declarations = parseVariableDeclarationList(); + + return markerApply(marker, delegate.createVariableDeclaration(declarations, token.value)); + } + + function parseForStatement(opts) { + var init, test, update, left, right, body, operator, oldInIteration, + marker = markerCreate(); + init = test = update = null; + expectKeyword('for'); + + // http://wiki.ecmascript.org/doku.php?id=proposals:iterators_and_generators&s=each + if (matchContextualKeyword('each')) { + throwError({}, Messages.EachNotAllowed); + } + + expect('('); + + if (match(';')) { + lex(); + } else { + if (matchKeyword('var') || matchKeyword('let') || matchKeyword('const')) { + state.allowIn = false; + init = parseForVariableDeclaration(); + state.allowIn = true; + + if (init.declarations.length === 1) { + if (matchKeyword('in') || matchContextualKeyword('of')) { + operator = lookahead; + if (!((operator.value === 'in' || init.kind !== 'var') && init.declarations[0].init)) { + lex(); + left = init; + right = parseExpression(); + init = null; + } + } + } + } else { + state.allowIn = false; + init = parseExpression(); + state.allowIn = true; + + if (matchContextualKeyword('of')) { + operator = lex(); + left = init; + right = parseExpression(); + init = null; + } else if (matchKeyword('in')) { + // LeftHandSideExpression + if (!isAssignableLeftHandSide(init)) { + throwError({}, Messages.InvalidLHSInForIn); + } + operator = lex(); + left = init; + right = parseExpression(); + init = null; + } + } + + if (typeof left === 'undefined') { + expect(';'); + } + } + + if (typeof left === 'undefined') { + + if (!match(';')) { + test = parseExpression(); + } + expect(';'); + + if (!match(')')) { + update = parseExpression(); + } + } + + expect(')'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + if (!(opts !== undefined && opts.ignoreBody)) { + body = parseStatement(); + } + + state.inIteration = oldInIteration; + + if (typeof left === 'undefined') { + return markerApply(marker, delegate.createForStatement(init, test, update, body)); + } + + if (operator.value === 'in') { + return markerApply(marker, delegate.createForInStatement(left, right, body)); + } + return markerApply(marker, delegate.createForOfStatement(left, right, body)); + } + + // 12.7 The continue statement + + function parseContinueStatement() { + var label = null, marker = markerCreate(); + + expectKeyword('continue'); + + // Optimize the most common form: 'continue;'. + if (source.charCodeAt(index) === 59) { + lex(); + + if (!state.inIteration) { + throwError({}, Messages.IllegalContinue); + } + + return markerApply(marker, delegate.createContinueStatement(null)); + } + + if (peekLineTerminator()) { + if (!state.inIteration) { + throwError({}, Messages.IllegalContinue); + } + + return markerApply(marker, delegate.createContinueStatement(null)); + } + + if (lookahead.type === Token.Identifier) { + label = parseVariableIdentifier(); + + if (!state.labelSet.has(label.name)) { + throwError({}, Messages.UnknownLabel, label.name); + } + } + + consumeSemicolon(); + + if (label === null && !state.inIteration) { + throwError({}, Messages.IllegalContinue); + } + + return markerApply(marker, delegate.createContinueStatement(label)); + } + + // 12.8 The break statement + + function parseBreakStatement() { + var label = null, marker = markerCreate(); + + expectKeyword('break'); + + // Catch the very common case first: immediately a semicolon (char #59). + if (source.charCodeAt(index) === 59) { + lex(); + + if (!(state.inIteration || state.inSwitch)) { + throwError({}, Messages.IllegalBreak); + } + + return markerApply(marker, delegate.createBreakStatement(null)); + } + + if (peekLineTerminator()) { + if (!(state.inIteration || state.inSwitch)) { + throwError({}, Messages.IllegalBreak); + } + + return markerApply(marker, delegate.createBreakStatement(null)); + } + + if (lookahead.type === Token.Identifier) { + label = parseVariableIdentifier(); + + if (!state.labelSet.has(label.name)) { + throwError({}, Messages.UnknownLabel, label.name); + } + } + + consumeSemicolon(); + + if (label === null && !(state.inIteration || state.inSwitch)) { + throwError({}, Messages.IllegalBreak); + } + + return markerApply(marker, delegate.createBreakStatement(label)); + } + + // 12.9 The return statement + + function parseReturnStatement() { + var argument = null, marker = markerCreate(); + + expectKeyword('return'); + + if (!state.inFunctionBody) { + throwErrorTolerant({}, Messages.IllegalReturn); + } + + // 'return' followed by a space and an identifier is very common. + if (source.charCodeAt(index) === 32) { + if (isIdentifierStart(source.charCodeAt(index + 1))) { + argument = parseExpression(); + consumeSemicolon(); + return markerApply(marker, delegate.createReturnStatement(argument)); + } + } + + if (peekLineTerminator()) { + return markerApply(marker, delegate.createReturnStatement(null)); + } + + if (!match(';')) { + if (!match('}') && lookahead.type !== Token.EOF) { + argument = parseExpression(); + } + } + + consumeSemicolon(); + + return markerApply(marker, delegate.createReturnStatement(argument)); + } + + // 12.10 The with statement + + function parseWithStatement() { + var object, body, marker = markerCreate(); + + if (strict) { + throwErrorTolerant({}, Messages.StrictModeWith); + } + + expectKeyword('with'); + + expect('('); + + object = parseExpression(); + + expect(')'); + + body = parseStatement(); + + return markerApply(marker, delegate.createWithStatement(object, body)); + } + + // 12.10 The swith statement + + function parseSwitchCase() { + var test, + consequent = [], + sourceElement, + marker = markerCreate(); + + if (matchKeyword('default')) { + lex(); + test = null; + } else { + expectKeyword('case'); + test = parseExpression(); + } + expect(':'); + + while (index < length) { + if (match('}') || matchKeyword('default') || matchKeyword('case')) { + break; + } + sourceElement = parseSourceElement(); + if (typeof sourceElement === 'undefined') { + break; + } + consequent.push(sourceElement); + } + + return markerApply(marker, delegate.createSwitchCase(test, consequent)); + } + + function parseSwitchStatement() { + var discriminant, cases, clause, oldInSwitch, defaultFound, marker = markerCreate(); + + expectKeyword('switch'); + + expect('('); + + discriminant = parseExpression(); + + expect(')'); + + expect('{'); + + cases = []; + + if (match('}')) { + lex(); + return markerApply(marker, delegate.createSwitchStatement(discriminant, cases)); + } + + oldInSwitch = state.inSwitch; + state.inSwitch = true; + defaultFound = false; + + while (index < length) { + if (match('}')) { + break; + } + clause = parseSwitchCase(); + if (clause.test === null) { + if (defaultFound) { + throwError({}, Messages.MultipleDefaultsInSwitch); + } + defaultFound = true; + } + cases.push(clause); + } + + state.inSwitch = oldInSwitch; + + expect('}'); + + return markerApply(marker, delegate.createSwitchStatement(discriminant, cases)); + } + + // 12.13 The throw statement + + function parseThrowStatement() { + var argument, marker = markerCreate(); + + expectKeyword('throw'); + + if (peekLineTerminator()) { + throwError({}, Messages.NewlineAfterThrow); + } + + argument = parseExpression(); + + consumeSemicolon(); + + return markerApply(marker, delegate.createThrowStatement(argument)); + } + + // 12.14 The try statement + + function parseCatchClause() { + var param, body, marker = markerCreate(); + + expectKeyword('catch'); + + expect('('); + if (match(')')) { + throwUnexpected(lookahead); + } + + param = parseExpression(); + // 12.14.1 + if (strict && param.type === Syntax.Identifier && isRestrictedWord(param.name)) { + throwErrorTolerant({}, Messages.StrictCatchVariable); + } + + expect(')'); + body = parseBlock(); + return markerApply(marker, delegate.createCatchClause(param, body)); + } + + function parseTryStatement() { + var block, handlers = [], finalizer = null, marker = markerCreate(); + + expectKeyword('try'); + + block = parseBlock(); + + if (matchKeyword('catch')) { + handlers.push(parseCatchClause()); + } + + if (matchKeyword('finally')) { + lex(); + finalizer = parseBlock(); + } + + if (handlers.length === 0 && !finalizer) { + throwError({}, Messages.NoCatchOrFinally); + } + + return markerApply(marker, delegate.createTryStatement(block, [], handlers, finalizer)); + } + + // 12.15 The debugger statement + + function parseDebuggerStatement() { + var marker = markerCreate(); + expectKeyword('debugger'); + + consumeSemicolon(); + + return markerApply(marker, delegate.createDebuggerStatement()); + } + + // 12 Statements + + function parseStatement() { + var type = lookahead.type, + marker, + expr, + labeledBody; + + if (type === Token.EOF) { + throwUnexpected(lookahead); + } + + if (type === Token.Punctuator) { + switch (lookahead.value) { + case ';': + return parseEmptyStatement(); + case '{': + return parseBlock(); + case '(': + return parseExpressionStatement(); + default: + break; + } + } + + if (type === Token.Keyword) { + switch (lookahead.value) { + case 'break': + return parseBreakStatement(); + case 'continue': + return parseContinueStatement(); + case 'debugger': + return parseDebuggerStatement(); + case 'do': + return parseDoWhileStatement(); + case 'for': + return parseForStatement(); + case 'function': + return parseFunctionDeclaration(); + case 'class': + return parseClassDeclaration(); + case 'if': + return parseIfStatement(); + case 'return': + return parseReturnStatement(); + case 'switch': + return parseSwitchStatement(); + case 'throw': + return parseThrowStatement(); + case 'try': + return parseTryStatement(); + case 'var': + return parseVariableStatement(); + case 'while': + return parseWhileStatement(); + case 'with': + return parseWithStatement(); + default: + break; + } + } + + if (matchAsyncFuncExprOrDecl()) { + return parseFunctionDeclaration(); + } + + marker = markerCreate(); + expr = parseExpression(); + + // 12.12 Labelled Statements + if ((expr.type === Syntax.Identifier) && match(':')) { + lex(); + + if (state.labelSet.has(expr.name)) { + throwError({}, Messages.Redeclaration, 'Label', expr.name); + } + + state.labelSet.set(expr.name, true); + labeledBody = parseStatement(); + state.labelSet["delete"](expr.name); + return markerApply(marker, delegate.createLabeledStatement(expr, labeledBody)); + } + + consumeSemicolon(); + + return markerApply(marker, delegate.createExpressionStatement(expr)); + } + + // 13 Function Definition + + function parseConciseBody() { + if (match('{')) { + return parseFunctionSourceElements(); + } + return parseAssignmentExpression(); + } + + function parseFunctionSourceElements() { + var sourceElement, sourceElements = [], token, directive, firstRestricted, + oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, oldParenthesizedCount, + marker = markerCreate(); + + expect('{'); + + while (index < length) { + if (lookahead.type !== Token.StringLiteral) { + break; + } + token = lookahead; + + sourceElement = parseSourceElement(); + sourceElements.push(sourceElement); + if (sourceElement.expression.type !== Syntax.Literal) { + // this is not directive + break; + } + directive = source.slice(token.range[0] + 1, token.range[1] - 1); + if (directive === 'use strict') { + strict = true; + if (firstRestricted) { + throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral); + } + } else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + + oldLabelSet = state.labelSet; + oldInIteration = state.inIteration; + oldInSwitch = state.inSwitch; + oldInFunctionBody = state.inFunctionBody; + oldParenthesizedCount = state.parenthesizedCount; + + state.labelSet = new StringMap(); + state.inIteration = false; + state.inSwitch = false; + state.inFunctionBody = true; + state.parenthesizedCount = 0; + + while (index < length) { + if (match('}')) { + break; + } + sourceElement = parseSourceElement(); + if (typeof sourceElement === 'undefined') { + break; + } + sourceElements.push(sourceElement); + } + + expect('}'); + + state.labelSet = oldLabelSet; + state.inIteration = oldInIteration; + state.inSwitch = oldInSwitch; + state.inFunctionBody = oldInFunctionBody; + state.parenthesizedCount = oldParenthesizedCount; + + return markerApply(marker, delegate.createBlockStatement(sourceElements)); + } + + function validateParam(options, param, name) { + if (strict) { + if (isRestrictedWord(name)) { + options.stricted = param; + options.message = Messages.StrictParamName; + } + if (options.paramSet.has(name)) { + options.stricted = param; + options.message = Messages.StrictParamDupe; + } + } else if (!options.firstRestricted) { + if (isRestrictedWord(name)) { + options.firstRestricted = param; + options.message = Messages.StrictParamName; + } else if (isStrictModeReservedWord(name)) { + options.firstRestricted = param; + options.message = Messages.StrictReservedWord; + } else if (options.paramSet.has(name)) { + options.firstRestricted = param; + options.message = Messages.StrictParamDupe; + } + } + options.paramSet.set(name, true); + } + + function parseParam(options) { + var marker, token, rest, param, def; + + token = lookahead; + if (token.value === '...') { + token = lex(); + rest = true; + } + + if (match('[')) { + marker = markerCreate(); + param = parseArrayInitialiser(); + reinterpretAsDestructuredParameter(options, param); + if (match(':')) { + param.typeAnnotation = parseTypeAnnotation(); + markerApply(marker, param); + } + } else if (match('{')) { + marker = markerCreate(); + if (rest) { + throwError({}, Messages.ObjectPatternAsRestParameter); + } + param = parseObjectInitialiser(); + reinterpretAsDestructuredParameter(options, param); + if (match(':')) { + param.typeAnnotation = parseTypeAnnotation(); + markerApply(marker, param); + } + } else { + param = + rest + ? parseTypeAnnotatableIdentifier( + false, /* requireTypeAnnotation */ + false /* canBeOptionalParam */ + ) + : parseTypeAnnotatableIdentifier( + false, /* requireTypeAnnotation */ + true /* canBeOptionalParam */ + ); + + validateParam(options, token, token.value); + } + + if (match('=')) { + if (rest) { + throwErrorTolerant(lookahead, Messages.DefaultRestParameter); + } + lex(); + def = parseAssignmentExpression(); + ++options.defaultCount; + } + + if (rest) { + if (!match(')')) { + throwError({}, Messages.ParameterAfterRestParameter); + } + options.rest = param; + return false; + } + + options.params.push(param); + options.defaults.push(def); + return !match(')'); + } + + function parseParams(firstRestricted) { + var options, marker = markerCreate(); + + options = { + params: [], + defaultCount: 0, + defaults: [], + rest: null, + firstRestricted: firstRestricted + }; + + expect('('); + + if (!match(')')) { + options.paramSet = new StringMap(); + while (index < length) { + if (!parseParam(options)) { + break; + } + expect(','); + } + } + + expect(')'); + + if (options.defaultCount === 0) { + options.defaults = []; + } + + if (match(':')) { + options.returnType = parseTypeAnnotation(); + } + + return markerApply(marker, options); + } + + function parseFunctionDeclaration() { + var id, body, token, tmp, firstRestricted, message, generator, isAsync, + previousStrict, previousYieldAllowed, previousAwaitAllowed, + marker = markerCreate(), typeParameters; + + isAsync = false; + if (matchAsync()) { + lex(); + isAsync = true; + } + + expectKeyword('function'); + + generator = false; + if (match('*')) { + lex(); + generator = true; + } + + token = lookahead; + + id = parseVariableIdentifier(); + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + if (strict) { + if (isRestrictedWord(token.value)) { + throwErrorTolerant(token, Messages.StrictFunctionName); + } + } else { + if (isRestrictedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictFunctionName; + } else if (isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictReservedWord; + } + } + + tmp = parseParams(firstRestricted); + firstRestricted = tmp.firstRestricted; + if (tmp.message) { + message = tmp.message; + } + + previousStrict = strict; + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = generator; + previousAwaitAllowed = state.awaitAllowed; + state.awaitAllowed = isAsync; + + body = parseFunctionSourceElements(); + + if (strict && firstRestricted) { + throwError(firstRestricted, message); + } + if (strict && tmp.stricted) { + throwErrorTolerant(tmp.stricted, message); + } + strict = previousStrict; + state.yieldAllowed = previousYieldAllowed; + state.awaitAllowed = previousAwaitAllowed; + + return markerApply( + marker, + delegate.createFunctionDeclaration( + id, + tmp.params, + tmp.defaults, + body, + tmp.rest, + generator, + false, + isAsync, + tmp.returnType, + typeParameters + ) + ); + } + + function parseFunctionExpression() { + var token, id = null, firstRestricted, message, tmp, body, generator, isAsync, + previousStrict, previousYieldAllowed, previousAwaitAllowed, + marker = markerCreate(), typeParameters; + + isAsync = false; + if (matchAsync()) { + lex(); + isAsync = true; + } + + expectKeyword('function'); + + generator = false; + + if (match('*')) { + lex(); + generator = true; + } + + if (!match('(')) { + if (!match('<')) { + token = lookahead; + id = parseVariableIdentifier(); + + if (strict) { + if (isRestrictedWord(token.value)) { + throwErrorTolerant(token, Messages.StrictFunctionName); + } + } else { + if (isRestrictedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictFunctionName; + } else if (isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictReservedWord; + } + } + } + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + } + + tmp = parseParams(firstRestricted); + firstRestricted = tmp.firstRestricted; + if (tmp.message) { + message = tmp.message; + } + + previousStrict = strict; + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = generator; + previousAwaitAllowed = state.awaitAllowed; + state.awaitAllowed = isAsync; + + body = parseFunctionSourceElements(); + + if (strict && firstRestricted) { + throwError(firstRestricted, message); + } + if (strict && tmp.stricted) { + throwErrorTolerant(tmp.stricted, message); + } + strict = previousStrict; + state.yieldAllowed = previousYieldAllowed; + state.awaitAllowed = previousAwaitAllowed; + + return markerApply( + marker, + delegate.createFunctionExpression( + id, + tmp.params, + tmp.defaults, + body, + tmp.rest, + generator, + false, + isAsync, + tmp.returnType, + typeParameters + ) + ); + } + + function parseYieldExpression() { + var delegateFlag, expr, marker = markerCreate(); + + expectKeyword('yield', !strict); + + delegateFlag = false; + if (match('*')) { + lex(); + delegateFlag = true; + } + + expr = parseAssignmentExpression(); + + return markerApply(marker, delegate.createYieldExpression(expr, delegateFlag)); + } + + function parseAwaitExpression() { + var expr, marker = markerCreate(); + expectContextualKeyword('await'); + expr = parseAssignmentExpression(); + return markerApply(marker, delegate.createAwaitExpression(expr)); + } + + // 14 Functions and classes + + // 14.1 Functions is defined above (13 in ES5) + // 14.2 Arrow Functions Definitions is defined in (7.3 assignments) + + // 14.3 Method Definitions + // 14.3.7 + function specialMethod(methodDefinition) { + return methodDefinition.kind === 'get' || + methodDefinition.kind === 'set' || + methodDefinition.value.generator; + } + + function parseMethodDefinition(key, isStatic, generator, computed) { + var token, param, propType, + isAsync, typeParameters, tokenValue, returnType; + + propType = isStatic ? ClassPropertyType["static"] : ClassPropertyType.prototype; + + if (generator) { + return delegate.createMethodDefinition( + propType, + '', + key, + parsePropertyMethodFunction({ generator: true }), + computed + ); + } + + tokenValue = key.type === 'Identifier' && key.name; + + if (tokenValue === 'get' && !match('(')) { + key = parseObjectPropertyKey(); + + expect('('); + expect(')'); + if (match(':')) { + returnType = parseTypeAnnotation(); + } + return delegate.createMethodDefinition( + propType, + 'get', + key, + parsePropertyFunction({ generator: false, returnType: returnType }), + computed + ); + } + if (tokenValue === 'set' && !match('(')) { + key = parseObjectPropertyKey(); + + expect('('); + token = lookahead; + param = [ parseTypeAnnotatableIdentifier() ]; + expect(')'); + if (match(':')) { + returnType = parseTypeAnnotation(); + } + return delegate.createMethodDefinition( + propType, + 'set', + key, + parsePropertyFunction({ + params: param, + generator: false, + name: token, + returnType: returnType + }), + computed + ); + } + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + isAsync = tokenValue === 'async' && !match('('); + if (isAsync) { + key = parseObjectPropertyKey(); + } + + return delegate.createMethodDefinition( + propType, + '', + key, + parsePropertyMethodFunction({ + generator: false, + async: isAsync, + typeParameters: typeParameters + }), + computed + ); + } + + function parseClassProperty(key, computed, isStatic) { + var typeAnnotation; + + typeAnnotation = parseTypeAnnotation(); + expect(';'); + + return delegate.createClassProperty( + key, + typeAnnotation, + computed, + isStatic + ); + } + + function parseClassElement() { + var computed = false, generator = false, key, marker = markerCreate(), + isStatic = false, possiblyOpenBracketToken; + if (match(';')) { + lex(); + return undefined; + } + + if (lookahead.value === 'static') { + lex(); + isStatic = true; + } + + if (match('*')) { + lex(); + generator = true; + } + + possiblyOpenBracketToken = lookahead; + if (matchContextualKeyword('get') || matchContextualKeyword('set')) { + possiblyOpenBracketToken = lookahead2(); + } + + if (possiblyOpenBracketToken.type === Token.Punctuator + && possiblyOpenBracketToken.value === '[') { + computed = true; + } + + key = parseObjectPropertyKey(); + + if (!generator && lookahead.value === ':') { + return markerApply(marker, parseClassProperty(key, computed, isStatic)); + } + + return markerApply(marker, parseMethodDefinition( + key, + isStatic, + generator, + computed + )); + } + + function parseClassBody() { + var classElement, classElements = [], existingProps = {}, + marker = markerCreate(), propName, propType; + + existingProps[ClassPropertyType["static"]] = new StringMap(); + existingProps[ClassPropertyType.prototype] = new StringMap(); + + expect('{'); + + while (index < length) { + if (match('}')) { + break; + } + classElement = parseClassElement(existingProps); + + if (typeof classElement !== 'undefined') { + classElements.push(classElement); + + propName = !classElement.computed && getFieldName(classElement.key); + if (propName !== false) { + propType = classElement["static"] ? + ClassPropertyType["static"] : + ClassPropertyType.prototype; + + if (classElement.type === Syntax.MethodDefinition) { + if (propName === 'constructor' && !classElement["static"]) { + if (specialMethod(classElement)) { + throwError(classElement, Messages.IllegalClassConstructorProperty); + } + if (existingProps[ClassPropertyType.prototype].has('constructor')) { + throwError(classElement.key, Messages.IllegalDuplicateClassProperty); + } + } + existingProps[propType].set(propName, true); + } + } + } + } + + expect('}'); + + return markerApply(marker, delegate.createClassBody(classElements)); + } + + function parseClassImplements() { + var id, implemented = [], marker, typeParameters; + if (strict) { + expectKeyword('implements'); + } else { + expectContextualKeyword('implements'); + } + while (index < length) { + marker = markerCreate(); + id = parseVariableIdentifier(); + if (match('<')) { + typeParameters = parseTypeParameterInstantiation(); + } else { + typeParameters = null; + } + implemented.push(markerApply(marker, delegate.createClassImplements( + id, + typeParameters + ))); + if (!match(',')) { + break; + } + expect(','); + } + return implemented; + } + + function parseClassExpression() { + var id, implemented, previousYieldAllowed, superClass = null, + superTypeParameters, marker = markerCreate(), typeParameters, + matchImplements; + + expectKeyword('class'); + + matchImplements = + strict + ? matchKeyword('implements') + : matchContextualKeyword('implements'); + + if (!matchKeyword('extends') && !matchImplements && !match('{')) { + id = parseVariableIdentifier(); + } + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + if (matchKeyword('extends')) { + expectKeyword('extends'); + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = false; + superClass = parseLeftHandSideExpressionAllowCall(); + if (match('<')) { + superTypeParameters = parseTypeParameterInstantiation(); + } + state.yieldAllowed = previousYieldAllowed; + } + + if (strict ? matchKeyword('implements') : matchContextualKeyword('implements')) { + implemented = parseClassImplements(); + } + + return markerApply(marker, delegate.createClassExpression( + id, + superClass, + parseClassBody(), + typeParameters, + superTypeParameters, + implemented + )); + } + + function parseClassDeclaration() { + var id, implemented, previousYieldAllowed, superClass = null, + superTypeParameters, marker = markerCreate(), typeParameters; + + expectKeyword('class'); + + id = parseVariableIdentifier(); + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + if (matchKeyword('extends')) { + expectKeyword('extends'); + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = false; + superClass = parseLeftHandSideExpressionAllowCall(); + if (match('<')) { + superTypeParameters = parseTypeParameterInstantiation(); + } + state.yieldAllowed = previousYieldAllowed; + } + + if (strict ? matchKeyword('implements') : matchContextualKeyword('implements')) { + implemented = parseClassImplements(); + } + + return markerApply(marker, delegate.createClassDeclaration( + id, + superClass, + parseClassBody(), + typeParameters, + superTypeParameters, + implemented + )); + } + + // 15 Program + + function parseSourceElement() { + var token; + if (lookahead.type === Token.Keyword) { + switch (lookahead.value) { + case 'const': + case 'let': + return parseConstLetDeclaration(lookahead.value); + case 'function': + return parseFunctionDeclaration(); + case 'export': + throwErrorTolerant({}, Messages.IllegalExportDeclaration); + return parseExportDeclaration(); + case 'import': + throwErrorTolerant({}, Messages.IllegalImportDeclaration); + return parseImportDeclaration(); + case 'interface': + if (lookahead2().type === Token.Identifier) { + return parseInterface(); + } + return parseStatement(); + default: + return parseStatement(); + } + } + + if (matchContextualKeyword('type') + && lookahead2().type === Token.Identifier) { + return parseTypeAlias(); + } + + if (matchContextualKeyword('interface') + && lookahead2().type === Token.Identifier) { + return parseInterface(); + } + + if (matchContextualKeyword('declare')) { + token = lookahead2(); + if (token.type === Token.Keyword) { + switch (token.value) { + case 'class': + return parseDeclareClass(); + case 'function': + return parseDeclareFunction(); + case 'var': + return parseDeclareVariable(); + } + } else if (token.type === Token.Identifier + && token.value === 'module') { + return parseDeclareModule(); + } + } + + if (lookahead.type !== Token.EOF) { + return parseStatement(); + } + } + + function parseProgramElement() { + var isModule = extra.sourceType === 'module' || extra.sourceType === 'nonStrictModule'; + + if (isModule && lookahead.type === Token.Keyword) { + switch (lookahead.value) { + case 'export': + return parseExportDeclaration(); + case 'import': + return parseImportDeclaration(); + } + } + + return parseSourceElement(); + } + + function parseProgramElements() { + var sourceElement, sourceElements = [], token, directive, firstRestricted; + + while (index < length) { + token = lookahead; + if (token.type !== Token.StringLiteral) { + break; + } + + sourceElement = parseProgramElement(); + sourceElements.push(sourceElement); + if (sourceElement.expression.type !== Syntax.Literal) { + // this is not directive + break; + } + directive = source.slice(token.range[0] + 1, token.range[1] - 1); + if (directive === 'use strict') { + strict = true; + if (firstRestricted) { + throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral); + } + } else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + + while (index < length) { + sourceElement = parseProgramElement(); + if (typeof sourceElement === 'undefined') { + break; + } + sourceElements.push(sourceElement); + } + return sourceElements; + } + + function parseProgram() { + var body, marker = markerCreate(); + strict = extra.sourceType === 'module'; + peek(); + body = parseProgramElements(); + return markerApply(marker, delegate.createProgram(body)); + } + + // 16 JSX + + XHTMLEntities = { + quot: '\u0022', + amp: '&', + apos: '\u0027', + lt: '<', + gt: '>', + nbsp: '\u00A0', + iexcl: '\u00A1', + cent: '\u00A2', + pound: '\u00A3', + curren: '\u00A4', + yen: '\u00A5', + brvbar: '\u00A6', + sect: '\u00A7', + uml: '\u00A8', + copy: '\u00A9', + ordf: '\u00AA', + laquo: '\u00AB', + not: '\u00AC', + shy: '\u00AD', + reg: '\u00AE', + macr: '\u00AF', + deg: '\u00B0', + plusmn: '\u00B1', + sup2: '\u00B2', + sup3: '\u00B3', + acute: '\u00B4', + micro: '\u00B5', + para: '\u00B6', + middot: '\u00B7', + cedil: '\u00B8', + sup1: '\u00B9', + ordm: '\u00BA', + raquo: '\u00BB', + frac14: '\u00BC', + frac12: '\u00BD', + frac34: '\u00BE', + iquest: '\u00BF', + Agrave: '\u00C0', + Aacute: '\u00C1', + Acirc: '\u00C2', + Atilde: '\u00C3', + Auml: '\u00C4', + Aring: '\u00C5', + AElig: '\u00C6', + Ccedil: '\u00C7', + Egrave: '\u00C8', + Eacute: '\u00C9', + Ecirc: '\u00CA', + Euml: '\u00CB', + Igrave: '\u00CC', + Iacute: '\u00CD', + Icirc: '\u00CE', + Iuml: '\u00CF', + ETH: '\u00D0', + Ntilde: '\u00D1', + Ograve: '\u00D2', + Oacute: '\u00D3', + Ocirc: '\u00D4', + Otilde: '\u00D5', + Ouml: '\u00D6', + times: '\u00D7', + Oslash: '\u00D8', + Ugrave: '\u00D9', + Uacute: '\u00DA', + Ucirc: '\u00DB', + Uuml: '\u00DC', + Yacute: '\u00DD', + THORN: '\u00DE', + szlig: '\u00DF', + agrave: '\u00E0', + aacute: '\u00E1', + acirc: '\u00E2', + atilde: '\u00E3', + auml: '\u00E4', + aring: '\u00E5', + aelig: '\u00E6', + ccedil: '\u00E7', + egrave: '\u00E8', + eacute: '\u00E9', + ecirc: '\u00EA', + euml: '\u00EB', + igrave: '\u00EC', + iacute: '\u00ED', + icirc: '\u00EE', + iuml: '\u00EF', + eth: '\u00F0', + ntilde: '\u00F1', + ograve: '\u00F2', + oacute: '\u00F3', + ocirc: '\u00F4', + otilde: '\u00F5', + ouml: '\u00F6', + divide: '\u00F7', + oslash: '\u00F8', + ugrave: '\u00F9', + uacute: '\u00FA', + ucirc: '\u00FB', + uuml: '\u00FC', + yacute: '\u00FD', + thorn: '\u00FE', + yuml: '\u00FF', + OElig: '\u0152', + oelig: '\u0153', + Scaron: '\u0160', + scaron: '\u0161', + Yuml: '\u0178', + fnof: '\u0192', + circ: '\u02C6', + tilde: '\u02DC', + Alpha: '\u0391', + Beta: '\u0392', + Gamma: '\u0393', + Delta: '\u0394', + Epsilon: '\u0395', + Zeta: '\u0396', + Eta: '\u0397', + Theta: '\u0398', + Iota: '\u0399', + Kappa: '\u039A', + Lambda: '\u039B', + Mu: '\u039C', + Nu: '\u039D', + Xi: '\u039E', + Omicron: '\u039F', + Pi: '\u03A0', + Rho: '\u03A1', + Sigma: '\u03A3', + Tau: '\u03A4', + Upsilon: '\u03A5', + Phi: '\u03A6', + Chi: '\u03A7', + Psi: '\u03A8', + Omega: '\u03A9', + alpha: '\u03B1', + beta: '\u03B2', + gamma: '\u03B3', + delta: '\u03B4', + epsilon: '\u03B5', + zeta: '\u03B6', + eta: '\u03B7', + theta: '\u03B8', + iota: '\u03B9', + kappa: '\u03BA', + lambda: '\u03BB', + mu: '\u03BC', + nu: '\u03BD', + xi: '\u03BE', + omicron: '\u03BF', + pi: '\u03C0', + rho: '\u03C1', + sigmaf: '\u03C2', + sigma: '\u03C3', + tau: '\u03C4', + upsilon: '\u03C5', + phi: '\u03C6', + chi: '\u03C7', + psi: '\u03C8', + omega: '\u03C9', + thetasym: '\u03D1', + upsih: '\u03D2', + piv: '\u03D6', + ensp: '\u2002', + emsp: '\u2003', + thinsp: '\u2009', + zwnj: '\u200C', + zwj: '\u200D', + lrm: '\u200E', + rlm: '\u200F', + ndash: '\u2013', + mdash: '\u2014', + lsquo: '\u2018', + rsquo: '\u2019', + sbquo: '\u201A', + ldquo: '\u201C', + rdquo: '\u201D', + bdquo: '\u201E', + dagger: '\u2020', + Dagger: '\u2021', + bull: '\u2022', + hellip: '\u2026', + permil: '\u2030', + prime: '\u2032', + Prime: '\u2033', + lsaquo: '\u2039', + rsaquo: '\u203A', + oline: '\u203E', + frasl: '\u2044', + euro: '\u20AC', + image: '\u2111', + weierp: '\u2118', + real: '\u211C', + trade: '\u2122', + alefsym: '\u2135', + larr: '\u2190', + uarr: '\u2191', + rarr: '\u2192', + darr: '\u2193', + harr: '\u2194', + crarr: '\u21B5', + lArr: '\u21D0', + uArr: '\u21D1', + rArr: '\u21D2', + dArr: '\u21D3', + hArr: '\u21D4', + forall: '\u2200', + part: '\u2202', + exist: '\u2203', + empty: '\u2205', + nabla: '\u2207', + isin: '\u2208', + notin: '\u2209', + ni: '\u220B', + prod: '\u220F', + sum: '\u2211', + minus: '\u2212', + lowast: '\u2217', + radic: '\u221A', + prop: '\u221D', + infin: '\u221E', + ang: '\u2220', + and: '\u2227', + or: '\u2228', + cap: '\u2229', + cup: '\u222A', + 'int': '\u222B', + there4: '\u2234', + sim: '\u223C', + cong: '\u2245', + asymp: '\u2248', + ne: '\u2260', + equiv: '\u2261', + le: '\u2264', + ge: '\u2265', + sub: '\u2282', + sup: '\u2283', + nsub: '\u2284', + sube: '\u2286', + supe: '\u2287', + oplus: '\u2295', + otimes: '\u2297', + perp: '\u22A5', + sdot: '\u22C5', + lceil: '\u2308', + rceil: '\u2309', + lfloor: '\u230A', + rfloor: '\u230B', + lang: '\u2329', + rang: '\u232A', + loz: '\u25CA', + spades: '\u2660', + clubs: '\u2663', + hearts: '\u2665', + diams: '\u2666' + }; + + function getQualifiedJSXName(object) { + if (object.type === Syntax.JSXIdentifier) { + return object.name; + } + if (object.type === Syntax.JSXNamespacedName) { + return object.namespace.name + ':' + object.name.name; + } + /* istanbul ignore else */ + if (object.type === Syntax.JSXMemberExpression) { + return ( + getQualifiedJSXName(object.object) + '.' + + getQualifiedJSXName(object.property) + ); + } + /* istanbul ignore next */ + throwUnexpected(object); + } + + function isJSXIdentifierStart(ch) { + // exclude backslash (\) + return (ch !== 92) && isIdentifierStart(ch); + } + + function isJSXIdentifierPart(ch) { + // exclude backslash (\) and add hyphen (-) + return (ch !== 92) && (ch === 45 || isIdentifierPart(ch)); + } + + function scanJSXIdentifier() { + var ch, start, value = ''; + + start = index; + while (index < length) { + ch = source.charCodeAt(index); + if (!isJSXIdentifierPart(ch)) { + break; + } + value += source[index++]; + } + + return { + type: Token.JSXIdentifier, + value: value, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanJSXEntity() { + var ch, str = '', start = index, count = 0, code; + ch = source[index]; + assert(ch === '&', 'Entity must start with an ampersand'); + index++; + while (index < length && count++ < 10) { + ch = source[index++]; + if (ch === ';') { + break; + } + str += ch; + } + + // Well-formed entity (ending was found). + if (ch === ';') { + // Numeric entity. + if (str[0] === '#') { + if (str[1] === 'x') { + code = +('0' + str.substr(1)); + } else { + // Removing leading zeros in order to avoid treating as octal in old browsers. + code = +str.substr(1).replace(Regex.LeadingZeros, ''); + } + + if (!isNaN(code)) { + return String.fromCharCode(code); + } + /* istanbul ignore else */ + } else if (XHTMLEntities[str]) { + return XHTMLEntities[str]; + } + } + + // Treat non-entity sequences as regular text. + index = start + 1; + return '&'; + } + + function scanJSXText(stopChars) { + var ch, str = '', start; + start = index; + while (index < length) { + ch = source[index]; + if (stopChars.indexOf(ch) !== -1) { + break; + } + if (ch === '&') { + str += scanJSXEntity(); + } else { + index++; + if (ch === '\r' && source[index] === '\n') { + str += ch; + ch = source[index]; + index++; + } + if (isLineTerminator(ch.charCodeAt(0))) { + ++lineNumber; + lineStart = index; + } + str += ch; + } + } + return { + type: Token.JSXText, + value: str, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanJSXStringLiteral() { + var innerToken, quote, start; + + quote = source[index]; + assert((quote === '\'' || quote === '"'), + 'String literal must starts with a quote'); + + start = index; + ++index; + + innerToken = scanJSXText([quote]); + + if (quote !== source[index]) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + ++index; + + innerToken.range = [start, index]; + + return innerToken; + } + + /** + * Between JSX opening and closing tags (e.g. HERE), anything that + * is not another JSX tag and is not an expression wrapped by {} is text. + */ + function advanceJSXChild() { + var ch = source.charCodeAt(index); + + // '<' 60, '>' 62, '{' 123, '}' 125 + if (ch !== 60 && ch !== 62 && ch !== 123 && ch !== 125) { + return scanJSXText(['<', '>', '{', '}']); + } + + return scanPunctuator(); + } + + function parseJSXIdentifier() { + var token, marker = markerCreate(); + + if (lookahead.type !== Token.JSXIdentifier) { + throwUnexpected(lookahead); + } + + token = lex(); + return markerApply(marker, delegate.createJSXIdentifier(token.value)); + } + + function parseJSXNamespacedName() { + var namespace, name, marker = markerCreate(); + + namespace = parseJSXIdentifier(); + expect(':'); + name = parseJSXIdentifier(); + + return markerApply(marker, delegate.createJSXNamespacedName(namespace, name)); + } + + function parseJSXMemberExpression() { + var marker = markerCreate(), + expr = parseJSXIdentifier(); + + while (match('.')) { + lex(); + expr = markerApply(marker, delegate.createJSXMemberExpression(expr, parseJSXIdentifier())); + } + + return expr; + } + + function parseJSXElementName() { + if (lookahead2().value === ':') { + return parseJSXNamespacedName(); + } + if (lookahead2().value === '.') { + return parseJSXMemberExpression(); + } + + return parseJSXIdentifier(); + } + + function parseJSXAttributeName() { + if (lookahead2().value === ':') { + return parseJSXNamespacedName(); + } + + return parseJSXIdentifier(); + } + + function parseJSXAttributeValue() { + var value, marker; + if (match('{')) { + value = parseJSXExpressionContainer(); + if (value.expression.type === Syntax.JSXEmptyExpression) { + throwError( + value, + 'JSX attributes must only be assigned a non-empty ' + + 'expression' + ); + } + } else if (match('<')) { + value = parseJSXElement(); + } else if (lookahead.type === Token.JSXText) { + marker = markerCreate(); + value = markerApply(marker, delegate.createLiteral(lex())); + } else { + throwError({}, Messages.InvalidJSXAttributeValue); + } + return value; + } + + function parseJSXEmptyExpression() { + var marker = markerCreatePreserveWhitespace(); + while (source.charAt(index) !== '}') { + index++; + } + return markerApply(marker, delegate.createJSXEmptyExpression()); + } + + function parseJSXExpressionContainer() { + var expression, origInJSXChild, origInJSXTag, marker = markerCreate(); + + origInJSXChild = state.inJSXChild; + origInJSXTag = state.inJSXTag; + state.inJSXChild = false; + state.inJSXTag = false; + + expect('{'); + + if (match('}')) { + expression = parseJSXEmptyExpression(); + } else { + expression = parseExpression(); + } + + state.inJSXChild = origInJSXChild; + state.inJSXTag = origInJSXTag; + + expect('}'); + + return markerApply(marker, delegate.createJSXExpressionContainer(expression)); + } + + function parseJSXSpreadAttribute() { + var expression, origInJSXChild, origInJSXTag, marker = markerCreate(); + + origInJSXChild = state.inJSXChild; + origInJSXTag = state.inJSXTag; + state.inJSXChild = false; + state.inJSXTag = false; + + expect('{'); + expect('...'); + + expression = parseAssignmentExpression(); + + state.inJSXChild = origInJSXChild; + state.inJSXTag = origInJSXTag; + + expect('}'); + + return markerApply(marker, delegate.createJSXSpreadAttribute(expression)); + } + + function parseJSXAttribute() { + var name, marker; + + if (match('{')) { + return parseJSXSpreadAttribute(); + } + + marker = markerCreate(); + + name = parseJSXAttributeName(); + + // HTML empty attribute + if (match('=')) { + lex(); + return markerApply(marker, delegate.createJSXAttribute(name, parseJSXAttributeValue())); + } + + return markerApply(marker, delegate.createJSXAttribute(name)); + } + + function parseJSXChild() { + var token, marker; + if (match('{')) { + token = parseJSXExpressionContainer(); + } else if (lookahead.type === Token.JSXText) { + marker = markerCreatePreserveWhitespace(); + token = markerApply(marker, delegate.createLiteral(lex())); + } else if (match('<')) { + token = parseJSXElement(); + } else { + throwUnexpected(lookahead); + } + return token; + } + + function parseJSXClosingElement() { + var name, origInJSXChild, origInJSXTag, marker = markerCreate(); + origInJSXChild = state.inJSXChild; + origInJSXTag = state.inJSXTag; + state.inJSXChild = false; + state.inJSXTag = true; + expect('<'); + expect('/'); + name = parseJSXElementName(); + // Because advance() (called by lex() called by expect()) expects there + // to be a valid token after >, it needs to know whether to look for a + // standard JS token or an JSX text node + state.inJSXChild = origInJSXChild; + state.inJSXTag = origInJSXTag; + expect('>'); + return markerApply(marker, delegate.createJSXClosingElement(name)); + } + + function parseJSXOpeningElement() { + var name, attributes = [], selfClosing = false, origInJSXChild, origInJSXTag, marker = markerCreate(); + + origInJSXChild = state.inJSXChild; + origInJSXTag = state.inJSXTag; + state.inJSXChild = false; + state.inJSXTag = true; + + expect('<'); + + name = parseJSXElementName(); + + while (index < length && + lookahead.value !== '/' && + lookahead.value !== '>') { + attributes.push(parseJSXAttribute()); + } + + state.inJSXTag = origInJSXTag; + + if (lookahead.value === '/') { + expect('/'); + // Because advance() (called by lex() called by expect()) expects + // there to be a valid token after >, it needs to know whether to + // look for a standard JS token or an JSX text node + state.inJSXChild = origInJSXChild; + expect('>'); + selfClosing = true; + } else { + state.inJSXChild = true; + expect('>'); + } + return markerApply(marker, delegate.createJSXOpeningElement(name, attributes, selfClosing)); + } + + function parseJSXElement() { + var openingElement, closingElement = null, children = [], origInJSXChild, origInJSXTag, marker = markerCreate(); + + origInJSXChild = state.inJSXChild; + origInJSXTag = state.inJSXTag; + openingElement = parseJSXOpeningElement(); + + if (!openingElement.selfClosing) { + while (index < length) { + state.inJSXChild = false; // Call lookahead2() with inJSXChild = false because one
    two
    ; + // + // the default error message is a bit incomprehensible. Since it's + // rarely (never?) useful to write a less-than sign after an JSX + // element, we disallow it here in the parser in order to provide a + // better error message. (In the rare case that the less-than operator + // was intended, the left tag can be wrapped in parentheses.) + if (!origInJSXChild && match('<')) { + throwError(lookahead, Messages.AdjacentJSXElements); + } + + return markerApply(marker, delegate.createJSXElement(openingElement, closingElement, children)); + } + + function parseTypeAlias() { + var id, marker = markerCreate(), typeParameters = null, right; + expectContextualKeyword('type'); + id = parseVariableIdentifier(); + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + expect('='); + right = parseType(); + consumeSemicolon(); + return markerApply(marker, delegate.createTypeAlias(id, typeParameters, right)); + } + + function parseInterfaceExtends() { + var marker = markerCreate(), id, typeParameters = null; + + id = parseVariableIdentifier(); + if (match('<')) { + typeParameters = parseTypeParameterInstantiation(); + } + + return markerApply(marker, delegate.createInterfaceExtends( + id, + typeParameters + )); + } + + function parseInterfaceish(marker, allowStatic) { + var body, bodyMarker, extended = [], id, + typeParameters = null; + + id = parseVariableIdentifier(); + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + if (matchKeyword('extends')) { + expectKeyword('extends'); + + while (index < length) { + extended.push(parseInterfaceExtends()); + if (!match(',')) { + break; + } + expect(','); + } + } + + bodyMarker = markerCreate(); + body = markerApply(bodyMarker, parseObjectType(allowStatic)); + + return markerApply(marker, delegate.createInterface( + id, + typeParameters, + body, + extended + )); + } + + function parseInterface() { + var marker = markerCreate(); + + if (strict) { + expectKeyword('interface'); + } else { + expectContextualKeyword('interface'); + } + + return parseInterfaceish(marker, /* allowStatic */false); + } + + function parseDeclareClass() { + var marker = markerCreate(), ret; + expectContextualKeyword('declare'); + expectKeyword('class'); + + ret = parseInterfaceish(marker, /* allowStatic */true); + ret.type = Syntax.DeclareClass; + return ret; + } + + function parseDeclareFunction() { + var id, idMarker, + marker = markerCreate(), params, returnType, rest, tmp, + typeParameters = null, value, valueMarker; + + expectContextualKeyword('declare'); + expectKeyword('function'); + idMarker = markerCreate(); + id = parseVariableIdentifier(); + + valueMarker = markerCreate(); + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + expect('('); + tmp = parseFunctionTypeParams(); + params = tmp.params; + rest = tmp.rest; + expect(')'); + + expect(':'); + returnType = parseType(); + + value = markerApply(valueMarker, delegate.createFunctionTypeAnnotation( + params, + returnType, + rest, + typeParameters + )); + + id.typeAnnotation = markerApply(valueMarker, delegate.createTypeAnnotation( + value + )); + markerApply(idMarker, id); + + consumeSemicolon(); + + return markerApply(marker, delegate.createDeclareFunction( + id + )); + } + + function parseDeclareVariable() { + var id, marker = markerCreate(); + expectContextualKeyword('declare'); + expectKeyword('var'); + id = parseTypeAnnotatableIdentifier(); + + consumeSemicolon(); + + return markerApply(marker, delegate.createDeclareVariable( + id + )); + } + + function parseDeclareModule() { + var body = [], bodyMarker, id, idMarker, marker = markerCreate(), token; + expectContextualKeyword('declare'); + expectContextualKeyword('module'); + + if (lookahead.type === Token.StringLiteral) { + if (strict && lookahead.octal) { + throwErrorTolerant(lookahead, Messages.StrictOctalLiteral); + } + idMarker = markerCreate(); + id = markerApply(idMarker, delegate.createLiteral(lex())); + } else { + id = parseVariableIdentifier(); + } + + bodyMarker = markerCreate(); + expect('{'); + while (index < length && !match('}')) { + token = lookahead2(); + switch (token.value) { + case 'class': + body.push(parseDeclareClass()); + break; + case 'function': + body.push(parseDeclareFunction()); + break; + case 'var': + body.push(parseDeclareVariable()); + break; + default: + throwUnexpected(lookahead); + } + } + expect('}'); + + return markerApply(marker, delegate.createDeclareModule( + id, + markerApply(bodyMarker, delegate.createBlockStatement(body)) + )); + } + + function collectToken() { + var loc, token, range, value, entry; + + /* istanbul ignore else */ + if (!state.inJSXChild) { + skipComment(); + } + + loc = { + start: { + line: lineNumber, + column: index - lineStart + } + }; + + token = extra.advance(); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + + if (token.type !== Token.EOF) { + range = [token.range[0], token.range[1]]; + value = source.slice(token.range[0], token.range[1]); + entry = { + type: TokenName[token.type], + value: value, + range: range, + loc: loc + }; + if (token.regex) { + entry.regex = { + pattern: token.regex.pattern, + flags: token.regex.flags + }; + } + extra.tokens.push(entry); + } + + return token; + } + + function collectRegex() { + var pos, loc, regex, token; + + skipComment(); + + pos = index; + loc = { + start: { + line: lineNumber, + column: index - lineStart + } + }; + + regex = extra.scanRegExp(); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + + if (!extra.tokenize) { + /* istanbul ignore next */ + // Pop the previous token, which is likely '/' or '/=' + if (extra.tokens.length > 0) { + token = extra.tokens[extra.tokens.length - 1]; + if (token.range[0] === pos && token.type === 'Punctuator') { + if (token.value === '/' || token.value === '/=') { + extra.tokens.pop(); + } + } + } + + extra.tokens.push({ + type: 'RegularExpression', + value: regex.literal, + regex: regex.regex, + range: [pos, index], + loc: loc + }); + } + + return regex; + } + + function filterTokenLocation() { + var i, entry, token, tokens = []; + + for (i = 0; i < extra.tokens.length; ++i) { + entry = extra.tokens[i]; + token = { + type: entry.type, + value: entry.value + }; + if (entry.regex) { + token.regex = { + pattern: entry.regex.pattern, + flags: entry.regex.flags + }; + } + if (extra.range) { + token.range = entry.range; + } + if (extra.loc) { + token.loc = entry.loc; + } + tokens.push(token); + } + + extra.tokens = tokens; + } + + function patch() { + if (typeof extra.tokens !== 'undefined') { + extra.advance = advance; + extra.scanRegExp = scanRegExp; + + advance = collectToken; + scanRegExp = collectRegex; + } + } + + function unpatch() { + if (typeof extra.scanRegExp === 'function') { + advance = extra.advance; + scanRegExp = extra.scanRegExp; + } + } + + // This is used to modify the delegate. + + function extend(object, properties) { + var entry, result = {}; + + for (entry in object) { + /* istanbul ignore else */ + if (object.hasOwnProperty(entry)) { + result[entry] = object[entry]; + } + } + + for (entry in properties) { + /* istanbul ignore else */ + if (properties.hasOwnProperty(entry)) { + result[entry] = properties[entry]; + } + } + + return result; + } + + function tokenize(code, options) { + var toString, + token, + tokens; + + toString = String; + if (typeof code !== 'string' && !(code instanceof String)) { + code = toString(code); + } + + delegate = SyntaxTreeDelegate; + source = code; + index = 0; + lineNumber = (source.length > 0) ? 1 : 0; + lineStart = 0; + length = source.length; + lookahead = null; + state = { + allowKeyword: true, + allowIn: true, + labelSet: new StringMap(), + inFunctionBody: false, + inIteration: false, + inSwitch: false, + lastCommentStart: -1 + }; + + extra = {}; + + // Options matching. + options = options || {}; + + // Of course we collect tokens here. + options.tokens = true; + extra.tokens = []; + extra.tokenize = true; + // The following two fields are necessary to compute the Regex tokens. + extra.openParenToken = -1; + extra.openCurlyToken = -1; + + extra.range = (typeof options.range === 'boolean') && options.range; + extra.loc = (typeof options.loc === 'boolean') && options.loc; + + if (typeof options.comment === 'boolean' && options.comment) { + extra.comments = []; + } + if (typeof options.tolerant === 'boolean' && options.tolerant) { + extra.errors = []; + } + + patch(); + + try { + peek(); + if (lookahead.type === Token.EOF) { + return extra.tokens; + } + + token = lex(); + while (lookahead.type !== Token.EOF) { + try { + token = lex(); + } catch (lexError) { + token = lookahead; + if (extra.errors) { + extra.errors.push(lexError); + // We have to break on the first error + // to avoid infinite loops. + break; + } else { + throw lexError; + } + } + } + + filterTokenLocation(); + tokens = extra.tokens; + if (typeof extra.comments !== 'undefined') { + tokens.comments = extra.comments; + } + if (typeof extra.errors !== 'undefined') { + tokens.errors = extra.errors; + } + } catch (e) { + throw e; + } finally { + unpatch(); + extra = {}; + } + return tokens; + } + + function parse(code, options) { + var program, toString; + + toString = String; + if (typeof code !== 'string' && !(code instanceof String)) { + code = toString(code); + } + + delegate = SyntaxTreeDelegate; + source = code; + index = 0; + lineNumber = (source.length > 0) ? 1 : 0; + lineStart = 0; + length = source.length; + lookahead = null; + state = { + allowKeyword: false, + allowIn: true, + labelSet: new StringMap(), + parenthesizedCount: 0, + inFunctionBody: false, + inIteration: false, + inSwitch: false, + inJSXChild: false, + inJSXTag: false, + inType: false, + lastCommentStart: -1, + yieldAllowed: false, + awaitAllowed: false + }; + + extra = {}; + if (typeof options !== 'undefined') { + extra.range = (typeof options.range === 'boolean') && options.range; + extra.loc = (typeof options.loc === 'boolean') && options.loc; + extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment; + + if (extra.loc && options.source !== null && options.source !== undefined) { + delegate = extend(delegate, { + 'postProcess': function (node) { + node.loc.source = toString(options.source); + return node; + } + }); + } + + extra.sourceType = options.sourceType; + if (typeof options.tokens === 'boolean' && options.tokens) { + extra.tokens = []; + } + if (typeof options.comment === 'boolean' && options.comment) { + extra.comments = []; + } + if (typeof options.tolerant === 'boolean' && options.tolerant) { + extra.errors = []; + } + if (extra.attachComment) { + extra.range = true; + extra.comments = []; + extra.bottomRightStack = []; + extra.trailingComments = []; + extra.leadingComments = []; + } + } + + patch(); + try { + program = parseProgram(); + if (typeof extra.comments !== 'undefined') { + program.comments = extra.comments; + } + if (typeof extra.tokens !== 'undefined') { + filterTokenLocation(); + program.tokens = extra.tokens; + } + if (typeof extra.errors !== 'undefined') { + program.errors = extra.errors; + } + } catch (e) { + throw e; + } finally { + unpatch(); + extra = {}; + } + + return program; + } + + // Sync with *.json manifests. + exports.version = '13001.1001.0-dev-harmony-fb'; + + exports.tokenize = tokenize; + + exports.parse = parse; + + // Deep copy. + /* istanbul ignore next */ + exports.Syntax = (function () { + var name, types = {}; + + if (typeof Object.create === 'function') { + types = Object.create(null); + } + + for (name in Syntax) { + if (Syntax.hasOwnProperty(name)) { + types[name] = Syntax[name]; + } + } + + if (typeof Object.freeze === 'function') { + Object.freeze(types); + } + + return types; + }()); + +})); +/* vim: set sw=4 ts=4 et tw=80 : */ + +},{}],10:[function(_dereq_,module,exports){ +var Base62 = (function (my) { + my.chars = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] + + my.encode = function(i){ + if (i === 0) {return '0'} + var s = '' + while (i > 0) { + s = this.chars[i % 62] + s + i = Math.floor(i/62) + } + return s + }; + my.decode = function(a,b,c,d){ + for ( + b = c = ( + a === (/\W|_|^$/.test(a += "") || a) + ) - 1; + d = a.charCodeAt(c++); + ) + b = b * 62 + d - [, 48, 29, 87][d >> 5]; + return b + }; + + return my; +}({})); + +module.exports = Base62 +},{}],11:[function(_dereq_,module,exports){ +/* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ +exports.SourceMapGenerator = _dereq_('./source-map/source-map-generator').SourceMapGenerator; +exports.SourceMapConsumer = _dereq_('./source-map/source-map-consumer').SourceMapConsumer; +exports.SourceNode = _dereq_('./source-map/source-node').SourceNode; + +},{"./source-map/source-map-consumer":16,"./source-map/source-map-generator":17,"./source-map/source-node":18}],12:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var util = _dereq_('./util'); + + /** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ + function ArraySet() { + this._array = []; + this._set = {}; + } + + /** + * Static method for creating ArraySet instances from an existing array. + */ + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var isDuplicate = this.has(aStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + this._set[util.toSetString(aStr)] = idx; + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + return Object.prototype.hasOwnProperty.call(this._set, + util.toSetString(aStr)); + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (this.has(aStr)) { + return this._set[util.toSetString(aStr)]; + } + throw new Error('"' + aStr + '" is not in the set.'); + }; + + /** + * What is the element at the given index? + * + * @param Number aIdx + */ + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); + }; + + /** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + + exports.ArraySet = ArraySet; + +}); + +},{"./util":19,"amdefine":20}],13:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var base64 = _dereq_('./base64'); + + // A single base 64 digit can contain 6 bits of data. For the base 64 variable + // length quantities we use in the source map spec, the first bit is the sign, + // the next four bits are the actual value, and the 6th bit is the + // continuation bit. The continuation bit tells us whether there are more + // digits in this value following this digit. + // + // Continuation + // | Sign + // | | + // V V + // 101011 + + var VLQ_BASE_SHIFT = 5; + + // binary: 100000 + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + + // binary: 011111 + var VLQ_BASE_MASK = VLQ_BASE - 1; + + // binary: 100000 + var VLQ_CONTINUATION_BIT = VLQ_BASE; + + /** + * Converts from a two-complement value to a value where the sign bit is + * is placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ + function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; + } + + /** + * Converts to a two-complement value from a value where the sign bit is + * is placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; + } + + /** + * Returns the base 64 VLQ encoded value. + */ + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; + }; + + /** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string. + */ + exports.decode = function base64VLQ_decode(aStr) { + var i = 0; + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (i >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + digit = base64.decode(aStr.charAt(i++)); + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + return { + value: fromVLQSigned(result), + rest: aStr.slice(i) + }; + }; + +}); + +},{"./base64":14,"amdefine":20}],14:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var charToIntMap = {}; + var intToCharMap = {}; + + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + .split('') + .forEach(function (ch, index) { + charToIntMap[ch] = index; + intToCharMap[index] = ch; + }); + + /** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ + exports.encode = function base64_encode(aNumber) { + if (aNumber in intToCharMap) { + return intToCharMap[aNumber]; + } + throw new TypeError("Must be between 0 and 63: " + aNumber); + }; + + /** + * Decode a single base 64 digit to an integer. + */ + exports.decode = function base64_decode(aChar) { + if (aChar in charToIntMap) { + return charToIntMap[aChar]; + } + throw new TypeError("Not a valid base 64 digit: " + aChar); + }; + +}); + +},{"amdefine":20}],15:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + /** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + */ + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the next + // closest element that is less than that element. + // + // 3. We did not find the exact element, and there is no next-closest + // element which is less than the one we are searching for, so we + // return null. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return aHaystack[mid]; + } + else if (cmp > 0) { + // aHaystack[mid] is greater than our needle. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare); + } + // We did not find an exact match, return the next closest one + // (termination case 2). + return aHaystack[mid]; + } + else { + // aHaystack[mid] is less than our needle. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare); + } + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (2) or (3) and return the appropriate thing. + return aLow < 0 + ? null + : aHaystack[aLow]; + } + } + + /** + * This is an implementation of binary search which will always try and return + * the next lowest value checked if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + */ + exports.search = function search(aNeedle, aHaystack, aCompare) { + return aHaystack.length > 0 + ? recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare) + : null; + }; + +}); + +},{"amdefine":20}],16:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var util = _dereq_('./util'); + var binarySearch = _dereq_('./binary-search'); + var ArraySet = _dereq_('./array-set').ArraySet; + var base64VLQ = _dereq_('./base64-vlq'); + + /** + * A SourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ + function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names, true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; + } + + /** + * Create a SourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns SourceMapConsumer + */ + SourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(SourceMapConsumer.prototype); + + smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + smc.__generatedMappings = aSourceMap._mappings.slice() + .sort(util.compareByGeneratedPositions); + smc.__originalMappings = aSourceMap._mappings.slice() + .sort(util.compareByOriginalPositions); + + return smc; + }; + + /** + * The version of the source mapping spec that we are consuming. + */ + SourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(SourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot ? util.join(this.sourceRoot, s) : s; + }, this); + } + }); + + // `__generatedMappings` and `__originalMappings` are arrays that hold the + // parsed mapping coordinates from the source map's "mappings" attribute. They + // are lazily instantiated, accessed via the `_generatedMappings` and + // `_originalMappings` getters respectively, and we only parse the mappings + // and create these arrays once queried for a source location. We jump through + // these hoops because there can be many thousands of mappings, and parsing + // them is expensive, so we only want to do it if we must. + // + // Each object in the arrays is of the form: + // + // { + // generatedLine: The line number in the generated code, + // generatedColumn: The column number in the generated code, + // source: The path to the original source file that generated this + // chunk of code, + // originalLine: The line number in the original source that + // corresponds to this chunk of generated code, + // originalColumn: The column number in the original source that + // corresponds to this chunk of generated code, + // name: The name of the original symbol which generated this chunk of + // code. + // } + // + // All properties except for `generatedLine` and `generatedColumn` can be + // `null`. + // + // `_generatedMappings` is ordered by the generated positions. + // + // `_originalMappings` is ordered by the original positions. + + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this.__generatedMappings = []; + this.__originalMappings = []; + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } + }); + + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this.__generatedMappings = []; + this.__originalMappings = []; + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } + }); + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var mappingSeparator = /^[,;]/; + var str = aStr; + var mapping; + var temp; + + while (str.length > 0) { + if (str.charAt(0) === ';') { + generatedLine++; + str = str.slice(1); + previousGeneratedColumn = 0; + } + else if (str.charAt(0) === ',') { + str = str.slice(1); + } + else { + mapping = {}; + mapping.generatedLine = generatedLine; + + // Generated column. + temp = base64VLQ.decode(str); + mapping.generatedColumn = previousGeneratedColumn + temp.value; + previousGeneratedColumn = mapping.generatedColumn; + str = temp.rest; + + if (str.length > 0 && !mappingSeparator.test(str.charAt(0))) { + // Original source. + temp = base64VLQ.decode(str); + mapping.source = this._sources.at(previousSource + temp.value); + previousSource += temp.value; + str = temp.rest; + if (str.length === 0 || mappingSeparator.test(str.charAt(0))) { + throw new Error('Found a source, but no line and column'); + } + + // Original line. + temp = base64VLQ.decode(str); + mapping.originalLine = previousOriginalLine + temp.value; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + str = temp.rest; + if (str.length === 0 || mappingSeparator.test(str.charAt(0))) { + throw new Error('Found a source and line, but no column'); + } + + // Original column. + temp = base64VLQ.decode(str); + mapping.originalColumn = previousOriginalColumn + temp.value; + previousOriginalColumn = mapping.originalColumn; + str = temp.rest; + + if (str.length > 0 && !mappingSeparator.test(str.charAt(0))) { + // Original name. + temp = base64VLQ.decode(str); + mapping.name = this._names.at(previousName + temp.value); + previousName += temp.value; + str = temp.rest; + } + } + + this.__generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + this.__originalMappings.push(mapping); + } + } + } + + this.__originalMappings.sort(util.compareByOriginalPositions); + }; + + /** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ + SourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator); + }; + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + SourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var mapping = this._findMapping(needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositions); + + if (mapping) { + var source = util.getArg(mapping, 'source', null); + if (source && this.sourceRoot) { + source = util.join(this.sourceRoot, source); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: util.getArg(mapping, 'name', null) + }; + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * availible. + */ + SourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + throw new Error('"' + aSource + '" is not in the SourceMap.'); + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + SourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + if (this.sourceRoot) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + + var mapping = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions); + + if (mapping) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null) + }; + } + + return { + line: null, + column: null + }; + }; + + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + + /** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ + SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source; + if (source && sourceRoot) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name + }; + }).forEach(aCallback, context); + }; + + exports.SourceMapConsumer = SourceMapConsumer; + +}); + +},{"./array-set":12,"./base64-vlq":13,"./binary-search":15,"./util":19,"amdefine":20}],17:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var base64VLQ = _dereq_('./base64-vlq'); + var util = _dereq_('./util'); + var ArraySet = _dereq_('./array-set').ArraySet; + + /** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. To create a new one, you must pass an object + * with the following properties: + * + * - file: The filename of the generated source. + * - sourceRoot: An optional root for all URLs in this source map. + */ + function SourceMapGenerator(aArgs) { + this._file = util.getArg(aArgs, 'file'); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = []; + this._sourcesContents = null; + } + + SourceMapGenerator.prototype._version = 3; + + /** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ + SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source) { + newMapping.source = mapping.source; + if (sourceRoot) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + + /** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ + SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + this._validateMapping(generated, original, source, name); + + if (source && !this._sources.has(source)) { + this._sources.add(source); + } + + if (name && !this._names.has(name)) { + this._names.add(name); + } + + this._mappings.push({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + + /** + * Set the source content for a source file. + */ + SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent !== null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = {}; + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + + /** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + */ + SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile) { + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (!aSourceFile) { + aSourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "aSourceFile" relative if an absolute Url is passed. + if (sourceRoot) { + aSourceFile = util.relative(sourceRoot, aSourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "aSourceFile" + this._mappings.forEach(function (mapping) { + if (mapping.source === aSourceFile && mapping.originalLine) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source !== null) { + // Copy mapping + if (sourceRoot) { + mapping.source = util.relative(sourceRoot, original.source); + } else { + mapping.source = original.source; + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name !== null && mapping.name !== null) { + // Only use the identifier name if it's an identifier + // in both SourceMaps + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content) { + if (sourceRoot) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + + /** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ + SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + orginal: aOriginal, + name: aName + })); + } + }; + + /** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ + SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var mapping; + + // The mappings must be guaranteed to be in sorted order before we start + // serializing them or else the generated line numbers (which are defined + // via the ';' separators) will be all messed up. Note: it might be more + // performant to maintain the sorting as we insert them, rather than as we + // serialize them, but the big O is the same either way. + this._mappings.sort(util.compareByGeneratedPositions); + + for (var i = 0, len = this._mappings.length; i < len; i++) { + mapping = this._mappings[i]; + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + result += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositions(mapping, this._mappings[i - 1])) { + continue; + } + result += ','; + } + } + + result += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source) { + result += base64VLQ.encode(this._sources.indexOf(mapping.source) + - previousSource); + previousSource = this._sources.indexOf(mapping.source); + + // lines are stored 0-based in SourceMap spec version 3 + result += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + result += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name) { + result += base64VLQ.encode(this._names.indexOf(mapping.name) + - previousName); + previousName = this._names.indexOf(mapping.name); + } + } + } + + return result; + }; + + SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, + key) + ? this._sourcesContents[key] + : null; + }, this); + }; + + /** + * Externalize the source map. + */ + SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + file: this._file, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._sourceRoot) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + + /** + * Render the source map being generated to a string. + */ + SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this); + }; + + exports.SourceMapGenerator = SourceMapGenerator; + +}); + +},{"./array-set":12,"./base64-vlq":13,"./util":19,"amdefine":20}],18:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var SourceMapGenerator = _dereq_('./source-map-generator').SourceMapGenerator; + var util = _dereq_('./util'); + + /** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine === undefined ? null : aLine; + this.column = aColumn === undefined ? null : aColumn; + this.source = aSource === undefined ? null : aSource; + this.name = aName === undefined ? null : aName; + if (aChunks != null) this.add(aChunks); + } + + /** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + */ + SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // The generated code + // Processed fragments are removed from this array. + var remainingLines = aGeneratedCode.split('\n'); + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping === null) { + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(remainingLines.shift() + "\n"); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[0]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[0] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + } else { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + var code = ""; + // Associate full lines with "lastMapping" + do { + code += remainingLines.shift() + "\n"; + lastGeneratedLine++; + lastGeneratedColumn = 0; + } while (lastGeneratedLine < mapping.generatedLine); + // When we reached the correct line, we add code until we + // reach the correct column too. + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[0]; + code += nextLine.substr(0, mapping.generatedColumn); + remainingLines[0] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + // Create the SourceNode. + addMappingWithCode(lastMapping, code); + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[0]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[0] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + } + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + // Associate the remaining code in the current line with "lastMapping" + // and add the remaining lines without any mapping + addMappingWithCode(lastMapping, remainingLines.join("\n")); + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content) { + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + mapping.source, + code, + mapping.name)); + } + } + }; + + /** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk instanceof SourceNode || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk instanceof SourceNode || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk instanceof SourceNode) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } + }; + + /** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + + /** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild instanceof SourceNode) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; + }; + + /** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ + SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + + /** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i] instanceof SourceNode) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + + /** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; + }; + + /** + * Returns the string representation of this source node along with a source + * map. + */ + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + chunk.split('').forEach(function (ch) { + if (ch === '\n') { + generated.line++; + generated.column = 0; + } else { + generated.column++; + } + }); + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; + }; + + exports.SourceNode = SourceNode; + +}); + +},{"./source-map-generator":17,"./util":19,"amdefine":20}],19:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + /** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + + var urlRegexp = /([\w+\-.]+):\/\/((\w+:\w+)@)?([\w.]+)?(:(\d+))?(\S+)?/; + var dataUrlRegexp = /^data:.+\,.+/; + + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[3], + host: match[4], + port: match[6], + path: match[7] + }; + } + exports.urlParse = urlParse; + + function urlGenerate(aParsedUrl) { + var url = aParsedUrl.scheme + "://"; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + "@" + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + + function join(aRoot, aPath) { + var url; + + if (aPath.match(urlRegexp) || aPath.match(dataUrlRegexp)) { + return aPath; + } + + if (aPath.charAt(0) === '/' && (url = urlParse(aRoot))) { + url.path = aPath; + return urlGenerate(url); + } + + return aRoot.replace(/\/$/, '') + '/' + aPath; + } + exports.join = join; + + /** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ + function toSetString(aStr) { + return '$' + aStr; + } + exports.toSetString = toSetString; + + function fromSetString(aStr) { + return aStr.substr(1); + } + exports.fromSetString = fromSetString; + + function relative(aRoot, aPath) { + aRoot = aRoot.replace(/\/$/, ''); + + var url = urlParse(aRoot); + if (aPath.charAt(0) == "/" && url && url.path == "/") { + return aPath.slice(1); + } + + return aPath.indexOf(aRoot + '/') === 0 + ? aPath.substr(aRoot.length + 1) + : aPath; + } + exports.relative = relative; + + function strcmp(aStr1, aStr2) { + var s1 = aStr1 || ""; + var s2 = aStr2 || ""; + return (s1 > s2) - (s1 < s2); + } + + /** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp; + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp || onlyCompareOriginal) { + return cmp; + } + + cmp = strcmp(mappingA.name, mappingB.name); + if (cmp) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp) { + return cmp; + } + + return mappingA.generatedColumn - mappingB.generatedColumn; + }; + exports.compareByOriginalPositions = compareByOriginalPositions; + + /** + * Comparator between two mappings where the generated positions are + * compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ + function compareByGeneratedPositions(mappingA, mappingB, onlyCompareGenerated) { + var cmp; + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp || onlyCompareGenerated) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + }; + exports.compareByGeneratedPositions = compareByGeneratedPositions; + +}); + +},{"amdefine":20}],20:[function(_dereq_,module,exports){ +(function (process,__filename){ +/** vim: et:ts=4:sw=4:sts=4 + * @license amdefine 0.1.0 Copyright (c) 2011, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/amdefine for details + */ + +/*jslint node: true */ +/*global module, process */ +'use strict'; + +/** + * Creates a define for node. + * @param {Object} module the "module" object that is defined by Node for the + * current module. + * @param {Function} [requireFn]. Node's require function for the current module. + * It only needs to be passed in Node versions before 0.5, when module.require + * did not exist. + * @returns {Function} a define function that is usable for the current node + * module. + */ +function amdefine(module, requireFn) { + 'use strict'; + var defineCache = {}, + loaderCache = {}, + alreadyCalled = false, + path = _dereq_('path'), + makeRequire, stringRequire; + + /** + * Trims the . and .. from an array of path segments. + * It will keep a leading path segment if a .. will become + * the first path segment, to help with module name lookups, + * which act like paths, but can be remapped. But the end result, + * all paths that use this function should look normalized. + * NOTE: this method MODIFIES the input array. + * @param {Array} ary the array of path segments. + */ + function trimDots(ary) { + var i, part; + for (i = 0; ary[i]; i+= 1) { + part = ary[i]; + if (part === '.') { + ary.splice(i, 1); + i -= 1; + } else if (part === '..') { + if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { + //End of the line. Keep at least one non-dot + //path segment at the front so it can be mapped + //correctly to disk. Otherwise, there is likely + //no path mapping for a path starting with '..'. + //This can still fail, but catches the most reasonable + //uses of .. + break; + } else if (i > 0) { + ary.splice(i - 1, 2); + i -= 2; + } + } + } + } + + function normalize(name, baseName) { + var baseParts; + + //Adjust any relative paths. + if (name && name.charAt(0) === '.') { + //If have a base name, try to normalize against it, + //otherwise, assume it is a top-level require that will + //be relative to baseUrl in the end. + if (baseName) { + baseParts = baseName.split('/'); + baseParts = baseParts.slice(0, baseParts.length - 1); + baseParts = baseParts.concat(name.split('/')); + trimDots(baseParts); + name = baseParts.join('/'); + } + } + + return name; + } + + /** + * Create the normalize() function passed to a loader plugin's + * normalize method. + */ + function makeNormalize(relName) { + return function (name) { + return normalize(name, relName); + }; + } + + function makeLoad(id) { + function load(value) { + loaderCache[id] = value; + } + + load.fromText = function (id, text) { + //This one is difficult because the text can/probably uses + //define, and any relative paths and requires should be relative + //to that id was it would be found on disk. But this would require + //bootstrapping a module/require fairly deeply from node core. + //Not sure how best to go about that yet. + throw new Error('amdefine does not implement load.fromText'); + }; + + return load; + } + + makeRequire = function (systemRequire, exports, module, relId) { + function amdRequire(deps, callback) { + if (typeof deps === 'string') { + //Synchronous, single module require('') + return stringRequire(systemRequire, exports, module, deps, relId); + } else { + //Array of dependencies with a callback. + + //Convert the dependencies to modules. + deps = deps.map(function (depName) { + return stringRequire(systemRequire, exports, module, depName, relId); + }); + + //Wait for next tick to call back the require call. + process.nextTick(function () { + callback.apply(null, deps); + }); + } + } + + amdRequire.toUrl = function (filePath) { + if (filePath.indexOf('.') === 0) { + return normalize(filePath, path.dirname(module.filename)); + } else { + return filePath; + } + }; + + return amdRequire; + }; + + //Favor explicit value, passed in if the module wants to support Node 0.4. + requireFn = requireFn || function req() { + return module.require.apply(module, arguments); + }; + + function runFactory(id, deps, factory) { + var r, e, m, result; + + if (id) { + e = loaderCache[id] = {}; + m = { + id: id, + uri: __filename, + exports: e + }; + r = makeRequire(requireFn, e, m, id); + } else { + //Only support one define call per file + if (alreadyCalled) { + throw new Error('amdefine with no module ID cannot be called more than once per file.'); + } + alreadyCalled = true; + + //Use the real variables from node + //Use module.exports for exports, since + //the exports in here is amdefine exports. + e = module.exports; + m = module; + r = makeRequire(requireFn, e, m, module.id); + } + + //If there are dependencies, they are strings, so need + //to convert them to dependency values. + if (deps) { + deps = deps.map(function (depName) { + return r(depName); + }); + } + + //Call the factory with the right dependencies. + if (typeof factory === 'function') { + result = factory.apply(m.exports, deps); + } else { + result = factory; + } + + if (result !== undefined) { + m.exports = result; + if (id) { + loaderCache[id] = m.exports; + } + } + } + + stringRequire = function (systemRequire, exports, module, id, relId) { + //Split the ID by a ! so that + var index = id.indexOf('!'), + originalId = id, + prefix, plugin; + + if (index === -1) { + id = normalize(id, relId); + + //Straight module lookup. If it is one of the special dependencies, + //deal with it, otherwise, delegate to node. + if (id === 'require') { + return makeRequire(systemRequire, exports, module, relId); + } else if (id === 'exports') { + return exports; + } else if (id === 'module') { + return module; + } else if (loaderCache.hasOwnProperty(id)) { + return loaderCache[id]; + } else if (defineCache[id]) { + runFactory.apply(null, defineCache[id]); + return loaderCache[id]; + } else { + if(systemRequire) { + return systemRequire(originalId); + } else { + throw new Error('No module with ID: ' + id); + } + } + } else { + //There is a plugin in play. + prefix = id.substring(0, index); + id = id.substring(index + 1, id.length); + + plugin = stringRequire(systemRequire, exports, module, prefix, relId); + + if (plugin.normalize) { + id = plugin.normalize(id, makeNormalize(relId)); + } else { + //Normalize the ID normally. + id = normalize(id, relId); + } + + if (loaderCache[id]) { + return loaderCache[id]; + } else { + plugin.load(id, makeRequire(systemRequire, exports, module, relId), makeLoad(id), {}); + + return loaderCache[id]; + } + } + }; + + //Create a define function specific to the module asking for amdefine. + function define(id, deps, factory) { + if (Array.isArray(id)) { + factory = deps; + deps = id; + id = undefined; + } else if (typeof id !== 'string') { + factory = id; + id = deps = undefined; + } + + if (deps && !Array.isArray(deps)) { + factory = deps; + deps = undefined; + } + + if (!deps) { + deps = ['require', 'exports', 'module']; + } + + //Set up properties for this module. If an ID, then use + //internal cache. If no ID, then use the external variables + //for this node module. + if (id) { + //Put the module in deep freeze until there is a + //require call for it. + defineCache[id] = [id, deps, factory]; + } else { + runFactory(id, deps, factory); + } + } + + //define.require, which has access to all the values in the + //cache. Useful for AMD modules that all have IDs in the file, + //but need to finally export a value to node based on one of those + //IDs. + define.require = function (id) { + if (loaderCache[id]) { + return loaderCache[id]; + } + + if (defineCache[id]) { + runFactory.apply(null, defineCache[id]); + return loaderCache[id]; + } + }; + + define.amd = {}; + + return define; +} + +module.exports = amdefine; + +}).call(this,_dereq_('_process'),"/node_modules/jstransform/node_modules/source-map/node_modules/amdefine/amdefine.js") +},{"_process":8,"path":7}],21:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var docblockRe = /^\s*(\/\*\*(.|\r?\n)*?\*\/)/; +var ltrimRe = /^\s*/; +/** + * @param {String} contents + * @return {String} + */ +function extract(contents) { + var match = contents.match(docblockRe); + if (match) { + return match[0].replace(ltrimRe, '') || ''; + } + return ''; +} + + +var commentStartRe = /^\/\*\*?/; +var commentEndRe = /\*+\/$/; +var wsRe = /[\t ]+/g; +var stringStartRe = /(\r?\n|^) *\*/g; +var multilineRe = /(?:^|\r?\n) *(@[^\r\n]*?) *\r?\n *([^@\r\n\s][^@\r\n]+?) *\r?\n/g; +var propertyRe = /(?:^|\r?\n) *@(\S+) *([^\r\n]*)/g; + +/** + * @param {String} contents + * @return {Array} + */ +function parse(docblock) { + docblock = docblock + .replace(commentStartRe, '') + .replace(commentEndRe, '') + .replace(wsRe, ' ') + .replace(stringStartRe, '$1'); + + // Normalize multi-line directives + var prev = ''; + while (prev != docblock) { + prev = docblock; + docblock = docblock.replace(multilineRe, "\n$1 $2\n"); + } + docblock = docblock.trim(); + + var result = []; + var match; + while (match = propertyRe.exec(docblock)) { + result.push([match[1], match[2]]); + } + + return result; +} + +/** + * Same as parse but returns an object of prop: value instead of array of paris + * If a property appers more than once the last one will be returned + * + * @param {String} contents + * @return {Object} + */ +function parseAsObject(docblock) { + var pairs = parse(docblock); + var result = {}; + for (var i = 0; i < pairs.length; i++) { + result[pairs[i][0]] = pairs[i][1]; + } + return result; +} + + +exports.extract = extract; +exports.parse = parse; +exports.parseAsObject = parseAsObject; + +},{}],22:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/*jslint node: true*/ +"use strict"; + +var esprima = _dereq_('esprima-fb'); +var utils = _dereq_('./utils'); + +var getBoundaryNode = utils.getBoundaryNode; +var declareIdentInScope = utils.declareIdentInLocalScope; +var initScopeMetadata = utils.initScopeMetadata; +var Syntax = esprima.Syntax; + +/** + * @param {object} node + * @param {object} parentNode + * @return {boolean} + */ +function _nodeIsClosureScopeBoundary(node, parentNode) { + if (node.type === Syntax.Program) { + return true; + } + + var parentIsFunction = + parentNode.type === Syntax.FunctionDeclaration + || parentNode.type === Syntax.FunctionExpression + || parentNode.type === Syntax.ArrowFunctionExpression; + + var parentIsCurlylessArrowFunc = + parentNode.type === Syntax.ArrowFunctionExpression + && node === parentNode.body; + + return parentIsFunction + && (node.type === Syntax.BlockStatement || parentIsCurlylessArrowFunc); +} + +function _nodeIsBlockScopeBoundary(node, parentNode) { + if (node.type === Syntax.Program) { + return false; + } + + return node.type === Syntax.BlockStatement + && parentNode.type === Syntax.CatchClause; +} + +/** + * @param {object} node + * @param {array} path + * @param {object} state + */ +function traverse(node, path, state) { + /*jshint -W004*/ + // Create a scope stack entry if this is the first node we've encountered in + // its local scope + var startIndex = null; + var parentNode = path[0]; + if (!Array.isArray(node) && state.localScope.parentNode !== parentNode) { + if (_nodeIsClosureScopeBoundary(node, parentNode)) { + var scopeIsStrict = state.scopeIsStrict; + if (!scopeIsStrict + && (node.type === Syntax.BlockStatement + || node.type === Syntax.Program)) { + scopeIsStrict = + node.body.length > 0 + && node.body[0].type === Syntax.ExpressionStatement + && node.body[0].expression.type === Syntax.Literal + && node.body[0].expression.value === 'use strict'; + } + + if (node.type === Syntax.Program) { + startIndex = state.g.buffer.length; + state = utils.updateState(state, { + scopeIsStrict: scopeIsStrict + }); + } else { + startIndex = state.g.buffer.length + 1; + state = utils.updateState(state, { + localScope: { + parentNode: parentNode, + parentScope: state.localScope, + identifiers: {}, + tempVarIndex: 0, + tempVars: [] + }, + scopeIsStrict: scopeIsStrict + }); + + // All functions have an implicit 'arguments' object in scope + declareIdentInScope('arguments', initScopeMetadata(node), state); + + // Include function arg identifiers in the scope boundaries of the + // function + if (parentNode.params.length > 0) { + var param; + var metadata = initScopeMetadata(parentNode, path.slice(1), path[0]); + for (var i = 0; i < parentNode.params.length; i++) { + param = parentNode.params[i]; + if (param.type === Syntax.Identifier) { + declareIdentInScope(param.name, metadata, state); + } + } + } + + // Include rest arg identifiers in the scope boundaries of their + // functions + if (parentNode.rest) { + var metadata = initScopeMetadata( + parentNode, + path.slice(1), + path[0] + ); + declareIdentInScope(parentNode.rest.name, metadata, state); + } + + // Named FunctionExpressions scope their name within the body block of + // themselves only + if (parentNode.type === Syntax.FunctionExpression && parentNode.id) { + var metaData = + initScopeMetadata(parentNode, path.parentNodeslice, parentNode); + declareIdentInScope(parentNode.id.name, metaData, state); + } + } + + // Traverse and find all local identifiers in this closure first to + // account for function/variable declaration hoisting + collectClosureIdentsAndTraverse(node, path, state); + } + + if (_nodeIsBlockScopeBoundary(node, parentNode)) { + startIndex = state.g.buffer.length; + state = utils.updateState(state, { + localScope: { + parentNode: parentNode, + parentScope: state.localScope, + identifiers: {}, + tempVarIndex: 0, + tempVars: [] + } + }); + + if (parentNode.type === Syntax.CatchClause) { + var metadata = initScopeMetadata( + parentNode, + path.slice(1), + parentNode + ); + declareIdentInScope(parentNode.param.name, metadata, state); + } + collectBlockIdentsAndTraverse(node, path, state); + } + } + + // Only catchup() before and after traversing a child node + function traverser(node, path, state) { + node.range && utils.catchup(node.range[0], state); + traverse(node, path, state); + node.range && utils.catchup(node.range[1], state); + } + + utils.analyzeAndTraverse(walker, traverser, node, path, state); + + // Inject temp variables into the scope. + if (startIndex !== null) { + utils.injectTempVarDeclarations(state, startIndex); + } +} + +function collectClosureIdentsAndTraverse(node, path, state) { + utils.analyzeAndTraverse( + visitLocalClosureIdentifiers, + collectClosureIdentsAndTraverse, + node, + path, + state + ); +} + +function collectBlockIdentsAndTraverse(node, path, state) { + utils.analyzeAndTraverse( + visitLocalBlockIdentifiers, + collectBlockIdentsAndTraverse, + node, + path, + state + ); +} + +function visitLocalClosureIdentifiers(node, path, state) { + var metaData; + switch (node.type) { + case Syntax.ArrowFunctionExpression: + case Syntax.FunctionExpression: + // Function expressions don't get their names (if there is one) added to + // the closure scope they're defined in + return false; + case Syntax.ClassDeclaration: + case Syntax.ClassExpression: + case Syntax.FunctionDeclaration: + if (node.id) { + metaData = initScopeMetadata(getBoundaryNode(path), path.slice(), node); + declareIdentInScope(node.id.name, metaData, state); + } + return false; + case Syntax.VariableDeclarator: + // Variables have function-local scope + if (path[0].kind === 'var') { + metaData = initScopeMetadata(getBoundaryNode(path), path.slice(), node); + declareIdentInScope(node.id.name, metaData, state); + } + break; + } +} + +function visitLocalBlockIdentifiers(node, path, state) { + // TODO: Support 'let' here...maybe...one day...or something... + if (node.type === Syntax.CatchClause) { + return false; + } +} + +function walker(node, path, state) { + var visitors = state.g.visitors; + for (var i = 0; i < visitors.length; i++) { + if (visitors[i].test(node, path, state)) { + return visitors[i](traverse, node, path, state); + } + } +} + +var _astCache = {}; + +function getAstForSource(source, options) { + if (_astCache[source] && !options.disableAstCache) { + return _astCache[source]; + } + var ast = esprima.parse(source, { + comment: true, + loc: true, + range: true, + sourceType: options.sourceType + }); + if (!options.disableAstCache) { + _astCache[source] = ast; + } + return ast; +} + +/** + * Applies all available transformations to the source + * @param {array} visitors + * @param {string} source + * @param {?object} options + * @return {object} + */ +function transform(visitors, source, options) { + options = options || {}; + var ast; + try { + ast = getAstForSource(source, options); + } catch (e) { + e.message = 'Parse Error: ' + e.message; + throw e; + } + var state = utils.createState(source, ast, options); + state.g.visitors = visitors; + + if (options.sourceMap) { + var SourceMapGenerator = _dereq_('source-map').SourceMapGenerator; + state.g.sourceMap = new SourceMapGenerator({file: options.filename || 'transformed.js'}); + } + + traverse(ast, [], state); + utils.catchup(source.length, state); + + var ret = {code: state.g.buffer, extra: state.g.extra}; + if (options.sourceMap) { + ret.sourceMap = state.g.sourceMap; + ret.sourceMapFilename = options.filename || 'source.js'; + } + return ret; +} + +exports.transform = transform; +exports.Syntax = Syntax; + +},{"./utils":23,"esprima-fb":9,"source-map":11}],23:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/*jslint node: true*/ +var Syntax = _dereq_('esprima-fb').Syntax; +var leadingIndentRegexp = /(^|\n)( {2}|\t)/g; +var nonWhiteRegexp = /(\S)/g; + +/** + * A `state` object represents the state of the parser. It has "local" and + * "global" parts. Global contains parser position, source, etc. Local contains + * scope based properties like current class name. State should contain all the + * info required for transformation. It's the only mandatory object that is + * being passed to every function in transform chain. + * + * @param {string} source + * @param {object} transformOptions + * @return {object} + */ +function createState(source, rootNode, transformOptions) { + return { + /** + * A tree representing the current local scope (and its lexical scope chain) + * Useful for tracking identifiers from parent scopes, etc. + * @type {Object} + */ + localScope: { + parentNode: rootNode, + parentScope: null, + identifiers: {}, + tempVarIndex: 0, + tempVars: [] + }, + /** + * The name (and, if applicable, expression) of the super class + * @type {Object} + */ + superClass: null, + /** + * The namespace to use when munging identifiers + * @type {String} + */ + mungeNamespace: '', + /** + * Ref to the node for the current MethodDefinition + * @type {Object} + */ + methodNode: null, + /** + * Ref to the node for the FunctionExpression of the enclosing + * MethodDefinition + * @type {Object} + */ + methodFuncNode: null, + /** + * Name of the enclosing class + * @type {String} + */ + className: null, + /** + * Whether we're currently within a `strict` scope + * @type {Bool} + */ + scopeIsStrict: null, + /** + * Indentation offset + * @type {Number} + */ + indentBy: 0, + /** + * Global state (not affected by updateState) + * @type {Object} + */ + g: { + /** + * A set of general options that transformations can consider while doing + * a transformation: + * + * - minify + * Specifies that transformation steps should do their best to minify + * the output source when possible. This is useful for places where + * minification optimizations are possible with higher-level context + * info than what jsxmin can provide. + * + * For example, the ES6 class transform will minify munged private + * variables if this flag is set. + */ + opts: transformOptions, + /** + * Current position in the source code + * @type {Number} + */ + position: 0, + /** + * Auxiliary data to be returned by transforms + * @type {Object} + */ + extra: {}, + /** + * Buffer containing the result + * @type {String} + */ + buffer: '', + /** + * Source that is being transformed + * @type {String} + */ + source: source, + + /** + * Cached parsed docblock (see getDocblock) + * @type {object} + */ + docblock: null, + + /** + * Whether the thing was used + * @type {Boolean} + */ + tagNamespaceUsed: false, + + /** + * If using bolt xjs transformation + * @type {Boolean} + */ + isBolt: undefined, + + /** + * Whether to record source map (expensive) or not + * @type {SourceMapGenerator|null} + */ + sourceMap: null, + + /** + * Filename of the file being processed. Will be returned as a source + * attribute in the source map + */ + sourceMapFilename: 'source.js', + + /** + * Only when source map is used: last line in the source for which + * source map was generated + * @type {Number} + */ + sourceLine: 1, + + /** + * Only when source map is used: last line in the buffer for which + * source map was generated + * @type {Number} + */ + bufferLine: 1, + + /** + * The top-level Program AST for the original file. + */ + originalProgramAST: null, + + sourceColumn: 0, + bufferColumn: 0 + } + }; +} + +/** + * Updates a copy of a given state with "update" and returns an updated state. + * + * @param {object} state + * @param {object} update + * @return {object} + */ +function updateState(state, update) { + var ret = Object.create(state); + Object.keys(update).forEach(function(updatedKey) { + ret[updatedKey] = update[updatedKey]; + }); + return ret; +} + +/** + * Given a state fill the resulting buffer from the original source up to + * the end + * + * @param {number} end + * @param {object} state + * @param {?function} contentTransformer Optional callback to transform newly + * added content. + */ +function catchup(end, state, contentTransformer) { + if (end < state.g.position) { + // cannot move backwards + return; + } + var source = state.g.source.substring(state.g.position, end); + var transformed = updateIndent(source, state); + if (state.g.sourceMap && transformed) { + // record where we are + state.g.sourceMap.addMapping({ + generated: { line: state.g.bufferLine, column: state.g.bufferColumn }, + original: { line: state.g.sourceLine, column: state.g.sourceColumn }, + source: state.g.sourceMapFilename + }); + + // record line breaks in transformed source + var sourceLines = source.split('\n'); + var transformedLines = transformed.split('\n'); + // Add line break mappings between last known mapping and the end of the + // added piece. So for the code piece + // (foo, bar); + // > var x = 2; + // > var b = 3; + // var c = + // only add lines marked with ">": 2, 3. + for (var i = 1; i < sourceLines.length - 1; i++) { + state.g.sourceMap.addMapping({ + generated: { line: state.g.bufferLine, column: 0 }, + original: { line: state.g.sourceLine, column: 0 }, + source: state.g.sourceMapFilename + }); + state.g.sourceLine++; + state.g.bufferLine++; + } + // offset for the last piece + if (sourceLines.length > 1) { + state.g.sourceLine++; + state.g.bufferLine++; + state.g.sourceColumn = 0; + state.g.bufferColumn = 0; + } + state.g.sourceColumn += sourceLines[sourceLines.length - 1].length; + state.g.bufferColumn += + transformedLines[transformedLines.length - 1].length; + } + state.g.buffer += + contentTransformer ? contentTransformer(transformed) : transformed; + state.g.position = end; +} + +/** + * Returns original source for an AST node. + * @param {object} node + * @param {object} state + * @return {string} + */ +function getNodeSourceText(node, state) { + return state.g.source.substring(node.range[0], node.range[1]); +} + +function _replaceNonWhite(value) { + return value.replace(nonWhiteRegexp, ' '); +} + +/** + * Removes all non-whitespace characters + */ +function _stripNonWhite(value) { + return value.replace(nonWhiteRegexp, ''); +} + +/** + * Finds the position of the next instance of the specified syntactic char in + * the pending source. + * + * NOTE: This will skip instances of the specified char if they sit inside a + * comment body. + * + * NOTE: This function also assumes that the buffer's current position is not + * already within a comment or a string. This is rarely the case since all + * of the buffer-advancement utility methods tend to be used on syntactic + * nodes' range values -- but it's a small gotcha that's worth mentioning. + */ +function getNextSyntacticCharOffset(char, state) { + var pendingSource = state.g.source.substring(state.g.position); + var pendingSourceLines = pendingSource.split('\n'); + + var charOffset = 0; + var line; + var withinBlockComment = false; + var withinString = false; + lineLoop: while ((line = pendingSourceLines.shift()) !== undefined) { + var lineEndPos = charOffset + line.length; + charLoop: for (; charOffset < lineEndPos; charOffset++) { + var currChar = pendingSource[charOffset]; + if (currChar === '"' || currChar === '\'') { + withinString = !withinString; + continue charLoop; + } else if (withinString) { + continue charLoop; + } else if (charOffset + 1 < lineEndPos) { + var nextTwoChars = currChar + line[charOffset + 1]; + if (nextTwoChars === '//') { + charOffset = lineEndPos + 1; + continue lineLoop; + } else if (nextTwoChars === '/*') { + withinBlockComment = true; + charOffset += 1; + continue charLoop; + } else if (nextTwoChars === '*/') { + withinBlockComment = false; + charOffset += 1; + continue charLoop; + } + } + + if (!withinBlockComment && currChar === char) { + return charOffset + state.g.position; + } + } + + // Account for '\n' + charOffset++; + withinString = false; + } + + throw new Error('`' + char + '` not found!'); +} + +/** + * Catches up as `catchup` but replaces non-whitespace chars with spaces. + */ +function catchupWhiteOut(end, state) { + catchup(end, state, _replaceNonWhite); +} + +/** + * Catches up as `catchup` but removes all non-whitespace characters. + */ +function catchupWhiteSpace(end, state) { + catchup(end, state, _stripNonWhite); +} + +/** + * Removes all non-newline characters + */ +var reNonNewline = /[^\n]/g; +function stripNonNewline(value) { + return value.replace(reNonNewline, function() { + return ''; + }); +} + +/** + * Catches up as `catchup` but removes all non-newline characters. + * + * Equivalent to appending as many newlines as there are in the original source + * between the current position and `end`. + */ +function catchupNewlines(end, state) { + catchup(end, state, stripNonNewline); +} + + +/** + * Same as catchup but does not touch the buffer + * + * @param {number} end + * @param {object} state + */ +function move(end, state) { + // move the internal cursors + if (state.g.sourceMap) { + if (end < state.g.position) { + state.g.position = 0; + state.g.sourceLine = 1; + state.g.sourceColumn = 0; + } + + var source = state.g.source.substring(state.g.position, end); + var sourceLines = source.split('\n'); + if (sourceLines.length > 1) { + state.g.sourceLine += sourceLines.length - 1; + state.g.sourceColumn = 0; + } + state.g.sourceColumn += sourceLines[sourceLines.length - 1].length; + } + state.g.position = end; +} + +/** + * Appends a string of text to the buffer + * + * @param {string} str + * @param {object} state + */ +function append(str, state) { + if (state.g.sourceMap && str) { + state.g.sourceMap.addMapping({ + generated: { line: state.g.bufferLine, column: state.g.bufferColumn }, + original: { line: state.g.sourceLine, column: state.g.sourceColumn }, + source: state.g.sourceMapFilename + }); + var transformedLines = str.split('\n'); + if (transformedLines.length > 1) { + state.g.bufferLine += transformedLines.length - 1; + state.g.bufferColumn = 0; + } + state.g.bufferColumn += + transformedLines[transformedLines.length - 1].length; + } + state.g.buffer += str; +} + +/** + * Update indent using state.indentBy property. Indent is measured in + * double spaces. Updates a single line only. + * + * @param {string} str + * @param {object} state + * @return {string} + */ +function updateIndent(str, state) { + /*jshint -W004*/ + var indentBy = state.indentBy; + if (indentBy < 0) { + for (var i = 0; i < -indentBy; i++) { + str = str.replace(leadingIndentRegexp, '$1'); + } + } else { + for (var i = 0; i < indentBy; i++) { + str = str.replace(leadingIndentRegexp, '$1$2$2'); + } + } + return str; +} + +/** + * Calculates indent from the beginning of the line until "start" or the first + * character before start. + * @example + * " foo.bar()" + * ^ + * start + * indent will be " " + * + * @param {number} start + * @param {object} state + * @return {string} + */ +function indentBefore(start, state) { + var end = start; + start = start - 1; + + while (start > 0 && state.g.source[start] != '\n') { + if (!state.g.source[start].match(/[ \t]/)) { + end = start; + } + start--; + } + return state.g.source.substring(start + 1, end); +} + +function getDocblock(state) { + if (!state.g.docblock) { + var docblock = _dereq_('./docblock'); + state.g.docblock = + docblock.parseAsObject(docblock.extract(state.g.source)); + } + return state.g.docblock; +} + +function identWithinLexicalScope(identName, state, stopBeforeNode) { + var currScope = state.localScope; + while (currScope) { + if (currScope.identifiers[identName] !== undefined) { + return true; + } + + if (stopBeforeNode && currScope.parentNode === stopBeforeNode) { + break; + } + + currScope = currScope.parentScope; + } + return false; +} + +function identInLocalScope(identName, state) { + return state.localScope.identifiers[identName] !== undefined; +} + +/** + * @param {object} boundaryNode + * @param {?array} path + * @return {?object} node + */ +function initScopeMetadata(boundaryNode, path, node) { + return { + boundaryNode: boundaryNode, + bindingPath: path, + bindingNode: node + }; +} + +function declareIdentInLocalScope(identName, metaData, state) { + state.localScope.identifiers[identName] = { + boundaryNode: metaData.boundaryNode, + path: metaData.bindingPath, + node: metaData.bindingNode, + state: Object.create(state) + }; +} + +function getLexicalBindingMetadata(identName, state) { + var currScope = state.localScope; + while (currScope) { + if (currScope.identifiers[identName] !== undefined) { + return currScope.identifiers[identName]; + } + + currScope = currScope.parentScope; + } +} + +function getLocalBindingMetadata(identName, state) { + return state.localScope.identifiers[identName]; +} + +/** + * Apply the given analyzer function to the current node. If the analyzer + * doesn't return false, traverse each child of the current node using the given + * traverser function. + * + * @param {function} analyzer + * @param {function} traverser + * @param {object} node + * @param {array} path + * @param {object} state + */ +function analyzeAndTraverse(analyzer, traverser, node, path, state) { + if (node.type) { + if (analyzer(node, path, state) === false) { + return; + } + path.unshift(node); + } + + getOrderedChildren(node).forEach(function(child) { + traverser(child, path, state); + }); + + node.type && path.shift(); +} + +/** + * It is crucial that we traverse in order, or else catchup() on a later + * node that is processed out of order can move the buffer past a node + * that we haven't handled yet, preventing us from modifying that node. + * + * This can happen when a node has multiple properties containing children. + * For example, XJSElement nodes have `openingElement`, `closingElement` and + * `children`. If we traverse `openingElement`, then `closingElement`, then + * when we get to `children`, the buffer has already caught up to the end of + * the closing element, after the children. + * + * This is basically a Schwartzian transform. Collects an array of children, + * each one represented as [child, startIndex]; sorts the array by start + * index; then traverses the children in that order. + */ +function getOrderedChildren(node) { + var queue = []; + for (var key in node) { + if (node.hasOwnProperty(key)) { + enqueueNodeWithStartIndex(queue, node[key]); + } + } + queue.sort(function(a, b) { return a[1] - b[1]; }); + return queue.map(function(pair) { return pair[0]; }); +} + +/** + * Helper function for analyzeAndTraverse which queues up all of the children + * of the given node. + * + * Children can also be found in arrays, so we basically want to merge all of + * those arrays together so we can sort them and then traverse the children + * in order. + * + * One example is the Program node. It contains `body` and `comments`, both + * arrays. Lexographically, comments are interspersed throughout the body + * nodes, but esprima's AST groups them together. + */ +function enqueueNodeWithStartIndex(queue, node) { + if (typeof node !== 'object' || node === null) { + return; + } + if (node.range) { + queue.push([node, node.range[0]]); + } else if (Array.isArray(node)) { + for (var ii = 0; ii < node.length; ii++) { + enqueueNodeWithStartIndex(queue, node[ii]); + } + } +} + +/** + * Checks whether a node or any of its sub-nodes contains + * a syntactic construct of the passed type. + * @param {object} node - AST node to test. + * @param {string} type - node type to lookup. + */ +function containsChildOfType(node, type) { + return containsChildMatching(node, function(node) { + return node.type === type; + }); +} + +function containsChildMatching(node, matcher) { + var foundMatchingChild = false; + function nodeTypeAnalyzer(node) { + if (matcher(node) === true) { + foundMatchingChild = true; + return false; + } + } + function nodeTypeTraverser(child, path, state) { + if (!foundMatchingChild) { + foundMatchingChild = containsChildMatching(child, matcher); + } + } + analyzeAndTraverse( + nodeTypeAnalyzer, + nodeTypeTraverser, + node, + [] + ); + return foundMatchingChild; +} + +var scopeTypes = {}; +scopeTypes[Syntax.ArrowFunctionExpression] = true; +scopeTypes[Syntax.FunctionExpression] = true; +scopeTypes[Syntax.FunctionDeclaration] = true; +scopeTypes[Syntax.Program] = true; + +function getBoundaryNode(path) { + for (var ii = 0; ii < path.length; ++ii) { + if (scopeTypes[path[ii].type]) { + return path[ii]; + } + } + throw new Error( + 'Expected to find a node with one of the following types in path:\n' + + JSON.stringify(Object.keys(scopeTypes)) + ); +} + +function getTempVar(tempVarIndex) { + return '$__' + tempVarIndex; +} + +function injectTempVar(state) { + var tempVar = '$__' + (state.localScope.tempVarIndex++); + state.localScope.tempVars.push(tempVar); + return tempVar; +} + +function injectTempVarDeclarations(state, index) { + if (state.localScope.tempVars.length) { + state.g.buffer = + state.g.buffer.slice(0, index) + + 'var ' + state.localScope.tempVars.join(', ') + ';' + + state.g.buffer.slice(index); + state.localScope.tempVars = []; + } +} + +exports.analyzeAndTraverse = analyzeAndTraverse; +exports.append = append; +exports.catchup = catchup; +exports.catchupNewlines = catchupNewlines; +exports.catchupWhiteOut = catchupWhiteOut; +exports.catchupWhiteSpace = catchupWhiteSpace; +exports.containsChildMatching = containsChildMatching; +exports.containsChildOfType = containsChildOfType; +exports.createState = createState; +exports.declareIdentInLocalScope = declareIdentInLocalScope; +exports.getBoundaryNode = getBoundaryNode; +exports.getDocblock = getDocblock; +exports.getLexicalBindingMetadata = getLexicalBindingMetadata; +exports.getLocalBindingMetadata = getLocalBindingMetadata; +exports.getNextSyntacticCharOffset = getNextSyntacticCharOffset; +exports.getNodeSourceText = getNodeSourceText; +exports.getOrderedChildren = getOrderedChildren; +exports.getTempVar = getTempVar; +exports.identInLocalScope = identInLocalScope; +exports.identWithinLexicalScope = identWithinLexicalScope; +exports.indentBefore = indentBefore; +exports.initScopeMetadata = initScopeMetadata; +exports.injectTempVar = injectTempVar; +exports.injectTempVarDeclarations = injectTempVarDeclarations; +exports.move = move; +exports.scopeTypes = scopeTypes; +exports.updateIndent = updateIndent; +exports.updateState = updateState; + +},{"./docblock":21,"esprima-fb":9}],24:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*global exports:true*/ + +/** + * Desugars ES6 Arrow functions to ES3 function expressions. + * If the function contains `this` expression -- automatically + * binds the function to current value of `this`. + * + * Single parameter, simple expression: + * + * [1, 2, 3].map(x => x * x); + * + * [1, 2, 3].map(function(x) { return x * x; }); + * + * Several parameters, complex block: + * + * this.users.forEach((user, idx) => { + * return this.isActive(idx) && this.send(user); + * }); + * + * this.users.forEach(function(user, idx) { + * return this.isActive(idx) && this.send(user); + * }.bind(this)); + * + */ +var restParamVisitors = _dereq_('./es6-rest-param-visitors'); +var destructuringVisitors = _dereq_('./es6-destructuring-visitors'); + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +/** + * @public + */ +function visitArrowFunction(traverse, node, path, state) { + var notInExpression = (path[0].type === Syntax.ExpressionStatement); + + // Wrap a function into a grouping operator, if it's not + // in the expression position. + if (notInExpression) { + utils.append('(', state); + } + + utils.append('function', state); + renderParams(traverse, node, path, state); + + // Skip arrow. + utils.catchupWhiteSpace(node.body.range[0], state); + + var renderBody = node.body.type == Syntax.BlockStatement + ? renderStatementBody + : renderExpressionBody; + + path.unshift(node); + renderBody(traverse, node, path, state); + path.shift(); + + // Bind the function only if `this` value is used + // inside it or inside any sub-expression. + var containsBindingSyntax = + utils.containsChildMatching(node.body, function(node) { + return node.type === Syntax.ThisExpression + || (node.type === Syntax.Identifier + && node.name === "super"); + }); + + if (containsBindingSyntax) { + utils.append('.bind(this)', state); + } + + utils.catchupWhiteSpace(node.range[1], state); + + // Close wrapper if not in the expression. + if (notInExpression) { + utils.append(')', state); + } + + return false; +} + +function renderParams(traverse, node, path, state) { + // To preserve inline typechecking directives, we + // distinguish between parens-free and paranthesized single param. + if (isParensFreeSingleParam(node, state) || !node.params.length) { + utils.append('(', state); + } + if (node.params.length !== 0) { + path.unshift(node); + traverse(node.params, path, state); + path.unshift(); + } + utils.append(')', state); +} + +function isParensFreeSingleParam(node, state) { + return node.params.length === 1 && + state.g.source[state.g.position] !== '('; +} + +function renderExpressionBody(traverse, node, path, state) { + // Wrap simple expression bodies into a block + // with explicit return statement. + utils.append('{', state); + + // Special handling of rest param. + if (node.rest) { + utils.append( + restParamVisitors.renderRestParamSetup(node, state), + state + ); + } + + // Special handling of destructured params. + destructuringVisitors.renderDestructuredComponents( + node, + utils.updateState(state, { + localScope: { + parentNode: state.parentNode, + parentScope: state.parentScope, + identifiers: state.identifiers, + tempVarIndex: 0 + } + }) + ); + + utils.append('return ', state); + renderStatementBody(traverse, node, path, state); + utils.append(';}', state); +} + +function renderStatementBody(traverse, node, path, state) { + traverse(node.body, path, state); + utils.catchup(node.body.range[1], state); +} + +visitArrowFunction.test = function(node, path, state) { + return node.type === Syntax.ArrowFunctionExpression; +}; + +exports.visitorList = [ + visitArrowFunction +]; + + +},{"../src/utils":23,"./es6-destructuring-visitors":27,"./es6-rest-param-visitors":30,"esprima-fb":9}],25:[function(_dereq_,module,exports){ +/** + * Copyright 2004-present Facebook. All Rights Reserved. + */ +/*global exports:true*/ + +/** + * Implements ES6 call spread. + * + * instance.method(a, b, c, ...d) + * + * instance.method.apply(instance, [a, b, c].concat(d)) + * + */ + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +function process(traverse, node, path, state) { + utils.move(node.range[0], state); + traverse(node, path, state); + utils.catchup(node.range[1], state); +} + +function visitCallSpread(traverse, node, path, state) { + utils.catchup(node.range[0], state); + + if (node.type === Syntax.NewExpression) { + // Input = new Set(1, 2, ...list) + // Output = new (Function.prototype.bind.apply(Set, [null, 1, 2].concat(list))) + utils.append('new (Function.prototype.bind.apply(', state); + process(traverse, node.callee, path, state); + } else if (node.callee.type === Syntax.MemberExpression) { + // Input = get().fn(1, 2, ...more) + // Output = (_ = get()).fn.apply(_, [1, 2].apply(more)) + var tempVar = utils.injectTempVar(state); + utils.append('(' + tempVar + ' = ', state); + process(traverse, node.callee.object, path, state); + utils.append(')', state); + if (node.callee.property.type === Syntax.Identifier) { + utils.append('.', state); + process(traverse, node.callee.property, path, state); + } else { + utils.append('[', state); + process(traverse, node.callee.property, path, state); + utils.append(']', state); + } + utils.append('.apply(' + tempVar, state); + } else { + // Input = max(1, 2, ...list) + // Output = max.apply(null, [1, 2].concat(list)) + var needsToBeWrappedInParenthesis = + node.callee.type === Syntax.FunctionDeclaration || + node.callee.type === Syntax.FunctionExpression; + if (needsToBeWrappedInParenthesis) { + utils.append('(', state); + } + process(traverse, node.callee, path, state); + if (needsToBeWrappedInParenthesis) { + utils.append(')', state); + } + utils.append('.apply(null', state); + } + utils.append(', ', state); + + var args = node.arguments.slice(); + var spread = args.pop(); + if (args.length || node.type === Syntax.NewExpression) { + utils.append('[', state); + if (node.type === Syntax.NewExpression) { + utils.append('null' + (args.length ? ', ' : ''), state); + } + while (args.length) { + var arg = args.shift(); + utils.move(arg.range[0], state); + traverse(arg, path, state); + if (args.length) { + utils.catchup(args[0].range[0], state); + } else { + utils.catchup(arg.range[1], state); + } + } + utils.append('].concat(', state); + process(traverse, spread.argument, path, state); + utils.append(')', state); + } else { + process(traverse, spread.argument, path, state); + } + utils.append(node.type === Syntax.NewExpression ? '))' : ')', state); + + utils.move(node.range[1], state); + return false; +} + +visitCallSpread.test = function(node, path, state) { + return ( + ( + node.type === Syntax.CallExpression || + node.type === Syntax.NewExpression + ) && + node.arguments.length > 0 && + node.arguments[node.arguments.length - 1].type === Syntax.SpreadElement + ); +}; + +exports.visitorList = [ + visitCallSpread +]; + +},{"../src/utils":23,"esprima-fb":9}],26:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*jslint node:true*/ + +/** + * @typechecks + */ +'use strict'; + +var base62 = _dereq_('base62'); +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); +var reservedWordsHelper = _dereq_('./reserved-words-helper'); + +var declareIdentInLocalScope = utils.declareIdentInLocalScope; +var initScopeMetadata = utils.initScopeMetadata; + +var SUPER_PROTO_IDENT_PREFIX = '____SuperProtoOf'; + +var _anonClassUUIDCounter = 0; +var _mungedSymbolMaps = {}; + +function resetSymbols() { + _anonClassUUIDCounter = 0; + _mungedSymbolMaps = {}; +} + +/** + * Used to generate a unique class for use with code-gens for anonymous class + * expressions. + * + * @param {object} state + * @return {string} + */ +function _generateAnonymousClassName(state) { + var mungeNamespace = state.mungeNamespace || ''; + return '____Class' + mungeNamespace + base62.encode(_anonClassUUIDCounter++); +} + +/** + * Given an identifier name, munge it using the current state's mungeNamespace. + * + * @param {string} identName + * @param {object} state + * @return {string} + */ +function _getMungedName(identName, state) { + var mungeNamespace = state.mungeNamespace; + var shouldMinify = state.g.opts.minify; + + if (shouldMinify) { + if (!_mungedSymbolMaps[mungeNamespace]) { + _mungedSymbolMaps[mungeNamespace] = { + symbolMap: {}, + identUUIDCounter: 0 + }; + } + + var symbolMap = _mungedSymbolMaps[mungeNamespace].symbolMap; + if (!symbolMap[identName]) { + symbolMap[identName] = + base62.encode(_mungedSymbolMaps[mungeNamespace].identUUIDCounter++); + } + identName = symbolMap[identName]; + } + return '$' + mungeNamespace + identName; +} + +/** + * Extracts super class information from a class node. + * + * Information includes name of the super class and/or the expression string + * (if extending from an expression) + * + * @param {object} node + * @param {object} state + * @return {object} + */ +function _getSuperClassInfo(node, state) { + var ret = { + name: null, + expression: null + }; + if (node.superClass) { + if (node.superClass.type === Syntax.Identifier) { + ret.name = node.superClass.name; + } else { + // Extension from an expression + ret.name = _generateAnonymousClassName(state); + ret.expression = state.g.source.substring( + node.superClass.range[0], + node.superClass.range[1] + ); + } + } + return ret; +} + +/** + * Used with .filter() to find the constructor method in a list of + * MethodDefinition nodes. + * + * @param {object} classElement + * @return {boolean} + */ +function _isConstructorMethod(classElement) { + return classElement.type === Syntax.MethodDefinition && + classElement.key.type === Syntax.Identifier && + classElement.key.name === 'constructor'; +} + +/** + * @param {object} node + * @param {object} state + * @return {boolean} + */ +function _shouldMungeIdentifier(node, state) { + return ( + !!state.methodFuncNode && + !utils.getDocblock(state).hasOwnProperty('preventMunge') && + /^_(?!_)/.test(node.name) + ); +} + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitClassMethod(traverse, node, path, state) { + if (!state.g.opts.es5 && (node.kind === 'get' || node.kind === 'set')) { + throw new Error( + 'This transform does not support ' + node.kind + 'ter methods for ES6 ' + + 'classes. (line: ' + node.loc.start.line + ', col: ' + + node.loc.start.column + ')' + ); + } + state = utils.updateState(state, { + methodNode: node + }); + utils.catchup(node.range[0], state); + path.unshift(node); + traverse(node.value, path, state); + path.shift(); + return false; +} +visitClassMethod.test = function(node, path, state) { + return node.type === Syntax.MethodDefinition; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitClassFunctionExpression(traverse, node, path, state) { + var methodNode = path[0]; + var isGetter = methodNode.kind === 'get'; + var isSetter = methodNode.kind === 'set'; + + state = utils.updateState(state, { + methodFuncNode: node + }); + + if (methodNode.key.name === 'constructor') { + utils.append('function ' + state.className, state); + } else { + var methodAccessorComputed = false; + var methodAccessor; + var prototypeOrStatic = methodNode["static"] ? '' : '.prototype'; + var objectAccessor = state.className + prototypeOrStatic; + + if (methodNode.key.type === Syntax.Identifier) { + // foo() {} + methodAccessor = methodNode.key.name; + if (_shouldMungeIdentifier(methodNode.key, state)) { + methodAccessor = _getMungedName(methodAccessor, state); + } + if (isGetter || isSetter) { + methodAccessor = JSON.stringify(methodAccessor); + } else if (reservedWordsHelper.isReservedWord(methodAccessor)) { + methodAccessorComputed = true; + methodAccessor = JSON.stringify(methodAccessor); + } + } else if (methodNode.key.type === Syntax.Literal) { + // 'foo bar'() {} | get 'foo bar'() {} | set 'foo bar'() {} + methodAccessor = JSON.stringify(methodNode.key.value); + methodAccessorComputed = true; + } + + if (isSetter || isGetter) { + utils.append( + 'Object.defineProperty(' + + objectAccessor + ',' + + methodAccessor + ',' + + '{configurable:true,' + + methodNode.kind + ':function', + state + ); + } else { + if (state.g.opts.es3) { + if (methodAccessorComputed) { + methodAccessor = '[' + methodAccessor + ']'; + } else { + methodAccessor = '.' + methodAccessor; + } + utils.append( + objectAccessor + + methodAccessor + '=function' + (node.generator ? '*' : ''), + state + ); + } else { + if (!methodAccessorComputed) { + methodAccessor = JSON.stringify(methodAccessor); + } + utils.append( + 'Object.defineProperty(' + + objectAccessor + ',' + + methodAccessor + ',' + + '{writable:true,configurable:true,' + + 'value:function' + (node.generator ? '*' : ''), + state + ); + } + } + } + utils.move(methodNode.key.range[1], state); + utils.append('(', state); + + var params = node.params; + if (params.length > 0) { + utils.catchupNewlines(params[0].range[0], state); + for (var i = 0; i < params.length; i++) { + utils.catchup(node.params[i].range[0], state); + path.unshift(node); + traverse(params[i], path, state); + path.shift(); + } + } + + var closingParenPosition = utils.getNextSyntacticCharOffset(')', state); + utils.catchupWhiteSpace(closingParenPosition, state); + + var openingBracketPosition = utils.getNextSyntacticCharOffset('{', state); + utils.catchup(openingBracketPosition + 1, state); + + if (!state.scopeIsStrict) { + utils.append('"use strict";', state); + state = utils.updateState(state, { + scopeIsStrict: true + }); + } + utils.move(node.body.range[0] + '{'.length, state); + + path.unshift(node); + traverse(node.body, path, state); + path.shift(); + utils.catchup(node.body.range[1], state); + + if (methodNode.key.name !== 'constructor') { + if (isGetter || isSetter || !state.g.opts.es3) { + utils.append('})', state); + } + utils.append(';', state); + } + return false; +} +visitClassFunctionExpression.test = function(node, path, state) { + return node.type === Syntax.FunctionExpression + && path[0].type === Syntax.MethodDefinition; +}; + +function visitClassMethodParam(traverse, node, path, state) { + var paramName = node.name; + if (_shouldMungeIdentifier(node, state)) { + paramName = _getMungedName(node.name, state); + } + utils.append(paramName, state); + utils.move(node.range[1], state); +} +visitClassMethodParam.test = function(node, path, state) { + if (!path[0] || !path[1]) { + return; + } + + var parentFuncExpr = path[0]; + var parentClassMethod = path[1]; + + return parentFuncExpr.type === Syntax.FunctionExpression + && parentClassMethod.type === Syntax.MethodDefinition + && node.type === Syntax.Identifier; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function _renderClassBody(traverse, node, path, state) { + var className = state.className; + var superClass = state.superClass; + + // Set up prototype of constructor on same line as `extends` for line-number + // preservation. This relies on function-hoisting if a constructor function is + // defined in the class body. + if (superClass.name) { + // If the super class is an expression, we need to memoize the output of the + // expression into the generated class name variable and use that to refer + // to the super class going forward. Example: + // + // class Foo extends mixin(Bar, Baz) {} + // --transforms to-- + // function Foo() {} var ____Class0Blah = mixin(Bar, Baz); + if (superClass.expression !== null) { + utils.append( + 'var ' + superClass.name + '=' + superClass.expression + ';', + state + ); + } + + var keyName = superClass.name + '____Key'; + var keyNameDeclarator = ''; + if (!utils.identWithinLexicalScope(keyName, state)) { + keyNameDeclarator = 'var '; + declareIdentInLocalScope(keyName, initScopeMetadata(node), state); + } + utils.append( + 'for(' + keyNameDeclarator + keyName + ' in ' + superClass.name + '){' + + 'if(' + superClass.name + '.hasOwnProperty(' + keyName + ')){' + + className + '[' + keyName + ']=' + + superClass.name + '[' + keyName + '];' + + '}' + + '}', + state + ); + + var superProtoIdentStr = SUPER_PROTO_IDENT_PREFIX + superClass.name; + if (!utils.identWithinLexicalScope(superProtoIdentStr, state)) { + utils.append( + 'var ' + superProtoIdentStr + '=' + superClass.name + '===null?' + + 'null:' + superClass.name + '.prototype;', + state + ); + declareIdentInLocalScope(superProtoIdentStr, initScopeMetadata(node), state); + } + + utils.append( + className + '.prototype=Object.create(' + superProtoIdentStr + ');', + state + ); + utils.append( + className + '.prototype.constructor=' + className + ';', + state + ); + utils.append( + className + '.__superConstructor__=' + superClass.name + ';', + state + ); + } + + // If there's no constructor method specified in the class body, create an + // empty constructor function at the top (same line as the class keyword) + if (!node.body.body.filter(_isConstructorMethod).pop()) { + utils.append('function ' + className + '(){', state); + if (!state.scopeIsStrict) { + utils.append('"use strict";', state); + } + if (superClass.name) { + utils.append( + 'if(' + superClass.name + '!==null){' + + superClass.name + '.apply(this,arguments);}', + state + ); + } + utils.append('}', state); + } + + utils.move(node.body.range[0] + '{'.length, state); + traverse(node.body, path, state); + utils.catchupWhiteSpace(node.range[1], state); +} + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitClassDeclaration(traverse, node, path, state) { + var className = node.id.name; + var superClass = _getSuperClassInfo(node, state); + + state = utils.updateState(state, { + mungeNamespace: className, + className: className, + superClass: superClass + }); + + _renderClassBody(traverse, node, path, state); + + return false; +} +visitClassDeclaration.test = function(node, path, state) { + return node.type === Syntax.ClassDeclaration; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitClassExpression(traverse, node, path, state) { + var className = node.id && node.id.name || _generateAnonymousClassName(state); + var superClass = _getSuperClassInfo(node, state); + + utils.append('(function(){', state); + + state = utils.updateState(state, { + mungeNamespace: className, + className: className, + superClass: superClass + }); + + _renderClassBody(traverse, node, path, state); + + utils.append('return ' + className + ';})()', state); + return false; +} +visitClassExpression.test = function(node, path, state) { + return node.type === Syntax.ClassExpression; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitPrivateIdentifier(traverse, node, path, state) { + utils.append(_getMungedName(node.name, state), state); + utils.move(node.range[1], state); +} +visitPrivateIdentifier.test = function(node, path, state) { + if (node.type === Syntax.Identifier && _shouldMungeIdentifier(node, state)) { + // Always munge non-computed properties of MemberExpressions + // (a la preventing access of properties of unowned objects) + if (path[0].type === Syntax.MemberExpression && path[0].object !== node + && path[0].computed === false) { + return true; + } + + // Always munge identifiers that were declared within the method function + // scope + if (utils.identWithinLexicalScope(node.name, state, state.methodFuncNode)) { + return true; + } + + // Always munge private keys on object literals defined within a method's + // scope. + if (path[0].type === Syntax.Property + && path[1].type === Syntax.ObjectExpression) { + return true; + } + + // Always munge function parameters + if (path[0].type === Syntax.FunctionExpression + || path[0].type === Syntax.FunctionDeclaration + || path[0].type === Syntax.ArrowFunctionExpression) { + for (var i = 0; i < path[0].params.length; i++) { + if (path[0].params[i] === node) { + return true; + } + } + } + } + return false; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitSuperCallExpression(traverse, node, path, state) { + var superClassName = state.superClass.name; + + if (node.callee.type === Syntax.Identifier) { + if (_isConstructorMethod(state.methodNode)) { + utils.append(superClassName + '.call(', state); + } else { + var protoProp = SUPER_PROTO_IDENT_PREFIX + superClassName; + if (state.methodNode.key.type === Syntax.Identifier) { + protoProp += '.' + state.methodNode.key.name; + } else if (state.methodNode.key.type === Syntax.Literal) { + protoProp += '[' + JSON.stringify(state.methodNode.key.value) + ']'; + } + utils.append(protoProp + ".call(", state); + } + utils.move(node.callee.range[1], state); + } else if (node.callee.type === Syntax.MemberExpression) { + utils.append(SUPER_PROTO_IDENT_PREFIX + superClassName, state); + utils.move(node.callee.object.range[1], state); + + if (node.callee.computed) { + // ["a" + "b"] + utils.catchup(node.callee.property.range[1] + ']'.length, state); + } else { + // .ab + utils.append('.' + node.callee.property.name, state); + } + + utils.append('.call(', state); + utils.move(node.callee.range[1], state); + } + + utils.append('this', state); + if (node.arguments.length > 0) { + utils.append(',', state); + utils.catchupWhiteSpace(node.arguments[0].range[0], state); + traverse(node.arguments, path, state); + } + + utils.catchupWhiteSpace(node.range[1], state); + utils.append(')', state); + return false; +} +visitSuperCallExpression.test = function(node, path, state) { + if (state.superClass && node.type === Syntax.CallExpression) { + var callee = node.callee; + if (callee.type === Syntax.Identifier && callee.name === 'super' + || callee.type == Syntax.MemberExpression + && callee.object.name === 'super') { + return true; + } + } + return false; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitSuperMemberExpression(traverse, node, path, state) { + var superClassName = state.superClass.name; + + utils.append(SUPER_PROTO_IDENT_PREFIX + superClassName, state); + utils.move(node.object.range[1], state); +} +visitSuperMemberExpression.test = function(node, path, state) { + return state.superClass + && node.type === Syntax.MemberExpression + && node.object.type === Syntax.Identifier + && node.object.name === 'super'; +}; + +exports.resetSymbols = resetSymbols; + +exports.visitorList = [ + visitClassDeclaration, + visitClassExpression, + visitClassFunctionExpression, + visitClassMethod, + visitClassMethodParam, + visitPrivateIdentifier, + visitSuperCallExpression, + visitSuperMemberExpression +]; + +},{"../src/utils":23,"./reserved-words-helper":34,"base62":10,"esprima-fb":9}],27:[function(_dereq_,module,exports){ +/** + * Copyright 2014 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*global exports:true*/ + +/** + * Implements ES6 destructuring assignment and pattern matchng. + * + * function init({port, ip, coords: [x, y]}) { + * return (x && y) ? {id, port} : {ip}; + * }; + * + * function init($__0) { + * var + * port = $__0.port, + * ip = $__0.ip, + * $__1 = $__0.coords, + * x = $__1[0], + * y = $__1[1]; + * return (x && y) ? {id, port} : {ip}; + * } + * + * var x, {ip, port} = init({ip, port}); + * + * var x, $__0 = init({ip, port}), ip = $__0.ip, port = $__0.port; + * + */ +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +var reservedWordsHelper = _dereq_('./reserved-words-helper'); +var restParamVisitors = _dereq_('./es6-rest-param-visitors'); +var restPropertyHelpers = _dereq_('./es7-rest-property-helpers'); + +// ------------------------------------------------------- +// 1. Structured variable declarations. +// +// var [a, b] = [b, a]; +// var {x, y} = {y, x}; +// ------------------------------------------------------- + +function visitStructuredVariable(traverse, node, path, state) { + // Allocate new temp for the pattern. + utils.append(utils.getTempVar(state.localScope.tempVarIndex) + '=', state); + // Skip the pattern and assign the init to the temp. + utils.catchupWhiteSpace(node.init.range[0], state); + traverse(node.init, path, state); + utils.catchup(node.init.range[1], state); + // Render the destructured data. + utils.append(',' + getDestructuredComponents(node.id, state), state); + state.localScope.tempVarIndex++; + return false; +} + +visitStructuredVariable.test = function(node, path, state) { + return node.type === Syntax.VariableDeclarator && + isStructuredPattern(node.id); +}; + +function isStructuredPattern(node) { + return node.type === Syntax.ObjectPattern || + node.type === Syntax.ArrayPattern; +} + +// Main function which does actual recursive destructuring +// of nested complex structures. +function getDestructuredComponents(node, state) { + var tmpIndex = state.localScope.tempVarIndex; + var components = []; + var patternItems = getPatternItems(node); + + for (var idx = 0; idx < patternItems.length; idx++) { + var item = patternItems[idx]; + if (!item) { + continue; + } + + if (item.type === Syntax.SpreadElement) { + // Spread/rest of an array. + // TODO(dmitrys): support spread in the middle of a pattern + // and also for function param patterns: [x, ...xs, y] + components.push(item.argument.name + + '=Array.prototype.slice.call(' + + utils.getTempVar(tmpIndex) + ',' + idx + ')' + ); + continue; + } + + if (item.type === Syntax.SpreadProperty) { + var restExpression = restPropertyHelpers.renderRestExpression( + utils.getTempVar(tmpIndex), + patternItems + ); + components.push(item.argument.name + '=' + restExpression); + continue; + } + + // Depending on pattern type (Array or Object), we get + // corresponding pattern item parts. + var accessor = getPatternItemAccessor(node, item, tmpIndex, idx); + var value = getPatternItemValue(node, item); + + // TODO(dmitrys): implement default values: {x, y=5} + if (value.type === Syntax.Identifier) { + // Simple pattern item. + components.push(value.name + '=' + accessor); + } else { + // Complex sub-structure. + components.push( + utils.getTempVar(++state.localScope.tempVarIndex) + '=' + accessor + + ',' + getDestructuredComponents(value, state) + ); + } + } + + return components.join(','); +} + +function getPatternItems(node) { + return node.properties || node.elements; +} + +function getPatternItemAccessor(node, patternItem, tmpIndex, idx) { + var tmpName = utils.getTempVar(tmpIndex); + if (node.type === Syntax.ObjectPattern) { + if (reservedWordsHelper.isReservedWord(patternItem.key.name)) { + return tmpName + '["' + patternItem.key.name + '"]'; + } else if (patternItem.key.type === Syntax.Literal) { + return tmpName + '[' + JSON.stringify(patternItem.key.value) + ']'; + } else if (patternItem.key.type === Syntax.Identifier) { + return tmpName + '.' + patternItem.key.name; + } + } else if (node.type === Syntax.ArrayPattern) { + return tmpName + '[' + idx + ']'; + } +} + +function getPatternItemValue(node, patternItem) { + return node.type === Syntax.ObjectPattern + ? patternItem.value + : patternItem; +} + +// ------------------------------------------------------- +// 2. Assignment expression. +// +// [a, b] = [b, a]; +// ({x, y} = {y, x}); +// ------------------------------------------------------- + +function visitStructuredAssignment(traverse, node, path, state) { + var exprNode = node.expression; + utils.append('var ' + utils.getTempVar(state.localScope.tempVarIndex) + '=', state); + + utils.catchupWhiteSpace(exprNode.right.range[0], state); + traverse(exprNode.right, path, state); + utils.catchup(exprNode.right.range[1], state); + + utils.append( + ';' + getDestructuredComponents(exprNode.left, state) + ';', + state + ); + + utils.catchupWhiteSpace(node.range[1], state); + state.localScope.tempVarIndex++; + return false; +} + +visitStructuredAssignment.test = function(node, path, state) { + // We consider the expression statement rather than just assignment + // expression to cover case with object patters which should be + // wrapped in grouping operator: ({x, y} = {y, x}); + return node.type === Syntax.ExpressionStatement && + node.expression.type === Syntax.AssignmentExpression && + isStructuredPattern(node.expression.left); +}; + +// ------------------------------------------------------- +// 3. Structured parameter. +// +// function foo({x, y}) { ... } +// ------------------------------------------------------- + +function visitStructuredParameter(traverse, node, path, state) { + utils.append(utils.getTempVar(getParamIndex(node, path)), state); + utils.catchupWhiteSpace(node.range[1], state); + return true; +} + +function getParamIndex(paramNode, path) { + var funcNode = path[0]; + var tmpIndex = 0; + for (var k = 0; k < funcNode.params.length; k++) { + var param = funcNode.params[k]; + if (param === paramNode) { + break; + } + if (isStructuredPattern(param)) { + tmpIndex++; + } + } + return tmpIndex; +} + +visitStructuredParameter.test = function(node, path, state) { + return isStructuredPattern(node) && isFunctionNode(path[0]); +}; + +function isFunctionNode(node) { + return (node.type == Syntax.FunctionDeclaration || + node.type == Syntax.FunctionExpression || + node.type == Syntax.MethodDefinition || + node.type == Syntax.ArrowFunctionExpression); +} + +// ------------------------------------------------------- +// 4. Function body for structured parameters. +// +// function foo({x, y}) { x; y; } +// ------------------------------------------------------- + +function visitFunctionBodyForStructuredParameter(traverse, node, path, state) { + var funcNode = path[0]; + + utils.catchup(funcNode.body.range[0] + 1, state); + renderDestructuredComponents(funcNode, state); + + if (funcNode.rest) { + utils.append( + restParamVisitors.renderRestParamSetup(funcNode, state), + state + ); + } + + return true; +} + +function renderDestructuredComponents(funcNode, state) { + var destructuredComponents = []; + + for (var k = 0; k < funcNode.params.length; k++) { + var param = funcNode.params[k]; + if (isStructuredPattern(param)) { + destructuredComponents.push( + getDestructuredComponents(param, state) + ); + state.localScope.tempVarIndex++; + } + } + + if (destructuredComponents.length) { + utils.append('var ' + destructuredComponents.join(',') + ';', state); + } +} + +visitFunctionBodyForStructuredParameter.test = function(node, path, state) { + return node.type === Syntax.BlockStatement && isFunctionNode(path[0]); +}; + +exports.visitorList = [ + visitStructuredVariable, + visitStructuredAssignment, + visitStructuredParameter, + visitFunctionBodyForStructuredParameter +]; + +exports.renderDestructuredComponents = renderDestructuredComponents; + + +},{"../src/utils":23,"./es6-rest-param-visitors":30,"./es7-rest-property-helpers":32,"./reserved-words-helper":34,"esprima-fb":9}],28:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*jslint node:true*/ + +/** + * Desugars concise methods of objects to function expressions. + * + * var foo = { + * method(x, y) { ... } + * }; + * + * var foo = { + * method: function(x, y) { ... } + * }; + * + */ + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); +var reservedWordsHelper = _dereq_('./reserved-words-helper'); + +function visitObjectConciseMethod(traverse, node, path, state) { + var isGenerator = node.value.generator; + if (isGenerator) { + utils.catchupWhiteSpace(node.range[0] + 1, state); + } + if (node.computed) { // []() { ...} + utils.catchup(node.key.range[1] + 1, state); + } else if (reservedWordsHelper.isReservedWord(node.key.name)) { + utils.catchup(node.key.range[0], state); + utils.append('"', state); + utils.catchup(node.key.range[1], state); + utils.append('"', state); + } + + utils.catchup(node.key.range[1], state); + utils.append( + ':function' + (isGenerator ? '*' : ''), + state + ); + path.unshift(node); + traverse(node.value, path, state); + path.shift(); + return false; +} + +visitObjectConciseMethod.test = function(node, path, state) { + return node.type === Syntax.Property && + node.value.type === Syntax.FunctionExpression && + node.method === true; +}; + +exports.visitorList = [ + visitObjectConciseMethod +]; + +},{"../src/utils":23,"./reserved-words-helper":34,"esprima-fb":9}],29:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*jslint node: true*/ + +/** + * Desugars ES6 Object Literal short notations into ES3 full notation. + * + * // Easier return values. + * function foo(x, y) { + * return {x, y}; // {x: x, y: y} + * }; + * + * // Destructuring. + * function init({port, ip, coords: {x, y}}) { ... } + * + */ +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +/** + * @public + */ +function visitObjectLiteralShortNotation(traverse, node, path, state) { + utils.catchup(node.key.range[1], state); + utils.append(':' + node.key.name, state); + return false; +} + +visitObjectLiteralShortNotation.test = function(node, path, state) { + return node.type === Syntax.Property && + node.kind === 'init' && + node.shorthand === true && + path[0].type !== Syntax.ObjectPattern; +}; + +exports.visitorList = [ + visitObjectLiteralShortNotation +]; + + +},{"../src/utils":23,"esprima-fb":9}],30:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*jslint node:true*/ + +/** + * Desugars ES6 rest parameters into an ES3 arguments array. + * + * function printf(template, ...args) { + * args.forEach(...); + * } + * + * We could use `Array.prototype.slice.call`, but that usage of arguments causes + * functions to be deoptimized in V8, so instead we use a for-loop. + * + * function printf(template) { + * for (var args = [], $__0 = 1, $__1 = arguments.length; $__0 < $__1; $__0++) + * args.push(arguments[$__0]); + * args.forEach(...); + * } + * + */ +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + + + +function _nodeIsFunctionWithRestParam(node) { + return (node.type === Syntax.FunctionDeclaration + || node.type === Syntax.FunctionExpression + || node.type === Syntax.ArrowFunctionExpression) + && node.rest; +} + +function visitFunctionParamsWithRestParam(traverse, node, path, state) { + if (node.parametricType) { + utils.catchup(node.parametricType.range[0], state); + path.unshift(node); + traverse(node.parametricType, path, state); + path.shift(); + } + + // Render params. + if (node.params.length) { + path.unshift(node); + traverse(node.params, path, state); + path.shift(); + } else { + // -3 is for ... of the rest. + utils.catchup(node.rest.range[0] - 3, state); + } + utils.catchupWhiteSpace(node.rest.range[1], state); + + path.unshift(node); + traverse(node.body, path, state); + path.shift(); + + return false; +} + +visitFunctionParamsWithRestParam.test = function(node, path, state) { + return _nodeIsFunctionWithRestParam(node); +}; + +function renderRestParamSetup(functionNode, state) { + var idx = state.localScope.tempVarIndex++; + var len = state.localScope.tempVarIndex++; + + return 'for (var ' + functionNode.rest.name + '=[],' + + utils.getTempVar(idx) + '=' + functionNode.params.length + ',' + + utils.getTempVar(len) + '=arguments.length;' + + utils.getTempVar(idx) + '<' + utils.getTempVar(len) + ';' + + utils.getTempVar(idx) + '++) ' + + functionNode.rest.name + '.push(arguments[' + utils.getTempVar(idx) + ']);'; +} + +function visitFunctionBodyWithRestParam(traverse, node, path, state) { + utils.catchup(node.range[0] + 1, state); + var parentNode = path[0]; + utils.append(renderRestParamSetup(parentNode, state), state); + return true; +} + +visitFunctionBodyWithRestParam.test = function(node, path, state) { + return node.type === Syntax.BlockStatement + && _nodeIsFunctionWithRestParam(path[0]); +}; + +exports.renderRestParamSetup = renderRestParamSetup; +exports.visitorList = [ + visitFunctionParamsWithRestParam, + visitFunctionBodyWithRestParam +]; + +},{"../src/utils":23,"esprima-fb":9}],31:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*jslint node:true*/ + +/** + * @typechecks + */ +'use strict'; + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +/** + * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-12.1.9 + */ +function visitTemplateLiteral(traverse, node, path, state) { + var templateElements = node.quasis; + + utils.append('(', state); + for (var ii = 0; ii < templateElements.length; ii++) { + var templateElement = templateElements[ii]; + if (templateElement.value.raw !== '') { + utils.append(getCookedValue(templateElement), state); + if (!templateElement.tail) { + // + between element and substitution + utils.append(' + ', state); + } + // maintain line numbers + utils.move(templateElement.range[0], state); + utils.catchupNewlines(templateElement.range[1], state); + } else { // templateElement.value.raw === '' + // Concatenat adjacent substitutions, e.g. `${x}${y}`. Empty templates + // appear before the first and after the last element - nothing to add in + // those cases. + if (ii > 0 && !templateElement.tail) { + // + between substitution and substitution + utils.append(' + ', state); + } + } + + utils.move(templateElement.range[1], state); + if (!templateElement.tail) { + var substitution = node.expressions[ii]; + if (substitution.type === Syntax.Identifier || + substitution.type === Syntax.MemberExpression || + substitution.type === Syntax.CallExpression) { + utils.catchup(substitution.range[1], state); + } else { + utils.append('(', state); + traverse(substitution, path, state); + utils.catchup(substitution.range[1], state); + utils.append(')', state); + } + // if next templateElement isn't empty... + if (templateElements[ii + 1].value.cooked !== '') { + utils.append(' + ', state); + } + } + } + utils.move(node.range[1], state); + utils.append(')', state); + return false; +} + +visitTemplateLiteral.test = function(node, path, state) { + return node.type === Syntax.TemplateLiteral; +}; + +/** + * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-12.2.6 + */ +function visitTaggedTemplateExpression(traverse, node, path, state) { + var template = node.quasi; + var numQuasis = template.quasis.length; + + // print the tag + utils.move(node.tag.range[0], state); + traverse(node.tag, path, state); + utils.catchup(node.tag.range[1], state); + + // print array of template elements + utils.append('(function() { var siteObj = [', state); + for (var ii = 0; ii < numQuasis; ii++) { + utils.append(getCookedValue(template.quasis[ii]), state); + if (ii !== numQuasis - 1) { + utils.append(', ', state); + } + } + utils.append(']; siteObj.raw = [', state); + for (ii = 0; ii < numQuasis; ii++) { + utils.append(getRawValue(template.quasis[ii]), state); + if (ii !== numQuasis - 1) { + utils.append(', ', state); + } + } + utils.append( + ']; Object.freeze(siteObj.raw); Object.freeze(siteObj); return siteObj; }()', + state + ); + + // print substitutions + if (numQuasis > 1) { + for (ii = 0; ii < template.expressions.length; ii++) { + var expression = template.expressions[ii]; + utils.append(', ', state); + + // maintain line numbers by calling catchupWhiteSpace over the whole + // previous TemplateElement + utils.move(template.quasis[ii].range[0], state); + utils.catchupNewlines(template.quasis[ii].range[1], state); + + utils.move(expression.range[0], state); + traverse(expression, path, state); + utils.catchup(expression.range[1], state); + } + } + + // print blank lines to push the closing ) down to account for the final + // TemplateElement. + utils.catchupNewlines(node.range[1], state); + + utils.append(')', state); + + return false; +} + +visitTaggedTemplateExpression.test = function(node, path, state) { + return node.type === Syntax.TaggedTemplateExpression; +}; + +function getCookedValue(templateElement) { + return JSON.stringify(templateElement.value.cooked); +} + +function getRawValue(templateElement) { + return JSON.stringify(templateElement.value.raw); +} + +exports.visitorList = [ + visitTemplateLiteral, + visitTaggedTemplateExpression +]; + +},{"../src/utils":23,"esprima-fb":9}],32:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*jslint node:true*/ + +/** + * Desugars ES7 rest properties into ES5 object iteration. + */ + +var Syntax = _dereq_('esprima-fb').Syntax; + +// TODO: This is a pretty massive helper, it should only be defined once, in the +// transform's runtime environment. We don't currently have a runtime though. +var restFunction = + '(function(source, exclusion) {' + + 'var rest = {};' + + 'var hasOwn = Object.prototype.hasOwnProperty;' + + 'if (source == null) {' + + 'throw new TypeError();' + + '}' + + 'for (var key in source) {' + + 'if (hasOwn.call(source, key) && !hasOwn.call(exclusion, key)) {' + + 'rest[key] = source[key];' + + '}' + + '}' + + 'return rest;' + + '})'; + +function getPropertyNames(properties) { + var names = []; + for (var i = 0; i < properties.length; i++) { + var property = properties[i]; + if (property.type === Syntax.SpreadProperty) { + continue; + } + if (property.type === Syntax.Identifier) { + names.push(property.name); + } else { + names.push(property.key.name); + } + } + return names; +} + +function getRestFunctionCall(source, exclusion) { + return restFunction + '(' + source + ',' + exclusion + ')'; +} + +function getSimpleShallowCopy(accessorExpression) { + // This could be faster with 'Object.assign({}, ' + accessorExpression + ')' + // but to unify code paths and avoid a ES6 dependency we use the same + // helper as for the exclusion case. + return getRestFunctionCall(accessorExpression, '{}'); +} + +function renderRestExpression(accessorExpression, excludedProperties) { + var excludedNames = getPropertyNames(excludedProperties); + if (!excludedNames.length) { + return getSimpleShallowCopy(accessorExpression); + } + return getRestFunctionCall( + accessorExpression, + '{' + excludedNames.join(':1,') + ':1}' + ); +} + +exports.renderRestExpression = renderRestExpression; + +},{"esprima-fb":9}],33:[function(_dereq_,module,exports){ +/** + * Copyright 2004-present Facebook. All Rights Reserved. + */ +/*global exports:true*/ + +/** + * Implements ES7 object spread property. + * https://gist.github.com/sebmarkbage/aa849c7973cb4452c547 + * + * { ...a, x: 1 } + * + * Object.assign({}, a, {x: 1 }) + * + */ + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +function visitObjectLiteralSpread(traverse, node, path, state) { + utils.catchup(node.range[0], state); + + utils.append('Object.assign({', state); + + // Skip the original { + utils.move(node.range[0] + 1, state); + + var previousWasSpread = false; + + for (var i = 0; i < node.properties.length; i++) { + var property = node.properties[i]; + if (property.type === Syntax.SpreadProperty) { + + // Close the previous object or initial object + if (!previousWasSpread) { + utils.append('}', state); + } + + if (i === 0) { + // Normally there will be a comma when we catch up, but not before + // the first property. + utils.append(',', state); + } + + utils.catchup(property.range[0], state); + + // skip ... + utils.move(property.range[0] + 3, state); + + traverse(property.argument, path, state); + + utils.catchup(property.range[1], state); + + previousWasSpread = true; + + } else { + + utils.catchup(property.range[0], state); + + if (previousWasSpread) { + utils.append('{', state); + } + + traverse(property, path, state); + + utils.catchup(property.range[1], state); + + previousWasSpread = false; + + } + } + + // Strip any non-whitespace between the last item and the end. + // We only catch up on whitespace so that we ignore any trailing commas which + // are stripped out for IE8 support. Unfortunately, this also strips out any + // trailing comments. + utils.catchupWhiteSpace(node.range[1] - 1, state); + + // Skip the trailing } + utils.move(node.range[1], state); + + if (!previousWasSpread) { + utils.append('}', state); + } + + utils.append(')', state); + return false; +} + +visitObjectLiteralSpread.test = function(node, path, state) { + if (node.type !== Syntax.ObjectExpression) { + return false; + } + // Tight loop optimization + var hasAtLeastOneSpreadProperty = false; + for (var i = 0; i < node.properties.length; i++) { + var property = node.properties[i]; + if (property.type === Syntax.SpreadProperty) { + hasAtLeastOneSpreadProperty = true; + } else if (property.kind !== 'init') { + return false; + } + } + return hasAtLeastOneSpreadProperty; +}; + +exports.visitorList = [ + visitObjectLiteralSpread +]; + +},{"../src/utils":23,"esprima-fb":9}],34:[function(_dereq_,module,exports){ +/** + * Copyright 2014 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var KEYWORDS = [ + 'break', 'do', 'in', 'typeof', 'case', 'else', 'instanceof', 'var', 'catch', + 'export', 'new', 'void', 'class', 'extends', 'return', 'while', 'const', + 'finally', 'super', 'with', 'continue', 'for', 'switch', 'yield', 'debugger', + 'function', 'this', 'default', 'if', 'throw', 'delete', 'import', 'try' +]; + +var FUTURE_RESERVED_WORDS = [ + 'enum', 'await', 'implements', 'package', 'protected', 'static', 'interface', + 'private', 'public' +]; + +var LITERALS = [ + 'null', + 'true', + 'false' +]; + +// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-reserved-words +var RESERVED_WORDS = [].concat( + KEYWORDS, + FUTURE_RESERVED_WORDS, + LITERALS +); + +var reservedWordsMap = Object.create(null); +RESERVED_WORDS.forEach(function(k) { + reservedWordsMap[k] = true; +}); + +/** + * This list should not grow as new reserved words are introdued. This list is + * of words that need to be quoted because ES3-ish browsers do not allow their + * use as identifier names. + */ +var ES3_FUTURE_RESERVED_WORDS = [ + 'enum', 'implements', 'package', 'protected', 'static', 'interface', + 'private', 'public' +]; + +var ES3_RESERVED_WORDS = [].concat( + KEYWORDS, + ES3_FUTURE_RESERVED_WORDS, + LITERALS +); + +var es3ReservedWordsMap = Object.create(null); +ES3_RESERVED_WORDS.forEach(function(k) { + es3ReservedWordsMap[k] = true; +}); + +exports.isReservedWord = function(word) { + return !!reservedWordsMap[word]; +}; + +exports.isES3ReservedWord = function(word) { + return !!es3ReservedWordsMap[word]; +}; + +},{}],35:[function(_dereq_,module,exports){ +/** + * Copyright 2014 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +/*global exports:true*/ + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); +var reserverdWordsHelper = _dereq_('./reserved-words-helper'); + +/** + * Code adapted from https://github.com/spicyj/es3ify + * The MIT License (MIT) + * Copyright (c) 2014 Ben Alpert + */ + +function visitProperty(traverse, node, path, state) { + utils.catchup(node.key.range[0], state); + utils.append('"', state); + utils.catchup(node.key.range[1], state); + utils.append('"', state); + utils.catchup(node.value.range[0], state); + traverse(node.value, path, state); + return false; +} + +visitProperty.test = function(node) { + return node.type === Syntax.Property && + node.key.type === Syntax.Identifier && + !node.method && + !node.shorthand && + !node.computed && + reserverdWordsHelper.isES3ReservedWord(node.key.name); +}; + +function visitMemberExpression(traverse, node, path, state) { + traverse(node.object, path, state); + utils.catchup(node.property.range[0] - 1, state); + utils.append('[', state); + utils.catchupWhiteSpace(node.property.range[0], state); + utils.append('"', state); + utils.catchup(node.property.range[1], state); + utils.append('"]', state); + return false; +} + +visitMemberExpression.test = function(node) { + return node.type === Syntax.MemberExpression && + node.property.type === Syntax.Identifier && + reserverdWordsHelper.isES3ReservedWord(node.property.name); +}; + +exports.visitorList = [ + visitProperty, + visitMemberExpression +]; + +},{"../src/utils":23,"./reserved-words-helper":34,"esprima-fb":9}],36:[function(_dereq_,module,exports){ +var esprima = _dereq_('esprima-fb'); +var utils = _dereq_('../src/utils'); + +var Syntax = esprima.Syntax; + +function _isFunctionNode(node) { + return node.type === Syntax.FunctionDeclaration + || node.type === Syntax.FunctionExpression + || node.type === Syntax.ArrowFunctionExpression; +} + +function visitClassProperty(traverse, node, path, state) { + utils.catchup(node.range[0], state); + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitClassProperty.test = function(node, path, state) { + return node.type === Syntax.ClassProperty; +}; + +function visitTypeAlias(traverse, node, path, state) { + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitTypeAlias.test = function(node, path, state) { + return node.type === Syntax.TypeAlias; +}; + +function visitTypeCast(traverse, node, path, state) { + path.unshift(node); + traverse(node.expression, path, state); + path.shift(); + + utils.catchup(node.typeAnnotation.range[0], state); + utils.catchupWhiteOut(node.typeAnnotation.range[1], state); + return false; +} +visitTypeCast.test = function(node, path, state) { + return node.type === Syntax.TypeCastExpression; +}; + +function visitInterfaceDeclaration(traverse, node, path, state) { + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitInterfaceDeclaration.test = function(node, path, state) { + return node.type === Syntax.InterfaceDeclaration; +}; + +function visitDeclare(traverse, node, path, state) { + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitDeclare.test = function(node, path, state) { + switch (node.type) { + case Syntax.DeclareVariable: + case Syntax.DeclareFunction: + case Syntax.DeclareClass: + case Syntax.DeclareModule: + return true; + } + return false; +}; + +function visitFunctionParametricAnnotation(traverse, node, path, state) { + utils.catchup(node.range[0], state); + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitFunctionParametricAnnotation.test = function(node, path, state) { + return node.type === Syntax.TypeParameterDeclaration + && path[0] + && _isFunctionNode(path[0]) + && node === path[0].typeParameters; +}; + +function visitFunctionReturnAnnotation(traverse, node, path, state) { + utils.catchup(node.range[0], state); + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitFunctionReturnAnnotation.test = function(node, path, state) { + return path[0] && _isFunctionNode(path[0]) && node === path[0].returnType; +}; + +function visitOptionalFunctionParameterAnnotation(traverse, node, path, state) { + utils.catchup(node.range[0] + node.name.length, state); + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitOptionalFunctionParameterAnnotation.test = function(node, path, state) { + return node.type === Syntax.Identifier + && node.optional + && path[0] + && _isFunctionNode(path[0]); +}; + +function visitTypeAnnotatedIdentifier(traverse, node, path, state) { + utils.catchup(node.typeAnnotation.range[0], state); + utils.catchupWhiteOut(node.typeAnnotation.range[1], state); + return false; +} +visitTypeAnnotatedIdentifier.test = function(node, path, state) { + return node.type === Syntax.Identifier && node.typeAnnotation; +}; + +function visitTypeAnnotatedObjectOrArrayPattern(traverse, node, path, state) { + utils.catchup(node.typeAnnotation.range[0], state); + utils.catchupWhiteOut(node.typeAnnotation.range[1], state); + return false; +} +visitTypeAnnotatedObjectOrArrayPattern.test = function(node, path, state) { + var rightType = node.type === Syntax.ObjectPattern + || node.type === Syntax.ArrayPattern; + return rightType && node.typeAnnotation; +}; + +/** + * Methods cause trouble, since esprima parses them as a key/value pair, where + * the location of the value starts at the method body. For example + * { bar(x:number,...y:Array):number {} } + * is parsed as + * { bar: function(x: number, ...y:Array): number {} } + * except that the location of the FunctionExpression value is 40-something, + * which is the location of the function body. This means that by the time we + * visit the params, rest param, and return type organically, we've already + * catchup()'d passed them. + */ +function visitMethod(traverse, node, path, state) { + path.unshift(node); + traverse(node.key, path, state); + + path.unshift(node.value); + traverse(node.value.params, path, state); + node.value.rest && traverse(node.value.rest, path, state); + node.value.returnType && traverse(node.value.returnType, path, state); + traverse(node.value.body, path, state); + + path.shift(); + + path.shift(); + return false; +} + +visitMethod.test = function(node, path, state) { + return (node.type === "Property" && (node.method || node.kind === "set" || node.kind === "get")) + || (node.type === "MethodDefinition"); +}; + +function visitImportType(traverse, node, path, state) { + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitImportType.test = function(node, path, state) { + return node.type === 'ImportDeclaration' + && node.isType; +}; + +exports.visitorList = [ + visitClassProperty, + visitDeclare, + visitImportType, + visitInterfaceDeclaration, + visitFunctionParametricAnnotation, + visitFunctionReturnAnnotation, + visitMethod, + visitOptionalFunctionParameterAnnotation, + visitTypeAlias, + visitTypeCast, + visitTypeAnnotatedIdentifier, + visitTypeAnnotatedObjectOrArrayPattern +]; + +},{"../src/utils":23,"esprima-fb":9}],37:[function(_dereq_,module,exports){ +/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +/*global exports:true*/ +'use strict'; +var Syntax = _dereq_('jstransform').Syntax; +var utils = _dereq_('jstransform/src/utils'); + +function renderJSXLiteral(object, isLast, state, start, end) { + var lines = object.value.split(/\r\n|\n|\r/); + + if (start) { + utils.append(start, state); + } + + var lastNonEmptyLine = 0; + + lines.forEach(function(line, index) { + if (line.match(/[^ \t]/)) { + lastNonEmptyLine = index; + } + }); + + lines.forEach(function(line, index) { + var isFirstLine = index === 0; + var isLastLine = index === lines.length - 1; + var isLastNonEmptyLine = index === lastNonEmptyLine; + + // replace rendered whitespace tabs with spaces + var trimmedLine = line.replace(/\t/g, ' '); + + // trim whitespace touching a newline + if (!isFirstLine) { + trimmedLine = trimmedLine.replace(/^[ ]+/, ''); + } + if (!isLastLine) { + trimmedLine = trimmedLine.replace(/[ ]+$/, ''); + } + + if (!isFirstLine) { + utils.append(line.match(/^[ \t]*/)[0], state); + } + + if (trimmedLine || isLastNonEmptyLine) { + utils.append( + JSON.stringify(trimmedLine) + + (!isLastNonEmptyLine ? ' + \' \' +' : ''), + state); + + if (isLastNonEmptyLine) { + if (end) { + utils.append(end, state); + } + if (!isLast) { + utils.append(', ', state); + } + } + + // only restore tail whitespace if line had literals + if (trimmedLine && !isLastLine) { + utils.append(line.match(/[ \t]*$/)[0], state); + } + } + + if (!isLastLine) { + utils.append('\n', state); + } + }); + + utils.move(object.range[1], state); +} + +function renderJSXExpressionContainer(traverse, object, isLast, path, state) { + // Plus 1 to skip `{`. + utils.move(object.range[0] + 1, state); + utils.catchup(object.expression.range[0], state); + traverse(object.expression, path, state); + + if (!isLast && object.expression.type !== Syntax.JSXEmptyExpression) { + // If we need to append a comma, make sure to do so after the expression. + utils.catchup(object.expression.range[1], state, trimLeft); + utils.append(', ', state); + } + + // Minus 1 to skip `}`. + utils.catchup(object.range[1] - 1, state, trimLeft); + utils.move(object.range[1], state); + return false; +} + +function quoteAttrName(attr) { + // Quote invalid JS identifiers. + if (!/^[a-z_$][a-z\d_$]*$/i.test(attr)) { + return '"' + attr + '"'; + } + return attr; +} + +function trimLeft(value) { + return value.replace(/^[ ]+/, ''); +} + +exports.renderJSXExpressionContainer = renderJSXExpressionContainer; +exports.renderJSXLiteral = renderJSXLiteral; +exports.quoteAttrName = quoteAttrName; +exports.trimLeft = trimLeft; + +},{"jstransform":22,"jstransform/src/utils":23}],38:[function(_dereq_,module,exports){ +/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +/*global exports:true*/ +'use strict'; + +var Syntax = _dereq_('jstransform').Syntax; +var utils = _dereq_('jstransform/src/utils'); + +var renderJSXExpressionContainer = + _dereq_('./jsx').renderJSXExpressionContainer; +var renderJSXLiteral = _dereq_('./jsx').renderJSXLiteral; +var quoteAttrName = _dereq_('./jsx').quoteAttrName; + +var trimLeft = _dereq_('./jsx').trimLeft; + +/** + * Customized desugar processor for React JSX. Currently: + * + * => React.createElement(X, null) + * => React.createElement(X, {prop: '1'}, null) + * => React.createElement(X, {prop:'2'}, + * React.createElement(Y, null) + * ) + *
    => React.createElement("div", null) + */ + +/** + * Removes all non-whitespace/parenthesis characters + */ +var reNonWhiteParen = /([^\s\(\)])/g; +function stripNonWhiteParen(value) { + return value.replace(reNonWhiteParen, ''); +} + +var tagConvention = /^[a-z]|\-/; +function isTagName(name) { + return tagConvention.test(name); +} + +function visitReactTag(traverse, object, path, state) { + var openingElement = object.openingElement; + var nameObject = openingElement.name; + var attributesObject = openingElement.attributes; + + utils.catchup(openingElement.range[0], state, trimLeft); + + if (nameObject.type === Syntax.JSXNamespacedName && nameObject.namespace) { + throw new Error('Namespace tags are not supported. ReactJSX is not XML.'); + } + + // We assume that the React runtime is already in scope + utils.append('React.createElement(', state); + + if (nameObject.type === Syntax.JSXIdentifier && isTagName(nameObject.name)) { + utils.append('"' + nameObject.name + '"', state); + utils.move(nameObject.range[1], state); + } else { + // Use utils.catchup in this case so we can easily handle + // JSXMemberExpressions which look like Foo.Bar.Baz. This also handles + // JSXIdentifiers that aren't fallback tags. + utils.move(nameObject.range[0], state); + utils.catchup(nameObject.range[1], state); + } + + utils.append(', ', state); + + var hasAttributes = attributesObject.length; + + var hasAtLeastOneSpreadProperty = attributesObject.some(function(attr) { + return attr.type === Syntax.JSXSpreadAttribute; + }); + + // if we don't have any attributes, pass in null + if (hasAtLeastOneSpreadProperty) { + utils.append('React.__spread({', state); + } else if (hasAttributes) { + utils.append('{', state); + } else { + utils.append('null', state); + } + + // keep track of if the previous attribute was a spread attribute + var previousWasSpread = false; + + // write attributes + attributesObject.forEach(function(attr, index) { + var isLast = index === attributesObject.length - 1; + + if (attr.type === Syntax.JSXSpreadAttribute) { + // Close the previous object or initial object + if (!previousWasSpread) { + utils.append('}, ', state); + } + + // Move to the expression start, ignoring everything except parenthesis + // and whitespace. + utils.catchup(attr.range[0], state, stripNonWhiteParen); + // Plus 1 to skip `{`. + utils.move(attr.range[0] + 1, state); + utils.catchup(attr.argument.range[0], state, stripNonWhiteParen); + + traverse(attr.argument, path, state); + + utils.catchup(attr.argument.range[1], state); + + // Move to the end, ignoring parenthesis and the closing `}` + utils.catchup(attr.range[1] - 1, state, stripNonWhiteParen); + + if (!isLast) { + utils.append(', ', state); + } + + utils.move(attr.range[1], state); + + previousWasSpread = true; + + return; + } + + // If the next attribute is a spread, we're effective last in this object + if (!isLast) { + isLast = attributesObject[index + 1].type === Syntax.JSXSpreadAttribute; + } + + if (attr.name.namespace) { + throw new Error( + 'Namespace attributes are not supported. ReactJSX is not XML.'); + } + var name = attr.name.name; + + utils.catchup(attr.range[0], state, trimLeft); + + if (previousWasSpread) { + utils.append('{', state); + } + + utils.append(quoteAttrName(name), state); + utils.append(': ', state); + + if (!attr.value) { + state.g.buffer += 'true'; + state.g.position = attr.name.range[1]; + if (!isLast) { + utils.append(', ', state); + } + } else { + utils.move(attr.name.range[1], state); + // Use catchupNewlines to skip over the '=' in the attribute + utils.catchupNewlines(attr.value.range[0], state); + if (attr.value.type === Syntax.Literal) { + renderJSXLiteral(attr.value, isLast, state); + } else { + renderJSXExpressionContainer(traverse, attr.value, isLast, path, state); + } + } + + utils.catchup(attr.range[1], state, trimLeft); + + previousWasSpread = false; + + }); + + if (!openingElement.selfClosing) { + utils.catchup(openingElement.range[1] - 1, state, trimLeft); + utils.move(openingElement.range[1], state); + } + + if (hasAttributes && !previousWasSpread) { + utils.append('}', state); + } + + if (hasAtLeastOneSpreadProperty) { + utils.append(')', state); + } + + // filter out whitespace + var childrenToRender = object.children.filter(function(child) { + return !(child.type === Syntax.Literal + && typeof child.value === 'string' + && child.value.match(/^[ \t]*[\r\n][ \t\r\n]*$/)); + }); + if (childrenToRender.length > 0) { + var lastRenderableIndex; + + childrenToRender.forEach(function(child, index) { + if (child.type !== Syntax.JSXExpressionContainer || + child.expression.type !== Syntax.JSXEmptyExpression) { + lastRenderableIndex = index; + } + }); + + if (lastRenderableIndex !== undefined) { + utils.append(', ', state); + } + + childrenToRender.forEach(function(child, index) { + utils.catchup(child.range[0], state, trimLeft); + + var isLast = index >= lastRenderableIndex; + + if (child.type === Syntax.Literal) { + renderJSXLiteral(child, isLast, state); + } else if (child.type === Syntax.JSXExpressionContainer) { + renderJSXExpressionContainer(traverse, child, isLast, path, state); + } else { + traverse(child, path, state); + if (!isLast) { + utils.append(', ', state); + } + } + + utils.catchup(child.range[1], state, trimLeft); + }); + } + + if (openingElement.selfClosing) { + // everything up to /> + utils.catchup(openingElement.range[1] - 2, state, trimLeft); + utils.move(openingElement.range[1], state); + } else { + // everything up to + utils.catchup(object.closingElement.range[0], state, trimLeft); + utils.move(object.closingElement.range[1], state); + } + + utils.append(')', state); + return false; +} + +visitReactTag.test = function(object, path, state) { + return object.type === Syntax.JSXElement; +}; + +exports.visitorList = [ + visitReactTag +]; + +},{"./jsx":37,"jstransform":22,"jstransform/src/utils":23}],39:[function(_dereq_,module,exports){ +/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +/*global exports:true*/ +'use strict'; + +var Syntax = _dereq_('jstransform').Syntax; +var utils = _dereq_('jstransform/src/utils'); + +function addDisplayName(displayName, object, state) { + if (object && + object.type === Syntax.CallExpression && + object.callee.type === Syntax.MemberExpression && + object.callee.object.type === Syntax.Identifier && + object.callee.object.name === 'React' && + object.callee.property.type === Syntax.Identifier && + object.callee.property.name === 'createClass' && + object.arguments.length === 1 && + object.arguments[0].type === Syntax.ObjectExpression) { + // Verify that the displayName property isn't already set + var properties = object.arguments[0].properties; + var safe = properties.every(function(property) { + var value = property.key.type === Syntax.Identifier ? + property.key.name : + property.key.value; + return value !== 'displayName'; + }); + + if (safe) { + utils.catchup(object.arguments[0].range[0] + 1, state); + utils.append('displayName: "' + displayName + '",', state); + } + } +} + +/** + * Transforms the following: + * + * var MyComponent = React.createClass({ + * render: ... + * }); + * + * into: + * + * var MyComponent = React.createClass({ + * displayName: 'MyComponent', + * render: ... + * }); + * + * Also catches: + * + * MyComponent = React.createClass(...); + * exports.MyComponent = React.createClass(...); + * module.exports = {MyComponent: React.createClass(...)}; + */ +function visitReactDisplayName(traverse, object, path, state) { + var left, right; + + if (object.type === Syntax.AssignmentExpression) { + left = object.left; + right = object.right; + } else if (object.type === Syntax.Property) { + left = object.key; + right = object.value; + } else if (object.type === Syntax.VariableDeclarator) { + left = object.id; + right = object.init; + } + + if (left && left.type === Syntax.MemberExpression) { + left = left.property; + } + if (left && left.type === Syntax.Identifier) { + addDisplayName(left.name, right, state); + } +} + +visitReactDisplayName.test = function(object, path, state) { + return ( + object.type === Syntax.AssignmentExpression || + object.type === Syntax.Property || + object.type === Syntax.VariableDeclarator + ); +}; + +exports.visitorList = [ + visitReactDisplayName +]; + +},{"jstransform":22,"jstransform/src/utils":23}],40:[function(_dereq_,module,exports){ +/*global exports:true*/ + +'use strict'; + +var es6ArrowFunctions = + _dereq_('jstransform/visitors/es6-arrow-function-visitors'); +var es6Classes = _dereq_('jstransform/visitors/es6-class-visitors'); +var es6Destructuring = + _dereq_('jstransform/visitors/es6-destructuring-visitors'); +var es6ObjectConciseMethod = + _dereq_('jstransform/visitors/es6-object-concise-method-visitors'); +var es6ObjectShortNotation = + _dereq_('jstransform/visitors/es6-object-short-notation-visitors'); +var es6RestParameters = _dereq_('jstransform/visitors/es6-rest-param-visitors'); +var es6Templates = _dereq_('jstransform/visitors/es6-template-visitors'); +var es6CallSpread = + _dereq_('jstransform/visitors/es6-call-spread-visitors'); +var es7SpreadProperty = + _dereq_('jstransform/visitors/es7-spread-property-visitors'); +var react = _dereq_('./transforms/react'); +var reactDisplayName = _dereq_('./transforms/reactDisplayName'); +var reservedWords = _dereq_('jstransform/visitors/reserved-words-visitors'); + +/** + * Map from transformName => orderedListOfVisitors. + */ +var transformVisitors = { + 'es6-arrow-functions': es6ArrowFunctions.visitorList, + 'es6-classes': es6Classes.visitorList, + 'es6-destructuring': es6Destructuring.visitorList, + 'es6-object-concise-method': es6ObjectConciseMethod.visitorList, + 'es6-object-short-notation': es6ObjectShortNotation.visitorList, + 'es6-rest-params': es6RestParameters.visitorList, + 'es6-templates': es6Templates.visitorList, + 'es6-call-spread': es6CallSpread.visitorList, + 'es7-spread-property': es7SpreadProperty.visitorList, + 'react': react.visitorList.concat(reactDisplayName.visitorList), + 'reserved-words': reservedWords.visitorList +}; + +var transformSets = { + 'harmony': [ + 'es6-arrow-functions', + 'es6-object-concise-method', + 'es6-object-short-notation', + 'es6-classes', + 'es6-rest-params', + 'es6-templates', + 'es6-destructuring', + 'es6-call-spread', + 'es7-spread-property' + ], + 'es3': [ + 'reserved-words' + ], + 'react': [ + 'react' + ] +}; + +/** + * Specifies the order in which each transform should run. + */ +var transformRunOrder = [ + 'reserved-words', + 'es6-arrow-functions', + 'es6-object-concise-method', + 'es6-object-short-notation', + 'es6-classes', + 'es6-rest-params', + 'es6-templates', + 'es6-destructuring', + 'es6-call-spread', + 'es7-spread-property', + 'react' +]; + +/** + * Given a list of transform names, return the ordered list of visitors to be + * passed to the transform() function. + * + * @param {array?} excludes + * @return {array} + */ +function getAllVisitors(excludes) { + var ret = []; + for (var i = 0, il = transformRunOrder.length; i < il; i++) { + if (!excludes || excludes.indexOf(transformRunOrder[i]) === -1) { + ret = ret.concat(transformVisitors[transformRunOrder[i]]); + } + } + return ret; +} + +/** + * Given a list of visitor set names, return the ordered list of visitors to be + * passed to jstransform. + * + * @param {array} + * @return {array} + */ +function getVisitorsBySet(sets) { + var visitorsToInclude = sets.reduce(function(visitors, set) { + if (!transformSets.hasOwnProperty(set)) { + throw new Error('Unknown visitor set: ' + set); + } + transformSets[set].forEach(function(visitor) { + visitors[visitor] = true; + }); + return visitors; + }, {}); + + var visitorList = []; + for (var i = 0; i < transformRunOrder.length; i++) { + if (visitorsToInclude.hasOwnProperty(transformRunOrder[i])) { + visitorList = visitorList.concat(transformVisitors[transformRunOrder[i]]); + } + } + + return visitorList; +} + +exports.getVisitorsBySet = getVisitorsBySet; +exports.getAllVisitors = getAllVisitors; +exports.transformVisitors = transformVisitors; + +},{"./transforms/react":38,"./transforms/reactDisplayName":39,"jstransform/visitors/es6-arrow-function-visitors":24,"jstransform/visitors/es6-call-spread-visitors":25,"jstransform/visitors/es6-class-visitors":26,"jstransform/visitors/es6-destructuring-visitors":27,"jstransform/visitors/es6-object-concise-method-visitors":28,"jstransform/visitors/es6-object-short-notation-visitors":29,"jstransform/visitors/es6-rest-param-visitors":30,"jstransform/visitors/es6-template-visitors":31,"jstransform/visitors/es7-spread-property-visitors":33,"jstransform/visitors/reserved-words-visitors":35}],41:[function(_dereq_,module,exports){ +/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +'use strict'; +/*eslint-disable no-undef*/ +var Buffer = _dereq_('buffer').Buffer; + +function inlineSourceMap(sourceMap, sourceCode, sourceFilename) { + // This can be used with a sourcemap that has already has toJSON called on it. + // Check first. + var json = sourceMap; + if (typeof sourceMap.toJSON === 'function') { + json = sourceMap.toJSON(); + } + json.sources = [sourceFilename]; + json.sourcesContent = [sourceCode]; + var base64 = Buffer(JSON.stringify(json)).toString('base64'); + return '//# sourceMappingURL=data:application/json;base64,' + base64; +} + +module.exports = inlineSourceMap; + +},{"buffer":3}]},{},[1])(1) +}); \ No newline at end of file diff --git a/script/react-dom-server.js b/script/react-dom-server.js new file mode 100644 index 0000000..c6d9a97 --- /dev/null +++ b/script/react-dom-server.js @@ -0,0 +1,12 @@ +/** + * ReactDOMServer v15.0.2 + * + * Copyright 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e(require("react"));else if("function"==typeof define&&define.amd)define(["react"],e);else{var f;f="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,f.ReactDOMServer=e(f.React)}}(function(e){return e.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED}); \ No newline at end of file diff --git a/script/react-with-addons.js b/script/react-with-addons.js new file mode 100644 index 0000000..8697569 --- /dev/null +++ b/script/react-with-addons.js @@ -0,0 +1,16 @@ +/** + * React (with addons) v15.0.2 + * + * Copyright 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.React=e()}}(function(){return function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[a]={exports:{}};t[a][0].call(c.exports,function(e){var n=t[a][1][e];return o(n?n:e)},c,c.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a8&&11>=T),N=32,w=String.fromCharCode(N),S=f.topLevelTypes,M={beforeInput:{phasedRegistrationNames:{bubbled:C({onBeforeInput:null}),captured:C({onBeforeInputCapture:null})},dependencies:[S.topCompositionEnd,S.topKeyPress,S.topTextInput,S.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:C({onCompositionEnd:null}),captured:C({onCompositionEndCapture:null})},dependencies:[S.topBlur,S.topCompositionEnd,S.topKeyDown,S.topKeyPress,S.topKeyUp,S.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:C({onCompositionStart:null}),captured:C({onCompositionStartCapture:null})},dependencies:[S.topBlur,S.topCompositionStart,S.topKeyDown,S.topKeyPress,S.topKeyUp,S.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:C({onCompositionUpdate:null}),captured:C({onCompositionUpdateCapture:null})},dependencies:[S.topBlur,S.topCompositionUpdate,S.topKeyDown,S.topKeyPress,S.topKeyUp,S.topMouseDown]}},k=!1,R=null,D={eventTypes:M,extractEvents:function(e,t,n,r){return[l(e,t,n,r),d(e,t,n,r)]}};t.exports=D},{110:110,114:114,156:156,16:16,174:174,20:20,21:21}],3:[function(e,t,n){"use strict";function r(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var o={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},i=["Webkit","ms","Moz","O"];Object.keys(o).forEach(function(e){i.forEach(function(t){o[r(t,e)]=o[e]})});var a={background:{backgroundAttachment:!0,backgroundColor:!0,backgroundImage:!0,backgroundPositionX:!0,backgroundPositionY:!0,backgroundRepeat:!0},backgroundPosition:{backgroundPositionX:!0,backgroundPositionY:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0},outline:{outlineWidth:!0,outlineStyle:!0,outlineColor:!0}},s={isUnitlessNumber:o,shorthandPropertyExpansions:a};t.exports=s},{}],4:[function(e,t,n){"use strict";var r=e(3),o=e(156),i=e(86),a=(e(158),e(127)),s=e(169),u=e(176),l=(e(178),u(function(e){return s(e)})),c=!1,p="cssFloat";if(o.canUseDOM){var d=document.createElement("div").style;try{d.font=""}catch(f){c=!0}void 0===document.documentElement.style.cssFloat&&(p="styleFloat")}var h={createMarkupForStyles:function(e,t){var n="";for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];null!=o&&(n+=l(r)+":",n+=a(r,o,t)+";")}return n||null},setValueForStyles:function(e,t,n){var o=e.style;for(var i in t)if(t.hasOwnProperty(i)){var s=a(i,t[i],n);if("float"!==i&&"cssFloat"!==i||(i=p),s)o[i]=s;else{var u=c&&r.shorthandPropertyExpansions[i];if(u)for(var l in u)o[l]="";else o[i]=""}}}};i.measureMethods(h,"CSSPropertyOperations",{setValueForStyles:"setValueForStyles"}),t.exports=h},{127:127,156:156,158:158,169:169,176:176,178:178,3:3,86:86}],5:[function(e,t,n){"use strict";function r(){this._callbacks=null,this._contexts=null}var o=e(179),i=e(26),a=e(170);o(r.prototype,{enqueue:function(e,t){this._callbacks=this._callbacks||[],this._contexts=this._contexts||[],this._callbacks.push(e),this._contexts.push(t)},notifyAll:function(){var e=this._callbacks,t=this._contexts;if(e){e.length!==t.length?a(!1):void 0,this._callbacks=null,this._contexts=null;for(var n=0;n8));var L=!1;_.canUseDOM&&(L=N("input")&&(!("documentMode"in document)||document.documentMode>11));var U={get:function(){return O.get.call(this)},set:function(e){A=""+e,O.set.call(this,e)}},F={eventTypes:k,extractEvents:function(e,t,n,o){var i,a,s=t?E.getNodeFromInstance(t):window;if(r(s)?I?i=u:a=l:w(s)?L?i=f:(i=v,a=h):m(s)&&(i=g),i){var c=i(e,t);if(c){var p=x.getPooled(k.change,c,n,o);return p.type="change",b.accumulateTwoPhaseDispatches(p),p}}a&&a(e,s,t)}};t.exports=F},{101:101,112:112,135:135,142:142,143:143,156:156,16:16,17:17,174:174,20:20,44:44}],7:[function(e,t,n){"use strict";function r(e,t){return Array.isArray(t)&&(t=t[1]),t?t.nextSibling:e.firstChild}function o(e,t,n){c.insertTreeBefore(e,t,n)}function i(e,t,n){Array.isArray(t)?s(e,t[0],t[1],n):g(e,t,n)}function a(e,t){if(Array.isArray(t)){var n=t[1];t=t[0],u(e,t,n),e.removeChild(n)}e.removeChild(t)}function s(e,t,n,r){for(var o=t;;){var i=o.nextSibling;if(g(e,o,r),o===n)break;o=i}}function u(e,t,n){for(;;){var r=t.nextSibling;if(r===n)break;e.removeChild(r)}}function l(e,t,n){var r=e.parentNode,o=e.nextSibling;o===t?n&&g(r,document.createTextNode(n),o):n?(m(o,n),u(r,o,t)):u(r,e,t)}var c=e(8),p=e(12),d=e(81),f=e(86),h=e(126),v=e(147),m=e(148),g=h(function(e,t,n){e.insertBefore(t,n)}),y={dangerouslyReplaceNodeWithMarkup:p.dangerouslyReplaceNodeWithMarkup,replaceDelimitedText:l,processUpdates:function(e,t){for(var n=0;nt||e.hasOverloadedBooleanValue&&t===!1}var i=e(10),a=(e(52),e(86)),s=e(145),u=(e(178),new RegExp("^["+i.ATTRIBUTE_NAME_START_CHAR+"]["+i.ATTRIBUTE_NAME_CHAR+"]*$")),l={},c={},p={createMarkupForID:function(e){return i.ID_ATTRIBUTE_NAME+"="+s(e)},setAttributeForID:function(e,t){e.setAttribute(i.ID_ATTRIBUTE_NAME,t)},createMarkupForRoot:function(){return i.ROOT_ATTRIBUTE_NAME+'=""'},setAttributeForRoot:function(e){e.setAttribute(i.ROOT_ATTRIBUTE_NAME,"")},createMarkupForProperty:function(e,t){var n=i.properties.hasOwnProperty(e)?i.properties[e]:null;if(n){if(o(n,t))return"";var r=n.attributeName;return n.hasBooleanValue||n.hasOverloadedBooleanValue&&t===!0?r+'=""':r+"="+s(t)}return i.isCustomAttribute(e)?null==t?"":e+"="+s(t):null},createMarkupForCustomAttribute:function(e,t){return r(e)&&null!=t?e+"="+s(t):""},setValueForProperty:function(e,t,n){var r=i.properties.hasOwnProperty(t)?i.properties[t]:null;if(r){var a=r.mutationMethod;if(a)a(e,n);else if(o(r,n))this.deleteValueForProperty(e,t);else if(r.mustUseProperty){var s=r.propertyName;r.hasSideEffects&&""+e[s]==""+n||(e[s]=n)}else{var u=r.attributeName,l=r.attributeNamespace;l?e.setAttributeNS(l,u,""+n):r.hasBooleanValue||r.hasOverloadedBooleanValue&&n===!0?e.setAttribute(u,""):e.setAttribute(u,""+n)}}else i.isCustomAttribute(t)&&p.setValueForAttribute(e,t,n)},setValueForAttribute:function(e,t,n){r(t)&&(null==n?e.removeAttribute(t):e.setAttribute(t,""+n))},deleteValueForProperty:function(e,t){var n=i.properties.hasOwnProperty(t)?i.properties[t]:null;if(n){var r=n.mutationMethod;if(r)r(e,void 0);else if(n.mustUseProperty){var o=n.propertyName;n.hasBooleanValue?e[o]=!1:n.hasSideEffects&&""+e[o]==""||(e[o]="")}else e.removeAttribute(n.attributeName)}else i.isCustomAttribute(t)&&e.removeAttribute(t)}};a.measureMethods(p,"DOMPropertyOperations",{setValueForProperty:"setValueForProperty",setValueForAttribute:"setValueForAttribute",deleteValueForProperty:"deleteValueForProperty"}),t.exports=p},{10:10,145:145,178:178,52:52,86:86}],12:[function(e,t,n){"use strict";function r(e){return e.substring(1,e.indexOf(" "))}var o=e(8),i=e(156),a=e(161),s=e(162),u=e(166),l=e(170),c=/^(<[^ \/>]+)/,p="data-danger-index",d={dangerouslyRenderMarkup:function(e){i.canUseDOM?void 0:l(!1);for(var t,n={},o=0;o-1?void 0:a(!1),!l.plugins[n]){t.extractEvents?void 0:a(!1),l.plugins[n]=t;var r=t.eventTypes;for(var i in r)o(r[i],t,i)?void 0:a(!1)}}}function o(e,t,n){l.eventNameDispatchConfigs.hasOwnProperty(n)?a(!1):void 0,l.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var o in r)if(r.hasOwnProperty(o)){var s=r[o];i(s,t,n)}return!0}return e.registrationName?(i(e.registrationName,t,n),!0):!1}function i(e,t,n){l.registrationNameModules[e]?a(!1):void 0,l.registrationNameModules[e]=t,l.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var a=e(170),s=null,u={},l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(e){s?a(!1):void 0,s=Array.prototype.slice.call(e),r()},injectEventPluginsByName:function(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];u.hasOwnProperty(n)&&u[n]===o||(u[n]?a(!1):void 0,u[n]=o,t=!0)}t&&r()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return l.registrationNameModules[t.registrationName]||null;for(var n in t.phasedRegistrationNames)if(t.phasedRegistrationNames.hasOwnProperty(n)){var r=l.registrationNameModules[t.phasedRegistrationNames[n]];if(r)return r}return null},_resetEventPlugins:function(){s=null;for(var e in u)u.hasOwnProperty(e)&&delete u[e];l.plugins.length=0;var t=l.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=l.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};t.exports=l},{170:170}],19:[function(e,t,n){"use strict";function r(e){return e===y.topMouseUp||e===y.topTouchEnd||e===y.topTouchCancel}function o(e){return e===y.topMouseMove||e===y.topTouchMove}function i(e){return e===y.topMouseDown||e===y.topTouchStart}function a(e,t,n,r){var o=e.type||"unknown-event";e.currentTarget=C.getNodeFromInstance(r),t?v.invokeGuardedCallbackWithCatch(o,n,e):v.invokeGuardedCallback(o,n,e),e.currentTarget=null}function s(e,t){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;oe&&n[e]===o[e];e++);var a=r-e;for(t=1;a>=t&&n[r-t]===o[i-t];t++);var s=t>1?1-t:void 0;return this._fallbackText=o.slice(e,s),this._fallbackText}}),i.addPoolingTo(r),t.exports=r},{139:139,179:179,26:26}],22:[function(e,t,n){"use strict";var r=e(10),o=r.injection.MUST_USE_PROPERTY,i=r.injection.HAS_BOOLEAN_VALUE,a=r.injection.HAS_SIDE_EFFECTS,s=r.injection.HAS_NUMERIC_VALUE,u=r.injection.HAS_POSITIVE_NUMERIC_VALUE,l=r.injection.HAS_OVERLOADED_BOOLEAN_VALUE,c={isCustomAttribute:RegExp.prototype.test.bind(new RegExp("^(data|aria)-["+r.ATTRIBUTE_NAME_CHAR+"]*$")),Properties:{accept:0,acceptCharset:0,accessKey:0,action:0,allowFullScreen:i,allowTransparency:0,alt:0,async:i,autoComplete:0,autoPlay:i,capture:i,cellPadding:0,cellSpacing:0,charSet:0,challenge:0,checked:o|i,cite:0,classID:0,className:0,cols:u,colSpan:0,content:0,contentEditable:0,contextMenu:0,controls:i,coords:0,crossOrigin:0,data:0,dateTime:0,"default":i,defer:i,dir:0,disabled:i,download:l,draggable:0,encType:0,form:0,formAction:0,formEncType:0,formMethod:0,formNoValidate:i,formTarget:0,frameBorder:0,headers:0,height:0,hidden:i,high:0,href:0,hrefLang:0,htmlFor:0,httpEquiv:0,icon:0,id:0,inputMode:0,integrity:0,is:0,keyParams:0,keyType:0,kind:0,label:0,lang:0,list:0,loop:i,low:0,manifest:0,marginHeight:0,marginWidth:0,max:0,maxLength:0,media:0,mediaGroup:0,method:0,min:0,minLength:0,multiple:o|i,muted:o|i,name:0,nonce:0,noValidate:i,open:i,optimum:0,pattern:0,placeholder:0,poster:0,preload:0,profile:0,radioGroup:0,readOnly:i,rel:0,required:i,reversed:i,role:0,rows:u,rowSpan:s,sandbox:0,scope:0,scoped:i,scrolling:0,seamless:i,selected:o|i,shape:0,size:u,sizes:0,span:u,spellCheck:0,src:0,srcDoc:0,srcLang:0,srcSet:0,start:s,step:0,style:0,summary:0,tabIndex:0,target:0,title:0,type:0,useMap:0,value:o|a,width:0,wmode:0,wrap:0,about:0,datatype:0,inlist:0,prefix:0,property:0,resource:0,"typeof":0,vocab:0,autoCapitalize:0,autoCorrect:0,autoSave:0,color:0,itemProp:0,itemScope:i,itemType:0,itemID:0,itemRef:0,results:0,security:0,unselectable:0},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{}};t.exports=c},{10:10}],23:[function(e,t,n){"use strict";function r(e){var t=/[=:]/g,n={"=":"=0",":":"=2"},r=(""+e).replace(t,function(e){return n[e]});return"$"+r}function o(e){var t=/(=0|=2)/g,n={"=0":"=","=2":":"},r="."===e[0]&&"$"===e[1]?e.substring(2):e.substring(1);return(""+r).replace(t,function(e){return n[e]})}var i={escape:r,unescape:o};t.exports=i},{}],24:[function(e,t,n){"use strict";var r=e(77),o=e(96),i={linkState:function(e){return new r(this.state[e],o.createStateKeySetter(this,e))}};t.exports=i},{77:77,96:96}],25:[function(e,t,n){"use strict";function r(e){null!=e.checkedLink&&null!=e.valueLink?l(!1):void 0}function o(e){r(e),null!=e.value||null!=e.onChange?l(!1):void 0}function i(e){r(e),null!=e.checked||null!=e.onChange?l(!1):void 0}function a(e){if(e){var t=e.getName();if(t)return" Check the render method of `"+t+"`."}return""}var s=e(89),u=e(88),l=e(170),c=(e(178),{button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0}),p={value:function(e,t,n){return!e[t]||c[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t,n){return!e[t]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:s.func},d={},f={checkPropTypes:function(e,t,n){for(var r in p){if(p.hasOwnProperty(r))var o=p[r](t,r,e,u.prop);o instanceof Error&&!(o.message in d)&&(d[o.message]=!0,a(n))}},getValue:function(e){return e.valueLink?(o(e),e.valueLink.value):e.value},getChecked:function(e){return e.checkedLink?(i(e),e.checkedLink.value):e.checked},executeOnChange:function(e,t){return e.valueLink?(o(e),e.valueLink.requestChange(t.target.value)):e.checkedLink?(i(e),e.checkedLink.requestChange(t.target.checked)):e.onChange?e.onChange.call(void 0,t):void 0}};t.exports=f},{170:170,178:178,88:88,89:89}],26:[function(e,t,n){"use strict";var r=e(170),o=function(e){var t=this;if(t.instancePool.length){var n=t.instancePool.pop();return t.call(n,e),n}return new t(e)},i=function(e,t){var n=this;if(n.instancePool.length){var r=n.instancePool.pop();return n.call(r,e,t),r}return new n(e,t)},a=function(e,t,n){var r=this;if(r.instancePool.length){var o=r.instancePool.pop();return r.call(o,e,t,n),o}return new r(e,t,n)},s=function(e,t,n,r){var o=this;if(o.instancePool.length){var i=o.instancePool.pop();return o.call(i,e,t,n,r),i}return new o(e,t,n,r)},u=function(e,t,n,r,o){var i=this;if(i.instancePool.length){var a=i.instancePool.pop();return i.call(a,e,t,n,r,o),a}return new i(e,t,n,r,o)},l=function(e){var t=this;e instanceof t?void 0:r(!1),e.destructor(),t.instancePool.length=0||null!=t.is}function p(e){var t=e.type;l(t),this._currentElement=e,this._tag=t.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._nativeNode=null,this._nativeParent=null,this._rootNodeID=null,this._domID=null,this._nativeContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}var d=e(179),f=e(1),h=e(4),v=e(8),m=e(9),g=e(10),y=e(11),C=e(16),b=e(17),_=e(18),E=e(28),T=e(35),x=e(41),P=e(43),N=e(44),w=e(51),S=e(53),M=e(54),k=e(58),R=e(80),D=e(86),A=e(128),O=e(170),I=(e(142),e(174)),L=(e(177),e(153),e(178),P),U=b.deleteListener,F=N.getNodeFromInstance,V=E.listenTo,B=_.registrationNameModules,j={string:!0,number:!0},W=I({style:null}),K=I({__html:null}),q={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},H=11,Y={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},z={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},G={listing:!0,pre:!0,textarea:!0},X=d({menuitem:!0},z),Q=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,$={},Z={}.hasOwnProperty,J=1;p.displayName="ReactDOMComponent",p.Mixin={mountComponent:function(e,t,n,o){this._rootNodeID=J++,this._domID=n._idCounter++,this._nativeParent=t,this._nativeContainerInfo=n;var i=this._currentElement.props;switch(this._tag){case"iframe":case"object":case"img":case"form":case"video":case"audio":this._wrapperState={listeners:null},e.getReactMountReady().enqueue(s,this);break;case"button":i=x.getNativeProps(this,i,t);break;case"input":w.mountWrapper(this,i,t),i=w.getNativeProps(this,i),e.getReactMountReady().enqueue(s,this);break;case"option":S.mountWrapper(this,i,t),i=S.getNativeProps(this,i);break;case"select":M.mountWrapper(this,i,t),i=M.getNativeProps(this,i),e.getReactMountReady().enqueue(s,this);break;case"textarea":k.mountWrapper(this,i,t),i=k.getNativeProps(this,i),e.getReactMountReady().enqueue(s,this)}r(this,i);var u,l;null!=t?(u=t._namespaceURI,l=t._tag):n._tag&&(u=n._namespaceURI,l=n._tag),(null==u||u===m.svg&&"foreignobject"===l)&&(u=m.html),u===m.html&&("svg"===this._tag?u=m.svg:"math"===this._tag&&(u=m.mathml)),this._namespaceURI=u;var c;if(e.useCreateElement){var p,d=n._ownerDocument;if(u===m.html)if("script"===this._tag){var h=d.createElement("div"),g=this._currentElement.type;h.innerHTML="<"+g+">",p=h.removeChild(h.firstChild)}else p=d.createElement(this._currentElement.type);else p=d.createElementNS(u,this._currentElement.type);N.precacheNode(this,p),this._flags|=L.hasCachedChildNodes,this._nativeParent||y.setAttributeForRoot(p),this._updateDOMProperties(null,i,e);var C=v(p);this._createInitialChildren(e,i,o,C),c=C}else{var b=this._createOpenTagMarkupAndPutListeners(e,i),_=this._createContentMarkup(e,i,o);c=!_&&z[this._tag]?b+"/>":b+">"+_+""}switch(this._tag){case"button":case"input":case"select":case"textarea":i.autoFocus&&e.getReactMountReady().enqueue(f.focusDOMComponent,this);break;case"option":e.getReactMountReady().enqueue(a,this)}return c},_createOpenTagMarkupAndPutListeners:function(e,t){var n="<"+this._currentElement.type;for(var r in t)if(t.hasOwnProperty(r)){var i=t[r];if(null!=i)if(B.hasOwnProperty(r))i&&o(this,r,i,e);else{r===W&&(i&&(i=this._previousStyleCopy=d({},t.style)),i=h.createMarkupForStyles(i,this));var a=null;null!=this._tag&&c(this._tag,t)?q.hasOwnProperty(r)||(a=y.createMarkupForCustomAttribute(r,i)):a=y.createMarkupForProperty(r,i),a&&(n+=" "+a)}}return e.renderToStaticMarkup?n:(this._nativeParent||(n+=" "+y.createMarkupForRoot()),n+=" "+y.createMarkupForID(this._domID))},_createContentMarkup:function(e,t,n){var r="",o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&(r=o.__html);else{var i=j[typeof t.children]?t.children:null,a=null!=i?null:t.children;if(null!=i)r=A(i);else if(null!=a){var s=this.mountChildren(a,e,n);r=s.join("")}}return G[this._tag]&&"\n"===r.charAt(0)?"\n"+r:r},_createInitialChildren:function(e,t,n,r){var o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&v.queueHTML(r,o.__html);else{var i=j[typeof t.children]?t.children:null,a=null!=i?null:t.children;if(null!=i)v.queueText(r,i);else if(null!=a)for(var s=this.mountChildren(a,e,n),u=0;u"},receiveComponent:function(){},getNativeNode:function(){return i.getNodeFromInstance(this)},unmountComponent:function(){i.uncacheNode(this)}}),t.exports=a},{179:179,44:44,8:8}],48:[function(e,t,n){"use strict";function r(e){return o.createFactory(e)}var o=e(64),i=(e(65),e(175)),a=i({a:"a",abbr:"abbr",address:"address",area:"area",article:"article",aside:"aside",audio:"audio",b:"b",base:"base",bdi:"bdi",bdo:"bdo",big:"big",blockquote:"blockquote",body:"body",br:"br",button:"button",canvas:"canvas",caption:"caption",cite:"cite",code:"code",col:"col",colgroup:"colgroup",data:"data",datalist:"datalist",dd:"dd",del:"del",details:"details",dfn:"dfn",dialog:"dialog",div:"div",dl:"dl",dt:"dt",em:"em",embed:"embed",fieldset:"fieldset",figcaption:"figcaption",figure:"figure",footer:"footer",form:"form",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",head:"head",header:"header",hgroup:"hgroup",hr:"hr",html:"html",i:"i",iframe:"iframe",img:"img",input:"input",ins:"ins",kbd:"kbd",keygen:"keygen",label:"label",legend:"legend",li:"li",link:"link",main:"main",map:"map",mark:"mark",menu:"menu",menuitem:"menuitem",meta:"meta",meter:"meter",nav:"nav",noscript:"noscript",object:"object",ol:"ol",optgroup:"optgroup",option:"option",output:"output",p:"p",param:"param",picture:"picture",pre:"pre",progress:"progress",q:"q",rp:"rp",rt:"rt",ruby:"ruby",s:"s",samp:"samp",script:"script",section:"section",select:"select",small:"small",source:"source",span:"span",strong:"strong",style:"style",sub:"sub",summary:"summary",sup:"sup",table:"table",tbody:"tbody",td:"td",textarea:"textarea",tfoot:"tfoot",th:"th",thead:"thead",time:"time",title:"title",tr:"tr",track:"track",u:"u",ul:"ul","var":"var",video:"video",wbr:"wbr",circle:"circle",clipPath:"clipPath",defs:"defs",ellipse:"ellipse",g:"g",image:"image",line:"line",linearGradient:"linearGradient",mask:"mask",path:"path",pattern:"pattern",polygon:"polygon",polyline:"polyline",radialGradient:"radialGradient",rect:"rect",stop:"stop",svg:"svg",text:"text",tspan:"tspan"},r);t.exports=a},{175:175,64:64,65:65}],49:[function(e,t,n){"use strict";var r={useCreateElement:!0};t.exports=r},{}],50:[function(e,t,n){"use strict";var r=e(7),o=e(44),i=e(86),a={dangerouslyProcessChildrenUpdates:function(e,t){var n=o.getNodeFromInstance(e);r.processUpdates(n,t)}};i.measureMethods(a,"ReactDOMIDOperations",{dangerouslyProcessChildrenUpdates:"dangerouslyProcessChildrenUpdates"}),t.exports=a},{44:44,7:7,86:86}],51:[function(e,t,n){"use strict";function r(){this._rootNodeID&&d.updateWrapper(this)}function o(e){var t=this._currentElement.props,n=u.executeOnChange(t,e);c.asap(r,this);var o=t.name;if("radio"===t.type&&null!=o){for(var i=l.getNodeFromInstance(this),a=i;a.parentNode;)a=a.parentNode;for(var s=a.querySelectorAll("input[name="+JSON.stringify(""+o)+'][type="radio"]'),d=0;dt.end?(n=t.end,r=t.start):(n=t.start,r=t.end),o.moveToElementText(e),o.moveStart("character",n),o.setEndPoint("EndToStart",o),o.moveEnd("character",r-n),o.select()}function s(e,t){if(window.getSelection){var n=window.getSelection(),r=e[c()].length,o=Math.min(t.start,r),i=void 0===t.end?o:Math.min(t.end,r);if(!n.extend&&o>i){var a=i;i=o,o=a}var s=l(e,o),u=l(e,i);if(s&&u){var p=document.createRange();p.setStart(s.node,s.offset),n.removeAllRanges(),o>i?(n.addRange(p),n.extend(u.node,u.offset)):(p.setEnd(u.node,u.offset),n.addRange(p))}}}var u=e(156),l=e(138),c=e(139),p=u.canUseDOM&&"selection"in document&&!("getSelection"in window),d={getOffsets:p?o:i,setOffsets:p?a:s};t.exports=d},{138:138,139:139,156:156}],56:[function(e,t,n){"use strict";var r=e(63),o=e(94),i=e(102);r.inject();var a={renderToString:o.renderToString,renderToStaticMarkup:o.renderToStaticMarkup,version:i};t.exports=a},{102:102,63:63,94:94}],57:[function(e,t,n){"use strict";var r=e(179),o=e(7),i=e(8),a=e(44),s=e(86),u=e(128),l=e(170),c=(e(153),function(e){this._currentElement=e,this._stringText=""+e,this._nativeNode=null,this._nativeParent=null,this._domID=null,this._mountIndex=0,this._closingComment=null,this._commentNodes=null});r(c.prototype,{mountComponent:function(e,t,n,r){var o=n._idCounter++,s=" react-text: "+o+" ",l=" /react-text ";if(this._domID=o,this._nativeParent=t,e.useCreateElement){var c=n._ownerDocument,p=c.createComment(s),d=c.createComment(l),f=i(c.createDocumentFragment());return i.queueChild(f,i(p)),this._stringText&&i.queueChild(f,i(c.createTextNode(this._stringText))),i.queueChild(f,i(d)),a.precacheNode(this,p),this._closingComment=d,f}var h=u(this._stringText);return e.renderToStaticMarkup?h:""+h+""},receiveComponent:function(e,t){if(e!==this._currentElement){this._currentElement=e;var n=""+e;if(n!==this._stringText){this._stringText=n;var r=this.getNativeNode();o.replaceDelimitedText(r[0],r[1],n)}}},getNativeNode:function(){var e=this._commentNodes;if(e)return e;if(!this._closingComment)for(var t=a.getNodeFromInstance(this),n=t.nextSibling;;){if(null==n?l(!1):void 0,8===n.nodeType&&" /react-text "===n.nodeValue){this._closingComment=n;break}n=n.nextSibling}return e=[this._nativeNode,this._closingComment],this._commentNodes=e,e},unmountComponent:function(){this._closingComment=null,this._commentNodes=null,a.uncacheNode(this)}}),s.measureMethods(c.prototype,"ReactDOMTextComponent",{mountComponent:"mountComponent",receiveComponent:"receiveComponent"}),t.exports=c},{128:128,153:153,170:170,179:179,44:44,7:7,8:8,86:86}],58:[function(e,t,n){"use strict";function r(){this._rootNodeID&&d.updateWrapper(this)}function o(e){var t=this._currentElement.props,n=u.executeOnChange(t,e);return c.asap(r,this),n}var i=e(179),a=e(14),s=e(11),u=e(25),l=e(44),c=e(101),p=e(170),d=(e(178),{getNativeProps:function(e,t){null!=t.dangerouslySetInnerHTML?p(!1):void 0;var n=i({},a.getNativeProps(e,t),{defaultValue:void 0,value:void 0,children:e._wrapperState.initialValue,onChange:e._wrapperState.onChange});return n},mountWrapper:function(e,t){var n=t.defaultValue,r=t.children;null!=r&&(null!=n?p(!1):void 0,Array.isArray(r)&&(r.length<=1?void 0:p(!1),r=r[0]),n=""+r),null==n&&(n="");var i=u.getValue(t);e._wrapperState={initialValue:""+(null!=i?i:n),listeners:null,onChange:o.bind(e)}},updateWrapper:function(e){var t=e._currentElement.props,n=u.getValue(t);null!=n&&s.setValueForProperty(l.getNodeFromInstance(e),"value",""+n)}});t.exports=d},{101:101,11:11,14:14,170:170,178:178,179:179,25:25,44:44}],59:[function(e,t,n){"use strict";function r(e,t){"_nativeNode"in e?void 0:u(!1),"_nativeNode"in t?void 0:u(!1);for(var n=0,r=e;r;r=r._nativeParent)n++;for(var o=0,i=t;i;i=i._nativeParent)o++;for(;n-o>0;)e=e._nativeParent,n--;for(;o-n>0;)t=t._nativeParent,o--;for(var a=n;a--;){if(e===t)return e;e=e._nativeParent,t=t._nativeParent}return null}function o(e,t){"_nativeNode"in e?void 0:u(!1),"_nativeNode"in t?void 0:u(!1);for(;t;){if(t===e)return!0;t=t._nativeParent}return!1}function i(e){return"_nativeNode"in e?void 0:u(!1),e._nativeParent}function a(e,t,n){for(var r=[];e;)r.push(e),e=e._nativeParent;var o;for(o=r.length;o-- >0;)t(r[o],!1,n);for(o=0;o0;)n(u[l],!1,i)}var u=e(170);t.exports={isAncestor:o,getLowestCommonAncestor:r,getParentInstance:i,traverseTwoPhase:a,traverseEnterLeave:s}},{170:170}],60:[function(e,t,n){"use strict";var r,o=(e(10),e(18),e(178),{onCreateMarkupForProperty:function(e,t){r(e)},onSetValueForProperty:function(e,t,n){r(t)},onDeleteValueForProperty:function(e,t){r(t)}});t.exports=o},{10:10,178:178,18:18}],61:[function(e,t,n){"use strict";function r(e,t,n,r,o,i){}var o=e(76),i=(e(178),[]),a={addDevtool:function(e){i.push(e)},removeDevtool:function(e){for(var t=0;t1){for(var f=Array(d),h=0;d>h;h++)f[h]=arguments[h+2];i.children=f}if(e&&e.defaultProps){var v=e.defaultProps;for(r in v)void 0===i[r]&&(i[r]=v[r])}return s(e,u,l,c,p,o.current,i)},s.createFactory=function(e){var t=s.createElement.bind(null,e);return t.type=e,t},s.cloneAndReplaceKey=function(e,t){var n=s(e.type,t,e.ref,e._self,e._source,e._owner,e.props);return n},s.cloneElement=function(e,t,n){var i,u=r({},e.props),l=e.key,c=e.ref,p=e._self,d=e._source,f=e._owner;if(null!=t){void 0!==t.ref&&(c=t.ref,f=o.current),void 0!==t.key&&(l=""+t.key);var h;e.type&&e.type.defaultProps&&(h=e.type.defaultProps);for(i in t)t.hasOwnProperty(i)&&!a.hasOwnProperty(i)&&(void 0===t[i]&&void 0!==h?u[i]=h[i]:u[i]=t[i])}var v=arguments.length-2;if(1===v)u.children=n;else if(v>1){for(var m=Array(v),g=0;v>g;g++)m[g]=arguments[g+2];u.children=m}return s(e.type,l,c,p,d,f,u)},s.isValidElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===i},t.exports=s},{125:125,178:178,179:179,39:39}],65:[function(e,t,n){"use strict";function r(){if(p.current){var e=p.current.getName();if(e)return" Check the render method of `"+e+"`."}return""}function o(e,t){e._store&&!e._store.validated&&null==e.key&&(e._store.validated=!0,i("uniqueKey",e,t))}function i(e,t,n){var o=r();if(!o){var i="string"==typeof n?n:n.displayName||n.name;i&&(o=" Check the top-level render call using <"+i+">.")}var a=h[e]||(h[e]={});if(a[o])return null;a[o]=!0;var s={parentOrOwner:o,url:" See https://fb.me/react-warning-keys for more information.",childOwner:null};return t&&t._owner&&t._owner!==p.current&&(s.childOwner=" It was passed a child from "+t._owner.getName()+"."),s}function a(e,t){if("object"==typeof e)if(Array.isArray(e))for(var n=0;n/,i=/^<\!\-\-/,a={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(e){var t=r(e);return i.test(e)?e:e.replace(o," "+a.CHECKSUM_ATTR_NAME+'="'+t+'"$&')},canReuseMarkup:function(e,t){var n=t.getAttribute(a.CHECKSUM_ATTR_NAME);n=n&&parseInt(n,10);var o=r(e);return o===n}};t.exports=a},{124:124}],79:[function(e,t,n){"use strict";function r(e,t){for(var n=Math.min(e.length,t.length),r=0;n>r;r++)if(e.charAt(r)!==t.charAt(r))return r;return e.length===t.length?-1:n}function o(e){return e?e.nodeType===A?e.documentElement:e.firstChild:null}function i(e){return e.getAttribute&&e.getAttribute(k)||""}function a(e,t,n,r,o){var i;if(C.logTopLevelRenders){var a=e._currentElement.props,s=a.type;i="React mount: "+("string"==typeof s?s:s.displayName||s.name),console.time(i)}var u=E.mountComponent(e,n,null,m(e,t),o);i&&console.timeEnd(i),e._renderedComponent._topLevelWrapper=e,F._mountImageIntoNode(u,t,e,r,n)}function s(e,t,n,r){var o=x.ReactReconcileTransaction.getPooled(!n&&g.useCreateElement);o.perform(a,null,e,t,o,n,r),x.ReactReconcileTransaction.release(o)}function u(e,t,n){for(E.unmountComponent(e,n),t.nodeType===A&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)}function l(e){var t=o(e);if(t){var n=v.getInstanceFromNode(t);return!(!n||!n._nativeParent)}}function c(e){var t=o(e),n=t&&v.getInstanceFromNode(t);return n&&!n._nativeParent?n:null}function p(e){var t=c(e);return t?t._nativeContainerInfo._topLevelWrapper:null}var d=e(8),f=e(10),h=e(28),v=(e(39),e(44)),m=e(45),g=e(49),y=e(64),C=e(70),b=(e(75),e(78)),_=e(86),E=e(91),T=e(100),x=e(101),P=e(163),N=e(141),w=e(170),S=e(147),M=e(150),k=(e(178),f.ID_ATTRIBUTE_NAME),R=f.ROOT_ATTRIBUTE_NAME,D=1,A=9,O=11,I={},L=1,U=function(){this.rootID=L++};U.prototype.isReactComponent={},U.prototype.render=function(){return this.props};var F={TopLevelWrapper:U,_instancesByReactRootID:I,scrollMonitor:function(e,t){t()},_updateRootComponent:function(e,t,n,r){return F.scrollMonitor(n,function(){T.enqueueElementInternal(e,t),r&&T.enqueueCallbackInternal(e,r)}),e},_renderNewRootComponent:function(e,t,n,r){!t||t.nodeType!==D&&t.nodeType!==A&&t.nodeType!==O?w(!1):void 0,h.ensureScrollValueMonitoring();var o=N(e);x.batchedUpdates(s,o,t,n,r);var i=o._instance.rootID;return I[i]=o,o},renderSubtreeIntoContainer:function(e,t,n,r){return null==e||null==e._reactInternalInstance?w(!1):void 0,F._renderSubtreeIntoContainer(e,t,n,r)},_renderSubtreeIntoContainer:function(e,t,n,r){T.validateCallback(r,"ReactDOM.render"),y.isValidElement(t)?void 0:w(!1);var a=y(U,null,null,null,null,null,t),s=p(n);if(s){var u=s._currentElement,c=u.props;if(M(c,t)){var d=s._renderedComponent.getPublicInstance(),f=r&&function(){r.call(d)};return F._updateRootComponent(s,a,n,f),d}F.unmountComponentAtNode(n)}var h=o(n),v=h&&!!i(h),m=l(n),g=v&&!s&&!m,C=F._renderNewRootComponent(a,n,g,null!=e?e._reactInternalInstance._processChildContext(e._reactInternalInstance._context):P)._renderedComponent.getPublicInstance();return r&&r.call(C),C},render:function(e,t,n){return F._renderSubtreeIntoContainer(null,e,t,n)},unmountComponentAtNode:function(e){!e||e.nodeType!==D&&e.nodeType!==A&&e.nodeType!==O?w(!1):void 0;var t=p(e);return t?(delete I[t._instance.rootID],x.batchedUpdates(u,t,e,!1),!0):(l(e),1===e.nodeType&&e.hasAttribute(R),!1)},_mountImageIntoNode:function(e,t,n,i,a){if(!t||t.nodeType!==D&&t.nodeType!==A&&t.nodeType!==O?w(!1):void 0,i){var s=o(t);if(b.canReuseMarkup(e,s))return void v.precacheNode(n,s);var u=s.getAttribute(b.CHECKSUM_ATTR_NAME);s.removeAttribute(b.CHECKSUM_ATTR_NAME);var l=s.outerHTML;s.setAttribute(b.CHECKSUM_ATTR_NAME,u);var c=e,p=r(c,l);" (client) "+c.substring(p-20,p+20)+"\n (server) "+l.substring(p-20,p+20),t.nodeType===A?w(!1):void 0}if(t.nodeType===A?w(!1):void 0,a.useCreateElement){for(;t.lastChild;)t.removeChild(t.lastChild);d.insertTreeBefore(t,e,null)}else S(t,e),v.precacheNode(n,t.firstChild)}};_.measureMethods(F,"ReactMount",{_renderNewRootComponent:"_renderNewRootComponent",_mountImageIntoNode:"_mountImageIntoNode"}),t.exports=F},{10:10,100:100,101:101,141:141,147:147,150:150,163:163,170:170,178:178,28:28,39:39,44:44,45:45,49:49,64:64,70:70,75:75,78:78,8:8,86:86,91:91}],80:[function(e,t,n){"use strict";function r(e,t,n){return{type:p.INSERT_MARKUP,content:e,fromIndex:null,fromNode:null,toIndex:n,afterNode:t}}function o(e,t,n){return{type:p.MOVE_EXISTING,content:null,fromIndex:e._mountIndex,fromNode:d.getNativeNode(e),toIndex:n,afterNode:t}}function i(e,t){return{type:p.REMOVE_NODE,content:null,fromIndex:e._mountIndex,fromNode:t,toIndex:null,afterNode:null}}function a(e){return{type:p.SET_MARKUP,content:e,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function s(e){return{type:p.TEXT_CONTENT,content:e,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function u(e,t){return t&&(e=e||[],e.push(t)),e}function l(e,t){c.processChildrenUpdates(e,t)}var c=e(36),p=e(81),d=(e(39),e(91)),f=e(31),h=e(130),v=e(170),m={Mixin:{_reconcilerInstantiateChildren:function(e,t,n){return f.instantiateChildren(e,t,n)},_reconcilerUpdateChildren:function(e,t,n,r,o){ +var i;return i=h(t),f.updateChildren(e,i,n,r,o),i},mountChildren:function(e,t,n){var r=this._reconcilerInstantiateChildren(e,t,n);this._renderedChildren=r;var o=[],i=0;for(var a in r)if(r.hasOwnProperty(a)){var s=r[a],u=d.mountComponent(s,t,this,this._nativeContainerInfo,n);s._mountIndex=i++,o.push(u)}return o},updateTextContent:function(e){var t=this._renderedChildren;f.unmountChildren(t,!1);for(var n in t)t.hasOwnProperty(n)&&v(!1);var r=[s(e)];l(this,r)},updateMarkup:function(e){var t=this._renderedChildren;f.unmountChildren(t,!1);for(var n in t)t.hasOwnProperty(n)&&v(!1);var r=[a(e)];l(this,r)},updateChildren:function(e,t,n){this._updateChildren(e,t,n)},_updateChildren:function(e,t,n){var r=this._renderedChildren,o={},i=this._reconcilerUpdateChildren(r,e,o,t,n);if(i||r){var a,s=null,c=0,p=0,f=null;for(a in i)if(i.hasOwnProperty(a)){var h=r&&r[a],v=i[a];h===v?(s=u(s,this.moveChild(h,f,p,c)),c=Math.max(h._mountIndex,c),h._mountIndex=p):(h&&(c=Math.max(h._mountIndex,c)),s=u(s,this._mountChildAtIndex(v,f,p,t,n))),p++,f=d.getNativeNode(v)}for(a in o)o.hasOwnProperty(a)&&(s=u(s,this._unmountChild(r[a],o[a])));s&&l(this,s),this._renderedChildren=i}},unmountChildren:function(e){var t=this._renderedChildren;f.unmountChildren(t,e),this._renderedChildren=null},moveChild:function(e,t,n,r){return e._mountIndex>",x={array:i("array"),bool:i("boolean"),func:i("function"),number:i("number"),object:i("object"),string:i("string"),any:a(),arrayOf:s,element:u(),instanceOf:l,node:f(),objectOf:p,oneOf:c,oneOfType:d,shape:h};t.exports=x},{136:136,162:162,64:64,87:87}],90:[function(e,t,n){"use strict";function r(e){this.reinitializeTransaction(),this.renderToStaticMarkup=!1,this.reactMountReady=i.getPooled(null),this.useCreateElement=e}var o=e(179),i=e(5),a=e(26),s=e(28),u=e(73),l=e(121),c={initialize:u.getSelectionInformation,close:u.restoreSelection},p={initialize:function(){var e=s.isEnabled();return s.setEnabled(!1),e},close:function(e){s.setEnabled(e)}},d={initialize:function(){this.reactMountReady.reset()},close:function(){this.reactMountReady.notifyAll()}},f=[c,p,d],h={getTransactionWrappers:function(){return f},getReactMountReady:function(){return this.reactMountReady},checkpoint:function(){return this.reactMountReady.checkpoint()},rollback:function(e){this.reactMountReady.rollback(e)},destructor:function(){i.release(this.reactMountReady),this.reactMountReady=null}};o(r.prototype,l.Mixin,h),a.addPoolingTo(r),t.exports=r},{121:121,179:179,26:26,28:28,5:5,73:73}],91:[function(e,t,n){"use strict";function r(){o.attachRefs(this,this._currentElement)}var o=e(92),i=(e(75),{mountComponent:function(e,t,n,o,i){var a=e.mountComponent(t,n,o,i);return e._currentElement&&null!=e._currentElement.ref&&t.getReactMountReady().enqueue(r,e),a},getNativeNode:function(e){return e.getNativeNode()},unmountComponent:function(e,t){o.detachRefs(e,e._currentElement),e.unmountComponent(t)},receiveComponent:function(e,t,n,i){var a=e._currentElement;if(t!==a||i!==e._context){var s=o.shouldUpdateRefs(a,t);s&&o.detachRefs(e,a),e.receiveComponent(t,n,i),s&&e._currentElement&&null!=e._currentElement.ref&&n.getReactMountReady().enqueue(r,e)}},performUpdateIfNecessary:function(e,t){e.performUpdateIfNecessary(t)}});t.exports=i},{75:75,92:92}],92:[function(e,t,n){"use strict";function r(e,t,n){"function"==typeof e?e(t.getPublicInstance()):i.addComponentAsRefTo(t,e,n)}function o(e,t,n){"function"==typeof e?e(null):i.removeComponentAsRefFrom(t,e,n)}var i=e(85),a={};a.attachRefs=function(e,t){if(null!==t&&t!==!1){var n=t.ref;null!=n&&r(n,e,t._owner)}},a.shouldUpdateRefs=function(e,t){var n=null===e||e===!1,r=null===t||t===!1;return n||r||t._owner!==e._owner||t.ref!==e.ref},a.detachRefs=function(e,t){if(null!==t&&t!==!1){var n=t.ref;null!=n&&o(n,e,t._owner)}},t.exports=a},{85:85}],93:[function(e,t,n){"use strict";var r={isBatchingUpdates:!1,batchedUpdates:function(e){}};t.exports=r},{}],94:[function(e,t,n){"use strict";function r(e,t){var n;try{return d.injection.injectBatchingStrategy(c),n=p.getPooled(t),n.perform(function(){var r=h(e),o=r.mountComponent(n,null,a(),f);return t||(o=l.addChecksumToMarkup(o)),o},null)}finally{p.release(n),d.injection.injectBatchingStrategy(s)}}function o(e){return u.isValidElement(e)?void 0:v(!1),r(e,!1)}function i(e){return u.isValidElement(e)?void 0:v(!1),r(e,!0)}var a=e(45),s=e(62),u=e(64),l=e(78),c=e(93),p=e(95),d=e(101),f=e(163),h=e(141),v=e(170);t.exports={renderToString:o,renderToStaticMarkup:i}},{101:101,141:141,163:163,170:170,45:45,62:62,64:64,78:78,93:93,95:95}],95:[function(e,t,n){"use strict";function r(e){this.reinitializeTransaction(),this.renderToStaticMarkup=e,this.useCreateElement=!1}var o=e(179),i=e(26),a=e(121),s=[],u={enqueue:function(){}},l={getTransactionWrappers:function(){return s},getReactMountReady:function(){return u},destructor:function(){}};o(r.prototype,a.Mixin,l),i.addPoolingTo(r),t.exports=r},{121:121,179:179,26:26}],96:[function(e,t,n){"use strict";function r(e,t){var n={};return function(r){n[t]=r,e.setState(n)}}var o={createStateSetter:function(e,t){return function(n,r,o,i,a,s){var u=t.call(e,n,r,o,i,a,s);u&&e.setState(u)}},createStateKeySetter:function(e,t){var n=e.__keySetters||(e.__keySetters={});return n[t]||(n[t]=r(e,t))}};o.Mixin={createStateSetter:function(e){return o.createStateSetter(this,e)},createStateKeySetter:function(e){return o.createStateKeySetter(this,e)}},t.exports=o},{}],97:[function(e,t,n){"use strict";var r=e(130),o={getChildMapping:function(e){return e?r(e):e},mergeChildMappings:function(e,t){function n(n){return t.hasOwnProperty(n)?t[n]:e[n]}e=e||{},t=t||{};var r={},o=[];for(var i in e)t.hasOwnProperty(i)?o.length&&(r[i]=o,o=[]):o.push(i);var a,s={};for(var u in t){if(r.hasOwnProperty(u))for(a=0;an;n++){var r=y[n],o=r._pendingCallbacks;r._pendingCallbacks=null;var i;if(f.logTopLevelRenders){var s=r;r._currentElement.props===r._renderedComponent._currentElement&&(s=r._renderedComponent),i="React update: "+s.getName(),console.time(i)}if(v.performUpdateIfNecessary(r,e.reconcileTransaction),i&&console.timeEnd(i),o)for(var u=0;ur;){for(var s=Math.min(r+4096,a);s>r;r+=4)n+=(t+=e.charCodeAt(r))+(t+=e.charCodeAt(r+1))+(t+=e.charCodeAt(r+2))+(t+=e.charCodeAt(r+3));t%=o,n%=o}for(;i>r;r++)n+=t+=e.charCodeAt(r);return t%=o,n%=o,t|n<<16}var o=65521;t.exports=r},{}],125:[function(e,t,n){"use strict";var r=!1;t.exports=r},{}],126:[function(e,t,n){"use strict";var r=function(e){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e};t.exports=r},{}],127:[function(e,t,n){"use strict";function r(e,t,n){var r=null==t||"boolean"==typeof t||""===t;if(r)return"";var o=isNaN(t);return o||0===t||i.hasOwnProperty(e)&&i[e]?""+t:("string"==typeof t&&(t=t.trim()),t+"px")}var o=e(3),i=(e(178),o.isUnitlessNumber);t.exports=r},{178:178,3:3}],128:[function(e,t,n){"use strict";function r(e){return i[e]}function o(e){return(""+e).replace(a,r)}var i={"&":"&",">":">","<":"<",'"':""","'":"'"},a=/[&><"']/g;t.exports=o},{}],129:[function(e,t,n){"use strict";function r(e){if(null==e)return null;if(1===e.nodeType)return e;var t=i.get(e);return t?(t=a(t),t?o.getNodeFromInstance(t):null):void s(("function"==typeof e.render,!1))}var o=(e(39),e(44)),i=e(74),a=e(137),s=e(170);e(178);t.exports=r},{137:137,170:170,178:178,39:39,44:44,74:74}],130:[function(e,t,n){"use strict";function r(e,t,n){var r=e,o=void 0===r[n];o&&null!=t&&(r[n]=t)}function o(e){if(null==e)return e;var t={};return i(e,r,t),t}var i=(e(23),e(151));e(178);t.exports=o},{151:151,178:178,23:23}],131:[function(e,t,n){"use strict";var r=function(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)};t.exports=r},{}],132:[function(e,t,n){"use strict";function r(e){var t,n=e.keyCode;return"charCode"in e?(t=e.charCode,0===t&&13===n&&(t=13)):t=n,t>=32||13===t?t:0}t.exports=r},{}],133:[function(e,t,n){"use strict";function r(e){if(e.key){var t=i[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n=o(e);return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?a[e.keyCode]||"Unidentified":""}var o=e(132),i={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},a={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};t.exports=r},{132:132}],134:[function(e,t,n){"use strict";function r(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var r=i[e];return r?!!n[r]:!1}function o(e){return r}var i={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};t.exports=o},{}],135:[function(e,t,n){"use strict";function r(e){var t=e.target||e.srcElement||window;return t.correspondingUseElement&&(t=t.correspondingUseElement),3===t.nodeType?t.parentNode:t}t.exports=r},{}],136:[function(e,t,n){"use strict";function r(e){var t=e&&(o&&e[o]||e[i]);return"function"==typeof t?t:void 0}var o="function"==typeof Symbol&&Symbol.iterator,i="@@iterator";t.exports=r},{}],137:[function(e,t,n){"use strict";function r(e){for(var t;(t=e._renderedNodeType)===o.COMPOSITE;)e=e._renderedComponent;return t===o.NATIVE?e._renderedComponent:t===o.EMPTY?null:void 0}var o=e(83);t.exports=r},{83:83}],138:[function(e,t,n){"use strict";function r(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function o(e){for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}function i(e,t){for(var n=r(e),i=0,a=0;n;){if(3===n.nodeType){if(a=i+n.textContent.length,t>=i&&a>=t)return{node:n,offset:t-i};i=a}n=r(o(n))}}t.exports=i},{}],139:[function(e,t,n){"use strict";function r(){return!i&&o.canUseDOM&&(i="textContent"in document.documentElement?"textContent":"innerText"),i}var o=e(156),i=null;t.exports=r},{156:156}],140:[function(e,t,n){"use strict";function r(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n["ms"+e]="MS"+t,n["O"+e]="o"+t.toLowerCase(),n}function o(e){if(s[e])return s[e];if(!a[e])return e;var t=a[e];for(var n in t)if(t.hasOwnProperty(n)&&n in u)return s[e]=t[n];return""}var i=e(156),a={animationend:r("Animation","AnimationEnd"),animationiteration:r("Animation","AnimationIteration"),animationstart:r("Animation","AnimationStart"),transitionend:r("Transition","TransitionEnd")},s={},u={};i.canUseDOM&&(u=document.createElement("div").style,"AnimationEvent"in window||(delete a.animationend.animation,delete a.animationiteration.animation,delete a.animationstart.animation),"TransitionEvent"in window||delete a.transitionend.transition),t.exports=o},{156:156}],141:[function(e,t,n){"use strict";function r(e){return"function"==typeof e&&"undefined"!=typeof e.prototype&&"function"==typeof e.prototype.mountComponent&&"function"==typeof e.prototype.receiveComponent}function o(e){var t;if(null===e||e===!1)t=s.create(o);else if("object"==typeof e){var n=e;!n||"function"!=typeof n.type&&"string"!=typeof n.type?l(!1):void 0,t="string"==typeof n.type?u.createInternalComponent(n):r(n.type)?new n.type(n):new c(n)}else"string"==typeof e||"number"==typeof e?t=u.createInstanceForText(e):l(!1);return t._mountIndex=0,t._mountImage=null,t}var i=e(179),a=e(38),s=e(66),u=e(82),l=e(170),c=(e(178),function(e){this.construct(e)});i(c.prototype,a.Mixin,{_instantiateReactComponent:o}),t.exports=o},{170:170,178:178,179:179,38:38,66:66,82:82}],142:[function(e,t,n){"use strict";function r(e,t){if(!i.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var a=document.createElement("div");a.setAttribute(n,"return;"),r="function"==typeof a[n]}return!r&&o&&"wheel"===e&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var o,i=e(156);i.canUseDOM&&(o=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0),t.exports=r},{156:156}],143:[function(e,t,n){"use strict";function r(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&o[e.type]||"textarea"===t)}var o={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};t.exports=r},{}],144:[function(e,t,n){"use strict";function r(e){return o.isValidElement(e)?void 0:i(!1),e}var o=e(64),i=e(170);t.exports=r},{170:170,64:64}],145:[function(e,t,n){"use strict";function r(e){return'"'+o(e)+'"'}var o=e(128);t.exports=r},{128:128}],146:[function(e,t,n){"use strict";var r=e(79);t.exports=r.renderSubtreeIntoContainer},{79:79}],147:[function(e,t,n){"use strict";var r=e(156),o=/^[ \r\n\t\f]/,i=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,a=e(126),s=a(function(e,t){e.innerHTML=t});if(r.canUseDOM){var u=document.createElement("div");u.innerHTML=" ",""===u.innerHTML&&(s=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),o.test(t)||"<"===t[0]&&i.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t}),u=null}t.exports=s},{126:126,156:156}],148:[function(e,t,n){"use strict";var r=e(156),o=e(128),i=e(147),a=function(e,t){e.textContent=t};r.canUseDOM&&("textContent"in document.documentElement||(a=function(e,t){i(e,o(t))})),t.exports=a},{128:128,147:147,156:156}],149:[function(e,t,n){"use strict";function r(e,t,n){return!o(e.props,t)||!o(e.state,n)}var o=e(177);t.exports=r},{177:177}],150:[function(e,t,n){"use strict";function r(e,t){var n=null===e||e===!1,r=null===t||t===!1;if(n||r)return n===r;var o=typeof e,i=typeof t;return"string"===o||"number"===o?"string"===i||"number"===i:"object"===i&&e.type===t.type&&e.key===t.key}t.exports=r},{}],151:[function(e,t,n){"use strict";function r(e,t){return e&&"object"==typeof e&&null!=e.key?l.escape(e.key):t.toString(36)}function o(e,t,n,i){var d=typeof e;if("undefined"!==d&&"boolean"!==d||(e=null),null===e||"string"===d||"number"===d||a.isValidElement(e))return n(i,e,""===t?c+r(e,0):t),1;var f,h,v=0,m=""===t?c:t+p;if(Array.isArray(e))for(var g=0;g-1},matchesSelector:function(e,t){var n=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.msMatchesSelector||function(t){return r(e,t)};return n.call(e,t)}};t.exports=i},{170:170}],155:[function(e,t,n){"use strict";var r=e(162),o={listen:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!1),{remove:function(){e.removeEventListener(t,n,!1)}}):e.attachEvent?(e.attachEvent("on"+t,n),{remove:function(){e.detachEvent("on"+t,n)}}):void 0},capture:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!0),{remove:function(){e.removeEventListener(t,n,!0)}}):{remove:r}},registerDefault:function(){}};t.exports=o},{162:162}],156:[function(e,t,n){"use strict";var r=!("undefined"==typeof window||!window.document||!window.document.createElement),o={canUseDOM:r,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:r&&!!window.screen,isInWorker:!r};t.exports=o},{}],157:[function(e,t,n){"use strict";function r(e){return e.replace(o,function(e,t){return t.toUpperCase()})}var o=/-(.)/g;t.exports=r},{}],158:[function(e,t,n){"use strict";function r(e){return o(e.replace(i,"ms-"))}var o=e(157),i=/^-ms-/;t.exports=r},{157:157}],159:[function(e,t,n){"use strict";function r(e,t){return e&&t?e===t?!0:o(e)?!1:o(t)?r(e,t.parentNode):e.contains?e.contains(t):e.compareDocumentPosition?!!(16&e.compareDocumentPosition(t)):!1:!1}var o=e(172);t.exports=r},{172:172}],160:[function(e,t,n){"use strict";function r(e){var t=e.length;if(Array.isArray(e)||"object"!=typeof e&&"function"!=typeof e?a(!1):void 0,"number"!=typeof t?a(!1):void 0,0===t||t-1 in e?void 0:a(!1),"function"==typeof e.callee?a(!1):void 0,e.hasOwnProperty)try{return Array.prototype.slice.call(e)}catch(n){}for(var r=Array(t),o=0;t>o;o++)r[o]=e[o];return r}function o(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"length"in e&&!("setInterval"in e)&&"number"!=typeof e.nodeType&&(Array.isArray(e)||"callee"in e||"item"in e)}function i(e){return o(e)?Array.isArray(e)?e.slice():r(e):[e]}var a=e(170);t.exports=i},{170:170}],161:[function(e,t,n){"use strict";function r(e){var t=e.match(c);return t&&t[1].toLowerCase()}function o(e,t){var n=l;l?void 0:u(!1);var o=r(e),i=o&&s(o);if(i){n.innerHTML=i[1]+e+i[2];for(var c=i[0];c--;)n=n.lastChild}else n.innerHTML=e;var p=n.getElementsByTagName("script");p.length&&(t?void 0:u(!1),a(p).forEach(t));for(var d=Array.from(n.childNodes);n.lastChild;)n.removeChild(n.lastChild);return d}var i=e(156),a=e(160),s=e(166),u=e(170),l=i.canUseDOM?document.createElement("div"):null,c=/^\s*<(\w+)/;t.exports=o},{156:156,160:160,166:166,170:170}],162:[function(e,t,n){"use strict";function r(e){return function(){return e}}function o(){}o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},t.exports=o},{}],163:[function(e,t,n){"use strict";var r={};t.exports=r},{}],164:[function(e,t,n){"use strict";function r(e){try{e.focus()}catch(t){}}t.exports=r},{}],165:[function(e,t,n){"use strict";function r(){if("undefined"==typeof document)return null;try{return document.activeElement||document.body}catch(e){return document.body}}t.exports=r},{}],166:[function(e,t,n){"use strict";function r(e){return a?void 0:i(!1),d.hasOwnProperty(e)||(e="*"),s.hasOwnProperty(e)||("*"===e?a.innerHTML="":a.innerHTML="<"+e+">",s[e]=!a.firstChild),s[e]?d[e]:null}var o=e(156),i=e(170),a=o.canUseDOM?document.createElement("div"):null,s={},u=[1,'"],l=[1,"","
    "],c=[3,"","
    "],p=[1,'',""],d={"*":[1,"?
    ","
    "],area:[1,"",""],col:[2,"","
    "],legend:[1,"
    ","
    "],param:[1,"",""],tr:[2,"","
    "],optgroup:u,option:u,caption:l,colgroup:l,tbody:l,tfoot:l,thead:l,td:c,th:c},f=["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"];f.forEach(function(e){d[e]=p,s[e]=!0}),t.exports=r},{156:156,170:170}],167:[function(e,t,n){"use strict";function r(e){return e===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffset||document.documentElement.scrollTop}:{x:e.scrollLeft,y:e.scrollTop}}t.exports=r},{}],168:[function(e,t,n){"use strict";function r(e){return e.replace(o,"-$1").toLowerCase()}var o=/([A-Z])/g;t.exports=r},{}],169:[function(e,t,n){"use strict";function r(e){return o(e).replace(i,"-ms-")}var o=e(168),i=/^ms-/;t.exports=r},{168:168}],170:[function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,o,i,a,s],c=0;u=new Error(t.replace(/%s/g,function(){return l[c++]})),u.name="Invariant Violation"}throw u.framesToPop=1,u}}t.exports=r},{}],171:[function(e,t,n){"use strict";function r(e){return!(!e||!("function"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName))}t.exports=r},{}],172:[function(e,t,n){"use strict";function r(e){return o(e)&&3==e.nodeType}var o=e(171);t.exports=r},{171:171}],173:[function(e,t,n){"use strict";var r=e(170),o=function(e){var t,n={};e instanceof Object&&!Array.isArray(e)?void 0:r(!1);for(t in e)e.hasOwnProperty(t)&&(n[t]=t);return n};t.exports=o},{170:170}],174:[function(e,t,n){"use strict";var r=function(e){var t;for(t in e)if(e.hasOwnProperty(t))return t;return null};t.exports=r},{}],175:[function(e,t,n){"use strict";function r(e,t,n){if(!e)return null;var r={};for(var i in e)o.call(e,i)&&(r[i]=t.call(n,e[i],i,e));return r}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],176:[function(e,t,n){"use strict";function r(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}t.exports=r},{}],177:[function(e,t,n){"use strict";function r(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function o(e,t){if(r(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(var a=0;a8&&11>=x),T=32,w=String.fromCharCode(T),M=f.topLevelTypes,S={beforeInput:{phasedRegistrationNames:{bubbled:C({onBeforeInput:null}),captured:C({onBeforeInputCapture:null})},dependencies:[M.topCompositionEnd,M.topKeyPress,M.topTextInput,M.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:C({onCompositionEnd:null}),captured:C({onCompositionEndCapture:null})},dependencies:[M.topBlur,M.topCompositionEnd,M.topKeyDown,M.topKeyPress,M.topKeyUp,M.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:C({onCompositionStart:null}),captured:C({onCompositionStartCapture:null})},dependencies:[M.topBlur,M.topCompositionStart,M.topKeyDown,M.topKeyPress,M.topKeyUp,M.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:C({onCompositionUpdate:null}),captured:C({onCompositionUpdateCapture:null})},dependencies:[M.topBlur,M.topCompositionUpdate,M.topKeyDown,M.topKeyPress,M.topKeyUp,M.topMouseDown]}},k=!1,R=null,D={eventTypes:S,extractEvents:function(e,t,n,r){return[l(e,t,n,r),d(e,t,n,r)]}};t.exports=D},{103:103,142:142,16:16,160:160,20:20,21:21,99:99}],3:[function(e,t,n){"use strict";function r(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var o={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},a=["Webkit","ms","Moz","O"];Object.keys(o).forEach(function(e){a.forEach(function(t){o[r(t,e)]=o[e]})});var i={background:{backgroundAttachment:!0,backgroundColor:!0,backgroundImage:!0,backgroundPositionX:!0,backgroundPositionY:!0,backgroundRepeat:!0},backgroundPosition:{backgroundPositionX:!0,backgroundPositionY:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0},outline:{outlineWidth:!0,outlineStyle:!0,outlineColor:!0}},u={isUnitlessNumber:o,shorthandPropertyExpansions:i};t.exports=u},{}],4:[function(e,t,n){"use strict";var r=e(3),o=e(142),a=e(80),i=(e(144),e(116)),u=e(155),s=e(162),l=(e(164),s(function(e){return u(e)})),c=!1,p="cssFloat";if(o.canUseDOM){var d=document.createElement("div").style;try{d.font=""}catch(f){c=!0}void 0===document.documentElement.style.cssFloat&&(p="styleFloat")}var h={createMarkupForStyles:function(e,t){var n="";for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];null!=o&&(n+=l(r)+":",n+=i(r,o,t)+";")}return n||null},setValueForStyles:function(e,t,n){var o=e.style;for(var a in t)if(t.hasOwnProperty(a)){var u=i(a,t[a],n);if("float"!==a&&"cssFloat"!==a||(a=p),u)o[a]=u;else{var s=c&&r.shorthandPropertyExpansions[a];if(s)for(var l in s)o[l]="";else o[a]=""}}}};a.measureMethods(h,"CSSPropertyOperations",{setValueForStyles:"setValueForStyles"}),t.exports=h},{116:116,142:142,144:144,155:155,162:162,164:164,3:3,80:80}],5:[function(e,t,n){"use strict";function r(){this._callbacks=null,this._contexts=null}var o=e(165),a=e(25),i=e(156);o(r.prototype,{enqueue:function(e,t){this._callbacks=this._callbacks||[],this._contexts=this._contexts||[],this._callbacks.push(e),this._contexts.push(t)},notifyAll:function(){var e=this._callbacks,t=this._contexts;if(e){e.length!==t.length?i(!1):void 0,this._callbacks=null,this._contexts=null;for(var n=0;n8));var L=!1;_.canUseDOM&&(L=T("input")&&(!("documentMode"in document)||document.documentMode>11));var U={get:function(){return O.get.call(this)},set:function(e){I=""+e,O.set.call(this,e)}},F={eventTypes:k,extractEvents:function(e,t,n,o){var a,i,u=t?E.getNodeFromInstance(t):window;if(r(u)?A?a=s:i=l:w(u)?L?a=f:(a=v,i=h):m(u)&&(a=g),a){var c=a(e,t);if(c){var p=N.getPooled(k.change,c,n,o);return p.type="change",b.accumulateTwoPhaseDispatches(p),p}}i&&i(e,u,t)}};t.exports=F},{101:101,124:124,131:131,132:132,142:142,16:16,160:160,17:17,20:20,40:40,92:92}],7:[function(e,t,n){"use strict";function r(e,t){return Array.isArray(t)&&(t=t[1]),t?t.nextSibling:e.firstChild}function o(e,t,n){c.insertTreeBefore(e,t,n)}function a(e,t,n){Array.isArray(t)?u(e,t[0],t[1],n):g(e,t,n)}function i(e,t){if(Array.isArray(t)){var n=t[1];t=t[0],s(e,t,n),e.removeChild(n)}e.removeChild(t)}function u(e,t,n,r){for(var o=t;;){var a=o.nextSibling;if(g(e,o,r),o===n)break;o=a}}function s(e,t,n){for(;;){var r=t.nextSibling;if(r===n)break;e.removeChild(r)}}function l(e,t,n){var r=e.parentNode,o=e.nextSibling;o===t?n&&g(r,document.createTextNode(n),o):n?(m(o,n),s(r,o,t)):s(r,e,t)}var c=e(8),p=e(12),d=e(75),f=e(80),h=e(115),v=e(136),m=e(137),g=h(function(e,t,n){e.insertBefore(t,n)}),y={dangerouslyReplaceNodeWithMarkup:p.dangerouslyReplaceNodeWithMarkup,replaceDelimitedText:l,processUpdates:function(e,t){for(var n=0;nt||e.hasOverloadedBooleanValue&&t===!1}var a=e(10),i=(e(48),e(80)),u=e(134),s=(e(164),new RegExp("^["+a.ATTRIBUTE_NAME_START_CHAR+"]["+a.ATTRIBUTE_NAME_CHAR+"]*$")),l={},c={},p={createMarkupForID:function(e){return a.ID_ATTRIBUTE_NAME+"="+u(e)},setAttributeForID:function(e,t){e.setAttribute(a.ID_ATTRIBUTE_NAME,t)},createMarkupForRoot:function(){return a.ROOT_ATTRIBUTE_NAME+'=""'},setAttributeForRoot:function(e){e.setAttribute(a.ROOT_ATTRIBUTE_NAME,"")},createMarkupForProperty:function(e,t){var n=a.properties.hasOwnProperty(e)?a.properties[e]:null;if(n){if(o(n,t))return"";var r=n.attributeName;return n.hasBooleanValue||n.hasOverloadedBooleanValue&&t===!0?r+'=""':r+"="+u(t)}return a.isCustomAttribute(e)?null==t?"":e+"="+u(t):null},createMarkupForCustomAttribute:function(e,t){return r(e)&&null!=t?e+"="+u(t):""},setValueForProperty:function(e,t,n){var r=a.properties.hasOwnProperty(t)?a.properties[t]:null;if(r){var i=r.mutationMethod;if(i)i(e,n);else if(o(r,n))this.deleteValueForProperty(e,t);else if(r.mustUseProperty){var u=r.propertyName;r.hasSideEffects&&""+e[u]==""+n||(e[u]=n)}else{var s=r.attributeName,l=r.attributeNamespace;l?e.setAttributeNS(l,s,""+n):r.hasBooleanValue||r.hasOverloadedBooleanValue&&n===!0?e.setAttribute(s,""):e.setAttribute(s,""+n)}}else a.isCustomAttribute(t)&&p.setValueForAttribute(e,t,n)},setValueForAttribute:function(e,t,n){r(t)&&(null==n?e.removeAttribute(t):e.setAttribute(t,""+n))},deleteValueForProperty:function(e,t){var n=a.properties.hasOwnProperty(t)?a.properties[t]:null;if(n){var r=n.mutationMethod;if(r)r(e,void 0);else if(n.mustUseProperty){var o=n.propertyName;n.hasBooleanValue?e[o]=!1:n.hasSideEffects&&""+e[o]==""||(e[o]="")}else e.removeAttribute(n.attributeName)}else a.isCustomAttribute(t)&&e.removeAttribute(t)}};i.measureMethods(p,"DOMPropertyOperations",{setValueForProperty:"setValueForProperty",setValueForAttribute:"setValueForAttribute",deleteValueForProperty:"deleteValueForProperty"}),t.exports=p},{10:10,134:134,164:164,48:48,80:80}],12:[function(e,t,n){"use strict";function r(e){return e.substring(1,e.indexOf(" "))}var o=e(8),a=e(142),i=e(147),u=e(148),s=e(152),l=e(156),c=/^(<[^ \/>]+)/,p="data-danger-index",d={dangerouslyRenderMarkup:function(e){a.canUseDOM?void 0:l(!1);for(var t,n={},o=0;o-1?void 0:i(!1),!l.plugins[n]){t.extractEvents?void 0:i(!1),l.plugins[n]=t;var r=t.eventTypes;for(var a in r)o(r[a],t,a)?void 0:i(!1)}}}function o(e,t,n){l.eventNameDispatchConfigs.hasOwnProperty(n)?i(!1):void 0,l.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var o in r)if(r.hasOwnProperty(o)){var u=r[o];a(u,t,n)}return!0}return e.registrationName?(a(e.registrationName,t,n),!0):!1}function a(e,t,n){l.registrationNameModules[e]?i(!1):void 0,l.registrationNameModules[e]=t,l.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var i=e(156),u=null,s={},l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(e){u?i(!1):void 0,u=Array.prototype.slice.call(e),r()},injectEventPluginsByName:function(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];s.hasOwnProperty(n)&&s[n]===o||(s[n]?i(!1):void 0,s[n]=o,t=!0)}t&&r()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return l.registrationNameModules[t.registrationName]||null;for(var n in t.phasedRegistrationNames)if(t.phasedRegistrationNames.hasOwnProperty(n)){var r=l.registrationNameModules[t.phasedRegistrationNames[n]];if(r)return r}return null},_resetEventPlugins:function(){u=null;for(var e in s)s.hasOwnProperty(e)&&delete s[e];l.plugins.length=0;var t=l.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=l.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};t.exports=l},{156:156}],19:[function(e,t,n){"use strict";function r(e){return e===y.topMouseUp||e===y.topTouchEnd||e===y.topTouchCancel}function o(e){return e===y.topMouseMove||e===y.topTouchMove}function a(e){return e===y.topMouseDown||e===y.topTouchStart}function i(e,t,n,r){var o=e.type||"unknown-event";e.currentTarget=C.getNodeFromInstance(r),t?v.invokeGuardedCallbackWithCatch(o,n,e):v.invokeGuardedCallback(o,n,e),e.currentTarget=null}function u(e,t){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;oe&&n[e]===o[e];e++);var i=r-e;for(t=1;i>=t&&n[r-t]===o[a-t];t++);var u=t>1?1-t:void 0;return this._fallbackText=o.slice(e,u),this._fallbackText}}),a.addPoolingTo(r),t.exports=r},{128:128,165:165,25:25}],22:[function(e,t,n){"use strict";var r=e(10),o=r.injection.MUST_USE_PROPERTY,a=r.injection.HAS_BOOLEAN_VALUE,i=r.injection.HAS_SIDE_EFFECTS,u=r.injection.HAS_NUMERIC_VALUE,s=r.injection.HAS_POSITIVE_NUMERIC_VALUE,l=r.injection.HAS_OVERLOADED_BOOLEAN_VALUE,c={isCustomAttribute:RegExp.prototype.test.bind(new RegExp("^(data|aria)-["+r.ATTRIBUTE_NAME_CHAR+"]*$")),Properties:{accept:0,acceptCharset:0,accessKey:0,action:0,allowFullScreen:a,allowTransparency:0,alt:0,async:a,autoComplete:0,autoPlay:a,capture:a,cellPadding:0,cellSpacing:0,charSet:0,challenge:0,checked:o|a,cite:0,classID:0,className:0,cols:s,colSpan:0,content:0,contentEditable:0,contextMenu:0,controls:a,coords:0,crossOrigin:0,data:0,dateTime:0,"default":a,defer:a,dir:0,disabled:a,download:l,draggable:0,encType:0,form:0,formAction:0,formEncType:0,formMethod:0,formNoValidate:a,formTarget:0,frameBorder:0,headers:0,height:0,hidden:a,high:0,href:0,hrefLang:0,htmlFor:0,httpEquiv:0,icon:0,id:0,inputMode:0,integrity:0,is:0,keyParams:0,keyType:0,kind:0,label:0,lang:0,list:0,loop:a,low:0,manifest:0,marginHeight:0,marginWidth:0,max:0,maxLength:0,media:0,mediaGroup:0,method:0,min:0,minLength:0,multiple:o|a,muted:o|a,name:0,nonce:0,noValidate:a,open:a,optimum:0,pattern:0,placeholder:0,poster:0,preload:0,profile:0,radioGroup:0,readOnly:a,rel:0,required:a,reversed:a,role:0,rows:s,rowSpan:u,sandbox:0,scope:0,scoped:a,scrolling:0,seamless:a,selected:o|a,shape:0,size:s,sizes:0,span:s,spellCheck:0,src:0,srcDoc:0,srcLang:0,srcSet:0,start:u,step:0,style:0,summary:0,tabIndex:0,target:0,title:0,type:0,useMap:0,value:o|i,width:0,wmode:0,wrap:0,about:0,datatype:0,inlist:0,prefix:0,property:0,resource:0,"typeof":0,vocab:0,autoCapitalize:0,autoCorrect:0,autoSave:0,color:0,itemProp:0,itemScope:a,itemType:0,itemID:0,itemRef:0,results:0,security:0,unselectable:0},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{}};t.exports=c},{10:10}],23:[function(e,t,n){"use strict";function r(e){var t=/[=:]/g,n={"=":"=0",":":"=2"},r=(""+e).replace(t,function(e){return n[e]});return"$"+r}function o(e){var t=/(=0|=2)/g,n={"=0":"=","=2":":"},r="."===e[0]&&"$"===e[1]?e.substring(2):e.substring(1);return(""+r).replace(t,function(e){return n[e]})}var a={escape:r,unescape:o};t.exports=a},{}],24:[function(e,t,n){"use strict";function r(e){null!=e.checkedLink&&null!=e.valueLink?l(!1):void 0}function o(e){r(e),null!=e.value||null!=e.onChange?l(!1):void 0}function a(e){r(e),null!=e.checked||null!=e.onChange?l(!1):void 0}function i(e){if(e){var t=e.getName();if(t)return" Check the render method of `"+t+"`."}return""}var u=e(83),s=e(82),l=e(156),c=(e(164),{button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0}),p={value:function(e,t,n){return!e[t]||c[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t,n){return!e[t]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:u.func},d={},f={checkPropTypes:function(e,t,n){for(var r in p){if(p.hasOwnProperty(r))var o=p[r](t,r,e,s.prop);o instanceof Error&&!(o.message in d)&&(d[o.message]=!0,i(n))}},getValue:function(e){return e.valueLink?(o(e),e.valueLink.value):e.value},getChecked:function(e){return e.checkedLink?(a(e),e.checkedLink.value):e.checked},executeOnChange:function(e,t){return e.valueLink?(o(e),e.valueLink.requestChange(t.target.value)):e.checkedLink?(a(e),e.checkedLink.requestChange(t.target.checked)):e.onChange?e.onChange.call(void 0,t):void 0}};t.exports=f},{156:156,164:164,82:82,83:83}],25:[function(e,t,n){"use strict";var r=e(156),o=function(e){var t=this;if(t.instancePool.length){var n=t.instancePool.pop();return t.call(n,e),n}return new t(e)},a=function(e,t){var n=this;if(n.instancePool.length){var r=n.instancePool.pop();return n.call(r,e,t),r}return new n(e,t)},i=function(e,t,n){var r=this;if(r.instancePool.length){var o=r.instancePool.pop();return r.call(o,e,t,n),o}return new r(e,t,n)},u=function(e,t,n,r){var o=this;if(o.instancePool.length){var a=o.instancePool.pop();return o.call(a,e,t,n,r),a}return new o(e,t,n,r)},s=function(e,t,n,r,o){var a=this;if(a.instancePool.length){var i=a.instancePool.pop();return a.call(i,e,t,n,r,o),i}return new a(e,t,n,r,o)},l=function(e){var t=this;e instanceof t?void 0:r(!1),e.destructor(),t.instancePool.length=0||null!=t.is}function p(e){var t=e.type;l(t),this._currentElement=e,this._tag=t.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._nativeNode=null,this._nativeParent=null,this._rootNodeID=null,this._domID=null,this._nativeContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}var d=e(165),f=e(1),h=e(4),v=e(8),m=e(9),g=e(10),y=e(11),C=e(16),b=e(17),_=e(18),E=e(27),x=e(32),N=e(37),P=e(39),T=e(40),w=e(47),M=e(49),S=e(50),k=e(54),R=e(74),D=e(80),I=e(117),O=e(156),A=(e(131),e(160)),L=(e(163),e(140),e(164),P),U=b.deleteListener,F=T.getNodeFromInstance,V=E.listenTo,B=_.registrationNameModules,j={string:!0,number:!0},W=A({style:null}),K=A({__html:null}),H={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},q=11,Y={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},z={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},G={listing:!0,pre:!0,textarea:!0},X=d({menuitem:!0},z),Q=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,$={},Z={}.hasOwnProperty,J=1;p.displayName="ReactDOMComponent",p.Mixin={mountComponent:function(e,t,n,o){this._rootNodeID=J++,this._domID=n._idCounter++,this._nativeParent=t,this._nativeContainerInfo=n;var a=this._currentElement.props;switch(this._tag){case"iframe":case"object":case"img":case"form":case"video":case"audio":this._wrapperState={listeners:null},e.getReactMountReady().enqueue(u,this);break;case"button":a=N.getNativeProps(this,a,t);break;case"input":w.mountWrapper(this,a,t),a=w.getNativeProps(this,a),e.getReactMountReady().enqueue(u,this);break;case"option":M.mountWrapper(this,a,t),a=M.getNativeProps(this,a);break;case"select":S.mountWrapper(this,a,t),a=S.getNativeProps(this,a),e.getReactMountReady().enqueue(u,this);break;case"textarea":k.mountWrapper(this,a,t),a=k.getNativeProps(this,a),e.getReactMountReady().enqueue(u,this)}r(this,a);var s,l;null!=t?(s=t._namespaceURI,l=t._tag):n._tag&&(s=n._namespaceURI,l=n._tag),(null==s||s===m.svg&&"foreignobject"===l)&&(s=m.html),s===m.html&&("svg"===this._tag?s=m.svg:"math"===this._tag&&(s=m.mathml)),this._namespaceURI=s;var c;if(e.useCreateElement){var p,d=n._ownerDocument;if(s===m.html)if("script"===this._tag){var h=d.createElement("div"),g=this._currentElement.type;h.innerHTML="<"+g+">",p=h.removeChild(h.firstChild)}else p=d.createElement(this._currentElement.type);else p=d.createElementNS(s,this._currentElement.type);T.precacheNode(this,p),this._flags|=L.hasCachedChildNodes,this._nativeParent||y.setAttributeForRoot(p),this._updateDOMProperties(null,a,e);var C=v(p);this._createInitialChildren(e,a,o,C),c=C}else{var b=this._createOpenTagMarkupAndPutListeners(e,a),_=this._createContentMarkup(e,a,o);c=!_&&z[this._tag]?b+"/>":b+">"+_+""}switch(this._tag){case"button":case"input":case"select":case"textarea":a.autoFocus&&e.getReactMountReady().enqueue(f.focusDOMComponent,this);break;case"option":e.getReactMountReady().enqueue(i,this)}return c},_createOpenTagMarkupAndPutListeners:function(e,t){var n="<"+this._currentElement.type;for(var r in t)if(t.hasOwnProperty(r)){var a=t[r];if(null!=a)if(B.hasOwnProperty(r))a&&o(this,r,a,e);else{r===W&&(a&&(a=this._previousStyleCopy=d({},t.style)),a=h.createMarkupForStyles(a,this));var i=null;null!=this._tag&&c(this._tag,t)?H.hasOwnProperty(r)||(i=y.createMarkupForCustomAttribute(r,a)):i=y.createMarkupForProperty(r,a),i&&(n+=" "+i)}}return e.renderToStaticMarkup?n:(this._nativeParent||(n+=" "+y.createMarkupForRoot()),n+=" "+y.createMarkupForID(this._domID))},_createContentMarkup:function(e,t,n){var r="",o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&(r=o.__html);else{var a=j[typeof t.children]?t.children:null,i=null!=a?null:t.children;if(null!=a)r=I(a);else if(null!=i){var u=this.mountChildren(i,e,n);r=u.join("")}}return G[this._tag]&&"\n"===r.charAt(0)?"\n"+r:r},_createInitialChildren:function(e,t,n,r){var o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&v.queueHTML(r,o.__html);else{var a=j[typeof t.children]?t.children:null,i=null!=a?null:t.children;if(null!=a)v.queueText(r,a);else if(null!=i)for(var u=this.mountChildren(i,e,n),s=0;s"},receiveComponent:function(){},getNativeNode:function(){return a.getNodeFromInstance(this)},unmountComponent:function(){a.uncacheNode(this)}}),t.exports=i},{165:165,40:40,8:8}],44:[function(e,t,n){"use strict";function r(e){return o.createFactory(e)}var o=e(60),a=(e(61),e(161)),i=a({a:"a",abbr:"abbr",address:"address",area:"area",article:"article",aside:"aside",audio:"audio",b:"b",base:"base",bdi:"bdi",bdo:"bdo",big:"big",blockquote:"blockquote",body:"body",br:"br",button:"button",canvas:"canvas",caption:"caption",cite:"cite",code:"code",col:"col",colgroup:"colgroup",data:"data",datalist:"datalist",dd:"dd",del:"del",details:"details",dfn:"dfn",dialog:"dialog",div:"div",dl:"dl",dt:"dt",em:"em",embed:"embed",fieldset:"fieldset",figcaption:"figcaption",figure:"figure",footer:"footer",form:"form",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",head:"head",header:"header",hgroup:"hgroup",hr:"hr",html:"html",i:"i",iframe:"iframe",img:"img",input:"input",ins:"ins",kbd:"kbd",keygen:"keygen",label:"label",legend:"legend",li:"li",link:"link",main:"main",map:"map",mark:"mark",menu:"menu",menuitem:"menuitem",meta:"meta",meter:"meter",nav:"nav",noscript:"noscript",object:"object",ol:"ol",optgroup:"optgroup",option:"option",output:"output",p:"p",param:"param",picture:"picture",pre:"pre",progress:"progress",q:"q",rp:"rp",rt:"rt",ruby:"ruby",s:"s",samp:"samp",script:"script",section:"section",select:"select",small:"small",source:"source",span:"span",strong:"strong",style:"style",sub:"sub",summary:"summary",sup:"sup",table:"table",tbody:"tbody",td:"td",textarea:"textarea",tfoot:"tfoot",th:"th",thead:"thead",time:"time",title:"title",tr:"tr",track:"track",u:"u",ul:"ul","var":"var",video:"video",wbr:"wbr",circle:"circle",clipPath:"clipPath",defs:"defs",ellipse:"ellipse",g:"g",image:"image",line:"line",linearGradient:"linearGradient",mask:"mask",path:"path",pattern:"pattern",polygon:"polygon",polyline:"polyline",radialGradient:"radialGradient",rect:"rect",stop:"stop",svg:"svg",text:"text",tspan:"tspan"},r);t.exports=i},{161:161,60:60,61:61}],45:[function(e,t,n){"use strict";var r={useCreateElement:!0};t.exports=r},{}],46:[function(e,t,n){"use strict";var r=e(7),o=e(40),a=e(80),i={dangerouslyProcessChildrenUpdates:function(e,t){var n=o.getNodeFromInstance(e);r.processUpdates(n,t)}};a.measureMethods(i,"ReactDOMIDOperations",{dangerouslyProcessChildrenUpdates:"dangerouslyProcessChildrenUpdates"}),t.exports=i},{40:40,7:7,80:80}],47:[function(e,t,n){"use strict";function r(){this._rootNodeID&&d.updateWrapper(this)}function o(e){var t=this._currentElement.props,n=s.executeOnChange(t,e);c.asap(r,this);var o=t.name;if("radio"===t.type&&null!=o){for(var a=l.getNodeFromInstance(this),i=a;i.parentNode;)i=i.parentNode;for(var u=i.querySelectorAll("input[name="+JSON.stringify(""+o)+'][type="radio"]'),d=0;dt.end?(n=t.end,r=t.start):(n=t.start,r=t.end),o.moveToElementText(e),o.moveStart("character",n),o.setEndPoint("EndToStart",o),o.moveEnd("character",r-n),o.select()}function u(e,t){if(window.getSelection){var n=window.getSelection(),r=e[c()].length,o=Math.min(t.start,r),a=void 0===t.end?o:Math.min(t.end,r);if(!n.extend&&o>a){var i=a;a=o,o=i}var u=l(e,o),s=l(e,a);if(u&&s){var p=document.createRange();p.setStart(u.node,u.offset),n.removeAllRanges(),o>a?(n.addRange(p),n.extend(s.node,s.offset)):(p.setEnd(s.node,s.offset),n.addRange(p))}}}var s=e(142),l=e(127),c=e(128),p=s.canUseDOM&&"selection"in document&&!("getSelection"in window),d={getOffsets:p?o:a,setOffsets:p?i:u};t.exports=d},{127:127,128:128,142:142}],52:[function(e,t,n){"use strict";var r=e(59),o=e(88),a=e(93);r.inject();var i={renderToString:o.renderToString,renderToStaticMarkup:o.renderToStaticMarkup,version:a};t.exports=i},{59:59,88:88,93:93}],53:[function(e,t,n){"use strict";var r=e(165),o=e(7),a=e(8),i=e(40),u=e(80),s=e(117),l=e(156),c=(e(140),function(e){this._currentElement=e,this._stringText=""+e,this._nativeNode=null,this._nativeParent=null,this._domID=null,this._mountIndex=0,this._closingComment=null,this._commentNodes=null});r(c.prototype,{mountComponent:function(e,t,n,r){var o=n._idCounter++,u=" react-text: "+o+" ",l=" /react-text ";if(this._domID=o,this._nativeParent=t,e.useCreateElement){var c=n._ownerDocument,p=c.createComment(u),d=c.createComment(l),f=a(c.createDocumentFragment());return a.queueChild(f,a(p)),this._stringText&&a.queueChild(f,a(c.createTextNode(this._stringText))),a.queueChild(f,a(d)),i.precacheNode(this,p),this._closingComment=d,f}var h=s(this._stringText);return e.renderToStaticMarkup?h:""+h+""},receiveComponent:function(e,t){if(e!==this._currentElement){this._currentElement=e;var n=""+e;if(n!==this._stringText){this._stringText=n;var r=this.getNativeNode();o.replaceDelimitedText(r[0],r[1],n)}}},getNativeNode:function(){var e=this._commentNodes;if(e)return e;if(!this._closingComment)for(var t=i.getNodeFromInstance(this),n=t.nextSibling;;){if(null==n?l(!1):void 0,8===n.nodeType&&" /react-text "===n.nodeValue){this._closingComment=n;break}n=n.nextSibling}return e=[this._nativeNode,this._closingComment],this._commentNodes=e,e},unmountComponent:function(){this._closingComment=null,this._commentNodes=null,i.uncacheNode(this)}}),u.measureMethods(c.prototype,"ReactDOMTextComponent",{mountComponent:"mountComponent",receiveComponent:"receiveComponent"}),t.exports=c},{117:117,140:140,156:156,165:165,40:40,7:7,8:8,80:80}],54:[function(e,t,n){"use strict";function r(){this._rootNodeID&&d.updateWrapper(this)}function o(e){var t=this._currentElement.props,n=s.executeOnChange(t,e);return c.asap(r,this),n}var a=e(165),i=e(14),u=e(11),s=e(24),l=e(40),c=e(92),p=e(156),d=(e(164),{getNativeProps:function(e,t){null!=t.dangerouslySetInnerHTML?p(!1):void 0;var n=a({},i.getNativeProps(e,t),{defaultValue:void 0,value:void 0,children:e._wrapperState.initialValue,onChange:e._wrapperState.onChange});return n},mountWrapper:function(e,t){var n=t.defaultValue,r=t.children;null!=r&&(null!=n?p(!1):void 0,Array.isArray(r)&&(r.length<=1?void 0:p(!1),r=r[0]),n=""+r),null==n&&(n="");var a=s.getValue(t);e._wrapperState={initialValue:""+(null!=a?a:n),listeners:null,onChange:o.bind(e)}},updateWrapper:function(e){var t=e._currentElement.props,n=s.getValue(t);null!=n&&u.setValueForProperty(l.getNodeFromInstance(e),"value",""+n)}});t.exports=d},{11:11,14:14,156:156,164:164,165:165,24:24,40:40,92:92}],55:[function(e,t,n){"use strict";function r(e,t){"_nativeNode"in e?void 0:s(!1),"_nativeNode"in t?void 0:s(!1);for(var n=0,r=e;r;r=r._nativeParent)n++;for(var o=0,a=t;a;a=a._nativeParent)o++;for(;n-o>0;)e=e._nativeParent,n--;for(;o-n>0;)t=t._nativeParent,o--;for(var i=n;i--;){if(e===t)return e;e=e._nativeParent,t=t._nativeParent}return null}function o(e,t){"_nativeNode"in e?void 0:s(!1),"_nativeNode"in t?void 0:s(!1);for(;t;){if(t===e)return!0;t=t._nativeParent}return!1}function a(e){return"_nativeNode"in e?void 0:s(!1),e._nativeParent}function i(e,t,n){for(var r=[];e;)r.push(e),e=e._nativeParent;var o;for(o=r.length;o-- >0;)t(r[o],!1,n);for(o=0;o0;)n(s[l],!1,a)}var s=e(156);t.exports={isAncestor:o,getLowestCommonAncestor:r,getParentInstance:a,traverseTwoPhase:i,traverseEnterLeave:u}},{156:156}],56:[function(e,t,n){"use strict";var r,o=(e(10),e(18),e(164),{onCreateMarkupForProperty:function(e,t){r(e)},onSetValueForProperty:function(e,t,n){r(t)},onDeleteValueForProperty:function(e,t){r(t)}});t.exports=o},{10:10,164:164,18:18}],57:[function(e,t,n){"use strict";function r(e,t,n,r,o,a){}var o=e(71),a=(e(164),[]),i={addDevtool:function(e){a.push(e)},removeDevtool:function(e){for(var t=0;t1){for(var f=Array(d),h=0;d>h;h++)f[h]=arguments[h+2];a.children=f}if(e&&e.defaultProps){var v=e.defaultProps;for(r in v)void 0===a[r]&&(a[r]=v[r])}return u(e,s,l,c,p,o.current,a)},u.createFactory=function(e){var t=u.createElement.bind(null,e);return t.type=e,t},u.cloneAndReplaceKey=function(e,t){var n=u(e.type,t,e.ref,e._self,e._source,e._owner,e.props);return n},u.cloneElement=function(e,t,n){var a,s=r({},e.props),l=e.key,c=e.ref,p=e._self,d=e._source,f=e._owner;if(null!=t){void 0!==t.ref&&(c=t.ref,f=o.current),void 0!==t.key&&(l=""+t.key);var h;e.type&&e.type.defaultProps&&(h=e.type.defaultProps);for(a in t)t.hasOwnProperty(a)&&!i.hasOwnProperty(a)&&(void 0===t[a]&&void 0!==h?s[a]=h[a]:s[a]=t[a])}var v=arguments.length-2;if(1===v)s.children=n;else if(v>1){for(var m=Array(v),g=0;v>g;g++)m[g]=arguments[g+2];s.children=m}return u(e.type,l,c,p,d,f,s)},u.isValidElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===a},t.exports=u},{114:114,164:164,165:165,35:35}],61:[function(e,t,n){"use strict";function r(){if(p.current){var e=p.current.getName();if(e)return" Check the render method of `"+e+"`."}return""}function o(e,t){e._store&&!e._store.validated&&null==e.key&&(e._store.validated=!0,a("uniqueKey",e,t))}function a(e,t,n){var o=r();if(!o){var a="string"==typeof n?n:n.displayName||n.name;a&&(o=" Check the top-level render call using <"+a+">.")}var i=h[e]||(h[e]={});if(i[o])return null;i[o]=!0;var u={parentOrOwner:o,url:" See https://fb.me/react-warning-keys for more information.",childOwner:null};return t&&t._owner&&t._owner!==p.current&&(u.childOwner=" It was passed a child from "+t._owner.getName()+"."),u}function i(e,t){if("object"==typeof e)if(Array.isArray(e))for(var n=0;n/,a=/^<\!\-\-/,i={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(e){var t=r(e);return a.test(e)?e:e.replace(o," "+i.CHECKSUM_ATTR_NAME+'="'+t+'"$&')},canReuseMarkup:function(e,t){var n=t.getAttribute(i.CHECKSUM_ATTR_NAME);n=n&&parseInt(n,10);var o=r(e);return o===n}};t.exports=i},{113:113}],73:[function(e,t,n){"use strict";function r(e,t){for(var n=Math.min(e.length,t.length),r=0;n>r;r++)if(e.charAt(r)!==t.charAt(r))return r;return e.length===t.length?-1:n}function o(e){return e?e.nodeType===I?e.documentElement:e.firstChild:null}function a(e){return e.getAttribute&&e.getAttribute(k)||""}function i(e,t,n,r,o){var a;if(C.logTopLevelRenders){var i=e._currentElement.props,u=i.type;a="React mount: "+("string"==typeof u?u:u.displayName||u.name),console.time(a)}var s=E.mountComponent(e,n,null,m(e,t),o);a&&console.timeEnd(a),e._renderedComponent._topLevelWrapper=e,F._mountImageIntoNode(s,t,e,r,n)}function u(e,t,n,r){var o=N.ReactReconcileTransaction.getPooled(!n&&g.useCreateElement);o.perform(i,null,e,t,o,n,r),N.ReactReconcileTransaction.release(o)}function s(e,t,n){for(E.unmountComponent(e,n),t.nodeType===I&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)}function l(e){var t=o(e);if(t){var n=v.getInstanceFromNode(t);return!(!n||!n._nativeParent)}}function c(e){var t=o(e),n=t&&v.getInstanceFromNode(t);return n&&!n._nativeParent?n:null}function p(e){var t=c(e);return t?t._nativeContainerInfo._topLevelWrapper:null}var d=e(8),f=e(10),h=e(27),v=(e(35),e(40)),m=e(41),g=e(45),y=e(60),C=e(66),b=(e(70),e(72)),_=e(80),E=e(85),x=e(91),N=e(92),P=e(149),T=e(130),w=e(156),M=e(136),S=e(138),k=(e(164),f.ID_ATTRIBUTE_NAME),R=f.ROOT_ATTRIBUTE_NAME,D=1,I=9,O=11,A={},L=1,U=function(){this.rootID=L++};U.prototype.isReactComponent={},U.prototype.render=function(){return this.props};var F={TopLevelWrapper:U,_instancesByReactRootID:A,scrollMonitor:function(e,t){t()},_updateRootComponent:function(e,t,n,r){return F.scrollMonitor(n,function(){x.enqueueElementInternal(e,t),r&&x.enqueueCallbackInternal(e,r)}),e},_renderNewRootComponent:function(e,t,n,r){!t||t.nodeType!==D&&t.nodeType!==I&&t.nodeType!==O?w(!1):void 0,h.ensureScrollValueMonitoring();var o=T(e);N.batchedUpdates(u,o,t,n,r);var a=o._instance.rootID;return A[a]=o,o},renderSubtreeIntoContainer:function(e,t,n,r){return null==e||null==e._reactInternalInstance?w(!1):void 0,F._renderSubtreeIntoContainer(e,t,n,r)},_renderSubtreeIntoContainer:function(e,t,n,r){x.validateCallback(r,"ReactDOM.render"),y.isValidElement(t)?void 0:w(!1);var i=y(U,null,null,null,null,null,t),u=p(n);if(u){var s=u._currentElement,c=s.props;if(S(c,t)){var d=u._renderedComponent.getPublicInstance(),f=r&&function(){r.call(d)};return F._updateRootComponent(u,i,n,f),d}F.unmountComponentAtNode(n)}var h=o(n),v=h&&!!a(h),m=l(n),g=v&&!u&&!m,C=F._renderNewRootComponent(i,n,g,null!=e?e._reactInternalInstance._processChildContext(e._reactInternalInstance._context):P)._renderedComponent.getPublicInstance();return r&&r.call(C),C},render:function(e,t,n){return F._renderSubtreeIntoContainer(null,e,t,n)},unmountComponentAtNode:function(e){!e||e.nodeType!==D&&e.nodeType!==I&&e.nodeType!==O?w(!1):void 0;var t=p(e);return t?(delete A[t._instance.rootID],N.batchedUpdates(s,t,e,!1),!0):(l(e),1===e.nodeType&&e.hasAttribute(R),!1)},_mountImageIntoNode:function(e,t,n,a,i){if(!t||t.nodeType!==D&&t.nodeType!==I&&t.nodeType!==O?w(!1):void 0,a){var u=o(t);if(b.canReuseMarkup(e,u))return void v.precacheNode(n,u);var s=u.getAttribute(b.CHECKSUM_ATTR_NAME);u.removeAttribute(b.CHECKSUM_ATTR_NAME);var l=u.outerHTML;u.setAttribute(b.CHECKSUM_ATTR_NAME,s);var c=e,p=r(c,l);" (client) "+c.substring(p-20,p+20)+"\n (server) "+l.substring(p-20,p+20),t.nodeType===I?w(!1):void 0}if(t.nodeType===I?w(!1):void 0,i.useCreateElement){for(;t.lastChild;)t.removeChild(t.lastChild);d.insertTreeBefore(t,e,null)}else M(t,e),v.precacheNode(n,t.firstChild)}};_.measureMethods(F,"ReactMount",{_renderNewRootComponent:"_renderNewRootComponent",_mountImageIntoNode:"_mountImageIntoNode"}),t.exports=F},{10:10,130:130,136:136,138:138,149:149,156:156,164:164,27:27,35:35,40:40,41:41,45:45,60:60,66:66,70:70,72:72,8:8,80:80,85:85,91:91,92:92}],74:[function(e,t,n){"use strict";function r(e,t,n){return{type:p.INSERT_MARKUP,content:e,fromIndex:null,fromNode:null,toIndex:n,afterNode:t}}function o(e,t,n){return{type:p.MOVE_EXISTING,content:null,fromIndex:e._mountIndex,fromNode:d.getNativeNode(e),toIndex:n,afterNode:t}}function a(e,t){return{type:p.REMOVE_NODE,content:null,fromIndex:e._mountIndex,fromNode:t,toIndex:null,afterNode:null}}function i(e){return{type:p.SET_MARKUP,content:e,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function u(e){return{type:p.TEXT_CONTENT,content:e,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function s(e,t){return t&&(e=e||[],e.push(t)),e}function l(e,t){c.processChildrenUpdates(e,t)}var c=e(33),p=e(75),d=(e(35),e(85)),f=e(28),h=e(119),v=e(156),m={Mixin:{_reconcilerInstantiateChildren:function(e,t,n){return f.instantiateChildren(e,t,n)},_reconcilerUpdateChildren:function(e,t,n,r,o){var a;return a=h(t),f.updateChildren(e,a,n,r,o),a},mountChildren:function(e,t,n){var r=this._reconcilerInstantiateChildren(e,t,n);this._renderedChildren=r;var o=[],a=0;for(var i in r)if(r.hasOwnProperty(i)){var u=r[i],s=d.mountComponent(u,t,this,this._nativeContainerInfo,n);u._mountIndex=a++,o.push(s)}return o},updateTextContent:function(e){var t=this._renderedChildren;f.unmountChildren(t,!1);for(var n in t)t.hasOwnProperty(n)&&v(!1);var r=[u(e)];l(this,r)},updateMarkup:function(e){var t=this._renderedChildren;f.unmountChildren(t,!1);for(var n in t)t.hasOwnProperty(n)&&v(!1);var r=[i(e)];l(this,r)},updateChildren:function(e,t,n){this._updateChildren(e,t,n)},_updateChildren:function(e,t,n){var r=this._renderedChildren,o={},a=this._reconcilerUpdateChildren(r,e,o,t,n);if(a||r){var i,u=null,c=0,p=0,f=null;for(i in a)if(a.hasOwnProperty(i)){var h=r&&r[i],v=a[i];h===v?(u=s(u,this.moveChild(h,f,p,c)),c=Math.max(h._mountIndex,c),h._mountIndex=p):(h&&(c=Math.max(h._mountIndex,c)),u=s(u,this._mountChildAtIndex(v,f,p,t,n))),p++,f=d.getNativeNode(v)}for(i in o)o.hasOwnProperty(i)&&(u=s(u,this._unmountChild(r[i],o[i])));u&&l(this,u),this._renderedChildren=a}},unmountChildren:function(e){var t=this._renderedChildren;f.unmountChildren(t,e),this._renderedChildren=null},moveChild:function(e,t,n,r){return e._mountIndex>",N={array:a("array"),bool:a("boolean"),func:a("function"),number:a("number"),object:a("object"),string:a("string"),any:i(),arrayOf:u,element:s(),instanceOf:l,node:f(),objectOf:p,oneOf:c,oneOfType:d,shape:h};t.exports=N},{125:125,148:148,60:60,81:81}],84:[function(e,t,n){"use strict";function r(e){this.reinitializeTransaction(),this.renderToStaticMarkup=!1,this.reactMountReady=a.getPooled(null),this.useCreateElement=e}var o=e(165),a=e(5),i=e(25),u=e(27),s=e(68),l=e(110),c={initialize:s.getSelectionInformation,close:s.restoreSelection},p={initialize:function(){var e=u.isEnabled();return u.setEnabled(!1),e},close:function(e){u.setEnabled(e)}},d={initialize:function(){this.reactMountReady.reset()},close:function(){this.reactMountReady.notifyAll()}},f=[c,p,d],h={getTransactionWrappers:function(){return f},getReactMountReady:function(){return this.reactMountReady},checkpoint:function(){return this.reactMountReady.checkpoint()},rollback:function(e){this.reactMountReady.rollback(e)},destructor:function(){a.release(this.reactMountReady),this.reactMountReady=null}};o(r.prototype,l.Mixin,h),i.addPoolingTo(r),t.exports=r},{110:110,165:165,25:25,27:27,5:5,68:68}],85:[function(e,t,n){"use strict";function r(){o.attachRefs(this,this._currentElement)}var o=e(86),a=(e(70),{mountComponent:function(e,t,n,o,a){var i=e.mountComponent(t,n,o,a);return e._currentElement&&null!=e._currentElement.ref&&t.getReactMountReady().enqueue(r,e),i},getNativeNode:function(e){return e.getNativeNode()},unmountComponent:function(e,t){o.detachRefs(e,e._currentElement),e.unmountComponent(t)},receiveComponent:function(e,t,n,a){var i=e._currentElement;if(t!==i||a!==e._context){var u=o.shouldUpdateRefs(i,t);u&&o.detachRefs(e,i),e.receiveComponent(t,n,a),u&&e._currentElement&&null!=e._currentElement.ref&&n.getReactMountReady().enqueue(r,e)}},performUpdateIfNecessary:function(e,t){e.performUpdateIfNecessary(t)}});t.exports=a},{70:70,86:86}],86:[function(e,t,n){"use strict";function r(e,t,n){"function"==typeof e?e(t.getPublicInstance()):a.addComponentAsRefTo(t,e,n)}function o(e,t,n){"function"==typeof e?e(null):a.removeComponentAsRefFrom(t,e,n)}var a=e(79),i={};i.attachRefs=function(e,t){if(null!==t&&t!==!1){var n=t.ref;null!=n&&r(n,e,t._owner)}},i.shouldUpdateRefs=function(e,t){var n=null===e||e===!1,r=null===t||t===!1;return n||r||t._owner!==e._owner||t.ref!==e.ref},i.detachRefs=function(e,t){if(null!==t&&t!==!1){var n=t.ref;null!=n&&o(n,e,t._owner)}},t.exports=i},{79:79}],87:[function(e,t,n){"use strict";var r={isBatchingUpdates:!1,batchedUpdates:function(e){}};t.exports=r},{}],88:[function(e,t,n){"use strict";function r(e,t){var n;try{return d.injection.injectBatchingStrategy(c),n=p.getPooled(t),n.perform(function(){var r=h(e),o=r.mountComponent(n,null,i(),f);return t||(o=l.addChecksumToMarkup(o)),o},null)}finally{p.release(n),d.injection.injectBatchingStrategy(u)}}function o(e){return s.isValidElement(e)?void 0:v(!1),r(e,!1)}function a(e){return s.isValidElement(e)?void 0:v(!1),r(e,!0)}var i=e(41),u=e(58),s=e(60),l=e(72),c=e(87),p=e(89),d=e(92),f=e(149),h=e(130),v=e(156);t.exports={renderToString:o,renderToStaticMarkup:a}},{130:130,149:149,156:156,41:41,58:58,60:60,72:72,87:87,89:89,92:92}],89:[function(e,t,n){"use strict";function r(e){this.reinitializeTransaction(),this.renderToStaticMarkup=e,this.useCreateElement=!1}var o=e(165),a=e(25),i=e(110),u=[],s={enqueue:function(){}},l={getTransactionWrappers:function(){return u},getReactMountReady:function(){return s},destructor:function(){}};o(r.prototype,i.Mixin,l),a.addPoolingTo(r),t.exports=r},{110:110,165:165,25:25}],90:[function(e,t,n){"use strict";var r=e(165),o=e(36),a=e(52),i=e(26),u=r({__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:o,__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:a},i);t.exports=u},{165:165,26:26,36:36,52:52}],91:[function(e,t,n){"use strict";function r(e){i.enqueueUpdate(e)}function o(e,t){var n=a.get(e);return n?n:null}var a=(e(35),e(69)),i=e(92),u=e(156),s=(e(164),{isMounted:function(e){var t=a.get(e);return t?!!t._renderedComponent:!1},enqueueCallback:function(e,t,n){s.validateCallback(t,n);var a=o(e);return a?(a._pendingCallbacks?a._pendingCallbacks.push(t):a._pendingCallbacks=[t],void r(a)):null},enqueueCallbackInternal:function(e,t){e._pendingCallbacks?e._pendingCallbacks.push(t):e._pendingCallbacks=[t],r(e)},enqueueForceUpdate:function(e){var t=o(e,"forceUpdate");t&&(t._pendingForceUpdate=!0,r(t))},enqueueReplaceState:function(e,t){var n=o(e,"replaceState");n&&(n._pendingStateQueue=[t],n._pendingReplaceState=!0,r(n))},enqueueSetState:function(e,t){var n=o(e,"setState");if(n){var a=n._pendingStateQueue||(n._pendingStateQueue=[]);a.push(t),r(n)}},enqueueElementInternal:function(e,t){e._pendingElement=t,r(e)},validateCallback:function(e,t){e&&"function"!=typeof e?u(!1):void 0}});t.exports=s},{156:156,164:164,35:35,69:69,92:92}],92:[function(e,t,n){"use strict";function r(){w.ReactReconcileTransaction&&_?void 0:g(!1)}function o(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=p.getPooled(),this.reconcileTransaction=w.ReactReconcileTransaction.getPooled(!0)}function a(e,t,n,o,a,i){r(),_.batchedUpdates(e,t,n,o,a,i)}function i(e,t){return e._mountOrder-t._mountOrder}function u(e){var t=e.dirtyComponentsLength;t!==y.length?g(!1):void 0,y.sort(i);for(var n=0;t>n;n++){var r=y[n],o=r._pendingCallbacks;r._pendingCallbacks=null;var a;if(f.logTopLevelRenders){var u=r;r._currentElement.props===r._renderedComponent._currentElement&&(u=r._renderedComponent),a="React update: "+u.getName(),console.time(a)}if(v.performUpdateIfNecessary(r,e.reconcileTransaction),a&&console.timeEnd(a),o)for(var s=0;sr;){for(var u=Math.min(r+4096,i);u>r;r+=4)n+=(t+=e.charCodeAt(r))+(t+=e.charCodeAt(r+1))+(t+=e.charCodeAt(r+2))+(t+=e.charCodeAt(r+3));t%=o,n%=o}for(;a>r;r++)n+=t+=e.charCodeAt(r);return t%=o,n%=o,t|n<<16}var o=65521;t.exports=r},{}],114:[function(e,t,n){"use strict";var r=!1;t.exports=r},{}],115:[function(e,t,n){"use strict";var r=function(e){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e};t.exports=r},{}],116:[function(e,t,n){"use strict";function r(e,t,n){var r=null==t||"boolean"==typeof t||""===t;if(r)return"";var o=isNaN(t);return o||0===t||a.hasOwnProperty(e)&&a[e]?""+t:("string"==typeof t&&(t=t.trim()),t+"px")}var o=e(3),a=(e(164),o.isUnitlessNumber);t.exports=r},{164:164,3:3}],117:[function(e,t,n){"use strict";function r(e){return a[e]}function o(e){return(""+e).replace(i,r)}var a={"&":"&",">":">","<":"<",'"':""","'":"'"},i=/[&><"']/g;t.exports=o},{}],118:[function(e,t,n){"use strict";function r(e){if(null==e)return null;if(1===e.nodeType)return e;var t=a.get(e);return t?(t=i(t),t?o.getNodeFromInstance(t):null):void u(("function"==typeof e.render,!1))}var o=(e(35),e(40)),a=e(69),i=e(126),u=e(156);e(164);t.exports=r},{126:126,156:156,164:164,35:35,40:40,69:69}],119:[function(e,t,n){"use strict";function r(e,t,n){var r=e,o=void 0===r[n];o&&null!=t&&(r[n]=t)}function o(e){if(null==e)return e;var t={};return a(e,r,t),t}var a=(e(23),e(139));e(164);t.exports=o},{139:139,164:164,23:23}],120:[function(e,t,n){"use strict";var r=function(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)};t.exports=r},{}],121:[function(e,t,n){"use strict";function r(e){var t,n=e.keyCode;return"charCode"in e?(t=e.charCode,0===t&&13===n&&(t=13)):t=n,t>=32||13===t?t:0}t.exports=r},{}],122:[function(e,t,n){"use strict";function r(e){if(e.key){var t=a[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n=o(e);return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?i[e.keyCode]||"Unidentified":""}var o=e(121),a={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},i={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};t.exports=r},{121:121}],123:[function(e,t,n){"use strict";function r(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var r=a[e];return r?!!n[r]:!1}function o(e){return r}var a={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};t.exports=o},{}],124:[function(e,t,n){"use strict";function r(e){var t=e.target||e.srcElement||window;return t.correspondingUseElement&&(t=t.correspondingUseElement),3===t.nodeType?t.parentNode:t}t.exports=r},{}],125:[function(e,t,n){"use strict";function r(e){var t=e&&(o&&e[o]||e[a]);return"function"==typeof t?t:void 0}var o="function"==typeof Symbol&&Symbol.iterator,a="@@iterator";t.exports=r},{}],126:[function(e,t,n){"use strict";function r(e){for(var t;(t=e._renderedNodeType)===o.COMPOSITE;)e=e._renderedComponent;return t===o.NATIVE?e._renderedComponent:t===o.EMPTY?null:void 0}var o=e(77);t.exports=r},{77:77}],127:[function(e,t,n){"use strict";function r(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function o(e){for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}function a(e,t){for(var n=r(e),a=0,i=0;n;){if(3===n.nodeType){if(i=a+n.textContent.length,t>=a&&i>=t)return{node:n,offset:t-a};a=i}n=r(o(n))}}t.exports=a},{}],128:[function(e,t,n){"use strict";function r(){return!a&&o.canUseDOM&&(a="textContent"in document.documentElement?"textContent":"innerText"),a}var o=e(142),a=null;t.exports=r},{142:142}],129:[function(e,t,n){"use strict";function r(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n["ms"+e]="MS"+t,n["O"+e]="o"+t.toLowerCase(),n}function o(e){if(u[e])return u[e];if(!i[e])return e;var t=i[e];for(var n in t)if(t.hasOwnProperty(n)&&n in s)return u[e]=t[n];return""}var a=e(142),i={animationend:r("Animation","AnimationEnd"),animationiteration:r("Animation","AnimationIteration"),animationstart:r("Animation","AnimationStart"),transitionend:r("Transition","TransitionEnd")},u={},s={};a.canUseDOM&&(s=document.createElement("div").style,"AnimationEvent"in window||(delete i.animationend.animation,delete i.animationiteration.animation,delete i.animationstart.animation),"TransitionEvent"in window||delete i.transitionend.transition),t.exports=o},{142:142}],130:[function(e,t,n){"use strict";function r(e){return"function"==typeof e&&"undefined"!=typeof e.prototype&&"function"==typeof e.prototype.mountComponent&&"function"==typeof e.prototype.receiveComponent}function o(e){var t;if(null===e||e===!1)t=u.create(o);else if("object"==typeof e){var n=e;!n||"function"!=typeof n.type&&"string"!=typeof n.type?l(!1):void 0,t="string"==typeof n.type?s.createInternalComponent(n):r(n.type)?new n.type(n):new c(n)}else"string"==typeof e||"number"==typeof e?t=s.createInstanceForText(e):l(!1);return t._mountIndex=0,t._mountImage=null,t}var a=e(165),i=e(34),u=e(62),s=e(76),l=e(156),c=(e(164),function(e){this.construct(e)});a(c.prototype,i.Mixin,{_instantiateReactComponent:o}),t.exports=o},{156:156,164:164,165:165,34:34,62:62,76:76}],131:[function(e,t,n){"use strict";function r(e,t){if(!a.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var i=document.createElement("div");i.setAttribute(n,"return;"),r="function"==typeof i[n]}return!r&&o&&"wheel"===e&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var o,a=e(142);a.canUseDOM&&(o=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0),t.exports=r},{142:142}],132:[function(e,t,n){"use strict";function r(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&o[e.type]||"textarea"===t)}var o={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};t.exports=r},{}],133:[function(e,t,n){"use strict";function r(e){return o.isValidElement(e)?void 0:a(!1),e}var o=e(60),a=e(156);t.exports=r},{156:156,60:60}],134:[function(e,t,n){"use strict";function r(e){return'"'+o(e)+'"'}var o=e(117);t.exports=r},{117:117}],135:[function(e,t,n){"use strict";var r=e(73);t.exports=r.renderSubtreeIntoContainer},{73:73}],136:[function(e,t,n){"use strict";var r=e(142),o=/^[ \r\n\t\f]/,a=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,i=e(115),u=i(function(e,t){e.innerHTML=t});if(r.canUseDOM){var s=document.createElement("div");s.innerHTML=" ",""===s.innerHTML&&(u=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),o.test(t)||"<"===t[0]&&a.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t}),s=null}t.exports=u},{115:115,142:142}],137:[function(e,t,n){"use strict";var r=e(142),o=e(117),a=e(136),i=function(e,t){e.textContent=t};r.canUseDOM&&("textContent"in document.documentElement||(i=function(e,t){a(e,o(t))})),t.exports=i},{117:117,136:136,142:142}],138:[function(e,t,n){"use strict";function r(e,t){var n=null===e||e===!1,r=null===t||t===!1;if(n||r)return n===r;var o=typeof e,a=typeof t;return"string"===o||"number"===o?"string"===a||"number"===a:"object"===a&&e.type===t.type&&e.key===t.key}t.exports=r},{}],139:[function(e,t,n){"use strict";function r(e,t){return e&&"object"==typeof e&&null!=e.key?l.escape(e.key):t.toString(36)}function o(e,t,n,a){var d=typeof e;if("undefined"!==d&&"boolean"!==d||(e=null),null===e||"string"===d||"number"===d||i.isValidElement(e))return n(a,e,""===t?c+r(e,0):t),1;var f,h,v=0,m=""===t?c:t+p;if(Array.isArray(e))for(var g=0;go;o++)r[o]=e[o];return r}function o(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"length"in e&&!("setInterval"in e)&&"number"!=typeof e.nodeType&&(Array.isArray(e)||"callee"in e||"item"in e)}function a(e){return o(e)?Array.isArray(e)?e.slice():r(e):[e]}var i=e(156);t.exports=a},{156:156}],147:[function(e,t,n){"use strict";function r(e){var t=e.match(c);return t&&t[1].toLowerCase()}function o(e,t){var n=l;l?void 0:s(!1);var o=r(e),a=o&&u(o);if(a){n.innerHTML=a[1]+e+a[2];for(var c=a[0];c--;)n=n.lastChild}else n.innerHTML=e;var p=n.getElementsByTagName("script");p.length&&(t?void 0:s(!1),i(p).forEach(t));for(var d=Array.from(n.childNodes);n.lastChild;)n.removeChild(n.lastChild);return d}var a=e(142),i=e(146),u=e(152),s=e(156),l=a.canUseDOM?document.createElement("div"):null,c=/^\s*<(\w+)/;t.exports=o},{142:142,146:146,152:152,156:156}],148:[function(e,t,n){"use strict";function r(e){return function(){return e}}function o(){}o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},t.exports=o},{}],149:[function(e,t,n){"use strict";var r={};t.exports=r},{}],150:[function(e,t,n){"use strict";function r(e){try{e.focus()}catch(t){}}t.exports=r},{}],151:[function(e,t,n){"use strict";function r(){if("undefined"==typeof document)return null;try{return document.activeElement||document.body}catch(e){return document.body}}t.exports=r},{}],152:[function(e,t,n){"use strict";function r(e){return i?void 0:a(!1),d.hasOwnProperty(e)||(e="*"),u.hasOwnProperty(e)||("*"===e?i.innerHTML="":i.innerHTML="<"+e+">",u[e]=!i.firstChild),u[e]?d[e]:null}var o=e(142),a=e(156),i=o.canUseDOM?document.createElement("div"):null,u={},s=[1,'"],l=[1,"","
    "],c=[3,"","
    "],p=[1,'',""],d={"*":[1,"?
    ","
    "],area:[1,"",""],col:[2,"","
    "],legend:[1,"
    ","
    "],param:[1,"",""],tr:[2,"","
    "],optgroup:s,option:s,caption:l,colgroup:l,tbody:l,tfoot:l,thead:l,td:c,th:c},f=["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"];f.forEach(function(e){d[e]=p,u[e]=!0}),t.exports=r},{142:142,156:156}],153:[function(e,t,n){"use strict";function r(e){return e===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffset||document.documentElement.scrollTop}:{x:e.scrollLeft,y:e.scrollTop}}t.exports=r},{}],154:[function(e,t,n){"use strict";function r(e){return e.replace(o,"-$1").toLowerCase()}var o=/([A-Z])/g;t.exports=r},{}],155:[function(e,t,n){"use strict";function r(e){return o(e).replace(a,"-ms-")}var o=e(154),a=/^ms-/;t.exports=r},{154:154}],156:[function(e,t,n){"use strict";function r(e,t,n,r,o,a,i,u){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,o,a,i,u],c=0;s=new Error(t.replace(/%s/g,function(){return l[c++]})),s.name="Invariant Violation"}throw s.framesToPop=1,s}}t.exports=r},{}],157:[function(e,t,n){"use strict";function r(e){return!(!e||!("function"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName))}t.exports=r},{}],158:[function(e,t,n){"use strict";function r(e){return o(e)&&3==e.nodeType}var o=e(157);t.exports=r},{157:157}],159:[function(e,t,n){"use strict";var r=e(156),o=function(e){var t,n={};e instanceof Object&&!Array.isArray(e)?void 0:r(!1);for(t in e)e.hasOwnProperty(t)&&(n[t]=t);return n};t.exports=o},{156:156}],160:[function(e,t,n){"use strict";var r=function(e){var t;for(t in e)if(e.hasOwnProperty(t))return t;return null};t.exports=r},{}],161:[function(e,t,n){"use strict";function r(e,t,n){if(!e)return null;var r={};for(var a in e)o.call(e,a)&&(r[a]=t.call(n,e[a],a,e));return r}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],162:[function(e,t,n){"use strict";function r(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}t.exports=r},{}],163:[function(e,t,n){"use strict";function r(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function o(e,t){if(r(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(var i=0;i +#include +#include "acclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT acclasses_createView : public TActionView +{ + Q_OBJECT +public: + acclasses_createView() : TActionView() { } + QString toString(); +}; + +QString acclasses_createView::toString() +{ + responsebody.reserve(3918); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, acClasses); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n \n
    \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n\n\n
    \n Anzeige\n« zurück\n\n
    \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(acclasses_createView) + +#include "acclasses_createView.moc" diff --git a/views/_src/acclasses_indexView.cpp b/views/_src/acclasses_indexView.cpp new file mode 100644 index 0000000..19ae5df --- /dev/null +++ b/views/_src/acclasses_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "acclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT acclasses_indexView : public TActionView +{ + Q_OBJECT +public: + acclasses_indexView() : TActionView() { } + QString toString(); +}; + +QString acclasses_indexView::toString() +{ + responsebody.reserve(2734); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n\n
    \n\n
    \n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(acclasses_indexView) + +#include "acclasses_indexView.moc" diff --git a/views/_src/acclasses_list_allView.cpp b/views/_src/acclasses_list_allView.cpp new file mode 100644 index 0000000..f65e18e --- /dev/null +++ b/views/_src/acclasses_list_allView.cpp @@ -0,0 +1,60 @@ +#include +#include +#include "acclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT acclasses_list_allView : public TActionView +{ + Q_OBJECT +public: + acclasses_list_allView() : TActionView() { } + QString toString(); +}; + +QString acclasses_list_allView::toString() +{ + responsebody.reserve(4878); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n\n
    \n\n \n \n \n \n \n \n \n \n"); + tfetch(QList, acClassesList); + for (const auto &i : acClassesList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
    IDObj SnameAc ClassClass TypeActiveBaustein
    "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.objSname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.acClass()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.classType()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("\n    \n    \n \n
    \n\n
    \n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(acclasses_list_allView) + +#include "acclasses_list_allView.moc" diff --git a/views/_src/acclasses_saveView.cpp b/views/_src/acclasses_saveView.cpp new file mode 100644 index 0000000..7fb43ff --- /dev/null +++ b/views/_src/acclasses_saveView.cpp @@ -0,0 +1,56 @@ +#include +#include +#include "acclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT acclasses_saveView : public TActionView +{ + Q_OBJECT +public: + acclasses_saveView() : TActionView() { } + QString toString(); +}; + +QString acclasses_saveView::toString() +{ + responsebody.reserve(4542); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, acClasses); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n \n
    \n\n Anzeige\n« zurück\n\n"); + responsebody += QVariant(formTag(urla("save", acClasses["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n\n\n
    \n\n Anzeige\n« zurück\n\n
    \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(acclasses_saveView) + +#include "acclasses_saveView.moc" diff --git a/views/_src/acclasses_showView.cpp b/views/_src/acclasses_showView.cpp new file mode 100644 index 0000000..769f312 --- /dev/null +++ b/views/_src/acclasses_showView.cpp @@ -0,0 +1,58 @@ +#include +#include +#include "acclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT acclasses_showView : public TActionView +{ + Q_OBJECT +public: + acclasses_showView() : TActionView() { } + QString toString(); +}; + +QString acclasses_showView::toString() +{ + responsebody.reserve(4947); + responsebody += QStringLiteral("\n"); + tfetch(AcClasses, acClasses); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", acClasses.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
    \n\n
    \n

    \n

    \n

    \n

    \n

    \n
    \n\n
    \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", acClasses.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n
    \n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(acclasses_showView) + +#include "acclasses_showView.moc" diff --git a/views/_src/account_createView.cpp b/views/_src/account_createView.cpp new file mode 100644 index 0000000..bc8b0bd --- /dev/null +++ b/views/_src/account_createView.cpp @@ -0,0 +1,68 @@ +#include +#include +#include "itisuser.h" +#include "itisgroups.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_createView : public TActionView +{ + Q_OBJECT +public: + account_createView() : TActionView() { } + QString toString(); +}; + +QString account_createView::toString() +{ + responsebody.reserve(7276); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, user); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n \n\n
    \n
    \n
    \n
    \n

    available Groups  

    \n

    \n
    \n
    \n

    rights  

    \n

    create read update delete
    {c,r,u,d}

    \n
    \n
    \n
    \n
    \n\n
    \n \n
    \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n\n\n
    \n Anzeige\n« zurück\n\n
    \n\n\n\n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_createView) + +#include "account_createView.moc" diff --git a/views/_src/account_formElectronView.cpp b/views/_src/account_formElectronView.cpp new file mode 100644 index 0000000..1425bfc --- /dev/null +++ b/views/_src/account_formElectronView.cpp @@ -0,0 +1,31 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_formElectronView : public TActionView +{ + Q_OBJECT +public: + account_formElectronView() : TActionView() { } + QString toString(); +}; + +QString account_formElectronView::toString() +{ + responsebody.reserve(14310); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name()); + responsebody += tr(" IT-IS\n\n \n \n\n \n \n \n \n \n \n\n \n \n\n \n\n\n\n\n

    IT-IS Standards Anmeldung

    \n
    Online-Reader für IT-IS Standards und Anhänge.
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n
    \n\n\n\n
    \n\n
    \n\n \n\n
    \n

    Anmeldung

    \n

    \n

    \n \n \n

     

    \n
    \n

    \n
    \n\n
    \n

    Registrierung

    \n

    \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n \n

    \n

    \n
    \n \n
    \n \n \n

    \n

    \n

    Newsletter: 

    \n \n
    \n \n
    \n \n \n

    \n

    \n \n

    \n

    \n

     

    \n

    \n
    \n

    \n
    \n\n
    \n\n\n\n \n
    \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_formElectronView) + +#include "account_formElectronView.moc" diff --git a/views/_src/account_formView.cpp b/views/_src/account_formView.cpp new file mode 100644 index 0000000..15cc250 --- /dev/null +++ b/views/_src/account_formView.cpp @@ -0,0 +1,35 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_formView : public TActionView +{ + Q_OBJECT +public: + account_formView() : TActionView() { } + QString toString(); +}; + +QString account_formView::toString() +{ + responsebody.reserve(16455); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name()); + responsebody += tr(" IT-IS\n\n \n \n\n \n \n \n \n \n \n\n \n \n\n \n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    Admin Login

    \n
    \n\n

    "); + techoex(red_msg); + responsebody += QStringLiteral(""); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + responsebody += QStringLiteral(""); + tehex(notice); + responsebody += QStringLiteral("

    \n\n\n \n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n\n\n\n\n
    \n\n
    \n \n
    \n \n \n\n
    \n

    Anmeldung

    \n

    \n

    \n\n \n \n

     

    \n\n
    \n

    \n
    \n\n
    \n

    Registrierung

    \n

    \n

    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n


    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n\n


     

    \n

    Newsletter: 

    \n \n
    \n \n
    \n \n \n

    \n

    \n \n

    \n

    \n

     

    \n

    \n \n \n

    \n
    \n\n
    \n\n\n\n
    \n\n
    \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_formView) + +#include "account_formView.moc" diff --git a/views/_src/account_indexView.cpp b/views/_src/account_indexView.cpp new file mode 100644 index 0000000..4d41148 --- /dev/null +++ b/views/_src/account_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "itisuser.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_indexView : public TActionView +{ + Q_OBJECT +public: + account_indexView() : TActionView() { } + QString toString(); +}; + +QString account_indexView::toString() +{ + responsebody.reserve(2529); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n\n
    \n \n
    \n\n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_indexView) + +#include "account_indexView.moc" diff --git a/views/_src/account_list_allView.cpp b/views/_src/account_list_allView.cpp new file mode 100644 index 0000000..a982c6d --- /dev/null +++ b/views/_src/account_list_allView.cpp @@ -0,0 +1,80 @@ +#include +#include +#include "itisuser.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_list_allView : public TActionView +{ + Q_OBJECT +public: + account_list_allView() : TActionView() { } + QString toString(); +}; + +QString account_list_allView::toString() +{ + responsebody.reserve(7051); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n\n
    \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, itisUserList); + for (const auto &i : itisUserList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
    IDusernamefirstnamesurnameeMailCompanyTimezonegroupnamegroupslast loginlogin timelogged outpwd changed timepwd change forceActiveBaustein
    "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.username()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.firstname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.surname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.email()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.company()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.userTimezone()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.groupname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.groups()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lastLogin()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.loginTime()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.loggedOut()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.pwdChangedTime()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.pwdChangeForce()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("\n    \n    \n \n
    \n\n
    \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_list_allView) + +#include "account_list_allView.moc" diff --git a/views/_src/account_saveView.cpp b/views/_src/account_saveView.cpp new file mode 100644 index 0000000..6909300 --- /dev/null +++ b/views/_src/account_saveView.cpp @@ -0,0 +1,76 @@ +#include +#include +#include "itisuser.h" +#include "itisgroups.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_saveView : public TActionView +{ + Q_OBJECT +public: + account_saveView() : TActionView() { } + QString toString(); +}; + +QString account_saveView::toString() +{ + responsebody.reserve(7697); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, user); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n \n\n
    \n
    \n
    \n
    \n

    available Groups  

    \n

    \n
    \n
    \n

    rights  

    \n

    create read update delete
    {crud}

    \n
    \n
    \n
    \n
    \n\n
    \n \n
    \n\n Anzeige\n« zurück\n\n"); + responsebody += QVariant(formTag(urla("save", user["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n\n\n
    \n\n Anzeige\n« zurück\n\n
    \n\n\n\n\n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_saveView) + +#include "account_saveView.moc" diff --git a/views/_src/account_showView.cpp b/views/_src/account_showView.cpp new file mode 100644 index 0000000..315249c --- /dev/null +++ b/views/_src/account_showView.cpp @@ -0,0 +1,70 @@ +#include +#include +#include "itisuser.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_showView : public TActionView +{ + Q_OBJECT +public: + account_showView() : TActionView() { } + QString toString(); +}; + +QString account_showView::toString() +{ + responsebody.reserve(6274); + responsebody += QStringLiteral("\n"); + tfetch(ItisUser, user); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n \n
    \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", user.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
    \n\n
    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n
    \n\n
    \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", user.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n« zurück\n\n
    \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_showView) + +#include "account_showView.moc" diff --git a/views/_src/account_userhomeElectronView.cpp b/views/_src/account_userhomeElectronView.cpp new file mode 100644 index 0000000..dbcfacc --- /dev/null +++ b/views/_src/account_userhomeElectronView.cpp @@ -0,0 +1,93 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_userhomeElectronView : public TActionView +{ + Q_OBJECT +public: + account_userhomeElectronView() : TActionView() { } + QString toString(); +}; + +QString account_userhomeElectronView::toString() +{ + responsebody.reserve(7495); + responsebody += QStringLiteral("\n\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n\n \n\n \n \n \n \n\n\n\n\n\n

    Anwender-Bereich

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n\n\n
    \n \n
    \n
    \n

    Hallo "); + techoex(firstname); + responsebody += QStringLiteral("

    \n

    ⇒ der letzte Log-In erfolgte am Uhr ("); + techoex(lastLogin); + responsebody += QStringLiteral(" UTC)

    \n

    ⇒ der letzte Log-Out erfolgte am Uhr ("); + techoex(lastLogout); + responsebody += QStringLiteral(" UTC)

    \n

    ⇒ die letzte Passwort-Änderung erfolgte am Uhr ("); + techoex(lastPwdChangeTime); + responsebody += QStringLiteral(" UTC)

    \n "); + techoex(pwdToChangeIn); + responsebody += QStringLiteral(" (Passwort jetzt ändern)\n
    \n \n
    \n \n
    \n
    \n \"Alps\"\n\n

    username: "); + techoex(username); + responsebody += QStringLiteral("

    \n

    firstname: "); + techoex(firstname); + responsebody += QStringLiteral("

    \n

    surname: "); + techoex(surname); + responsebody += QStringLiteral("

    \n

    email: "); + techoex(email); + responsebody += QStringLiteral("

    \n

    company: "); + techoex(company); + responsebody += QStringLiteral("

    \n

    usertimezone: "); + techoex(usertimezone); + responsebody += QStringLiteral("

    \n

    groupname: "); + techoex(groupname); + responsebody += QStringLiteral("

    \n

    groups: "); + techoex(groups); + responsebody += QStringLiteral("

    \n

    \n

    Newsletter:

    \n \n
    \n \n
    \n \n \n

    \n
    \n
    \n
    \n
    \n
    \n\n
    \n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_userhomeElectronView) + +#include "account_userhomeElectronView.moc" diff --git a/views/_src/account_userhomeView.cpp b/views/_src/account_userhomeView.cpp new file mode 100644 index 0000000..c3e8121 --- /dev/null +++ b/views/_src/account_userhomeView.cpp @@ -0,0 +1,97 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_userhomeView : public TActionView +{ + Q_OBJECT +public: + account_userhomeView() : TActionView() { } + QString toString(); +}; + +QString account_userhomeView::toString() +{ + responsebody.reserve(9029); + responsebody += QStringLiteral("\n\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n\n\n
    \n \n
    \n
    \n

    Hallo "); + techoex(firstname); + responsebody += QStringLiteral("

    \n

    ⇒ der letzte Log-In erfolgte am Uhr ("); + techoex(lastLogin); + responsebody += QStringLiteral(" UTC)

    \n

    ⇒ der letzte Log-Out erfolgte am Uhr ("); + techoex(lastLogout); + responsebody += QStringLiteral(" UTC)

    \n

    ⇒ die letzte Passwort-Änderung erfolgte am Uhr ("); + techoex(lastPwdChangeTime); + responsebody += QStringLiteral(" UTC)

    \n "); + techoex(pwdToChangeIn); + responsebody += QStringLiteral("\n

    \n
    \n \n
    \n \n
    \n
    \n \"Alps\"\n\n

    username: "); + techoex(username); + responsebody += QStringLiteral("

    \n

    firstname: "); + techoex(firstname); + responsebody += QStringLiteral("

    \n

    surname: "); + techoex(surname); + responsebody += QStringLiteral("

    \n

    email: "); + techoex(email); + responsebody += QStringLiteral("

    \n

    company: "); + techoex(company); + responsebody += QStringLiteral("

    \n

    usertimezone: "); + techoex(usertimezone); + responsebody += QStringLiteral("

    \n

    groupname: "); + techoex(groupname); + responsebody += QStringLiteral("

    \n

    groups: "); + techoex(groups); + responsebody += QStringLiteral("

    \n

    \n

    Newsletter:

    \n \n
    \n \n
    \n \n \n

    \n
    \n
    \n
    \n
    \n
    \n\n
    \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_userhomeView) + +#include "account_userhomeView.moc" diff --git a/views/_src/account_userpwdElectronView.cpp b/views/_src/account_userpwdElectronView.cpp new file mode 100644 index 0000000..8c779a7 --- /dev/null +++ b/views/_src/account_userpwdElectronView.cpp @@ -0,0 +1,35 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_userpwdElectronView : public TActionView +{ + Q_OBJECT +public: + account_userpwdElectronView() : TActionView() { } + QString toString(); +}; + +QString account_userpwdElectronView::toString() +{ + responsebody.reserve(6721); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += tr("\n\n \n \n\n \n \n \n \n\n \n \n \n \n\n\n\n\n\n

    Anwender-Passwort

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n\n\n
    \n \n
    \n
    \n
    \n
    \n

    Passwort ändern für "); + techoex(uSname); + responsebody += QStringLiteral(" "); + techoex(uFname); + responsebody += QStringLiteral("

    \n
    \n
    \n \n
    \n \n \n

     

    \n \n
    \n
    \n
    \n\n
    \n
    \n\n
    \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_userpwdElectronView) + +#include "account_userpwdElectronView.moc" diff --git a/views/_src/account_userpwdView.cpp b/views/_src/account_userpwdView.cpp new file mode 100644 index 0000000..58ae151 --- /dev/null +++ b/views/_src/account_userpwdView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT account_userpwdView : public TActionView +{ + Q_OBJECT +public: + account_userpwdView() : TActionView() { } + QString toString(); +}; + +QString account_userpwdView::toString() +{ + responsebody.reserve(7417); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += tr("\n\n \n \n\n \n \n \n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n\n\n
    \n \n
    \n
    \n
    \n
    \n

    Passwort ändern für "); + techoex(uSname); + responsebody += QStringLiteral(" "); + techoex(uFname); + responsebody += QStringLiteral("

    \n
    \n
    \n \n
    \n \n \n

     

    \n \n
    \n
    \n
    \n\n
    \n
    \n\n
    \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(account_userpwdView) + +#include "account_userpwdView.moc" diff --git a/views/_src/actionrights_createView.cpp b/views/_src/actionrights_createView.cpp new file mode 100644 index 0000000..c3a9453 --- /dev/null +++ b/views/_src/actionrights_createView.cpp @@ -0,0 +1,60 @@ +#include +#include +#include "actionrights.h" +#include "itisgroups.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT actionrights_createView : public TActionView +{ + Q_OBJECT +public: + actionrights_createView() : TActionView() { } + QString toString(); +}; + +QString actionrights_createView::toString() +{ + responsebody.reserve(6111); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, actionRights); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n \n\n
    \n
    \n
    \n
    \n

    available Groups  

    \n

    \n
    \n
    \n

    rights  

    \n

    create read update delete
    {crud}

    \n
    \n
    \n
    \n
    \n\n
    \n \n
    \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n \n\n\n
    \n Anzeige\n« zurück\n\n
    \n\n\n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(actionrights_createView) + +#include "actionrights_createView.moc" diff --git a/views/_src/actionrights_indexView.cpp b/views/_src/actionrights_indexView.cpp new file mode 100644 index 0000000..3afacc8 --- /dev/null +++ b/views/_src/actionrights_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "actionrights.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT actionrights_indexView : public TActionView +{ + Q_OBJECT +public: + actionrights_indexView() : TActionView() { } + QString toString(); +}; + +QString actionrights_indexView::toString() +{ + responsebody.reserve(2531); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n\n
    \n \n
    \n\n\n \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(actionrights_indexView) + +#include "actionrights_indexView.moc" diff --git a/views/_src/actionrights_list_allView.cpp b/views/_src/actionrights_list_allView.cpp new file mode 100644 index 0000000..fad4712 --- /dev/null +++ b/views/_src/actionrights_list_allView.cpp @@ -0,0 +1,62 @@ +#include +#include +#include "actionrights.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT actionrights_list_allView : public TActionView +{ + Q_OBJECT +public: + actionrights_list_allView() : TActionView() { } + QString toString(); +}; + +QString actionrights_list_allView::toString() +{ + responsebody.reserve(5245); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n

    crud = CreateReadUpdateDelete

    Bei mehreren Rechten müssen diese in Reihenfolge aufgefürt und Lücken zwischen diesen Rechten mit einem _ gefüllt werden.
    Bsp.: Read + Delete: r_d oder Create + Delete: c__d

    \n\n
    \n\n \n \n \n \n \n \n \n \n"); + tfetch(QList, actionRightsList); + for (const auto &i : actionRightsList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
    IDUriGroupsRightsActiveBaustein
    "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.uri()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.groups()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.rights()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("\n    \n    \n \n
    \n\n
    \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(actionrights_list_allView) + +#include "actionrights_list_allView.moc" diff --git a/views/_src/actionrights_saveView.cpp b/views/_src/actionrights_saveView.cpp new file mode 100644 index 0000000..939b602 --- /dev/null +++ b/views/_src/actionrights_saveView.cpp @@ -0,0 +1,66 @@ +#include +#include +#include "actionrights.h" +#include "itisgroups.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT actionrights_saveView : public TActionView +{ + Q_OBJECT +public: + actionrights_saveView() : TActionView() { } + QString toString(); +}; + +QString actionrights_saveView::toString() +{ + responsebody.reserve(7349); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, actionRights); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n\n \n\n
    \n
    \n
    \n
    \n

    available Groups  

    \n

    \n
    \n
    \n

    rights  

    \n

    create read update delete
    {crud}

    \n
    \n
    \n
    \n
    \n\n
    \n
    \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", actionRights["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Editor\n zurück\n

    \n\n"); + responsebody += QVariant(formTag(urla("save", actionRights["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n\n\n
    \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", actionRights["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n zurück\n\n
    \n\n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(actionrights_saveView) + +#include "actionrights_saveView.moc" diff --git a/views/_src/actionrights_showView.cpp b/views/_src/actionrights_showView.cpp new file mode 100644 index 0000000..e58aed3 --- /dev/null +++ b/views/_src/actionrights_showView.cpp @@ -0,0 +1,58 @@ +#include +#include +#include "actionrights.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT actionrights_showView : public TActionView +{ + Q_OBJECT +public: + actionrights_showView() : TActionView() { } + QString toString(); +}; + +QString actionrights_showView::toString() +{ + responsebody.reserve(4969); + responsebody += QStringLiteral("\n"); + tfetch(ActionRights, actionRights); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", actionRights.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
    \n\n
    \n

    \n

    \n

    \n

    \n

    \n
    \n\n
    \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", actionRights.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n
    \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(actionrights_showView) + +#include "actionrights_showView.moc" diff --git a/views/_src/admin_indexView.cpp b/views/_src/admin_indexView.cpp new file mode 100644 index 0000000..e026899 --- /dev/null +++ b/views/_src/admin_indexView.cpp @@ -0,0 +1,55 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT admin_indexView : public TActionView +{ + Q_OBJECT +public: + admin_indexView() : TActionView() { } + QString toString(); +}; + +QString admin_indexView::toString() +{ + responsebody.reserve(5570); + responsebody += QStringLiteral("\n\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

      Admin-Änderungen über Formular-Eingaben werden mit Benutzername und Datum im System gespeichert.

    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n \n
    \n
    \n

    Hallo "); + techoex(uFname); + responsebody += QStringLiteral("

    \n

    ⇒ der letzte Log-In erfolgte am Uhr ("); + techoex(lastLogin); + responsebody += QStringLiteral(" UTC)

    \n

    ⇒ der letzte Log-Out erfolgte am Uhr ("); + techoex(lastLogout); + responsebody += QStringLiteral(" UTC)

    \n

    ⇒ die letzte Passwort-Änderung erfolgte am Uhr ("); + techoex(lastPwdChangeTime); + responsebody += QStringLiteral(" UTC)

    \n
    \n
    \n
    \n\n
    \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(admin_indexView) + +#include "admin_indexView.moc" diff --git a/views/_src/admin_showGalleryView.cpp b/views/_src/admin_showGalleryView.cpp new file mode 100644 index 0000000..58232ec --- /dev/null +++ b/views/_src/admin_showGalleryView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT admin_showGalleryView : public TActionView +{ + Q_OBJECT +public: + admin_showGalleryView() : TActionView() { } + QString toString(); +}; + +QString admin_showGalleryView::toString() +{ + responsebody.reserve(7134); + responsebody += QStringLiteral("\n\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n\n \n\n \n \n\n \n\n \n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += tr("

    \n

    Alle Bilder und Photos der Vorgaben und Anhänge.

    ⇒ Bild anklicken für Ansicht in Originalgröße,
    ⇒ Button anklicken um die URL des Bildes in den Zwischenspeicher zu laden (um z.B. im Baustein-Editor über Bild-URL mittels STRG+V einzufügen).

    \n\n

    "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += tr("

    \n\n
    \n
    \n\n
    \n\n
    \n\n
    \n\n\n
    \n ×\n \n
    \n
    \n\n\n\n\n
    \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(admin_showGalleryView) + +#include "admin_showGalleryView.moc" diff --git a/views/_src/annexdata_createView.cpp b/views/_src/annexdata_createView.cpp new file mode 100644 index 0000000..7cb7b70 --- /dev/null +++ b/views/_src/annexdata_createView.cpp @@ -0,0 +1,64 @@ +#include +#include +#include "annexdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_createView : public TActionView +{ + Q_OBJECT +public: + annexdata_createView() : TActionView() { } + QString toString(); +}; + +QString annexdata_createView::toString() +{ + responsebody.reserve(3621); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, annexData); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n

    New Annex Data

    \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n\n\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_createView) + +#include "annexdata_createView.moc" diff --git a/views/_src/annexdata_editor_addView.cpp b/views/_src/annexdata_editor_addView.cpp new file mode 100644 index 0000000..04bee22 --- /dev/null +++ b/views/_src/annexdata_editor_addView.cpp @@ -0,0 +1,53 @@ +#include +#include +#include "annexdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_editor_addView : public TActionView +{ + Q_OBJECT +public: + annexdata_editor_addView() : TActionView() { } + QString toString(); +}; + +QString annexdata_editor_addView::toString() +{ + responsebody.reserve(30459); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n\n \n\n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n\n\n\n
    \n
    \n\n
    \n
    \n
    \n
    \n \n
    \n Baustein-Titel, Verwendung im Inhaltsverzeichnis\n
    \n
    \n
    \n \n
    \n Kurzbeschreibung für Text-Baustein Administration\n
    \n
    \n
    \n
    \n
    \n
    Objekt-Zuordnung\n
    \n  \n \n \n Ein oder mehrere Objekte\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    Objekt-Attribute\n
    \n
    \n
    \n
    \n
    \n \n
    \n 2-stelliger Ländercode (WW = World Wide)\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n Text-Baustein Version (Bsp.: v00.01.02)\n
    \n
    \n
    \n \n
    \n 3-stellige Text-Baustein Nummerierung (Bsp.: 013)\n
    \n \n check lfdnr innerhalb der gewählten Cat\n   \n \n
    \n
    \n
    \n \n
    \n optional: interne Bemerkung, auch für Release\n
    \n
    \n
    \n \n
    \n \n interne Hilfs-Markierung\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    Availability Class\n  \n \n \n Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" \n
    \n
    \n
    \n
    \n
    Protection Class\n  \n \n \n Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" \n
    \n
    \n
    \n
    \n
    Legacy\n \n \n \n ehemals G2 od. G3 \n
    \n
    \n
    \n
    \n\n
    \n
    Text-Baustein\n
    \n
    \n
    \n
    \n
    \n \n
    \n \n Start-Datum
    \n
    \n
    \n
    \n \n
    \n vorläufiges End-Datum
    \n
    \n
    \n
    \n \n \n Baustein aktiv oder in-aktiv \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n Verantwortlicher: email, Abteilung, Jira-Key\n
    \n
    \n
    \n
    \n
    \n\n

    \n

    \n\n \n
    \n

    \n\n\n
    \n
    \n \n
    \n \n
    \n\n\n \n\n
    \n\n
    \n \n\n \n\n
    \n\n

    URL Text kopieren um in den Baustein via IMG-URL einzufügen.

    \n\n\n\n
    \n
    \n
    \n
    \n\n
    \n\n\n\n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_editor_addView) + +#include "annexdata_editor_addView.moc" diff --git a/views/_src/annexdata_editor_updView.cpp b/views/_src/annexdata_editor_updView.cpp new file mode 100644 index 0000000..4668a84 --- /dev/null +++ b/views/_src/annexdata_editor_updView.cpp @@ -0,0 +1,118 @@ +#include +#include +#include "annexdata.h" +#include "annexmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_editor_updView : public TActionView +{ + Q_OBJECT +public: + annexdata_editor_updView() : TActionView() { } + QString toString(); +}; + +QString annexdata_editor_updView::toString() +{ + responsebody.reserve(38062); + responsebody += QStringLiteral("\n"); + tfetch(AnnexData, annexData); + tfetch(AnnexMeta, annexMeta); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n \n \n\n \n\n \n\n \n \n \n\n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n\n\n\n
    \n
    \n\n
    \n
    \n
    \n
    \n \n
    \n Baustein-Titel, Verwendung im Inhaltsverzeichnis\n
    \n
    \n
    \n \n
    \n Kurzbeschreibung für Text-Baustein Administration\n
    \n
    \n
    \n
    \n
    \n
    Objekt-Zuordnung\n
    \n  \n \n \n Ein oder mehrere Objekte\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    Objekt-Attribute\n
    \n
    \n
    \n
    \n
    \n \n
    \n 2-stelliger Ländercode (WW = World Wide)\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n Text-Baustein Version (Bsp.: v00.01.02)\n
    \n
    \n
    \n \n
    \n Text-Baustein Version (Bsp.: v00.01.02)\n
    \n
    \n
    \n \n
    \n 3-stellige Text-Baustein Nummerierung (Bsp.: 013)\n
    \n \n check lfdnr innerhalb der gewählten Cat\n   \n \n
    \n
    \n
    \n \n
    \n optional: interne Bemerkung, auch für Release\n
    \n
    \n
    \n \n
    \n \n interne Hilfs-Markierung\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    Availability Class\n  \n \n \n Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" \n
    \n
    \n
    \n
    \n
    Protection Class\n  \n \n \n Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" \n
    \n
    \n
    \n
    \n
    Legacy\n \n \n \n ehemals G2 od. G3 \n
    \n
    \n
    \n
    \n\n
    \n
    Text-Baustein\n
    \n
    \n
    \n
    \n
    \n \n
    \n \n Start-Datum
    \n
    \n
    \n
    \n \n
    \n vorläufiges End-Datum
    \n
    \n
    \n
    \n \n \n Baustein aktiv oder in-aktiv \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n Verantwortlicher: email, Abteilung, Jira-Key\n
    \n
    \n
    \n
    \n
    \n

    \n \n \n \n \n

    \n\n\n \n
    \n

    \n\n\n
    \n
    \n \n
    \n \n
    \n\n\n \n\n
    \n
    \n \n\n \n\n
    \n\n

    URL Text kopieren um in den Baustein via IMG-URL einzufügen.

    \n\n\n\n
    \n
    \n
    \n
    \n\n
    \n\n\n\n\n\n\n
    \n \n \n
    \n\n\n
    \n Kommentar zu \" \"
    \n \n \n \n
    \n   \n
    \n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_editor_updView) + +#include "annexdata_editor_updView.moc" diff --git a/views/_src/annexdata_indexView.cpp b/views/_src/annexdata_indexView.cpp new file mode 100644 index 0000000..37d0c6e --- /dev/null +++ b/views/_src/annexdata_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "annexdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_indexView : public TActionView +{ + Q_OBJECT +public: + annexdata_indexView() : TActionView() { } + QString toString(); +}; + +QString annexdata_indexView::toString() +{ + responsebody.reserve(2582); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n\n
    \n \n
    \n\n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_indexView) + +#include "annexdata_indexView.moc" diff --git a/views/_src/annexdata_listAnnexView.cpp b/views/_src/annexdata_listAnnexView.cpp new file mode 100644 index 0000000..48fc1cb --- /dev/null +++ b/views/_src/annexdata_listAnnexView.cpp @@ -0,0 +1,50 @@ +#include +#include +#include "standardsdata.h" +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_listAnnexView : public TActionView +{ + Q_OBJECT +public: + annexdata_listAnnexView() : TActionView() { } + QString toString(); +}; + +QString annexdata_listAnnexView::toString() +{ + responsebody.reserve(7241); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n\n \n\n \n \n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n

    Auflistung aller Bausteine eines Anhangs, ohne Filterung.

    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n\n\n\n
    \n
    \n\n
    \n
    \n
    \n
    Objekt-Attribute\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n WW = World Wide\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    Release\n
    \n
    \n
    \n
    \n
    \n
    \n \n \n nur de-/aktive Bausteine\n
    \n
    \n
    \n
    \n \n \n alle Objekt-spezifische Bausteine\n
    \n
    \n
    \n
    \n\n
    \n
    \n \n

    \n \n
    \n\n
    \n\n
    \n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_listAnnexView) + +#include "annexdata_listAnnexView.moc" diff --git a/views/_src/annexdata_listWasteView.cpp b/views/_src/annexdata_listWasteView.cpp new file mode 100644 index 0000000..b337d7d --- /dev/null +++ b/views/_src/annexdata_listWasteView.cpp @@ -0,0 +1,81 @@ +#include +#include +#include "annexdata.h" +#include "annexdatawaste.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_listWasteView : public TActionView +{ + Q_OBJECT +public: + annexdata_listWasteView() : TActionView() { } + QString toString(); +}; + +QString annexdata_listWasteView::toString() +{ + responsebody.reserve(8997); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    Ungefilterte Auflistung aller gelöschten Anhang Bausteine.
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n\n\n
    \n
    \n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, annexDataWasteList); + for (const auto &i : annexDataWasteList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
    gelöscht amLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangWiederherstellung
    "); + responsebody += THttpUtility::htmlEscape(i.lfdnr()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specTitle()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specDesc()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specVersion()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specRelease()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.objSname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.acClasses()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.pcClasses()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.catClass()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.country()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lang()); + responsebody += QStringLiteral("\n    \n    \n \n
    \n\n
    \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_listWasteView) + +#include "annexdata_listWasteView.moc" diff --git a/views/_src/annexdata_list_allView.cpp b/views/_src/annexdata_list_allView.cpp new file mode 100644 index 0000000..c86fa07 --- /dev/null +++ b/views/_src/annexdata_list_allView.cpp @@ -0,0 +1,80 @@ +#include +#include +#include "annexdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_list_allView : public TActionView +{ + Q_OBJECT +public: + annexdata_list_allView() : TActionView() { } + QString toString(); +}; + +QString annexdata_list_allView::toString() +{ + responsebody.reserve(6474); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    Ungefilterte Auflistung aller Bausteine.
    \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
    \n
    \n\n
    \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, annexDataList); + for (const auto &i : annexDataList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
    IDLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangSpec ActiveBaustein
    "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lfdnr()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specTitle()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specDesc()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specVersion()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specRelease()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.objSname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.acClasses()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.pcClasses()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.catClass()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.country()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lang()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specActive()); + responsebody += QStringLiteral("\n \n \n \n \n
    \n\n
    \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_list_allView) + +#include "annexdata_list_allView.moc" diff --git a/views/_src/annexdata_printCiAnnexView.cpp b/views/_src/annexdata_printCiAnnexView.cpp new file mode 100644 index 0000000..e062cf0 --- /dev/null +++ b/views/_src/annexdata_printCiAnnexView.cpp @@ -0,0 +1,58 @@ +#include +#include +#include "standardsdata.h" +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_printCiAnnexView : public TActionView +{ + Q_OBJECT +public: + annexdata_printCiAnnexView() : TActionView() { } + QString toString(); +}; + +QString annexdata_printCiAnnexView::toString() +{ + responsebody.reserve(12104); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n\n \n \n\n\n\n\n
    \n \n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n

    Release Review eines Anhangs.

    \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n  0\n\n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n
    \n\n\n
    \n Kommentar zu \" \"
    \n \n \n \n
    \n   \n
    \n\n
    \n
    \n\n
    \n
    \n
    \n
    Objekt-Attribute\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    Release\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n\n
    \n
    \n \n

    \n \n  Vorgabe drucken\n \n

    \n\n
    \n\n
    \n\n
    \n\n\n
    \n \n \n
    \n\n\n\n\n\n\n\n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_printCiAnnexView) + +#include "annexdata_printCiAnnexView.moc" diff --git a/views/_src/annexdata_saveView.cpp b/views/_src/annexdata_saveView.cpp new file mode 100644 index 0000000..00b6540 --- /dev/null +++ b/views/_src/annexdata_saveView.cpp @@ -0,0 +1,86 @@ +#include +#include +#include "annexdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_saveView : public TActionView +{ + Q_OBJECT +public: + annexdata_saveView() : TActionView() { } + QString toString(); +}; + +QString annexdata_saveView::toString() +{ + responsebody.reserve(8770); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, annexData); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n\n\n\n\n\n \n\n
    \n

    ITIS-API::Admin-Portal

    \n
    \n\n name()); + responsebody += QStringLiteral("\">\n\n

    "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

    \n
    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", annexData["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Editor\n zurück\n

    \n\n"); + responsebody += QVariant(formTag(urla("save", annexData["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

    \n \n

    \n

    \n \n

    \n

    \n \n

    \n\n\n
    \n

    Daten Quellcode

    \n

    \n

    \n

    \n

    \n \n

    \n\n\n
    \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", annexData["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Editor\n zurück\n\n

    \n

    Daten Anzeige

    \n


    "); + responsebody += QVariant(annexData["specContent"]).toString(); + responsebody += QStringLiteral("

    \n\n
    \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", annexData["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Editor\n zurück\n\n\n
    \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_saveView) + +#include "annexdata_saveView.moc" diff --git a/views/_src/annexdata_showAnnexElectronView.cpp b/views/_src/annexdata_showAnnexElectronView.cpp new file mode 100644 index 0000000..25955d8 --- /dev/null +++ b/views/_src/annexdata_showAnnexElectronView.cpp @@ -0,0 +1,46 @@ +#include +#include +#include "standardsdata.h" +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_showAnnexElectronView : public TActionView +{ + Q_OBJECT +public: + annexdata_showAnnexElectronView() : TActionView() { } + QString toString(); +}; + +QString annexdata_showAnnexElectronView::toString() +{ + responsebody.reserve(6505); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n\n \n\n \n \n \n \n \n\n\n\n\n\n

    Vorgabedokument (Anhang) der BMW Group

    \n

    Semi-Finale Anzeige eines Anhangs.

    \n\n

    "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

    "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

    \n\n
    \n
    \n
    \n ×\n \n
    \n
    \n
    \n\n\n\n
    \n
    \n\n
    \n
    \n
    \n
    Objekt-Attribute\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n WW = World Wide\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    Release\n
    \n
    \n
    \n
    \n
    \n
    \n \n \n nur de-/aktive Bausteine\n
    \n
    \n
    \n
    \n \n \n alle Objekt-spezifische Bausteine\n
    \n
    \n
    \n
    \n\n
    \n
    \n \n

    \n \n
    \n\n
    \n\n
    \n\n\n
      \n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_showAnnexElectronView) + +#include "annexdata_showAnnexElectronView.moc" diff --git a/views/_src/annexdata_showAnnexView.cpp b/views/_src/annexdata_showAnnexView.cpp new file mode 100644 index 0000000..6a72931 --- /dev/null +++ b/views/_src/annexdata_showAnnexView.cpp @@ -0,0 +1,52 @@ +#include +#include +#include "standardsdata.h" +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_showAnnexView : public TActionView +{ + Q_OBJECT +public: + annexdata_showAnnexView() : TActionView() { } + QString toString(); +}; + +QString annexdata_showAnnexView::toString() +{ + responsebody.reserve(11016); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n\n\n\n\n
      \n \n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n

      Semi-Finale Anzeige eines Anhangs.

      \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += tr("\n\n\n  0\n\n\n
      \n
      \n
      \n ×\n \n
      \n
      \n
      \n
      \n\n\n
      \n Kommentar zu \" \"
      \n \n \n \n
      \n   \n
      \n\n
      \n
      \n\n
      \n
      \n
      \n
      Objekt-Attribute\n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n WW = World Wide\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      Release\n
      \n
      \n
      \n
      \n
      \n
      \n \n \n nur de-/aktive Bausteine\n
      \n
      \n
      \n
      \n \n \n alle Objekt-spezifische Bausteine\n
      \n
      \n
      \n
      \n\n
      \n
      \n \n

      \n \n  Vorgabe drucken\n \n

      \n\n
      \n\n
      \n\n
      \n\n\n
      \n \n \n
      \n\n\n\n\n\n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_showAnnexView) + +#include "annexdata_showAnnexView.moc" diff --git a/views/_src/annexdata_showCiAnnexView.cpp b/views/_src/annexdata_showCiAnnexView.cpp new file mode 100644 index 0000000..b72d4b8 --- /dev/null +++ b/views/_src/annexdata_showCiAnnexView.cpp @@ -0,0 +1,58 @@ +#include +#include +#include "standardsdata.h" +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_showCiAnnexView : public TActionView +{ + Q_OBJECT +public: + annexdata_showCiAnnexView() : TActionView() { } + QString toString(); +}; + +QString annexdata_showCiAnnexView::toString() +{ + responsebody.reserve(14737); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n\n\n\n\n
      \n \n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n

      Release Review eines Anhangs.

      \n\n\n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n  0\n\n\n
      \n
      \n
      \n ×\n \n
      \n
      \n
      \n
      \n\n\n
      \n Kommentar zu \" \"
      \n \n \n \n
      \n   \n
      \n\n
      \n
      \n\n
      \n
      \n
      \n
      Objekt-Attribute\n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      Release\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n
      \n
      \n \n

      \n \n \n \n  Vorgabe drucken\n \n

      \n\n
      \n\n
      \n\n
      \n\n\n
      \n \n \n
      \n\n\n\n\n\n\n\n\n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_showCiAnnexView) + +#include "annexdata_showCiAnnexView.moc" diff --git a/views/_src/annexdata_showView.cpp b/views/_src/annexdata_showView.cpp new file mode 100644 index 0000000..1c3e0b7 --- /dev/null +++ b/views/_src/annexdata_showView.cpp @@ -0,0 +1,82 @@ +#include +#include +#include "annexdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_showView : public TActionView +{ + Q_OBJECT +public: + annexdata_showView() : TActionView() { } + QString toString(); +}; + +QString annexdata_showView::toString() +{ + responsebody.reserve(7402); + responsebody += QStringLiteral("\n"); + tfetch(AnnexData, annexData); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", annexData.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n Editor\n zurück\n
      \n\n
      \n

      \n

      \n

      \n\n\n
      \n

      Daten Anzeige

      \n\n
      \n


      "); + responsebody += QVariant(annexData.specContent()).toString(); + responsebody += QStringLiteral("

      \n\n
      \n\n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", annexData.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n Editor\n zurück\n\n
      \n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_showView) + +#include "annexdata_showView.moc" diff --git a/views/_src/annexdata_showWasteView.cpp b/views/_src/annexdata_showWasteView.cpp new file mode 100644 index 0000000..65d7a3e --- /dev/null +++ b/views/_src/annexdata_showWasteView.cpp @@ -0,0 +1,76 @@ +#include +#include +#include "annexdata.h" +#include "annexdatawaste.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdata_showWasteView : public TActionView +{ + Q_OBJECT +public: + annexdata_showWasteView() : TActionView() { } + QString toString(); +}; + +QString annexdata_showWasteView::toString() +{ + responsebody.reserve(6660); + responsebody += QStringLiteral("\n"); + tfetch(AnnexData, annexData); + tfetch(AnnexDataWaste, annexDataWaste); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("removeWaste", annexDataWaste.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n zurück\n
      \n\n
      \n

      \n

      \n

      \n

      \n

      \n

      \n

      \n

      \n

      \n

      \n

      \n

      \n

      \n\n
      \n\n
      \n

      Daten Anzeige

      \n


      \n

      "); + responsebody += QVariant(annexDataWaste.specContent()).toString(); + responsebody += QStringLiteral("

      \n

      \n
      "); + responsebody += THttpUtility::htmlEscape(annexDataWaste.specContent()); + responsebody += QStringLiteral("
      \n
      \n
      \n\n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("removeWaste", annexDataWaste.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n zurück\n\n
      \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdata_showWasteView) + +#include "annexdata_showWasteView.moc" diff --git a/views/_src/annexdatacomments_createView.cpp b/views/_src/annexdatacomments_createView.cpp new file mode 100644 index 0000000..aa6a009 --- /dev/null +++ b/views/_src/annexdatacomments_createView.cpp @@ -0,0 +1,56 @@ +#include +#include +#include "annexdatacomments.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdatacomments_createView : public TActionView +{ + Q_OBJECT +public: + annexdatacomments_createView() : TActionView() { } + QString toString(); +}; + +QString annexdatacomments_createView::toString() +{ + responsebody.reserve(5573); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, annexDataComments); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n
      \n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n

      \n \n

      \n\n
      \n\n
      \n Anzeige\n« zurück\n\n
      \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdatacomments_createView) + +#include "annexdatacomments_createView.moc" diff --git a/views/_src/annexdatacomments_indexView.cpp b/views/_src/annexdatacomments_indexView.cpp new file mode 100644 index 0000000..85cc594 --- /dev/null +++ b/views/_src/annexdatacomments_indexView.cpp @@ -0,0 +1,45 @@ +#include +#include +#include "annexdatacomments.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdatacomments_indexView : public TActionView +{ + Q_OBJECT +public: + annexdatacomments_indexView() : TActionView() { } + QString toString(); +}; + +QString annexdatacomments_indexView::toString() +{ + responsebody.reserve(2811); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n\n
      \n

      Anzahl Kommentare: "); + tehex(count_id); + responsebody += QStringLiteral("

      \n

      Anzahl Kommentatoren: "); + tehex(count_users); + responsebody += QStringLiteral("

      \n
      \n \n
      \n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdatacomments_indexView) + +#include "annexdatacomments_indexView.moc" diff --git a/views/_src/annexdatacomments_list_allView.cpp b/views/_src/annexdatacomments_list_allView.cpp new file mode 100644 index 0000000..9b467ba --- /dev/null +++ b/views/_src/annexdatacomments_list_allView.cpp @@ -0,0 +1,72 @@ +#include +#include +#include "annexdatacomments.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdatacomments_list_allView : public TActionView +{ + Q_OBJECT +public: + annexdatacomments_list_allView() : TActionView() { } + QString toString(); +}; + +QString annexdatacomments_list_allView::toString() +{ + responsebody.reserve(6690); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n
      \n\n
      \n\n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, annexDataCommentsList); + for (const auto &i : annexDataCommentsList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
      IDComment CreatedSpec IDSpec TitleSpec VersionUsernameUser CommentBaustein
      "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specId()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specTitle()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specVersion()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.username()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.userComment()); + responsebody += QStringLiteral("\n \n \n \n \n
      \n\n
      \n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdatacomments_list_allView) + +#include "annexdatacomments_list_allView.moc" diff --git a/views/_src/annexdatacomments_saveView.cpp b/views/_src/annexdatacomments_saveView.cpp new file mode 100644 index 0000000..be4b15d --- /dev/null +++ b/views/_src/annexdatacomments_saveView.cpp @@ -0,0 +1,70 @@ +#include +#include +#include "annexdatacomments.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdatacomments_saveView : public TActionView +{ + Q_OBJECT +public: + annexdatacomments_saveView() : TActionView() { } + QString toString(); +}; + +QString annexdatacomments_saveView::toString() +{ + responsebody.reserve(8391); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, annexDataComments); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n\n Anzeige\n« zurück\n\n
      \n"); + responsebody += QVariant(formTag(urla("save", annexDataComments["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n

      \n \n

      \n
      \n\n
      \n\n
      \n\n Anzeige\n« zurück\n\n
      \n\n\n\n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdatacomments_saveView) + +#include "annexdatacomments_saveView.moc" diff --git a/views/_src/annexdatacomments_showView.cpp b/views/_src/annexdatacomments_showView.cpp new file mode 100644 index 0000000..b7ddf9e --- /dev/null +++ b/views/_src/annexdatacomments_showView.cpp @@ -0,0 +1,70 @@ +#include +#include +#include "annexdatacomments.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexdatacomments_showView : public TActionView +{ + Q_OBJECT +public: + annexdatacomments_showView() : TActionView() { } + QString toString(); +}; + +QString annexdatacomments_showView::toString() +{ + responsebody.reserve(7554); + responsebody += QStringLiteral("\n"); + tfetch(AnnexDataComments, annexDataComments); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", annexDataComments.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
      \n\n
      \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n\n


      "); + responsebody += QVariant(annexDataComments.userComment()).toString(); + responsebody += QStringLiteral("

      \n
      \n
      \n\n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", annexDataComments.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n« zurück\n\n
      \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexdatacomments_showView) + +#include "annexdatacomments_showView.moc" diff --git a/views/_src/annexmeta_createView.cpp b/views/_src/annexmeta_createView.cpp new file mode 100644 index 0000000..487b16a --- /dev/null +++ b/views/_src/annexmeta_createView.cpp @@ -0,0 +1,60 @@ +#include +#include +#include "annexmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexmeta_createView : public TActionView +{ + Q_OBJECT +public: + annexmeta_createView() : TActionView() { } + QString toString(); +}; + +QString annexmeta_createView::toString() +{ + responsebody.reserve(3297); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, annexMeta); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n

      New Annex Meta

      \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n\n\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexmeta_createView) + +#include "annexmeta_createView.moc" diff --git a/views/_src/annexmeta_indexView.cpp b/views/_src/annexmeta_indexView.cpp new file mode 100644 index 0000000..05cae83 --- /dev/null +++ b/views/_src/annexmeta_indexView.cpp @@ -0,0 +1,70 @@ +#include +#include +#include "annexmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexmeta_indexView : public TActionView +{ + Q_OBJECT +public: + annexmeta_indexView() : TActionView() { } + QString toString(); +}; + +QString annexmeta_indexView::toString() +{ + responsebody.reserve(3176); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

      Listing Annex Meta

      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n"); + responsebody += QVariant(linkTo("Create a new Annex Meta", urla("create"))).toString(); + responsebody += QStringLiteral("
      \n
      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, annexMetaList); + for (const auto &i : annexMetaList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
      IDSpec Data IDSpec CreatedSpec Last ModifiedSpec Valid StartSpec Valid EndLast EditorG LegacyResponsibilitySpec CommentSpec MarkerGroups
      "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specDataId()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specCreated()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specLastModified()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specValidStart()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specValidEnd()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lastEditor()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.gLegacy()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.responsibility()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specComment()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specMarker()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.groups()); + responsebody += QStringLiteral("\n "); + responsebody += QVariant(linkTo("Show", urla("show", i.id()))).toString(); + responsebody += QStringLiteral("\n "); + responsebody += QVariant(linkTo("Edit", urla("save", i.id()))).toString(); + responsebody += QStringLiteral("\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", i.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n
      \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexmeta_indexView) + +#include "annexmeta_indexView.moc" diff --git a/views/_src/annexmeta_saveView.cpp b/views/_src/annexmeta_saveView.cpp new file mode 100644 index 0000000..9044cb3 --- /dev/null +++ b/views/_src/annexmeta_saveView.cpp @@ -0,0 +1,64 @@ +#include +#include +#include "annexmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexmeta_saveView : public TActionView +{ + Q_OBJECT +public: + annexmeta_saveView() : TActionView() { } + QString toString(); +}; + +QString annexmeta_saveView::toString() +{ + responsebody.reserve(3816); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, annexMeta); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n

      Editing Annex Meta

      \n\n"); + responsebody += QVariant(formTag(urla("save", annexMeta["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n\n\n"); + responsebody += QVariant(linkTo("Show", urla("show", annexMeta["id"]))).toString(); + responsebody += QStringLiteral(" |\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexmeta_saveView) + +#include "annexmeta_saveView.moc" diff --git a/views/_src/annexmeta_showView.cpp b/views/_src/annexmeta_showView.cpp new file mode 100644 index 0000000..ba71996 --- /dev/null +++ b/views/_src/annexmeta_showView.cpp @@ -0,0 +1,62 @@ +#include +#include +#include "annexmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT annexmeta_showView : public TActionView +{ + Q_OBJECT +public: + annexmeta_showView() : TActionView() { } + QString toString(); +}; + +QString annexmeta_showView::toString() +{ + responsebody.reserve(2606); + responsebody += QStringLiteral("\n"); + tfetch(AnnexMeta, annexMeta); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n \n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n

      Showing Annex Meta

      \n
      ID
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.id()); + responsebody += QStringLiteral("

      \n
      Spec Data ID
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.specDataId()); + responsebody += QStringLiteral("

      \n
      Spec Created
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.specCreated()); + responsebody += QStringLiteral("

      \n
      Spec Last Modified
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.specLastModified()); + responsebody += QStringLiteral("

      \n
      Spec Valid Start
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.specValidStart()); + responsebody += QStringLiteral("

      \n
      Spec Valid End
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.specValidEnd()); + responsebody += QStringLiteral("

      \n
      Last Editor
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.lastEditor()); + responsebody += QStringLiteral("

      \n
      G Legacy
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.gLegacy()); + responsebody += QStringLiteral("

      \n
      Responsibility
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.responsibility()); + responsebody += QStringLiteral("

      \n
      Spec Comment
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.specComment()); + responsebody += QStringLiteral("

      \n
      Spec Marker
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.specMarker()); + responsebody += QStringLiteral("

      \n
      Groups
      "); + responsebody += THttpUtility::htmlEscape(annexMeta.groups()); + responsebody += QStringLiteral("

      \n\n"); + responsebody += QVariant(linkTo("Edit", urla("save", annexMeta.id()))).toString(); + responsebody += QStringLiteral(" |\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(annexmeta_showView) + +#include "annexmeta_showView.moc" diff --git a/views/_src/appvars_createView.cpp b/views/_src/appvars_createView.cpp new file mode 100644 index 0000000..c0910c8 --- /dev/null +++ b/views/_src/appvars_createView.cpp @@ -0,0 +1,53 @@ +#include +#include +#include "appvars.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT appvars_createView : public TActionView +{ + Q_OBJECT +public: + appvars_createView() : TActionView() { } + QString toString(); +}; + +QString appvars_createView::toString() +{ + responsebody.reserve(3937); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, appVars); + tfetch(QVariantMap, objects); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n\n\n
      \n\n« zurück\n\n
      \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(appvars_createView) + +#include "appvars_createView.moc" diff --git a/views/_src/appvars_indexView.cpp b/views/_src/appvars_indexView.cpp new file mode 100644 index 0000000..fb20934 --- /dev/null +++ b/views/_src/appvars_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "appvars.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT appvars_indexView : public TActionView +{ + Q_OBJECT +public: + appvars_indexView() : TActionView() { } + QString toString(); +}; + +QString appvars_indexView::toString() +{ + responsebody.reserve(2800); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      Variablen die bei der Generierung der Dokumente eingesetzt werden.
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n\n

      Handhabung:
      im Baustein die Variable in 2 Klammern (curly brackets) einschliessen.

      integrierte Variablen:

      • {{YYYY}} : Jahreszahl
      • {{MM}} : Monatszahl

      \n \n
      \n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(appvars_indexView) + +#include "appvars_indexView.moc" diff --git a/views/_src/appvars_list_allView.cpp b/views/_src/appvars_list_allView.cpp new file mode 100644 index 0000000..6f983f3 --- /dev/null +++ b/views/_src/appvars_list_allView.cpp @@ -0,0 +1,64 @@ +#include +#include +#include "appvars.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT appvars_list_allView : public TActionView +{ + Q_OBJECT +public: + appvars_list_allView() : TActionView() { } + QString toString(); +}; + +QString appvars_list_allView::toString() +{ + responsebody.reserve(5377); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      Variablen die bei der Generierung der Dokumente eingesetzt werden.
      \n\n

      "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n

      Handhabung:
      im Baustein die Variable in 2 Klammern (curly brackets) einschliessen.

      integrierte Variablen:

      • {{YYYY}} : Jahreszahl
      • {{MM}} : Monatszahl

      \n\n
      \n\n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, appVarsList); + for (const auto &i : appVarsList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
      IDStd TypeStd AttrStd Val DeStd Val EnActiveBaustein
      "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.stdType()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.stdAttr()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.stdValDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.stdValEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("\n    \n    \n \n
      \n\n
      \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(appvars_list_allView) + +#include "appvars_list_allView.moc" diff --git a/views/_src/appvars_saveView.cpp b/views/_src/appvars_saveView.cpp new file mode 100644 index 0000000..332bf48 --- /dev/null +++ b/views/_src/appvars_saveView.cpp @@ -0,0 +1,62 @@ +#include +#include +#include "appvars.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT appvars_saveView : public TActionView +{ + Q_OBJECT +public: + appvars_saveView() : TActionView() { } + QString toString(); +}; + +QString appvars_saveView::toString() +{ + responsebody.reserve(5356); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, appVars); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", appVars["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n"); + responsebody += QVariant(formTag(urla("save", appVars["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n\n\n\n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", appVars["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n
      \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(appvars_saveView) + +#include "appvars_saveView.moc" diff --git a/views/_src/appvars_showView.cpp b/views/_src/appvars_showView.cpp new file mode 100644 index 0000000..e42de4e --- /dev/null +++ b/views/_src/appvars_showView.cpp @@ -0,0 +1,60 @@ +#include +#include +#include "appvars.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT appvars_showView : public TActionView +{ + Q_OBJECT +public: + appvars_showView() : TActionView() { } + QString toString(); +}; + +QString appvars_showView::toString() +{ + responsebody.reserve(5276); + responsebody += QStringLiteral("\n"); + tfetch(AppVars, appVars); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", appVars.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
      \n\n
      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n
      \n\n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", appVars.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n
      \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(appvars_showView) + +#include "appvars_showView.moc" diff --git a/views/_src/catclasses_createView.cpp b/views/_src/catclasses_createView.cpp new file mode 100644 index 0000000..9cd6947 --- /dev/null +++ b/views/_src/catclasses_createView.cpp @@ -0,0 +1,64 @@ +#include +#include +#include "catclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT catclasses_createView : public TActionView +{ + Q_OBJECT +public: + catclasses_createView() : TActionView() { } + QString toString(); +}; + +QString catclasses_createView::toString() +{ + responsebody.reserve(5361); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, catClasses); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n
      \n\n\n
      \n Anzeige\n« zurück\n\n
      \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(catclasses_createView) + +#include "catclasses_createView.moc" diff --git a/views/_src/catclasses_indexView.cpp b/views/_src/catclasses_indexView.cpp new file mode 100644 index 0000000..dafb420 --- /dev/null +++ b/views/_src/catclasses_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "catclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT catclasses_indexView : public TActionView +{ + Q_OBJECT +public: + catclasses_indexView() : TActionView() { } + QString toString(); +}; + +QString catclasses_indexView::toString() +{ + responsebody.reserve(2527); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n\n
      \n \n
      \n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(catclasses_indexView) + +#include "catclasses_indexView.moc" diff --git a/views/_src/catclasses_list_allView.cpp b/views/_src/catclasses_list_allView.cpp new file mode 100644 index 0000000..ce491d6 --- /dev/null +++ b/views/_src/catclasses_list_allView.cpp @@ -0,0 +1,74 @@ +#include +#include +#include "catclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT catclasses_list_allView : public TActionView +{ + Q_OBJECT +public: + catclasses_list_allView() : TActionView() { } + QString toString(); +}; + +QString catclasses_list_allView::toString() +{ + responsebody.reserve(5772); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n
      \n\n
      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, catClassesList); + for (const auto &i : catClassesList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
      IDCat Lname DeCat Sname DeDesc DeCat Lname EnCat Sname EnDesc EnClass TypeGroupsSortActiveBaustein
      "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.catLnameDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.catSnameDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.catLnameEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.catSnameEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.classType()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.groups()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.sort()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("\n    \n    \n \n
      \n\n
      \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(catclasses_list_allView) + +#include "catclasses_list_allView.moc" diff --git a/views/_src/catclasses_saveView.cpp b/views/_src/catclasses_saveView.cpp new file mode 100644 index 0000000..f57a457 --- /dev/null +++ b/views/_src/catclasses_saveView.cpp @@ -0,0 +1,72 @@ +#include +#include +#include "catclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT catclasses_saveView : public TActionView +{ + Q_OBJECT +public: + catclasses_saveView() : TActionView() { } + QString toString(); +}; + +QString catclasses_saveView::toString() +{ + responsebody.reserve(6688); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, catClasses); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", catClasses["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n"); + responsebody += QVariant(formTag(urla("save", catClasses["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n
      \n\n\n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", catClasses["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n
      \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(catclasses_saveView) + +#include "catclasses_saveView.moc" diff --git a/views/_src/catclasses_showView.cpp b/views/_src/catclasses_showView.cpp new file mode 100644 index 0000000..dbbf019 --- /dev/null +++ b/views/_src/catclasses_showView.cpp @@ -0,0 +1,68 @@ +#include +#include +#include "catclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT catclasses_showView : public TActionView +{ + Q_OBJECT +public: + catclasses_showView() : TActionView() { } + QString toString(); +}; + +QString catclasses_showView::toString() +{ + responsebody.reserve(6273); + responsebody += QStringLiteral("\n"); + tfetch(CatClasses, catClasses); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", catClasses.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
      \n\n
      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n
      \n\n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", catClasses.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n« zurück\n\n
      \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(catclasses_showView) + +#include "catclasses_showView.moc" diff --git a/views/_src/glossar_createView.cpp b/views/_src/glossar_createView.cpp new file mode 100644 index 0000000..71e09d0 --- /dev/null +++ b/views/_src/glossar_createView.cpp @@ -0,0 +1,56 @@ +#include +#include +#include "glossar.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT glossar_createView : public TActionView +{ + Q_OBJECT +public: + glossar_createView() : TActionView() { } + QString toString(); +}; + +QString glossar_createView::toString() +{ + responsebody.reserve(5023); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, glossar); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
      \n \n
      \n\n
      \n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += tr("\n
      \n

      \n \n

      \n
      \n \n
      \n
      \n \n
      \n\n
      \n \n
      \n
      \n \n
      \n\n

      \n \n

      \n

      \n \n

      \n
      \n\n
      \n
      \n« zurück\n\n
      \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(glossar_createView) + +#include "glossar_createView.moc" diff --git a/views/_src/glossar_indexView.cpp b/views/_src/glossar_indexView.cpp new file mode 100644 index 0000000..5c2ae61 --- /dev/null +++ b/views/_src/glossar_indexView.cpp @@ -0,0 +1,64 @@ +#include +#include +#include "glossar.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT glossar_indexView : public TActionView +{ + Q_OBJECT +public: + glossar_indexView() : TActionView() { } + QString toString(); +}; + +QString glossar_indexView::toString() +{ + responsebody.reserve(4735); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n\n
      \n

      Einträge: "); + tehex(glossar_count); + responsebody += QStringLiteral("

      \n

      deutsch: "); + tehex(de_terms); + responsebody += QStringLiteral("

      \n

      englisch: "); + tehex(en_terms); + responsebody += QStringLiteral("

      \n
      \n
      \n\n
      \n\n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, glossarList); + for (const auto &i : glossarList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
      AcronymTerm DeTerm EnDesc DeDesc EnActive
      "); + responsebody += THttpUtility::htmlEscape(i.acronym()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.termDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.termEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("
      \n\n
      \n\n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(glossar_indexView) + +#include "glossar_indexView.moc" diff --git a/views/_src/glossar_list_allElectronView.cpp b/views/_src/glossar_list_allElectronView.cpp new file mode 100644 index 0000000..e67efc0 --- /dev/null +++ b/views/_src/glossar_list_allElectronView.cpp @@ -0,0 +1,48 @@ +#include +#include +#include "glossar.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT glossar_list_allElectronView : public TActionView +{ + Q_OBJECT +public: + glossar_list_allElectronView() : TActionView() { } + QString toString(); +}; + +QString glossar_list_allElectronView::toString() +{ + responsebody.reserve(3051); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n

      Glossar

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n
      \n\n
      \n\n \n \n \n \n \n \n \n"); + tfetch(QList, glossarList); + for (const auto &i : glossarList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
      AcronymTerm DeTerm EnDesc DeDesc En
      "); + responsebody += THttpUtility::htmlEscape(i.acronym()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.termDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.termEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descEn()); + responsebody += QStringLiteral("
      \n\n
      \n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(glossar_list_allElectronView) + +#include "glossar_list_allElectronView.moc" diff --git a/views/_src/glossar_list_allView.cpp b/views/_src/glossar_list_allView.cpp new file mode 100644 index 0000000..62825ac --- /dev/null +++ b/views/_src/glossar_list_allView.cpp @@ -0,0 +1,66 @@ +#include +#include +#include "glossar.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT glossar_list_allView : public TActionView +{ + Q_OBJECT +public: + glossar_list_allView() : TActionView() { } + QString toString(); +}; + +QString glossar_list_allView::toString() +{ + responsebody.reserve(5308); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n
      \n\n
      \n\n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, glossarList); + for (const auto &i : glossarList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
      IDAcronymTerm DeTerm EnDesc DeDesc EnActiveBaustein
      "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.acronym()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.termDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.termEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("\n \n \n \n
      \n\n
      \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(glossar_list_allView) + +#include "glossar_list_allView.moc" diff --git a/views/_src/glossar_saveView.cpp b/views/_src/glossar_saveView.cpp new file mode 100644 index 0000000..a5a10b0 --- /dev/null +++ b/views/_src/glossar_saveView.cpp @@ -0,0 +1,68 @@ +#include +#include +#include "glossar.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT glossar_saveView : public TActionView +{ + Q_OBJECT +public: + glossar_saveView() : TActionView() { } + QString toString(); +}; + +QString glossar_saveView::toString() +{ + responsebody.reserve(6731); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, glossar); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
      \n \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", glossar["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n
      \n"); + responsebody += QVariant(formTag(urla("save", glossar["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
      \n
      \n \n
      \n
      \n \n
      \n\n
      \n \n
      \n
      \n \n
      \n\n
      \n \n
      \n\n
      \n \n
      \n\n

      \n \n

      \n

      \n \n

      \n
      \n\n
      \n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", glossar["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n
      \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(glossar_saveView) + +#include "glossar_saveView.moc" diff --git a/views/_src/glossar_showView.cpp b/views/_src/glossar_showView.cpp new file mode 100644 index 0000000..adff7ce --- /dev/null +++ b/views/_src/glossar_showView.cpp @@ -0,0 +1,64 @@ +#include +#include +#include "glossar.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT glossar_showView : public TActionView +{ + Q_OBJECT +public: + glossar_showView() : TActionView() { } + QString toString(); +}; + +QString glossar_showView::toString() +{ + responsebody.reserve(6194); + responsebody += QStringLiteral("\n"); + tfetch(Glossar, glossar); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + responsebody += QStringLiteral(""); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + responsebody += QStringLiteral(""); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", glossar.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
      \n\n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n\n

      \n \n

      \n
      \n
      \n\n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", glossar.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n
      \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(glossar_showView) + +#include "glossar_showView.moc" diff --git a/views/_src/itisgroups_createView.cpp b/views/_src/itisgroups_createView.cpp new file mode 100644 index 0000000..e87246c --- /dev/null +++ b/views/_src/itisgroups_createView.cpp @@ -0,0 +1,50 @@ +#include +#include +#include "itisgroups.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisgroups_createView : public TActionView +{ + Q_OBJECT +public: + itisgroups_createView() : TActionView() { } + QString toString(); +}; + +QString itisgroups_createView::toString() +{ + responsebody.reserve(3720); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, itisGroups); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n \n\n\n
      \n Anzeige\n« zurück\n\n
      \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisgroups_createView) + +#include "itisgroups_createView.moc" diff --git a/views/_src/itisgroups_indexView.cpp b/views/_src/itisgroups_indexView.cpp new file mode 100644 index 0000000..25dc2b8 --- /dev/null +++ b/views/_src/itisgroups_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "itisgroups.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisgroups_indexView : public TActionView +{ + Q_OBJECT +public: + itisgroups_indexView() : TActionView() { } + QString toString(); +}; + +QString itisgroups_indexView::toString() +{ + responsebody.reserve(2529); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n\n
      \n \n
      \n\n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisgroups_indexView) + +#include "itisgroups_indexView.moc" diff --git a/views/_src/itisgroups_list_allView.cpp b/views/_src/itisgroups_list_allView.cpp new file mode 100644 index 0000000..b60ad95 --- /dev/null +++ b/views/_src/itisgroups_list_allView.cpp @@ -0,0 +1,58 @@ +#include +#include +#include "itisgroups.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisgroups_list_allView : public TActionView +{ + Q_OBJECT +public: + itisgroups_list_allView() : TActionView() { } + QString toString(); +}; + +QString itisgroups_list_allView::toString() +{ + responsebody.reserve(4749); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n
      \n\n
      \n\n \n \n \n \n \n \n \n"); + tfetch(QList, itisGroupsList); + for (const auto &i : itisGroupsList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
      IDGroupnameGroupdescActiveBaustein
      "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.groupname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.groupdesc()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("\n    \n    \n \n
      \n\n
      \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisgroups_list_allView) + +#include "itisgroups_list_allView.moc" diff --git a/views/_src/itisgroups_saveView.cpp b/views/_src/itisgroups_saveView.cpp new file mode 100644 index 0000000..0268618 --- /dev/null +++ b/views/_src/itisgroups_saveView.cpp @@ -0,0 +1,54 @@ +#include +#include +#include "itisgroups.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisgroups_saveView : public TActionView +{ + Q_OBJECT +public: + itisgroups_saveView() : TActionView() { } + QString toString(); +}; + +QString itisgroups_saveView::toString() +{ + responsebody.reserve(4713); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, itisGroups); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", itisGroups["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n zurück\n

      \n\n\n"); + responsebody += QVariant(formTag(urla("save", itisGroups["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n\n\n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", itisGroups["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n zurück\n\n
      \n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisgroups_saveView) + +#include "itisgroups_saveView.moc" diff --git a/views/_src/itisgroups_showView.cpp b/views/_src/itisgroups_showView.cpp new file mode 100644 index 0000000..883f13e --- /dev/null +++ b/views/_src/itisgroups_showView.cpp @@ -0,0 +1,56 @@ +#include +#include +#include "itisgroups.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisgroups_showView : public TActionView +{ + Q_OBJECT +public: + itisgroups_showView() : TActionView() { } + QString toString(); +}; + +QString itisgroups_showView::toString() +{ + responsebody.reserve(4764); + responsebody += QStringLiteral("\n"); + tfetch(ItisGroups, itisGroups); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n
      \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", itisGroups.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
      \n\n
      \n

      \n

      \n

      \n

      \n
      \n\n
      \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", itisGroups.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n
      \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisgroups_showView) + +#include "itisgroups_showView.moc" diff --git a/views/_src/itisnews_createView.cpp b/views/_src/itisnews_createView.cpp new file mode 100644 index 0000000..8e36c29 --- /dev/null +++ b/views/_src/itisnews_createView.cpp @@ -0,0 +1,66 @@ +#include +#include +#include "itisnews.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisnews_createView : public TActionView +{ + Q_OBJECT +public: + itisnews_createView() : TActionView() { } + QString toString(); +}; + +QString itisnews_createView::toString() +{ + responsebody.reserve(7498); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, itisNews); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
      \n

      ITIS-API::Admin-Portal

      \n
      \n\n name()); + responsebody += QStringLiteral("\">\n\n

      "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n \n
      \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n \n

      \n

      \n

      \n \n

      \n\n\n
      \n\n« zurück\n\n
      \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisnews_createView) + +#include "itisnews_createView.moc" diff --git a/views/_src/itisnews_indexElectronView.cpp b/views/_src/itisnews_indexElectronView.cpp new file mode 100644 index 0000000..973d629 --- /dev/null +++ b/views/_src/itisnews_indexElectronView.cpp @@ -0,0 +1,33 @@ +#include +#include +#include "itisnews.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisnews_indexElectronView : public TActionView +{ + Q_OBJECT +public: + itisnews_indexElectronView() : TActionView() { } + QString toString(); +}; + +QString itisnews_indexElectronView::toString() +{ + responsebody.reserve(2211); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n\n\n\n\n\n

      IT-IS Standards News

      \n
      \n\n

      "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

      "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

      \n\n
      \n\n
      \n\n
      \n\n
      \n

      IT-IS Standards News

      \n
        \n
        \n\n
        \n

        IT-IS Product News

        \n
          \n
          \n \n
          \n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisnews_indexElectronView) + +#include "itisnews_indexElectronView.moc" diff --git a/views/_src/itisnews_indexView.cpp b/views/_src/itisnews_indexView.cpp new file mode 100644 index 0000000..68059dd --- /dev/null +++ b/views/_src/itisnews_indexView.cpp @@ -0,0 +1,37 @@ +#include +#include +#include "itisnews.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisnews_indexView : public TActionView +{ + Q_OBJECT +public: + itisnews_indexView() : TActionView() { } + QString toString(); +}; + +QString itisnews_indexView::toString() +{ + responsebody.reserve(3115); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n\n\n\n\n\n \n\n
          \n

          ITIS-API::Admin-Portal

          \n
          \n\n name()); + responsebody += QStringLiteral("\">\n\n

          "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

          \n
          \n\n

          "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

          "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

          \n\n
          \n\n
          \n\n
          \n\n
          \n

          Admin News

          \n
            \n
            \n\n
            \n

            IT-IS Standards News

            \n
              \n
              \n\n
              \n

              IT-IS Product News

              \n
                \n
                \n \n
                \n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisnews_indexView) + +#include "itisnews_indexView.moc" diff --git a/views/_src/itisnews_list_allView.cpp b/views/_src/itisnews_list_allView.cpp new file mode 100644 index 0000000..b88b392 --- /dev/null +++ b/views/_src/itisnews_list_allView.cpp @@ -0,0 +1,78 @@ +#include +#include +#include "itisnews.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisnews_list_allView : public TActionView +{ + Q_OBJECT +public: + itisnews_list_allView() : TActionView() { } + QString toString(); +}; + +QString itisnews_list_allView::toString() +{ + responsebody.reserve(6560); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n
                \n\n
                \n\n \n \n \n \n \n\n \n\n \n\n \n \n \n \n \n \n \n"); + tfetch(QList, itisNewsList); + for (const auto &i : itisNewsList) { + responsebody += QStringLiteral(" \n \n \n \n \n\n \n\n \n\n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                IDNews TypeNews Type SubNews Title DeNews Desc DeNews Text DeNews PrioAuthorNews CreatedNews Valid StartNews Valid EndBaustein
                "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.newsType()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.newsTypeSub()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.newsTitleDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.newsDescDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.newsTextDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.newsPrio()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.author()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.newsCreated()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.newsValidStart()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.newsValidEnd()); + responsebody += QStringLiteral("\n \n \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisnews_list_allView) + +#include "itisnews_list_allView.moc" diff --git a/views/_src/itisnews_saveView.cpp b/views/_src/itisnews_saveView.cpp new file mode 100644 index 0000000..bf9092c --- /dev/null +++ b/views/_src/itisnews_saveView.cpp @@ -0,0 +1,80 @@ +#include +#include +#include "itisnews.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisnews_saveView : public TActionView +{ + Q_OBJECT +public: + itisnews_saveView() : TActionView() { } + QString toString(); +}; + +QString itisnews_saveView::toString() +{ + responsebody.reserve(7470); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, itisNews); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(""); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(""); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", itisNews["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n"); + responsebody += QVariant(formTag(urla("save", itisNews["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", itisNews["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisnews_saveView) + +#include "itisnews_saveView.moc" diff --git a/views/_src/itisnews_showView.cpp b/views/_src/itisnews_showView.cpp new file mode 100644 index 0000000..64b4438 --- /dev/null +++ b/views/_src/itisnews_showView.cpp @@ -0,0 +1,76 @@ +#include +#include +#include "itisnews.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT itisnews_showView : public TActionView +{ + Q_OBJECT +public: + itisnews_showView() : TActionView() { } + QString toString(); +}; + +QString itisnews_showView::toString() +{ + responsebody.reserve(7154); + responsebody += QStringLiteral("\n"); + tfetch(ItisNews, itisNews); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(""); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(""); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", itisNews.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
                \n\n
                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n
                \n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", itisNews.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(itisnews_showView) + +#include "itisnews_showView.moc" diff --git a/views/_src/lenkinfo_createView.cpp b/views/_src/lenkinfo_createView.cpp new file mode 100644 index 0000000..5b1bc0d --- /dev/null +++ b/views/_src/lenkinfo_createView.cpp @@ -0,0 +1,78 @@ +#include +#include +#include "lenkinfo.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT lenkinfo_createView : public TActionView +{ + Q_OBJECT +public: + lenkinfo_createView() : TActionView() { } + QString toString(); +}; + +QString lenkinfo_createView::toString() +{ + responsebody.reserve(8770); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, lenkinfo); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n\n \n\n \n \n \n \n\n\n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n \n
                \n\n
                \n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n

                \n \n

                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n

                 

                \n

                \n \n

                \n
                \n\n\n
                \n
                \n« zurück\n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(lenkinfo_createView) + +#include "lenkinfo_createView.moc" diff --git a/views/_src/lenkinfo_indexView.cpp b/views/_src/lenkinfo_indexView.cpp new file mode 100644 index 0000000..ef11715 --- /dev/null +++ b/views/_src/lenkinfo_indexView.cpp @@ -0,0 +1,41 @@ +#include +#include +#include "lenkinfo.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT lenkinfo_indexView : public TActionView +{ + Q_OBJECT +public: + lenkinfo_indexView() : TActionView() { } + QString toString(); +}; + +QString lenkinfo_indexView::toString() +{ + responsebody.reserve(2991); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                Lenkungsinfos
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n
                \n
                \n \n
                \n
                \n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(lenkinfo_indexView) + +#include "lenkinfo_indexView.moc" diff --git a/views/_src/lenkinfo_list_allView.cpp b/views/_src/lenkinfo_list_allView.cpp new file mode 100644 index 0000000..f42d656 --- /dev/null +++ b/views/_src/lenkinfo_list_allView.cpp @@ -0,0 +1,90 @@ +#include +#include +#include "lenkinfo.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT lenkinfo_list_allView : public TActionView +{ + Q_OBJECT +public: + lenkinfo_list_allView() : TActionView() { } + QString toString(); +}; + +QString lenkinfo_list_allView::toString() +{ + responsebody.reserve(8014); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                Ungefilterte Auflistung aller Bausteine.
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n
                \n\n
                \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, lenkinfoList); + for (const auto &i : lenkinfoList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                IDSpec ObjSpec TitleAc ClassPc ClassCountryLangLenk VersionLenk StatusLenk Valid StartdateLenk ContentBaustein
                "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specObj()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specTitle()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.acClass()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.pcClass()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.country()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lang()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lenkVersion()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lenkStatus()); + responsebody += QStringLiteral("\n \n \n \n \n
                \n\n
                \n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(lenkinfo_list_allView) + +#include "lenkinfo_list_allView.moc" diff --git a/views/_src/lenkinfo_saveView.cpp b/views/_src/lenkinfo_saveView.cpp new file mode 100644 index 0000000..044a905 --- /dev/null +++ b/views/_src/lenkinfo_saveView.cpp @@ -0,0 +1,96 @@ +#include +#include +#include "lenkinfo.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT lenkinfo_saveView : public TActionView +{ + Q_OBJECT +public: + lenkinfo_saveView() : TActionView() { } + QString toString(); +}; + +QString lenkinfo_saveView::toString() +{ + responsebody.reserve(11557); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, lenkinfo); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n\n \n\n \n \n \n \n\n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", lenkinfo["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n
                \n\n"); + responsebody += QVariant(formTag(urla("save", lenkinfo["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
                \n

                \n \n

                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n

                \n \n

                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n

                 

                \n

                \n \n

                \n\n\n\n
                \n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", lenkinfo["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n
                \n\n\n\n\n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(lenkinfo_saveView) + +#include "lenkinfo_saveView.moc" diff --git a/views/_src/lenkinfo_showView.cpp b/views/_src/lenkinfo_showView.cpp new file mode 100644 index 0000000..12c6ce5 --- /dev/null +++ b/views/_src/lenkinfo_showView.cpp @@ -0,0 +1,94 @@ +#include +#include +#include "lenkinfo.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT lenkinfo_showView : public TActionView +{ + Q_OBJECT +public: + lenkinfo_showView() : TActionView() { } + QString toString(); +}; + +QString lenkinfo_showView::toString() +{ + responsebody.reserve(11277); + responsebody += QStringLiteral("\n"); + tfetch(Lenkinfo, lenkinfo); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n\n \n\n \n \n \n \n\n\n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", lenkinfo.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
                \n\n
                \n
                \n

                \n \n

                \n \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n

                \n \n

                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", lenkinfo.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n\n
                \n\n\n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(lenkinfo_showView) + +#include "lenkinfo_showView.moc" diff --git a/views/_src/mailer_crUserPwdView.cpp b/views/_src/mailer_crUserPwdView.cpp new file mode 100644 index 0000000..a253287 --- /dev/null +++ b/views/_src/mailer_crUserPwdView.cpp @@ -0,0 +1,27 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT mailer_crUserPwdView : public TActionView +{ + Q_OBJECT +public: + mailer_crUserPwdView() : TActionView() { } + QString toString(); +}; + +QString mailer_crUserPwdView::toString() +{ + responsebody.reserve(346); + responsebody += QStringLiteral("Subject: ITIS Account\nTo: "); + techoex(username); + responsebody += QStringLiteral("\nFrom: zheng.bote@googlemail.com\n\nHello,\nyour initial password (key sensitive): "); + techoex(userpwd); + responsebody += QStringLiteral("\nPlease change your initial password asap.\nHave a nice day,\nZHENG Robert\n \n"); + + return responsebody; +} + +T_DEFINE_VIEW(mailer_crUserPwdView) + +#include "mailer_crUserPwdView.moc" diff --git a/views/_src/mailer_crUserView.cpp b/views/_src/mailer_crUserView.cpp new file mode 100644 index 0000000..59e25e2 --- /dev/null +++ b/views/_src/mailer_crUserView.cpp @@ -0,0 +1,27 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT mailer_crUserView : public TActionView +{ + Q_OBJECT +public: + mailer_crUserView() : TActionView() { } + QString toString(); +}; + +QString mailer_crUserView::toString() +{ + responsebody.reserve(380); + responsebody += QStringLiteral("Subject: ITIS Account\nTo: "); + techoex(username); + responsebody += QStringLiteral("\nFrom: zheng.bote@googlemail.com\n\nHello,\nyour account "); + techoex(username); + responsebody += QStringLiteral(" for itis.hitchhiker.tech has been created.\nAn additional eMail with your password will coming soon.\nHave a nice day,\nZHENG Robert\n \n"); + + return responsebody; +} + +T_DEFINE_VIEW(mailer_crUserView) + +#include "mailer_crUserView.moc" diff --git a/views/_src/mailer_infoUserPwdView.cpp b/views/_src/mailer_infoUserPwdView.cpp new file mode 100644 index 0000000..58e07b9 --- /dev/null +++ b/views/_src/mailer_infoUserPwdView.cpp @@ -0,0 +1,25 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT mailer_infoUserPwdView : public TActionView +{ + Q_OBJECT +public: + mailer_infoUserPwdView() : TActionView() { } + QString toString(); +}; + +QString mailer_infoUserPwdView::toString() +{ + responsebody.reserve(320); + responsebody += QStringLiteral("Subject: ITIS Account\nTo: "); + techoex(username); + responsebody += QStringLiteral("\nFrom: zheng.bote@googlemail.com\n\nHello,\nyour password has been changed.\nIf you have not made this change, please report this security breach immediately.\nHave a nice day,\nZHENG Robert\n \n"); + + return responsebody; +} + +T_DEFINE_VIEW(mailer_infoUserPwdView) + +#include "mailer_infoUserPwdView.moc" diff --git a/views/_src/mailer_mailView.cpp b/views/_src/mailer_mailView.cpp new file mode 100644 index 0000000..81d4568 --- /dev/null +++ b/views/_src/mailer_mailView.cpp @@ -0,0 +1,25 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT mailer_mailView : public TActionView +{ + Q_OBJECT +public: + mailer_mailView() : TActionView() { } + QString toString(); +}; + +QString mailer_mailView::toString() +{ + responsebody.reserve(179); + responsebody += QStringLiteral("Subject: Test Mail\nTo: "); + techoex(to); + responsebody += QStringLiteral("\nFrom: zheng.bote@googlemail.com\n\nHi,\nThis is a test mail.\n"); + + return responsebody; +} + +T_DEFINE_VIEW(mailer_mailView) + +#include "mailer_mailView.moc" diff --git a/views/_src/mailer_preleaseInfoView.cpp b/views/_src/mailer_preleaseInfoView.cpp new file mode 100644 index 0000000..a06d2fe --- /dev/null +++ b/views/_src/mailer_preleaseInfoView.cpp @@ -0,0 +1,27 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT mailer_preleaseInfoView : public TActionView +{ + Q_OBJECT +public: + mailer_preleaseInfoView() : TActionView() { } + QString toString(); +}; + +QString mailer_preleaseInfoView::toString() +{ + responsebody.reserve(360); + responsebody += QStringLiteral("Subject: ITIS Pre-Release\nTo: zheng.bote@googlemail.com\nFrom: zheng.bote@googlemail.com\n\nHello,\n"); + techoex(username); + responsebody += QStringLiteral(" has sent a pre-release request with id: "); + techoex(id); + responsebody += QStringLiteral("\nPlease check and review asap.\nHave a nice day,\nZHENG Robert\n \n"); + + return responsebody; +} + +T_DEFINE_VIEW(mailer_preleaseInfoView) + +#include "mailer_preleaseInfoView.moc" diff --git a/views/_src/mailer_regUserAdmInfoView.cpp b/views/_src/mailer_regUserAdmInfoView.cpp new file mode 100644 index 0000000..6e9a872 --- /dev/null +++ b/views/_src/mailer_regUserAdmInfoView.cpp @@ -0,0 +1,25 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT mailer_regUserAdmInfoView : public TActionView +{ + Q_OBJECT +public: + mailer_regUserAdmInfoView() : TActionView() { } + QString toString(); +}; + +QString mailer_regUserAdmInfoView::toString() +{ + responsebody.reserve(313); + responsebody += QStringLiteral("Subject: ITIS Account\nTo: zheng.bote@googlemail.com\nFrom: zheng.bote@googlemail.com\n\nHello,\nan User Registration request for you: "); + techoex(username); + responsebody += QStringLiteral(" for itis.hitchhiker.tech has been created.\nHave a nice day,\nZHENG Robert\n \n"); + + return responsebody; +} + +T_DEFINE_VIEW(mailer_regUserAdmInfoView) + +#include "mailer_regUserAdmInfoView.moc" diff --git a/views/_src/objects_createView.cpp b/views/_src/objects_createView.cpp new file mode 100644 index 0000000..4ef2ad9 --- /dev/null +++ b/views/_src/objects_createView.cpp @@ -0,0 +1,58 @@ +#include +#include +#include "objects.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT objects_createView : public TActionView +{ + Q_OBJECT +public: + objects_createView() : TActionView() { } + QString toString(); +}; + +QString objects_createView::toString() +{ + responsebody.reserve(4553); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, objects); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n
                \n« zurück\n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(objects_createView) + +#include "objects_createView.moc" diff --git a/views/_src/objects_indexView.cpp b/views/_src/objects_indexView.cpp new file mode 100644 index 0000000..e7b5411 --- /dev/null +++ b/views/_src/objects_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "objects.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT objects_indexView : public TActionView +{ + Q_OBJECT +public: + objects_indexView() : TActionView() { } + QString toString(); +}; + +QString objects_indexView::toString() +{ + responsebody.reserve(2529); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n\n
                \n \n
                \n\n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(objects_indexView) + +#include "objects_indexView.moc" diff --git a/views/_src/objects_list_allView.cpp b/views/_src/objects_list_allView.cpp new file mode 100644 index 0000000..e44c95f --- /dev/null +++ b/views/_src/objects_list_allView.cpp @@ -0,0 +1,68 @@ +#include +#include +#include "objects.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT objects_list_allView : public TActionView +{ + Q_OBJECT +public: + objects_list_allView() : TActionView() { } + QString toString(); +}; + +QString objects_list_allView::toString() +{ + responsebody.reserve(5393); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n
                \n\n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, objectsList); + for (const auto &i : objectsList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                IDObj SnameObj Lname DeDesc DeObj Lname EnDesc EnSortActiveGroupsBaustein
                "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.objSname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.objLnameDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.objLnameEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.sort()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.groups()); + responsebody += QStringLiteral("\n    \n    \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(objects_list_allView) + +#include "objects_list_allView.moc" diff --git a/views/_src/objects_saveView.cpp b/views/_src/objects_saveView.cpp new file mode 100644 index 0000000..83ff017 --- /dev/null +++ b/views/_src/objects_saveView.cpp @@ -0,0 +1,68 @@ +#include +#include +#include "objects.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT objects_saveView : public TActionView +{ + Q_OBJECT +public: + objects_saveView() : TActionView() { } + QString toString(); +}; + +QString objects_saveView::toString() +{ + responsebody.reserve(6098); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, objects); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", objects["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n"); + responsebody += QVariant(formTag(urla("save", objects["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n
                \n\n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", objects["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(objects_saveView) + +#include "objects_saveView.moc" diff --git a/views/_src/objects_showView.cpp b/views/_src/objects_showView.cpp new file mode 100644 index 0000000..635de12 --- /dev/null +++ b/views/_src/objects_showView.cpp @@ -0,0 +1,66 @@ +#include +#include +#include "objects.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT objects_showView : public TActionView +{ + Q_OBJECT +public: + objects_showView() : TActionView() { } + QString toString(); +}; + +QString objects_showView::toString() +{ + responsebody.reserve(5992); + responsebody += QStringLiteral("\n"); + tfetch(Objects, objects); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", objects.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
                \n\n
                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n
                \n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", objects.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n
                \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(objects_showView) + +#include "objects_showView.moc" diff --git a/views/_src/pcclasses_createView.cpp b/views/_src/pcclasses_createView.cpp new file mode 100644 index 0000000..976d2f5 --- /dev/null +++ b/views/_src/pcclasses_createView.cpp @@ -0,0 +1,53 @@ +#include +#include +#include "pcclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT pcclasses_createView : public TActionView +{ + Q_OBJECT +public: + pcclasses_createView() : TActionView() { } + QString toString(); +}; + +QString pcclasses_createView::toString() +{ + responsebody.reserve(3952); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, pcClasses); + tfetch(QVariantMap, acClasses); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n
                \n Anzeige\n« zurück\n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(pcclasses_createView) + +#include "pcclasses_createView.moc" diff --git a/views/_src/pcclasses_indexView.cpp b/views/_src/pcclasses_indexView.cpp new file mode 100644 index 0000000..e00148e --- /dev/null +++ b/views/_src/pcclasses_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "pcclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT pcclasses_indexView : public TActionView +{ + Q_OBJECT +public: + pcclasses_indexView() : TActionView() { } + QString toString(); +}; + +QString pcclasses_indexView::toString() +{ + responsebody.reserve(2736); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n
                \n\n
                \n\n \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(pcclasses_indexView) + +#include "pcclasses_indexView.moc" diff --git a/views/_src/pcclasses_list_allView.cpp b/views/_src/pcclasses_list_allView.cpp new file mode 100644 index 0000000..a4e43b9 --- /dev/null +++ b/views/_src/pcclasses_list_allView.cpp @@ -0,0 +1,60 @@ +#include +#include +#include "pcclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT pcclasses_list_allView : public TActionView +{ + Q_OBJECT +public: + pcclasses_list_allView() : TActionView() { } + QString toString(); +}; + +QString pcclasses_list_allView::toString() +{ + responsebody.reserve(4876); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n
                \n\n \n \n \n \n \n \n \n \n"); + tfetch(QList, pcClassesList); + for (const auto &i : pcClassesList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                IDObj SnamePc ClassClass TypeActiveBaustein
                "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.objSname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.pcClass()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.classType()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("\n    \n    \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(pcclasses_list_allView) + +#include "pcclasses_list_allView.moc" diff --git a/views/_src/pcclasses_saveView.cpp b/views/_src/pcclasses_saveView.cpp new file mode 100644 index 0000000..4322c0d --- /dev/null +++ b/views/_src/pcclasses_saveView.cpp @@ -0,0 +1,56 @@ +#include +#include +#include "pcclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT pcclasses_saveView : public TActionView +{ + Q_OBJECT +public: + pcclasses_saveView() : TActionView() { } + QString toString(); +}; + +QString pcclasses_saveView::toString() +{ + responsebody.reserve(4542); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, pcClasses); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n Anzeige\n« zurück\n\n"); + responsebody += QVariant(formTag(urla("save", pcClasses["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n
                \n\n Anzeige\n« zurück\n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(pcclasses_saveView) + +#include "pcclasses_saveView.moc" diff --git a/views/_src/pcclasses_showView.cpp b/views/_src/pcclasses_showView.cpp new file mode 100644 index 0000000..0a94651 --- /dev/null +++ b/views/_src/pcclasses_showView.cpp @@ -0,0 +1,58 @@ +#include +#include +#include "pcclasses.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT pcclasses_showView : public TActionView +{ + Q_OBJECT +public: + pcclasses_showView() : TActionView() { } + QString toString(); +}; + +QString pcclasses_showView::toString() +{ + responsebody.reserve(4945); + responsebody += QStringLiteral("\n"); + tfetch(PcClasses, pcClasses); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", pcClasses.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
                \n\n
                \n

                \n

                \n

                \n

                \n

                \n
                \n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", pcClasses.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(pcclasses_showView) + +#include "pcclasses_showView.moc" diff --git a/views/_src/portaladmin_indexView.cpp b/views/_src/portaladmin_indexView.cpp new file mode 100644 index 0000000..528ffef --- /dev/null +++ b/views/_src/portaladmin_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "standardsdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT portaladmin_indexView : public TActionView +{ + Q_OBJECT +public: + portaladmin_indexView() : TActionView() { } + QString toString(); +}; + +QString portaladmin_indexView::toString() +{ + responsebody.reserve(2425); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n\n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n \n
                \n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(portaladmin_indexView) + +#include "portaladmin_indexView.moc" diff --git a/views/_src/releasemgmt_createView.cpp b/views/_src/releasemgmt_createView.cpp new file mode 100644 index 0000000..c8fea26 --- /dev/null +++ b/views/_src/releasemgmt_createView.cpp @@ -0,0 +1,80 @@ +#include +#include +#include "releasemgmt.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_createView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_createView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_createView::toString() +{ + responsebody.reserve(7136); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, releaseMgmt); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n\n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n
                \n\n
                \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n
                \n
                \n« zurück\n\n
                \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_createView) + +#include "releasemgmt_createView.moc" diff --git a/views/_src/releasemgmt_indexView.cpp b/views/_src/releasemgmt_indexView.cpp new file mode 100644 index 0000000..187ea21 --- /dev/null +++ b/views/_src/releasemgmt_indexView.cpp @@ -0,0 +1,41 @@ +#include +#include +#include "releasemgmt.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_indexView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_indexView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_indexView::toString() +{ + responsebody.reserve(4951); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n\n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += tr("\n\n\n
                \n\n
                \n

                Lifecycle und Release-Zyklen

                \n
                \n
                Bausteine- und Dokumenten- Lifecycle
                \n

                Einzelne Bausteine als auch Vorgabedokumente- und Anhänge haben einen Release-Status

                \n
                  \n
                • draft
                  Bausteine im Erstellungs- und Modifizierungsprozess
                • \n
                • pre-release
                  Bausteine im fortgeschrittenen Reifegrad werden innerhalb eines Vorgabedokumentes bzw. Anhangs auf den Status pre-released angehoben.
                • \n
                    \n
                  • pre-release review
                    Vorgabedokument bzw. Anhang wurde zum Review vorgelegt
                  • \n
                  \n
                • released
                  Vorgabedokument bzw. Anhang wurde nach der erfolgreichen Review-Abnahme und Freigabe veröffentlicht.
                • \n
                • expired
                  das Vorgabedokument bzw. Anhang wurde aus der Veröffentlichung zurückgezogen, ggf. durch eine neuere Version abgelöst.
                • \n
                \n
                \n
                \n
                Release-Zyklus
                \n

                Die Abkürzung CI/CD hat unterschiedliche Bedeutungen.

                \n
                  \n
                • „CI“: Continuous Integration\n
                  Build-Artefakte werden in einem versionskontrollierten Artefakt-Repository abgelegt.\n
                  ⇒ hier: Der Automatisierungsprozess für Baustein-Admins. Bei Anhebung eines Bausteins von \"draft\" auf \"pre-release\" werden diese gegengeprüft (review) und im Repository \"released\" zusammengeführt.\n
                • \n
                • „CD“: Continuous Delivery\n
                  Build-Artefakte oder Gesamt-Paket werden ausgeliefert.\n
                  ⇒ hier: Das Repository \"released\" wird öffentlich zugänglich (Online-Version HTML sowie PDF download) sowie zur weiteren Verbreitung bereitgestellt.\n
                • \n
                • „CD (CDD)\": Continuous Deployment\n
                  Optional, nicht immer erforderlich. Nach dem CD eines Gesamt-Paketes erfolgt die Installation bzw. Austausch der Produktiv-Umgebung. \n
                  ⇒ hier: die automatische Verteilung in angeschlossene Systeme wie z.B. Group DMS (Archivierung) sowie halbautomatische Verteilung ins B2B-Partnerportal. Bei BMW derzeit nicht vorgesehen.\n
                • \n
                \n
                \n
                \n
                \n\n
                \n\n
                \n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_indexView) + +#include "releasemgmt_indexView.moc" diff --git a/views/_src/releasemgmt_index_ciannexView.cpp b/views/_src/releasemgmt_index_ciannexView.cpp new file mode 100644 index 0000000..eef37fa --- /dev/null +++ b/views/_src/releasemgmt_index_ciannexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "releasemgmt.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_index_ciannexView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_index_ciannexView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_index_ciannexView::toString() +{ + responsebody.reserve(2602); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n\n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n
                \n\n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_index_ciannexView) + +#include "releasemgmt_index_ciannexView.moc" diff --git a/views/_src/releasemgmt_listAllAnnexCdView.cpp b/views/_src/releasemgmt_listAllAnnexCdView.cpp new file mode 100644 index 0000000..99979f2 --- /dev/null +++ b/views/_src/releasemgmt_listAllAnnexCdView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "releasemgmt.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_listAllAnnexCdView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_listAllAnnexCdView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_listAllAnnexCdView::toString() +{ + responsebody.reserve(6314); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                Auflistung aller Annex Releases (CD).
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += tr("\n\n\n
                \n
                \n\n
                \n\n
                \n

                Annex CD

                \n
                \n
                \n\n
                \n

                Anhänge CD PDF's

                \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_listAllAnnexCdView) + +#include "releasemgmt_listAllAnnexCdView.moc" diff --git a/views/_src/releasemgmt_listAllAnnexCiView.cpp b/views/_src/releasemgmt_listAllAnnexCiView.cpp new file mode 100644 index 0000000..0ec3636 --- /dev/null +++ b/views/_src/releasemgmt_listAllAnnexCiView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "releasemgmt.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_listAllAnnexCiView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_listAllAnnexCiView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_listAllAnnexCiView::toString() +{ + responsebody.reserve(7565); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += tr("\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n\n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                Auflistung aller Annex Pre-Releases (CI).
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += tr("\n\n\n
                \n
                \n\n
                \n\n
                \n

                Anhänge CI

                \n
                \n
                \n\n
                \n

                Anhänge CI PDF's

                \n \n
                \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_listAllAnnexCiView) + +#include "releasemgmt_listAllAnnexCiView.moc" diff --git a/views/_src/releasemgmt_listAllStdCdView.cpp b/views/_src/releasemgmt_listAllStdCdView.cpp new file mode 100644 index 0000000..4d07be8 --- /dev/null +++ b/views/_src/releasemgmt_listAllStdCdView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "releasemgmt.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_listAllStdCdView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_listAllStdCdView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_listAllStdCdView::toString() +{ + responsebody.reserve(6349); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                Auflistung aller Vorgaben Releases (CD).
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n
                \n\n
                \n\n
                \n

                Standard CD

                \n
                \n
                \n\n
                \n

                Standard CD PDF's

                \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_listAllStdCdView) + +#include "releasemgmt_listAllStdCdView.moc" diff --git a/views/_src/releasemgmt_listAllStdCiView.cpp b/views/_src/releasemgmt_listAllStdCiView.cpp new file mode 100644 index 0000000..134c08b --- /dev/null +++ b/views/_src/releasemgmt_listAllStdCiView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "releasemgmt.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_listAllStdCiView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_listAllStdCiView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_listAllStdCiView::toString() +{ + responsebody.reserve(6334); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                Auflistung aller Vorgaben Pre-Releases (CI).
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n
                \n\n
                \n\n
                \n

                Standard CI

                \n
                \n
                \n\n
                \n

                Standard CI PDF's

                \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_listAllStdCiView) + +#include "releasemgmt_listAllStdCiView.moc" diff --git a/views/_src/releasemgmt_list_allView.cpp b/views/_src/releasemgmt_list_allView.cpp new file mode 100644 index 0000000..2ad15ec --- /dev/null +++ b/views/_src/releasemgmt_list_allView.cpp @@ -0,0 +1,90 @@ +#include +#include +#include "releasemgmt.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_list_allView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_list_allView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_list_allView::toString() +{ + responsebody.reserve(7455); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                Ungefilterte Auflistung aller Bausteine.
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n
                \n\n
                \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, releaseMgmtList); + for (const auto &i : releaseMgmtList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                IDObj SnameACPCCountryLangRel CreatorRelcreator DecisdateRel InspectorRelinspect DecisdateRel ApproverRelapprov DecisdateCI DateCD DateCDD DateBaustein
                "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.objSname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.acClasses()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.pcClasses()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.country()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lang()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.relCreator()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.relInspector()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.relApprover()); + responsebody += QStringLiteral("\n    \n    \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_list_allView) + +#include "releasemgmt_list_allView.moc" diff --git a/views/_src/releasemgmt_list_pdfView.cpp b/views/_src/releasemgmt_list_pdfView.cpp new file mode 100644 index 0000000..0787aef --- /dev/null +++ b/views/_src/releasemgmt_list_pdfView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "releasemgmt.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_list_pdfView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_list_pdfView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_list_pdfView::toString() +{ + responsebody.reserve(4767); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += tr("

                \n
                Auflistung der veröffentlichten Vorgaben (pdf, docx, odt).
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += tr("\n\n\n
                \n
                \n\n
                \n
                \n

                Vorgaben

                \n
                \n
                \n
                \n

                Anhänge

                \n
                \n\n
                \n\n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_list_pdfView) + +#include "releasemgmt_list_pdfView.moc" diff --git a/views/_src/releasemgmt_printCdAnnexView.cpp b/views/_src/releasemgmt_printCdAnnexView.cpp new file mode 100644 index 0000000..960fdf3 --- /dev/null +++ b/views/_src/releasemgmt_printCdAnnexView.cpp @@ -0,0 +1,70 @@ +#include +#include +#include "releasemgmt.h" +#include "releaseannex.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_printCdAnnexView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_printCdAnnexView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_printCdAnnexView::toString() +{ + responsebody.reserve(12281); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n
                \n
                \n \n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n

                Release Review eines Anhangs.

                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n  0\n\n\n
                \n
                \n
                \n ×\n \n
                \n
                \n
                \n
                \n\n\n
                \n Kommentar zu \" \"
                \n \n \n \n
                \n   \n
                \n\n
                \n
                \n\n
                \n
                \n
                \n
                Objekt-Attribute\n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                Release\n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n\n
                \n
                \n \n

                \n \n \n

                \n
                \n \n\n
                \n\n\n\n\n
                \n \n \n
                \n\n\n\n\n\n\n\n\n\n\n
                \n\n\n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_printCdAnnexView) + +#include "releasemgmt_printCdAnnexView.moc" diff --git a/views/_src/releasemgmt_saveView.cpp b/views/_src/releasemgmt_saveView.cpp new file mode 100644 index 0000000..6cd0826 --- /dev/null +++ b/views/_src/releasemgmt_saveView.cpp @@ -0,0 +1,120 @@ +#include +#include +#include "releasemgmt.h" +#include "lenkinfo.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_saveView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_saveView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_saveView::toString() +{ + responsebody.reserve(41530); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, releaseMgmt); + tfetch(QVariantMap, lenkinfo); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n \n \n\n \n\n \n \n \n \n \n \n \n\n \n\n\n\n\n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n\n
                \n \n \n \n
                \n
                \n
                \n\n\n \n
                \n \n
                \n

                Release Status-Anzeige

                \n
                \n
                \n
                25%
                \n
                \n draft: 25% - pre-release: 50% - pre-release review: 75% - released: 100%\n

                \n\n"); + responsebody += QVariant(formTag(urla("save", releaseMgmt["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n \n
                \n\n
                \n\n
                \n\n
                \n\n
                \n

                Eingabe Lenkungsinformation zum aktuellen Release

                \n\n
                \n {{ message }}\n
                \n
                \n

                Lenkungsinformation

                \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                \n

                BMW Group

                \n
                Unterlagenklasse: 3.2\n Nr.: 01\n
                Gültigkeitsbereich: BMW Group\n Version: {{ lenk_version }}\n

                Vorgabedokument der BMW Group
                für die passive IT Infrastruktur

                {{ obj_sname }}
                {{ lenk_title }}

                 

                 

                \n

                Status: {{ status }}
                {{ lenk_valid_startdate }}

                \n
                 \n

                Beteiligte Personen/Fachstellen/Gremien: 

                \n
                {{ lenk_departments }}\n
                \n
                \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                Änderungshistorie
                VersionInhaltErsteller
                Kurzzeichen
                Datum
                Prüfer
                Kurzzeichen
                Datum
                Freigeber
                Kurzzeichen
                Datum
                {{ item.lenk_version }}{{ item.lenk_content }}{{ item.lenk_creator }}
                {{ item.lenk_creator_date }}
                {{ item.lenk_auditor }}
                {{ item.lenk_auditor_date }}
                {{ item.lenk_approver }}
                {{ item.lenk_approver_date }}
                {{ lenk_version }}{{ lenk_content }}{{ lenk_creator }}
                {{ lenk_creator_date }}
                \n {{ lenk_auditor }}
                {{ lenk_auditor_date }}\n
                {{ lenk_auditor }}
                -/-
                \n {{ lenk_approver }}
                {{ lenk_approver_date }}\n
                {{ lenk_approver }}
                -/-
                \n
                \n
                \n \n \n
                \n

                Eingabe Lenkungsinformation zum aktuellen Release

                \n \n
                \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n \n \n \n

                \n
                \n \n
                \n
                \n \n
                \n

                \n \n

                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n

                \n

                \n \n

                \n
                \n
                \n\n
                \n
                \n\n
                \n\n
                \n\n
                \n
                \n

                Release Anzeige / Ausdruck

                \n

                hier wird dann das ausgewählte Release gemäß Status angezeigt

                \n\n
                \n \n \n \n \n
                \n \n
                \n \n
                \n\n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n\n \n \n\n \n \n\n \n \n \n
                \n
                \n\n \n
                \n
                \n\n
                \n zurück\n\n
                \n\n\n\n \n\n\n\n\n\n


                \n
                \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                \n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_saveView) + +#include "releasemgmt_saveView.moc" diff --git a/views/_src/releasemgmt_saveannexView.cpp b/views/_src/releasemgmt_saveannexView.cpp new file mode 100644 index 0000000..215c5b3 --- /dev/null +++ b/views/_src/releasemgmt_saveannexView.cpp @@ -0,0 +1,74 @@ +#include +#include +#include "releaseannex.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_saveannexView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_saveannexView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_saveannexView::toString() +{ + responsebody.reserve(7638); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, releaseAnnex); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n zurück\n

                \n\n"); + responsebody += QVariant(formTag(urla("saveAnnex", releaseAnnex["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n
                \n

                Daten Quellcode

                \n

                \n

                \n

                \n

                \n \n

                \n\n\n
                \n zurück\n\n

                \n

                Daten Anzeige

                \n


                "); + responsebody += QVariant(releaseAnnex["specContent"]).toString(); + responsebody += QStringLiteral("

                \n\n
                \n zurück\n\n\n
                \n\n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_saveannexView) + +#include "releasemgmt_saveannexView.moc" diff --git a/views/_src/releasemgmt_showCdAnnexView.cpp b/views/_src/releasemgmt_showCdAnnexView.cpp new file mode 100644 index 0000000..6ad87d7 --- /dev/null +++ b/views/_src/releasemgmt_showCdAnnexView.cpp @@ -0,0 +1,56 @@ +#include +#include +#include "releasemgmt.h" +#include "releaseannex.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_showCdAnnexView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_showCdAnnexView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_showCdAnnexView::toString() +{ + responsebody.reserve(11132); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n\n\n\n
                \n \n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n

                Release Review eines Anhangs.

                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n  0\n\n\n
                \n
                \n
                \n ×\n \n
                \n
                \n
                \n
                \n\n\n
                \n Kommentar zu \" \"
                \n \n \n \n
                \n   \n
                \n\n
                \n
                \n\n
                \n
                \n
                \n
                Objekt-Attribute\n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                Release\n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n\n
                \n
                \n \n

                \n \n  Vorgabe als PDF\n \n \n

                \n\n
                \n\n
                \n\n
                \n\n\n
                \n \n \n
                \n\n\n\n\n\n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_showCdAnnexView) + +#include "releasemgmt_showCdAnnexView.moc" diff --git a/views/_src/releasemgmt_showView.cpp b/views/_src/releasemgmt_showView.cpp new file mode 100644 index 0000000..03a8b6f --- /dev/null +++ b/views/_src/releasemgmt_showView.cpp @@ -0,0 +1,116 @@ +#include +#include +#include "releasemgmt.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT releasemgmt_showView : public TActionView +{ + Q_OBJECT +public: + releasemgmt_showView() : TActionView() { } + QString toString(); +}; + +QString releasemgmt_showView::toString() +{ + responsebody.reserve(19253); + responsebody += QStringLiteral("\n"); + tfetch(ReleaseMgmt, releaseMgmt); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n \n \n\n \n\n \n \n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n
                \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n
                \n\n
                \n \n
                \n\n\n \n
                \n \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n

                 

                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n
                \n \n
                \n\n\n\n\n\n\n\n\n\n\n\n\n\n
                \n
                \n\n
                \n\n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n\n
                \n\n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(releasemgmt_showView) + +#include "releasemgmt_showView.moc" diff --git a/views/_src/source.list b/views/_src/source.list new file mode 100644 index 0000000..bba2214 --- /dev/null +++ b/views/_src/source.list @@ -0,0 +1,442 @@ +HEADERS += acclasses_createView.moc +SOURCES += acclasses_createView.cpp +HEADERS += acclasses_indexView.moc +SOURCES += acclasses_indexView.cpp +HEADERS += acclasses_list_allView.moc +SOURCES += acclasses_list_allView.cpp +HEADERS += acclasses_saveView.moc +SOURCES += acclasses_saveView.cpp +HEADERS += acclasses_showView.moc +SOURCES += acclasses_showView.cpp +HEADERS += account_createView.moc +SOURCES += account_createView.cpp +HEADERS += account_formView.moc +SOURCES += account_formView.cpp +HEADERS += account_formElectronView.moc +SOURCES += account_formElectronView.cpp +HEADERS += account_indexView.moc +SOURCES += account_indexView.cpp +HEADERS += account_list_allView.moc +SOURCES += account_list_allView.cpp +HEADERS += account_saveView.moc +SOURCES += account_saveView.cpp +HEADERS += account_showView.moc +SOURCES += account_showView.cpp +HEADERS += account_userhomeView.moc +SOURCES += account_userhomeView.cpp +HEADERS += account_userhomeElectronView.moc +SOURCES += account_userhomeElectronView.cpp +HEADERS += account_userpwdView.moc +SOURCES += account_userpwdView.cpp +HEADERS += account_userpwdElectronView.moc +SOURCES += account_userpwdElectronView.cpp +HEADERS += actionrights_createView.moc +SOURCES += actionrights_createView.cpp +HEADERS += actionrights_indexView.moc +SOURCES += actionrights_indexView.cpp +HEADERS += actionrights_list_allView.moc +SOURCES += actionrights_list_allView.cpp +HEADERS += actionrights_saveView.moc +SOURCES += actionrights_saveView.cpp +HEADERS += actionrights_showView.moc +SOURCES += actionrights_showView.cpp +HEADERS += admin_indexView.moc +SOURCES += admin_indexView.cpp +HEADERS += admin_showGalleryView.moc +SOURCES += admin_showGalleryView.cpp +HEADERS += annexdata_createView.moc +SOURCES += annexdata_createView.cpp +HEADERS += annexdata_editor_addView.moc +SOURCES += annexdata_editor_addView.cpp +HEADERS += annexdata_editor_updView.moc +SOURCES += annexdata_editor_updView.cpp +HEADERS += annexdata_indexView.moc +SOURCES += annexdata_indexView.cpp +HEADERS += annexdata_list_allView.moc +SOURCES += annexdata_list_allView.cpp +HEADERS += annexdata_listAnnexView.moc +SOURCES += annexdata_listAnnexView.cpp +HEADERS += annexdata_listWasteView.moc +SOURCES += annexdata_listWasteView.cpp +HEADERS += annexdata_printCiAnnexView.moc +SOURCES += annexdata_printCiAnnexView.cpp +HEADERS += annexdata_saveView.moc +SOURCES += annexdata_saveView.cpp +HEADERS += annexdata_showView.moc +SOURCES += annexdata_showView.cpp +HEADERS += annexdata_showAnnexView.moc +SOURCES += annexdata_showAnnexView.cpp +HEADERS += annexdata_showAnnexElectronView.moc +SOURCES += annexdata_showAnnexElectronView.cpp +HEADERS += annexdata_showCiAnnexView.moc +SOURCES += annexdata_showCiAnnexView.cpp +HEADERS += annexdata_showWasteView.moc +SOURCES += annexdata_showWasteView.cpp +HEADERS += annexdatacomments_createView.moc +SOURCES += annexdatacomments_createView.cpp +HEADERS += annexdatacomments_indexView.moc +SOURCES += annexdatacomments_indexView.cpp +HEADERS += annexdatacomments_list_allView.moc +SOURCES += annexdatacomments_list_allView.cpp +HEADERS += annexdatacomments_saveView.moc +SOURCES += annexdatacomments_saveView.cpp +HEADERS += annexdatacomments_showView.moc +SOURCES += annexdatacomments_showView.cpp +HEADERS += annexmeta_createView.moc +SOURCES += annexmeta_createView.cpp +HEADERS += annexmeta_indexView.moc +SOURCES += annexmeta_indexView.cpp +HEADERS += annexmeta_saveView.moc +SOURCES += annexmeta_saveView.cpp +HEADERS += annexmeta_showView.moc +SOURCES += annexmeta_showView.cpp +HEADERS += appvars_createView.moc +SOURCES += appvars_createView.cpp +HEADERS += appvars_indexView.moc +SOURCES += appvars_indexView.cpp +HEADERS += appvars_list_allView.moc +SOURCES += appvars_list_allView.cpp +HEADERS += appvars_saveView.moc +SOURCES += appvars_saveView.cpp +HEADERS += appvars_showView.moc +SOURCES += appvars_showView.cpp +HEADERS += catclasses_createView.moc +SOURCES += catclasses_createView.cpp +HEADERS += catclasses_indexView.moc +SOURCES += catclasses_indexView.cpp +HEADERS += catclasses_list_allView.moc +SOURCES += catclasses_list_allView.cpp +HEADERS += catclasses_saveView.moc +SOURCES += catclasses_saveView.cpp +HEADERS += catclasses_showView.moc +SOURCES += catclasses_showView.cpp +HEADERS += glossar_createView.moc +SOURCES += glossar_createView.cpp +HEADERS += glossar_indexView.moc +SOURCES += glossar_indexView.cpp +HEADERS += glossar_list_allView.moc +SOURCES += glossar_list_allView.cpp +HEADERS += glossar_list_allElectronView.moc +SOURCES += glossar_list_allElectronView.cpp +HEADERS += glossar_saveView.moc +SOURCES += glossar_saveView.cpp +HEADERS += glossar_showView.moc +SOURCES += glossar_showView.cpp +HEADERS += itisgroups_createView.moc +SOURCES += itisgroups_createView.cpp +HEADERS += itisgroups_indexView.moc +SOURCES += itisgroups_indexView.cpp +HEADERS += itisgroups_list_allView.moc +SOURCES += itisgroups_list_allView.cpp +HEADERS += itisgroups_saveView.moc +SOURCES += itisgroups_saveView.cpp +HEADERS += itisgroups_showView.moc +SOURCES += itisgroups_showView.cpp +HEADERS += itisnews_createView.moc +SOURCES += itisnews_createView.cpp +HEADERS += itisnews_indexView.moc +SOURCES += itisnews_indexView.cpp +HEADERS += itisnews_indexElectronView.moc +SOURCES += itisnews_indexElectronView.cpp +HEADERS += itisnews_list_allView.moc +SOURCES += itisnews_list_allView.cpp +HEADERS += itisnews_saveView.moc +SOURCES += itisnews_saveView.cpp +HEADERS += itisnews_showView.moc +SOURCES += itisnews_showView.cpp +HEADERS += lenkinfo_createView.moc +SOURCES += lenkinfo_createView.cpp +HEADERS += lenkinfo_indexView.moc +SOURCES += lenkinfo_indexView.cpp +HEADERS += lenkinfo_list_allView.moc +SOURCES += lenkinfo_list_allView.cpp +HEADERS += lenkinfo_saveView.moc +SOURCES += lenkinfo_saveView.cpp +HEADERS += lenkinfo_showView.moc +SOURCES += lenkinfo_showView.cpp +HEADERS += mailer_crUserView.moc +SOURCES += mailer_crUserView.cpp +HEADERS += mailer_crUserPwdView.moc +SOURCES += mailer_crUserPwdView.cpp +HEADERS += mailer_infoUserPwdView.moc +SOURCES += mailer_infoUserPwdView.cpp +HEADERS += mailer_mailView.moc +SOURCES += mailer_mailView.cpp +HEADERS += mailer_preleaseInfoView.moc +SOURCES += mailer_preleaseInfoView.cpp +HEADERS += mailer_regUserAdmInfoView.moc +SOURCES += mailer_regUserAdmInfoView.cpp +HEADERS += objects_createView.moc +SOURCES += objects_createView.cpp +HEADERS += objects_indexView.moc +SOURCES += objects_indexView.cpp +HEADERS += objects_list_allView.moc +SOURCES += objects_list_allView.cpp +HEADERS += objects_saveView.moc +SOURCES += objects_saveView.cpp +HEADERS += objects_showView.moc +SOURCES += objects_showView.cpp +HEADERS += pcclasses_createView.moc +SOURCES += pcclasses_createView.cpp +HEADERS += pcclasses_indexView.moc +SOURCES += pcclasses_indexView.cpp +HEADERS += pcclasses_list_allView.moc +SOURCES += pcclasses_list_allView.cpp +HEADERS += pcclasses_saveView.moc +SOURCES += pcclasses_saveView.cpp +HEADERS += pcclasses_showView.moc +SOURCES += pcclasses_showView.cpp +HEADERS += portaladmin_indexView.moc +SOURCES += portaladmin_indexView.cpp +HEADERS += releasemgmt_createView.moc +SOURCES += releasemgmt_createView.cpp +HEADERS += releasemgmt_indexView.moc +SOURCES += releasemgmt_indexView.cpp +HEADERS += releasemgmt_index_ciannexView.moc +SOURCES += releasemgmt_index_ciannexView.cpp +HEADERS += releasemgmt_list_allView.moc +SOURCES += releasemgmt_list_allView.cpp +HEADERS += releasemgmt_list_pdfView.moc +SOURCES += releasemgmt_list_pdfView.cpp +HEADERS += releasemgmt_listAllAnnexCdView.moc +SOURCES += releasemgmt_listAllAnnexCdView.cpp +HEADERS += releasemgmt_listAllAnnexCiView.moc +SOURCES += releasemgmt_listAllAnnexCiView.cpp +HEADERS += releasemgmt_listAllStdCdView.moc +SOURCES += releasemgmt_listAllStdCdView.cpp +HEADERS += releasemgmt_listAllStdCiView.moc +SOURCES += releasemgmt_listAllStdCiView.cpp +HEADERS += releasemgmt_printCdAnnexView.moc +SOURCES += releasemgmt_printCdAnnexView.cpp +HEADERS += releasemgmt_saveView.moc +SOURCES += releasemgmt_saveView.cpp +HEADERS += releasemgmt_saveannexView.moc +SOURCES += releasemgmt_saveannexView.cpp +HEADERS += releasemgmt_showView.moc +SOURCES += releasemgmt_showView.cpp +HEADERS += releasemgmt_showCdAnnexView.moc +SOURCES += releasemgmt_showCdAnnexView.cpp +HEADERS += standardsdata_checkLfdnrCatView.moc +SOURCES += standardsdata_checkLfdnrCatView.cpp +HEADERS += standardsdata_createView.moc +SOURCES += standardsdata_createView.cpp +HEADERS += standardsdata_editor_addView.moc +SOURCES += standardsdata_editor_addView.cpp +HEADERS += standardsdata_editor_updView.moc +SOURCES += standardsdata_editor_updView.cpp +HEADERS += standardsdata_indexView.moc +SOURCES += standardsdata_indexView.cpp +HEADERS += standardsdata_list_allView.moc +SOURCES += standardsdata_list_allView.cpp +HEADERS += standardsdata_listStdView.moc +SOURCES += standardsdata_listStdView.cpp +HEADERS += standardsdata_listWasteView.moc +SOURCES += standardsdata_listWasteView.cpp +HEADERS += standardsdata_saveView.moc +SOURCES += standardsdata_saveView.cpp +HEADERS += standardsdata_showView.moc +SOURCES += standardsdata_showView.cpp +HEADERS += standardsdata_showCiStdView.moc +SOURCES += standardsdata_showCiStdView.cpp +HEADERS += standardsdata_showStdView.moc +SOURCES += standardsdata_showStdView.cpp +HEADERS += standardsdata_showStdElectronView.moc +SOURCES += standardsdata_showStdElectronView.cpp +HEADERS += standardsdata_showWasteView.moc +SOURCES += standardsdata_showWasteView.cpp +HEADERS += standardsdatacomments_createView.moc +SOURCES += standardsdatacomments_createView.cpp +HEADERS += standardsdatacomments_indexView.moc +SOURCES += standardsdatacomments_indexView.cpp +HEADERS += standardsdatacomments_list_allView.moc +SOURCES += standardsdatacomments_list_allView.cpp +HEADERS += standardsdatacomments_saveView.moc +SOURCES += standardsdatacomments_saveView.cpp +HEADERS += standardsdatacomments_showView.moc +SOURCES += standardsdatacomments_showView.cpp +HEADERS += standardsmeta_createView.moc +SOURCES += standardsmeta_createView.cpp +HEADERS += standardsmeta_indexView.moc +SOURCES += standardsmeta_indexView.cpp +HEADERS += standardsmeta_list_allView.moc +SOURCES += standardsmeta_list_allView.cpp +HEADERS += standardsmeta_saveView.moc +SOURCES += standardsmeta_saveView.cpp +HEADERS += standardsmeta_showView.moc +SOURCES += standardsmeta_showView.cpp +HEADERS += standardsmeta_showBy_spec_data_idView.moc +SOURCES += standardsmeta_showBy_spec_data_idView.cpp +HEADERS += stdsystem_createView.moc +SOURCES += stdsystem_createView.cpp +HEADERS += stdsystem_imprintView.moc +SOURCES += stdsystem_imprintView.cpp +HEADERS += stdsystem_indexView.moc +SOURCES += stdsystem_indexView.cpp +HEADERS += stdsystem_licenseView.moc +SOURCES += stdsystem_licenseView.cpp +HEADERS += stdsystem_list_allView.moc +SOURCES += stdsystem_list_allView.cpp +HEADERS += stdsystem_saveView.moc +SOURCES += stdsystem_saveView.cpp +HEADERS += stdsystem_showView.moc +SOURCES += stdsystem_showView.cpp +HEADERS += webmenu_createView.moc +SOURCES += webmenu_createView.cpp +HEADERS += webmenu_indexView.moc +SOURCES += webmenu_indexView.cpp +HEADERS += webmenu_list_allView.moc +SOURCES += webmenu_list_allView.cpp +HEADERS += webmenu_saveView.moc +SOURCES += webmenu_saveView.cpp +HEADERS += webmenu_showView.moc +SOURCES += webmenu_showView.cpp + +# include view files in the project +views.files += ../acclasses/create.erb +views.files += ../acclasses/index.erb +views.files += ../acclasses/list_all.erb +views.files += ../acclasses/save.erb +views.files += ../acclasses/show.erb +views.files += ../account/create.erb +views.files += ../account/form.erb +views.files += ../account/formElectron.erb +views.files += ../account/index.erb +views.files += ../account/list_all.erb +views.files += ../account/save.erb +views.files += ../account/show.erb +views.files += ../account/userhome.erb +views.files += ../account/userhomeElectron.erb +views.files += ../account/userpwd.erb +views.files += ../account/userpwdElectron.erb +views.files += ../actionrights/create.erb +views.files += ../actionrights/index.erb +views.files += ../actionrights/list_all.erb +views.files += ../actionrights/save.erb +views.files += ../actionrights/show.erb +views.files += ../admin/index.erb +views.files += ../admin/showGallery.erb +views.files += ../annexdata/create.erb +views.files += ../annexdata/editor_add.erb +views.files += ../annexdata/editor_upd.erb +views.files += ../annexdata/index.erb +views.files += ../annexdata/list_all.erb +views.files += ../annexdata/listAnnex.erb +views.files += ../annexdata/listWaste.erb +views.files += ../annexdata/printCiAnnex.erb +views.files += ../annexdata/save.erb +views.files += ../annexdata/show.erb +views.files += ../annexdata/showAnnex.erb +views.files += ../annexdata/showAnnexElectron.erb +views.files += ../annexdata/showCiAnnex.erb +views.files += ../annexdata/showWaste.erb +views.files += ../annexdatacomments/create.erb +views.files += ../annexdatacomments/index.erb +views.files += ../annexdatacomments/list_all.erb +views.files += ../annexdatacomments/save.erb +views.files += ../annexdatacomments/show.erb +views.files += ../annexmeta/create.erb +views.files += ../annexmeta/index.erb +views.files += ../annexmeta/save.erb +views.files += ../annexmeta/show.erb +views.files += ../appvars/create.erb +views.files += ../appvars/index.erb +views.files += ../appvars/list_all.erb +views.files += ../appvars/save.erb +views.files += ../appvars/show.erb +views.files += ../catclasses/create.erb +views.files += ../catclasses/index.erb +views.files += ../catclasses/list_all.erb +views.files += ../catclasses/save.erb +views.files += ../catclasses/show.erb +views.files += ../glossar/create.erb +views.files += ../glossar/index.erb +views.files += ../glossar/list_all.erb +views.files += ../glossar/list_allElectron.erb +views.files += ../glossar/save.erb +views.files += ../glossar/show.erb +views.files += ../itisgroups/create.erb +views.files += ../itisgroups/index.erb +views.files += ../itisgroups/list_all.erb +views.files += ../itisgroups/save.erb +views.files += ../itisgroups/show.erb +views.files += ../itisnews/create.erb +views.files += ../itisnews/index.erb +views.files += ../itisnews/indexElectron.erb +views.files += ../itisnews/list_all.erb +views.files += ../itisnews/save.erb +views.files += ../itisnews/show.erb +views.files += ../lenkinfo/create.erb +views.files += ../lenkinfo/index.erb +views.files += ../lenkinfo/list_all.erb +views.files += ../lenkinfo/save.erb +views.files += ../lenkinfo/show.erb +views.files += ../mailer/crUser.erb +views.files += ../mailer/crUserPwd.erb +views.files += ../mailer/infoUserPwd.erb +views.files += ../mailer/mail.erb +views.files += ../mailer/preleaseInfo.erb +views.files += ../mailer/regUserAdmInfo.erb +views.files += ../objects/create.erb +views.files += ../objects/index.erb +views.files += ../objects/list_all.erb +views.files += ../objects/save.erb +views.files += ../objects/show.erb +views.files += ../pcclasses/create.erb +views.files += ../pcclasses/index.erb +views.files += ../pcclasses/list_all.erb +views.files += ../pcclasses/save.erb +views.files += ../pcclasses/show.erb +views.files += ../portaladmin/index.erb +views.files += ../releasemgmt/create.erb +views.files += ../releasemgmt/index.erb +views.files += ../releasemgmt/index_ciannex.erb +views.files += ../releasemgmt/list_all.erb +views.files += ../releasemgmt/list_pdf.erb +views.files += ../releasemgmt/listAllAnnexCd.erb +views.files += ../releasemgmt/listAllAnnexCi.erb +views.files += ../releasemgmt/listAllStdCd.erb +views.files += ../releasemgmt/listAllStdCi.erb +views.files += ../releasemgmt/printCdAnnex.erb +views.files += ../releasemgmt/save.erb +views.files += ../releasemgmt/saveannex.erb +views.files += ../releasemgmt/show.erb +views.files += ../releasemgmt/showCdAnnex.erb +views.files += ../standardsdata/checkLfdnrCat.erb +views.files += ../standardsdata/create.erb +views.files += ../standardsdata/editor_add.erb +views.files += ../standardsdata/editor_upd.erb +views.files += ../standardsdata/index.erb +views.files += ../standardsdata/list_all.erb +views.files += ../standardsdata/listStd.erb +views.files += ../standardsdata/listWaste.erb +views.files += ../standardsdata/save.erb +views.files += ../standardsdata/show.erb +views.files += ../standardsdata/showCiStd.erb +views.files += ../standardsdata/showStd.erb +views.files += ../standardsdata/showStdElectron.erb +views.files += ../standardsdata/showWaste.erb +views.files += ../standardsdatacomments/create.erb +views.files += ../standardsdatacomments/index.erb +views.files += ../standardsdatacomments/list_all.erb +views.files += ../standardsdatacomments/save.erb +views.files += ../standardsdatacomments/show.erb +views.files += ../standardsmeta/create.erb +views.files += ../standardsmeta/index.erb +views.files += ../standardsmeta/list_all.erb +views.files += ../standardsmeta/save.erb +views.files += ../standardsmeta/show.erb +views.files += ../standardsmeta/showBy_spec_data_id.erb +views.files += ../stdsystem/create.erb +views.files += ../stdsystem/imprint.erb +views.files += ../stdsystem/index.erb +views.files += ../stdsystem/license.erb +views.files += ../stdsystem/list_all.erb +views.files += ../stdsystem/save.erb +views.files += ../stdsystem/show.erb +views.files += ../webmenu/create.erb +views.files += ../webmenu/index.erb +views.files += ../webmenu/list_all.erb +views.files += ../webmenu/save.erb +views.files += ../webmenu/show.erb +views.path = .dummy +INSTALLS += views diff --git a/views/_src/standardsdata_checkLfdnrCatView.cpp b/views/_src/standardsdata_checkLfdnrCatView.cpp new file mode 100644 index 0000000..23ed45d --- /dev/null +++ b/views/_src/standardsdata_checkLfdnrCatView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_checkLfdnrCatView : public TActionView +{ + Q_OBJECT +public: + standardsdata_checkLfdnrCatView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_checkLfdnrCatView::toString() +{ + responsebody.reserve(5223); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n\n
                \n

                Auflistung aller Bausteine mit Unstimmigkeiten (fehlende lfndr bzw. fehlende deutsche/englische Baustein-Version).

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n

                unstimmige Bausteine: "); + techoex(countCheckLfdnrCat); + responsebody += QStringLiteral("

                \n
                \n\n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_checkLfdnrCatView) + +#include "standardsdata_checkLfdnrCatView.moc" diff --git a/views/_src/standardsdata_createView.cpp b/views/_src/standardsdata_createView.cpp new file mode 100644 index 0000000..5d1f627 --- /dev/null +++ b/views/_src/standardsdata_createView.cpp @@ -0,0 +1,64 @@ +#include +#include +#include "standardsdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_createView : public TActionView +{ + Q_OBJECT +public: + standardsdata_createView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_createView::toString() +{ + responsebody.reserve(3733); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, standardsData); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n

                New Standards Data

                \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_createView) + +#include "standardsdata_createView.moc" diff --git a/views/_src/standardsdata_editor_addView.cpp b/views/_src/standardsdata_editor_addView.cpp new file mode 100644 index 0000000..c52f679 --- /dev/null +++ b/views/_src/standardsdata_editor_addView.cpp @@ -0,0 +1,53 @@ +#include +#include +#include "standardsdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_editor_addView : public TActionView +{ + Q_OBJECT +public: + standardsdata_editor_addView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_editor_addView::toString() +{ + responsebody.reserve(30514); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n\n \n \n \n\n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n
                \n ×\n \n
                \n
                \n
                \n\n\n\n
                \n
                \n\n
                \n
                \n
                \n
                \n \n
                \n Baustein-Titel, Verwendung im Inhaltsverzeichnis\n
                \n
                \n
                \n \n
                \n Kurzbeschreibung für Text-Baustein Administration\n
                \n
                \n
                \n
                \n
                \n
                Objekt-Zuordnung\n
                \n  \n \n \n Ein oder mehrere Objekte\n
                \n
                \n
                \n
                \n
                \n \n
                \n
                Objekt-Attribute\n
                \n
                \n
                \n
                \n
                \n \n
                \n 2-stelliger Ländercode (WW = World Wide)\n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n Text-Baustein Version (Bsp.: v00.01.02)\n
                \n
                \n
                \n \n
                \n 3-stellige Text-Baustein Nummerierung (Bsp.: 013)\n
                \n \n check lfdnr innerhalb der gewählten Cat\n   \n \n
                \n
                \n
                \n \n
                \n optional: interne Bemerkung, auch für Release\n
                \n
                \n
                \n \n
                \n \n interne Hilfs-Markierung\n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                Availability Class\n  \n \n \n Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" \n
                \n
                \n
                \n
                \n
                Protection Class\n  \n \n \n Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" \n
                \n
                \n
                \n
                \n
                Legacy\n \n \n \n ehemals G2 od. G3 \n
                \n
                \n
                \n
                \n\n
                \n
                Text-Baustein\n
                \n
                \n
                \n
                \n
                \n \n
                \n \n Start-Datum
                \n
                \n
                \n
                \n \n
                \n vorläufiges End-Datum
                \n
                \n
                \n
                \n \n \n Baustein aktiv oder in-aktiv \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n Verantwortlicher: email, Abteilung, Jira-Key\n
                \n
                \n
                \n
                \n
                \n\n

                \n

                \n\n \n
                \n

                \n\n\n\n\n
                \n
                \n \n
                \n \n
                \n\n\n\n \n\n
                \n
                \n \n\n \n\n
                \n\n

                URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                \n\n\n\n
                \n
                \n
                \n
                \n\n
                \n\n\n\n\n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_editor_addView) + +#include "standardsdata_editor_addView.moc" diff --git a/views/_src/standardsdata_editor_updView.cpp b/views/_src/standardsdata_editor_updView.cpp new file mode 100644 index 0000000..6b31846 --- /dev/null +++ b/views/_src/standardsdata_editor_updView.cpp @@ -0,0 +1,118 @@ +#include +#include +#include "standardsdata.h" +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_editor_updView : public TActionView +{ + Q_OBJECT +public: + standardsdata_editor_updView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_editor_updView::toString() +{ + responsebody.reserve(38137); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n\n \n\n \n \n \n\n \n \n\n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n
                \n ×\n \n
                \n
                \n
                \n\n\n\n
                \n
                \n\n
                \n
                \n
                \n
                \n \n
                \n Baustein-Titel, Verwendung im Inhaltsverzeichnis\n
                \n
                \n
                \n \n
                \n Kurzbeschreibung für Text-Baustein Administration\n
                \n
                \n
                \n
                \n
                \n
                Objekt-Zuordnung\n
                \n  \n \n \n Ein oder mehrere Objekte\n
                \n
                \n
                \n
                \n
                \n \n
                \n
                Objekt-Attribute\n
                \n
                \n
                \n
                \n
                \n \n
                \n 2-stelliger Ländercode (WW = World Wide)\n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n Text-Baustein Version (Bsp.: v00.01.02)\n
                \n
                \n
                \n \n
                \n Text-Baustein Version (Bsp.: v00.01.02)\n
                \n
                \n
                \n \n
                \n 3-stellige Text-Baustein Nummerierung (Bsp.: 013)\n
                \n \n check lfdnr innerhalb der gewählten Cat\n   \n \n
                \n
                \n
                \n \n
                \n optional: interne Bemerkung, auch für Release\n
                \n
                \n
                \n \n
                \n \n interne Hilfs-Markierung\n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                Availability Class\n  \n \n \n Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" \n
                \n
                \n
                \n
                \n
                Protection Class\n  \n \n \n Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" \n
                \n
                \n
                \n
                \n
                Legacy\n \n \n \n ehemals G2 od. G3 \n
                \n
                \n
                \n
                \n\n
                \n
                Text-Baustein\n
                \n
                \n
                \n
                \n
                \n \n
                \n \n Start-Datum
                \n
                \n
                \n
                \n \n
                \n vorläufiges End-Datum
                \n
                \n
                \n
                \n \n \n Baustein aktiv oder in-aktiv \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n Verantwortlicher: email, Abteilung, Jira-Key\n
                \n
                \n
                \n
                \n
                \n

                \n \n \n \n \n

                \n\n \n
                \n

                \n\n\n\n
                \n
                \n \n
                \n \n
                \n\n\n\n \n\n
                \n
                \n \n\n \n\n
                \n\n

                URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                \n\n\n\n
                \n
                \n
                \n
                \n\n
                \n\n\n\n\n\n\n
                \n \n \n
                \n\n\n
                \n Kommentar zu \" \"
                \n \n \n \n
                \n   \n
                \n\n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_editor_updView) + +#include "standardsdata_editor_updView.moc" diff --git a/views/_src/standardsdata_indexView.cpp b/views/_src/standardsdata_indexView.cpp new file mode 100644 index 0000000..c30ae08 --- /dev/null +++ b/views/_src/standardsdata_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "standardsdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_indexView : public TActionView +{ + Q_OBJECT +public: + standardsdata_indexView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_indexView::toString() +{ + responsebody.reserve(2602); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n\n
                \n \n
                \n\n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_indexView) + +#include "standardsdata_indexView.moc" diff --git a/views/_src/standardsdata_listStdView.cpp b/views/_src/standardsdata_listStdView.cpp new file mode 100644 index 0000000..8909a9f --- /dev/null +++ b/views/_src/standardsdata_listStdView.cpp @@ -0,0 +1,50 @@ +#include +#include +#include "standardsdata.h" +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_listStdView : public TActionView +{ + Q_OBJECT +public: + standardsdata_listStdView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_listStdView::toString() +{ + responsebody.reserve(7241); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n\n \n\n \n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n

                Auflistung aller Bausteine einer Vorgabe, ohne Filterung.

                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n
                \n ×\n \n
                \n
                \n
                \n\n\n\n
                \n
                \n\n
                \n
                \n
                \n
                Objekt-Attribute\n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n WW = World Wide\n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                Release\n
                \n
                \n
                \n
                \n
                \n
                \n \n \n nur de-/aktive Bausteine\n
                \n
                \n
                \n
                \n \n \n alle Objekt-spezifische Bausteine\n
                \n
                \n
                \n
                \n\n
                \n
                \n \n

                \n \n
                \n\n
                \n\n
                \n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_listStdView) + +#include "standardsdata_listStdView.moc" diff --git a/views/_src/standardsdata_listWasteView.cpp b/views/_src/standardsdata_listWasteView.cpp new file mode 100644 index 0000000..1cc3ee1 --- /dev/null +++ b/views/_src/standardsdata_listWasteView.cpp @@ -0,0 +1,83 @@ +#include +#include +#include "standardsdata.h" +#include "standardsdatawaste.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_listWasteView : public TActionView +{ + Q_OBJECT +public: + standardsdata_listWasteView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_listWasteView::toString() +{ + responsebody.reserve(9081); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                Ungefilterte Auflistung aller gelöschten Vorgaben Bausteine.
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n
                \n ×\n \n
                \n
                \n
                \n\n\n
                \n
                \n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, standardsDataWasteList); + for (const auto &i : standardsDataWasteList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                gelöscht amLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangWiederherstellung
                "); + responsebody += THttpUtility::htmlEscape(i.lfdnr()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specTitle()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specDesc()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specVersion()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specRelease()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.objSname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.acClasses()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.pcClasses()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.catClass()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.country()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lang()); + responsebody += QStringLiteral("\n    \n    \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_listWasteView) + +#include "standardsdata_listWasteView.moc" diff --git a/views/_src/standardsdata_list_allView.cpp b/views/_src/standardsdata_list_allView.cpp new file mode 100644 index 0000000..6fc8aa7 --- /dev/null +++ b/views/_src/standardsdata_list_allView.cpp @@ -0,0 +1,80 @@ +#include +#include +#include "standardsdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_list_allView : public TActionView +{ + Q_OBJECT +public: + standardsdata_list_allView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_list_allView::toString() +{ + responsebody.reserve(6435); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                Ungefilterte Auflistung aller Bausteine.
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n
                \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, standardsDataList); + for (const auto &i : standardsDataList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                IDLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangSpec ActiveBaustein
                "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lfdnr()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specTitle()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specDesc()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specVersion()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specRelease()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.objSname()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.acClasses()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.pcClasses()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.catClass()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.country()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lang()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specActive()); + responsebody += QStringLiteral("\n \n \n \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_list_allView) + +#include "standardsdata_list_allView.moc" diff --git a/views/_src/standardsdata_saveView.cpp b/views/_src/standardsdata_saveView.cpp new file mode 100644 index 0000000..d67795a --- /dev/null +++ b/views/_src/standardsdata_saveView.cpp @@ -0,0 +1,84 @@ +#include +#include +#include "standardsdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_saveView : public TActionView +{ + Q_OBJECT +public: + standardsdata_saveView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_saveView::toString() +{ + responsebody.reserve(8679); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, standardsData); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", standardsData["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Editor\n zurück\n

                \n\n"); + responsebody += QVariant(formTag(urla("save", standardsData["id"]), Tf::Post, 'class="w3-container"')).toString(); + responsebody += QStringLiteral("\n

                Attribute

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n
                \n

                Daten Quellcode

                \n

                \n

                \n

                \n

                \n \n

                \n\n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", standardsData["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Editor\n zurück\n\n

                \n

                Daten Anzeige

                \n


                "); + responsebody += QVariant(standardsData["specContent"]).toString(); + responsebody += QStringLiteral("

                \n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", standardsData["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Editor\n zurück\n\n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_saveView) + +#include "standardsdata_saveView.moc" diff --git a/views/_src/standardsdata_showCiStdView.cpp b/views/_src/standardsdata_showCiStdView.cpp new file mode 100644 index 0000000..fe8a5cf --- /dev/null +++ b/views/_src/standardsdata_showCiStdView.cpp @@ -0,0 +1,59 @@ +#include +#include +#include "standardsdata.h" +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_showCiStdView : public TActionView +{ + Q_OBJECT +public: + standardsdata_showCiStdView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_showCiStdView::toString() +{ + responsebody.reserve(14753); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n
                \n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n

                Release Review einer Vorgabe.

                \n\n\n\n\n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("\n\n\n  0\n\n\n
                \n
                \n
                \n ×\n \n
                \n
                \n
                \n
                \n\n\n
                \n Kommentar zu \" \"
                \n \n \n \n
                \n   \n
                \n\n
                \n
                \n\n
                \n
                \n
                \n
                Objekt-Attribute\n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                Release\n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n\n
                \n
                \n \n

                \n \n \n \n  Vorgabe drucken\n \n

                \n\n\n
                \n\n
                \n\n
                \n\n\n
                \n \n \n
                \n\n\n\n\n\n\n\n\n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_showCiStdView) + +#include "standardsdata_showCiStdView.moc" diff --git a/views/_src/standardsdata_showStdElectronView.cpp b/views/_src/standardsdata_showStdElectronView.cpp new file mode 100644 index 0000000..13dd303 --- /dev/null +++ b/views/_src/standardsdata_showStdElectronView.cpp @@ -0,0 +1,47 @@ +#include +#include +#include "standardsdata.h" +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_showStdElectronView : public TActionView +{ + Q_OBJECT +public: + standardsdata_showStdElectronView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_showStdElectronView::toString() +{ + responsebody.reserve(7996); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n\n \n\n \n \n \n \n \n \n\n\n\n\n\n
                \n\n

                Vorgabedokument der BMW Group

                \n

                Semi-Finale Anzeige einer Vorgabe.

                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n
                \n ×\n \n
                \n
                \n
                \n
                \n\n\n
                \n Kommentar zu \" \"
                \n \n \n \n
                \n   \n
                \n\n
                \n
                \n\n
                \n
                \n
                \n
                Objekt-Attribute\n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n WW = World Wide\n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                Release\n
                \n
                \n
                \n
                \n
                \n
                \n \n \n nur de-/aktive Bausteine\n
                \n
                \n
                \n
                \n \n \n alle Objekt-spezifische Bausteine\n
                \n
                \n
                \n
                \n\n
                \n
                \n \n

                \n \n  Vorgabe drucken\n

                \n\n\n
                \n\n
                \n\n
                \n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_showStdElectronView) + +#include "standardsdata_showStdElectronView.moc" diff --git a/views/_src/standardsdata_showStdView.cpp b/views/_src/standardsdata_showStdView.cpp new file mode 100644 index 0000000..91a9894 --- /dev/null +++ b/views/_src/standardsdata_showStdView.cpp @@ -0,0 +1,53 @@ +#include +#include +#include "standardsdata.h" +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_showStdView : public TActionView +{ + Q_OBJECT +public: + standardsdata_showStdView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_showStdView::toString() +{ + responsebody.reserve(10898); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n\n \n \n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n
                \n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n

                Semi-Finale Anzeige einer Vorgabe.

                \n\n\n "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("\n\n\n "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += tr("\n\n\n  0\n\n\n
                \n
                \n
                \n ×\n \n
                \n
                \n
                \n
                \n\n\n
                \n Kommentar zu \" \"
                \n \n \n \n
                \n   \n
                \n\n
                \n
                \n\n
                \n
                \n
                \n
                Objekt-Attribute\n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n WW = World Wide\n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                Release\n
                \n
                \n
                \n
                \n
                \n
                \n \n \n nur de-/aktive Bausteine\n
                \n
                \n
                \n
                \n \n \n alle Objekt-spezifische Bausteine\n
                \n
                \n
                \n
                \n\n
                \n
                \n \n

                \n \n  Vorgabe drucken\n \n

                \n\n\n
                \n\n
                \n\n
                \n\n\n
                \n \n \n
                \n\n\n\n\n\n\n\n\n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_showStdView) + +#include "standardsdata_showStdView.moc" diff --git a/views/_src/standardsdata_showView.cpp b/views/_src/standardsdata_showView.cpp new file mode 100644 index 0000000..7e3e97a --- /dev/null +++ b/views/_src/standardsdata_showView.cpp @@ -0,0 +1,80 @@ +#include +#include +#include "standardsdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_showView : public TActionView +{ + Q_OBJECT +public: + standardsdata_showView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_showView::toString() +{ + responsebody.reserve(7307); + responsebody += QStringLiteral("\n"); + tfetch(StandardsData, standardsData); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", standardsData.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n Editor\n zurück\n
                \n\n
                \n

                \n

                \n

                \n\n
                \n

                Daten Anzeige

                \n\n
                \n


                "); + responsebody += QVariant(standardsData.specContent()).toString(); + responsebody += QStringLiteral("

                \n\n
                \n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", standardsData.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n Editor\n zurück\n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_showView) + +#include "standardsdata_showView.moc" diff --git a/views/_src/standardsdata_showWasteView.cpp b/views/_src/standardsdata_showWasteView.cpp new file mode 100644 index 0000000..63868fb --- /dev/null +++ b/views/_src/standardsdata_showWasteView.cpp @@ -0,0 +1,75 @@ +#include +#include +#include "standardsdata.h" +#include "standardsdatawaste.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdata_showWasteView : public TActionView +{ + Q_OBJECT +public: + standardsdata_showWasteView() : TActionView() { } + QString toString(); +}; + +QString standardsdata_showWasteView::toString() +{ + responsebody.reserve(6712); + responsebody += QStringLiteral("\n"); + tfetch(StandardsDataWaste, standardsDataWaste); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n \n \n \n\n \n\n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("removeWaste", standardsDataWaste.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n zurück\n
                \n\n
                \n

                \n

                \n

                \n\n

                \n

                \n

                \n

                \n

                \n

                \n

                \n

                \n

                \n

                \n\n
                \n\n
                \n

                Daten Anzeige

                \n


                \n

                "); + responsebody += QVariant(standardsDataWaste.specContent()).toString(); + responsebody += QStringLiteral("

                \n

                \n
                "); + responsebody += THttpUtility::htmlEscape(standardsDataWaste.specContent()); + responsebody += QStringLiteral("
                \n
                \n
                \n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("removeWaste", standardsDataWaste.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n zurück\n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdata_showWasteView) + +#include "standardsdata_showWasteView.moc" diff --git a/views/_src/standardsdatacomments_createView.cpp b/views/_src/standardsdatacomments_createView.cpp new file mode 100644 index 0000000..4ba8824 --- /dev/null +++ b/views/_src/standardsdatacomments_createView.cpp @@ -0,0 +1,58 @@ +#include +#include +#include "standardsdatacomments.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdatacomments_createView : public TActionView +{ + Q_OBJECT +public: + standardsdatacomments_createView() : TActionView() { } + QString toString(); +}; + +QString standardsdatacomments_createView::toString() +{ + responsebody.reserve(4766); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, standardsDataComments); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n
                \n\n\n
                \n Anzeige\n« zurück\n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdatacomments_createView) + +#include "standardsdatacomments_createView.moc" diff --git a/views/_src/standardsdatacomments_indexView.cpp b/views/_src/standardsdatacomments_indexView.cpp new file mode 100644 index 0000000..748d434 --- /dev/null +++ b/views/_src/standardsdatacomments_indexView.cpp @@ -0,0 +1,45 @@ +#include +#include +#include "standardsdatacomments.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdatacomments_indexView : public TActionView +{ + Q_OBJECT +public: + standardsdatacomments_indexView() : TActionView() { } + QString toString(); +}; + +QString standardsdatacomments_indexView::toString() +{ + responsebody.reserve(2813); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n\n
                \n

                Anzahl Kommentare: "); + tehex(count_id); + responsebody += QStringLiteral("

                \n

                Anzahl Kommentatoren: "); + tehex(count_users); + responsebody += QStringLiteral("

                \n
                \n \n
                \n\n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdatacomments_indexView) + +#include "standardsdatacomments_indexView.moc" diff --git a/views/_src/standardsdatacomments_list_allView.cpp b/views/_src/standardsdatacomments_list_allView.cpp new file mode 100644 index 0000000..40a9208 --- /dev/null +++ b/views/_src/standardsdatacomments_list_allView.cpp @@ -0,0 +1,72 @@ +#include +#include +#include "standardsdatacomments.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdatacomments_list_allView : public TActionView +{ + Q_OBJECT +public: + standardsdatacomments_list_allView() : TActionView() { } + QString toString(); +}; + +QString standardsdatacomments_list_allView::toString() +{ + responsebody.reserve(6712); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n
                \n\n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, standardsDataCommentsList); + for (const auto &i : standardsDataCommentsList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                IDComment CreatedSpec IDSpec TitleSpec VersionUsernameUser CommentBaustein
                "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specId()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specTitle()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specVersion()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.username()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.userComment()); + responsebody += QStringLiteral("\n \n \n \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdatacomments_list_allView) + +#include "standardsdatacomments_list_allView.moc" diff --git a/views/_src/standardsdatacomments_saveView.cpp b/views/_src/standardsdatacomments_saveView.cpp new file mode 100644 index 0000000..bce8a3f --- /dev/null +++ b/views/_src/standardsdatacomments_saveView.cpp @@ -0,0 +1,62 @@ +#include +#include +#include "standardsdatacomments.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdatacomments_saveView : public TActionView +{ + Q_OBJECT +public: + standardsdatacomments_saveView() : TActionView() { } + QString toString(); +}; + +QString standardsdatacomments_saveView::toString() +{ + responsebody.reserve(5493); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, standardsDataComments); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n\n Anzeige\n« zurück\n\n"); + responsebody += QVariant(formTag(urla("save", standardsDataComments["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n
                \n\n\n
                \n\n Anzeige\n« zurück\n\n
                \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdatacomments_saveView) + +#include "standardsdatacomments_saveView.moc" diff --git a/views/_src/standardsdatacomments_showView.cpp b/views/_src/standardsdatacomments_showView.cpp new file mode 100644 index 0000000..17f746d --- /dev/null +++ b/views/_src/standardsdatacomments_showView.cpp @@ -0,0 +1,64 @@ +#include +#include +#include "standardsdatacomments.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsdatacomments_showView : public TActionView +{ + Q_OBJECT +public: + standardsdatacomments_showView() : TActionView() { } + QString toString(); +}; + +QString standardsdatacomments_showView::toString() +{ + responsebody.reserve(5722); + responsebody += QStringLiteral("\n"); + tfetch(StandardsDataComments, standardsDataComments); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + responsebody += QStringLiteral(" "); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + responsebody += QStringLiteral(" "); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", standardsDataComments.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
                \n\n
                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n


                "); + responsebody += QVariant(standardsDataComments.userComment()).toString(); + responsebody += QStringLiteral("

                \n
                \n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", standardsDataComments.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n« zurück\n\n
                \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsdatacomments_showView) + +#include "standardsdatacomments_showView.moc" diff --git a/views/_src/standardsmeta_createView.cpp b/views/_src/standardsmeta_createView.cpp new file mode 100644 index 0000000..e8bc0a7 --- /dev/null +++ b/views/_src/standardsmeta_createView.cpp @@ -0,0 +1,60 @@ +#include +#include +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsmeta_createView : public TActionView +{ + Q_OBJECT +public: + standardsmeta_createView() : TActionView() { } + QString toString(); +}; + +QString standardsmeta_createView::toString() +{ + responsebody.reserve(3393); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, standardsMeta); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n

                New Standards Meta

                \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsmeta_createView) + +#include "standardsmeta_createView.moc" diff --git a/views/_src/standardsmeta_indexView.cpp b/views/_src/standardsmeta_indexView.cpp new file mode 100644 index 0000000..25fc63b --- /dev/null +++ b/views/_src/standardsmeta_indexView.cpp @@ -0,0 +1,37 @@ +#include +#include +#include "standardsdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsmeta_indexView : public TActionView +{ + Q_OBJECT +public: + standardsmeta_indexView() : TActionView() { } + QString toString(); +}; + +QString standardsmeta_indexView::toString() +{ + responsebody.reserve(1808); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n\n\n\n\n\n \n\n
                \n

                Admin::Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                Listing Standards Data

                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n \n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsmeta_indexView) + +#include "standardsmeta_indexView.moc" diff --git a/views/_src/standardsmeta_list_allView.cpp b/views/_src/standardsmeta_list_allView.cpp new file mode 100644 index 0000000..1b4a0f2 --- /dev/null +++ b/views/_src/standardsmeta_list_allView.cpp @@ -0,0 +1,70 @@ +#include +#include +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsmeta_list_allView : public TActionView +{ + Q_OBJECT +public: + standardsmeta_list_allView() : TActionView() { } + QString toString(); +}; + +QString standardsmeta_list_allView::toString() +{ + responsebody.reserve(3196); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

                Listing Standards Meta

                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n"); + responsebody += QVariant(linkTo("Create a new Standards Meta", urla("create"))).toString(); + responsebody += QStringLiteral("
                \n
                \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, standardsMetaList); + for (const auto &i : standardsMetaList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                IDSpec Data IDSpec CreatedSpec Last ModifiedSpec Valid StartSpec Valid EndLast EditorG LegacyResponsibilitySpec CommentSpec MarkerGroups
                "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specDataId()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specCreated()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specLastModified()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specValidStart()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specValidEnd()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.lastEditor()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.gLegacy()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.responsibility()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specComment()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.specMarker()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.groups()); + responsebody += QStringLiteral("\n "); + responsebody += QVariant(linkTo("Show", urla("show", i.id()))).toString(); + responsebody += QStringLiteral("\n "); + responsebody += QVariant(linkTo("Edit", urla("save", i.id()))).toString(); + responsebody += QStringLiteral("\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", i.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n
                \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsmeta_list_allView) + +#include "standardsmeta_list_allView.moc" diff --git a/views/_src/standardsmeta_saveView.cpp b/views/_src/standardsmeta_saveView.cpp new file mode 100644 index 0000000..5d29d50 --- /dev/null +++ b/views/_src/standardsmeta_saveView.cpp @@ -0,0 +1,64 @@ +#include +#include +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsmeta_saveView : public TActionView +{ + Q_OBJECT +public: + standardsmeta_saveView() : TActionView() { } + QString toString(); +}; + +QString standardsmeta_saveView::toString() +{ + responsebody.reserve(3928); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, standardsMeta); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n

                Editing Standards Meta

                \n\n"); + responsebody += QVariant(formTag(urla("save", standardsMeta["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n"); + responsebody += QVariant(linkTo("Show", urla("show", standardsMeta["id"]))).toString(); + responsebody += QStringLiteral(" |\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsmeta_saveView) + +#include "standardsmeta_saveView.moc" diff --git a/views/_src/standardsmeta_showBy_spec_data_idView.cpp b/views/_src/standardsmeta_showBy_spec_data_idView.cpp new file mode 100644 index 0000000..5154190 --- /dev/null +++ b/views/_src/standardsmeta_showBy_spec_data_idView.cpp @@ -0,0 +1,62 @@ +#include +#include +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsmeta_showBy_spec_data_idView : public TActionView +{ + Q_OBJECT +public: + standardsmeta_showBy_spec_data_idView() : TActionView() { } + QString toString(); +}; + +QString standardsmeta_showBy_spec_data_idView::toString() +{ + responsebody.reserve(2669); + responsebody += QStringLiteral("\n"); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n

                Showing Standards Meta

                \n
                ID
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.id()); + responsebody += QStringLiteral("

                \n
                Spec Data ID
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specDataId()); + responsebody += QStringLiteral("

                \n
                Spec Created
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specCreated()); + responsebody += QStringLiteral("

                \n
                Spec Last Modified
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specLastModified()); + responsebody += QStringLiteral("

                \n
                Spec Valid Start
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specValidStart()); + responsebody += QStringLiteral("

                \n
                Spec Valid End
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specValidEnd()); + responsebody += QStringLiteral("

                \n
                Last Editor
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.lastEditor()); + responsebody += QStringLiteral("

                \n
                G Legacy
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.gLegacy()); + responsebody += QStringLiteral("

                \n
                Responsibility
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.responsibility()); + responsebody += QStringLiteral("

                \n
                Spec Comment
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specComment()); + responsebody += QStringLiteral("

                \n
                Spec Marker
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specMarker()); + responsebody += QStringLiteral("

                \n
                Groups
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.groups()); + responsebody += QStringLiteral("

                \n\n"); + responsebody += QVariant(linkTo("Edit", urla("save", standardsMeta.id()))).toString(); + responsebody += QStringLiteral(" |\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsmeta_showBy_spec_data_idView) + +#include "standardsmeta_showBy_spec_data_idView.moc" diff --git a/views/_src/standardsmeta_showView.cpp b/views/_src/standardsmeta_showView.cpp new file mode 100644 index 0000000..a5956fa --- /dev/null +++ b/views/_src/standardsmeta_showView.cpp @@ -0,0 +1,62 @@ +#include +#include +#include "standardsmeta.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT standardsmeta_showView : public TActionView +{ + Q_OBJECT +public: + standardsmeta_showView() : TActionView() { } + QString toString(); +}; + +QString standardsmeta_showView::toString() +{ + responsebody.reserve(2669); + responsebody += QStringLiteral("\n"); + tfetch(StandardsMeta, standardsMeta); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n

                Showing Standards Meta

                \n
                ID
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.id()); + responsebody += QStringLiteral("

                \n
                Spec Data ID
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specDataId()); + responsebody += QStringLiteral("

                \n
                Spec Created
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specCreated()); + responsebody += QStringLiteral("

                \n
                Spec Last Modified
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specLastModified()); + responsebody += QStringLiteral("

                \n
                Spec Valid Start
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specValidStart()); + responsebody += QStringLiteral("

                \n
                Spec Valid End
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specValidEnd()); + responsebody += QStringLiteral("

                \n
                Last Editor
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.lastEditor()); + responsebody += QStringLiteral("

                \n
                G Legacy
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.gLegacy()); + responsebody += QStringLiteral("

                \n
                Responsibility
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.responsibility()); + responsebody += QStringLiteral("

                \n
                Spec Comment
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specComment()); + responsebody += QStringLiteral("

                \n
                Spec Marker
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.specMarker()); + responsebody += QStringLiteral("

                \n
                Groups
                "); + responsebody += THttpUtility::htmlEscape(standardsMeta.groups()); + responsebody += QStringLiteral("

                \n\n"); + responsebody += QVariant(linkTo("Edit", urla("save", standardsMeta.id()))).toString(); + responsebody += QStringLiteral(" |\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(standardsmeta_showView) + +#include "standardsmeta_showView.moc" diff --git a/views/_src/stdsystem_createView.cpp b/views/_src/stdsystem_createView.cpp new file mode 100644 index 0000000..d28ddb4 --- /dev/null +++ b/views/_src/stdsystem_createView.cpp @@ -0,0 +1,50 @@ +#include +#include +#include "stdsystem.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT stdsystem_createView : public TActionView +{ + Q_OBJECT +public: + stdsystem_createView() : TActionView() { } + QString toString(); +}; + +QString stdsystem_createView::toString() +{ + responsebody.reserve(2136); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, stdSystem); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n

                New Std System

                \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(stdsystem_createView) + +#include "stdsystem_createView.moc" diff --git a/views/_src/stdsystem_imprintView.cpp b/views/_src/stdsystem_imprintView.cpp new file mode 100644 index 0000000..a9e5d97 --- /dev/null +++ b/views/_src/stdsystem_imprintView.cpp @@ -0,0 +1,35 @@ +#include +#include +#include "stdsystem.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT stdsystem_imprintView : public TActionView +{ + Q_OBJECT +public: + stdsystem_imprintView() : TActionView() { } + QString toString(); +}; + +QString stdsystem_imprintView::toString() +{ + responsebody.reserve(51628); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n \n \n \n\n \n \n \n\n\n\n\n\n \n\n
                \n

                IaaS::IT-IS ReST API

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                Imprint / Impressum der IT-IS ReST API

                \n

                \n

                \n \n "); + techoex(appversion); + responsebody += QStringLiteral("
                \n © Copyright 2019-"); + techoex(year); + responsebody += tr(" ZHENG Robert\n
                \n
                \n

                \n\n
                \n\n
                \n

                Informationspflicht laut § 5 TMG.

                \n

                \n

                Owner and technical contactperson / Eigentümer und technischer Ansprechpartner:

                \nZHENG Robert / Zhèng Bó Tè (郑 伯 特)\n
                \n\"RRBBP\"\n

                \n

                Umsatzsteuer-Identifikationsnummer gemaess §27a Umsatzsteuergesetz: -- privat / private nicht-kommerzielle Entwicklungsumgebung --

                \n

                EU-Streitschlichtung

                \n

                Gemäß Verordnung über Online-Streitbeilegung in Verbraucherangelegenheiten (ODR-Verordnung) möchten wir Sie über die Online-Streitbeilegungsplattform (OS-Plattform) informieren.
                \nVerbraucher haben die Möglichkeit, Beschwerden an die Online Streitbeilegungsplattform der Europäischen Kommission unter http://ec.europa.eu/odr?tid=321227317 zu richten. Die dafür notwendigen Kontaktdaten finden Sie oberhalb in unserem Impressum.

                \n

                Wir möchten Sie jedoch darauf hinweisen, dass wir nicht bereit oder verpflichtet sind, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.

                \n

                Haftung für Inhalte dieser Website

                \n

                Wir entwickeln die Inhalte dieser Webseite ständig weiter und bemühen uns korrekte und aktuelle Informationen bereitzustellen. Laut Telemediengesetz (TMG) §7 (1) sind wir als Diensteanbieter für eigene Informationen, die wir zur Nutzung bereitstellen, nach den allgemeinen Gesetzen verantwortlich. Leider können wir keine Haftung für die Korrektheit aller Inhalte auf dieser Webseite übernehmen, speziell für jene die seitens Dritter bereitgestellt wurden. Als Diensteanbieter im Sinne der §§ 8 bis 10 sind wir nicht verpflichtet, die von ihnen übermittelten oder gespeicherten Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.

                \n

                Unsere Verpflichtungen zur Entfernung von Informationen oder zur Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen aufgrund von gerichtlichen oder behördlichen Anordnungen bleiben auch im Falle unserer Nichtverantwortlichkeit nach den §§ 8 bis 10 unberührt.

                \n

                Sollten Ihnen problematische oder rechtswidrige Inhalte auffallen, bitte wir Sie uns umgehend zu kontaktieren, damit wir die rechtswidrigen Inhalte entfernen können. Sie finden die Kontaktdaten im Impressum.

                \n

                Haftung für Links auf dieser Website

                \n

                Unsere Webseite enthält Links zu anderen Webseiten für deren Inhalt wir nicht verantwortlich sind. Haftung für verlinkte Websites besteht für uns nicht, da wir keine Kenntnis rechtswidriger Tätigkeiten hatten und haben, uns solche Rechtswidrigkeiten auch bisher nicht aufgefallen sind und wir Links sofort entfernen würden, wenn uns Rechtswidrigkeiten bekannt werden.

                \n

                Wenn Ihnen rechtswidrige Links auf unserer Website auffallen, bitte wir Sie uns zu kontaktieren. Sie finden die Kontaktdaten im Impressum.

                \n

                Urheberrechtshinweis

                \n

                Alle Inhalte dieser Webseite (Bilder, Fotos, Texte, Videos) unterliegen dem Urheberrecht der Bundesrepublik Deutschland. Bitte fragen Sie uns bevor Sie die Inhalte dieser Website verbreiten, vervielfältigen oder verwerten wie zum Beispiel auf anderen Websites erneut veröffentlichen. Falls notwendig, werden wir die unerlaubte Nutzung von Teilen der Inhalte unserer Seite rechtlich verfolgen.

                \n

                Sollten Sie auf dieser Webseite Inhalte finden, die das Urheberrecht verletzen, bitten wir Sie uns zu kontaktieren.

                \n

                Bildernachweis

                \n

                Die Bilder, Fotos und Grafiken auf dieser Webseite sind urheberrechtlich geschützt.

                \n

                Die Bilderrechte liegen bei dem folgenden Fotografen bzw. Ersteller, sofern nicht jeweils anders angegeben:

                \n
                  \n
                • ZHENG Robert
                • \n
                \n

                Datenschutzerklärung

                \n

                Datenschutz

                \n

                Wir haben diese Datenschutzerklärung (Fassung 02.11.2020-321227317) verfasst, um Ihnen gemäß der Vorgaben der Datenschutz-Grundverordnung (EU) 2016/679 zu erklären, welche Informationen wir sammeln, wie wir Daten verwenden und welche Entscheidungsmöglichkeiten Sie als Besucher dieser Webseite haben.

                \n

                Leider liegt es in der Natur der Sache, dass diese Erklärungen sehr technisch klingen, wir haben uns bei der Erstellung jedoch bemüht die wichtigsten Dinge so einfach und klar wie möglich zu beschreiben.

                \n

                Automatische Datenspeicherung

                \n

                Wenn Sie heutzutage Webseiten besuchen, werden gewisse Informationen automatisch erstellt und gespeichert, so auch auf dieser Webseite.

                \n

                Wenn Sie unsere Webseite so wie jetzt gerade besuchen, speichert unser Webserver (Computer auf dem diese Webseite gespeichert ist) automatisch Daten wie

                \n
                  \n
                • die Adresse (URL) der aufgerufenen Webseite
                • \n
                • Browser und Browserversion
                • \n
                • das verwendete Betriebssystem
                • \n
                • die Adresse (URL) der zuvor besuchten Seite (Referrer URL)
                • \n
                • den Hostname und die IP-Adresse des Geräts von welchem aus zugegriffen wird
                • \n
                • Datum und Uhrzeit
                • \n
                \n

                in Dateien (Webserver-Logfiles).

                \n

                In der Regel werden Webserver-Logfiles zwei Wochen gespeichert und danach automatisch gelöscht. Wir geben diese Daten nicht weiter, können jedoch nicht ausschließen, dass diese Daten beim Vorliegen von rechtswidrigem Verhalten eingesehen werden.

                \n

                Cookies

                \n

                Unsere Website verwendet HTTP-Cookies um nutzerspezifische Daten zu speichern.
                \nIm Folgenden erklären wir, was Cookies sind und warum Sie genutzt werden, damit Sie die folgende Datenschutzerklärung besser verstehen.

                \n

                Was genau sind Cookies?

                \n

                Immer wenn Sie durch das Internet surfen, verwenden Sie einen Browser. Bekannte Browser sind beispielsweise Chrome, Safari, Firefox, Internet Explorer und Microsoft Edge. Die meisten Webseiten speichern kleine Text-Dateien in Ihrem Browser. Diese Dateien nennt man Cookies.

                \n

                Eines ist nicht von der Hand zu weisen: Cookies sind echt nützliche Helferlein. Fast alle Webseiten verwenden Cookies. Genauer gesprochen sind es HTTP-Cookies, da es auch noch andere Cookies für andere Anwendungsbereiche gibt. HTTP-Cookies sind kleine Dateien, die von unserer Website auf Ihrem Computer gespeichert werden. Diese Cookie-Dateien werden automatisch im Cookie-Ordner, quasi dem “Hirn” Ihres Browsers, untergebracht. Ein Cookie besteht aus einem Namen und einem Wert. Bei der Definition eines Cookies müssen zusätzlich ein oder mehrere Attribute angegeben werden.

                \n

                Cookies speichern gewisse Nutzerdaten von Ihnen, wie beispielsweise Sprache oder persönliche Seiteneinstellungen. Wenn Sie unsere Seite wieder aufrufen, übermittelt Ihr Browser die „userbezogenen“ Informationen an unsere Seite zurück. Dank der Cookies weiß unsere Website, wer Sie sind und bietet Ihnen Ihre gewohnte Standardeinstellung. In einigen Browsern hat jedes Cookie eine eigene Datei, in anderen wie beispielsweise Firefox sind alle Cookies in einer einzigen Datei gespeichert.

                \n

                Es gibt sowohl Erstanbieter Cookies als auch Drittanbieter-Cookies. Erstanbieter-Cookies werden direkt von unserer Seite erstellt, Drittanbieter-Cookies werden von Partner-Webseiten (z.B. Google Analytics) erstellt. Jedes Cookie ist individuell zu bewerten, da jedes Cookie andere Daten speichert. Auch die Ablaufzeit eines Cookies variiert von ein paar Minuten bis hin zu ein paar Jahren. Cookies sind keine Software-Programme und enthalten keine Viren, Trojaner oder andere „Schädlinge“. Cookies können auch nicht auf Informationen Ihres PCs zugreifen.

                \n

                Die Cookie-Daten von IaaS::ITIS API sehen zum Beispiel folgendermaßen aus:

                \n
                  \n
                • Name: itisApiCookie
                • \n
                • Ablaufzeit: 3 Monate
                • \n
                • Verwendung: Cookie-Nutzung zugestimmt?
                • \n
                • Wert: y
                • \n
                \n
                  \n
                • Name: TFSESSION
                • \n
                • Ablaufzeit: solange der Browser geöffnet ist
                • \n
                • Verwendung: ist der Anwender im ITIS-Portal angemeldet?
                • \n
                • Wert: jwAAAPEqAAAAAgAAABYAaQBkAG/mHJhQvCar3i/d8MBnmA= (Bsp.-Wert wurde zur besseren Lesbarkeit gekürzt)
                • \n
                \n

                Ein Browser sollte folgende Mindestgrößen unterstützen:

                \n
                  \n
                • Ein Cookie soll mindestens 4096 Bytes enthalten können
                • \n
                • Pro Domain sollen mindestens 50 Cookies gespeichert werden können
                • \n
                • Insgesamt sollen mindestens 3000 Cookies gespeichert werden können
                • \n
                \n

                Welche Arten von Cookies gibt es?

                \n

                Die Frage welche Cookies wir im Speziellen verwenden, hängt von den verwendeten Diensten ab und wird in der folgenden Abschnitten der Datenschutzerklärung geklärt. An dieser Stelle möchten wir kurz auf die verschiedenen Arten von HTTP-Cookies eingehen.

                \n

                Man kann 4 Arten von Cookies unterscheiden:

                \n

                \nUnbedingt notwendige Cookies
                \n
                Diese Cookies sind nötig, um grundlegende Funktionen der Website sicherzustellen. Zum Beispiel braucht es diese Cookies, wenn ein User ein Produkt in den Warenkorb legt, dann auf anderen Seiten weitersurft und später erst zur Kasse geht. Durch diese Cookies wird der Warenkorb nicht gelöscht, selbst wenn der User sein Browserfenster schließt.

                \n

                \nFunktionelle Cookies
                \n
                Diese Cookies sammeln Infos über das Userverhalten und ob der User etwaige Fehlermeldungen bekommt. Zudem werden mithilfe dieser Cookies auch die Ladezeit und das Verhalten der Website bei verschiedenen Browsern gemessen.

                \n

                \nZielorientierte Cookies
                \n
                Diese Cookies sorgen für eine bessere Nutzerfreundlichkeit. Beispielsweise werden eingegebene Standorte, Schriftgrößen oder Formulardaten gespeichert.

                \n

                \nWerbe-Cookies
                \n
                Diese Cookies werden auch Targeting-Cookies genannt. Sie dienen dazu dem User individuell angepasste Werbung zu liefern. Das kann sehr praktisch, aber auch sehr nervig sein.

                \n

                Üblicherweise werden Sie beim erstmaligen Besuch einer Webseite gefragt, welche dieser Cookiearten Sie zulassen möchten. Und natürlich wird diese Entscheidung auch in einem Cookie gespeichert.

                \n

                Wie kann ich Cookies löschen?

                \n

                Wie und ob Sie Cookies verwenden wollen, entscheiden Sie selbst. Unabhängig von welchem Service oder welcher Website die Cookies stammen, haben Sie immer die Möglichkeit Cookies zu löschen, nur teilweise zuzulassen oder zu deaktivieren. Zum Beispiel können Sie Cookies von Drittanbietern blockieren, aber alle anderen Cookies zulassen.

                \n

                Wenn Sie feststellen möchten, welche Cookies in Ihrem Browser gespeichert wurden, wenn Sie Cookie-Einstellungen ändern oder löschen wollen, können Sie dies in Ihren Browser-Einstellungen finden:

                \n

                \nChrome: Cookies in Chrome löschen, aktivieren und verwalten\n

                \n

                \nSafari: Verwalten von Cookies und Websitedaten mit Safari\n

                \n

                \nFirefox: Cookies löschen, um Daten zu entfernen, die Websites auf Ihrem Computer abgelegt haben\n

                \n

                \nInternet Explorer: Löschen und Verwalten von Cookies\n

                \n

                \nMicrosoft Edge: Löschen und Verwalten von Cookies\n

                \n

                Falls Sie grundsätzlich keine Cookies haben wollen, können Sie Ihren Browser so einrichten, dass er Sie immer informiert, wenn ein Cookie gesetzt werden soll. So können Sie bei jedem einzelnen Cookie entscheiden, ob Sie das Cookie erlauben oder nicht. Die Vorgangsweise ist je nach Browser verschieden. Am besten ist es Sie suchen die Anleitung in Google mit dem Suchbegriff “Cookies löschen Chrome” oder “Cookies deaktivieren Chrome” im Falle eines Chrome Browsers oder tauschen das Wort “Chrome” gegen den Namen Ihres Browsers, z.B. Edge, Firefox, Safari aus.

                \n

                Wie sieht es mit meinem Datenschutz aus?

                \n

                Seit 2009 gibt es die sogenannten „Cookie-Richtlinien“. Darin ist festgehalten, dass das Speichern von Cookies eine Einwilligung von Ihnen verlangt. Innerhalb der EU-Länder gibt es allerdings noch sehr unterschiedliche Reaktionen auf diese Richtlinien. In Deutschland wurden die Cookie-Richtlinien nicht als nationales Recht umgesetzt. Stattdessen erfolgte die Umsetzung dieser Richtlinie weitgehend in § 15 Abs.3 des Telemediengesetzes (TMG).

                \n

                Wenn Sie mehr über Cookies wissen möchten und technischen Dokumentationen nicht scheuen, empfehlen wir https://tools.ietf.org/html/rfc6265, dem Request for Comments der Internet Engineering Task Force (IETF) namens “HTTP State Management Mechanism”.

                \n

                Speicherung persönlicher Daten

                \n

                Persönliche Daten, die Sie uns auf dieser Website elektronisch übermitteln, wie zum Beispiel Name, E-Mail-Adresse, Adresse oder andere persönlichen Angaben im Rahmen der Übermittlung eines Formulars oder Kommentaren im Blog, werden von uns gemeinsam mit dem Zeitpunkt und der IP-Adresse nur zum jeweils angegebenen Zweck verwendet, sicher verwahrt und nicht an Dritte weitergegeben.

                \n

                Wir nutzen Ihre persönlichen Daten somit nur für die Kommunikation mit jenen Besuchern, die Kontakt ausdrücklich wünschen und für die Abwicklung der auf dieser Webseite angebotenen Dienstleistungen und Produkte. Wir geben Ihre persönlichen Daten ohne Zustimmung nicht weiter, können jedoch nicht ausschließen, dass diese Daten beim Vorliegen von rechtswidrigem Verhalten eingesehen werden.

                \n

                Wenn Sie uns persönliche Daten per E-Mail schicken – somit abseits dieser Webseite – können wir keine sichere Übertragung und den Schutz Ihrer Daten garantieren. Wir empfehlen Ihnen, vertrauliche Daten niemals unverschlüsselt per E-Mail zu übermitteln.

                \n

                Die Rechtsgrundlage besteht nach Artikel 6  Absatz 1 a DSGVO (Rechtmäßigkeit der Verarbeitung) darin, dass Sie uns die Einwilligung zur Verarbeitung der von Ihnen eingegebenen Daten geben. Sie können diesen Einwilligung jederzeit widerrufen – eine formlose E-Mail reicht aus, Sie finden unsere Kontaktdaten im Impressum.

                \n

                Rechte laut Datenschutzgrundverordnung

                \n

                Ihnen stehen laut den Bestimmungen der DSGVO grundsätzlich die folgende Rechte zu:

                \n
                  \n
                • Recht auf Berichtigung (Artikel 16 DSGVO)
                • \n
                • Recht auf Löschung („Recht auf Vergessenwerden“) (Artikel 17 DSGVO)
                • \n
                • Recht auf Einschränkung der Verarbeitung (Artikel 18 DSGVO)
                • \n
                • Recht auf Benachrichtigung – Mitteilungspflicht im Zusammenhang mit der Berichtigung oder Löschung personenbezogener Daten oder der Einschränkung der Verarbeitung (Artikel 19 DSGVO)
                • \n
                • Recht auf Datenübertragbarkeit (Artikel 20 DSGVO)
                • \n
                • Widerspruchsrecht (Artikel 21 DSGVO)
                • \n
                • Recht, nicht einer ausschließlich auf einer automatisierten Verarbeitung — einschließlich Profiling — beruhenden Entscheidung unterworfen zu werden (Artikel 22 DSGVO)
                • \n
                \n

                Wenn Sie glauben, dass die Verarbeitung Ihrer Daten gegen das Datenschutzrecht verstößt oder Ihre datenschutzrechtlichen Ansprüche sonst in einer Weise verletzt worden sind, können Sie sich an die Bundesbeauftragte für den Datenschutz und die Informationsfreiheit (BfDI) wenden.

                \n

                TLS-Verschlüsselung mit https

                \n

                Wir verwenden https um Daten abhörsicher im Internet zu übertragen (Datenschutz durch Technikgestaltung Artikel 25 Absatz 1 DSGVO). Durch den Einsatz von TLS (Transport Layer Security), einem Verschlüsselungsprotokoll zur sicheren Datenübertragung im Internet können wir den Schutz vertraulicher Daten sicherstellen. Sie erkennen die Benutzung dieser Absicherung der Datenübertragung am kleinen Schloßsymbol links oben im Browser und der Verwendung des Schemas https (anstatt http) als Teil unserer Internetadresse.

                \n

                OpenStreetMap Datenschutzerklärung

                \n

                Wir haben auf unserer Website Kartenausschnitte des Online-Kartentools „OpenStreetMap“ eingebunden. Dabei handelt es sich um ein sogenanntes Open-Source-Mapping, welches wir über eine API (Schnittstelle) abrufen können. Angeboten wird diese Funktion von OpenStreetMap Foundation, St John’s Innovation Centre, Cowley Road, Cambridge, CB4 0WS, United Kingdom. Durch die Verwendung dieser Kartenfunktion wird Ihre IP-Adresse an OpenStreetMap weitergeleitet. In dieser Datenschutzerklärung erfahren Sie warum wir Funktionen des Tools OpenStreetMap verwenden, wo welche Daten gespeichert werden und wie Sie diese Datenspeicherung verhindern können.

                \n

                Was ist OpenStreetMap?

                \n

                Das Projekt OpenStreetMap wurde 2004 ins Leben gerufen. Ziel des Projekts ist und war es, eine freie Weltkarte zu erschaffen. User sammeln weltweit Daten etwa über Gebäude, Wälder, Flüsse und Straßen. So entstand über die Jahre eine umfangreiche, von Usern selbst erstellte digitale Weltkarte. Selbstverständlich ist die Karte, nicht vollständig, aber in den meisten Regionen mit sehr vielen Daten ausgestattet.

                \n

                Warum verwenden wir OpenStreetMap auf unserer Website?

                \n

                Unsere Website soll Ihnen in erster Linie hilfreich sein. Und das ist sie aus unserer Sicht immer dann, wenn man Information schnell und einfach findet. Da geht es natürlich einerseits um unsere Dienstleistungen und Produkte, andererseits sollen Ihnen auch weitere hilfreiche Informationen zur Verfügung stehen. Deshalb nutzen wir auch den Kartendienst OpenStreetMap. Denn so können wir Ihnen beispielsweise genau zeigen, wie Sie unsere Firma finden. Die Karte zeigt Ihnen den besten Weg zu uns und Ihre Anfahrt wird zum Kinderspiel.

                \n

                Welche Daten werden von OpenStreetMap gespeichert?

                \n

                Wenn Sie eine unserer Webseiten besuchen, die OpenStreetMap anbietet, werden Nutzerdaten an den Dienst übermittelt und dort gespeichert. OpenStreetMap sammelt etwa Informationen über Ihre Interaktionen mit der digitalen Karte, Ihre IP-Adresse, Daten zu Ihrem Browser, Gerätetyp, Betriebssystem und an welchem Tag und zu welcher Uhrzeit Sie den Dienst in Anspruch genommen haben. Dafür wird auch Tracking-Software zur Aufzeichnung von Userinteraktionen verwendet. Das Unternehmen gibt hier in der eigenen Datenschutzerklärung das Analysetool „Piwik“ an.

                \n

                Die erhobenen Daten sind in Folge den entsprechenden Arbeitsgruppen der OpenStreetMap Foundation zugänglich. Laut dem Unternehmen werden persönliche Daten nicht an andere Personen oder Firmen weitergegeben, außer dies ist rechtlich notwendig. Der Drittanbieter Piwik speichert zwar Ihre IP-Adresse, allerdings in gekürzter Form.

                \n

                Folgendes Cookie kann in Ihrem Browser gesetzt werden, wenn Sie mit OpenStreetMap auf unserer Website interagieren:

                \n

                \nName: _osm_location
                \nWert: 9.63312%7C52.41500%7C17%7CM
                \nVerwendungszweck: Das Cookie wird benötigt, um die Inhalte von OpenStreetMap zu entsperren.
                \nAblaufdatum: nach 10 Jahren

                \n

                Wenn Sie sich das Vollbild der Karte ansehen wollen, werden Sie auf die OpenStreetMap-Website verlinkt. Dort können unter anderem folgende Cookies in Ihrem Browser gespeichert werden:

                \n

                \nName: _osm_totp_token
                \nWert: 148253321227317-2
                \nVerwendungszweck: Dieses Cookie wird benutzt, um die Bedienung des Kartenausschnitts zu gewährleisten.
                \nAblaufdatum: nach einer Stunde

                \n

                \nName: _osm_session
                \nWert: 1d9bfa122e0259d5f6db4cb8ef653a1c
                \nVerwendungszweck: Mit Hilfe des Cookies können Sitzungsinformationen (also Userverhalten) gespeichert werden.
                \nAblaufdatum: nach Sitzungsende

                \n

                \nName: _pk_id.1.cf09
                \nWert: 4a5.1593684142.2.1593688396.1593688396321227317-9
                \nVerwendungszweck: Dieses Cookie wird von Piwik gesetzt, um Userdaten wie etwa das Klickverhalten zu speichern bzw. zu messen.
                \nAblaufdatum: nach einem Jahr

                \n

                Wie lange und wo werden die Daten gespeichert?

                \n

                Die API-Server, die Datenbanken und die Server von Hilfsdiensten befinden sich derzeit im Vereinten Königreich (Großbritannien und Nordirland) und in den Niederlanden. Ihre IP-Adresse und Userinformationen, die in gekürzter Form durch das Webanalysetool Piwik gespeichert werden, werden nach 180 Tagen wieder gelöscht.

                \n

                Wie kann ich meine Daten löschen bzw. die Datenspeicherung verhindern?

                \n

                Sie haben jederzeit das Recht auf Ihre personenbezogenen Daten zuzugreifen und Einspruch gegen die Nutzung und Verarbeitung zu erheben. Cookies, die von OpenStreetMap möglicherweise gesetzt werden, können Sie in Ihrem Browser jederzeit verwalten, löschen oder deaktivieren. Dadurch wird allerdings der Dienst nicht mehr im vollen Ausmaß funktionieren. Bei jedem Browser funktioniert die Verwaltung, Löschung oder Deaktivierung von Cookies etwas anders. Im Folgenden finden Sie Links zu den Anleitungen der bekanntesten Browser:

                \n

                \nChrome: Cookies in Chrome löschen, aktivieren und verwalten\n

                \n

                \nSafari: Verwalten von Cookies und Websitedaten mit Safari\n

                \n

                \nFirefox: Cookies löschen, um Daten zu entfernen, die Websites auf Ihrem Computer abgelegt haben\n

                \n

                \nInternet Explorer: Löschen und Verwalten von Cookies\n

                \n

                \nMicrosoft Edge: Löschen und Verwalten von Cookies\n

                \n

                Wenn Sie mehr über die Datenverarbeitung durch OpenStreetMap erfahren wollen, empfehlen wir Ihnen die Datenschutzerklärung des Unternehmens unter https://wiki.osmfoundation.org/wiki/Privacy_Policy.\n

                \n

                Newsletter Datenschutzerklärung

                \n

                \nWenn Sie sich für unseren Newsletter eintragen übermitteln Sie die oben genannten persönlichen Daten und geben uns das Recht Sie per E-Mail zu kontaktieren. Die im Rahmen der Anmeldung zum Newsletter gespeicherten Daten nutzen wir ausschließlich für unseren Newsletter und geben diese nicht weiter.\n

                \n

                \nSollten Sie sich vom Newsletter abmelden – Sie finden den Link dafür in jedem Newsletter ganz unten – dann löschen wir alle Daten die mit der Anmeldung zum Newsletter gespeichert wurden.\n

                \n\n

                Rechtswirksamkeit dieses Haftungsausschlusses

                \n

                Dieser Haftungsausschluss ist als Teil des Internetangebotes zu betrachten, von dem aus auf diese Seite verwiesen wurde. Sofern Teile oder einzelne Formulierungen dieses Textes der geltenden Rechtslage nicht, nicht mehr oder nicht vollständig entsprechen sollten, bleiben die übrigen Teile des Dokumentes in ihrem Inhalt und ihrer Gültigkeit davon unberührt.

                \n\n\n

                Quelle: Erstellt mit dem Datenschutz Generator von AdSimple

                \n\n
                \n \n
                \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(stdsystem_imprintView) + +#include "stdsystem_imprintView.moc" diff --git a/views/_src/stdsystem_indexView.cpp b/views/_src/stdsystem_indexView.cpp new file mode 100644 index 0000000..c9a0342 --- /dev/null +++ b/views/_src/stdsystem_indexView.cpp @@ -0,0 +1,37 @@ +#include +#include +#include "standardsdata.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT stdsystem_indexView : public TActionView +{ + Q_OBJECT +public: + stdsystem_indexView() : TActionView() { } + QString toString(); +}; + +QString stdsystem_indexView::toString() +{ + responsebody.reserve(2286); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                Portal-Admin

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n \n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(stdsystem_indexView) + +#include "stdsystem_indexView.moc" diff --git a/views/_src/stdsystem_licenseView.cpp b/views/_src/stdsystem_licenseView.cpp new file mode 100644 index 0000000..97047d6 --- /dev/null +++ b/views/_src/stdsystem_licenseView.cpp @@ -0,0 +1,41 @@ +#include +#include +#include "stdsystem.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT stdsystem_licenseView : public TActionView +{ + Q_OBJECT +public: + stdsystem_licenseView() : TActionView() { } + QString toString(); +}; + +QString stdsystem_licenseView::toString() +{ + responsebody.reserve(704839); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n \n \n \n\n \n \n \n \n \n \n >\n\n\n\n\n\n \n\n
                \n

                IaaS::IT-IS ReST API

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                Licenses

                \n

                of used software and programming languages.

                \n

                With many thanks and great respect to the developers and maintainers.

                \n\n

                \n

                \n \n "); + techoex(appversion); + responsebody += QStringLiteral("
                \n Copyright © 2019-"); + techoex(year); + responsebody += QStringLiteral(" ZHENG Robert\n
                \n
                \n

                \n\n\n\n
                \n\n\n\n
                \n

                Documentation

                \n
                \n

                \n\"Doxygen\"\n

                \n

                \nGenerate documentation from source code.\n

                \n

                \nLicense: Permission to use, copy, modify, and distribute this software and its documentation under the terms of the GNU General Public License is hereby granted. No representations are made about the suitability of this software for any purpose. It is provided \"as is\" without express or implied warranty. See the GNU General Public License for more details.\n

                \n

                \nCopyright (c) 1997-2018 by Dimitri van Heesch.\n

                \n

                \nDocuments produced by doxygen are derivative works derived from the input used in their production; they are not affected by this license. \n
                \nsee also: Wikipedia: Doxygen\n

                \n
                \n\n
                \n

                \n\"JSDoc\"\n

                \n

                \nJSDoc is a markup language used to annotate JavaScript source code files.\n

                \n

                \nLicense: JSDoc 3 is free software, licensed under the Apache License, Version 2.0. \n

                \n

                \nCommercial and non-commercial use are permitted in compliance with the License.\n
                \nIn addition, JSDoc 3 includes or depends upon several third-party software packages, either in whole or in part. Each third-party software package is provided under its own license.\n
                \nsee also: Wikipedia: JSDoc\n

                \n
                \n
                \n\n
                \n

                CI / CD

                \n
                \n

                \n\"Ansible\"\n

                \n

                \nAnsible is an open-source software provisioning, configuration management, and application-deployment tool enabling infrastructure as code.\n

                \n

                \nLicense: Proprietary / GNU General Public License\n
                \nsee also: Wikipedia: Ansible (software)\n

                \n
                \n
                \n\n
                \n

                Programming Languages

                \n
                \n

                \n\"Python\"\n

                \n

                \nPython is an interpreted, high-level and general-purpose programming language. Python's design philosophy emphasizes code readability with its notable use of significant whitespace. Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects.\n

                \n

                \nLicense: Python Software Foundation License\n
                \nsee also: Wikipedia: Python (programming language)\n

                \n
                \n\n
                \n

                \n\"C++\"\n

                \n

                \nC++ is a general-purpose programming language created by Bjarne Stroustrup as an extension of the C programming language, or \"C with Classes\". The language has expanded significantly over time, and modern C++ now has object-oriented, generic, and functional features in addition to facilities for low-level memory manipulation. \n

                \n

                \nLicense: none\n
                \nsee also: Wikipedia: C++\n

                \n
                \n\n
                \n

                \n\"QT\"\n

                \n

                \nQt is a free and open-source widget toolkit for creating graphical user interfaces as well as cross-platform applications that run on various software and hardware platforms such as Linux, Windows, macOS, Android or embedded systems with little or no change in the underlying codebase while still being a native application with native capabilities and speed.

                \n

                \nLicense: Qt Commercial License, GPL 2.0, 3.0, LGPL 3.0\n
                \nsee also: Wikipedia: Qt (software)\n

                \n
                \n\n
                \n

                \n\"HTML5\"\n

                \n

                \nHTML5 is a markup language used for structuring and presenting content on the World Wide Web.\n

                \n

                \nLicense: open format\n
                \nsee also: Wikipedia: HTML5\n

                \n
                \n\n
                \n

                \n\"JavaScript\"\n

                \n

                \nJavaScript often abbreviated as JS, is a programming language that conforms to the ECMAScript specification. JavaScript is high-level, often just-in-time compiled, and multi-paradigm. \n

                \n

                \nLicense: open format\n
                \nsee also: Wikipedia: JavaScript\n

                \n
                \n\n
                \n

                \n\"W3CSS\"\n

                \n

                \nW3.CSS is a CSS Framework\n
                \nW3Schools is created in 1998, its name is derived from the World Wide Web, but is not affiliated with the W3C (World Wide Web Consortium). It is run by Refsnes Data in Norway.\n

                \n

                \nLicense: W3.CSS is free to use. No license is necessary.\n
                \nsee also: Wikipedia: W3Schools\n

                \n
                \n\n
                \n \n
                \n

                Clients

                \n
                \n

                \n\"Node.js\"\n

                \nNode.js is an open-source, cross-platform, back-end, JavaScript runtime environment that executes JavaScript code outside a web browser.\n

                \n

                \nLicense: MIT\n
                \nsee also: Wikipedia: Nodes.js\n

                \n
                \n\n
                \n

                \n\"React\n

                \nReact Native is an open-source mobile application framework for mobile devices based on iOS or Android created by Facebook, Inc.\n

                \n

                \nLicense: MIT\n
                \nsee also: Wikipedia: React Native\n

                \n
                \n\n
                \n

                \n\"Apache\n

                \nApache Cordova (formerly PhoneGap) is a mobile application development framework for mobile devices based on iOS or Android.\n

                \n

                \nLicense: Apache License 2.0\n
                \nsee also: Wikipedia: Apache Cordova\n

                \n
                \n\n
                \n

                \n\"Electron\"\n

                \nElectron (formerly known as Atom Shell) is an open-source software framework for client devices based on MS Win10, MacOS or Linux developed and maintained by GitHub.\n

                \n

                \nLicense: MIT\n
                \nsee also: Wikipedia: Electron (software framework)\n

                \n
                \n\n
                \n

                \n\"RRBBP\"\n

                \n

                \nITIS-Clients for ITIS-API (IaaS) are available for client devices based on MS Win10, MacOS or Linux and mobile devices based on iOS or Android.\n

                \n

                \nLicense: Binaries: Freeware, Source Code: Modified BSD license (New BSD License)\n

                \n

                \nModification, distribution or copying of source code is allowed in accordance with the license conditions below. If you modify the source code, you don't need to publish it; you can select \"not publish\" if you wish.\n

                \n

                \nCopyright (c) 2019-"); + techoex(year); + responsebody += tr(", ZHENG Robert / Zhèng Bó Tè (郑 伯 特) All rights reserved.\n

                \n

                \nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n
                \nRedistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n
                \nRedistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n
                \nNeither the name of the ITIS API Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n

                \n

                \nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n

                \nsee also:
                \nGithub: ITIS-Clients Desktop
                \nGithub: ITIS-Clients Mobile\n\n

                \n
                \n\n
                \n \n
                \n

                Server-side

                \n
                \n

                \n\"Ubuntu\"\n

                \n

                \nUbuntu is a Linux distribution based on Debian and mostly composed of free and open-source software.\n

                \n

                \nLicense: OSS\n
                \nsee also: Wikipedia: Ubuntu Linux\n

                \n
                \n\n
                \n

                \n\"Docker\" \n

                \n

                \nDocker is a set of platform as a service (PaaS) products that use OS-level virtualization to deliver software in packages called containers.\n

                \n

                \nLicense: Binaries: Freemium software as a service, Source code: Apache License 2.0\n
                \nsee also: Wikipedia: Docker (software)\n

                \n
                \n\n
                \n

                \n\"NGINX\"\n

                \n

                \nNginX is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. \n

                \n

                \nLicense: 2-clause BSD\n
                \nsee also: Wikipedia: NGINX\n

                \n
                \n\n
                \n

                \n\"PostgreSQL\"\n

                \n

                \nPostgreSQL also known as Postgres, is a free and open-source relational database management system (RDBMS) emphasizing extensibility and SQL compliance.\n

                \n

                \nLicense: PostgreSQL License (free and open-source)\n
                \nsee also: Wikipedia: PostgreSQL\n

                \n
                \n\n
                \n

                \n\"Treefrog\"\n

                \n

                \nTreeFrog Framework is a high-speed and full-stack C++ framework for developing Web applications (Web Applicationserver)\n

                \n

                \nLicense: Modified BSD license (New BSD License)\n

                \n

                \nModification, distribution or copying of source code is allowed in accordance with the license conditions below. If you modify the source code, you don't need to publish it; you can select \"not publish\" if you wish.\n

                \n

                \nCopyright (c) 2010-"); + techoex(year); + responsebody += QStringLiteral(", AOYAMA Kazuharu All rights reserved.\n

                \n

                \nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n
                \nRedistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n
                \nRedistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n
                \nNeither the name of the TreeFrog Framework Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n

                \n

                \nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n

                \nsee also: Github: Treefrog Framework\n

                \n
                \n\n
                \n

                \n\"RRBBP\"\n

                \n

                \nITIS-API is an (ReST) API for IT-IS Services (IaaS)\n

                \n

                \nLicense: Binaries: Freeware, Source Code: Modified BSD license (New BSD License)\n

                \n

                \nModification, distribution or copying of source code is allowed in accordance with the license conditions below. If you modify the source code, you don't need to publish it; you can select \"not publish\" if you wish.\n

                \n

                \nCopyright (c) 2019-"); + techoex(year); + responsebody += tr(", ZHENG Robert / Zhèng Bó Tè (郑 伯 特) All rights reserved.\n

                \n

                \nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n
                \nRedistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n
                \nRedistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n
                \nNeither the name of the ITIS API Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n

                \n

                \nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n

                \nsee also: Github: ITIS ReST-API\n

                \n
                \n
                \n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(stdsystem_licenseView) + +#include "stdsystem_licenseView.moc" diff --git a/views/_src/stdsystem_list_allView.cpp b/views/_src/stdsystem_list_allView.cpp new file mode 100644 index 0000000..24559aa --- /dev/null +++ b/views/_src/stdsystem_list_allView.cpp @@ -0,0 +1,64 @@ +#include +#include +#include "stdsystem.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT stdsystem_list_allView : public TActionView +{ + Q_OBJECT +public: + stdsystem_list_allView() : TActionView() { } + QString toString(); +}; + +QString stdsystem_list_allView::toString() +{ + responsebody.reserve(5128); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n
                \n\n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, stdSystemList); + for (const auto &i : stdSystemList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                IDStd TypeStd AttrStd ValStd FlagSortActiveBaustein
                "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.stdType()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.stdAttr()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.stdVal()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.stdFlag()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.sort()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("\n    \n    \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(stdsystem_list_allView) + +#include "stdsystem_list_allView.moc" diff --git a/views/_src/stdsystem_saveView.cpp b/views/_src/stdsystem_saveView.cpp new file mode 100644 index 0000000..d9820e7 --- /dev/null +++ b/views/_src/stdsystem_saveView.cpp @@ -0,0 +1,54 @@ +#include +#include +#include "stdsystem.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT stdsystem_saveView : public TActionView +{ + Q_OBJECT +public: + stdsystem_saveView() : TActionView() { } + QString toString(); +}; + +QString stdsystem_saveView::toString() +{ + responsebody.reserve(2585); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, stdSystem); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n

                Editing Std System

                \n\n"); + responsebody += QVariant(formTag(urla("save", stdSystem["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n\n\n"); + responsebody += QVariant(linkTo("Show", urla("show", stdSystem["id"]))).toString(); + responsebody += QStringLiteral(" |\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(stdsystem_saveView) + +#include "stdsystem_saveView.moc" diff --git a/views/_src/stdsystem_showView.cpp b/views/_src/stdsystem_showView.cpp new file mode 100644 index 0000000..8f531ee --- /dev/null +++ b/views/_src/stdsystem_showView.cpp @@ -0,0 +1,52 @@ +#include +#include +#include "stdsystem.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT stdsystem_showView : public TActionView +{ + Q_OBJECT +public: + stdsystem_showView() : TActionView() { } + QString toString(); +}; + +QString stdsystem_showView::toString() +{ + responsebody.reserve(1818); + responsebody += QStringLiteral("\n"); + tfetch(StdSystem, stdSystem); + responsebody += QStringLiteral("\n\n \n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n\n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n

                Showing Std System

                \n
                ID
                "); + responsebody += THttpUtility::htmlEscape(stdSystem.id()); + responsebody += QStringLiteral("

                \n
                Std Type
                "); + responsebody += THttpUtility::htmlEscape(stdSystem.stdType()); + responsebody += QStringLiteral("

                \n
                Std Attr
                "); + responsebody += THttpUtility::htmlEscape(stdSystem.stdAttr()); + responsebody += QStringLiteral("

                \n
                Std Val
                "); + responsebody += THttpUtility::htmlEscape(stdSystem.stdVal()); + responsebody += QStringLiteral("

                \n
                Std Flag
                "); + responsebody += THttpUtility::htmlEscape(stdSystem.stdFlag()); + responsebody += QStringLiteral("

                \n
                Sort
                "); + responsebody += THttpUtility::htmlEscape(stdSystem.sort()); + responsebody += QStringLiteral("

                \n
                Active
                "); + responsebody += THttpUtility::htmlEscape(stdSystem.active()); + responsebody += QStringLiteral("

                \n\n"); + responsebody += QVariant(linkTo("Edit", urla("save", stdSystem.id()))).toString(); + responsebody += QStringLiteral(" |\n"); + responsebody += QVariant(linkTo("Back", urla("index"))).toString(); + responsebody += QStringLiteral("\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(stdsystem_showView) + +#include "stdsystem_showView.moc" diff --git a/views/_src/webmenu_createView.cpp b/views/_src/webmenu_createView.cpp new file mode 100644 index 0000000..34041d5 --- /dev/null +++ b/views/_src/webmenu_createView.cpp @@ -0,0 +1,66 @@ +#include +#include +#include "webmenu.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT webmenu_createView : public TActionView +{ + Q_OBJECT +public: + webmenu_createView() : TActionView() { } + QString toString(); +}; + +QString webmenu_createView::toString() +{ + responsebody.reserve(5420); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, webmenu); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n"); + responsebody += QVariant(formTag(urla("create"), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n
                \n\n\n
                \n Anzeige\n« zurück\n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(webmenu_createView) + +#include "webmenu_createView.moc" diff --git a/views/_src/webmenu_indexView.cpp b/views/_src/webmenu_indexView.cpp new file mode 100644 index 0000000..a2adb72 --- /dev/null +++ b/views/_src/webmenu_indexView.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "webmenu.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT webmenu_indexView : public TActionView +{ + Q_OBJECT +public: + webmenu_indexView() : TActionView() { } + QString toString(); +}; + +QString webmenu_indexView::toString() +{ + responsebody.reserve(2529); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n\n
                \n \n
                \n\n\n \n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(webmenu_indexView) + +#include "webmenu_indexView.moc" diff --git a/views/_src/webmenu_list_allView.cpp b/views/_src/webmenu_list_allView.cpp new file mode 100644 index 0000000..8143343 --- /dev/null +++ b/views/_src/webmenu_list_allView.cpp @@ -0,0 +1,74 @@ +#include +#include +#include "webmenu.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT webmenu_list_allView : public TActionView +{ + Q_OBJECT +public: + webmenu_list_allView() : TActionView() { } + QString toString(); +}; + +QString webmenu_list_allView::toString() +{ + responsebody.reserve(5768); + responsebody += QStringLiteral("\n"); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n
                \n\n
                \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + tfetch(QList, webmenuList); + for (const auto &i : webmenuList) { + responsebody += QStringLiteral(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"); + }; + responsebody += QStringLiteral("
                IDMnu IDMnu Sub IDName DeDesc DeName EnDesc EnMnu UriGroupsMnu ItemSortActiveBaustein
                "); + responsebody += THttpUtility::htmlEscape(i.id()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.mnuId()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.mnuSubId()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.nameDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descDe()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.nameEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.descEn()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.mnuUri()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.groups()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.mnuItem()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.sort()); + responsebody += QStringLiteral(""); + responsebody += THttpUtility::htmlEscape(i.active()); + responsebody += QStringLiteral("\n    \n    \n \n
                \n\n
                \n\n \n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(webmenu_list_allView) + +#include "webmenu_list_allView.moc" diff --git a/views/_src/webmenu_saveView.cpp b/views/_src/webmenu_saveView.cpp new file mode 100644 index 0000000..1c1ab34 --- /dev/null +++ b/views/_src/webmenu_saveView.cpp @@ -0,0 +1,74 @@ +#include +#include +#include "webmenu.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT webmenu_saveView : public TActionView +{ + Q_OBJECT +public: + webmenu_saveView() : TActionView() { } + QString toString(); +}; + +QString webmenu_saveView::toString() +{ + responsebody.reserve(6760); + responsebody += QStringLiteral("\n"); + tfetch(QVariantMap, webmenu); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", webmenu["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n\n\n"); + responsebody += QVariant(formTag(urla("save", webmenu["id"]), Tf::Post)).toString(); + responsebody += QStringLiteral("\n
                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n
                \n\n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", webmenu["id"]), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Anzeige\n« zurück\n\n
                \n\n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(webmenu_saveView) + +#include "webmenu_saveView.moc" diff --git a/views/_src/webmenu_showView.cpp b/views/_src/webmenu_showView.cpp new file mode 100644 index 0000000..c753967 --- /dev/null +++ b/views/_src/webmenu_showView.cpp @@ -0,0 +1,72 @@ +#include +#include +#include "webmenu.h" +#include "applicationhelper.h" + +class T_VIEW_EXPORT webmenu_showView : public TActionView +{ + Q_OBJECT +public: + webmenu_showView() : TActionView() { } + QString toString(); +}; + +QString webmenu_showView::toString() +{ + responsebody.reserve(6651); + responsebody += QStringLiteral("\n"); + tfetch(Webmenu, webmenu); + responsebody += QStringLiteral("\n\n \n \n\n "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("\n\n \n \n\n \n\n \n \n \n \n\n\n\n\n\n \n\n
                \n

                ITIS-API::Admin-Portal

                \n
                \n\n name()); + responsebody += QStringLiteral("\">\n\n

                "); + responsebody += THttpUtility::htmlEscape(controller()->name() + ": " + controller()->activeAction()); + responsebody += QStringLiteral("

                \n
                \n\n

                "); + techoex(red_msg); + tehex(error); + responsebody += QStringLiteral("

                "); + techoex(green_msg); + tehex(notice); + responsebody += QStringLiteral("

                \n\n
                \n \n
                \n\n "); + responsebody += QVariant(linkTo("Remove", urla("remove", webmenu.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n zurück\n
                \n\n
                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n

                \n \n

                \n
                \n\n
                \n "); + responsebody += QVariant(linkTo("Remove", urla("remove", webmenu.id()), Tf::Post, "confirm('Are you sure?')")).toString(); + responsebody += QStringLiteral("\n   \n Q-Edit\n« zurück\n\n
                \n\n\n\n\n"); + + return responsebody; +} + +T_DEFINE_VIEW(webmenu_showView) + +#include "webmenu_showView.moc" diff --git a/views/acclasses/create.erb b/views/acclasses/create.erb new file mode 100644 index 0000000..4758e44 --- /dev/null +++ b/views/acclasses/create.erb @@ -0,0 +1,89 @@ + +<%#include "acclasses.h" %> +<% tfetch(QVariantMap, acClasses); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                + +
                + +<%== formTag(urla("create"), Tf::Post) %> +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                + + +
                +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                + + + + diff --git a/views/acclasses/index.erb b/views/acclasses/index.erb new file mode 100644 index 0000000..b891618 --- /dev/null +++ b/views/acclasses/index.erb @@ -0,0 +1,82 @@ + +<%#include "acclasses.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                +
                + +
                + +
                + + + + + diff --git a/views/acclasses/list_all.erb b/views/acclasses/list_all.erb new file mode 100644 index 0000000..55d08fc --- /dev/null +++ b/views/acclasses/list_all.erb @@ -0,0 +1,115 @@ + +<%#include "acclasses.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                +
                + +
                + + + + + + + + + +<% tfetch(QList, acClassesList); %> +<% for (const auto &i : acClassesList) { %> + + + + + + + + +<% } %> +
                IDObj SnameAc ClassClass TypeActiveBaustein
                <%= i.id() %><%= i.objSname() %><%= i.acClass() %><%= i.classType() %><%= i.active() %> +     +     + +
                + +
                + + + + + diff --git a/views/acclasses/save.erb b/views/acclasses/save.erb new file mode 100644 index 0000000..03cda1d --- /dev/null +++ b/views/acclasses/save.erb @@ -0,0 +1,96 @@ + +<%#include "acclasses.h" %> +<% tfetch(QVariantMap, acClasses); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                + +
                + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +<%== formTag(urla("save", acClasses["id"]), Tf::Post) %> +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                + + +
                + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                + + + + diff --git a/views/acclasses/show.erb b/views/acclasses/show.erb new file mode 100644 index 0000000..cf6fa9f --- /dev/null +++ b/views/acclasses/show.erb @@ -0,0 +1,88 @@ + +<%#include "acclasses.h" %> +<% tfetch(AcClasses, acClasses); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                +
                + + <%== linkTo("Remove", urla("remove", acClasses.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                + +
                +

                +

                +

                +

                +

                +
                + +
                + <%== linkTo("Remove", urla("remove", acClasses.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                + + + + + diff --git a/views/account/create.erb b/views/account/create.erb new file mode 100644 index 0000000..1b3d9c5 --- /dev/null +++ b/views/account/create.erb @@ -0,0 +1,172 @@ + +<%#include "itisuser.h" %> +<%#include "itisgroups.h" %> +<% tfetch(QVariantMap, user); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + +
                +
                +
                +
                +

                available Groups  

                +

                +
                +
                +

                rights  

                +

                create read update delete
                {c,r,u,d}

                +
                +
                +
                +
                + +
                + +
                + +<%== formTag(urla("create"), Tf::Post) %> +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                + + +
                +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                + + + + + + + + diff --git a/views/account/create.erb_2021-01-22_1750 b/views/account/create.erb_2021-01-22_1750 new file mode 100644 index 0000000..cd87ac1 --- /dev/null +++ b/views/account/create.erb_2021-01-22_1750 @@ -0,0 +1,112 @@ + +<%#include "itisuser.h" %> +<% tfetch(QVariantMap, user); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%=$ red_msg %><%=$ error %>

                <%=$ green_msg %><%=$ notice %>

                + +
                + +
                + +<%== formTag(urla("create"), Tf::Post) %> +
                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +
                + + +
                +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                + + + + diff --git a/views/account/form.erb b/views/account/form.erb new file mode 100644 index 0000000..3438c8d --- /dev/null +++ b/views/account/form.erb @@ -0,0 +1,382 @@ + + + + + + + <%= controller()->name() %> IT-IS + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                Admin Login

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + + + + + +
                + +
                + +
                + + + +
                +

                Anmeldung

                +

                +

                + + + +

                 

                + +
                +

                +
                + +
                + +
                + + + diff --git a/views/account/form.erb_2021-01-23_1557 b/views/account/form.erb_2021-01-23_1557 new file mode 100644 index 0000000..fd8b74a --- /dev/null +++ b/views/account/form.erb_2021-01-23_1557 @@ -0,0 +1,78 @@ + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                Admin Login

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + +
                +
                + + <%== formTag(urla("login")); %> + + + SHA2-256 secured hashed Password + +

                + + +
                + + + diff --git a/views/account/form.erb_2021-03-13_2319 b/views/account/form.erb_2021-03-13_2319 new file mode 100644 index 0000000..10a0e23 --- /dev/null +++ b/views/account/form.erb_2021-03-13_2319 @@ -0,0 +1,365 @@ + + + + + + + <%= controller()->name() %> IT-IS + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                Admin Login

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + + + + + +
                + +
                + + + +
                +

                Anmeldung

                +

                +

                + + +

                 

                +
                +

                +
                + + + +
                + + + +
                + + + diff --git a/views/account/form.erb_2021-03-16_1021 b/views/account/form.erb_2021-03-16_1021 new file mode 100644 index 0000000..f8b78cf --- /dev/null +++ b/views/account/form.erb_2021-03-16_1021 @@ -0,0 +1,365 @@ + + + + + + + <%= controller()->name() %> IT-IS + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                Admin Login

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + + + + + +
                + +
                + + + +
                +

                Anmeldung

                +

                +

                + + +

                 

                +
                +

                +
                + + + +
                + + + +
                + + + diff --git a/views/account/form.erb_2021-05-01_1638 b/views/account/form.erb_2021-05-01_1638 new file mode 100644 index 0000000..cf8c47e --- /dev/null +++ b/views/account/form.erb_2021-05-01_1638 @@ -0,0 +1,369 @@ + + + + + + + <%= controller()->name() %> IT-IS + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                Admin Login

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + + + + + +
                + +
                + + + +
                +

                Anmeldung

                +

                +

                + + +

                 

                +
                +

                +
                + + + +
                + + + +
                + + + diff --git a/views/account/form.erb_2021-05-25_1641 b/views/account/form.erb_2021-05-25_1641 new file mode 100644 index 0000000..3438c8d --- /dev/null +++ b/views/account/form.erb_2021-05-25_1641 @@ -0,0 +1,382 @@ + + + + + + + <%= controller()->name() %> IT-IS + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                Admin Login

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + + + + + +
                + +
                + +
                + + + +
                +

                Anmeldung

                +

                +

                + + + +

                 

                + +
                +

                +
                + +
                + +
                + + + diff --git a/views/account/formElectron.erb b/views/account/formElectron.erb new file mode 100644 index 0000000..e3dafaa --- /dev/null +++ b/views/account/formElectron.erb @@ -0,0 +1,336 @@ + + + + + + + <%= controller()->name() %> IT-IS + + + + + + + + + + + + + + + + + + + +

                IT-IS Standards Anmeldung

                +
                Online-Reader für IT-IS Standards und Anhänge.
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + + + +
                + +
                + + + +
                +

                Anmeldung

                +

                +

                + + +

                 

                +
                +

                +
                + + + +
                + + + + +
                + + + diff --git a/views/account/formElectron.erb_2021-01-06_1327 b/views/account/formElectron.erb_2021-01-06_1327 new file mode 100644 index 0000000..8f5580a --- /dev/null +++ b/views/account/formElectron.erb_2021-01-06_1327 @@ -0,0 +1,131 @@ + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%=$ red_msg %><%=$ error %>

                <%=$ green_msg %><%=$ notice %>

                + + + + +
                + +
                + + + +
                +

                Anmeldung

                +

                +

                + + +

                +
                +

                +
                + + + +
                + + + + +
                + + + diff --git a/views/account/index.erb b/views/account/index.erb new file mode 100644 index 0000000..1542e9a --- /dev/null +++ b/views/account/index.erb @@ -0,0 +1,68 @@ + +<%#include "itisuser.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                + +
                + +
                + + + + + + diff --git a/views/account/list_all.erb b/views/account/list_all.erb new file mode 100644 index 0000000..1830214 --- /dev/null +++ b/views/account/list_all.erb @@ -0,0 +1,170 @@ + +<%#include "itisuser.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                +
                + +
                + + + + + + + + + + + + + + + + + + + +<% tfetch(QList, itisUserList); %> +<% for (const auto &i : itisUserList) { %> + + + + + + + + + + + + + + + + + + +<% } %> +
                IDusernamefirstnamesurnameeMailCompanyTimezonegroupnamegroupslast loginlogin timelogged outpwd changed timepwd change forceActiveBaustein
                <%= i.id() %><%= i.username() %><%= i.firstname() %><%= i.surname() %><%= i.email() %><%= i.company() %><%= i.userTimezone() %><%= i.groupname() %><%= i.groups() %><%= i.lastLogin() %><%= i.loginTime() %><%= i.loggedOut() %><%= i.pwdChangedTime() %><%= i.pwdChangeForce() %><%= i.active() %> +     +     + +
                + +
                + + + + diff --git a/views/account/registration.erb_ b/views/account/registration.erb_ new file mode 100644 index 0000000..c923cdb --- /dev/null +++ b/views/account/registration.erb_ @@ -0,0 +1,110 @@ + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +
                + +
                +
                +
                +
                + + + +
                + + +
                + + +
                + + +
                + +
                +
                +
                +
                +
                + +
                + + + + diff --git a/views/account/save.erb b/views/account/save.erb new file mode 100644 index 0000000..65d330f --- /dev/null +++ b/views/account/save.erb @@ -0,0 +1,177 @@ + +<%#include "itisuser.h" %> +<%#include "itisgroups.h" %> +<% tfetch(QVariantMap, user); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + +
                +
                +
                +
                +

                available Groups  

                +

                +
                +
                +

                rights  

                +

                create read update delete
                {crud}

                +
                +
                +
                +
                + +
                + +
                + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +<%== formTag(urla("save", user["id"]), Tf::Post) %> +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                + + +
                + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                + + + + + + + + + diff --git a/views/account/save.erb_2021-01-22_1750 b/views/account/save.erb_2021-01-22_1750 new file mode 100644 index 0000000..6bd8e49 --- /dev/null +++ b/views/account/save.erb_2021-01-22_1750 @@ -0,0 +1,120 @@ + +<%#include "itisuser.h" %> +<% tfetch(QVariantMap, user); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%=$ red_msg %><%=$ error %>

                <%=$ green_msg %><%=$ notice %>

                + +
                + +
                + + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + + + +<%== formTag(urla("save", user["id"]), Tf::Post) %> +
                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +
                + + +
                + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                + + + + + diff --git a/views/account/show.erb b/views/account/show.erb new file mode 100644 index 0000000..bfca7b4 --- /dev/null +++ b/views/account/show.erb @@ -0,0 +1,115 @@ + +<%#include "itisuser.h" %> +<% tfetch(ItisUser, user); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                + +
                + + <%== linkTo("Remove", urla("remove", user.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                + +
                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +
                + +
                + <%== linkTo("Remove", urla("remove", user.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit +« zurück + +
                + + + + diff --git a/views/account/userhome.erb b/views/account/userhome.erb new file mode 100644 index 0000000..bb10851 --- /dev/null +++ b/views/account/userhome.erb @@ -0,0 +1,203 @@ + + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + +
                + +
                +
                +

                Hallo <%==$firstname %>

                +

                ⇒ der letzte Log-In erfolgte am Uhr (<%==$ lastLogin %> UTC)

                +

                ⇒ der letzte Log-Out erfolgte am Uhr (<%==$ lastLogout %> UTC)

                +

                ⇒ die letzte Passwort-Änderung erfolgte am Uhr (<%==$ lastPwdChangeTime %> UTC)

                + <%==$ pwdToChangeIn %> +

                +
                + +
                + +
                +
                + Alps + +

                username: <%==$ username %>

                +

                firstname: <%==$ firstname %>

                +

                surname: <%==$ surname %>

                +

                email: <%==$ email %>

                +

                company: <%==$ company %>

                +

                usertimezone: <%==$ usertimezone %>

                +

                groupname: <%==$ groupname %>

                +

                groups: <%==$ groups %>

                +

                +

                Newsletter:

                + +
                + +
                + + +

                +
                +
                +
                +
                +
                + +
                + + + + diff --git a/views/account/userhome.erb_2021-01-05_1148 b/views/account/userhome.erb_2021-01-05_1148 new file mode 100644 index 0000000..90a00bf --- /dev/null +++ b/views/account/userhome.erb_2021-01-05_1148 @@ -0,0 +1,164 @@ + + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +
                + +
                +
                +

                Hallo <%==$firstname %>

                +

                ⇒ der letzte Log-In erfolgte am Uhr (<%==$ lastLogin %> UTC)

                +

                ⇒ der letzte Log-Out erfolgte am Uhr (<%==$ lastLogout %> UTC)

                +

                ⇒ die letzte Passwort-Änderung erfolgte am Uhr (<%==$ lastPwdChangeTime %> UTC)

                + <%==$ pwdToChangeIn %> +
                + +
                + +
                +
                + Alps + +

                username: <%==$ username %>

                +

                firstname: <%==$ firstname %>

                +

                surname: <%==$ surname %>

                +

                email: <%==$ email %>

                +

                company: <%==$ company %>

                +

                usertimezone: <%==$ usertimezone %>

                +

                groupname: <%==$ groupname %>

                +

                groups: <%==$ groups %>

                +
                +
                +
                +
                +
                + +
                + + + + diff --git a/views/account/userhome.erb_2021-01-15_0916 b/views/account/userhome.erb_2021-01-15_0916 new file mode 100644 index 0000000..5aa9ca0 --- /dev/null +++ b/views/account/userhome.erb_2021-01-15_0916 @@ -0,0 +1,185 @@ + + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%=$ red_msg %><%=$ error %>

                <%=$ green_msg %><%=$ notice %>

                + + + + +
                + +
                +
                +

                Hallo <%==$firstname %>

                +

                ⇒ der letzte Log-In erfolgte am Uhr (<%==$ lastLogin %> UTC)

                +

                ⇒ der letzte Log-Out erfolgte am Uhr (<%==$ lastLogout %> UTC)

                +

                ⇒ die letzte Passwort-Änderung erfolgte am Uhr (<%==$ lastPwdChangeTime %> UTC)

                + <%==$ pwdToChangeIn %> +
                + +
                + +
                +
                + Alps + +

                username: <%==$ username %>

                +

                firstname: <%==$ firstname %>

                +

                surname: <%==$ surname %>

                +

                email: <%==$ email %>

                +

                company: <%==$ company %>

                +

                usertimezone: <%==$ usertimezone %>

                +

                groupname: <%==$ groupname %>

                +

                groups: <%==$ groups %>

                +

                +

                Newsletter:

                + +
                + +
                + + +

                +
                +
                +
                +
                +
                + +
                + + + + diff --git a/views/account/userhome.erb_2021-01-17_1152 b/views/account/userhome.erb_2021-01-17_1152 new file mode 100644 index 0000000..5aa9ca0 --- /dev/null +++ b/views/account/userhome.erb_2021-01-17_1152 @@ -0,0 +1,185 @@ + + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%=$ red_msg %><%=$ error %>

                <%=$ green_msg %><%=$ notice %>

                + + + + +
                + +
                +
                +

                Hallo <%==$firstname %>

                +

                ⇒ der letzte Log-In erfolgte am Uhr (<%==$ lastLogin %> UTC)

                +

                ⇒ der letzte Log-Out erfolgte am Uhr (<%==$ lastLogout %> UTC)

                +

                ⇒ die letzte Passwort-Änderung erfolgte am Uhr (<%==$ lastPwdChangeTime %> UTC)

                + <%==$ pwdToChangeIn %> +
                + +
                + +
                +
                + Alps + +

                username: <%==$ username %>

                +

                firstname: <%==$ firstname %>

                +

                surname: <%==$ surname %>

                +

                email: <%==$ email %>

                +

                company: <%==$ company %>

                +

                usertimezone: <%==$ usertimezone %>

                +

                groupname: <%==$ groupname %>

                +

                groups: <%==$ groups %>

                +

                +

                Newsletter:

                + +
                + +
                + + +

                +
                +
                +
                +
                +
                + +
                + + + + diff --git a/views/account/userhomeElectron.erb b/views/account/userhomeElectron.erb new file mode 100644 index 0000000..ace99b5 --- /dev/null +++ b/views/account/userhomeElectron.erb @@ -0,0 +1,173 @@ + + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + +

                Anwender-Bereich

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + +
                + +
                +
                +

                Hallo <%==$firstname %>

                +

                ⇒ der letzte Log-In erfolgte am Uhr (<%==$ lastLogin %> UTC)

                +

                ⇒ der letzte Log-Out erfolgte am Uhr (<%==$ lastLogout %> UTC)

                +

                ⇒ die letzte Passwort-Änderung erfolgte am Uhr (<%==$ lastPwdChangeTime %> UTC)

                + <%==$ pwdToChangeIn %> (Passwort jetzt ändern) +
                + +
                + +
                +
                + Alps + +

                username: <%==$ username %>

                +

                firstname: <%==$ firstname %>

                +

                surname: <%==$ surname %>

                +

                email: <%==$ email %>

                +

                company: <%==$ company %>

                +

                usertimezone: <%==$ usertimezone %>

                +

                groupname: <%==$ groupname %>

                +

                groups: <%==$ groups %>

                +

                +

                Newsletter:

                + +
                + +
                + + +

                +
                +
                +
                +
                +
                + +
                + + + diff --git a/views/account/userpwd.erb b/views/account/userpwd.erb new file mode 100644 index 0000000..4194eeb --- /dev/null +++ b/views/account/userpwd.erb @@ -0,0 +1,186 @@ + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + +
                + +
                +
                +
                +
                +

                Passwort ändern für <%==$ uSname %> <%==$ uFname %>

                +
                +
                + +
                + + +

                 

                + +
                +
                +
                + +
                +
                + +
                + + + + diff --git a/views/account/userpwd.erb_2020-12-21_1321 b/views/account/userpwd.erb_2020-12-21_1321 new file mode 100644 index 0000000..e358792 --- /dev/null +++ b/views/account/userpwd.erb_2020-12-21_1321 @@ -0,0 +1,162 @@ + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%=$ green_msg %>

                + + + +
                + +
                +
                +
                +
                +

                Passwort ändern für <%==$ uSname %> <%==$ uFname %>

                +
                +   + + +
                + + + +
                +

                 

                +
                +
                + +
                +
                + +
                + + + + diff --git a/views/account/userpwdElectron.erb b/views/account/userpwdElectron.erb new file mode 100644 index 0000000..b101c3e --- /dev/null +++ b/views/account/userpwdElectron.erb @@ -0,0 +1,174 @@ + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + +

                Anwender-Passwort

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + +
                + +
                +
                +
                +
                +

                Passwort ändern für <%==$ uSname %> <%==$ uFname %>

                +
                +
                + +
                + + +

                 

                + +
                +
                +
                + +
                +
                + +
                + + + diff --git a/views/actionrights/create.erb b/views/actionrights/create.erb new file mode 100644 index 0000000..72907d8 --- /dev/null +++ b/views/actionrights/create.erb @@ -0,0 +1,151 @@ + +<%#include "actionrights.h" %> +<%#include "itisgroups.h" %> +<% tfetch(QVariantMap, actionRights); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + +
                +
                +
                +
                +

                available Groups  

                +

                +
                +
                +

                rights  

                +

                create read update delete
                {crud}

                +
                +
                +
                +
                + +
                + +
                + +<%== formTag(urla("create"), Tf::Post) %> +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                + + + +
                +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                + + + + + + + diff --git a/views/actionrights/index.erb b/views/actionrights/index.erb new file mode 100644 index 0000000..871b287 --- /dev/null +++ b/views/actionrights/index.erb @@ -0,0 +1,69 @@ + +<%#include "actionrights.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                + +
                + +
                + + + + + + + diff --git a/views/actionrights/list_all.erb b/views/actionrights/list_all.erb new file mode 100644 index 0000000..1d10a03 --- /dev/null +++ b/views/actionrights/list_all.erb @@ -0,0 +1,114 @@ + +<%#include "actionrights.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %> <%=$ error %>

                <%==$ green_msg %> <%=$ notice %>

                + +
                +

                crud = CreateReadUpdateDelete

                Bei mehreren Rechten müssen diese in Reihenfolge aufgefürt und Lücken zwischen diesen Rechten mit einem _ gefüllt werden.
                Bsp.: Read + Delete: r_d oder Create + Delete: c__d

                + +
                + + + + + + + + + +<% tfetch(QList, actionRightsList); %> +<% for (const auto &i : actionRightsList) { %> + + + + + + + + +<% } %> +
                IDUriGroupsRightsActiveBaustein
                <%= i.id() %><%= i.uri() %><%= i.groups() %><%= i.rights() %><%= i.active() %> +     +     + +
                + +
                + + + + diff --git a/views/actionrights/save.erb b/views/actionrights/save.erb new file mode 100644 index 0000000..069aa57 --- /dev/null +++ b/views/actionrights/save.erb @@ -0,0 +1,161 @@ + +<%#include "actionrights.h" %> +<%#include "itisgroups.h" %> +<% tfetch(QVariantMap, actionRights); %> + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + +
                +
                +
                +
                +

                available Groups  

                +

                +
                +
                +

                rights  

                +

                create read update delete
                {crud}

                +
                +
                +
                +
                + +
                +
                + + <%== linkTo("Remove", urla("remove", actionRights["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Editor + zurück +

                + +<%== formTag(urla("save", actionRights["id"]), Tf::Post) %> +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                + + +
                + <%== linkTo("Remove", urla("remove", actionRights["id"]), Tf::Post, "confirm('Are you sure?')") %> +    + zurück + +
                + + + + + + diff --git a/views/actionrights/save.erb_2021-01-22_1507 b/views/actionrights/save.erb_2021-01-22_1507 new file mode 100644 index 0000000..6af42a0 --- /dev/null +++ b/views/actionrights/save.erb_2021-01-22_1507 @@ -0,0 +1,99 @@ + +<%#include "actionrights.h" %> +<% tfetch(QVariantMap, actionRights); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                +

                <%=$ error %>

                +

                <%=$ notice %>

                + +
                +
                + + <%== linkTo("Remove", urla("remove", actionRights["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Editor + zurück +

                + +<%== formTag(urla("save", actionRights["id"]), Tf::Post) %> +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                + + +
                + <%== linkTo("Remove", urla("remove", actionRights["id"]), Tf::Post, "confirm('Are you sure?')") %> +    + zurück + +
                + + + + diff --git a/views/actionrights/show.erb b/views/actionrights/show.erb new file mode 100644 index 0000000..fc6c73c --- /dev/null +++ b/views/actionrights/show.erb @@ -0,0 +1,87 @@ + +<%#include "actionrights.h" %> +<% tfetch(ActionRights, actionRights); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                +
                + + <%== linkTo("Remove", urla("remove", actionRights.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                + +
                +

                +

                +

                +

                +

                +
                + +
                + <%== linkTo("Remove", urla("remove", actionRights.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                + + + + diff --git a/views/admin/index.erb b/views/admin/index.erb new file mode 100644 index 0000000..bfae179 --- /dev/null +++ b/views/admin/index.erb @@ -0,0 +1,151 @@ + + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                  Admin-Änderungen über Formular-Eingaben werden mit Benutzername und Datum im System gespeichert.

                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                + +
                +
                +

                Hallo <%==$uFname %>

                +

                ⇒ der letzte Log-In erfolgte am Uhr (<%==$ lastLogin %> UTC)

                +

                ⇒ der letzte Log-Out erfolgte am Uhr (<%==$ lastLogout %> UTC)

                +

                ⇒ die letzte Passwort-Änderung erfolgte am Uhr (<%==$ lastPwdChangeTime %> UTC)

                +
                +
                +
                + +
                + + + + diff --git a/views/admin/showGallery.erb b/views/admin/showGallery.erb new file mode 100644 index 0000000..76594ad --- /dev/null +++ b/views/admin/showGallery.erb @@ -0,0 +1,253 @@ + + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +

                Alle Bilder und Photos der Vorgaben und Anhänge.

                ⇒ Bild anklicken für Ansicht in Originalgröße,
                ⇒ Button anklicken um die URL des Bildes in den Zwischenspeicher zu laden (um z.B. im Baustein-Editor über Bild-URL mittels STRG+V einzufügen).

                + +

                <%==$ red_msg %> <%=$ error %>

                <%==$ green_msg %> <%=$ notice %>

                + +
                +
                + +
                + +
                + +
                + + + + + + + +
                + + + + diff --git a/views/annexdata/_sql_.txt b/views/annexdata/_sql_.txt new file mode 100644 index 0000000..3f323fd --- /dev/null +++ b/views/annexdata/_sql_.txt @@ -0,0 +1,62 @@ +CREATE TABLE public.release_mgmt +( + id SERIAL, + obj_sname text COLLATE pg_catalog."default", + spec_version character varying(100) COLLATE pg_catalog."default", + ac_classes character varying(100) COLLATE pg_catalog."default", + pc_classes character varying(100) COLLATE pg_catalog."default", + cat_class character varying(128) COLLATE pg_catalog."default", + country character varying(100) COLLATE pg_catalog."default", + lang character varying(100) COLLATE pg_catalog."default", + doc_type character varying(100) COLLATE pg_catalog."default", + rel_requester character varying(100) COLLATE pg_catalog."default", + relrequest_date timestamp without time zone, + rel_creator character varying(100) COLLATE pg_catalog."default", + relcreator_decisdate timestamp without time zone, + rel_inspector character varying(100) COLLATE pg_catalog."default", + relinspect_decisdate timestamp without time zone, + rel_approver character varying(100) COLLATE pg_catalog."default", + relapprov_decisdate timestamp without time zone, + ci_date timestamp without time zone, + cd_date timestamp without time zone, + cdd_date timestamp without time zone, + CONSTRAINT release_data_pkey PRIMARY KEY (id) +) + +TABLESPACE pg_default; + +ALTER TABLE public.release_mgmt + OWNER to postgres; + + +###################### + +-- FUNCTION: public.annex_data_update() + +-- DROP FUNCTION public.annex_data_update(); + +CREATE FUNCTION public.annex_data_update() + RETURNS trigger + LANGUAGE 'plpgsql' + COST 100 + VOLATILE NOT LEAKPROOF +AS $BODY$ +BEGIN + INSERT INTO public.annex_data_history(changed_on, id_old, lfdnr, spec_title, spec_desc, spec_version, spec_release, obj_sname, ac_classes, pc_classes, cat_class, country, lang, spec_content, spec_active) + VALUES (now(), OLD.id, OLD.lfdnr, OLD.spec_title, OLD.spec_desc, OLD.spec_version, OLD.spec_release, OLD.obj_sname, OLD.ac_classes, OLD.pc_classes, OLD.cat_class, OLD.country, OLD.lang, OLD.spec_content, OLD.spec_active); + RETURN NEW; +END; +$BODY$; + +ALTER FUNCTION public.annex_data_update() + OWNER TO postgres; + + +CREATE TRIGGER annex_data_update + BEFORE UPDATE + ON public.annex_data + FOR EACH ROW + EXECUTE PROCEDURE public.annex_data_update(); + + + diff --git a/views/annexdata/create.erb b/views/annexdata/create.erb new file mode 100644 index 0000000..de54bf3 --- /dev/null +++ b/views/annexdata/create.erb @@ -0,0 +1,63 @@ + +<%#include "annexdata.h" %> +<% tfetch(QVariantMap, annexData); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +

                New Annex Data

                + +<%== formTag(urla("create"), Tf::Post) %> +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                +

                + +

                + + +<%== linkTo("Back", urla("index")) %> + + + diff --git a/views/annexdata/editor_add.erb b/views/annexdata/editor_add.erb new file mode 100644 index 0000000..b966d5e --- /dev/null +++ b/views/annexdata/editor_add.erb @@ -0,0 +1,692 @@ + +<%#include "annexdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %> <%=$ error %>

                <%==$ green_msg %> <%=$ notice %>

                + + + + + +
                +
                + +
                +
                +
                +
                + +
                + Baustein-Titel, Verwendung im Inhaltsverzeichnis +
                +
                +
                + +
                + Kurzbeschreibung für Text-Baustein Administration +
                +
                +
                +
                +
                +
                Objekt-Zuordnung +
                +   + + + Ein oder mehrere Objekte +
                +
                +
                +
                +
                + +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                + +
                + 2-stelliger Ländercode (WW = World Wide) +
                +
                +
                +
                +
                +
                +
                + +
                + Text-Baustein Version (Bsp.: v00.01.02) +
                +
                +
                + +
                + 3-stellige Text-Baustein Nummerierung (Bsp.: 013) +
                + + check lfdnr innerhalb der gewählten Cat +    + +
                +
                +
                + +
                + optional: interne Bemerkung, auch für Release +
                +
                +
                + +
                + + interne Hilfs-Markierung +
                +
                +
                +
                +
                +
                +
                +
                Availability Class +   + + + Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" +
                +
                +
                +
                +
                Protection Class +   + + + Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" +
                +
                +
                +
                +
                Legacy + + + + ehemals G2 od. G3 +
                +
                +
                +
                + +
                +
                Text-Baustein +
                +
                +
                +
                +
                + +
                + + Start-Datum
                +
                +
                +
                + +
                + vorläufiges End-Datum
                +
                +
                +
                + + + Baustein aktiv oder in-aktiv +
                +
                +
                +
                +
                +
                +
                + +
                + Verantwortlicher: email, Abteilung, Jira-Key +
                +
                +
                +
                +
                + +

                +

                + + +
                +

                + + +
                +
                + +
                + +
                + + + + +
                + +
                + + + + +
                + +

                URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                + + + +
                +
                +
                +
                + +
                + + + + + + + + + diff --git a/views/annexdata/editor_add.erb_2021-02-14_0906 b/views/annexdata/editor_add.erb_2021-02-14_0906 new file mode 100644 index 0000000..f18d192 --- /dev/null +++ b/views/annexdata/editor_add.erb_2021-02-14_0906 @@ -0,0 +1,669 @@ + +<%#include "annexdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + + +
                +
                + +
                +
                +
                +
                + +
                + Baustein-Titel, Verwendung im Inhaltsverzeichnis +
                +
                +
                + +
                + Kurzbeschreibung für Text-Baustein Administration +
                +
                +
                +
                +
                +
                Objekte +
                +   + + + Ein oder mehrere Objekte +
                +
                +
                +
                +
                + +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                + +
                + 2-stelliger Ländercode (WW = World Wide) +
                +
                +
                +
                +
                +
                +
                + +
                + Text-Baustein Version (Bsp.: v00.01.02) +
                +
                +
                + +
                + 3-stellige Text-Baustein Nummerierung (Bsp.: 013) +
                + + check lfdnr innerhalb der gewählten Cat +    + +
                +
                +
                + +
                + Verantwortlicher: email, Abteilung, Jira-Key +
                +
                +
                +
                +
                +
                +
                +
                Availability Class +   + + + Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" +
                +
                +
                +
                +
                Protection Class +   + + + Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" +
                +
                +
                +
                +
                Legacy + + + + ehemals G2 od. G3 +
                +
                +
                +
                + +
                +
                Text-Baustein +
                +
                +
                +
                +
                + +
                + + Start-Datum
                +
                +
                +
                + +
                + vorläufiges End-Datum
                +
                +
                +
                + + + Baustein aktiv oder in-aktiv +
                +
                +
                +
                +
                +
                +
                + +
                + optional: interne Bemerkung, auch für Release +
                +
                +
                + +
                + + interne Hilfs-Markierung +
                +
                +
                +
                +
                + +

                + + +
                +

                + + + + +
                +
                + + + + +
                + +

                URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                + + + +
                +
                +
                +
                + +
                + + + + + + + diff --git a/views/annexdata/editor_upd.erb b/views/annexdata/editor_upd.erb new file mode 100644 index 0000000..6a73e4b --- /dev/null +++ b/views/annexdata/editor_upd.erb @@ -0,0 +1,775 @@ + +<%#include "annexdata.h" %> +<%#include "annexmeta.h" %> +<% tfetch(AnnexData, annexData); %> +<% tfetch(AnnexMeta, annexMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %> <%=$ error %>

                <%==$ green_msg %> <%=$ notice %>

                + + + + + +
                +
                + +
                +
                +
                +
                + +
                + Baustein-Titel, Verwendung im Inhaltsverzeichnis +
                +
                +
                + +
                + Kurzbeschreibung für Text-Baustein Administration +
                +
                +
                +
                +
                +
                Objekt-Zuordnung +
                +   + + + Ein oder mehrere Objekte +
                +
                +
                +
                +
                + +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                + +
                + 2-stelliger Ländercode (WW = World Wide) +
                +
                +
                +
                +
                +
                +
                + +
                + Text-Baustein Version (Bsp.: v00.01.02) +
                +
                +
                + +
                + Text-Baustein Version (Bsp.: v00.01.02) +
                +
                +
                + +
                + 3-stellige Text-Baustein Nummerierung (Bsp.: 013) +
                + + check lfdnr innerhalb der gewählten Cat +    + +
                +
                +
                + +
                + optional: interne Bemerkung, auch für Release +
                +
                +
                + +
                + + interne Hilfs-Markierung +
                +
                +
                +
                +
                +
                +
                +
                Availability Class +   + + + Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" +
                +
                +
                +
                +
                Protection Class +   + + + Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" +
                +
                +
                +
                +
                Legacy + + + + ehemals G2 od. G3 +
                +
                +
                +
                + +
                +
                Text-Baustein +
                +
                +
                +
                +
                + +
                + + Start-Datum
                +
                +
                +
                + +
                + vorläufiges End-Datum
                +
                +
                +
                + + + Baustein aktiv oder in-aktiv +
                +
                +
                +
                +
                +
                +
                + +
                + Verantwortlicher: email, Abteilung, Jira-Key +
                +
                +
                +
                +
                +

                + + + + +

                + + + +
                +

                + + +
                +
                + +
                + +
                + + + + +
                +
                + + + + +
                + +

                URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                + + + +
                +
                +
                +
                + +
                + + + + + + +
                + + +
                + + +
                + Kommentar zu " "
                + + + +
                +    +
                + + + + + + diff --git a/views/annexdata/editor_upd.erb_2021-02-14_0906 b/views/annexdata/editor_upd.erb_2021-02-14_0906 new file mode 100644 index 0000000..174f017 --- /dev/null +++ b/views/annexdata/editor_upd.erb_2021-02-14_0906 @@ -0,0 +1,710 @@ + +<%#include "annexdata.h" %> +<%#include "annexmeta.h" %> +<% tfetch(AnnexData, annexData); %> +<% tfetch(AnnexMeta, annexMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %> <%=$ error %>

                <%==$ green_msg %> <%=$ notice %>

                + + + + + +
                +
                + +
                +
                +
                +
                + +
                + Baustein-Titel, Verwendung im Inhaltsverzeichnis +
                +
                +
                + +
                + Kurzbeschreibung für Text-Baustein Administration +
                +
                +
                +
                +
                +
                Objekte +
                +   + + + Ein oder mehrere Objekte +
                +
                +
                +
                +
                + +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                + +
                + 2-stelliger Ländercode (WW = World Wide) +
                +
                +
                +
                +
                +
                +
                + +
                + Text-Baustein Version (Bsp.: v00.01.02) +
                +
                +
                + +
                + Text-Baustein Version (Bsp.: v00.01.02) +
                +
                +
                + +
                + 3-stellige Text-Baustein Nummerierung (Bsp.: 013) +
                + + check lfdnr innerhalb der gewählten Cat +    + +
                +
                +
                + +
                + Verantwortlicher: email, Abteilung, Jira-Key +
                +
                +
                +
                +
                +
                +
                +
                Availability Class +   + + + Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" +
                +
                +
                +
                +
                Protection Class +   + + + Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" +
                +
                +
                +
                +
                Legacy + + + + ehemals G2 od. G3 +
                +
                +
                +
                + +
                +
                Text-Baustein +
                +
                +
                +
                +
                + +
                + + Start-Datum
                +
                +
                +
                + +
                + vorläufiges End-Datum
                +
                +
                +
                + + + Baustein aktiv oder in-aktiv +
                +
                +
                +
                +
                +
                +
                + +
                + optional: interne Bemerkung, auch für Release +
                +
                +
                + +
                + + interne Hilfs-Markierung +
                +
                +
                +
                +
                +

                + +
                +

                + + + + +
                +
                + + + + +
                + +

                URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                + + + +
                +
                +
                +
                + +
                + + + + + + + diff --git a/views/annexdata/editor_upd.erb_2021-03-24_1751 b/views/annexdata/editor_upd.erb_2021-03-24_1751 new file mode 100644 index 0000000..eb60f4b --- /dev/null +++ b/views/annexdata/editor_upd.erb_2021-03-24_1751 @@ -0,0 +1,754 @@ + +<%#include "annexdata.h" %> +<%#include "annexmeta.h" %> +<% tfetch(AnnexData, annexData); %> +<% tfetch(AnnexMeta, annexMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %> <%=$ error %>

                <%==$ green_msg %> <%=$ notice %>

                + + + + + +
                +
                + +
                +
                +
                +
                + +
                + Baustein-Titel, Verwendung im Inhaltsverzeichnis +
                +
                +
                + +
                + Kurzbeschreibung für Text-Baustein Administration +
                +
                +
                +
                +
                +
                Objekt-Zuordnung +
                +   + + + Ein oder mehrere Objekte +
                +
                +
                +
                +
                + +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                + +
                + 2-stelliger Ländercode (WW = World Wide) +
                +
                +
                +
                +
                +
                +
                + +
                + Text-Baustein Version (Bsp.: v00.01.02) +
                +
                +
                + +
                + Text-Baustein Version (Bsp.: v00.01.02) +
                +
                +
                + +
                + 3-stellige Text-Baustein Nummerierung (Bsp.: 013) +
                + + check lfdnr innerhalb der gewählten Cat +    + +
                +
                +
                + +
                + optional: interne Bemerkung, auch für Release +
                +
                +
                + +
                + + interne Hilfs-Markierung +
                +
                +
                +
                +
                +
                +
                +
                Availability Class +   + + + Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" +
                +
                +
                +
                +
                Protection Class +   + + + Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" +
                +
                +
                +
                +
                Legacy + + + + ehemals G2 od. G3 +
                +
                +
                +
                + +
                +
                Text-Baustein +
                +
                +
                +
                +
                + +
                + + Start-Datum
                +
                +
                +
                + +
                + vorläufiges End-Datum
                +
                +
                +
                + + + Baustein aktiv oder in-aktiv +
                +
                +
                +
                +
                +
                +
                + +
                + Verantwortlicher: email, Abteilung, Jira-Key +
                +
                +
                +
                +
                +

                + + + +

                + + + +
                +

                + + +
                +
                + +
                + +
                + + + + +
                +
                + + + + +
                + +

                URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                + + + +
                +
                +
                +
                + +
                + + + + + + +
                + + +
                + + + + + + diff --git a/views/annexdata/index.erb b/views/annexdata/index.erb new file mode 100644 index 0000000..2b42061 --- /dev/null +++ b/views/annexdata/index.erb @@ -0,0 +1,68 @@ + +<%#include "annexdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                + +
                + +
                + + + + + + diff --git a/views/annexdata/listAnnex.erb b/views/annexdata/listAnnex.erb new file mode 100644 index 0000000..9add8b8 --- /dev/null +++ b/views/annexdata/listAnnex.erb @@ -0,0 +1,157 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +

                Auflistung aller Bausteine eines Anhangs, ohne Filterung.

                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + + +
                +
                + +
                +
                +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                +
                + +
                +
                +
                +
                + +
                +
                +
                +
                +
                +
                +
                + +
                + WW = World Wide +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                Release +
                +
                +
                +
                +
                +
                + + + nur de-/aktive Bausteine +
                +
                +
                +
                + + + alle Objekt-spezifische Bausteine +
                +
                +
                +
                + +
                +
                + +

                + +
                + +
                + +
                + + + + + diff --git a/views/annexdata/listWaste.erb b/views/annexdata/listWaste.erb new file mode 100644 index 0000000..820956b --- /dev/null +++ b/views/annexdata/listWaste.erb @@ -0,0 +1,214 @@ + +<%#include "annexdata.h" %> +<%#include "annexdatawaste.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                Ungefilterte Auflistung aller gelöschten Anhang Bausteine.
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + +
                +
                + + + + + + + + + + + + + + + + + +<% tfetch(QList, annexDataWasteList); %> +<% for (const auto &i : annexDataWasteList) { %> + + + + + + + + + + + + + + + +<% } %> +
                gelöscht amLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangWiederherstellung
                <%= i.lfdnr() %><%= i.specTitle() %><%= i.specDesc() %><%= i.specVersion() %><%= i.specRelease() %><%= i.objSname() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.catClass() %><%= i.country() %><%= i.lang() %> +     +     + +
                + +
                + + + + diff --git a/views/annexdata/listWaste.erb_2021-02-13_1203 b/views/annexdata/listWaste.erb_2021-02-13_1203 new file mode 100644 index 0000000..d395655 --- /dev/null +++ b/views/annexdata/listWaste.erb_2021-02-13_1203 @@ -0,0 +1,214 @@ + +<%#include "annexdata.h" %> +<%#include "annexdatawaste.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                Ungefilterte Auflistung aller gelöschten Anhang Bausteine.
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + +
                +
                + + + + + + + + + + + + + + + + + +<% tfetch(QList, annexDataWasteList); %> +<% for (const auto &i : annexDataWasteList) { %> + + + + + + + + + + + + + + + +<% } %> +
                gelöscht amLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangWiederherstellung
                <%= i.lfdnr() %><%= i.specTitle() %><%= i.specDesc() %><%= i.specVersion() %><%= i.specRelease() %><%= i.objSname() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.catClass() %><%= i.country() %><%= i.lang() %> +     +     + +
                + +
                + + + + diff --git a/views/annexdata/list_all.erb b/views/annexdata/list_all.erb new file mode 100644 index 0000000..b60ede7 --- /dev/null +++ b/views/annexdata/list_all.erb @@ -0,0 +1,136 @@ + +<%#include "annexdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                Ungefilterte Auflistung aller Bausteine.
                + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                +
                + +
                + + + + + + + + + + + + + + + + + +<% tfetch(QList, annexDataList); %> +<% for (const auto &i : annexDataList) { %> + + + + + + + + + + + + + + + + +<% } %> +
                IDLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangSpec ActiveBaustein
                <%= i.id() %><%= i.lfdnr() %><%= i.specTitle() %><%= i.specDesc() %><%= i.specVersion() %><%= i.specRelease() %><%= i.objSname() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.catClass() %><%= i.country() %><%= i.lang() %><%= i.specActive() %> + + + + +
                + +
                + + + + diff --git a/views/annexdata/list_all.erb_ori b/views/annexdata/list_all.erb_ori new file mode 100644 index 0000000..b0fcee9 --- /dev/null +++ b/views/annexdata/list_all.erb_ori @@ -0,0 +1,58 @@ + +<%#include "annexdata.h" %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                Listing Annex Data

                + +<%== linkTo("Create a new Annex Data", urla("create")) %>
                +
                + + + + + + + + + + + + + + + + + +<% tfetch(QList, annexDataList); %> +<% for (const auto &i : annexDataList) { %> + + + + + + + + + + + + + + + + + +<% } %> +
                IDLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangSpec ContentSpec Active
                <%= i.id() %><%= i.lfdnr() %><%= i.specTitle() %><%= i.specDesc() %><%= i.specVersion() %><%= i.specRelease() %><%= i.objSname() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.catClass() %><%= i.country() %><%= i.lang() %><%= i.specContent() %><%= i.specActive() %> + <%== linkTo("Show", urla("show", i.id())) %> + <%== linkTo("Edit", urla("save", i.id())) %> + <%== linkTo("Remove", urla("remove", i.id()), Tf::Post, "confirm('Are you sure?')") %> +
                + + + diff --git a/views/annexdata/printCiAnnex.erb b/views/annexdata/printCiAnnex.erb new file mode 100644 index 0000000..aee7d1f --- /dev/null +++ b/views/annexdata/printCiAnnex.erb @@ -0,0 +1,292 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +

                Release Review eines Anhangs.

                + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + + + +
                + + +
                + Kommentar zu " "
                + + + +
                +    +
                + +
                +
                + +
                +
                +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                +
                + +
                +
                +
                +
                + +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                Release +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + +
                +
                +
                +
                + +
                +
                +
                +
                + +
                +
                + +

                + + + +

                + +
                + +
                + +
                + + +
                + + +
                + + + + + + + + + + + + + diff --git a/views/annexdata/save.erb b/views/annexdata/save.erb new file mode 100644 index 0000000..5656c00 --- /dev/null +++ b/views/annexdata/save.erb @@ -0,0 +1,150 @@ + +<%#include "annexdata.h" %> +<% tfetch(QVariantMap, annexData); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                +
                + + <%== linkTo("Remove", urla("remove", annexData["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Editor + zurück +

                + +<%== formTag(urla("save", annexData["id"]), Tf::Post) %> +

                + +

                +

                + +

                +

                + +

                + + +
                +

                Daten Quellcode

                +

                +

                +

                +

                + +

                + + +
                + <%== linkTo("Remove", urla("remove", annexData["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Editor + zurück + +

                +

                Daten Anzeige

                +


                <%== annexData["specContent"] %>

                + +
                + <%== linkTo("Remove", urla("remove", annexData["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Editor + zurück + + +
                + + + + diff --git a/views/annexdata/show.erb b/views/annexdata/show.erb new file mode 100644 index 0000000..75aaf8c --- /dev/null +++ b/views/annexdata/show.erb @@ -0,0 +1,108 @@ + +<%#include "annexdata.h" %> +<% tfetch(AnnexData, annexData); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +
                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + +
                +
                + + <%== linkTo("Remove", urla("remove", annexData.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + Editor + zurück +
                + +
                +

                +

                +

                + + +
                +

                Daten Anzeige

                + +
                +


                <%== annexData.specContent() %>

                + +
                + +
                + <%== linkTo("Remove", urla("remove", annexData.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + Editor + zurück + +
                + + + + + diff --git a/views/annexdata/showAnnex.erb b/views/annexdata/showAnnex.erb new file mode 100644 index 0000000..068a108 --- /dev/null +++ b/views/annexdata/showAnnex.erb @@ -0,0 +1,250 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +

                Semi-Finale Anzeige eines Anhangs.

                + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + + + +
                + + +
                + Kommentar zu " "
                + + + +
                +    +
                + +
                +
                + +
                +
                +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                +
                + +
                +
                +
                +
                + +
                +
                +
                +
                +
                +
                +
                + +
                + WW = World Wide +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                Release +
                +
                +
                +
                +
                +
                + + + nur de-/aktive Bausteine +
                +
                +
                +
                + + + alle Objekt-spezifische Bausteine +
                +
                +
                +
                + +
                +
                + +

                + + + +

                + +
                + +
                + +
                + + +
                + + +
                + + + + + + + + + + + diff --git a/views/annexdata/showAnnex.erb_2021-02-13_1324 b/views/annexdata/showAnnex.erb_2021-02-13_1324 new file mode 100644 index 0000000..e038d5d --- /dev/null +++ b/views/annexdata/showAnnex.erb_2021-02-13_1324 @@ -0,0 +1,178 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +

                Semi-Finale Anzeige eines Anhangs.

                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + +
                +
                + +
                +
                +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                +
                + +
                +
                +
                +
                + +
                +
                +
                +
                +
                +
                +
                + +
                + WW = World Wide +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                Release +
                +
                +
                +
                +
                +
                + + + nur de-/aktive Bausteine +
                +
                +
                +
                + + + alle Objekt-spezifische Bausteine +
                +
                +
                +
                + +
                +
                + +

                + +
                + +
                + +
                + + + + + + + diff --git a/views/annexdata/showAnnex.erb_2021-03-21_1622 b/views/annexdata/showAnnex.erb_2021-03-21_1622 new file mode 100644 index 0000000..aa34ca9 --- /dev/null +++ b/views/annexdata/showAnnex.erb_2021-03-21_1622 @@ -0,0 +1,208 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + +
                + + + +
                +

                ITIS-API::Admin-Portal

                +
                + + + +

                <%= controller()->name() + ": " + controller()->activeAction() %>

                +

                Semi-Finale Anzeige eines Anhangs.

                + +

                <%==$ red_msg %> <%=$ error %>

                <%==$ green_msg %> <%=$ notice %>

                + + +
                + + +
                + Kommentar zu " "
                + + + +
                +    +
                + +
                +
                + +
                +
                +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                +
                + +
                +
                +
                +
                + +
                +
                +
                +
                +
                +
                +
                + +
                + WW = World Wide +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                Release +
                +
                +
                +
                +
                +
                + + + nur de-/aktive Bausteine +
                +
                +
                +
                + + + alle Objekt-spezifische Bausteine +
                +
                +
                +
                + +
                +
                + +

                + + +

                + +
                + +
                + +
                + + + + + + + + + diff --git a/views/annexdata/showAnnexElectron.erb b/views/annexdata/showAnnexElectron.erb new file mode 100644 index 0000000..72376f9 --- /dev/null +++ b/views/annexdata/showAnnexElectron.erb @@ -0,0 +1,147 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +

                Vorgabedokument (Anhang) der BMW Group

                +

                Semi-Finale Anzeige eines Anhangs.

                + +

                <%==$ red_msg %><%=$ error %>

                <%==$ green_msg %><%=$ notice %>

                + + + + + +
                +
                + +
                +
                +
                +
                Objekt-Attribute +
                +
                +
                +
                +
                +
                + +
                +
                +
                +
                + +
                +
                +
                +
                +
                +
                +
                + +
                + WW = World Wide +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                Release +
                +
                +
                +
                +
                +
                + + + nur de-/aktive Bausteine +
                +
                +
                +
                + + + alle Objekt-spezifische Bausteine +
                +
                +
                +
                + +
                +
                + +

                + +
                + +
                + +
                + + +
                  + + + diff --git a/views/annexdata/showCiAnnex.erb b/views/annexdata/showCiAnnex.erb new file mode 100644 index 0000000..b9440f8 --- /dev/null +++ b/views/annexdata/showCiAnnex.erb @@ -0,0 +1,338 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                  + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +

                  Release Review eines Anhangs.

                  + + + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + + + +
                  + + +
                  + Kommentar zu " "
                  + + + +
                  +    +
                  + +
                  +
                  + +
                  +
                  +
                  +
                  Objekt-Attribute +
                  +
                  +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  Release +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  + +
                  +
                  + +

                  + + + + + +

                  + +
                  + +
                  + +
                  + + +
                  + + +
                  + + + + + + + + + + + + + + diff --git a/views/annexdata/showCiAnnex.erb_2021-06-01_12090 b/views/annexdata/showCiAnnex.erb_2021-06-01_12090 new file mode 100644 index 0000000..b9440f8 --- /dev/null +++ b/views/annexdata/showCiAnnex.erb_2021-06-01_12090 @@ -0,0 +1,338 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                  + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +

                  Release Review eines Anhangs.

                  + + + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + + + +
                  + + +
                  + Kommentar zu " "
                  + + + +
                  +    +
                  + +
                  +
                  + +
                  +
                  +
                  +
                  Objekt-Attribute +
                  +
                  +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  Release +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  + +
                  +
                  + +

                  + + + + + +

                  + +
                  + +
                  + +
                  + + +
                  + + +
                  + + + + + + + + + + + + + + diff --git a/views/annexdata/showWaste.erb b/views/annexdata/showWaste.erb new file mode 100644 index 0000000..7f98ead --- /dev/null +++ b/views/annexdata/showWaste.erb @@ -0,0 +1,105 @@ + +<%#include "annexdata.h" %> +<% tfetch(AnnexData, annexData); %> +<%#include "annexdatawaste.h" %> +<% tfetch(AnnexDataWaste, annexDataWaste); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  +
                  + + <%== linkTo("Remove", urla("removeWaste", annexDataWaste.id()), Tf::Post, "confirm('Are you sure?')") %> +    + zurück +
                  + +
                  +

                  +

                  +

                  +

                  +

                  +

                  +

                  +

                  +

                  +

                  +

                  +

                  +

                  + +
                  + +
                  +

                  Daten Anzeige

                  +


                  +

                  <%== annexDataWaste.specContent() %>

                  +

                  +
                  <%= annexDataWaste.specContent() %>
                  +
                  +
                  + +
                  + <%== linkTo("Remove", urla("removeWaste", annexDataWaste.id()), Tf::Post, "confirm('Are you sure?')") %> +    + zurück + +
                  + + + + diff --git a/views/annexdatacomments/create.erb b/views/annexdatacomments/create.erb new file mode 100644 index 0000000..6975206 --- /dev/null +++ b/views/annexdatacomments/create.erb @@ -0,0 +1,129 @@ + +<%#include "annexdatacomments.h" %> +<% tfetch(QVariantMap, annexDataComments); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %> <%=$ error %>

                  <%==$ green_msg %> <%=$ notice %>

                  + +
                  + +
                  + +
                  +<%== formTag(urla("create"), Tf::Post) %> +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +

                  + +

                  + +
                  + +
                  +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  + + + + diff --git a/views/annexdatacomments/index.erb b/views/annexdatacomments/index.erb new file mode 100644 index 0000000..26ace2f --- /dev/null +++ b/views/annexdatacomments/index.erb @@ -0,0 +1,70 @@ + +<%#include "annexdatacomments.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %> <%=$ error %>

                  <%==$ green_msg %> <%=$ notice %>

                  + +
                  + +
                  +

                  Anzahl Kommentare: <%=$ count_id %>

                  +

                  Anzahl Kommentatoren: <%=$ count_users %>

                  +
                  + +
                  + + + + + diff --git a/views/annexdatacomments/list_all.erb b/views/annexdatacomments/list_all.erb new file mode 100644 index 0000000..b562940 --- /dev/null +++ b/views/annexdatacomments/list_all.erb @@ -0,0 +1,157 @@ + +<%#include "annexdatacomments.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %> <%=$ error %>

                  <%==$ green_msg %> <%=$ notice %>

                  + +
                  +
                  + +
                  + + + + + + + + + + + + +<% tfetch(QList, annexDataCommentsList); %> +<% for (const auto &i : annexDataCommentsList) { %> + + + + + + + + + + +<% } %> +
                  IDComment CreatedSpec IDSpec TitleSpec VersionUsernameUser CommentBaustein
                  <%= i.id() %><%= i.specId() %><%= i.specTitle() %><%= i.specVersion() %><%= i.username() %><%= i.userComment() %> + + + + +
                  + +
                  + + + + + diff --git a/views/annexdatacomments/save.erb b/views/annexdatacomments/save.erb new file mode 100644 index 0000000..c308ad4 --- /dev/null +++ b/views/annexdatacomments/save.erb @@ -0,0 +1,185 @@ + +<%#include "annexdatacomments.h" %> +<% tfetch(QVariantMap, annexDataComments); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %> <%=$ error %>

                  <%==$ green_msg %> <%=$ notice %>

                  + +
                  + +
                  + + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  +<%== formTag(urla("save", annexDataComments["id"]), Tf::Post) %> +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +

                  + +

                  +
                  + +
                  + +
                  + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  + + + + + + + + diff --git a/views/annexdatacomments/show.erb b/views/annexdatacomments/show.erb new file mode 100644 index 0000000..7111140 --- /dev/null +++ b/views/annexdatacomments/show.erb @@ -0,0 +1,143 @@ + +<%#include "annexdatacomments.h" %> +<% tfetch(AnnexDataComments, annexDataComments); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %> <%=$ error %>

                  <%==$ green_msg %> <%=$ notice %>

                  + +
                  + +
                  + + <%== linkTo("Remove", urla("remove", annexDataComments.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                  + +
                  +
                  +
                  + +
                  +
                  + + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  + +


                  <%== annexDataComments.userComment() %>

                  +
                  +
                  + +
                  + <%== linkTo("Remove", urla("remove", annexDataComments.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit +« zurück + +
                  + + + + + diff --git a/views/annexmeta/create.erb b/views/annexmeta/create.erb new file mode 100644 index 0000000..f416b0e --- /dev/null +++ b/views/annexmeta/create.erb @@ -0,0 +1,57 @@ + +<%#include "annexmeta.h" %> +<% tfetch(QVariantMap, annexMeta); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +

                  New Annex Meta

                  + +<%== formTag(urla("create"), Tf::Post) %> +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  + + +<%== linkTo("Back", urla("index")) %> + + + diff --git a/views/annexmeta/index.erb b/views/annexmeta/index.erb new file mode 100644 index 0000000..eaae435 --- /dev/null +++ b/views/annexmeta/index.erb @@ -0,0 +1,56 @@ + +<%#include "annexmeta.h" %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                  Listing Annex Meta

                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +<%== linkTo("Create a new Annex Meta", urla("create")) %>
                  +
                  + + + + + + + + + + + + + + + +<% tfetch(QList, annexMetaList); %> +<% for (const auto &i : annexMetaList) { %> + + + + + + + + + + + + + + + +<% } %> +
                  IDSpec Data IDSpec CreatedSpec Last ModifiedSpec Valid StartSpec Valid EndLast EditorG LegacyResponsibilitySpec CommentSpec MarkerGroups
                  <%= i.id() %><%= i.specDataId() %><%= i.specCreated() %><%= i.specLastModified() %><%= i.specValidStart() %><%= i.specValidEnd() %><%= i.lastEditor() %><%= i.gLegacy() %><%= i.responsibility() %><%= i.specComment() %><%= i.specMarker() %><%= i.groups() %> + <%== linkTo("Show", urla("show", i.id())) %> + <%== linkTo("Edit", urla("save", i.id())) %> + <%== linkTo("Remove", urla("remove", i.id()), Tf::Post, "confirm('Are you sure?')") %> +
                  + + + diff --git a/views/annexmeta/save.erb b/views/annexmeta/save.erb new file mode 100644 index 0000000..5386437 --- /dev/null +++ b/views/annexmeta/save.erb @@ -0,0 +1,60 @@ + +<%#include "annexmeta.h" %> +<% tfetch(QVariantMap, annexMeta); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +

                  Editing Annex Meta

                  + +<%== formTag(urla("save", annexMeta["id"]), Tf::Post) %> +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  + + +<%== linkTo("Show", urla("show", annexMeta["id"])) %> | +<%== linkTo("Back", urla("index")) %> + + diff --git a/views/annexmeta/show.erb b/views/annexmeta/show.erb new file mode 100644 index 0000000..55a8cea --- /dev/null +++ b/views/annexmeta/show.erb @@ -0,0 +1,31 @@ + +<%#include "annexmeta.h" %> +<% tfetch(AnnexMeta, annexMeta); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +

                  Showing Annex Meta

                  +
                  ID
                  <%= annexMeta.id() %>

                  +
                  Spec Data ID
                  <%= annexMeta.specDataId() %>

                  +
                  Spec Created
                  <%= annexMeta.specCreated() %>

                  +
                  Spec Last Modified
                  <%= annexMeta.specLastModified() %>

                  +
                  Spec Valid Start
                  <%= annexMeta.specValidStart() %>

                  +
                  Spec Valid End
                  <%= annexMeta.specValidEnd() %>

                  +
                  Last Editor
                  <%= annexMeta.lastEditor() %>

                  +
                  G Legacy
                  <%= annexMeta.gLegacy() %>

                  +
                  Responsibility
                  <%= annexMeta.responsibility() %>

                  +
                  Spec Comment
                  <%= annexMeta.specComment() %>

                  +
                  Spec Marker
                  <%= annexMeta.specMarker() %>

                  +
                  Groups
                  <%= annexMeta.groups() %>

                  + +<%== linkTo("Edit", urla("save", annexMeta.id())) %> | +<%== linkTo("Back", urla("index")) %> + + + diff --git a/views/appvars/create.erb b/views/appvars/create.erb new file mode 100644 index 0000000..f41c72d --- /dev/null +++ b/views/appvars/create.erb @@ -0,0 +1,94 @@ + +<%#include "appvars.h" %> +<% tfetch(QVariantMap, appVars); %> +<% tfetch(QVariantMap, objects); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + +<%== formTag(urla("create"), Tf::Post) %> +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  + + +
                  + +« zurück + +
                  + + + + + diff --git a/views/appvars/index.erb b/views/appvars/index.erb new file mode 100644 index 0000000..1310693 --- /dev/null +++ b/views/appvars/index.erb @@ -0,0 +1,67 @@ + +<%#include "appvars.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  Variablen die bei der Generierung der Dokumente eingesetzt werden.
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +

                  Handhabung:
                  im Baustein die Variable in 2 Klammern (curly brackets) einschliessen.

                  integrierte Variablen:

                  • {{YYYY}} : Jahreszahl
                  • {{MM}} : Monatszahl

                  + +
                  + + + + + diff --git a/views/appvars/list_all.erb b/views/appvars/list_all.erb new file mode 100644 index 0000000..5bbaa29 --- /dev/null +++ b/views/appvars/list_all.erb @@ -0,0 +1,116 @@ + +<%#include "appvars.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  Variablen die bei der Generierung der Dokumente eingesetzt werden.
                  + +

                  <%==$ red_msg %> <%=$ error %>

                  <%==$ green_msg %> <%=$ notice %>

                  + +
                  +

                  Handhabung:
                  im Baustein die Variable in 2 Klammern (curly brackets) einschliessen.

                  integrierte Variablen:

                  • {{YYYY}} : Jahreszahl
                  • {{MM}} : Monatszahl

                  + +
                  + + + + + + + + + + +<% tfetch(QList, appVarsList); %> +<% for (const auto &i : appVarsList) { %> + + + + + + + + + +<% } %> +
                  IDStd TypeStd AttrStd Val DeStd Val EnActiveBaustein
                  <%= i.id() %><%= i.stdType() %><%= i.stdAttr() %><%= i.stdValDe() %><%= i.stdValEn() %><%= i.active() %> +     +     + +
                  + +
                  + + + + diff --git a/views/appvars/save.erb b/views/appvars/save.erb new file mode 100644 index 0000000..750fe64 --- /dev/null +++ b/views/appvars/save.erb @@ -0,0 +1,104 @@ + +<%#include "appvars.h" %> +<% tfetch(QVariantMap, appVars); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + + <%== linkTo("Remove", urla("remove", appVars["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +<%== formTag(urla("save", appVars["id"]), Tf::Post) %> +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  + + + +
                  + <%== linkTo("Remove", urla("remove", appVars["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  + + + + + diff --git a/views/appvars/show.erb b/views/appvars/show.erb new file mode 100644 index 0000000..4af2eef --- /dev/null +++ b/views/appvars/show.erb @@ -0,0 +1,100 @@ + +<%#include "appvars.h" %> +<% tfetch(AppVars, appVars); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + + <%== linkTo("Remove", urla("remove", appVars.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                  + +
                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +
                  + +
                  + <%== linkTo("Remove", urla("remove", appVars.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                  + + + + diff --git a/views/catclasses/create.erb b/views/catclasses/create.erb new file mode 100644 index 0000000..e1d1bbd --- /dev/null +++ b/views/catclasses/create.erb @@ -0,0 +1,109 @@ + +<%#include "catclasses.h" %> +<% tfetch(QVariantMap, catClasses); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + +<%== formTag(urla("create"), Tf::Post) %> +
                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +
                  + + +
                  +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  + + + + diff --git a/views/catclasses/index.erb b/views/catclasses/index.erb new file mode 100644 index 0000000..ad4fe60 --- /dev/null +++ b/views/catclasses/index.erb @@ -0,0 +1,67 @@ + +<%#include "catclasses.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + +
                  + + + + + diff --git a/views/catclasses/list_all.erb b/views/catclasses/list_all.erb new file mode 100644 index 0000000..e67bd80 --- /dev/null +++ b/views/catclasses/list_all.erb @@ -0,0 +1,126 @@ + +<%#include "catclasses.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %> <%=$ error %>

                  <%==$ green_msg %> <%=$ notice %>

                  + +
                  +
                  + +
                  + + + + + + + + + + + + + + + +<% tfetch(QList, catClassesList); %> +<% for (const auto &i : catClassesList) { %> + + + + + + + + + + + + + + +<% } %> +
                  IDCat Lname DeCat Sname DeDesc DeCat Lname EnCat Sname EnDesc EnClass TypeGroupsSortActiveBaustein
                  <%= i.id() %><%= i.catLnameDe() %><%= i.catSnameDe() %><%= i.descDe() %><%= i.catLnameEn() %><%= i.catSnameEn() %><%= i.descEn() %><%= i.classType() %><%= i.groups() %><%= i.sort() %><%= i.active() %> +     +     + +
                  + +
                  + + + + diff --git a/views/catclasses/save.erb b/views/catclasses/save.erb new file mode 100644 index 0000000..ccbf8af --- /dev/null +++ b/views/catclasses/save.erb @@ -0,0 +1,119 @@ + +<%#include "catclasses.h" %> +<% tfetch(QVariantMap, catClasses); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + + <%== linkTo("Remove", urla("remove", catClasses["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +<%== formTag(urla("save", catClasses["id"]), Tf::Post) %> +
                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +
                  + + +
                  + <%== linkTo("Remove", urla("remove", catClasses["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  + + + + diff --git a/views/catclasses/show.erb b/views/catclasses/show.erb new file mode 100644 index 0000000..9d90aa8 --- /dev/null +++ b/views/catclasses/show.erb @@ -0,0 +1,112 @@ + +<%#include "catclasses.h" %> +<% tfetch(CatClasses, catClasses); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + + <%== linkTo("Remove", urla("remove", catClasses.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                  + +
                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +
                  + +
                  + <%== linkTo("Remove", urla("remove", catClasses.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit +« zurück + +
                  + + + + diff --git a/views/glossar/create.erb b/views/glossar/create.erb new file mode 100644 index 0000000..c0423ed --- /dev/null +++ b/views/glossar/create.erb @@ -0,0 +1,113 @@ + +<%#include "glossar.h" %> +<% tfetch(QVariantMap, glossar); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                  + +
                  + +
                  +<%== formTag(urla("create"), Tf::Post) %> +
                  +

                  + +

                  +
                  + +
                  +
                  + +
                  + +
                  + +
                  +
                  + +
                  + +

                  + +

                  +

                  + +

                  +
                  + +
                  +
                  +« zurück + +
                  + + + + + diff --git a/views/glossar/create.erb_2021-03-19_0933 b/views/glossar/create.erb_2021-03-19_0933 new file mode 100644 index 0000000..8118614 --- /dev/null +++ b/views/glossar/create.erb_2021-03-19_0933 @@ -0,0 +1,106 @@ + +<%#include "glossar.h" %> +<% tfetch(QVariantMap, glossar); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + +<%== formTag(urla("create"), Tf::Post) %> +
                  +

                  + +

                  +

                  + +  + +

                  +

                  + +

                  +

                  + +

                  + +

                  + +

                  +

                  + +

                  +
                  + + +
                  +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  + + + + + diff --git a/views/glossar/index.erb b/views/glossar/index.erb new file mode 100644 index 0000000..55e7748 --- /dev/null +++ b/views/glossar/index.erb @@ -0,0 +1,120 @@ + +<%#include "glossar.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  +

                  Einträge: <%=$ glossar_count %>

                  +

                  deutsch: <%=$ de_terms %>

                  +

                  englisch: <%=$ en_terms %>

                  +
                  +
                  + +
                  + + + + + + + + + + +<% tfetch(QList, glossarList); %> +<% for (const auto &i : glossarList) { %> + + + + + + + + + +<% } %> +
                  AcronymTerm DeTerm EnDesc DeDesc EnActive
                  <%= i.acronym() %><%= i.termDe() %><%= i.termEn() %><%= i.descDe() %><%= i.descEn() %><%= i.active() %>
                  + +
                  + + + + + + diff --git a/views/glossar/index.erb_2021-01-17_1531 b/views/glossar/index.erb_2021-01-17_1531 new file mode 100644 index 0000000..13efefb --- /dev/null +++ b/views/glossar/index.erb_2021-01-17_1531 @@ -0,0 +1,73 @@ + +<%#include "glossar.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%=$ red_msg %><%=$ error %>

                  <%=$ green_msg %><%=$ notice %>

                  + +
                  + + +

                  Einträge: <%=$ glossar_count %>

                  +

                  deutsch: <%=$ de_terms %>

                  +

                  englisch: <%=$ en_terms %>

                  + +
                  + +
                  + + + + + + diff --git a/views/glossar/list_all.erb b/views/glossar/list_all.erb new file mode 100644 index 0000000..2f887b0 --- /dev/null +++ b/views/glossar/list_all.erb @@ -0,0 +1,120 @@ + +<%#include "glossar.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  +
                  + +
                  + + + + + + + + + + + + +<% tfetch(QList, glossarList); %> +<% for (const auto &i : glossarList) { %> + + + + + + + + + + + +<% } %> +
                  IDAcronymTerm DeTerm EnDesc DeDesc EnActiveBaustein
                  <%= i.id() %><%= i.acronym() %><%= i.termDe() %><%= i.termEn() %><%= i.descDe() %><%= i.descEn() %><%= i.active() %> + + + +
                  + +
                  + + + + diff --git a/views/glossar/list_allElectron.erb b/views/glossar/list_allElectron.erb new file mode 100644 index 0000000..650b8bd --- /dev/null +++ b/views/glossar/list_allElectron.erb @@ -0,0 +1,94 @@ + +<%#include "glossar.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + +

                  Glossar

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  +
                  + +
                  + + + + + + + + +<% tfetch(QList, glossarList); %> +<% for (const auto &i : glossarList) { %> + + + + + + + +<% } %> +
                  AcronymTerm DeTerm EnDesc DeDesc En
                  <%= i.acronym() %><%= i.termDe() %><%= i.termEn() %><%= i.descDe() %><%= i.descEn() %>
                  + +
                  + + + diff --git a/views/glossar/save.erb b/views/glossar/save.erb new file mode 100644 index 0000000..73a8ab5 --- /dev/null +++ b/views/glossar/save.erb @@ -0,0 +1,125 @@ + +<%#include "glossar.h" %> +<% tfetch(QVariantMap, glossar); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                  + +
                  + + <%== linkTo("Remove", urla("remove", glossar["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  +<%== formTag(urla("save", glossar["id"]), Tf::Post) %> +
                  +
                  + +
                  +
                  + +
                  + +
                  + +
                  +
                  + +
                  + +
                  + +
                  + +
                  + +
                  + +

                  + +

                  +

                  + +

                  +
                  + +
                  +
                  + <%== linkTo("Remove", urla("remove", glossar["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  + + + + + diff --git a/views/glossar/save.erb_2021-03-19_0954 b/views/glossar/save.erb_2021-03-19_0954 new file mode 100644 index 0000000..bd9bc0d --- /dev/null +++ b/views/glossar/save.erb_2021-03-19_0954 @@ -0,0 +1,116 @@ + +<%#include "glossar.h" %> +<% tfetch(QVariantMap, glossar); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + + <%== linkTo("Remove", urla("remove", glossar["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +<%== formTag(urla("save", glossar["id"]), Tf::Post) %> +
                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  + +

                  + +

                  +

                  + +

                  +
                  + + +
                  + <%== linkTo("Remove", urla("remove", glossar["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  + + + + + diff --git a/views/glossar/show.erb b/views/glossar/show.erb new file mode 100644 index 0000000..73dae82 --- /dev/null +++ b/views/glossar/show.erb @@ -0,0 +1,110 @@ + +<%#include "glossar.h" %> +<% tfetch(Glossar, glossar); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + + <%== linkTo("Remove", urla("remove", glossar.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                  + +
                  +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  + +

                  + +

                  +
                  +
                  + +
                  + <%== linkTo("Remove", urla("remove", glossar.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                  + + + + diff --git a/views/glossar/show.erb_2021-03-19_1030 b/views/glossar/show.erb_2021-03-19_1030 new file mode 100644 index 0000000..63689a5 --- /dev/null +++ b/views/glossar/show.erb_2021-03-19_1030 @@ -0,0 +1,106 @@ + +<%#include "glossar.h" %> +<% tfetch(Glossar, glossar); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + + <%== linkTo("Remove", urla("remove", glossar.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                  + +
                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +
                  + +
                  + <%== linkTo("Remove", urla("remove", glossar.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                  + + + + diff --git a/views/itisgroups/create.erb b/views/itisgroups/create.erb new file mode 100644 index 0000000..618eb6b --- /dev/null +++ b/views/itisgroups/create.erb @@ -0,0 +1,88 @@ + +<%#include "itisgroups.h" %> +<% tfetch(QVariantMap, itisGroups); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + +<%== formTag(urla("create"), Tf::Post) %> +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  + + + +
                  +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                  + + + + + diff --git a/views/itisgroups/index.erb b/views/itisgroups/index.erb new file mode 100644 index 0000000..bce81c2 --- /dev/null +++ b/views/itisgroups/index.erb @@ -0,0 +1,68 @@ + +<%#include "itisgroups.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + +
                  + + + + + + diff --git a/views/itisgroups/list_all.erb b/views/itisgroups/list_all.erb new file mode 100644 index 0000000..290a444 --- /dev/null +++ b/views/itisgroups/list_all.erb @@ -0,0 +1,112 @@ + +<%#include "itisgroups.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  +
                  + +
                  + + + + + + + + +<% tfetch(QList, itisGroupsList); %> +<% for (const auto &i : itisGroupsList) { %> + + + + + + + +<% } %> +
                  IDGroupnameGroupdescActiveBaustein
                  <%= i.id() %><%= i.groupname() %><%= i.groupdesc() %><%= i.active() %> +     +     + +
                  + +
                  + + + + diff --git a/views/itisgroups/save.erb b/views/itisgroups/save.erb new file mode 100644 index 0000000..5b30660 --- /dev/null +++ b/views/itisgroups/save.erb @@ -0,0 +1,97 @@ + +<%#include "itisgroups.h" %> +<% tfetch(QVariantMap, itisGroups); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  +
                  + + <%== linkTo("Remove", urla("remove", itisGroups["id"]), Tf::Post, "confirm('Are you sure?')") %> +    + zurück +

                  + + +<%== formTag(urla("save", itisGroups["id"]), Tf::Post) %> +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  + + +
                  + <%== linkTo("Remove", urla("remove", itisGroups["id"]), Tf::Post, "confirm('Are you sure?')") %> +    + zurück + +
                  + + + + + diff --git a/views/itisgroups/show.erb b/views/itisgroups/show.erb new file mode 100644 index 0000000..32ee308 --- /dev/null +++ b/views/itisgroups/show.erb @@ -0,0 +1,86 @@ + +<%#include "itisgroups.h" %> +<% tfetch(ItisGroups, itisGroups); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  +
                  + + <%== linkTo("Remove", urla("remove", itisGroups.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                  + +
                  +

                  +

                  +

                  +

                  +
                  + +
                  + <%== linkTo("Remove", urla("remove", itisGroups.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                  + + + + diff --git a/views/itisnews/create.erb b/views/itisnews/create.erb new file mode 100644 index 0000000..5ba3dad --- /dev/null +++ b/views/itisnews/create.erb @@ -0,0 +1,149 @@ + +<%#include "itisnews.h" %> +<% tfetch(QVariantMap, itisNews); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + +<%== formTag(urla("create"), Tf::Post) %> +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  +

                  + +

                  + + +
                  + +« zurück + +
                  + + + + + diff --git a/views/itisnews/create.erb_2021-01-24_1409 b/views/itisnews/create.erb_2021-01-24_1409 new file mode 100644 index 0000000..dc5a5b4 --- /dev/null +++ b/views/itisnews/create.erb_2021-01-24_1409 @@ -0,0 +1,118 @@ + +<%#include "itisnews.h" %> +<% tfetch(QVariantMap, itisNews); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + +<%== formTag(urla("create"), Tf::Post) %> +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  +

                  +

                  + +

                  + + +
                  + +« zurück + +
                  + + + + + diff --git a/views/itisnews/index.erb b/views/itisnews/index.erb new file mode 100644 index 0000000..914fcd3 --- /dev/null +++ b/views/itisnews/index.erb @@ -0,0 +1,85 @@ + +<%#include "itisnews.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + +
                  +

                  ITIS-API::Admin-Portal

                  +
                  + + + +

                  <%= controller()->name() + ": " + controller()->activeAction() %>

                  +
                  + +

                  <%==$ red_msg %><%=$ error %>

                  <%==$ green_msg %><%=$ notice %>

                  + +
                  + +
                  + +
                  + +
                  +

                  Admin News

                  +
                    +
                    + +
                    +

                    IT-IS Standards News

                    +
                      +
                      + +
                      +

                      IT-IS Product News

                      +
                        +
                        + +
                        + + + + + diff --git a/views/itisnews/indexElectron.erb b/views/itisnews/indexElectron.erb new file mode 100644 index 0000000..4306d40 --- /dev/null +++ b/views/itisnews/indexElectron.erb @@ -0,0 +1,67 @@ + +<%#include "itisnews.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + +

                        IT-IS Standards News

                        +
                        + +

                        <%==$ red_msg %><%=$ error %>

                        <%==$ green_msg %><%=$ notice %>

                        + +
                        + +
                        + +
                        + +
                        +

                        IT-IS Standards News

                        +
                          +
                          + +
                          +

                          IT-IS Product News

                          +
                            +
                            + +
                            + + + diff --git a/views/itisnews/list_all.erb b/views/itisnews/list_all.erb new file mode 100644 index 0000000..38b207b --- /dev/null +++ b/views/itisnews/list_all.erb @@ -0,0 +1,137 @@ + +<%#include "itisnews.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + +
                            + +
                            + + + + + + + + + + + + + + + + + + +<% tfetch(QList, itisNewsList); %> +<% for (const auto &i : itisNewsList) { %> + + + + + + + + + + + + + + + + + +<% } %> +
                            IDNews TypeNews Type SubNews Title DeNews Desc DeNews Text DeNews PrioAuthorNews CreatedNews Valid StartNews Valid EndBaustein
                            <%= i.id() %><%= i.newsType() %><%= i.newsTypeSub() %><%= i.newsTitleDe() %><%= i.newsDescDe() %><%= i.newsTextDe() %><%= i.newsPrio() %><%= i.author() %><%= i.newsCreated() %><%= i.newsValidStart() %><%= i.newsValidEnd() %> + + + +
                            + +
                            + + + + diff --git a/views/itisnews/save.erb b/views/itisnews/save.erb new file mode 100644 index 0000000..8d3fe43 --- /dev/null +++ b/views/itisnews/save.erb @@ -0,0 +1,127 @@ + +<%#include "itisnews.h" %> +<% tfetch(QVariantMap, itisNews); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + + <%== linkTo("Remove", urla("remove", itisNews["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +<%== formTag(urla("save", itisNews["id"]), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + + +
                            + <%== linkTo("Remove", urla("remove", itisNews["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                            + + + + diff --git a/views/itisnews/show.erb b/views/itisnews/show.erb new file mode 100644 index 0000000..94bab45 --- /dev/null +++ b/views/itisnews/show.erb @@ -0,0 +1,121 @@ + +<%#include "itisnews.h" %> +<% tfetch(ItisNews, itisNews); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + + <%== linkTo("Remove", urla("remove", itisNews.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                            + +
                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +
                            + +
                            + <%== linkTo("Remove", urla("remove", itisNews.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + diff --git a/views/lenkinfo/create.erb b/views/lenkinfo/create.erb new file mode 100644 index 0000000..0e47e4c --- /dev/null +++ b/views/lenkinfo/create.erb @@ -0,0 +1,144 @@ + +<%#include "lenkinfo.h" %> +<% tfetch(QVariantMap, lenkinfo); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            + +
                            +<%== formTag(urla("create"), Tf::Post) %> +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +

                             

                            +

                            + +

                            +
                            + + +
                            +
                            +« zurück + +
                            + + + + diff --git a/views/lenkinfo/index.erb b/views/lenkinfo/index.erb new file mode 100644 index 0000000..3b3ae8a --- /dev/null +++ b/views/lenkinfo/index.erb @@ -0,0 +1,76 @@ + +<%#include "lenkinfo.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Lenkungsinfos
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            +
                            + +
                            +
                            + + + + + diff --git a/views/lenkinfo/list_all.erb b/views/lenkinfo/list_all.erb new file mode 100644 index 0000000..f8c06f5 --- /dev/null +++ b/views/lenkinfo/list_all.erb @@ -0,0 +1,153 @@ + +<%#include "lenkinfo.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller Bausteine.
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + +<% tfetch(QList, lenkinfoList); %> +<% for (const auto &i : lenkinfoList) { %> + + + + + + + + + + + + + + + + + + + + + +<% } %> +
                            IDSpec ObjSpec TitleAc ClassPc ClassCountryLangLenk VersionLenk StatusLenk Valid StartdateLenk ContentBaustein
                            <%= i.id() %><%= i.specObj() %><%= i.specTitle() %><%= i.acClass() %><%= i.pcClass() %><%= i.country() %><%= i.lang() %><%= i.lenkVersion() %><%= i.lenkStatus() %> + + + + +
                            + +
                            + + + + + diff --git a/views/lenkinfo/save.erb b/views/lenkinfo/save.erb new file mode 100644 index 0000000..ae7844f --- /dev/null +++ b/views/lenkinfo/save.erb @@ -0,0 +1,206 @@ + +<%#include "lenkinfo.h" %> +<% tfetch(QVariantMap, lenkinfo); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            + + <%== linkTo("Remove", urla("remove", lenkinfo["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                            + +<%== formTag(urla("save", lenkinfo["id"]), Tf::Post) %> +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +

                             

                            +

                            + +

                            + + + +
                            +
                            + <%== linkTo("Remove", urla("remove", lenkinfo["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                            + + + + + + + + + diff --git a/views/lenkinfo/show.erb b/views/lenkinfo/show.erb new file mode 100644 index 0000000..1596340 --- /dev/null +++ b/views/lenkinfo/show.erb @@ -0,0 +1,199 @@ + +<%#include "lenkinfo.h" %> +<% tfetch(Lenkinfo, lenkinfo); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            + + <%== linkTo("Remove", urla("remove", lenkinfo.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                            + +
                            +
                            +

                            + +

                            + +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + <%== linkTo("Remove", urla("remove", lenkinfo.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + + +
                            + + + + + + + diff --git a/views/mailer/crUser.erb b/views/mailer/crUser.erb new file mode 100644 index 0000000..bb5b002 --- /dev/null +++ b/views/mailer/crUser.erb @@ -0,0 +1,10 @@ +Subject: ITIS Account +To: <%==$ username %> +From: zheng.bote@googlemail.com + +Hello, +your account <%==$ username %> for itis.hitchhiker.tech has been created. +An additional eMail with your password will coming soon. +Have a nice day, +ZHENG Robert + diff --git a/views/mailer/crUserPwd.erb b/views/mailer/crUserPwd.erb new file mode 100644 index 0000000..b7fbea5 --- /dev/null +++ b/views/mailer/crUserPwd.erb @@ -0,0 +1,10 @@ +Subject: ITIS Account +To: <%==$ username %> +From: zheng.bote@googlemail.com + +Hello, +your initial password (key sensitive): <%==$ userpwd %> +Please change your initial password asap. +Have a nice day, +ZHENG Robert + diff --git a/views/mailer/infoUserPwd.erb b/views/mailer/infoUserPwd.erb new file mode 100644 index 0000000..c89686b --- /dev/null +++ b/views/mailer/infoUserPwd.erb @@ -0,0 +1,10 @@ +Subject: ITIS Account +To: <%==$ username %> +From: zheng.bote@googlemail.com + +Hello, +your password has been changed. +If you have not made this change, please report this security breach immediately. +Have a nice day, +ZHENG Robert + diff --git a/views/mailer/mail.erb b/views/mailer/mail.erb new file mode 100644 index 0000000..08eb2ab --- /dev/null +++ b/views/mailer/mail.erb @@ -0,0 +1,6 @@ +Subject: Test Mail +To: <%==$ to %> +From: zheng.bote@googlemail.com + +Hi, +This is a test mail. diff --git a/views/mailer/mail.erb_ORI b/views/mailer/mail.erb_ORI new file mode 100644 index 0000000..03967e8 --- /dev/null +++ b/views/mailer/mail.erb_ORI @@ -0,0 +1,6 @@ +Subject: <%==$ subject %> +From: <%==$ from %> +To: <%==$ to %> + +Hello, +... diff --git a/views/mailer/preleaseInfo.erb b/views/mailer/preleaseInfo.erb new file mode 100644 index 0000000..09367d3 --- /dev/null +++ b/views/mailer/preleaseInfo.erb @@ -0,0 +1,10 @@ +Subject: ITIS Pre-Release +To: zheng.bote@googlemail.com +From: zheng.bote@googlemail.com + +Hello, +<%==$ username %> has sent a pre-release request with id: <%==$ id %> +Please check and review asap. +Have a nice day, +ZHENG Robert + diff --git a/views/mailer/regUserAdmInfo.erb b/views/mailer/regUserAdmInfo.erb new file mode 100644 index 0000000..a48ac60 --- /dev/null +++ b/views/mailer/regUserAdmInfo.erb @@ -0,0 +1,9 @@ +Subject: ITIS Account +To: zheng.bote@googlemail.com +From: zheng.bote@googlemail.com + +Hello, +an User Registration request for you: <%==$ username %> for itis.hitchhiker.tech has been created. +Have a nice day, +ZHENG Robert + diff --git a/views/objects/create.erb b/views/objects/create.erb new file mode 100644 index 0000000..db24003 --- /dev/null +++ b/views/objects/create.erb @@ -0,0 +1,100 @@ + +<%#include "objects.h" %> +<% tfetch(QVariantMap, objects); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + +<%== formTag(urla("create"), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +
                            +« zurück + +
                            + + + + diff --git a/views/objects/index.erb b/views/objects/index.erb new file mode 100644 index 0000000..67a51d3 --- /dev/null +++ b/views/objects/index.erb @@ -0,0 +1,68 @@ + +<%#include "objects.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + +
                            + + + + + + diff --git a/views/objects/list_all.erb b/views/objects/list_all.erb new file mode 100644 index 0000000..c580e34 --- /dev/null +++ b/views/objects/list_all.erb @@ -0,0 +1,122 @@ + +<%#include "objects.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + +
                            + + + + + + + + + + + + + +<% tfetch(QList, objectsList); %> +<% for (const auto &i : objectsList) { %> + + + + + + + + + + + + +<% } %> +
                            IDObj SnameObj Lname DeDesc DeObj Lname EnDesc EnSortActiveGroupsBaustein
                            <%= i.id() %><%= i.objSname() %><%= i.objLnameDe() %><%= i.descDe() %><%= i.objLnameEn() %><%= i.descEn() %><%= i.sort() %><%= i.active() %><%= i.groups() %> +     +     + +
                            + +
                            + + + + diff --git a/views/objects/save.erb b/views/objects/save.erb new file mode 100644 index 0000000..694c44d --- /dev/null +++ b/views/objects/save.erb @@ -0,0 +1,113 @@ + +<%#include "objects.h" %> +<% tfetch(QVariantMap, objects); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + + <%== linkTo("Remove", urla("remove", objects["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +<%== formTag(urla("save", objects["id"]), Tf::Post) %> +
                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +
                            + + +
                            + <%== linkTo("Remove", urla("remove", objects["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                            + + + + diff --git a/views/objects/show.erb b/views/objects/show.erb new file mode 100644 index 0000000..55488dd --- /dev/null +++ b/views/objects/show.erb @@ -0,0 +1,110 @@ + +<%#include "objects.h" %> +<% tfetch(Objects, objects); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + + <%== linkTo("Remove", urla("remove", objects.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                            + +
                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +
                            + +
                            + <%== linkTo("Remove", urla("remove", objects.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + + diff --git a/views/objects/show.erb_2021-01-02_1517 b/views/objects/show.erb_2021-01-02_1517 new file mode 100644 index 0000000..c7503c0 --- /dev/null +++ b/views/objects/show.erb_2021-01-02_1517 @@ -0,0 +1,90 @@ + +<%#include "objects.h" %> +<% tfetch(Objects, objects); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + + <%== linkTo("Remove", urla("remove", objects.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                            + +
                            ID
                            <%= objects.id() %>

                            +
                            Obj Sname
                            <%= objects.objSname() %>

                            +
                            Obj Lname De
                            <%= objects.objLnameDe() %>

                            +
                            Desc De
                            <%= objects.descDe() %>

                            +
                            Obj Lname En
                            <%= objects.objLnameEn() %>

                            +
                            Desc En
                            <%= objects.descEn() %>

                            +
                            Sort
                            <%= objects.sort() %>

                            +
                            Active
                            <%= objects.active() %>

                            +
                            Groups
                            <%= objects.groups() %>

                            + +
                            + <%== linkTo("Remove", urla("remove", objects.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + + diff --git a/views/pcclasses/create.erb b/views/pcclasses/create.erb new file mode 100644 index 0000000..354a1d5 --- /dev/null +++ b/views/pcclasses/create.erb @@ -0,0 +1,90 @@ + +<%#include "pcclasses.h" %> +<% tfetch(QVariantMap, pcClasses); %> +<% tfetch(QVariantMap, acClasses); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + +<%== formTag(urla("create"), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +
                            +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                            + + + + diff --git a/views/pcclasses/index.erb b/views/pcclasses/index.erb new file mode 100644 index 0000000..c78cecf --- /dev/null +++ b/views/pcclasses/index.erb @@ -0,0 +1,83 @@ + +<%#include "pcclasses.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + +
                            + +
                            + + + + + + diff --git a/views/pcclasses/list_all.erb b/views/pcclasses/list_all.erb new file mode 100644 index 0000000..b2c3278 --- /dev/null +++ b/views/pcclasses/list_all.erb @@ -0,0 +1,114 @@ + +<%#include "pcclasses.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + +
                            + + + + + + + + + +<% tfetch(QList, pcClassesList); %> +<% for (const auto &i : pcClassesList) { %> + + + + + + + + +<% } %> +
                            IDObj SnamePc ClassClass TypeActiveBaustein
                            <%= i.id() %><%= i.objSname() %><%= i.pcClass() %><%= i.classType() %><%= i.active() %> +     +     + +
                            + +
                            + + + + diff --git a/views/pcclasses/save.erb b/views/pcclasses/save.erb new file mode 100644 index 0000000..709e671 --- /dev/null +++ b/views/pcclasses/save.erb @@ -0,0 +1,96 @@ + +<%#include "pcclasses.h" %> +<% tfetch(QVariantMap, pcClasses); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +<%== formTag(urla("save", pcClasses["id"]), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +
                            + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                            + + + + diff --git a/views/pcclasses/show.erb b/views/pcclasses/show.erb new file mode 100644 index 0000000..76bb8b1 --- /dev/null +++ b/views/pcclasses/show.erb @@ -0,0 +1,87 @@ + +<%#include "pcclasses.h" %> +<% tfetch(PcClasses, pcClasses); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + + <%== linkTo("Remove", urla("remove", pcClasses.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                            + +
                            +

                            +

                            +

                            +

                            +

                            +
                            + +
                            + <%== linkTo("Remove", urla("remove", pcClasses.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + diff --git a/views/portaladmin/index.erb b/views/portaladmin/index.erb new file mode 100644 index 0000000..afa2aa4 --- /dev/null +++ b/views/portaladmin/index.erb @@ -0,0 +1,64 @@ + +<%#include "standardsdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + +
                            + + + + + diff --git a/views/releasemgmt.zip b/views/releasemgmt.zip new file mode 100644 index 0000000..5e8b19d Binary files /dev/null and b/views/releasemgmt.zip differ diff --git a/views/releasemgmt/Neuer Ordner/create.erb b/views/releasemgmt/Neuer Ordner/create.erb new file mode 100644 index 0000000..af3c7b7 --- /dev/null +++ b/views/releasemgmt/Neuer Ordner/create.erb @@ -0,0 +1,152 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            + + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + +<%== formTag(urla("create"), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +
                            +
                            +« zurück + +
                            + + + + + diff --git a/views/releasemgmt/Neuer Ordner/index.erb b/views/releasemgmt/Neuer Ordner/index.erb new file mode 100644 index 0000000..b6a7577 --- /dev/null +++ b/views/releasemgmt/Neuer Ordner/index.erb @@ -0,0 +1,97 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            + + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +

                            Was ist der Unterschied zwischen CI und CD und CD?

                            +
                            +

                            Die Abkürzung CI/CD hat unterschiedliche Bedeutungen.

                            +
                              +
                            • „CI“ Continuous Integration
                              der Automatisierungsprozess für Baustein-Admins. Bei Anhebung eines Bausteins von "draft" auf "pre-release" werden diese gegengeprüft und im Repository "released" zusammengeführt.
                            • +
                            • „CD“ Continuous Delivery
                              das Repository "released" wird öffentlich zugänglich (Online-Version HTML sowie PDF download) sowie zur weiteren Verbreitung bereitgestellt.
                            • +
                            • „CD" Continuous Deployment
                              die automatische Verteilung in angeschlossene Systeme wie z.B. Group DMS (Archivierung) sowie halbautomatische Verteilung ins B2B-Partnerportal.
                            • +
                            +
                            +
                            + +
                            + +
                            + + + + + diff --git a/views/releasemgmt/Neuer Ordner/list_all.erb b/views/releasemgmt/Neuer Ordner/list_all.erb new file mode 100644 index 0000000..1f59c3a --- /dev/null +++ b/views/releasemgmt/Neuer Ordner/list_all.erb @@ -0,0 +1,141 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller Bausteine.
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + +<% tfetch(QList, releaseMgmtList); %> +<% for (const auto &i : releaseMgmtList) { %> + + + + + + + + + + + + + + + + + + + + + + + +<% } %> +
                            IDObj SnameSpec VersionAc ClassesPc ClassesCat ClassCountryLangDoc TypeRel RequesterRelrequest DateRel CreatorRelcreator DecisdateRel InspectorRelinspect DecisdateRel ApproverRelapprov DecisdateCi DateCd DateCdd DateBaustein
                            <%= i.id() %><%= i.objSname() %><%= i.specVersion() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.catClass() %><%= i.country() %><%= i.lang() %><%= i.docType() %><%= i.relRequester() %><%= i.relrequestDate() %><%= i.relCreator() %><%= i.relcreatorDecisdate() %><%= i.relInspector() %><%= i.relinspectDecisdate() %><%= i.relApprover() %><%= i.relapprovDecisdate() %><%= i.ciDate() %><%= i.cdDate() %><%= i.cddDate() %> +     +     + +
                            + +
                            + + + + diff --git a/views/releasemgmt/Neuer Ordner/save.erb b/views/releasemgmt/Neuer Ordner/save.erb new file mode 100644 index 0000000..523b9d1 --- /dev/null +++ b/views/releasemgmt/Neuer Ordner/save.erb @@ -0,0 +1,150 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt["id"]), Tf::Post, "confirm('Are you sure?')") %> +    + zurück +

                            + +<%== formTag(urla("save", releaseMgmt["id"]), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt["id"]), Tf::Post, "confirm('Are you sure?')") %> +    + zurück + + + +
                            + + + + diff --git a/views/releasemgmt/Neuer Ordner/show.erb b/views/releasemgmt/Neuer Ordner/show.erb new file mode 100644 index 0000000..ba9e5c2 --- /dev/null +++ b/views/releasemgmt/Neuer Ordner/show.erb @@ -0,0 +1,104 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(ReleaseMgmt, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                            + +
                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +
                            + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + diff --git a/views/releasemgmt/__index.erb__ b/views/releasemgmt/__index.erb__ new file mode 100644 index 0000000..d48f1ee --- /dev/null +++ b/views/releasemgmt/__index.erb__ @@ -0,0 +1,92 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            + + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +

                            Was ist der Unterschied zwischen CI und CD und CD?

                            +
                            +

                            Die Abkürzung CI/CD hat unterschiedliche Bedeutungen.

                            +
                              +
                            • „CI“ Continuous Integration
                              der Automatisierungsprozess für Baustein-Admins. Bei Anhebung eines Bausteins von "draft" auf "pre-release" werden diese gegengeprüft und im Repository "released" zusammengeführt.
                            • +
                            • „CD“ Continuous Delivery
                              das Repository "released" wird öffentlich zugänglich (Online-Version HTML sowie PDF download) sowie zur weiteren Verbreitung bereitgestellt.
                            • +
                            • „CD" Continuous Deployment
                              die automatische Verteilung in angeschlossene Systeme wie z.B. Group DMS (Archivierung) sowie halbautomatische Verteilung ins B2B-Partnerportal.
                            • +
                            +
                            +
                            + +
                            + +
                            + + + + + diff --git a/views/releasemgmt/ci_annex.erb_ b/views/releasemgmt/ci_annex.erb_ new file mode 100644 index 0000000..936745e --- /dev/null +++ b/views/releasemgmt/ci_annex.erb_ @@ -0,0 +1,187 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller Bausteine.
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + +
                            + +
                            + + + + diff --git a/views/releasemgmt/create.erb b/views/releasemgmt/create.erb new file mode 100644 index 0000000..af3c7b7 --- /dev/null +++ b/views/releasemgmt/create.erb @@ -0,0 +1,152 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            + + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + +<%== formTag(urla("create"), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +
                            +
                            +« zurück + +
                            + + + + + diff --git a/views/releasemgmt/index.erb b/views/releasemgmt/index.erb new file mode 100644 index 0000000..2bec69f --- /dev/null +++ b/views/releasemgmt/index.erb @@ -0,0 +1,122 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            + + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            +

                            Lifecycle und Release-Zyklen

                            +
                            +
                            Bausteine- und Dokumenten- Lifecycle
                            +

                            Einzelne Bausteine als auch Vorgabedokumente- und Anhänge haben einen Release-Status

                            +
                              +
                            • draft
                              Bausteine im Erstellungs- und Modifizierungsprozess
                            • +
                            • pre-release
                              Bausteine im fortgeschrittenen Reifegrad werden innerhalb eines Vorgabedokumentes bzw. Anhangs auf den Status pre-released angehoben.
                            • +
                                +
                              • pre-release review
                                Vorgabedokument bzw. Anhang wurde zum Review vorgelegt
                              • +
                              +
                            • released
                              Vorgabedokument bzw. Anhang wurde nach der erfolgreichen Review-Abnahme und Freigabe veröffentlicht.
                            • +
                            • expired
                              das Vorgabedokument bzw. Anhang wurde aus der Veröffentlichung zurückgezogen, ggf. durch eine neuere Version abgelöst.
                            • +
                            +
                            +
                            +
                            Release-Zyklus
                            +

                            Die Abkürzung CI/CD hat unterschiedliche Bedeutungen.

                            +
                              +
                            • „CI“: Continuous Integration +
                              Build-Artefakte werden in einem versionskontrollierten Artefakt-Repository abgelegt. +
                              ⇒ hier: Der Automatisierungsprozess für Baustein-Admins. Bei Anhebung eines Bausteins von "draft" auf "pre-release" werden diese gegengeprüft (review) und im Repository "released" zusammengeführt. +
                            • +
                            • „CD“: Continuous Delivery +
                              Build-Artefakte oder Gesamt-Paket werden ausgeliefert. +
                              ⇒ hier: Das Repository "released" wird öffentlich zugänglich (Online-Version HTML sowie PDF download) sowie zur weiteren Verbreitung bereitgestellt. +
                            • +
                            • „CD (CDD)": Continuous Deployment +
                              Optional, nicht immer erforderlich. Nach dem CD eines Gesamt-Paketes erfolgt die Installation bzw. Austausch der Produktiv-Umgebung. +
                              ⇒ hier: die automatische Verteilung in angeschlossene Systeme wie z.B. Group DMS (Archivierung) sowie halbautomatische Verteilung ins B2B-Partnerportal. Bei BMW derzeit nicht vorgesehen. +
                            • +
                            +
                            +
                            +
                            + +
                            + +
                            + + + + + diff --git a/views/releasemgmt/index_ciannex.erb b/views/releasemgmt/index_ciannex.erb new file mode 100644 index 0000000..953a715 --- /dev/null +++ b/views/releasemgmt/index_ciannex.erb @@ -0,0 +1,78 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + +
                            + + + + diff --git a/views/releasemgmt/listAllAnnexCd.erb b/views/releasemgmt/listAllAnnexCd.erb new file mode 100644 index 0000000..be98571 --- /dev/null +++ b/views/releasemgmt/listAllAnnexCd.erb @@ -0,0 +1,184 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Auflistung aller Annex Releases (CD).
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + +
                            +

                            Annex CD

                            +
                            +
                            + +
                            +

                            Anhänge CD PDF's

                            + +
                            + +
                            + + + + diff --git a/views/releasemgmt/listAllAnnexCi.erb b/views/releasemgmt/listAllAnnexCi.erb new file mode 100644 index 0000000..ae80206 --- /dev/null +++ b/views/releasemgmt/listAllAnnexCi.erb @@ -0,0 +1,197 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Auflistung aller Annex Pre-Releases (CI).
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + +
                            +

                            Anhänge CI

                            +
                            +
                            + +
                            +

                            Anhänge CI PDF's

                            + +
                            +
                            + +
                            + + + + diff --git a/views/releasemgmt/listAllAnnexCi.erb_2021-06-01_0936 b/views/releasemgmt/listAllAnnexCi.erb_2021-06-01_0936 new file mode 100644 index 0000000..bc0535b --- /dev/null +++ b/views/releasemgmt/listAllAnnexCi.erb_2021-06-01_0936 @@ -0,0 +1,185 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Auflistung aller Annex Pre-Releases (CI).
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + +
                            +

                            Anhänge CI

                            +
                            +
                            + +
                            +

                            Anhänge CI PDF's

                            + +
                            + +
                            + + + + diff --git a/views/releasemgmt/listAllStdCd.erb b/views/releasemgmt/listAllStdCd.erb new file mode 100644 index 0000000..edb4b4a --- /dev/null +++ b/views/releasemgmt/listAllStdCd.erb @@ -0,0 +1,184 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Auflistung aller Vorgaben Releases (CD).
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + +
                            +

                            Standard CD

                            +
                            +
                            + +
                            +

                            Standard CD PDF's

                            + +
                            + +
                            + + + + diff --git a/views/releasemgmt/listAllStdCi.erb b/views/releasemgmt/listAllStdCi.erb new file mode 100644 index 0000000..b2816a1 --- /dev/null +++ b/views/releasemgmt/listAllStdCi.erb @@ -0,0 +1,184 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Auflistung aller Vorgaben Pre-Releases (CI).
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + +
                            +

                            Standard CI

                            +
                            +
                            + +
                            +

                            Standard CI PDF's

                            + +
                            + +
                            + + + + diff --git a/views/releasemgmt/list_all.erb b/views/releasemgmt/list_all.erb new file mode 100644 index 0000000..9eb5d5c --- /dev/null +++ b/views/releasemgmt/list_all.erb @@ -0,0 +1,143 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller Bausteine.
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + +<% tfetch(QList, releaseMgmtList); %> +<% for (const auto &i : releaseMgmtList) { %> + + + + + + + + + + + + + + + + + + + + + + + +<% } %> +
                            IDObj SnameACPCCountryLangRel CreatorRelcreator DecisdateRel InspectorRelinspect DecisdateRel ApproverRelapprov DecisdateCI DateCD DateCDD DateBaustein
                            <%= i.id() %><%= i.objSname() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.country() %><%= i.lang() %><%= i.relCreator() %><%= i.relInspector() %><%= i.relApprover() %> +     +     + +
                            + +
                            + + + + diff --git a/views/releasemgmt/list_all.erb2021-04-17_1121 b/views/releasemgmt/list_all.erb2021-04-17_1121 new file mode 100644 index 0000000..7020baa --- /dev/null +++ b/views/releasemgmt/list_all.erb2021-04-17_1121 @@ -0,0 +1,141 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller Bausteine.
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + +<% tfetch(QList, releaseMgmtList); %> +<% for (const auto &i : releaseMgmtList) { %> + + + + + + + + + + + + + + + + + + + + + + + +<% } %> +
                            IDObj SnameSpec VersionAc ClassesPc ClassesCountryLangDoc TypeRel RequesterRelrequest DateRel CreatorRelcreator DecisdateRel InspectorRelinspect DecisdateRel ApproverRelapprov DecisdateCi DateCd DateCdd DateBaustein
                            <%= i.id() %><%= i.objSname() %><%= i.specVersion() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.country() %><%= i.lang() %><%= i.docType() %><%= i.relRequester() %><%= i.relrequestDate() %><%= i.relCreator() %><%= i.relcreatorDecisdate() %><%= i.relInspector() %><%= i.relinspectDecisdate() %><%= i.relApprover() %><%= i.relapprovDecisdate() %><%= i.ciDate() %><%= i.cdDate() %><%= i.cddDate() %> +     +     + +
                            + +
                            + + + + diff --git a/views/releasemgmt/list_all.erb_2021-04-10 b/views/releasemgmt/list_all.erb_2021-04-10 new file mode 100644 index 0000000..1f59c3a --- /dev/null +++ b/views/releasemgmt/list_all.erb_2021-04-10 @@ -0,0 +1,141 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller Bausteine.
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + +<% tfetch(QList, releaseMgmtList); %> +<% for (const auto &i : releaseMgmtList) { %> + + + + + + + + + + + + + + + + + + + + + + + +<% } %> +
                            IDObj SnameSpec VersionAc ClassesPc ClassesCat ClassCountryLangDoc TypeRel RequesterRelrequest DateRel CreatorRelcreator DecisdateRel InspectorRelinspect DecisdateRel ApproverRelapprov DecisdateCi DateCd DateCdd DateBaustein
                            <%= i.id() %><%= i.objSname() %><%= i.specVersion() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.catClass() %><%= i.country() %><%= i.lang() %><%= i.docType() %><%= i.relRequester() %><%= i.relrequestDate() %><%= i.relCreator() %><%= i.relcreatorDecisdate() %><%= i.relInspector() %><%= i.relinspectDecisdate() %><%= i.relApprover() %><%= i.relapprovDecisdate() %><%= i.ciDate() %><%= i.cdDate() %><%= i.cddDate() %> +     +     + +
                            + +
                            + + + + diff --git a/views/releasemgmt/list_pdf.erb b/views/releasemgmt/list_pdf.erb new file mode 100644 index 0000000..8db5e0b --- /dev/null +++ b/views/releasemgmt/list_pdf.erb @@ -0,0 +1,117 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Auflistung der veröffentlichten Vorgaben (pdf, docx, odt).
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            +
                            +

                            Vorgaben

                            +
                            +
                            +
                            +

                            Anhänge

                            +
                            + +
                            + + + + + + + diff --git a/views/releasemgmt/list_pdf.erb_2021-06-01_0917 b/views/releasemgmt/list_pdf.erb_2021-06-01_0917 new file mode 100644 index 0000000..a348a62 --- /dev/null +++ b/views/releasemgmt/list_pdf.erb_2021-06-01_0917 @@ -0,0 +1,92 @@ + +<%#include "releasemgmt.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Auflistung der veröffentlichten Vorgaben (pdf, docx, odt).
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + +
                            +
                            +

                            Vorgaben

                            + +
                            +
                            +

                            Anhänge

                            + +
                            + +
                            + + + + + + + diff --git a/views/releasemgmt/printCdAnnex.erb b/views/releasemgmt/printCdAnnex.erb new file mode 100644 index 0000000..951764f --- /dev/null +++ b/views/releasemgmt/printCdAnnex.erb @@ -0,0 +1,279 @@ + +<%#include "releasemgmt.h" %> +<%#include "releaseannex.h" %> + + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + + +
                            + + +
                            + + + + + + + + + + +
                            + + + + + + + diff --git a/views/releasemgmt/printCdAnnex.erb_2021-04-17_1046 b/views/releasemgmt/printCdAnnex.erb_2021-04-17_1046 new file mode 100644 index 0000000..fc63a13 --- /dev/null +++ b/views/releasemgmt/printCdAnnex.erb_2021-04-17_1046 @@ -0,0 +1,312 @@ + +<%#include "releasemgmt.h" %> +<%#include "releaseannex.h" %> + + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +
                            + + + + +
                            + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +
                            +
                            + +
                            +
                            + + +
                            + + + + + + diff --git a/views/releasemgmt/save.erb b/views/releasemgmt/save.erb new file mode 100644 index 0000000..f9e4971 --- /dev/null +++ b/views/releasemgmt/save.erb @@ -0,0 +1,857 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> +<%#include "lenkinfo.h" %> +<% tfetch(QVariantMap, lenkinfo); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            + + + +
                            +
                            +
                            + + + +
                            + +
                            +

                            Release Status-Anzeige

                            +
                            +
                            +
                            25%
                            +
                            + draft: 25% - pre-release: 50% - pre-release review: 75% - released: 100% +

                            + +<%== formTag(urla("save", releaseMgmt["id"]), Tf::Post) %> +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + +
                            + +
                            + +
                            + + + + + +
                            + zurück + +
                            + + + + + + + + + +


                            +
                            +" id="release_id" /> + + + + + + + + + + + + + + + + + + +
                            + + + + + + diff --git a/views/releasemgmt/save.erb_2021-04-29_1603 b/views/releasemgmt/save.erb_2021-04-29_1603 new file mode 100644 index 0000000..e2f29f8 --- /dev/null +++ b/views/releasemgmt/save.erb_2021-04-29_1603 @@ -0,0 +1,150 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt["id"]), Tf::Post, "confirm('Are you sure?')") %> +    + zurück +

                            + +<%== formTag(urla("save", releaseMgmt["id"]), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt["id"]), Tf::Post, "confirm('Are you sure?')") %> +    + zurück + + + +
                            + + + + diff --git a/views/releasemgmt/save.erb_2021-04-29_1705 b/views/releasemgmt/save.erb_2021-04-29_1705 new file mode 100644 index 0000000..9a25e39 --- /dev/null +++ b/views/releasemgmt/save.erb_2021-04-29_1705 @@ -0,0 +1,161 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt["id"]), Tf::Post, "confirm('Are you sure?')") %> +    + zurück +

                            + +
                            +<%== formTag(urla("save", releaseMgmt["id"]), Tf::Post) %> +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +

                             

                            +

                            + +

                            + +
                            + +
                            + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt["id"]), Tf::Post, "confirm('Are you sure?')") %> +    + zurück + + + +
                            + + + + diff --git a/views/releasemgmt/save.erb_2021-04-30_1059 b/views/releasemgmt/save.erb_2021-04-30_1059 new file mode 100644 index 0000000..688a21c --- /dev/null +++ b/views/releasemgmt/save.erb_2021-04-30_1059 @@ -0,0 +1,278 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> +<%#include "lenkinfo.h" %> +<% tfetch(QVariantMap, lenkinfo); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            + + + +
                            +
                            +
                            + + + +
                            + +
                            +

                            Release Status-Anzeige

                            +
                            +
                            pre-released 50%
                            + draft: 25% - pre-release: 50% - pre-release review: 75% - released: 100% +

                            + +<%== formTag(urla("save", releaseMgmt["id"]), Tf::Post) %> +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +

                             

                            +

                            + +

                            + +
                            + +
                            + +
                            + + + + + +
                            + zurück + +
                            + + + + + + + + + diff --git a/views/releasemgmt/save.erb_2021-05-13_0913 b/views/releasemgmt/save.erb_2021-05-13_0913 new file mode 100644 index 0000000..4801fc7 --- /dev/null +++ b/views/releasemgmt/save.erb_2021-05-13_0913 @@ -0,0 +1,337 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> +<%#include "lenkinfo.h" %> +<% tfetch(QVariantMap, lenkinfo); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            + + + +
                            +
                            +
                            + + + +
                            + +
                            +

                            Release Status-Anzeige

                            +
                            +
                            pre-released 50%
                            + draft: 25% - pre-release: 50% - pre-release review: 75% - released: 100% +

                            + +<%== formTag(urla("save", releaseMgmt["id"]), Tf::Post) %> +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +

                             

                            +

                            + +

                            + +
                            + +
                            + +
                            + + + + + +
                            + zurück + +
                            + + + + + + + + + diff --git a/views/releasemgmt/save.erb_2021-05-13_1207 b/views/releasemgmt/save.erb_2021-05-13_1207 new file mode 100644 index 0000000..3460299 --- /dev/null +++ b/views/releasemgmt/save.erb_2021-05-13_1207 @@ -0,0 +1,493 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> +<%#include "lenkinfo.h" %> +<% tfetch(QVariantMap, lenkinfo); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            + + + +
                            +
                            +
                            + + + +
                            + +
                            +

                            Release Status-Anzeige

                            +
                            +
                            pre-released 50%
                            + draft: 25% - pre-release: 50% - pre-release review: 75% - released: 100% +

                            + +<%== formTag(urla("save", releaseMgmt["id"]), Tf::Post) %> +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + +
                            + +
                            + +
                            + + + + + +
                            + zurück + +
                            + + + + + + + + + + + + diff --git a/views/releasemgmt/save.erb_2021-05-15_1841 b/views/releasemgmt/save.erb_2021-05-15_1841 new file mode 100644 index 0000000..621b489 --- /dev/null +++ b/views/releasemgmt/save.erb_2021-05-15_1841 @@ -0,0 +1,702 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> +<%#include "lenkinfo.h" %> +<% tfetch(QVariantMap, lenkinfo); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            + + + +
                            +
                            +
                            + + + +
                            + +
                            +

                            Release Status-Anzeige

                            +
                            +
                            +
                            25%
                            +
                            + draft: 25% - pre-release: 50% - pre-release review: 75% - released: 100% +

                            + +<%== formTag(urla("save", releaseMgmt["id"]), Tf::Post) %> +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + +
                            + +
                            + +
                            + + + + + +
                            + zurück + +
                            + + + + + + + + + +


                            +
                            +" id="release_id" /> + + + + + + + + + + + + + + + + + + +
                            + + + + + + diff --git a/views/releasemgmt/save.erb_2021-05-16_1543 b/views/releasemgmt/save.erb_2021-05-16_1543 new file mode 100644 index 0000000..349e5eb --- /dev/null +++ b/views/releasemgmt/save.erb_2021-05-16_1543 @@ -0,0 +1,817 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> +<%#include "lenkinfo.h" %> +<% tfetch(QVariantMap, lenkinfo); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            + + + +
                            +
                            +
                            + + + +
                            + +
                            +

                            Release Status-Anzeige

                            +
                            +
                            +
                            25%
                            +
                            + draft: 25% - pre-release: 50% - pre-release review: 75% - released: 100% +

                            + +<%== formTag(urla("save", releaseMgmt["id"]), Tf::Post) %> +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + +
                            + +
                            + +
                            + + + + + +
                            + zurück + +
                            + + + + + + + + + +


                            +
                            +" id="release_id" /> + + + + + + + + + + + + + + + + + + +
                            + + + + + + diff --git a/views/releasemgmt/save.erb_2021-05-23_0930 b/views/releasemgmt/save.erb_2021-05-23_0930 new file mode 100644 index 0000000..af34b02 --- /dev/null +++ b/views/releasemgmt/save.erb_2021-05-23_0930 @@ -0,0 +1,845 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(QVariantMap, releaseMgmt); %> +<%#include "lenkinfo.h" %> +<% tfetch(QVariantMap, lenkinfo); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            + +
                            + + + +
                            +
                            +
                            + + + +
                            + +
                            +

                            Release Status-Anzeige

                            +
                            +
                            +
                            25%
                            +
                            + draft: 25% - pre-release: 50% - pre-release review: 75% - released: 100% +

                            + +<%== formTag(urla("save", releaseMgmt["id"]), Tf::Post) %> +
                            +

                            + +

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + +
                            + +
                            + +
                            + + + + + +
                            + zurück + +
                            + + + + + + + + + +


                            +
                            +" id="release_id" /> + + + + + + + + + + + + + + + + + + +
                            + + + + + + diff --git a/views/releasemgmt/saveannex.erb b/views/releasemgmt/saveannex.erb new file mode 100644 index 0000000..66885e4 --- /dev/null +++ b/views/releasemgmt/saveannex.erb @@ -0,0 +1,151 @@ + +<%#include "releaseannex.h" %> +<% tfetch(QVariantMap, releaseAnnex); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + + zurück +

                            + +<%== formTag(urla("saveAnnex", releaseAnnex["id"]), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            + +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +
                            +

                            Daten Quellcode

                            +

                            +

                            +

                            +

                            + +

                            + + +
                            + zurück + +

                            +

                            Daten Anzeige

                            +


                            <%== releaseAnnex["specContent"] %>

                            + +
                            + zurück + + +
                            + + + + + + + diff --git a/views/releasemgmt/show.erb b/views/releasemgmt/show.erb new file mode 100644 index 0000000..8f16cdc --- /dev/null +++ b/views/releasemgmt/show.erb @@ -0,0 +1,372 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(ReleaseMgmt, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + +
                            + +
                            + + + +
                            + +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +

                             

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + + + + + + + + + + + + + +
                            +
                            + +
                            + + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + + + + diff --git a/views/releasemgmt/show.erb_2021-04-10 b/views/releasemgmt/show.erb_2021-04-10 new file mode 100644 index 0000000..ba9e5c2 --- /dev/null +++ b/views/releasemgmt/show.erb_2021-04-10 @@ -0,0 +1,104 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(ReleaseMgmt, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                            + +
                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +
                            + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + diff --git a/views/releasemgmt/show.erb_2021-04-18_1121 b/views/releasemgmt/show.erb_2021-04-18_1121 new file mode 100644 index 0000000..fa6a93a --- /dev/null +++ b/views/releasemgmt/show.erb_2021-04-18_1121 @@ -0,0 +1,123 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(ReleaseMgmt, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + +
                            + + + +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            + + +
                            + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + + diff --git a/views/releasemgmt/show.erb_2021-04-28_1535 b/views/releasemgmt/show.erb_2021-04-28_1535 new file mode 100644 index 0000000..1333a01 --- /dev/null +++ b/views/releasemgmt/show.erb_2021-04-28_1535 @@ -0,0 +1,156 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(ReleaseMgmt, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + +
                            + + + +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            + + + + + + + + + + +
                            + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + + + + diff --git a/views/releasemgmt/show.erb_2021-05-14_0912 b/views/releasemgmt/show.erb_2021-05-14_0912 new file mode 100644 index 0000000..2f0ec90 --- /dev/null +++ b/views/releasemgmt/show.erb_2021-05-14_0912 @@ -0,0 +1,250 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(ReleaseMgmt, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + +
                            + +
                            + + + +
                            + +

                            + +

                            +
                            + +
                            +
                            + +
                            +

                             

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + + + + + + + + + + +
                            +
                            + +
                            + + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + + + + diff --git a/views/releasemgmt/show.erb_2021-05-18_1448 b/views/releasemgmt/show.erb_2021-05-18_1448 new file mode 100644 index 0000000..8724b49 --- /dev/null +++ b/views/releasemgmt/show.erb_2021-05-18_1448 @@ -0,0 +1,347 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(ReleaseMgmt, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + +
                            + +
                            + + + +
                            + +

                            + +

                            +
                            + +
                            +
                            + +
                            +

                             

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + + + + + + + + + + +
                            +
                            + +
                            + + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + + + + diff --git a/views/releasemgmt/show.erb_2021-05-23_1115 b/views/releasemgmt/show.erb_2021-05-23_1115 new file mode 100644 index 0000000..7e28fa1 --- /dev/null +++ b/views/releasemgmt/show.erb_2021-05-23_1115 @@ -0,0 +1,358 @@ + +<%#include "releasemgmt.h" %> +<% tfetch(ReleaseMgmt, releaseMgmt); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + +
                            +
                            + + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + +
                            + +
                            + + + +
                            + +

                            + +

                            +
                            + +
                            +
                            + +
                            +

                             

                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + + + + + + + + + + + + + +
                            +
                            + +
                            + + +
                            + <%== linkTo("Remove", urla("remove", releaseMgmt.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück + +
                            + + + + + + + diff --git a/views/releasemgmt/showCdAnnex.erb b/views/releasemgmt/showCdAnnex.erb new file mode 100644 index 0000000..0d84e90 --- /dev/null +++ b/views/releasemgmt/showCdAnnex.erb @@ -0,0 +1,251 @@ + +<%#include "releasemgmt.h" %> +<%#include "releaseannex.h" %> + + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +

                            Release Review eines Anhangs.

                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + + + +
                            + + +
                            + Kommentar zu " "
                            + + + +
                            +    +
                            + +
                            +
                            + +
                            +
                            +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Release +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            + +

                            + + + + +

                            + +
                            + +
                            + +
                            + + +
                            + + +
                            + + + + + + + + + + + diff --git a/views/standardsdata/checkLfdnrCat.erb b/views/standardsdata/checkLfdnrCat.erb new file mode 100644 index 0000000..7753826 --- /dev/null +++ b/views/standardsdata/checkLfdnrCat.erb @@ -0,0 +1,119 @@ + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            + +
                            +

                            Auflistung aller Bausteine mit Unstimmigkeiten (fehlende lfndr bzw. fehlende deutsche/englische Baustein-Version).

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +

                            unstimmige Bausteine: <%==$ countCheckLfdnrCat %>

                            +
                            + +
                            + +
                            + + + + diff --git a/views/standardsdata/create.erb b/views/standardsdata/create.erb new file mode 100644 index 0000000..c408d8a --- /dev/null +++ b/views/standardsdata/create.erb @@ -0,0 +1,63 @@ + +<%#include "standardsdata.h" %> +<% tfetch(QVariantMap, standardsData); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +

                            New Standards Data

                            + +<%== formTag(urla("create"), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +<%== linkTo("Back", urla("index")) %> + + + diff --git a/views/standardsdata/editor_add.erb b/views/standardsdata/editor_add.erb new file mode 100644 index 0000000..5b51b16 --- /dev/null +++ b/views/standardsdata/editor_add.erb @@ -0,0 +1,693 @@ + +<%#include "standardsdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + + + + + +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            + Baustein-Titel, Verwendung im Inhaltsverzeichnis +
                            +
                            +
                            + +
                            + Kurzbeschreibung für Text-Baustein Administration +
                            +
                            +
                            +
                            +
                            +
                            Objekt-Zuordnung +
                            +   + + + Ein oder mehrere Objekte +
                            +
                            +
                            +
                            +
                            + +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            + +
                            + 2-stelliger Ländercode (WW = World Wide) +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + Text-Baustein Version (Bsp.: v00.01.02) +
                            +
                            +
                            + +
                            + 3-stellige Text-Baustein Nummerierung (Bsp.: 013) +
                            + + check lfdnr innerhalb der gewählten Cat +    + +
                            +
                            +
                            + +
                            + optional: interne Bemerkung, auch für Release +
                            +
                            +
                            + +
                            + + interne Hilfs-Markierung +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Availability Class +   + + + Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" +
                            +
                            +
                            +
                            +
                            Protection Class +   + + + Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" +
                            +
                            +
                            +
                            +
                            Legacy + + + + ehemals G2 od. G3 +
                            +
                            +
                            +
                            + +
                            +
                            Text-Baustein +
                            +
                            +
                            +
                            +
                            + +
                            + + Start-Datum
                            +
                            +
                            +
                            + +
                            + vorläufiges End-Datum
                            +
                            +
                            +
                            + + + Baustein aktiv oder in-aktiv +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + Verantwortlicher: email, Abteilung, Jira-Key +
                            +
                            +
                            +
                            +
                            + +

                            +

                            + + +
                            +

                            + + + + +
                            +
                            + +
                            + +
                            + + + + + +
                            +
                            + + + + +
                            + +

                            URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                            + + + +
                            +
                            +
                            +
                            + +
                            + + + + + + + + + diff --git a/views/standardsdata/editor_upd.erb b/views/standardsdata/editor_upd.erb new file mode 100644 index 0000000..9f1eced --- /dev/null +++ b/views/standardsdata/editor_upd.erb @@ -0,0 +1,775 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + + + + + +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            + Baustein-Titel, Verwendung im Inhaltsverzeichnis +
                            +
                            +
                            + +
                            + Kurzbeschreibung für Text-Baustein Administration +
                            +
                            +
                            +
                            +
                            +
                            Objekt-Zuordnung +
                            +   + + + Ein oder mehrere Objekte +
                            +
                            +
                            +
                            +
                            + +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            + +
                            + 2-stelliger Ländercode (WW = World Wide) +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + Text-Baustein Version (Bsp.: v00.01.02) +
                            +
                            +
                            + +
                            + Text-Baustein Version (Bsp.: v00.01.02) +
                            +
                            +
                            + +
                            + 3-stellige Text-Baustein Nummerierung (Bsp.: 013) +
                            + + check lfdnr innerhalb der gewählten Cat +    + +
                            +
                            +
                            + +
                            + optional: interne Bemerkung, auch für Release +
                            +
                            +
                            + +
                            + + interne Hilfs-Markierung +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Availability Class +   + + + Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" +
                            +
                            +
                            +
                            +
                            Protection Class +   + + + Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" +
                            +
                            +
                            +
                            +
                            Legacy + + + + ehemals G2 od. G3 +
                            +
                            +
                            +
                            + +
                            +
                            Text-Baustein +
                            +
                            +
                            +
                            +
                            + +
                            + + Start-Datum
                            +
                            +
                            +
                            + +
                            + vorläufiges End-Datum
                            +
                            +
                            +
                            + + + Baustein aktiv oder in-aktiv +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + Verantwortlicher: email, Abteilung, Jira-Key +
                            +
                            +
                            +
                            +
                            +

                            + + + + +

                            + + +
                            +

                            + + + +
                            +
                            + +
                            + +
                            + + + + + +
                            +
                            + + + + +
                            + +

                            URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                            + + + +
                            +
                            +
                            +
                            + +
                            + + + + + + +
                            + + +
                            + + +
                            + Kommentar zu " "
                            + + + +
                            +    +
                            + + + + + + diff --git a/views/standardsdata/editor_upd.erb_2021-01-14_1700 b/views/standardsdata/editor_upd.erb_2021-01-14_1700 new file mode 100644 index 0000000..fbecf4b --- /dev/null +++ b/views/standardsdata/editor_upd.erb_2021-01-14_1700 @@ -0,0 +1,657 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%=$ green_msg %>

                            + + + + +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            + Baustein-Titel, Verwendung im Inhaltsverzeichnis +
                            +
                            +
                            + +
                            + Kurzbeschreibung für Text-Baustein Administration +
                            +
                            +
                            +
                            +
                            +
                            Objekte +
                            +   + + + Ein oder mehrere Objekte +
                            +
                            +
                            +
                            +
                            + +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            + +
                            + 2-stelliger Ländercode (WW = World Wide) +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + Text-Baustein Version (Bsp.: v00.01.02) +
                            +
                            +
                            + +
                            + Text-Baustein Version (Bsp.: v00.01.02) +
                            +
                            +
                            + +
                            + 3-stellige Text-Baustein Nummerierung (Bsp.: 013) +
                            + + check lfdnr innerhalb der gewählten Cat +    + +
                            +
                            +
                            + +
                            + Verantwortlicher: email, Abteilung, Jira-Key +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Availability Class +   + + + Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" +
                            +
                            +
                            +
                            +
                            Protection Class +   + + + Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" +
                            +
                            +
                            +
                            +
                            Legacy + + + + ehemals G2 od. G3 +
                            +
                            +
                            +
                            + +
                            +
                            Text-Baustein +
                            +
                            +
                            +
                            +
                            + +
                            + + Start-Datum
                            +
                            +
                            +
                            + +
                            + vorläufiges End-Datum
                            +
                            +
                            +
                            + + + Baustein aktiv oder in-aktiv +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + optional: interne Bemerkung, auch für Release +
                            +
                            +
                            + +
                            + + interne Hilfs-Markierung +
                            +
                            +
                            +
                            +
                            +

                            + +
                            +

                            + + + + +
                            +
                            + + + + +
                            + +

                            URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                            + + + +
                            +
                            +
                            +
                            + +
                            + + + + + + + diff --git a/views/standardsdata/editor_upd.erb_2021-02-14_1137 b/views/standardsdata/editor_upd.erb_2021-02-14_1137 new file mode 100644 index 0000000..c77d201 --- /dev/null +++ b/views/standardsdata/editor_upd.erb_2021-02-14_1137 @@ -0,0 +1,758 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + + + + + +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            + Baustein-Titel, Verwendung im Inhaltsverzeichnis +
                            +
                            +
                            + +
                            + Kurzbeschreibung für Text-Baustein Administration +
                            +
                            +
                            +
                            +
                            +
                            Objekte +
                            +   + + + Ein oder mehrere Objekte +
                            +
                            +
                            +
                            +
                            + +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            + +
                            + 2-stelliger Ländercode (WW = World Wide) +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + Text-Baustein Version (Bsp.: v00.01.02) +
                            +
                            +
                            + +
                            + Text-Baustein Version (Bsp.: v00.01.02) +
                            +
                            +
                            + +
                            + 3-stellige Text-Baustein Nummerierung (Bsp.: 013) +
                            + + check lfdnr innerhalb der gewählten Cat +    + +
                            +
                            +
                            + +
                            + Verantwortlicher: email, Abteilung, Jira-Key +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Availability Class +   + + + Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" +
                            +
                            +
                            +
                            +
                            Protection Class +   + + + Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" +
                            +
                            +
                            +
                            +
                            Legacy + + + + ehemals G2 od. G3 +
                            +
                            +
                            +
                            + +
                            +
                            Text-Baustein +
                            +
                            +
                            +
                            +
                            + +
                            + + Start-Datum
                            +
                            +
                            +
                            + +
                            + vorläufiges End-Datum
                            +
                            +
                            +
                            + + + Baustein aktiv oder in-aktiv +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + optional: interne Bemerkung, auch für Release +
                            +
                            +
                            + +
                            + + interne Hilfs-Markierung +
                            +
                            +
                            +
                            +
                            +

                            + + + +

                            + + +
                            +

                            + + + +
                            +
                            + +
                            + +
                            + + + + + +
                            +
                            + + + + +
                            + +

                            URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                            + + + +
                            +
                            +
                            +
                            + +
                            + + + + + + + + + diff --git a/views/standardsdata/editor_upd.erb_2021-03-27_1303 b/views/standardsdata/editor_upd.erb_2021-03-27_1303 new file mode 100644 index 0000000..07a3ddc --- /dev/null +++ b/views/standardsdata/editor_upd.erb_2021-03-27_1303 @@ -0,0 +1,756 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + + + + + +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            + Baustein-Titel, Verwendung im Inhaltsverzeichnis +
                            +
                            +
                            + +
                            + Kurzbeschreibung für Text-Baustein Administration +
                            +
                            +
                            +
                            +
                            +
                            Objekt-Zuordnung +
                            +   + + + Ein oder mehrere Objekte +
                            +
                            +
                            +
                            +
                            + +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            + +
                            + 2-stelliger Ländercode (WW = World Wide) +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + Text-Baustein Version (Bsp.: v00.01.02) +
                            +
                            +
                            + +
                            + Text-Baustein Version (Bsp.: v00.01.02) +
                            +
                            +
                            + +
                            + 3-stellige Text-Baustein Nummerierung (Bsp.: 013) +
                            + + check lfdnr innerhalb der gewählten Cat +    + +
                            +
                            +
                            + +
                            + optional: interne Bemerkung, auch für Release +
                            +
                            +
                            + +
                            + + interne Hilfs-Markierung +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Availability Class +   + + + Eine oder mehrere AC. AC-0 nur mit Obj/Kat "Allgemein" +
                            +
                            +
                            +
                            +
                            Protection Class +   + + + Eine oder mehrere PC. PC-0 nur mit Obj/Kat "Allgemein" +
                            +
                            +
                            +
                            +
                            Legacy + + + + ehemals G2 od. G3 +
                            +
                            +
                            +
                            + +
                            +
                            Text-Baustein +
                            +
                            +
                            +
                            +
                            + +
                            + + Start-Datum
                            +
                            +
                            +
                            + +
                            + vorläufiges End-Datum
                            +
                            +
                            +
                            + + + Baustein aktiv oder in-aktiv +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + Verantwortlicher: email, Abteilung, Jira-Key +
                            +
                            +
                            +
                            +
                            +

                            + + + +

                            + + +
                            +

                            + + + +
                            +
                            + +
                            + +
                            + + + + + +
                            +
                            + + + + +
                            + +

                            URL Text kopieren um in den Baustein via IMG-URL einzufügen.

                            + + + +
                            +
                            +
                            +
                            + +
                            + + + + + + +
                            + + +
                            + + + + + + diff --git a/views/standardsdata/index.erb b/views/standardsdata/index.erb new file mode 100644 index 0000000..e38cc40 --- /dev/null +++ b/views/standardsdata/index.erb @@ -0,0 +1,68 @@ + +<%#include "standardsdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + +
                            + + + + + + diff --git a/views/standardsdata/index.erb_2020-12-29_1539 b/views/standardsdata/index.erb_2020-12-29_1539 new file mode 100644 index 0000000..9111538 --- /dev/null +++ b/views/standardsdata/index.erb_2020-12-29_1539 @@ -0,0 +1,67 @@ + +<%#include "standardsdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            +

                            <%=$ error %>

                            +

                            <%=$ notice %>

                            + +
                            + +
                            + +
                            + + + + + diff --git a/views/standardsdata/listStd.erb b/views/standardsdata/listStd.erb new file mode 100644 index 0000000..aaea3fc --- /dev/null +++ b/views/standardsdata/listStd.erb @@ -0,0 +1,157 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +

                            Auflistung aller Bausteine einer Vorgabe, ohne Filterung.

                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + + + + + +
                            +
                            + +
                            +
                            +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + WW = World Wide +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Release +
                            +
                            +
                            +
                            +
                            +
                            + + + nur de-/aktive Bausteine +
                            +
                            +
                            +
                            + + + alle Objekt-spezifische Bausteine +
                            +
                            +
                            +
                            + +
                            +
                            + +

                            + +
                            + +
                            + +
                            + + + + + diff --git a/views/standardsdata/listWaste.erb b/views/standardsdata/listWaste.erb new file mode 100644 index 0000000..26bee54 --- /dev/null +++ b/views/standardsdata/listWaste.erb @@ -0,0 +1,213 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsdatawaste.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller gelöschten Vorgaben Bausteine.
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + + + + +
                            +
                            + + + + + + + + + + + + + + + + + +<% tfetch(QList, standardsDataWasteList); %> +<% for (const auto &i : standardsDataWasteList) { %> + + + + + + + + + + + + + + + +<% } %> +
                            gelöscht amLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangWiederherstellung
                            <%= i.lfdnr() %><%= i.specTitle() %><%= i.specDesc() %><%= i.specVersion() %><%= i.specRelease() %><%= i.objSname() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.catClass() %><%= i.country() %><%= i.lang() %> +     +     + +
                            + +
                            + + + + diff --git a/views/standardsdata/listWaste.erb_2020-12-29_1449 b/views/standardsdata/listWaste.erb_2020-12-29_1449 new file mode 100644 index 0000000..f6f945b --- /dev/null +++ b/views/standardsdata/listWaste.erb_2020-12-29_1449 @@ -0,0 +1,130 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsdatawaste.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller Bausteine.
                            + +

                            <%=$ error %>

                            +

                            <%=$ notice %>

                            + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + +<% tfetch(QList, standardsDataWasteList); %> +<% for (const auto &i : standardsDataWasteList) { %> + + + + + + + + + + + + + + + + +<% } %> +
                            IDLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangSpec ActiveWiederherstellung
                            <%= i.id() %><%= i.lfdnr() %><%= i.specTitle() %><%= i.specDesc() %><%= i.specVersion() %><%= i.specRelease() %><%= i.objSname() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.catClass() %><%= i.country() %><%= i.lang() %><%= i.specActive() %> +    +
                            +
                            + +
                            + + + + diff --git a/views/standardsdata/listWaste.erb_2021-01-14_1717 b/views/standardsdata/listWaste.erb_2021-01-14_1717 new file mode 100644 index 0000000..38ddfca --- /dev/null +++ b/views/standardsdata/listWaste.erb_2021-01-14_1717 @@ -0,0 +1,172 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsdatawaste.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller gelöschten Vorgaben Bausteine.
                            + +

                            <%=$ error %>

                            <%=$ notice %>

                            + +
                            +
                            + + + + + + + + + + + + + + + + + +<% tfetch(QList, standardsDataWasteList); %> +<% for (const auto &i : standardsDataWasteList) { %> + + + + + + + + + + + + + + + +<% } %> +
                            gelöscht amLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangWiederherstellung
                            <%= i.lfdnr() %><%= i.specTitle() %><%= i.specDesc() %><%= i.specVersion() %><%= i.specRelease() %><%= i.objSname() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.catClass() %><%= i.country() %><%= i.lang() %> +    +
                            +
                            + +
                            + + + + diff --git a/views/standardsdata/listWaste.erb_2021-02-13_1233 b/views/standardsdata/listWaste.erb_2021-02-13_1233 new file mode 100644 index 0000000..fe53043 --- /dev/null +++ b/views/standardsdata/listWaste.erb_2021-02-13_1233 @@ -0,0 +1,269 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsdatawaste.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller gelöschten Vorgaben Bausteine.
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + + + + +
                            +
                            + + + + + + + + + + + + + + + + + +
                            gelöscht amLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangWiederherstellung
                            + +
                            + + + + diff --git a/views/standardsdata/list_all.erb b/views/standardsdata/list_all.erb new file mode 100644 index 0000000..395fbdc --- /dev/null +++ b/views/standardsdata/list_all.erb @@ -0,0 +1,131 @@ + +<%#include "standardsdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            Ungefilterte Auflistung aller Bausteine.
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + +<% tfetch(QList, standardsDataList); %> +<% for (const auto &i : standardsDataList) { %> + + + + + + + + + + + + + + + + +<% } %> +
                            IDLfdnrSpec TitleSpec DescSpec VersionSpec ReleaseObj SnameAc ClassesPc ClassesCat ClassCountryLangSpec ActiveBaustein
                            <%= i.id() %><%= i.lfdnr() %><%= i.specTitle() %><%= i.specDesc() %><%= i.specVersion() %><%= i.specRelease() %><%= i.objSname() %><%= i.acClasses() %><%= i.pcClasses() %><%= i.catClass() %><%= i.country() %><%= i.lang() %><%= i.specActive() %> + + + + +
                            + +
                            + + + + diff --git a/views/standardsdata/save.erb b/views/standardsdata/save.erb new file mode 100644 index 0000000..53b931f --- /dev/null +++ b/views/standardsdata/save.erb @@ -0,0 +1,143 @@ + +<%#include "standardsdata.h" %> +<% tfetch(QVariantMap, standardsData); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + + <%== linkTo("Remove", urla("remove", standardsData["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Editor + zurück +

                            + +<%== formTag(urla("save", standardsData["id"]), Tf::Post, 'class="w3-container"') %> +

                            Attribute

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + +
                            +

                            Daten Quellcode

                            +

                            +

                            +

                            +

                            + +

                            + + +
                            + <%== linkTo("Remove", urla("remove", standardsData["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Editor + zurück + +

                            +

                            Daten Anzeige

                            +


                            <%== standardsData["specContent"] %>

                            + +
                            + <%== linkTo("Remove", urla("remove", standardsData["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Editor + zurück + + +
                            + + + + diff --git a/views/standardsdata/show.erb b/views/standardsdata/show.erb new file mode 100644 index 0000000..c59c959 --- /dev/null +++ b/views/standardsdata/show.erb @@ -0,0 +1,105 @@ + +<%#include "standardsdata.h" %> +<% tfetch(StandardsData, standardsData); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + + <%== linkTo("Remove", urla("remove", standardsData.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + Editor + zurück +
                            + +
                            +

                            +

                            +

                            + +
                            +

                            Daten Anzeige

                            + +
                            +


                            <%== standardsData.specContent() %>

                            + +
                            + +
                            + <%== linkTo("Remove", urla("remove", standardsData.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + Editor + zurück + +
                            + + + + diff --git a/views/standardsdata/showCiStd.erb b/views/standardsdata/showCiStd.erb new file mode 100644 index 0000000..67bd894 --- /dev/null +++ b/views/standardsdata/showCiStd.erb @@ -0,0 +1,338 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> + +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +

                            Release Review einer Vorgabe.

                            + + + + + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + + + +
                            + + +
                            + Kommentar zu " "
                            + + + +
                            +    +
                            + +
                            +
                            + +
                            +
                            +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Release +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            + +

                            + + + + + +

                            + + +
                            + +
                            + +
                            + + +
                            + + +
                            + + + + + + + + + + + + + + diff --git a/views/standardsdata/showStd.erb b/views/standardsdata/showStd.erb new file mode 100644 index 0000000..af48b81 --- /dev/null +++ b/views/standardsdata/showStd.erb @@ -0,0 +1,237 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> + +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +

                            Semi-Finale Anzeige einer Vorgabe.

                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + + + +
                            + + +
                            + Kommentar zu " "
                            + + + +
                            +    +
                            + +
                            +
                            + +
                            +
                            +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + WW = World Wide +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Release +
                            +
                            +
                            +
                            +
                            +
                            + + + nur de-/aktive Bausteine +
                            +
                            +
                            +
                            + + + alle Objekt-spezifische Bausteine +
                            +
                            +
                            +
                            + +
                            +
                            + +

                            + + + +

                            + + +
                            + +
                            + +
                            + + +
                            + + +
                            + + + + + + + + + + + + diff --git a/views/standardsdata/showStd.erb_2020-12-25_1025 b/views/standardsdata/showStd.erb_2020-12-25_1025 new file mode 100644 index 0000000..fa01f6e --- /dev/null +++ b/views/standardsdata/showStd.erb_2020-12-25_1025 @@ -0,0 +1,163 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +

                            Semi-Finale Anzeige einer Vorgabe.

                            + +

                            <%=$ green_msg %>

                            + + + + + +
                            +
                            + +
                            +
                            +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + WW = World Wide +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Release +
                            +
                            +
                            +
                            +
                            +
                            + + + nur de-/aktive Bausteine +
                            +
                            +
                            +
                            + + + alle Objekt-spezifische Bausteine +
                            +
                            +
                            +
                            + +
                            +
                            + +

                            + +
                            + +
                            + +
                            + +toc_tmp + + + + + diff --git a/views/standardsdata/showStd.erb_2021-03-27_1237 b/views/standardsdata/showStd.erb_2021-03-27_1237 new file mode 100644 index 0000000..6c52cb7 --- /dev/null +++ b/views/standardsdata/showStd.erb_2021-03-27_1237 @@ -0,0 +1,204 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> + +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +

                            Semi-Finale Anzeige einer Vorgabe.

                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + + +
                            + + +
                            + Kommentar zu " "
                            + + + +
                            +    +
                            + +
                            +
                            + +
                            +
                            +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + WW = World Wide +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Release +
                            +
                            +
                            +
                            +
                            +
                            + + + nur de-/aktive Bausteine +
                            +
                            +
                            +
                            + + + alle Objekt-spezifische Bausteine +
                            +
                            +
                            +
                            + +
                            +
                            + +

                            + + +

                            + + +
                            + +
                            + +
                            + + + + + + + + diff --git a/views/standardsdata/showStd.erb_2021-04-30_1040 b/views/standardsdata/showStd.erb_2021-04-30_1040 new file mode 100644 index 0000000..cb7ae92 --- /dev/null +++ b/views/standardsdata/showStd.erb_2021-04-30_1040 @@ -0,0 +1,233 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> + +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +

                            Semi-Finale Anzeige einer Vorgabe.

                            + + + <%==$ red_msg %> <%=$ error %> + + + <%==$ green_msg %> <%=$ notice %> + + + + +
                            + + +
                            + Kommentar zu " "
                            + + + +
                            +    +
                            + +
                            +
                            + +
                            +
                            +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + WW = World Wide +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Release +
                            +
                            +
                            +
                            +
                            +
                            + + + nur de-/aktive Bausteine +
                            +
                            +
                            +
                            + + + alle Objekt-spezifische Bausteine +
                            +
                            +
                            +
                            + +
                            +
                            + +

                            + + + +

                            + + +
                            + +
                            + +
                            + + +
                            + + +
                            + + + + + + + + diff --git a/views/standardsdata/showStdElectron.erb b/views/standardsdata/showStdElectron.erb new file mode 100644 index 0000000..87030c1 --- /dev/null +++ b/views/standardsdata/showStdElectron.erb @@ -0,0 +1,173 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsmeta.h" %> + +<% tfetch(StandardsData, standardsData); %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            + +

                            Vorgabedokument der BMW Group

                            +

                            Semi-Finale Anzeige einer Vorgabe.

                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + + +
                            + + +
                            + Kommentar zu " "
                            + + + +
                            +    +
                            + +
                            +
                            + +
                            +
                            +
                            +
                            Objekt-Attribute +
                            +
                            +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            +
                            +
                            +
                            +
                            + +
                            + WW = World Wide +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            Release +
                            +
                            +
                            +
                            +
                            +
                            + + + nur de-/aktive Bausteine +
                            +
                            +
                            +
                            + + + alle Objekt-spezifische Bausteine +
                            +
                            +
                            +
                            + +
                            +
                            + +

                            + + +

                            + + +
                            + +
                            + +
                            + + + + + + diff --git a/views/standardsdata/showWaste.erb b/views/standardsdata/showWaste.erb new file mode 100644 index 0000000..9bd5a54 --- /dev/null +++ b/views/standardsdata/showWaste.erb @@ -0,0 +1,105 @@ + +<%#include "standardsdata.h" %> +<%#include "standardsdatawaste.h" %> +<% tfetch(StandardsDataWaste, standardsDataWaste); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + + <%== linkTo("Remove", urla("removeWaste", standardsDataWaste.id()), Tf::Post, "confirm('Are you sure?')") %> +    + zurück +
                            + +
                            +

                            +

                            +

                            + +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            +

                            + +
                            + +
                            +

                            Daten Anzeige

                            +


                            +

                            <%== standardsDataWaste.specContent() %>

                            +

                            +
                            <%= standardsDataWaste.specContent() %>
                            +
                            +
                            + +
                            + <%== linkTo("Remove", urla("removeWaste", standardsDataWaste.id()), Tf::Post, "confirm('Are you sure?')") %> +    + zurück + +
                            + + + + diff --git a/views/standardsdatacomments/create.erb b/views/standardsdatacomments/create.erb new file mode 100644 index 0000000..f3f26ec --- /dev/null +++ b/views/standardsdatacomments/create.erb @@ -0,0 +1,97 @@ + +<%#include "standardsdatacomments.h" %> +<% tfetch(QVariantMap, standardsDataComments); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + +
                            + +
                            + +<%== formTag(urla("create"), Tf::Post) %> +
                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +
                            + + +
                            +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                            + + + + diff --git a/views/standardsdatacomments/index.erb b/views/standardsdatacomments/index.erb new file mode 100644 index 0000000..e6a9a5e --- /dev/null +++ b/views/standardsdatacomments/index.erb @@ -0,0 +1,71 @@ + +<%#include "standardsdatacomments.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + +
                            + +
                            +

                            Anzahl Kommentare: <%=$ count_id %>

                            +

                            Anzahl Kommentatoren: <%=$ count_users %>

                            +
                            + +
                            + + + + + + diff --git a/views/standardsdatacomments/list_all.erb b/views/standardsdatacomments/list_all.erb new file mode 100644 index 0000000..e3548a1 --- /dev/null +++ b/views/standardsdatacomments/list_all.erb @@ -0,0 +1,156 @@ + +<%#include "standardsdatacomments.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + +
                            +
                            + +
                            + + + + + + + + + + + + +<% tfetch(QList, standardsDataCommentsList); %> +<% for (const auto &i : standardsDataCommentsList) { %> + + + + + + + + + + +<% } %> +
                            IDComment CreatedSpec IDSpec TitleSpec VersionUsernameUser CommentBaustein
                            <%= i.id() %><%= i.specId() %><%= i.specTitle() %><%= i.specVersion() %><%= i.username() %><%= i.userComment() %> + + + + +
                            + +
                            + + + + diff --git a/views/standardsdatacomments/save.erb b/views/standardsdatacomments/save.erb new file mode 100644 index 0000000..465bf6e --- /dev/null +++ b/views/standardsdatacomments/save.erb @@ -0,0 +1,106 @@ + +<%#include "standardsdatacomments.h" %> +<% tfetch(QVariantMap, standardsDataComments); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + +
                            + +
                            + + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +<%== formTag(urla("save", standardsDataComments["id"]), Tf::Post) %> +
                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +
                            + + +
                            + +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                            + + + + + diff --git a/views/standardsdatacomments/show.erb b/views/standardsdatacomments/show.erb new file mode 100644 index 0000000..5db1e54 --- /dev/null +++ b/views/standardsdatacomments/show.erb @@ -0,0 +1,103 @@ + +<%#include "standardsdatacomments.h" %> +<% tfetch(StandardsDataComments, standardsDataComments); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %> <%=$ error %>

                            <%==$ green_msg %> <%=$ notice %>

                            + +
                            + +
                            + + <%== linkTo("Remove", urla("remove", standardsDataComments.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                            + +
                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            +


                            <%== standardsDataComments.userComment() %>

                            +
                            + +
                            + <%== linkTo("Remove", urla("remove", standardsDataComments.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit +« zurück + +
                            + + + + + diff --git a/views/standardsmeta/create.erb b/views/standardsmeta/create.erb new file mode 100644 index 0000000..d5f5451 --- /dev/null +++ b/views/standardsmeta/create.erb @@ -0,0 +1,57 @@ + +<%#include "standardsmeta.h" %> +<% tfetch(QVariantMap, standardsMeta); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +

                            New Standards Meta

                            + +<%== formTag(urla("create"), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +<%== linkTo("Back", urla("index")) %> + + + diff --git a/views/standardsmeta/index.erb b/views/standardsmeta/index.erb new file mode 100644 index 0000000..4d26c17 --- /dev/null +++ b/views/standardsmeta/index.erb @@ -0,0 +1,52 @@ + +<%#include "standardsdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + +
                            +

                            Admin::Portal

                            +
                            + + + +

                            Listing Standards Data

                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + + +
                            + + + + diff --git a/views/standardsmeta/list_all.erb b/views/standardsmeta/list_all.erb new file mode 100644 index 0000000..c1b1eeb --- /dev/null +++ b/views/standardsmeta/list_all.erb @@ -0,0 +1,56 @@ + +<%#include "standardsmeta.h" %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                            Listing Standards Meta

                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +<%== linkTo("Create a new Standards Meta", urla("create")) %>
                            +
                            + + + + + + + + + + + + + + + +<% tfetch(QList, standardsMetaList); %> +<% for (const auto &i : standardsMetaList) { %> + + + + + + + + + + + + + + + +<% } %> +
                            IDSpec Data IDSpec CreatedSpec Last ModifiedSpec Valid StartSpec Valid EndLast EditorG LegacyResponsibilitySpec CommentSpec MarkerGroups
                            <%= i.id() %><%= i.specDataId() %><%= i.specCreated() %><%= i.specLastModified() %><%= i.specValidStart() %><%= i.specValidEnd() %><%= i.lastEditor() %><%= i.gLegacy() %><%= i.responsibility() %><%= i.specComment() %><%= i.specMarker() %><%= i.groups() %> + <%== linkTo("Show", urla("show", i.id())) %> + <%== linkTo("Edit", urla("save", i.id())) %> + <%== linkTo("Remove", urla("remove", i.id()), Tf::Post, "confirm('Are you sure?')") %> +
                            + + + diff --git a/views/standardsmeta/save.erb b/views/standardsmeta/save.erb new file mode 100644 index 0000000..57b22b9 --- /dev/null +++ b/views/standardsmeta/save.erb @@ -0,0 +1,60 @@ + +<%#include "standardsmeta.h" %> +<% tfetch(QVariantMap, standardsMeta); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +

                            Editing Standards Meta

                            + +<%== formTag(urla("save", standardsMeta["id"]), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +<%== linkTo("Show", urla("show", standardsMeta["id"])) %> | +<%== linkTo("Back", urla("index")) %> + + diff --git a/views/standardsmeta/show.erb b/views/standardsmeta/show.erb new file mode 100644 index 0000000..5142a46 --- /dev/null +++ b/views/standardsmeta/show.erb @@ -0,0 +1,31 @@ + +<%#include "standardsmeta.h" %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +

                            Showing Standards Meta

                            +
                            ID
                            <%= standardsMeta.id() %>

                            +
                            Spec Data ID
                            <%= standardsMeta.specDataId() %>

                            +
                            Spec Created
                            <%= standardsMeta.specCreated() %>

                            +
                            Spec Last Modified
                            <%= standardsMeta.specLastModified() %>

                            +
                            Spec Valid Start
                            <%= standardsMeta.specValidStart() %>

                            +
                            Spec Valid End
                            <%= standardsMeta.specValidEnd() %>

                            +
                            Last Editor
                            <%= standardsMeta.lastEditor() %>

                            +
                            G Legacy
                            <%= standardsMeta.gLegacy() %>

                            +
                            Responsibility
                            <%= standardsMeta.responsibility() %>

                            +
                            Spec Comment
                            <%= standardsMeta.specComment() %>

                            +
                            Spec Marker
                            <%= standardsMeta.specMarker() %>

                            +
                            Groups
                            <%= standardsMeta.groups() %>

                            + +<%== linkTo("Edit", urla("save", standardsMeta.id())) %> | +<%== linkTo("Back", urla("index")) %> + + + diff --git a/views/standardsmeta/showBy_spec_data_id.erb b/views/standardsmeta/showBy_spec_data_id.erb new file mode 100644 index 0000000..5142a46 --- /dev/null +++ b/views/standardsmeta/showBy_spec_data_id.erb @@ -0,0 +1,31 @@ + +<%#include "standardsmeta.h" %> +<% tfetch(StandardsMeta, standardsMeta); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +

                            Showing Standards Meta

                            +
                            ID
                            <%= standardsMeta.id() %>

                            +
                            Spec Data ID
                            <%= standardsMeta.specDataId() %>

                            +
                            Spec Created
                            <%= standardsMeta.specCreated() %>

                            +
                            Spec Last Modified
                            <%= standardsMeta.specLastModified() %>

                            +
                            Spec Valid Start
                            <%= standardsMeta.specValidStart() %>

                            +
                            Spec Valid End
                            <%= standardsMeta.specValidEnd() %>

                            +
                            Last Editor
                            <%= standardsMeta.lastEditor() %>

                            +
                            G Legacy
                            <%= standardsMeta.gLegacy() %>

                            +
                            Responsibility
                            <%= standardsMeta.responsibility() %>

                            +
                            Spec Comment
                            <%= standardsMeta.specComment() %>

                            +
                            Spec Marker
                            <%= standardsMeta.specMarker() %>

                            +
                            Groups
                            <%= standardsMeta.groups() %>

                            + +<%== linkTo("Edit", urla("save", standardsMeta.id())) %> | +<%== linkTo("Back", urla("index")) %> + + + diff --git a/views/stdsystem/create.erb b/views/stdsystem/create.erb new file mode 100644 index 0000000..f813493 --- /dev/null +++ b/views/stdsystem/create.erb @@ -0,0 +1,42 @@ + +<%#include "stdsystem.h" %> +<% tfetch(QVariantMap, stdSystem); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +

                            New Std System

                            + +<%== formTag(urla("create"), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +<%== linkTo("Back", urla("index")) %> + + + diff --git a/views/stdsystem/imprint.erb b/views/stdsystem/imprint.erb new file mode 100644 index 0000000..1359d88 --- /dev/null +++ b/views/stdsystem/imprint.erb @@ -0,0 +1,268 @@ + +<%#include "stdsystem.h" %> + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + +
                            +

                            IaaS::IT-IS ReST API

                            +
                            + + + +

                            Imprint / Impressum der IT-IS ReST API

                            +

                            +

                            + + <%==$appversion %>
                            + © Copyright 2019-<%==$year %> ZHENG Robert +
                            +
                            +

                            + +
                            + +
                            +

                            Informationspflicht laut § 5 TMG.

                            +

                            +

                            Owner and technical contactperson / Eigentümer und technischer Ansprechpartner:

                            +ZHENG Robert / Zhèng Bó Tè (郑 伯 特) +
                            +RRBBP +

                            +

                            Umsatzsteuer-Identifikationsnummer gemaess §27a Umsatzsteuergesetz: -- privat / private nicht-kommerzielle Entwicklungsumgebung --

                            +

                            EU-Streitschlichtung

                            +

                            Gemäß Verordnung über Online-Streitbeilegung in Verbraucherangelegenheiten (ODR-Verordnung) möchten wir Sie über die Online-Streitbeilegungsplattform (OS-Plattform) informieren.
                            +Verbraucher haben die Möglichkeit, Beschwerden an die Online Streitbeilegungsplattform der Europäischen Kommission unter http://ec.europa.eu/odr?tid=321227317 zu richten. Die dafür notwendigen Kontaktdaten finden Sie oberhalb in unserem Impressum.

                            +

                            Wir möchten Sie jedoch darauf hinweisen, dass wir nicht bereit oder verpflichtet sind, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.

                            +

                            Haftung für Inhalte dieser Website

                            +

                            Wir entwickeln die Inhalte dieser Webseite ständig weiter und bemühen uns korrekte und aktuelle Informationen bereitzustellen. Laut Telemediengesetz (TMG) §7 (1) sind wir als Diensteanbieter für eigene Informationen, die wir zur Nutzung bereitstellen, nach den allgemeinen Gesetzen verantwortlich. Leider können wir keine Haftung für die Korrektheit aller Inhalte auf dieser Webseite übernehmen, speziell für jene die seitens Dritter bereitgestellt wurden. Als Diensteanbieter im Sinne der §§ 8 bis 10 sind wir nicht verpflichtet, die von ihnen übermittelten oder gespeicherten Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.

                            +

                            Unsere Verpflichtungen zur Entfernung von Informationen oder zur Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen aufgrund von gerichtlichen oder behördlichen Anordnungen bleiben auch im Falle unserer Nichtverantwortlichkeit nach den §§ 8 bis 10 unberührt.

                            +

                            Sollten Ihnen problematische oder rechtswidrige Inhalte auffallen, bitte wir Sie uns umgehend zu kontaktieren, damit wir die rechtswidrigen Inhalte entfernen können. Sie finden die Kontaktdaten im Impressum.

                            +

                            Haftung für Links auf dieser Website

                            +

                            Unsere Webseite enthält Links zu anderen Webseiten für deren Inhalt wir nicht verantwortlich sind. Haftung für verlinkte Websites besteht für uns nicht, da wir keine Kenntnis rechtswidriger Tätigkeiten hatten und haben, uns solche Rechtswidrigkeiten auch bisher nicht aufgefallen sind und wir Links sofort entfernen würden, wenn uns Rechtswidrigkeiten bekannt werden.

                            +

                            Wenn Ihnen rechtswidrige Links auf unserer Website auffallen, bitte wir Sie uns zu kontaktieren. Sie finden die Kontaktdaten im Impressum.

                            +

                            Urheberrechtshinweis

                            +

                            Alle Inhalte dieser Webseite (Bilder, Fotos, Texte, Videos) unterliegen dem Urheberrecht der Bundesrepublik Deutschland. Bitte fragen Sie uns bevor Sie die Inhalte dieser Website verbreiten, vervielfältigen oder verwerten wie zum Beispiel auf anderen Websites erneut veröffentlichen. Falls notwendig, werden wir die unerlaubte Nutzung von Teilen der Inhalte unserer Seite rechtlich verfolgen.

                            +

                            Sollten Sie auf dieser Webseite Inhalte finden, die das Urheberrecht verletzen, bitten wir Sie uns zu kontaktieren.

                            +

                            Bildernachweis

                            +

                            Die Bilder, Fotos und Grafiken auf dieser Webseite sind urheberrechtlich geschützt.

                            +

                            Die Bilderrechte liegen bei dem folgenden Fotografen bzw. Ersteller, sofern nicht jeweils anders angegeben:

                            +
                              +
                            • ZHENG Robert
                            • +
                            +

                            Datenschutzerklärung

                            +

                            Datenschutz

                            +

                            Wir haben diese Datenschutzerklärung (Fassung 02.11.2020-321227317) verfasst, um Ihnen gemäß der Vorgaben der Datenschutz-Grundverordnung (EU) 2016/679 zu erklären, welche Informationen wir sammeln, wie wir Daten verwenden und welche Entscheidungsmöglichkeiten Sie als Besucher dieser Webseite haben.

                            +

                            Leider liegt es in der Natur der Sache, dass diese Erklärungen sehr technisch klingen, wir haben uns bei der Erstellung jedoch bemüht die wichtigsten Dinge so einfach und klar wie möglich zu beschreiben.

                            +

                            Automatische Datenspeicherung

                            +

                            Wenn Sie heutzutage Webseiten besuchen, werden gewisse Informationen automatisch erstellt und gespeichert, so auch auf dieser Webseite.

                            +

                            Wenn Sie unsere Webseite so wie jetzt gerade besuchen, speichert unser Webserver (Computer auf dem diese Webseite gespeichert ist) automatisch Daten wie

                            +
                              +
                            • die Adresse (URL) der aufgerufenen Webseite
                            • +
                            • Browser und Browserversion
                            • +
                            • das verwendete Betriebssystem
                            • +
                            • die Adresse (URL) der zuvor besuchten Seite (Referrer URL)
                            • +
                            • den Hostname und die IP-Adresse des Geräts von welchem aus zugegriffen wird
                            • +
                            • Datum und Uhrzeit
                            • +
                            +

                            in Dateien (Webserver-Logfiles).

                            +

                            In der Regel werden Webserver-Logfiles zwei Wochen gespeichert und danach automatisch gelöscht. Wir geben diese Daten nicht weiter, können jedoch nicht ausschließen, dass diese Daten beim Vorliegen von rechtswidrigem Verhalten eingesehen werden.

                            +

                            Cookies

                            +

                            Unsere Website verwendet HTTP-Cookies um nutzerspezifische Daten zu speichern.
                            +Im Folgenden erklären wir, was Cookies sind und warum Sie genutzt werden, damit Sie die folgende Datenschutzerklärung besser verstehen.

                            +

                            Was genau sind Cookies?

                            +

                            Immer wenn Sie durch das Internet surfen, verwenden Sie einen Browser. Bekannte Browser sind beispielsweise Chrome, Safari, Firefox, Internet Explorer und Microsoft Edge. Die meisten Webseiten speichern kleine Text-Dateien in Ihrem Browser. Diese Dateien nennt man Cookies.

                            +

                            Eines ist nicht von der Hand zu weisen: Cookies sind echt nützliche Helferlein. Fast alle Webseiten verwenden Cookies. Genauer gesprochen sind es HTTP-Cookies, da es auch noch andere Cookies für andere Anwendungsbereiche gibt. HTTP-Cookies sind kleine Dateien, die von unserer Website auf Ihrem Computer gespeichert werden. Diese Cookie-Dateien werden automatisch im Cookie-Ordner, quasi dem “Hirn” Ihres Browsers, untergebracht. Ein Cookie besteht aus einem Namen und einem Wert. Bei der Definition eines Cookies müssen zusätzlich ein oder mehrere Attribute angegeben werden.

                            +

                            Cookies speichern gewisse Nutzerdaten von Ihnen, wie beispielsweise Sprache oder persönliche Seiteneinstellungen. Wenn Sie unsere Seite wieder aufrufen, übermittelt Ihr Browser die „userbezogenen“ Informationen an unsere Seite zurück. Dank der Cookies weiß unsere Website, wer Sie sind und bietet Ihnen Ihre gewohnte Standardeinstellung. In einigen Browsern hat jedes Cookie eine eigene Datei, in anderen wie beispielsweise Firefox sind alle Cookies in einer einzigen Datei gespeichert.

                            +

                            Es gibt sowohl Erstanbieter Cookies als auch Drittanbieter-Cookies. Erstanbieter-Cookies werden direkt von unserer Seite erstellt, Drittanbieter-Cookies werden von Partner-Webseiten (z.B. Google Analytics) erstellt. Jedes Cookie ist individuell zu bewerten, da jedes Cookie andere Daten speichert. Auch die Ablaufzeit eines Cookies variiert von ein paar Minuten bis hin zu ein paar Jahren. Cookies sind keine Software-Programme und enthalten keine Viren, Trojaner oder andere „Schädlinge“. Cookies können auch nicht auf Informationen Ihres PCs zugreifen.

                            +

                            Die Cookie-Daten von IaaS::ITIS API sehen zum Beispiel folgendermaßen aus:

                            +
                              +
                            • Name: itisApiCookie
                            • +
                            • Ablaufzeit: 3 Monate
                            • +
                            • Verwendung: Cookie-Nutzung zugestimmt?
                            • +
                            • Wert: y
                            • +
                            +
                              +
                            • Name: TFSESSION
                            • +
                            • Ablaufzeit: solange der Browser geöffnet ist
                            • +
                            • Verwendung: ist der Anwender im ITIS-Portal angemeldet?
                            • +
                            • Wert: jwAAAPEqAAAAAgAAABYAaQBkAG/mHJhQvCar3i/d8MBnmA= (Bsp.-Wert wurde zur besseren Lesbarkeit gekürzt)
                            • +
                            +

                            Ein Browser sollte folgende Mindestgrößen unterstützen:

                            +
                              +
                            • Ein Cookie soll mindestens 4096 Bytes enthalten können
                            • +
                            • Pro Domain sollen mindestens 50 Cookies gespeichert werden können
                            • +
                            • Insgesamt sollen mindestens 3000 Cookies gespeichert werden können
                            • +
                            +

                            Welche Arten von Cookies gibt es?

                            +

                            Die Frage welche Cookies wir im Speziellen verwenden, hängt von den verwendeten Diensten ab und wird in der folgenden Abschnitten der Datenschutzerklärung geklärt. An dieser Stelle möchten wir kurz auf die verschiedenen Arten von HTTP-Cookies eingehen.

                            +

                            Man kann 4 Arten von Cookies unterscheiden:

                            +

                            +Unbedingt notwendige Cookies
                            +
                            Diese Cookies sind nötig, um grundlegende Funktionen der Website sicherzustellen. Zum Beispiel braucht es diese Cookies, wenn ein User ein Produkt in den Warenkorb legt, dann auf anderen Seiten weitersurft und später erst zur Kasse geht. Durch diese Cookies wird der Warenkorb nicht gelöscht, selbst wenn der User sein Browserfenster schließt.

                            +

                            +Funktionelle Cookies
                            +
                            Diese Cookies sammeln Infos über das Userverhalten und ob der User etwaige Fehlermeldungen bekommt. Zudem werden mithilfe dieser Cookies auch die Ladezeit und das Verhalten der Website bei verschiedenen Browsern gemessen.

                            +

                            +Zielorientierte Cookies
                            +
                            Diese Cookies sorgen für eine bessere Nutzerfreundlichkeit. Beispielsweise werden eingegebene Standorte, Schriftgrößen oder Formulardaten gespeichert.

                            +

                            +Werbe-Cookies
                            +
                            Diese Cookies werden auch Targeting-Cookies genannt. Sie dienen dazu dem User individuell angepasste Werbung zu liefern. Das kann sehr praktisch, aber auch sehr nervig sein.

                            +

                            Üblicherweise werden Sie beim erstmaligen Besuch einer Webseite gefragt, welche dieser Cookiearten Sie zulassen möchten. Und natürlich wird diese Entscheidung auch in einem Cookie gespeichert.

                            +

                            Wie kann ich Cookies löschen?

                            +

                            Wie und ob Sie Cookies verwenden wollen, entscheiden Sie selbst. Unabhängig von welchem Service oder welcher Website die Cookies stammen, haben Sie immer die Möglichkeit Cookies zu löschen, nur teilweise zuzulassen oder zu deaktivieren. Zum Beispiel können Sie Cookies von Drittanbietern blockieren, aber alle anderen Cookies zulassen.

                            +

                            Wenn Sie feststellen möchten, welche Cookies in Ihrem Browser gespeichert wurden, wenn Sie Cookie-Einstellungen ändern oder löschen wollen, können Sie dies in Ihren Browser-Einstellungen finden:

                            +

                            +Chrome: Cookies in Chrome löschen, aktivieren und verwalten +

                            +

                            +Safari: Verwalten von Cookies und Websitedaten mit Safari +

                            +

                            +Firefox: Cookies löschen, um Daten zu entfernen, die Websites auf Ihrem Computer abgelegt haben +

                            +

                            +Internet Explorer: Löschen und Verwalten von Cookies +

                            +

                            +Microsoft Edge: Löschen und Verwalten von Cookies +

                            +

                            Falls Sie grundsätzlich keine Cookies haben wollen, können Sie Ihren Browser so einrichten, dass er Sie immer informiert, wenn ein Cookie gesetzt werden soll. So können Sie bei jedem einzelnen Cookie entscheiden, ob Sie das Cookie erlauben oder nicht. Die Vorgangsweise ist je nach Browser verschieden. Am besten ist es Sie suchen die Anleitung in Google mit dem Suchbegriff “Cookies löschen Chrome” oder “Cookies deaktivieren Chrome” im Falle eines Chrome Browsers oder tauschen das Wort “Chrome” gegen den Namen Ihres Browsers, z.B. Edge, Firefox, Safari aus.

                            +

                            Wie sieht es mit meinem Datenschutz aus?

                            +

                            Seit 2009 gibt es die sogenannten „Cookie-Richtlinien“. Darin ist festgehalten, dass das Speichern von Cookies eine Einwilligung von Ihnen verlangt. Innerhalb der EU-Länder gibt es allerdings noch sehr unterschiedliche Reaktionen auf diese Richtlinien. In Deutschland wurden die Cookie-Richtlinien nicht als nationales Recht umgesetzt. Stattdessen erfolgte die Umsetzung dieser Richtlinie weitgehend in § 15 Abs.3 des Telemediengesetzes (TMG).

                            +

                            Wenn Sie mehr über Cookies wissen möchten und technischen Dokumentationen nicht scheuen, empfehlen wir https://tools.ietf.org/html/rfc6265, dem Request for Comments der Internet Engineering Task Force (IETF) namens “HTTP State Management Mechanism”.

                            +

                            Speicherung persönlicher Daten

                            +

                            Persönliche Daten, die Sie uns auf dieser Website elektronisch übermitteln, wie zum Beispiel Name, E-Mail-Adresse, Adresse oder andere persönlichen Angaben im Rahmen der Übermittlung eines Formulars oder Kommentaren im Blog, werden von uns gemeinsam mit dem Zeitpunkt und der IP-Adresse nur zum jeweils angegebenen Zweck verwendet, sicher verwahrt und nicht an Dritte weitergegeben.

                            +

                            Wir nutzen Ihre persönlichen Daten somit nur für die Kommunikation mit jenen Besuchern, die Kontakt ausdrücklich wünschen und für die Abwicklung der auf dieser Webseite angebotenen Dienstleistungen und Produkte. Wir geben Ihre persönlichen Daten ohne Zustimmung nicht weiter, können jedoch nicht ausschließen, dass diese Daten beim Vorliegen von rechtswidrigem Verhalten eingesehen werden.

                            +

                            Wenn Sie uns persönliche Daten per E-Mail schicken – somit abseits dieser Webseite – können wir keine sichere Übertragung und den Schutz Ihrer Daten garantieren. Wir empfehlen Ihnen, vertrauliche Daten niemals unverschlüsselt per E-Mail zu übermitteln.

                            +

                            Die Rechtsgrundlage besteht nach Artikel 6  Absatz 1 a DSGVO (Rechtmäßigkeit der Verarbeitung) darin, dass Sie uns die Einwilligung zur Verarbeitung der von Ihnen eingegebenen Daten geben. Sie können diesen Einwilligung jederzeit widerrufen – eine formlose E-Mail reicht aus, Sie finden unsere Kontaktdaten im Impressum.

                            +

                            Rechte laut Datenschutzgrundverordnung

                            +

                            Ihnen stehen laut den Bestimmungen der DSGVO grundsätzlich die folgende Rechte zu:

                            +
                              +
                            • Recht auf Berichtigung (Artikel 16 DSGVO)
                            • +
                            • Recht auf Löschung („Recht auf Vergessenwerden“) (Artikel 17 DSGVO)
                            • +
                            • Recht auf Einschränkung der Verarbeitung (Artikel 18 DSGVO)
                            • +
                            • Recht auf Benachrichtigung – Mitteilungspflicht im Zusammenhang mit der Berichtigung oder Löschung personenbezogener Daten oder der Einschränkung der Verarbeitung (Artikel 19 DSGVO)
                            • +
                            • Recht auf Datenübertragbarkeit (Artikel 20 DSGVO)
                            • +
                            • Widerspruchsrecht (Artikel 21 DSGVO)
                            • +
                            • Recht, nicht einer ausschließlich auf einer automatisierten Verarbeitung — einschließlich Profiling — beruhenden Entscheidung unterworfen zu werden (Artikel 22 DSGVO)
                            • +
                            +

                            Wenn Sie glauben, dass die Verarbeitung Ihrer Daten gegen das Datenschutzrecht verstößt oder Ihre datenschutzrechtlichen Ansprüche sonst in einer Weise verletzt worden sind, können Sie sich an die Bundesbeauftragte für den Datenschutz und die Informationsfreiheit (BfDI) wenden.

                            +

                            TLS-Verschlüsselung mit https

                            +

                            Wir verwenden https um Daten abhörsicher im Internet zu übertragen (Datenschutz durch Technikgestaltung Artikel 25 Absatz 1 DSGVO). Durch den Einsatz von TLS (Transport Layer Security), einem Verschlüsselungsprotokoll zur sicheren Datenübertragung im Internet können wir den Schutz vertraulicher Daten sicherstellen. Sie erkennen die Benutzung dieser Absicherung der Datenübertragung am kleinen Schloßsymbol links oben im Browser und der Verwendung des Schemas https (anstatt http) als Teil unserer Internetadresse.

                            +

                            OpenStreetMap Datenschutzerklärung

                            +

                            Wir haben auf unserer Website Kartenausschnitte des Online-Kartentools „OpenStreetMap“ eingebunden. Dabei handelt es sich um ein sogenanntes Open-Source-Mapping, welches wir über eine API (Schnittstelle) abrufen können. Angeboten wird diese Funktion von OpenStreetMap Foundation, St John’s Innovation Centre, Cowley Road, Cambridge, CB4 0WS, United Kingdom. Durch die Verwendung dieser Kartenfunktion wird Ihre IP-Adresse an OpenStreetMap weitergeleitet. In dieser Datenschutzerklärung erfahren Sie warum wir Funktionen des Tools OpenStreetMap verwenden, wo welche Daten gespeichert werden und wie Sie diese Datenspeicherung verhindern können.

                            +

                            Was ist OpenStreetMap?

                            +

                            Das Projekt OpenStreetMap wurde 2004 ins Leben gerufen. Ziel des Projekts ist und war es, eine freie Weltkarte zu erschaffen. User sammeln weltweit Daten etwa über Gebäude, Wälder, Flüsse und Straßen. So entstand über die Jahre eine umfangreiche, von Usern selbst erstellte digitale Weltkarte. Selbstverständlich ist die Karte, nicht vollständig, aber in den meisten Regionen mit sehr vielen Daten ausgestattet.

                            +

                            Warum verwenden wir OpenStreetMap auf unserer Website?

                            +

                            Unsere Website soll Ihnen in erster Linie hilfreich sein. Und das ist sie aus unserer Sicht immer dann, wenn man Information schnell und einfach findet. Da geht es natürlich einerseits um unsere Dienstleistungen und Produkte, andererseits sollen Ihnen auch weitere hilfreiche Informationen zur Verfügung stehen. Deshalb nutzen wir auch den Kartendienst OpenStreetMap. Denn so können wir Ihnen beispielsweise genau zeigen, wie Sie unsere Firma finden. Die Karte zeigt Ihnen den besten Weg zu uns und Ihre Anfahrt wird zum Kinderspiel.

                            +

                            Welche Daten werden von OpenStreetMap gespeichert?

                            +

                            Wenn Sie eine unserer Webseiten besuchen, die OpenStreetMap anbietet, werden Nutzerdaten an den Dienst übermittelt und dort gespeichert. OpenStreetMap sammelt etwa Informationen über Ihre Interaktionen mit der digitalen Karte, Ihre IP-Adresse, Daten zu Ihrem Browser, Gerätetyp, Betriebssystem und an welchem Tag und zu welcher Uhrzeit Sie den Dienst in Anspruch genommen haben. Dafür wird auch Tracking-Software zur Aufzeichnung von Userinteraktionen verwendet. Das Unternehmen gibt hier in der eigenen Datenschutzerklärung das Analysetool „Piwik“ an.

                            +

                            Die erhobenen Daten sind in Folge den entsprechenden Arbeitsgruppen der OpenStreetMap Foundation zugänglich. Laut dem Unternehmen werden persönliche Daten nicht an andere Personen oder Firmen weitergegeben, außer dies ist rechtlich notwendig. Der Drittanbieter Piwik speichert zwar Ihre IP-Adresse, allerdings in gekürzter Form.

                            +

                            Folgendes Cookie kann in Ihrem Browser gesetzt werden, wenn Sie mit OpenStreetMap auf unserer Website interagieren:

                            +

                            +Name: _osm_location
                            +Wert: 9.63312%7C52.41500%7C17%7CM
                            +Verwendungszweck: Das Cookie wird benötigt, um die Inhalte von OpenStreetMap zu entsperren.
                            +Ablaufdatum: nach 10 Jahren

                            +

                            Wenn Sie sich das Vollbild der Karte ansehen wollen, werden Sie auf die OpenStreetMap-Website verlinkt. Dort können unter anderem folgende Cookies in Ihrem Browser gespeichert werden:

                            +

                            +Name: _osm_totp_token
                            +Wert: 148253321227317-2
                            +Verwendungszweck: Dieses Cookie wird benutzt, um die Bedienung des Kartenausschnitts zu gewährleisten.
                            +Ablaufdatum: nach einer Stunde

                            +

                            +Name: _osm_session
                            +Wert: 1d9bfa122e0259d5f6db4cb8ef653a1c
                            +Verwendungszweck: Mit Hilfe des Cookies können Sitzungsinformationen (also Userverhalten) gespeichert werden.
                            +Ablaufdatum: nach Sitzungsende

                            +

                            +Name: _pk_id.1.cf09
                            +Wert: 4a5.1593684142.2.1593688396.1593688396321227317-9
                            +Verwendungszweck: Dieses Cookie wird von Piwik gesetzt, um Userdaten wie etwa das Klickverhalten zu speichern bzw. zu messen.
                            +Ablaufdatum: nach einem Jahr

                            +

                            Wie lange und wo werden die Daten gespeichert?

                            +

                            Die API-Server, die Datenbanken und die Server von Hilfsdiensten befinden sich derzeit im Vereinten Königreich (Großbritannien und Nordirland) und in den Niederlanden. Ihre IP-Adresse und Userinformationen, die in gekürzter Form durch das Webanalysetool Piwik gespeichert werden, werden nach 180 Tagen wieder gelöscht.

                            +

                            Wie kann ich meine Daten löschen bzw. die Datenspeicherung verhindern?

                            +

                            Sie haben jederzeit das Recht auf Ihre personenbezogenen Daten zuzugreifen und Einspruch gegen die Nutzung und Verarbeitung zu erheben. Cookies, die von OpenStreetMap möglicherweise gesetzt werden, können Sie in Ihrem Browser jederzeit verwalten, löschen oder deaktivieren. Dadurch wird allerdings der Dienst nicht mehr im vollen Ausmaß funktionieren. Bei jedem Browser funktioniert die Verwaltung, Löschung oder Deaktivierung von Cookies etwas anders. Im Folgenden finden Sie Links zu den Anleitungen der bekanntesten Browser:

                            +

                            +Chrome: Cookies in Chrome löschen, aktivieren und verwalten +

                            +

                            +Safari: Verwalten von Cookies und Websitedaten mit Safari +

                            +

                            +Firefox: Cookies löschen, um Daten zu entfernen, die Websites auf Ihrem Computer abgelegt haben +

                            +

                            +Internet Explorer: Löschen und Verwalten von Cookies +

                            +

                            +Microsoft Edge: Löschen und Verwalten von Cookies +

                            +

                            Wenn Sie mehr über die Datenverarbeitung durch OpenStreetMap erfahren wollen, empfehlen wir Ihnen die Datenschutzerklärung des Unternehmens unter https://wiki.osmfoundation.org/wiki/Privacy_Policy. +

                            +

                            Newsletter Datenschutzerklärung

                            +

                            +Wenn Sie sich für unseren Newsletter eintragen übermitteln Sie die oben genannten persönlichen Daten und geben uns das Recht Sie per E-Mail zu kontaktieren. Die im Rahmen der Anmeldung zum Newsletter gespeicherten Daten nutzen wir ausschließlich für unseren Newsletter und geben diese nicht weiter. +

                            +

                            +Sollten Sie sich vom Newsletter abmelden – Sie finden den Link dafür in jedem Newsletter ganz unten – dann löschen wir alle Daten die mit der Anmeldung zum Newsletter gespeichert wurden. +

                            + +

                            Rechtswirksamkeit dieses Haftungsausschlusses

                            +

                            Dieser Haftungsausschluss ist als Teil des Internetangebotes zu betrachten, von dem aus auf diese Seite verwiesen wurde. Sofern Teile oder einzelne Formulierungen dieses Textes der geltenden Rechtslage nicht, nicht mehr oder nicht vollständig entsprechen sollten, bleiben die übrigen Teile des Dokumentes in ihrem Inhalt und ihrer Gültigkeit davon unberührt.

                            + + +

                            Quelle: Erstellt mit dem Datenschutz Generator von AdSimple

                            + +
                            + +
                            + + + diff --git a/views/stdsystem/index.erb b/views/stdsystem/index.erb new file mode 100644 index 0000000..4cc9620 --- /dev/null +++ b/views/stdsystem/index.erb @@ -0,0 +1,62 @@ + +<%#include "standardsdata.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            Portal-Admin

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + +
                            + + + + diff --git a/views/stdsystem/license.erb b/views/stdsystem/license.erb new file mode 100644 index 0000000..a5f9146 --- /dev/null +++ b/views/stdsystem/license.erb @@ -0,0 +1,458 @@ + +<%#include "stdsystem.h" %> + + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + > + + + + + + + +
                            +

                            IaaS::IT-IS ReST API

                            +
                            + + + +

                            Licenses

                            +

                            of used software and programming languages.

                            +

                            With many thanks and great respect to the developers and maintainers.

                            + +

                            +

                            + + <%==$appversion %>
                            + Copyright © 2019-<%==$year %> ZHENG Robert +
                            +
                            +

                            + + + +
                            + + + +
                            +

                            Documentation

                            +
                            +

                            +Doxygen +

                            +

                            +Generate documentation from source code. +

                            +

                            +License: Permission to use, copy, modify, and distribute this software and its documentation under the terms of the GNU General Public License is hereby granted. No representations are made about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. See the GNU General Public License for more details. +

                            +

                            +Copyright (c) 1997-2018 by Dimitri van Heesch. +

                            +

                            +Documents produced by doxygen are derivative works derived from the input used in their production; they are not affected by this license. +
                            +see also: Wikipedia: Doxygen +

                            +
                            + +
                            +

                            +JSDoc +

                            +

                            +JSDoc is a markup language used to annotate JavaScript source code files. +

                            +

                            +License: JSDoc 3 is free software, licensed under the Apache License, Version 2.0. +

                            +

                            +Commercial and non-commercial use are permitted in compliance with the License. +
                            +In addition, JSDoc 3 includes or depends upon several third-party software packages, either in whole or in part. Each third-party software package is provided under its own license. +
                            +see also: Wikipedia: JSDoc +

                            +
                            +
                            + +
                            +

                            CI / CD

                            +
                            +

                            +Ansible +

                            +

                            +Ansible is an open-source software provisioning, configuration management, and application-deployment tool enabling infrastructure as code. +

                            +

                            +License: Proprietary / GNU General Public License +
                            +see also: Wikipedia: Ansible (software) +

                            +
                            +
                            + +
                            +

                            Programming Languages

                            +
                            +

                            +Python +

                            +

                            +Python is an interpreted, high-level and general-purpose programming language. Python's design philosophy emphasizes code readability with its notable use of significant whitespace. Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects. +

                            +

                            +License: Python Software Foundation License +
                            +see also: Wikipedia: Python (programming language) +

                            +
                            + +
                            +

                            +C++ +

                            +

                            +C++ is a general-purpose programming language created by Bjarne Stroustrup as an extension of the C programming language, or "C with Classes". The language has expanded significantly over time, and modern C++ now has object-oriented, generic, and functional features in addition to facilities for low-level memory manipulation. +

                            +

                            +License: none +
                            +see also: Wikipedia: C++ +

                            +
                            + +
                            +

                            +QT +

                            +

                            +Qt is a free and open-source widget toolkit for creating graphical user interfaces as well as cross-platform applications that run on various software and hardware platforms such as Linux, Windows, macOS, Android or embedded systems with little or no change in the underlying codebase while still being a native application with native capabilities and speed.

                            +

                            +License: Qt Commercial License, GPL 2.0, 3.0, LGPL 3.0 +
                            +see also: Wikipedia: Qt (software) +

                            +
                            + +
                            +

                            +HTML5 +

                            +

                            +HTML5 is a markup language used for structuring and presenting content on the World Wide Web. +

                            +

                            +License: open format +
                            +see also: Wikipedia: HTML5 +

                            +
                            + +
                            +

                            +JavaScript +

                            +

                            +JavaScript often abbreviated as JS, is a programming language that conforms to the ECMAScript specification. JavaScript is high-level, often just-in-time compiled, and multi-paradigm. +

                            +

                            +License: open format +
                            +see also: Wikipedia: JavaScript +

                            +
                            + +
                            +

                            +W3CSS +

                            +

                            +W3.CSS is a CSS Framework +
                            +W3Schools is created in 1998, its name is derived from the World Wide Web, but is not affiliated with the W3C (World Wide Web Consortium). It is run by Refsnes Data in Norway. +

                            +

                            +License: W3.CSS is free to use. No license is necessary. +
                            +see also: Wikipedia: W3Schools +

                            +
                            + +
                            + +
                            +

                            Clients

                            +
                            +

                            +Node.js +

                            +Node.js is an open-source, cross-platform, back-end, JavaScript runtime environment that executes JavaScript code outside a web browser. +

                            +

                            +License: MIT +
                            +see also: Wikipedia: Nodes.js +

                            +
                            + +
                            +

                            +React Native +

                            +React Native is an open-source mobile application framework for mobile devices based on iOS or Android created by Facebook, Inc. +

                            +

                            +License: MIT +
                            +see also: Wikipedia: React Native +

                            +
                            + +
                            +

                            +Apache Cordova +

                            +Apache Cordova (formerly PhoneGap) is a mobile application development framework for mobile devices based on iOS or Android. +

                            +

                            +License: Apache License 2.0 +
                            +see also: Wikipedia: Apache Cordova +

                            +
                            + +
                            +

                            +Electron +

                            +Electron (formerly known as Atom Shell) is an open-source software framework for client devices based on MS Win10, MacOS or Linux developed and maintained by GitHub. +

                            +

                            +License: MIT +
                            +see also: Wikipedia: Electron (software framework) +

                            +
                            + +
                            +

                            +RRBBP +

                            +

                            +ITIS-Clients for ITIS-API (IaaS) are available for client devices based on MS Win10, MacOS or Linux and mobile devices based on iOS or Android. +

                            +

                            +License: Binaries: Freeware, Source Code: Modified BSD license (New BSD License) +

                            +

                            +Modification, distribution or copying of source code is allowed in accordance with the license conditions below. If you modify the source code, you don't need to publish it; you can select "not publish" if you wish. +

                            +

                            +Copyright (c) 2019-<%==$year %>, ZHENG Robert / Zhèng Bó Tè (郑 伯 特) All rights reserved. +

                            +

                            +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +
                            +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +
                            +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +
                            +Neither the name of the ITIS API Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +

                            +

                            +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +

                            +see also:
                            +Github: ITIS-Clients Desktop
                            +Github: ITIS-Clients Mobile + +

                            +
                            + +
                            + +
                            +

                            Server-side

                            +
                            +

                            +Ubuntu +

                            +

                            +Ubuntu is a Linux distribution based on Debian and mostly composed of free and open-source software. +

                            +

                            +License: OSS +
                            +see also: Wikipedia: Ubuntu Linux +

                            +
                            + +
                            +

                            +Docker +

                            +

                            +Docker is a set of platform as a service (PaaS) products that use OS-level virtualization to deliver software in packages called containers. +

                            +

                            +License: Binaries: Freemium software as a service, Source code: Apache License 2.0 +
                            +see also: Wikipedia: Docker (software) +

                            +
                            + +
                            +

                            +NGINX +

                            +

                            +NginX is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. +

                            +

                            +License: 2-clause BSD +
                            +see also: Wikipedia: NGINX +

                            +
                            + +
                            +

                            +PostgreSQL +

                            +

                            +PostgreSQL also known as Postgres, is a free and open-source relational database management system (RDBMS) emphasizing extensibility and SQL compliance. +

                            +

                            +License: PostgreSQL License (free and open-source) +
                            +see also: Wikipedia: PostgreSQL +

                            +
                            + +
                            +

                            +Treefrog +

                            +

                            +TreeFrog Framework is a high-speed and full-stack C++ framework for developing Web applications (Web Applicationserver) +

                            +

                            +License: Modified BSD license (New BSD License) +

                            +

                            +Modification, distribution or copying of source code is allowed in accordance with the license conditions below. If you modify the source code, you don't need to publish it; you can select "not publish" if you wish. +

                            +

                            +Copyright (c) 2010-<%==$year %>, AOYAMA Kazuharu All rights reserved. +

                            +

                            +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +
                            +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +
                            +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +
                            +Neither the name of the TreeFrog Framework Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +

                            +

                            +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +

                            +see also: Github: Treefrog Framework +

                            +
                            + +
                            +

                            +RRBBP +

                            +

                            +ITIS-API is an (ReST) API for IT-IS Services (IaaS) +

                            +

                            +License: Binaries: Freeware, Source Code: Modified BSD license (New BSD License) +

                            +

                            +Modification, distribution or copying of source code is allowed in accordance with the license conditions below. If you modify the source code, you don't need to publish it; you can select "not publish" if you wish. +

                            +

                            +Copyright (c) 2019-<%==$year %>, ZHENG Robert / Zhèng Bó Tè (郑 伯 特) All rights reserved. +

                            +

                            +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +
                            +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +
                            +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +
                            +Neither the name of the ITIS API Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +

                            +

                            +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +

                            +see also: Github: ITIS ReST-API +

                            +
                            +
                            + +
                            + + + + diff --git a/views/stdsystem/list_all.erb b/views/stdsystem/list_all.erb new file mode 100644 index 0000000..740fea4 --- /dev/null +++ b/views/stdsystem/list_all.erb @@ -0,0 +1,118 @@ + +<%#include "stdsystem.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + +
                            + + + + + + + + + + + +<% tfetch(QList, stdSystemList); %> +<% for (const auto &i : stdSystemList) { %> + + + + + + + + + + +<% } %> +
                            IDStd TypeStd AttrStd ValStd FlagSortActiveBaustein
                            <%= i.id() %><%= i.stdType() %><%= i.stdAttr() %><%= i.stdVal() %><%= i.stdFlag() %><%= i.sort() %><%= i.active() %> +     +     + +
                            + +
                            + + + + diff --git a/views/stdsystem/save.erb b/views/stdsystem/save.erb new file mode 100644 index 0000000..ca7a355 --- /dev/null +++ b/views/stdsystem/save.erb @@ -0,0 +1,45 @@ + +<%#include "stdsystem.h" %> +<% tfetch(QVariantMap, stdSystem); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +

                            Editing Std System

                            + +<%== formTag(urla("save", stdSystem["id"]), Tf::Post) %> +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            + + +<%== linkTo("Show", urla("show", stdSystem["id"])) %> | +<%== linkTo("Back", urla("index")) %> + + diff --git a/views/stdsystem/show.erb b/views/stdsystem/show.erb new file mode 100644 index 0000000..301ad56 --- /dev/null +++ b/views/stdsystem/show.erb @@ -0,0 +1,26 @@ + +<%#include "stdsystem.h" %> +<% tfetch(StdSystem, stdSystem); %> + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +

                            Showing Std System

                            +
                            ID
                            <%= stdSystem.id() %>

                            +
                            Std Type
                            <%= stdSystem.stdType() %>

                            +
                            Std Attr
                            <%= stdSystem.stdAttr() %>

                            +
                            Std Val
                            <%= stdSystem.stdVal() %>

                            +
                            Std Flag
                            <%= stdSystem.stdFlag() %>

                            +
                            Sort
                            <%= stdSystem.sort() %>

                            +
                            Active
                            <%= stdSystem.active() %>

                            + +<%== linkTo("Edit", urla("save", stdSystem.id())) %> | +<%== linkTo("Back", urla("index")) %> + + + diff --git a/views/views.pro b/views/views.pro new file mode 100644 index 0000000..f925ba4 --- /dev/null +++ b/views/views.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +SUBDIRS = _src diff --git a/views/webmenu/create.erb b/views/webmenu/create.erb new file mode 100644 index 0000000..a00bf85 --- /dev/null +++ b/views/webmenu/create.erb @@ -0,0 +1,112 @@ + +<%#include "webmenu.h" %> +<% tfetch(QVariantMap, webmenu); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + +<%== formTag(urla("create"), Tf::Post) %> +
                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +
                            + + +
                            +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                            + + + + diff --git a/views/webmenu/index.erb b/views/webmenu/index.erb new file mode 100644 index 0000000..1807135 --- /dev/null +++ b/views/webmenu/index.erb @@ -0,0 +1,68 @@ + +<%#include "webmenu.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + +
                            + + + + + + diff --git a/views/webmenu/list_all.erb b/views/webmenu/list_all.erb new file mode 100644 index 0000000..4b66606 --- /dev/null +++ b/views/webmenu/list_all.erb @@ -0,0 +1,128 @@ + +<%#include "webmenu.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + +<% tfetch(QList, webmenuList); %> +<% for (const auto &i : webmenuList) { %> + + + + + + + + + + + + + + + +<% } %> +
                            IDMnu IDMnu Sub IDName DeDesc DeName EnDesc EnMnu UriGroupsMnu ItemSortActiveBaustein
                            <%= i.id() %><%= i.mnuId() %><%= i.mnuSubId() %><%= i.nameDe() %><%= i.descDe() %><%= i.nameEn() %><%= i.descEn() %><%= i.mnuUri() %><%= i.groups() %><%= i.mnuItem() %><%= i.sort() %><%= i.active() %> +     +     + +
                            + +
                            + + + + diff --git a/views/webmenu/list_all.erb_2020-12-30_1409 b/views/webmenu/list_all.erb_2020-12-30_1409 new file mode 100644 index 0000000..f8b3167 --- /dev/null +++ b/views/webmenu/list_all.erb_2020-12-30_1409 @@ -0,0 +1,90 @@ + +<%#include "webmenu.h" %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + +
                            +

                            Admin::Portal

                            +
                            + + + +

                            Listing Webmenu

                            +
                            + + +<%== linkTo("Create a new Webmenu", urla("create")) %>
                            +
                            + + + + + + + + + + + + + + + +<% tfetch(QList, webmenuList); %> +<% for (const auto &i : webmenuList) { %> + + + + + + + + + + + + + + + +<% } %> +
                            IDMnu IDMnu Sub IDName DeDesc DeName EnDesc EnMnu UriGroupsMnu ItemSortActive
                            <%= i.id() %><%= i.mnuId() %><%= i.mnuSubId() %><%= i.nameDe() %><%= i.descDe() %><%= i.nameEn() %><%= i.descEn() %><%= i.mnuUri() %><%= i.groups() %><%= i.mnuItem() %><%= i.sort() %><%= i.active() %> + <%== linkTo("Show", urla("show", i.id())) %> + <%== linkTo("Edit", urla("save", i.id())) %> + <%== linkTo("Remove", urla("remove", i.id()), Tf::Post, "confirm('Are you sure?')") %> +
                            + +
                            + + + + diff --git a/views/webmenu/save.erb b/views/webmenu/save.erb new file mode 100644 index 0000000..d2f4130 --- /dev/null +++ b/views/webmenu/save.erb @@ -0,0 +1,125 @@ + +<%#include "webmenu.h" %> +<% tfetch(QVariantMap, webmenu); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + + <%== linkTo("Remove", urla("remove", webmenu["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + + + +<%== formTag(urla("save", webmenu["id"]), Tf::Post) %> +
                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +
                            + + +
                            + <%== linkTo("Remove", urla("remove", webmenu["id"]), Tf::Post, "confirm('Are you sure?')") %> +    +" class="w3-btn w3-light-grey"> Anzeige +« zurück + +
                            + + + + + diff --git a/views/webmenu/show.erb b/views/webmenu/show.erb new file mode 100644 index 0000000..3f4e5b9 --- /dev/null +++ b/views/webmenu/show.erb @@ -0,0 +1,118 @@ + +<%#include "webmenu.h" %> +<% tfetch(Webmenu, webmenu); %> + + + + + + <%= controller()->name() + ": " + controller()->activeAction() %> + + + + + + + + + + + + + + + + + +
                            +

                            ITIS-API::Admin-Portal

                            +
                            + + + +

                            <%= controller()->name() + ": " + controller()->activeAction() %>

                            +
                            + +

                            <%==$ red_msg %><%=$ error %>

                            <%==$ green_msg %><%=$ notice %>

                            + +
                            + +
                            + + <%== linkTo("Remove", urla("remove", webmenu.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit + zurück +
                            + +
                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +

                            + +

                            +
                            + +
                            + <%== linkTo("Remove", urla("remove", webmenu.id()), Tf::Post, "confirm('Are you sure?')") %> +    + Q-Edit +« zurück + +
                            + + + +