summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2018-09-10 12:08:06 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2018-09-10 12:08:49 +0000
commit7a1613443d8ac804119a4f6c1dbfdebabf9db528 (patch)
tree7be467cedbc843e5b363b05f0202d3396b9bc2fa
parentMerging upstream version 1:6.1.0. (diff)
downloadlibreoffice-7a1613443d8ac804119a4f6c1dbfdebabf9db528.zip
libreoffice-7a1613443d8ac804119a4f6c1dbfdebabf9db528.tar.xz
Merging debian version 1:6.1.0-1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--debian/changelog300
-rw-r--r--debian/control413
-rw-r--r--debian/control.help.in5
-rw-r--r--debian/control.in70
-rw-r--r--debian/control.kde5.in5
-rw-r--r--debian/control.qt5.in2
-rw-r--r--debian/control.sdk.in1
-rw-r--r--debian/control.subsequentcheckbase.in7
-rw-r--r--debian/control.systray.in11
-rw-r--r--debian/control.test-packages.in16
-rw-r--r--debian/control.transitionals.in11
-rw-r--r--debian/copyright86
-rw-r--r--debian/libreoffice-help-common.links1
-rw-r--r--debian/libreoffice-help.doc-base.in7
-rw-r--r--debian/libreoffice-help.lintian-overrides.in15
-rw-r--r--debian/libreoffice-kde.NEWS13
-rw-r--r--debian/libreoffice-sdbc-firebird.bug-script.in10
-rw-r--r--debian/missing-sources/jquery-3.1.1.js10219
-rw-r--r--debian/patches/allow-opensymbol-rebuild.diff148
-rw-r--r--debian/patches/apparmor-allow-java.security.diff14
-rw-r--r--debian/patches/apparmor-cleanups.diff37
-rw-r--r--debian/patches/apparmor-fixes.diff66
-rw-r--r--debian/patches/apparmor-usrmerge.diff52
-rw-r--r--debian/patches/appstream-ignore-startcenter.diff2
-rw-r--r--debian/patches/bridges-exceptions-updates.diff934
-rw-r--r--debian/patches/build-connectivitytools.diff23
-rw-r--r--debian/patches/cppunit-optional.diff3
-rw-r--r--debian/patches/debian-hardened-buildflags-CPPFLAGS.diff2
-rw-r--r--debian/patches/disable-flaky-tests.diff17
-rw-r--r--debian/patches/disable-java-in-odk-build-examples-on-zero-vm.diff31
-rw-r--r--debian/patches/disable-some-sc-tests-with-internal-cppunit.diff23
-rw-r--r--debian/patches/disable-unused-test-programs.diff15
-rw-r--r--debian/patches/do-not-hide-test-output.diff99
-rw-r--r--debian/patches/hide-math-desktop-file.patch15
-rw-r--r--debian/patches/make-package-modules-not-suck.diff35
-rw-r--r--debian/patches/mention-java-common-package.diff3
-rw-r--r--debian/patches/no-ant-check-if-unneeded.diff58
-rw-r--r--debian/patches/no-check-if-root.diff2
-rw-r--r--debian/patches/no-openssl.diff2
-rw-r--r--debian/patches/no-packagekit-per-default.diff123
-rw-r--r--debian/patches/odk-no-dot.diff26
-rw-r--r--debian/patches/reportdesign-mention-package.diff4
-rw-r--r--debian/patches/revert-bd260a59cfdd050db3aa9a641ef0fa09efcedf5b.diff19
-rw-r--r--debian/patches/sal-fix-kfreebsd-build.diff23
-rw-r--r--debian/patches/series15
-rw-r--r--debian/patches/test-apparmor-profiles.diff54
-rwxr-xr-xdebian/rules332
-rwxr-xr-xdebian/scripts/get_ttf_version.pl23
-rw-r--r--debian/source/include-binaries2
-rw-r--r--debian/source/lintian-overrides1
-rw-r--r--debian/tests/control30
-rwxr-xr-xdebian/tests/junit (renamed from debian/tests/junit-subsequentcheck)16
-rwxr-xr-xdebian/tests/odk-build-examples6
-rw-r--r--debian/tests/patches/disable-db-tests.diff1
-rw-r--r--debian/tests/patches/odk-build-examples-standalone.diff64
-rw-r--r--debian/tests/patches/smoketest-standalone.diff32
-rw-r--r--debian/tests/patches/testtools-standalone.diff227
-rwxr-xr-xdebian/tests/pyuno-import1
-rwxr-xr-xdebian/tests/smoketest87
-rwxr-xr-xdebian/tests/test-extension33
-rwxr-xr-xdebian/tests/test-extension-shared34
-rwxr-xr-xdebian/tests/uicheck15
-rwxr-xr-xdebian/tests/uno55
-rwxr-xr-xdebian/tests/uno-import1
-rw-r--r--debian/uno-libs3.symbols7
-rw-r--r--tarballs/pdfium-3426.tar.bz2bin0 -> 6348500 bytes
66 files changed, 2041 insertions, 11963 deletions
diff --git a/debian/changelog b/debian/changelog
index f77cac3..f63a48d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,61 +1,279 @@
-libreoffice (1:6.0.5-1~dschinn1) dschinn-backports; urgency=medium
+libreoffice (1:6.1.0-1) unstable; urgency=medium
- * Uploading to dschinn-backports, remaining changes:
- - Updating maintainer field.
- - Updating uploaders field.
- - Updating bugs field.
- - Updating vcs fields.
- - Updating source local-options.
- - Building without dpkg-vendor.
- - Disabling the splash screen by default.
- - Enabling experimental features by default.
- - Disabling libreoffice print dialogs, using system print dialogs by
- default.
- - Building without dpkg-parsechangelog.
- * Merging upstream version 1:6.0.5.
- * Merging debian version 1:6.0.5-1.
- * Regenerating debian files.
+ * Libreoffice 6.1.0 final (identical to rc3)
- -- Daniel Baumann <daniel.baumann@progress-linux.org> Wed, 04 Jul 2018 16:23:55 +0200
+ * debian/patches/apparmor-fixes.diff: add patch from libreoffice-6-1
+ branch to fix saving of documents in apparmor enforce mode
+ (closes: #905442)
+ * debian/patches/apparmor-cleanups.diff: use dri-enumerate abstraction of
+ apparmor; add from https://gerrit.libreoffice.org/#/c/58589
-libreoffice (1:6.0.5-1) unstable; urgency=medium
+ * debian/control.in:
+ - recommend apparmor (>= 2.13) for above
+ - make -common also depend on -style-colibre, since it apparently also
+ is needed to have LO draw iit's check/radiobuttons correctly
+ (closes: #904598, #905408, #905819)
- * New upstream release
+ -- Rene Engelhard <rene@debian.org> Sun, 12 Aug 2018 08:13:03 +0200
+
+libreoffice (1:6.1.0~rc3-1) unstable; urgency=medium
+
+ * New upstream release candidate
+
+ * debian/patches/do-not-hide-test-output.diff: also do not hide PythonTests
+ output
+
+ * debian/control.in: add Breaks/Replaces: libreoffice-common (<<
+ 1:6.1.0~alpha1-1) to libreoffice-help-common (closes: #905185)
+ * debian/tests/control, debian/tests/smoketest: use "skippable" restriction
+ and return 77 instead of 0 if running into the timeout
+ * debian/tests/*: use $AUTOPKGTEST_TMP instead of $ADTTMP
+ * debian/rules:
+ - don't suggest libreoffice-spellcheck-tr (for
+ libreoffice-zemberek) anymore - dead upstream. thanks Muhammet Kara
+ - support new "terse" in DEB_BUILD_OPTIONS
+ - replace #!/usr/bin/env perl shebangs in some files by #!/usr/bin/perl
+ - also fix up ../00/usr/share/libreoffice/help/... in doc-base....
+
+ -- Rene Engelhard <rene@debian.org> Thu, 02 Aug 2018 21:06:53 +0000
+
+libreoffice (1:6.1.0~rc2-3) unstable; urgency=medium
+
+ * debian/tests/control:
+ - "timeout" is in coreutils...
+ * debian/rules:
+ - add | firefox at the end of the -help browser depends (closes: #904312)
+
+ -- Rene Engelhard <rene@debian.org> Mon, 23 Jul 2018 18:54:04 +0000
+
+libreoffice (1:6.1.0~rc2-2) unstable; urgency=low
+
+ * upload to unstable
+
+ -- Rene Engelhard <rene@debian.org> Sat, 21 Jul 2018 23:52:12 +0000
+
+libreoffice (1:6.1.0~rc2-1) experimental; urgency=low
+
+ * New upstream release candidate
+
+ * debian/patches/apparmor-allow-java.security.diff: allow
+ /etc/java-??-openjdk/security/java.security read access, denied because
+ it's a symlink (closes: #903900)
+
+ * debian/tests/control: add missing libreoffice-dev dependency for the
+ "smoketest" test
+ * debian/tests/uno: run config_host.mk with (e.g.) BUILD_KDE=n to avoid
+ configure failure because qmake is not correctly found
+ * debian/rules:
+ - don't depend on x-www-browser, only "qutebrowser" provides it.
+ Use firefox-esr | epiphany-browser | konqueror | chromium which is
+ the order xdg-open (which is used to actually open the help) does, too
+ (closes: #904022)
+ - temporarily disable dwz. fails since the change to gcc 8
+
+ -- Rene Engelhard <rene@debian.org> Thu, 19 Jul 2018 22:17:15 +0000
+
+libreoffice (1:6.1.0~rc1-2) experimental; urgency=medium
+
+ * rebuild with correct control (all languages...)
+
+ -- Rene Engelhard <rene@debian.org> Thu, 05 Jul 2018 21:31:20 +0000
+
+libreoffice (1:6.1.0~rc1-1) experimental; urgency=medium
+
+ * New upstream release candidate
* debian/rules:
+ - make the tests fatal again (where they were before - amd64/arm64),
+ the "broken" hsqldb->firebird auto-migration got disabled for 6.1
+ - fix PYTHON_VERSION override to work again;
+ export PYTHON_{CFLAGS,LIBS} ourselves
+ * debian/control.transitionals.in: make libreoffice-kde "all" again since
+ it its built everywhere since last upload
+ * debian/uno-libs3.symbols: add sal PRIVATE_x.y* symbols (closes: #902898)
+
+ -- Rene Engelhard <rene@debian.org> Wed, 04 Jul 2018 23:50:05 +0200
+
+libreoffice (1:6.1.0~beta2-1) experimental; urgency=medium
+
+ * New upstream beta release
+ - fixes moving keyboard focus to sidebar styles panel after pressing F11
+ (closes: #870476)
+
+ * debian/patches/allow-opensymbol-rebuild.diff: from upstream
+ https://gerrit.libreoffice.org/#/c/54938/, add new --enable-build-opensymbol
+ * debian/patches/gtk3-kde5-32bit.diff: add patch from
+ https://gerrit.libreoffice.org/#/c/55474 to fix gtk3_kde5 filepicker build
+ on 32bit
+ * debian/patches/do-not-hide-test-output.diff: don't use tee since that hides
+ the failure (and -o pipefail doesn't work), just use plain 2>&1 and no log
+
+ * debian/rules:
+ - allow fontforge additionally to of fontforge-nox
+ - remove custom build-opensymbol target; use new --enable-build-opensymbol
- fix i386 conditional for not adding a (not fullfillable on stretch
even with backports) default-jdk (>= 2:1.9) build-dep
- don't enable dwz on stretch-backports, the needed debhelper conflicts
against the (needed via libgpgmepp-dev) stable qt5-qmake :/
- remove USE_DWZ_MULTIFILE conditional (which was disabled),
default since debhelper 11.3
+ - make BUILD_TEST_PACKAGES=y be based on DEB_BUILD_PROFILES, not
+ DEB_BUILD_OPTIONS
+ - enable gtk3_kde also on 32bit archs
+ - ignore test failures for now; broke already in beta1-1 but was hidden by
+ the do-not-hide-test-output.diff bug, so no regression. Needs to be
+ investigated.
+ * debian/control.test-packages.in:
+ - add Build-Profiles: <!nocheck>
+ * debian/control.sdk.in:
+ - add Build-Profiles: <!nodoc> for -dev-doc
+ * debian/control.in:
+ - the colibre change was reverted; make -common depend on -style-tango
- -- Rene Engelhard <rene@debian.org> Wed, 20 Jun 2018 04:54:34 +0000
-
-libreoffice (1:6.0.5~rc1-2) unstable; urgency=medium
-
- * debian/rules:
- - stop special-casing i386 to explicitely use openjdk (9), use default-java
- again and and appropriate versioned build-depends
-
- -- Rene Engelhard <rene@debian.org> Sat, 02 Jun 2018 12:14:04 +0200
+ -- Rene Engelhard <rene@debian.org> Sun, 17 Jun 2018 10:09:05 +0200
-libreoffice (1:6.0.5~rc1-1) unstable; urgency=medium
+libreoffice (1:6.1.0~beta1-1) experimental; urgency=medium
- * New upstream release candidate
- - fixes crash on typing any character with IME in Wayland
- (closes: #898632)
+ * New upstream beta release
- allows rk on .gnupg/random_seed to fix hang on gpg encryption
(closes: #899380)
+ * debian/tests/patches/odk-build-examples-standalone.diff: make apply again
+ * debian/patches/do-not-hide-test-output.diff: as name says. to prevent
+ slow(er) archs/buildds timing about because e.g. the new uitests might take
+ too long without an output
+ * debian/patches/no-ant-check-if-unneeded.diff: as name says, only check
+ for ant if we really need it for building something
+
* debian/rules:
+ - build-depend on fontforge-nox and rebuild opens___.tff from OpenSymbol.sfd
+ - fix numbertext-data-recommends substvar
- optimize the build-indep build a bit more
+ remove build-indep dependency on build-arch to not run the full
testsuite on -A (build-indep) builds.
Only run the odk "check" (SDK files) and build-example tests
+ build without --enable-symbols on build-indep builds
+ - enable (gtk3_)kde5 (and qt5) only on 64bit archs for now
+ - make -help-xx depend with = on -help-common and -help-common depend on
+ x-www-browser, too, it already contains HTML
+ - rebuild smoketestdoc.sxw; install it into libreoffice-smoketest-data
+ - move ant to Build-Depends-Indep
+ * debian/tests/odk-build-examples: fix
+ * debian/control.in: move numbertext-data-recommends to Depends: as the
+ numbertext stuff is used for ooxml im/export.. (theoretical, since
+ libnumbertext depends on it already, but...)
+ * debian/copyright: add the various (c)'s of OpenSymbol.sfd
+ * debian/libreoffice-help-common.links: symlink normalize.css to
+ /usr/share/javascript/normalize.css/normalize.css and depend on
+ libjs-normalize.css (closes: #898788), but mention ./help3xsl/normalize.css
+ in copyright
+ * debian/tests/*:
+ - remove build-needed in smoketest and build some needed parts ourselves.
+ Add missing LD_LIBRARY_PATH and use
+ /usr/share/libreoffice/smoketestdoc.sxw. Enable
+ - honour $ADTTMP
+ - rename junit-subsequentcheck to junit
+ - add "uno" test running the bridgetest using /usr/lib/libreoffice/uno.
+ only depends on "ure"
+ - run "perl odk/util/check.pl /usr/lib/libreoffice/sdk"
+ * debian/rules, debian/control.systray.in: the systray "Quickstarter" is
+ finally gone upstream.
+
+ -- Rene Engelhard <rene@debian.org> Fri, 25 May 2018 11:29:12 +0200
+
+libreoffice (1:6.1.0~beta1~git20180507-1) experimental; urgency=medium
+
+ * New upstream snapshot
+
+ * debian/patches/disable-tests-somehow-needing-more-fonts.diff,
+ debian/patches/tdf108963-test.diff: remove. Obsolete after Liberation
+ fix
+
+ * debian/libreoffice-help-common.doc-base: ... rename
+ * debian/libreoffice-help.doc-base.in: ... here and only use as template.
+ Update Index: for localized "index" (text/shared/main0108.html) and fix
+ Section:
+ * debian/rules:
+ - move also the -help-common parts to /usr/share
+ - create/populate libreoffice-help-xx .doc-base files
+ - use internal libetonyek on stretch-backports
+ - use -type f for pupulating Files: in .doc-base to leave out dirs...
+ - stop special-casing i386 to explicitly use openjdk (9), use default-java
+ again and add appropriate versioned build-depends
+ - install the language-specific media/helpimg/xx into their correct packages
+ - fix build with -B/all (unpackaged help) languages
+ - add Build-Conflicts: against "broken" fonts-liberation
+ - remove explicit SAL_USE_VCLPLUGIN="svp" from make check call since it's
+ apparently unneeded (and even actually harmful) now
+ * debian/rules, debian/control.in: add stuff for new libnumbertext usage
+ * debian/lo-java-ref.in: move to Programming/Java
+ * debian/tests/odk-build-examples: build also new split-out
+ CustomTarget_odk/build-examples_java
+
+ -- Rene Engelhard <rene@debian.org> Mon, 07 May 2018 20:42:58 +0000
+
+libreoffice (1:6.1.0~alpha1-1) experimental; urgency=medium
+
+ * New upstream alpha release
+ - fixes cross-file links with xlsx files (closes: #658569)
+ - apparently preserves conditional formatting with copy paste operations
+ (again) (closes: #868349)
+ - fixes crash on typing any character with IME in Wayland
+ (closes: #898632)
- -- Rene Engelhard <rene@debian.org> Thu, 31 May 2018 09:13:33 +0000
+ * debian/patches/no-packagekit-per-default.diff: use the new config options
+ to disable the packagekit install stuff
+ * debian/patches/odk-no-dot.diff: remove, see below
+
+ * debian/rules:
+ - install TestExtension.oxt into a new libreoffice-smoketest-data package
+ which can be used by autopkgtests
+ - enable gtk3_kde vclplug (closes: #752230) and "kde5" (kde5be)
+ - re-enable pdfium on arm64 again; is now not using its internal allocator
+ anymore
+ - use new $(call java_dependency, default-jdk) for default-jdk builddep
+ - add Build-Depends-Indep: on graphviz, since Debians doxygen sets
+ HAVE_DOT to YES (see #818787) and upstreams configure.ac now checks for
+ this and fails if "dot" isn't present.
+ * debian/tests/*: add autopkgtest to test install TestExtension.oxt
+ (user and shared)
+ * debian/tests/*: add initial version of a autopkgtest to run the smoketest,
+ build smoketestdoc.sxw here for now (and a full build...). Disabled for now.
+ * debian/control.transitionals.in: add -kde -> kde5 transitional package
+ * debian/libreoffice-sdbc-firebird.bug-script.in: remove, firebird not
+ experimental anymore
+ * debian/control.in:
+ - update for new icon defaults, make -common depend on -style-colibre and
+ -gnome recommend -style-elementary
+ * debian/control*in, debian/rules, debian/libreoffice-help-common.doc-base:
+ build with --with-help=html and split common files into a new
+ libreoffice-help-common
+
+ * merge from Ubuntu:
+ - debian/patches/hide-maths-desktop-file.patch: hide
+ math icon from the shell (see #883734)
+
+ -- Rene Engelhard <rene@debian.org> Fri, 27 Apr 2018 04:57:42 +0000
+
+libreoffice (1:6.0.5-1~dschinn1) dschinn-backports; urgency=medium
+
+ * Uploading to dschinn-backports, remaining changes:
+ - Updating maintainer field.
+ - Updating uploaders field.
+ - Updating bugs field.
+ - Updating vcs fields.
+ - Updating source local-options.
+ - Building without dpkg-vendor.
+ - Disabling the splash screen by default.
+ - Enabling experimental features by default.
+ - Disabling libreoffice print dialogs, using system print dialogs by
+ default.
+ - Building without dpkg-parsechangelog.
+ * Merging upstream version 1:6.0.5.
+ * Merging debian version 1:6.0.5-1.
+ * Regenerating debian files.
+
+ -- Daniel Baumann <daniel.baumann@progress-linux.org> Wed, 04 Jul 2018 16:23:55 +0200
libreoffice (1:6.0.4-1~dschinn1) dschinn-backports; urgency=medium
@@ -78,22 +296,6 @@ libreoffice (1:6.0.4-1~dschinn1) dschinn-backports; urgency=medium
-- Daniel Baumann <daniel.baumann@progress-linux.org> Fri, 11 May 2018 12:21:38 +0200
-libreoffice (1:6.0.4-1) unstable; urgency=medium
-
- * New upstream release
-
- * debian/patches/disable-tests-somehow-needing-more-fonts.diff,
- debian/patches/tdf108963-test.diff: remove. Obsolete after Liberation
- fix
-
- * debian/rules:
- - use internal libetonyek on stretch-backports
- - add Build-Conflicts: against "broken" fonts-liberation
- - use -type f for pupulating Files: in .doc-base to leave out dirs...
- * debian/lo-java-ref.in: move to Programming/Java
-
- -- Rene Engelhard <rene@debian.org> Mon, 07 May 2018 13:47:22 +0000
-
libreoffice (1:6.0.4~rc1-4) unstable; urgency=medium
* debian/patches/patches/disable-java-in-odk-build-examples-on-zero-vm.diff:
diff --git a/debian/control b/debian/control
index 0e45803..6773936 100644
--- a/debian/control
+++ b/debian/control
@@ -1,13 +1,9 @@
Source: libreoffice
Section: editors
Priority: optional
-Maintainer: Progress Linux Maintainers <maintainers@lists.progress-linux.org>
-XSBC-Uploaders: Daniel Baumann <daniel.baumann@progress-linux.org>
-XSBC-Original-Maintainer: Debian LibreOffice Maintainers <debian-openoffice@lists.debian.org>
-XSBC-Original-Uploaders: Rene Engelhard <rene@debian.org>, Chris Halls <halls@debian.org>
-Bugs: mailto:maintainers@lists.progress-linux.org
-Build-Depends: ant (>= 1.7.0) [!hppa !ia64 !mips64 !s390 !sparc],
- ant-optional (>= 1.7.0) [!hppa !ia64 !mips64 !s390 !sparc],
+Maintainer: Debian LibreOffice Maintainers <debian-openoffice@lists.debian.org>
+Uploaders: Rene Engelhard <rene@debian.org>, Chris Halls <halls@debian.org>
+Build-Depends: apparmor <!nocheck>,
autoconf,
automake,
bc,
@@ -15,22 +11,23 @@ Build-Depends: ant (>= 1.7.0) [!hppa !ia64 !mips64 !s390 !sparc],
bison,
bzip2,
chromium [amd64 arm64 armhf i386],
- coinor-libcoinmp-dev (>= 1.7.6+dfsg1-2),
- coinor-libcoinutils-dev (>= 2.9.15-3.1),
+ coinor-libcoinmp-dev (>= 1.8.3-2),
+ coinor-libcoinutils-dev (>= 2.10.14+repack1-1),
debhelper (>= 10),
- debhelper (>= 10.10.4),
- default-jdk (>= 1:1.6) [!hppa !mips64 !s390 !sparc],
+ default-jdk (>= 1:1.6) [!hppa !s390 !sparc !hurd-i386 !i386],
+ default-jdk (>= 1:1.7-48) [ia64],
default-jdk (>= 2:1.7-52.1) [kfreebsd-any],
default-jdk (>= 2:1.8-55) [sparc64],
+ default-jdk (>= 2:1.9) [i386],
default-libmysqlclient-dev,
dh-apparmor,
dh-python,
dpkg-dev (>= 1.18.2~),
- dwz,
firebird-dev (>= 3.0.0.32483.ds4-4) [!hppa !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64],
firebird3.0-server-core [!hppa !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
flex (>= 2.3.35),
fontconfig [!hppa !kfreebsd-amd64 !kfreebsd-i386 !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
+ fontforge-nox | fontforge,
fonts-crosextra-carlito [!hppa !kfreebsd-amd64 !kfreebsd-i386 !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
fonts-dejavu [!hppa !kfreebsd-amd64 !kfreebsd-i386 !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
fonts-liberation2 [!hppa !kfreebsd-amd64 !kfreebsd-i386 !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
@@ -38,19 +35,20 @@ Build-Depends: ant (>= 1.7.0) [!hppa !ia64 !mips64 !s390 !sparc],
gcc (>= 4:7) [m68k],
gdb [!hppa !kfreebsd-amd64 !kfreebsd-i386 !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
ghostscript [!hppa !kfreebsd-amd64 !kfreebsd-i386 !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
- gnupg <!nocheck>,
- gnupg-agent <!nocheck>,
gobject-introspection (>= 1.32.0),
gperf,
+ gpg <!nocheck>,
+ gpg-agent <!nocheck>,
+ gpgconf <!nocheck>,
hunspell-en-us [!hppa !kfreebsd-amd64 !kfreebsd-i386 !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
imagemagick [!hppa !kfreebsd-amd64 !kfreebsd-i386 !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
- java-common (>= 0.49),
+ java-common (>= 0.61),
javahelper (>= 0.37~),
junit4 (>= 4.8.2-2) [amd64 arm64] <!nocheck>,
libabw-dev (>= 0.1),
- libarchive-zip-perl [!hppa !ia64 !mips64 !s390 !sparc],
+ libarchive-zip-perl [!hppa !mips64 !s390 !sparc],
libavahi-client-dev,
- libbase-java [!hppa !ia64 !mips64 !s390 !sparc],
+ libbase-java [!hppa !mips64 !s390 !sparc],
libbluetooth-dev [linux-any],
libboost-date-time-dev (>= 1.58),
libboost-dev (>= 1.58),
@@ -58,14 +56,13 @@ Build-Depends: ant (>= 1.7.0) [!hppa !ia64 !mips64 !s390 !sparc],
libboost-iostreams-dev (>= 1.58),
libboost-locale-dev (>= 1.58),
libboost-system-dev (>= 1.58),
- libbz2-dev,
libc0.1 (>= 2.10.2-7) [kfreebsd-any],
libc6 (>= 2.17-6) [mips mipsel],
libcairo2-dev,
libcdr-dev (>= 0.1),
libclucene-dev (>= 2.3.3.4-4.1),
libcmis-dev (>= 0.5.0-3),
- libcommons-logging-java [!hppa !ia64 !mips64 !s390 !sparc],
+ libcommons-logging-java [!hppa !mips64 !s390 !sparc],
libcppunit-dev (>= 1.14) [!hppa !kfreebsd-amd64 !kfreebsd-i386 !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
libcups2-dev,
libcurl4-gnutls-dev,
@@ -78,39 +75,45 @@ Build-Depends: ant (>= 1.7.0) [!hppa !ia64 !mips64 !s390 !sparc],
libepoxy-dev (>= 1.2),
libepubgen-dev (>= 0.1.0),
libetonyek-dev,
- libetonyek-dev (>= 0.1.7) <!nocheck>,
+ libetonyek-dev (>= 0.1.8) <!nocheck>,
libexpat1-dev,
libexttextcat-dev (>= 3.4.1),
- libflute-java (>= 1.1.6) [!hppa !ia64 !mips64 !s390 !sparc],
+ libflute-java (>= 1.1.6) [!hppa !mips64 !s390 !sparc],
libfontconfig1-dev,
- libfonts-java (>= 1.1.6) [!hppa !ia64 !mips64 !s390 !sparc],
- libformula-java (>= 1.1.7) [!hppa !ia64 !mips64 !s390 !sparc],
+ libfonts-java (>= 1.1.6) [!hppa !mips64 !s390 !sparc],
+ libformula-java (>= 1.1.7) [!hppa !mips64 !s390 !sparc],
libfreehand-dev (>= 0.1),
libfreetype6-dev (>= 2.2.0),
libgirepository1.0-dev (>= 1.32),
libgl1-mesa-dev,
libglib2.0-dev (>= 2.38.0),
- libglm-dev (>= 0.9.6.3),
+ libglib2.0-dev (>= 2.4),
+ libglm-dev (>= 0.9.9~a2),
libgpg-error-dev,
libgpgme-dev,
libgpgmepp-dev,
libgraphite2-dev (>= 0.9.3),
libgstreamer-plugins-base1.0-dev,
libgstreamer1.0-dev,
- libgtk-3-dev (>= 3.8.0),
+ libgtk-3-dev (>= 3.18.0),
libgtk2.0-dev (>= 2.18.0),
libharfbuzz-dev (>= 0.9.42),
- libhsqldb1.8.0-java (>> 1.8.0.10) [!hppa !ia64 !mips64 !s390 !sparc],
+ libhsqldb1.8.0-java (>> 1.8.0.10) [!hppa !mips64 !s390 !sparc],
libhunspell-dev (>= 1.1.5-2),
libhyphen-dev (>= 2.4),
libice-dev,
libicu-dev (>= 52),
libjpeg-dev,
+ libkf5config-dev,
+ libkf5coreaddons-dev,
+ libkf5i18n-dev,
+ libkf5kio-dev,
+ libkf5windowsystem-dev,
liblangtag-dev (>= 0.4),
- liblayout-java (>= 0.2.10) [!hppa !ia64 !mips64 !s390 !sparc],
+ liblayout-java (>= 0.2.10) [!hppa !mips64 !s390 !sparc],
liblcms2-dev,
libldap2-dev,
- libloader-java (>= 1.1.6) [!hppa !ia64 !mips64 !s390 !sparc],
+ libloader-java (>= 1.1.6) [!hppa !mips64 !s390 !sparc],
liblpsolve55-dev (>= 5.5.0.13-5+b1),
libmdds-dev (>= 1.2.3),
libmspub-dev (>= 0.1),
@@ -121,22 +124,24 @@ Build-Depends: ant (>= 1.7.0) [!hppa !ia64 !mips64 !s390 !sparc],
libneon27-gnutls-dev,
libnspr4-dev,
libnss3-dev (>= 3.12.3),
+ libnumbertext-dev,
libodfgen-dev (>= 0.1),
liborcus-dev (>= 0.13.3),
libpagemaker-dev,
- libpentaho-reporting-flow-engine-java (>= 0.9.4) [!hppa !ia64 !mips64 !s390 !sparc],
+ libpentaho-reporting-flow-engine-java (>= 0.9.4) [!hppa !mips64 !s390 !sparc],
libpng-dev,
libpoppler-cpp-dev,
libpoppler-dev (>= 0.12.0),
libpoppler-private-dev,
libpq-dev (>= 9.0~),
+ libqt5x11extras5-dev (>= 5.6),
libqxp-dev,
librdf0-dev (>= 1.0.16-2),
- librepository-java (>= 1.1.6) [!hppa !ia64 !mips64 !s390 !sparc],
+ librepository-java (>= 1.1.6) [!hppa !mips64 !s390 !sparc],
librevenge-dev,
- libsac-java [!hppa !ia64 !mips64 !s390 !sparc],
+ libsac-java [!hppa !mips64 !s390 !sparc],
libsane-dev,
- libserializer-java (>= 1.1.6) [!hppa !ia64 !mips64 !s390 !sparc],
+ libserializer-java (>= 1.1.6) [!hppa !mips64 !s390 !sparc],
libsm-dev,
libstaroffice-dev,
libstaroffice-dev (>= 0.0.3) <!nocheck>,
@@ -146,13 +151,14 @@ Build-Depends: ant (>= 1.7.0) [!hppa !ia64 !mips64 !s390 !sparc],
libwpd-dev (>= 0.10),
libwpg-dev (>= 0.3),
libwps-dev (>= 0.4),
- libwps-dev (>= 0.4.8) <!nocheck>,
+ libwps-dev (>= 0.4.9) <!nocheck>,
libx11-dev,
libxaw7-dev,
+ libxcb1-dev,
libxext-dev,
libxinerama-dev,
libxkbfile-dev,
- libxml-java (>= 1.1.6) [!hppa !ia64 !mips64 !s390 !sparc],
+ libxml-java (>= 1.1.6) [!hppa !mips64 !s390 !sparc],
libxml2-dev (>= 2.8),
libxml2-utils,
libxmlsec1-dev (>= 1.2.24),
@@ -169,6 +175,12 @@ Build-Depends: ant (>= 1.7.0) [!hppa !ia64 !mips64 !s390 !sparc],
pstoedit [!hppa !kfreebsd-amd64 !kfreebsd-i386 !m68k !mips !mips64 !powerpc !powerpcspe !ppc64 !s390 !s390x !sparc !sparc64] <!nocheck>,
python3,
python3-dev (>= 3.3),
+ python3-distutils,
+ python3-lxml <!nocheck>,
+ qt5-qmake (>= 5.6),
+ qtbase5-dev (>= 5.6),
+ qtbase5-dev-tools (>= 5.6),
+ qtchooser,
ucpp,
unixodbc-dev (>= 2.2.11),
unzip,
@@ -176,9 +188,12 @@ Build-Depends: ant (>= 1.7.0) [!hppa !ia64 !mips64 !s390 !sparc],
xsltproc,
zip,
zlib1g-dev
-Build-Depends-Indep: doxygen (>= 1.8.4) <!nodoc>,
+Build-Depends-Indep: ant (>= 1.7.0) [!hppa !mips64 !s390 !sparc],
+ ant-optional (>= 1.7.0) [!hppa !mips64 !s390 !sparc],
+ doxygen (>= 1.8.4) <!nodoc>,
g++-mingw-w64-i686,
gettext,
+ graphviz <!nodoc>,
libbsh-java,
rdfind,
symlinks
@@ -188,29 +203,26 @@ Build-Conflicts: amd-libopencl1,
fonts-liberation (= 1:1.07.4-5) <!nocheck>,
fonts-liberation2 (= 2.00.1-4) <!nocheck>,
fonts-liberation2 (= 2.00.1-5) <!nocheck>,
- g++-4.6 (= 4.6.1-10),
- g++-4.6 (= 4.6.1-11),
- g++-4.7 (<< 4.7.1-3),
+ fonts-opensymbol <!nocheck>,
nvidia-glx-dev,
nvidia-glx-legacy-dev,
nvidia-libopencl1
Standards-Version: 4.0.1
-Vcs-Browser: https://sources.progress-linux.org/distributions/dschinn-backports/packages/libreoffice
-Vcs-Git: https://sources.progress-linux.org/distributions/dschinn-backports/packages/libreoffice
-XSBC-Original-Vcs-Browser: https://salsa.debian.org/libreoffice-team/libreoffice/libreoffice
-XSBC-Original-Vcs-Git: https://salsa.debian.org/libreoffice-team/libreoffice/libreoffice.git
+Vcs-Git: https://salsa.debian.org/libreoffice-team/libreoffice/libreoffice.git
+Vcs-Browser: https://salsa.debian.org/libreoffice-team/libreoffice/libreoffice
+Bugs:
Homepage: http://www.libreoffice.org
Package: libreoffice
Architecture: alpha amd64 arm64 armel armhf hppa i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el s390 s390x sparc sparc64
Section: metapackages
-Depends: libreoffice-base [!hppa !ia64 !mips64 !s390 !sparc],
+Depends: libreoffice-base [!hppa !mips64 !s390 !sparc],
libreoffice-calc,
libreoffice-core (= ${binary:Version}),
libreoffice-draw,
libreoffice-impress,
libreoffice-math,
- libreoffice-report-builder-bin [!hppa !ia64 !mips64 !s390 !sparc],
+ libreoffice-report-builder-bin [!hppa !mips64 !s390 !sparc],
libreoffice-writer,
${avmedia-be-depends},
${misc:Depends},
@@ -227,7 +239,7 @@ Recommends: fonts-crosextra-caladea,
libreoffice-librelogo,
libreoffice-nlpsolver,
libreoffice-ogltrans,
- libreoffice-report-builder [!hppa !ia64 !mips64 !s390 !sparc],
+ libreoffice-report-builder [!hppa !mips64 !s390 !sparc],
libreoffice-script-provider-bsh,
libreoffice-script-provider-js,
libreoffice-script-provider-python,
@@ -243,7 +255,7 @@ Suggests: cups-bsd,
hyphen-hyphenation-patterns,
imagemagick | graphicsmagick-imagemagick-compat,
libgl1,
- libreoffice-gnome,
+ libreoffice-gnome | libreoffice-kde5,
libreoffice-grammarcheck,
libreoffice-help (= ${help-l10n-virtual-version}),
libreoffice-l10n (= ${help-l10n-virtual-version}),
@@ -381,7 +393,11 @@ Description: office productivity suite -- arch-dependent files
Package: libreoffice-common
Architecture: all
-Depends: libreoffice-style-tango, ure, ${misc:Depends}
+Depends: libreoffice-style-colibre,
+ libreoffice-style-tango,
+ ure,
+ ${misc:Depends},
+ ${numbertext-data-recommends}
Suggests: libreoffice-style
Recommends: fonts-liberation2 | ttf-mscorefonts-installer,
xdg-utils,
@@ -427,9 +443,21 @@ Description: office productivity suite -- arch-independent Java support files
This package contains the architecture-independent files of
the Java support for LibreOffice (Java classes, scripts, config snippets).
+Package: libreoffice-help-common
+Architecture: all
+Depends: libreoffice-common, ${help-common-depends}, ${misc:Depends}
+Breaks: libreoffice-common (<< 1:6.1.0~alpha1-1)
+Replaces: libreoffice-common (<< 1:6.1.0~alpha1-1)
+Description: office productivity suite -- common files for LibreOffice help
+ LibreOffice is a full-featured office productivity suite that provides
+ a near drop-in replacement for Microsoft(R) Office.
+ .
+ This package contains the common files (e.g. language-independent, media) files
+ for the LibreOffice Help.
+
Package: libreoffice-writer
Architecture: alpha amd64 arm64 armel armhf hppa i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el s390 s390x sparc sparc64
-Depends: libreoffice-base-core (= ${binary:Version}) [!hppa !ia64 !mips64 !s390 !sparc],
+Depends: libreoffice-base-core (= ${binary:Version}) [!hppa !mips64 !s390 !sparc],
libreoffice-core (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends}
@@ -449,7 +477,7 @@ Description: office productivity suite -- word processor
Package: libreoffice-calc
Architecture: alpha amd64 arm64 armel armhf hppa i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el s390 s390x sparc sparc64
-Depends: libreoffice-base-core (= ${binary:Version}) [!hppa !ia64 !mips64 !s390 !sparc],
+Depends: libreoffice-base-core (= ${binary:Version}) [!hppa !mips64 !s390 !sparc],
libreoffice-core (= ${binary:Version}),
${lpsolve-dep},
${misc:Depends},
@@ -505,7 +533,7 @@ Description: office productivity suite -- equation editor
This package contains the equation editor component for LibreOffice.
Package: libreoffice-base-core
-Architecture: alpha amd64 arm64 armel armhf i386 m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el s390x sparc64 kfreebsd-amd64 kfreebsd-i386
+Architecture: alpha amd64 arm64 armel armhf i386 ia64 m68k mips mipsel mips64el powerpc ppc64 ppc64el powerpcspe s390x sparc64 kfreebsd-amd64 kfreebsd-i386
Depends: libreoffice-core (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends}
@@ -521,7 +549,7 @@ Description: office productivity suite -- shared library
install libreoffice-base.
Package: libreoffice-base
-Architecture: alpha amd64 arm64 armel armhf i386 m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el s390x sparc64 kfreebsd-amd64 kfreebsd-i386
+Architecture: alpha amd64 arm64 armel armhf i386 ia64 m68k mips mipsel mips64el powerpc ppc64 ppc64el powerpcspe s390x sparc64 kfreebsd-amd64 kfreebsd-i386
Section: database
Depends: libreoffice-base-core (= ${binary:Version}),
libreoffice-base-drivers (= ${binary:Version}),
@@ -540,7 +568,7 @@ Description: office productivity suite -- database
Package: libreoffice-style-breeze
Architecture: all
Enhances: libreoffice-core
-Depends: libreoffice-style-galaxy, ${misc:Depends}
+Depends: libreoffice-style-tango, ${misc:Depends}
Suggests: breeze-icon-theme
Provides: libreoffice-style
Description: office productivity suite -- Breeze symbol style
@@ -549,38 +577,38 @@ Description: office productivity suite -- Breeze symbol style
.
This package contains the "breeze" symbol style, default style for KDE 5.
-Package: libreoffice-style-tango
+Package: libreoffice-style-colibre
Architecture: all
Enhances: libreoffice-core
-Depends: libreoffice-style-galaxy, ${misc:Depends}
-Suggests: tango-icon-theme
+Depends: ${misc:Depends}
Provides: libreoffice-style
-Replaces: libreoffice-common (<= 1:4.3.0~beta2-2)
-Description: office productivity suite -- Tango symbol style
+Description: office productivity suite -- colibre symbol style
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
.
- This package contains the "tango" symbol style, default style
- for GTK+/Gnome.
+ This package contains the "colibre" symbol style - a icon theme
+ which follow Microsoft(R) Offices color scheme.
-Package: libreoffice-style-hicontrast
+Package: libreoffice-style-tango
Architecture: all
Enhances: libreoffice-core
-Depends: libreoffice-style-galaxy, ${misc:Depends}
-Suggests: gtk2-engines
+Depends: ${misc:Depends}
+Suggests: tango-icon-theme
Provides: libreoffice-style
-Description: office productivity suite -- Hicontrast symbol style
+Replaces: libreoffice-common (<= 1:4.3.0~beta2-2)
+Description: office productivity suite -- Tango symbol style
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
.
- This package contains the "hicontrast" symbol style, needs to be manually
- enabled in the LibreOffice option menu.
+ This package contains the "tango" symbol style.
Package: libreoffice-style-sifr
Architecture: all
Enhances: libreoffice-core
Depends: libreoffice-style-breeze, ${misc:Depends}
-Provides: libreoffice-style
+Provides: libreoffice-style, libreoffice-style-hicontrast
+Replaces: libreoffice-style-hicontrast
+Conflicts: libreoffice-style-hicontrast
Description: office productivity suite -- Sifr symbol style
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -589,37 +617,24 @@ Description: office productivity suite -- Sifr symbol style
symbolic theme), needs to be manually enabled in the LibreOffice option
menu.
-Package: libreoffice-style-galaxy
-Architecture: all
-Enhances: libreoffice-core
-Depends: ${misc:Depends}
-Provides: libreoffice-style
-Breaks: libreoffice-core (<< 1:5.4.2~)
-Description: office productivity suite -- Galaxy (Default) symbol style
- LibreOffice is a full-featured office productivity suite that provides
- a near drop-in replacement for Microsoft(R) Office.
- .
- This package contains the "Galaxy" symbol style from Sun, normally used on
- MS Windows (tm) and when not using GNOME or KDE, needs to be manually
- enabled in the LibreOffice option menu.
-
Package: libreoffice-style-elementary
Architecture: all
-Depends: libreoffice-style-galaxy, ${misc:Depends}
+Depends: libreoffice-style-tango, ${misc:Depends}
Enhances: libreoffice-core
Provides: libreoffice-style
Description: office productivity suite -- Elementary symbol style
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
.
- This package contains the "elementary" symbol style.
+ This package contains the "elementary" symbol style, default style
+ for GTK+/Gnome.
Package: libreoffice-gnome
Architecture: alpha amd64 arm64 armel armhf hppa i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el s390 s390x sparc sparc64
Depends: libreoffice-core (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends}
-Recommends: ${gnome-gtk-recommends}
+Recommends: libreoffice-style-elementary, ${gnome-gtk-recommends}
Suggests: libreoffice-evolution, seahorse
Section: gnome
Enhances: libreoffice
@@ -656,7 +671,7 @@ Description: Python-UNO bridge
Homepage: http://udk.openoffice.org/python/python-bridge.html
Package: libreoffice-officebean
-Architecture: alpha amd64 arm64 armel armhf i386 m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el s390x sparc64 kfreebsd-amd64 kfreebsd-i386
+Architecture: alpha amd64 arm64 armel armhf i386 ia64 m68k mips mipsel mips64el powerpc ppc64 ppc64el powerpcspe s390x sparc64 kfreebsd-amd64 kfreebsd-i386
Section: java
Depends: libreoffice-core (= ${binary:Version}),
${java-common-depends},
@@ -762,7 +777,7 @@ Depends: libreoffice-core,
${java:Depends},
${misc:Depends},
${shlibs:Depends}
-Architecture: alpha amd64 arm64 armel armhf i386 m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el s390x sparc64 kfreebsd-amd64 kfreebsd-i386
+Architecture: alpha amd64 arm64 armel armhf i386 ia64 m68k mips mipsel mips64el powerpc ppc64 ppc64el powerpcspe s390x sparc64 kfreebsd-amd64 kfreebsd-i386
Section: database
Enhances: libreoffice-base-drivers
Description: HSQLDB SDBC driver for LibreOffice
@@ -774,13 +789,13 @@ Description: HSQLDB SDBC driver for LibreOffice
Package: libreoffice-base-drivers
Depends: libreoffice-core, ${misc:Depends}, ${shlibs:Depends}
-Architecture: alpha amd64 arm64 armel armhf i386 m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el s390x sparc64 kfreebsd-amd64 kfreebsd-i386
+Architecture: alpha amd64 arm64 armel armhf i386 ia64 m68k mips mipsel mips64el powerpc ppc64 ppc64el powerpcspe s390x sparc64 kfreebsd-amd64 kfreebsd-i386
Section: database
Suggests: libjtds-java,
libreoffice-mysql-connector | libmyodbc | libmysql-java,
libreoffice-sdbc-postgresql | odbc-postgresql | libpg-java,
libsqliteodbc | tdsodbc | mdbtools
-Recommends: libreoffice-sdbc-hsqldb [alpha amd64 arm64 armel armhf i386 m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el s390x sparc64 kfreebsd-amd64 kfreebsd-i386],
+Recommends: libreoffice-sdbc-hsqldb [alpha amd64 arm64 armel armhf i386 ia64 m68k mips mipsel mips64el powerpc ppc64 ppc64el powerpcspe s390x sparc64 kfreebsd-amd64 kfreebsd-i386],
${base-firebird-recommends}
Replaces: libreoffice-base (<< 1:4.3.0-3)
Breaks: libreoffice-base (<< 1:4.3.0-3)
@@ -3134,7 +3149,7 @@ Architecture: all
Depends: libreoffice-common, locales | locales-all, ${misc:Depends}
Recommends: libreoffice-core (>> ${base-version})
Provides: libreoffice-l10n (= ${help-l10n-virtual-version})
-Suggests: hunspell-dictionary-tr | myspell-dictionary-tr | libreoffice-spellcheck-tr,
+Suggests: hunspell-dictionary-tr | myspell-dictionary-tr,
hyphen-tr,
libreoffice-grammarcheck-tr,
libreoffice-help-tr,
@@ -3453,11 +3468,12 @@ Package: libreoffice-help-en-us
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-en-us,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- English_american help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3469,11 +3485,12 @@ Package: libreoffice-help-ca
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-ca,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Catalan help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3485,11 +3502,12 @@ Package: libreoffice-help-cs
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-cs,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Czech help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3501,11 +3519,12 @@ Package: libreoffice-help-da
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-da,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Danish help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3517,11 +3536,12 @@ Package: libreoffice-help-de
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-de,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- German help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3533,11 +3553,12 @@ Package: libreoffice-help-dz
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-dz,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Dzongkha help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3549,11 +3570,12 @@ Package: libreoffice-help-el
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-el,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Greek help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3565,11 +3587,12 @@ Package: libreoffice-help-en-gb
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-en-gb,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- English_british help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3581,11 +3604,12 @@ Package: libreoffice-help-es
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-es,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Spanish help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3597,11 +3621,12 @@ Package: libreoffice-help-et
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-et,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Estonian help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3613,11 +3638,12 @@ Package: libreoffice-help-eu
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-eu,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Basque help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3629,11 +3655,12 @@ Package: libreoffice-help-fi
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-fi,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Finnish help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3645,11 +3672,12 @@ Package: libreoffice-help-fr
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-fr,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- French help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3661,11 +3689,12 @@ Package: libreoffice-help-gl
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-gl,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Galician help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3677,11 +3706,12 @@ Package: libreoffice-help-hi
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-hi,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Hindi help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3693,11 +3723,12 @@ Package: libreoffice-help-hu
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-hu,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Hungarian help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3709,11 +3740,12 @@ Package: libreoffice-help-it
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-it,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Italian help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3725,11 +3757,12 @@ Package: libreoffice-help-ja
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-ja,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Japanese help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3741,11 +3774,12 @@ Package: libreoffice-help-km
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-km,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Khmer help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3757,11 +3791,12 @@ Package: libreoffice-help-ko
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-ko,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Korean help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3773,11 +3808,12 @@ Package: libreoffice-help-nl
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-nl,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Dutch help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3789,11 +3825,12 @@ Package: libreoffice-help-om
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-om,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Oromo help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3805,11 +3842,12 @@ Package: libreoffice-help-pl
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-pl,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Polish help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3821,11 +3859,12 @@ Package: libreoffice-help-pt
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-pt,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Portuguese help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3837,11 +3876,12 @@ Package: libreoffice-help-pt-br
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-pt-br,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Portuguese_brazilian help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3853,11 +3893,12 @@ Package: libreoffice-help-ru
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-ru,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Russian help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3869,12 +3910,13 @@ Package: libreoffice-help-sk
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-help-cs,
libreoffice-l10n-sk,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Slovak help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3886,11 +3928,12 @@ Package: libreoffice-help-sl
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-sl,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Slovenian help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3902,11 +3945,12 @@ Package: libreoffice-help-sv
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-sv,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Swedish help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3918,11 +3962,12 @@ Package: libreoffice-help-tr
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-tr,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Turkish help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3934,11 +3979,12 @@ Package: libreoffice-help-vi
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-vi,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Vietnamese help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3950,11 +3996,12 @@ Package: libreoffice-help-zh-cn
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-zh-cn,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Chinese_simplified help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -3966,11 +4013,12 @@ Package: libreoffice-help-zh-tw
Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
-Depends: libreoffice-common (>= 1:5.4.0~beta1~),
+Depends: libreoffice-common (>= 1:6.1.0~),
libreoffice-l10n-zh-tw,
- libreoffice-writer,
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- Chinese_traditional help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -4076,7 +4124,7 @@ Description: LibreOffice component for building database reports
Package: libreoffice-report-builder-bin
Section: misc
-Architecture: alpha amd64 arm64 armel armhf i386 m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el s390x sparc64 kfreebsd-amd64 kfreebsd-i386
+Architecture: alpha amd64 arm64 armel armhf i386 ia64 m68k mips mipsel mips64el powerpc ppc64 ppc64el powerpcspe s390x sparc64 kfreebsd-amd64 kfreebsd-i386
Depends: libreoffice-base, libreoffice-core, ${misc:Depends}, ${shlibs:Depends}
Description: LibreOffice component for building database reports -- libraries
LibreOffice is a full-featured office productivity suite that provides
@@ -4161,6 +4209,7 @@ Recommends: libreoffice-dev (= ${binary:Version}), www-browser
Conflicts: libreoffice (<< 1:5.2.5-2~),
libreoffice-dev (<= 1:5.0.3~rc1-2),
openoffice.org-dev-doc
+Build-Profiles: <!nodoc>
Description: office productivity suite -- SDK documentation
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -4204,17 +4253,6 @@ Description: office productivity suite -- GTK+ 2 integration
with Gtk+ 2 and a Gtk/GNOMEish File Picker and print dialog when running
under GNOME.
-Package: libreoffice-systray
-Architecture: alpha amd64 arm64 armel armhf hppa i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el s390 s390x sparc sparc64
-Section: misc
-Replaces: libreoffice-common (<< 1:5.1.2-3), libreoffice-gtk (<< 1:5.1.2-3)
-Depends: ${misc:Depends}, ${shlibs:Depends}
-Description: LibreOffice "Quickstarter" for the desktop notification area
- LibreOffice is a full-featured office productivity suite that provides
- a near drop-in replacement for Microsoft(R) Office.
- .
- This package provides a "QuickStarter" for the notification area of desktops.
-
Package: libreoffice-gtk3
Architecture: alpha amd64 arm64 armel armhf hppa i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el s390 s390x sparc sparc64
Depends: libreoffice-core (= ${binary:Version}),
@@ -4265,9 +4303,24 @@ Description: common data for LOKDocView
This package contains architecture-independent data (e.g. the selection
handlers).
+Package: libreoffice-kde5
+Architecture: alpha amd64 arm64 armel armhf hppa i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el s390 s390x sparc sparc64
+Depends: libreoffice-core (= ${binary:Version}),
+ ${misc:Depends},
+ ${shlibs:Depends}
+Recommends: ${kde-iconset-dep}
+Section: kde
+Enhances: libreoffice
+Description: office productivity suite -- KDE 5 integration
+ LibreOffice is a full-featured office productivity suite that provides
+ a near drop-in replacement for Microsoft(R) Office.
+ .
+ This package contains the KDE plugin for LibreOffice and a KDEish File Picker
+ when running under KDE.
+
Package: libreoffice-sdbc-postgresql
Section: misc
-Architecture: alpha amd64 arm64 armel armhf i386 m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el s390x sparc64 kfreebsd-amd64 kfreebsd-i386
+Architecture: alpha amd64 arm64 armel armhf i386 ia64 m68k mips mipsel mips64el powerpc ppc64 ppc64el powerpcspe s390x sparc64 kfreebsd-amd64 kfreebsd-i386
Depends: libreoffice-core, ${misc:Depends}, ${shlibs:Depends}
Suggests: postgresql (>= 8.4)
Enhances: libreoffice-base-drivers
@@ -4281,7 +4334,7 @@ Homepage: http://wiki.documentfoundation.org/PostgreSQL-SDBC
Package: libreoffice-mysql-connector
Section: misc
-Architecture: alpha amd64 arm64 armel armhf i386 m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el s390x sparc64 kfreebsd-amd64 kfreebsd-i386
+Architecture: alpha amd64 arm64 armel armhf i386 ia64 m68k mips mipsel mips64el powerpc ppc64 ppc64el powerpcspe s390x sparc64 kfreebsd-amd64 kfreebsd-i386
Depends: libreoffice-core, ${misc:Depends}, ${shlibs:Depends}
Suggests: default-mysql-server | virtual-mysql-server
Homepage: http://extensions.services.openoffice.org/en/project/mysql_connector
@@ -4293,7 +4346,7 @@ Description: MariaDB/MySQL Connector extension for LibreOffice
database from LibreOffice without any wrapper layer such as ODBC or JDBC.
Package: libreoffice-evolution
-Architecture: alpha amd64 arm64 armel armhf i386 m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el s390x sparc64 kfreebsd-amd64 kfreebsd-i386
+Architecture: alpha amd64 arm64 armel armhf i386 ia64 m68k mips mipsel mips64el powerpc ppc64 ppc64el powerpcspe s390x sparc64 kfreebsd-amd64 kfreebsd-i386
Section: gnome
Depends: libreoffice-base,
libreoffice-common,
@@ -4313,8 +4366,17 @@ Package: libreoffice-subsequentcheckbase
Section: libs
Architecture: all
Depends: ${java:Depends}, ${misc:Depends}
+Build-Profiles: <!nocheck>
Description: LibreOffice java test libraries
- LibreOffice subsequentchecks integration test suite
+ Java libraries LibreOffice subsequentchecks integration test suite
+
+Package: libreoffice-smoketest-data
+Section: misc
+Depends: ${misc:Depends}
+Architecture: all
+Build-Profiles: <!nocheck>
+Description: data files for LibreOffices "smoketest"
+ Data files for the LibreOffice "smoketest".
Package: libreoffice-librelogo
Section: misc
@@ -4365,3 +4427,14 @@ Description: transitional package for PDF Import component for LibreOffice
Documents. This now has been merged back into the "main" packages and this
package thus can be safely removed once installed.
+Package: libreoffice-kde
+Section: oldlibs
+Architecture: all
+Depends: libreoffice-kde5, ${misc:Depends}
+Description: transitional package for LibreOffice KDE integration
+ This package used to contain the LibreOffice KDE 4 backend. The package has
+ been renamed to libreoffice-kdeX and this package now depends on the new
+ libreoffice-kde5 packages.
+ .
+ You can safely remove this package.
+
diff --git a/debian/control.help.in b/debian/control.help.in
index 56812ee..faf2192 100644
--- a/debian/control.help.in
+++ b/debian/control.help.in
@@ -3,10 +3,11 @@ Architecture: all
Section: doc
Recommends: libreoffice-core (>> ${base-version})
Depends: libreoffice-l10n-@LCODE@,
- libreoffice-common (>= 1:5.4.0~beta1~),
- libreoffice-writer,
+ libreoffice-common (>= 1:6.1.0~),
+ ${help-depends},
${misc:Depends}
Provides: libreoffice-help (= ${help-l10n-virtual-version})
+Replaces: libreoffice-help-common (<< 1:6.1.0~beta1)
Description: office productivity suite -- @LNAME@ help
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
diff --git a/debian/control.in b/debian/control.in
index ab2e36f..1ab372f 100644
--- a/debian/control.in
+++ b/debian/control.in
@@ -8,10 +8,7 @@ XSBC-Original-Uploaders: Rene Engelhard <rene@debian.org>, Chris Halls <halls@de
Bugs: mailto:maintainers@lists.progress-linux.org
Build-Depends: %BUILD_DEPS%,
Build-Depends-Indep: %BUILD_DEPS_INDEP%
-Build-Conflicts: g++-4.6 (= 4.6.1-10),
- g++-4.6 (= 4.6.1-11),
- g++-4.7 (<< 4.7.1-3),
- nvidia-glx-dev,
+Build-Conflicts: nvidia-glx-dev,
nvidia-glx-legacy-dev,
amd-libopencl1,
nvidia-libopencl1
@@ -200,7 +197,7 @@ Description: office productivity suite -- arch-dependent files
Package: libreoffice-common
Architecture: all
-Depends: libreoffice-style-tango, ure, ${misc:Depends}
+Depends: libreoffice-style-colibre, libreoffice-style-tango, ure, ${numbertext-data-recommends}, ${misc:Depends}
Suggests: libreoffice-style,
Recommends: ${pyuno-depends}, ${textcat-data-recommends}, xdg-utils, fonts-liberation2 | ttf-mscorefonts-installer
Conflicts: openoffice-unbundled,
@@ -243,6 +240,18 @@ Description: office productivity suite -- arch-independent Java support files
This package contains the architecture-independent files of
the Java support for LibreOffice (Java classes, scripts, config snippets).
+Package: libreoffice-help-common
+Architecture: all
+Depends: libreoffice-common, ${help-common-depends}, ${misc:Depends}
+Breaks: libreoffice-common (<< 1:6.1.0~alpha1-1)
+Replaces: libreoffice-common (<< 1:6.1.0~alpha1-1)
+Description: office productivity suite -- common files for LibreOffice help
+ LibreOffice is a full-featured office productivity suite that provides
+ a near drop-in replacement for Microsoft(R) Office.
+ .
+ This package contains the common files (e.g. language-independent, media) files
+ for the LibreOffice Help.
+
Package: libreoffice-writer
Architecture: %OOO_ARCHS%
Depends: libreoffice-base-core (= ${binary:Version})%OOO_NO_BASE_ARCHS%,
@@ -356,7 +365,7 @@ Description: office productivity suite -- database
Package: libreoffice-style-breeze
Architecture: all
Enhances: libreoffice-core
-Depends: libreoffice-style-galaxy, ${misc:Depends}
+Depends: libreoffice-style-tango, ${misc:Depends}
Suggests: breeze-icon-theme
Provides: libreoffice-style
Description: office productivity suite -- Breeze symbol style
@@ -365,38 +374,38 @@ Description: office productivity suite -- Breeze symbol style
.
This package contains the "breeze" symbol style, default style for KDE 5.
-Package: libreoffice-style-tango
+Package: libreoffice-style-colibre
Architecture: all
Enhances: libreoffice-core
-Depends: libreoffice-style-galaxy, ${misc:Depends}
-Suggests: tango-icon-theme
+Depends: ${misc:Depends}
Provides: libreoffice-style
-Replaces: libreoffice-common (<= 1:4.3.0~beta2-2)
-Description: office productivity suite -- Tango symbol style
+Description: office productivity suite -- colibre symbol style
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
.
- This package contains the "tango" symbol style, default style
- for GTK+/Gnome.
+ This package contains the "colibre" symbol style - a icon theme
+ which follow Microsoft(R) Offices color scheme.
-Package: libreoffice-style-hicontrast
+Package: libreoffice-style-tango
Architecture: all
Enhances: libreoffice-core
-Depends: libreoffice-style-galaxy, ${misc:Depends}
-Suggests: gtk2-engines
+Depends: ${misc:Depends}
+Suggests: tango-icon-theme
Provides: libreoffice-style
-Description: office productivity suite -- Hicontrast symbol style
+Replaces: libreoffice-common (<= 1:4.3.0~beta2-2)
+Description: office productivity suite -- Tango symbol style
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
.
- This package contains the "hicontrast" symbol style, needs to be manually
- enabled in the LibreOffice option menu.
+ This package contains the "tango" symbol style.
Package: libreoffice-style-sifr
Architecture: all
Enhances: libreoffice-core
Depends: libreoffice-style-breeze, ${misc:Depends}
-Provides: libreoffice-style
+Provides: libreoffice-style, libreoffice-style-hicontrast
+Replaces: libreoffice-style-hicontrast
+Conflicts: libreoffice-style-hicontrast
Description: office productivity suite -- Sifr symbol style
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
@@ -405,37 +414,24 @@ Description: office productivity suite -- Sifr symbol style
symbolic theme), needs to be manually enabled in the LibreOffice option
menu.
-Package: libreoffice-style-galaxy
-Architecture: all
-Enhances: libreoffice-core
-Depends: ${misc:Depends}
-Provides: libreoffice-style
-Breaks: libreoffice-core (<< 1:5.4.2~)
-Description: office productivity suite -- Galaxy (Default) symbol style
- LibreOffice is a full-featured office productivity suite that provides
- a near drop-in replacement for Microsoft(R) Office.
- .
- This package contains the "Galaxy" symbol style from Sun, normally used on
- MS Windows (tm) and when not using GNOME or KDE, needs to be manually
- enabled in the LibreOffice option menu.
-
Package: libreoffice-style-elementary
Architecture: all
-Depends: libreoffice-style-galaxy, ${misc:Depends}
+Depends: libreoffice-style-tango, ${misc:Depends}
Enhances: libreoffice-core
Provides: libreoffice-style
Description: office productivity suite -- Elementary symbol style
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
.
- This package contains the "elementary" symbol style.
+ This package contains the "elementary" symbol style, default style
+ for GTK+/Gnome.
Package: libreoffice-gnome
Architecture: %OOO_ARCHS%
Depends: libreoffice-core (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends}
-Recommends: ${gnome-gtk-recommends},
+Recommends: ${gnome-gtk-recommends}, libreoffice-style-elementary
Suggests: libreoffice-evolution, seahorse
Section: gnome
Enhances: libreoffice
diff --git a/debian/control.kde5.in b/debian/control.kde5.in
index 2d8de16..a0d9b62 100644
--- a/debian/control.kde5.in
+++ b/debian/control.kde5.in
@@ -1,7 +1,6 @@
Package: libreoffice-kde5
Architecture: %OOO_ARCHS%
Depends: libreoffice-core (= ${binary:Version}),
- libreoffice-qt5 (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends}
Recommends: ${kde-iconset-dep}
@@ -11,6 +10,6 @@ Description: office productivity suite -- KDE 5 integration
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
.
- This package contains the KDE plugin for drawing LibreOffices widgets with
- KDE/Qt and a KDEish File Picker when running under KDE.
+ This package contains the KDE plugin for LibreOffice and a KDEish File Picker
+ when running under KDE.
diff --git a/debian/control.qt5.in b/debian/control.qt5.in
index 55ac6a0..3337094 100644
--- a/debian/control.qt5.in
+++ b/debian/control.qt5.in
@@ -1,5 +1,5 @@
Package: libreoffice-qt5
-Architecture: %OOO_ARCHS%
+Architecture: %OOO_64BIT_ARCHS%
Depends: libreoffice-core (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends}
diff --git a/debian/control.sdk.in b/debian/control.sdk.in
index 563563b..b149028 100644
--- a/debian/control.sdk.in
+++ b/debian/control.sdk.in
@@ -42,6 +42,7 @@ Depends: ${misc:Depends}
Recommends: libreoffice-dev (= ${binary:Version}),
www-browser
Conflicts: openoffice.org-dev-doc, libreoffice-dev (<= 1:5.0.3~rc1-2), libreoffice (<< 1:5.2.5-2~)
+Build-Profiles: <!nodoc>
Description: office productivity suite -- SDK documentation
LibreOffice is a full-featured office productivity suite that provides
a near drop-in replacement for Microsoft(R) Office.
diff --git a/debian/control.subsequentcheckbase.in b/debian/control.subsequentcheckbase.in
deleted file mode 100644
index cb32405..0000000
--- a/debian/control.subsequentcheckbase.in
+++ /dev/null
@@ -1,7 +0,0 @@
-Package: libreoffice-subsequentcheckbase
-Section: libs
-Architecture: all
-Depends: ${java:Depends}, ${misc:Depends}
-Description: LibreOffice java test libraries
- LibreOffice subsequentchecks integration test suite
-
diff --git a/debian/control.systray.in b/debian/control.systray.in
deleted file mode 100644
index 1063960..0000000
--- a/debian/control.systray.in
+++ /dev/null
@@ -1,11 +0,0 @@
-Package: libreoffice-systray
-Architecture: %OOO_ARCHS%
-Section: misc
-Replaces: libreoffice-gtk (<< 1:5.1.2-3), libreoffice-common (<< 1:5.1.2-3)
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: LibreOffice "Quickstarter" for the desktop notification area
- LibreOffice is a full-featured office productivity suite that provides
- a near drop-in replacement for Microsoft(R) Office.
- .
- This package provides a "QuickStarter" for the notification area of desktops.
-
diff --git a/debian/control.test-packages.in b/debian/control.test-packages.in
new file mode 100644
index 0000000..9023511
--- /dev/null
+++ b/debian/control.test-packages.in
@@ -0,0 +1,16 @@
+Package: libreoffice-subsequentcheckbase
+Section: libs
+Architecture: all
+Depends: ${java:Depends}, ${misc:Depends}
+Build-Profiles: <!nocheck>
+Description: LibreOffice java test libraries
+ Java libraries LibreOffice subsequentchecks integration test suite
+
+Package: libreoffice-smoketest-data
+Section: misc
+Depends: ${misc:Depends}
+Architecture: all
+Build-Profiles: <!nocheck>
+Description: data files for LibreOffices "smoketest"
+ Data files for the LibreOffice "smoketest".
+
diff --git a/debian/control.transitionals.in b/debian/control.transitionals.in
index f2dbbb3..32614c6 100644
--- a/debian/control.transitionals.in
+++ b/debian/control.transitionals.in
@@ -10,3 +10,14 @@ Description: transitional package for PDF Import component for LibreOffice
Documents. This now has been merged back into the "main" packages and this
package thus can be safely removed once installed.
+Package: libreoffice-kde
+Section: oldlibs
+Architecture: all
+Depends: libreoffice-kde5, ${misc:Depends}
+Description: transitional package for LibreOffice KDE integration
+ This package used to contain the LibreOffice KDE 4 backend. The package has
+ been renamed to libreoffice-kdeX and this package now depends on the new
+ libreoffice-kde5 packages.
+ .
+ You can safely remove this package.
+
diff --git a/debian/copyright b/debian/copyright
index 2576a6e..b62f95e 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -27,6 +27,33 @@ License: MPL-2.0
On Debian systems the full text of the Apache-2.0 license can be found in
/usr/share/common-licenses/Apache-2.0.
+Files: extras/source/truetype/symbol/OpenSymbol.sfd
+Copyright: (c) 2009 Sun Microsystems Inc.
+ (c) 2010 Google Corporation
+ (c) 2011 Julien Nabet
+ (c) 2011 Olivier Hallot
+ (c) 2013 Mathias Hasselmann
+ (c) 2015 Khaled Hosny
+ (c) 2016 Mike Kaganski
+License: MPL-2.0
+ On Debian systems the full text of the MPL-2.0 can be found in
+ /usr/share/common-licenses/MPL-2.0.
+ .
+ Some files include Apache-2.0 licensed material:
+ .
+ # This file incorporates work covered by the following license notice:
+ #
+ # Licensed to the Apache Software Foundation (ASF) under one or more
+ # contributor license agreements. See the NOTICE file distributed
+ # with this work for additional information regarding copyright
+ # ownership. The ASF licenses this file to you 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 .
+ .
+ On Debian systems the full text of the Apache-2.0 license can be found in
+ /usr/share/common-licenses/Apache-2.0.
+
Files: swext/mediawiki/src/filter/odt2mediawiki.xsl
Copyright: Copyright (C) 2007-2013 Bernhard Haumacher (haui@haumacher.de)
License: Apache-2.0
@@ -36,10 +63,54 @@ Copyright: Copyright (C) 2016 Canonical Ltd.
Copyright (C) 2017 Software in the Public Interest, Inc.
License: MPL-2.0
+Files: icon-themes/breeze*/*
+Copyright: Copyright 2014 Uri Herrera <kaisergreymon99@gmail.com>
+ Copyright 2015 Andreas Kainz <kainz.a@gmail.com> and other contributors
+License: GPL-2+
+
+Files: icon-themes/sifr*/*
+Copyright: Jakub Steiner <jimmac@novell.com>
+ Lapo Calamandrei <calamandrei@gmail.com>
+ Hylke Bons <hylke.bons@intel.com>
+ Barbara Muraus <barbara.muraus@gmail.com>
+ Issa Alkurtass <ialkurtass@kacst.edu.sa>
+ Norah Abanumay <nabanimy@kacst.edu.sa>
+ Copyright 2017-2018 Matthias Freund <matti_lx@mailbox.org>
+License: CC-BY-SA-3.0
+
+Files: icon-themes/tango*/*
+Copyright: Alexander Wilms <f.alexander.wilms@gmail.com> and Miroslav Mazel <mazelm@gmail.com>
+License: CC-BY-SA-3.0
+
+Files: icon-themes/tango*/cmd/lc_crop.png
+Copyright: Copyright 2014 by Daniel Foré <daniel@elementaryos.org>
+License: GPL-2+
+
Files: icon_themes/elementary*/*
Copyright: Copyright 2015 by Simon Steinbeiss <simon@xfce.org>, Pasi Lallinaho <pasi@shimmerproject.org>
License: GPL-3+
+Files: icon-themes/colibre*/*
+Copyright: Copyright 2018 Andreas Kainz <kainz.a@gmail.com>
+License: CC0-1.0
+
+https://github.com/rizmut/libreoffice-style-karasa-jaga/blob/master/COPYING
+Files: icon-themes/karasa_jaga/*
+Copyright: Copyright (c) 2014 Rizal Muttaqin <sundaralinux@gmail.com>
+License: LGPL-3+
+
+Files: helpcontent2/help3xsl/fuse.js
+Copyright: Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me)
+License: Apache-2.0
+
+Files: helpcontent2/help3xsl/paginathing.js
+Copyright: (C) 2018 Alfred Crosby <https://github.com/alfredcrosby>
+License: Expat
+
+Files: helpcontent2/help3xsl/normalize.css
+Copyright: Copyright © Nicolas Gallagher and Jonathan Neal
+License: Expat
+
Files: debian/*
Copyright: Copyright (C) 2002-2009 Software in the Public Interest, Inc.
License: GPL-2
@@ -124,11 +195,7 @@ License: other
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-Files: debian/missing-sources/jquery-3.1.1.js
-Copyright: Copyright jQuery Foundation and other contributors
-License: GPL-2 or MIT
-
-License: MIT
+License: Expat
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
@@ -176,3 +243,12 @@ License: LGPL-2
On Debian systems the full text of the LGPL-2 can be found in
/usr/share/common-licenses/LGPL-2
+License: LGPL-3+
+ On Debian systems the full text of the LGPL-3 can be found in
+ /usr/share/common-licenses/LGPL-3
+
+License: CC0-1.0
+ On Debian systems the full text of the CC0-1.0 license can be found in
+ /usr/share/common-licenses/CC0-1.0
+
+
diff --git a/debian/libreoffice-help-common.links b/debian/libreoffice-help-common.links
new file mode 100644
index 0000000..48ab2ac
--- /dev/null
+++ b/debian/libreoffice-help-common.links
@@ -0,0 +1 @@
+/usr/share/javascript/normalize.css/normalize.css usr/share/libreoffice/help/normalize.css
diff --git a/debian/libreoffice-help.doc-base.in b/debian/libreoffice-help.doc-base.in
new file mode 100644
index 0000000..870af5c
--- /dev/null
+++ b/debian/libreoffice-help.doc-base.in
@@ -0,0 +1,7 @@
+Document: libreoffice-help-@LCODE@
+Title: LibreOffice Help (@HELPISO@)
+Author: The Document Foundation
+Section: Office
+
+Format: HTML
+Index: /usr/share/libreoffice/help/@HELPISO@/text/shared/main0108.html
diff --git a/debian/libreoffice-help.lintian-overrides.in b/debian/libreoffice-help.lintian-overrides.in
new file mode 100644
index 0000000..17fde6d
--- /dev/null
+++ b/debian/libreoffice-help.lintian-overrides.in
@@ -0,0 +1,15 @@
+# these are in -help-common. See lintian bug http://bugs.debian.org/897244
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/media/*
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/help.html
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/idxcaption.xsl
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/fuse.js
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/help.js
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/hid2file.js
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/paginathing.js
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/idxcontent.xsl
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/index.html
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/normalize.css
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/main_transform.xsl
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/help2.js
+doc-base-file-references-missing-file libreoffice-help-@LCODE@:8 /usr/share/libreoffice/help/default.css
+
diff --git a/debian/libreoffice-kde.NEWS b/debian/libreoffice-kde.NEWS
deleted file mode 100644
index d6b1ec2..0000000
--- a/debian/libreoffice-kde.NEWS
+++ /dev/null
@@ -1,13 +0,0 @@
-libreoffice (1:4.2.4~rc2-1) experimental; urgency=low
-
- * This version has some more KDE4 patches backported from libreoffice-4-2
- branch. (so they would have been in 4.2.5 proper anyways).
-
- This also means that the KDE integration code now also contains a runtime
- check for a Qt function - without that one the KDE File Picker is completey
- flaky and will crash often (see e.g. #743221 and #742675).
-
- This effectively means the KDE File Picker is still built and included in
- this package but de-facto disabled until Qt is fixed.
-
- -- Rene Engelhard <rene@debian.org> Thu, 01 May 2014 12:42:05 +0200
diff --git a/debian/libreoffice-sdbc-firebird.bug-script.in b/debian/libreoffice-sdbc-firebird.bug-script.in
deleted file mode 100644
index c7d7943..0000000
--- a/debian/libreoffice-sdbc-firebird.bug-script.in
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-# experimental stuff enabled?
-echo "" >&3
-echo "Experimental features enabled:" >&3
-#_lo_profile_ver=`echo @OOVER@ | cut -d. -f1`
-_lo_profile_ver=4
-if [ -d "$HOME/.config/libreoffice/$_lo_profile_ver" ]; then
- grep ExperimentalMode $HOME/.config/libreoffice/$_lo_profile_ver/user/registrymodifications.xcu >&3
-fi
diff --git a/debian/missing-sources/jquery-3.1.1.js b/debian/missing-sources/jquery-3.1.1.js
deleted file mode 100644
index 25a72c9..0000000
--- a/debian/missing-sources/jquery-3.1.1.js
+++ /dev/null
@@ -1,10219 +0,0 @@
-/*!
- * jQuery JavaScript Library v3.1.1
- * https://jquery.com/
- *
- * Includes Sizzle.js
- * https://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * https://jquery.org/license
- *
- * Date: 2016-12-11T15:18Z
- */
-( function( global, factory ) {
-
- "use strict";
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
-
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
-// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
-// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
-// enough that all such attempts are guarded in a try block.
-
-
-var arr = [];
-
-var document = window.document;
-
-var getProto = Object.getPrototypeOf;
-
-var slice = arr.slice;
-
-var concat = arr.concat;
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var fnToString = hasOwn.toString;
-
-var ObjectFunctionString = fnToString.call( Object );
-
-var support = {};
-
-
-
- function DOMEval( code, doc ) {
- doc = doc || document;
-
- var script = doc.createElement( "script" );
-
- script.text = code;
- doc.head.appendChild( script ).parentNode.removeChild( script );
- }
-/* global Symbol */
-// Defining this global in .eslintrc.json would create a danger of using the global
-// unguarded in another place, it seems safer to define global only for this module
-
-
-
-var
- version = "3.1.1",
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
-
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init( selector, context );
- },
-
- // Support: Android <=4.0 only
- // Make sure we trim BOM and NBSP
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([a-z])/g,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- };
-
-jQuery.fn = jQuery.prototype = {
-
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
-
- // Return all the elements in a clean array
- if ( num == null ) {
- return slice.call( this );
- }
-
- // Return just the one element from the set
- return num < 0 ? this[ num + this.length ] : this[ num ];
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- each: function( callback ) {
- return jQuery.each( this, callback );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map( this, function( elem, i ) {
- return callback.call( elem, i, elem );
- } ) );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
- },
-
- end: function() {
- return this.prevObject || this.constructor();
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: arr.sort,
- splice: arr.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[ 0 ] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
-
- // Skip the boolean and the target
- target = arguments[ i ] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
- target = {};
- }
-
- // Extend jQuery itself if only one argument is passed
- if ( i === length ) {
- target = this;
- i--;
- }
-
- for ( ; i < length; i++ ) {
-
- // Only deal with non-null/undefined values
- if ( ( options = arguments[ i ] ) != null ) {
-
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
- ( copyIsArray = jQuery.isArray( copy ) ) ) ) {
-
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray( src ) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject( src ) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend( {
-
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- noop: function() {},
-
- isFunction: function( obj ) {
- return jQuery.type( obj ) === "function";
- },
-
- isArray: Array.isArray,
-
- isWindow: function( obj ) {
- return obj != null && obj === obj.window;
- },
-
- isNumeric: function( obj ) {
-
- // As of jQuery 3.0, isNumeric is limited to
- // strings and numbers (primitives or objects)
- // that can be coerced to finite numbers (gh-2662)
- var type = jQuery.type( obj );
- return ( type === "number" || type === "string" ) &&
-
- // parseFloat NaNs numeric-cast false positives ("")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- !isNaN( obj - parseFloat( obj ) );
- },
-
- isPlainObject: function( obj ) {
- var proto, Ctor;
-
- // Detect obvious negatives
- // Use toString instead of jQuery.type to catch host objects
- if ( !obj || toString.call( obj ) !== "[object Object]" ) {
- return false;
- }
-
- proto = getProto( obj );
-
- // Objects with no prototype (e.g., `Object.create( null )`) are plain
- if ( !proto ) {
- return true;
- }
-
- // Objects with prototype are plain iff they were constructed by a global Object function
- Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
- return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
- },
-
- isEmptyObject: function( obj ) {
-
- /* eslint-disable no-unused-vars */
- // See https://github.com/eslint/eslint/issues/6125
- var name;
-
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- type: function( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
-
- // Support: Android <=2.3 only (functionish RegExp)
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call( obj ) ] || "object" :
- typeof obj;
- },
-
- // Evaluates a script in a global context
- globalEval: function( code ) {
- DOMEval( code );
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Support: IE <=9 - 11, Edge 12 - 13
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- each: function( obj, callback ) {
- var length, i = 0;
-
- if ( isArrayLike( obj ) ) {
- length = obj.length;
- for ( ; i < length; i++ ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
- }
- }
- }
-
- return obj;
- },
-
- // Support: Android <=4.0 only
- trim: function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArrayLike( Object( arr ) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- return arr == null ? -1 : indexOf.call( arr, elem, i );
- },
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- for ( ; j < len; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var length, value,
- i = 0,
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if ( isArrayLike( elems ) ) {
- length = elems.length;
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- // Flatten any nested arrays
- return concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var tmp, args, proxy;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- now: Date.now,
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
-} );
-
-if ( typeof Symbol === "function" ) {
- jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
-}
-
-// Populate the class2type map
-jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( i, name ) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-} );
-
-function isArrayLike( obj ) {
-
- // Support: real iOS 8.2 only (not reproducible in simulator)
- // `in` check used to prevent JIT error (gh-2145)
- // hasOwn isn't used here due to false negatives
- // regarding Nodelist length in IE
- var length = !!obj && "length" in obj && obj.length,
- type = jQuery.type( obj );
-
- if ( type === "function" || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.3.3
- * https://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2016-08-08
- */
-(function( window ) {
-
-var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + 1 * new Date(),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- // Instance methods
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf as it's faster than native
- // https://jsperf.com/thor-indexof-vs-for/5
- indexOf = function( list, elem ) {
- var i = 0,
- len = list.length;
- for ( ; i < len; i++ ) {
- if ( list[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
-
- // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
- "*\\]",
-
- pseudos = ":(" + identifier + ")(?:\\((" +
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
- // 3. anything else (capture 2)
- ".*" +
- ")\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rwhitespace = new RegExp( whitespace + "+", "g" ),
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + identifier + ")" ),
- "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
- "TAG": new RegExp( "^(" + identifier + "|[*])" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rsibling = /[+~]/,
-
- // CSS escapes
- // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox<24
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ?
- escaped :
- high < 0 ?
- // BMP codepoint
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- },
-
- // CSS string/identifier serialization
- // https://drafts.csswg.org/cssom/#common-serializing-idioms
- rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
- fcssescape = function( ch, asCodePoint ) {
- if ( asCodePoint ) {
-
- // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
- if ( ch === "\0" ) {
- return "\uFFFD";
- }
-
- // Control characters and (dependent upon position) numbers get escaped as code points
- return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
- }
-
- // Other potentially-special ASCII characters get backslash-escaped
- return "\\" + ch;
- },
-
- // Used for iframes
- // See setDocument()
- // Removing the function wrapper causes a "Permission Denied"
- // error in IE
- unloadHandler = function() {
- setDocument();
- },
-
- disabledAncestor = addCombinator(
- function( elem ) {
- return elem.disabled === true && ("form" in elem || "label" in elem);
- },
- { dir: "parentNode", next: "legend" }
- );
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var m, i, elem, nid, match, groups, newSelector,
- newContext = context && context.ownerDocument,
-
- // nodeType defaults to 9, since context defaults to document
- nodeType = context ? context.nodeType : 9;
-
- results = results || [];
-
- // Return early from calls with invalid selector or context
- if ( typeof selector !== "string" || !selector ||
- nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
- return results;
- }
-
- // Try to shortcut find operations (as opposed to filters) in HTML documents
- if ( !seed ) {
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
- context = context || document;
-
- if ( documentIsHTML ) {
-
- // If the selector is sufficiently simple, try using a "get*By*" DOM method
- // (excepting DocumentFragment context, where the methods don't exist)
- if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
-
- // ID selector
- if ( (m = match[1]) ) {
-
- // Document context
- if ( nodeType === 9 ) {
- if ( (elem = context.getElementById( m )) ) {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
-
- // Element context
- } else {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( newContext && (elem = newContext.getElementById( m )) &&
- contains( context, elem ) &&
- elem.id === m ) {
-
- results.push( elem );
- return results;
- }
- }
-
- // Type selector
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Class selector
- } else if ( (m = match[3]) && support.getElementsByClassName &&
- context.getElementsByClassName ) {
-
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // Take advantage of querySelectorAll
- if ( support.qsa &&
- !compilerCache[ selector + " " ] &&
- (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-
- if ( nodeType !== 1 ) {
- newContext = context;
- newSelector = selector;
-
- // qSA looks outside Element context, which is not what we want
- // Thanks to Andrew Dupont for this workaround technique
- // Support: IE <=8
- // Exclude object elements
- } else if ( context.nodeName.toLowerCase() !== "object" ) {
-
- // Capture the context ID, setting it first if necessary
- if ( (nid = context.getAttribute( "id" )) ) {
- nid = nid.replace( rcssescape, fcssescape );
- } else {
- context.setAttribute( "id", (nid = expando) );
- }
-
- // Prefix every selector in the list
- groups = tokenize( selector );
- i = groups.length;
- while ( i-- ) {
- groups[i] = "#" + nid + " " + toSelector( groups[i] );
- }
- newSelector = groups.join( "," );
-
- // Expand context for sibling selectors
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
- context;
- }
-
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch ( qsaError ) {
- } finally {
- if ( nid === expando ) {
- context.removeAttribute( "id" );
- }
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key + " " ] = value);
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created element and returns a boolean result
- */
-function assert( fn ) {
- var el = document.createElement("fieldset");
-
- try {
- return !!fn( el );
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if ( el.parentNode ) {
- el.parentNode.removeChild( el );
- }
- // release memory in IE
- el = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
- var arr = attrs.split("|"),
- i = arr.length;
-
- while ( i-- ) {
- Expr.attrHandle[ arr[i] ] = handler;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- a.sourceIndex - b.sourceIndex;
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for :enabled/:disabled
- * @param {Boolean} disabled true for :disabled; false for :enabled
- */
-function createDisabledPseudo( disabled ) {
-
- // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
- return function( elem ) {
-
- // Only certain elements can match :enabled or :disabled
- // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
- // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
- if ( "form" in elem ) {
-
- // Check for inherited disabledness on relevant non-disabled elements:
- // * listed form-associated elements in a disabled fieldset
- // https://html.spec.whatwg.org/multipage/forms.html#category-listed
- // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
- // * option elements in a disabled optgroup
- // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
- // All such elements have a "form" property.
- if ( elem.parentNode && elem.disabled === false ) {
-
- // Option elements defer to a parent optgroup if present
- if ( "label" in elem ) {
- if ( "label" in elem.parentNode ) {
- return elem.parentNode.disabled === disabled;
- } else {
- return elem.disabled === disabled;
- }
- }
-
- // Support: IE 6 - 11
- // Use the isDisabled shortcut property to check for disabled fieldset ancestors
- return elem.isDisabled === disabled ||
-
- // Where there is no isDisabled, check manually
- /* jshint -W018 */
- elem.isDisabled !== !disabled &&
- disabledAncestor( elem ) === disabled;
- }
-
- return elem.disabled === disabled;
-
- // Try to winnow out elements that can't be disabled before trusting the disabled property.
- // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
- // even exist on them, let alone have a boolean value.
- } else if ( "label" in elem ) {
- return elem.disabled === disabled;
- }
-
- // Remaining elements are neither :enabled nor :disabled
- return false;
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
- return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare, subWindow,
- doc = node ? node.ownerDocument || node : preferredDoc;
-
- // Return early if doc is invalid or already selected
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Update global variables
- document = doc;
- docElem = document.documentElement;
- documentIsHTML = !isXML( document );
-
- // Support: IE 9-11, Edge
- // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
- if ( preferredDoc !== document &&
- (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
-
- // Support: IE 11, Edge
- if ( subWindow.addEventListener ) {
- subWindow.addEventListener( "unload", unloadHandler, false );
-
- // Support: IE 9 - 10 only
- } else if ( subWindow.attachEvent ) {
- subWindow.attachEvent( "onunload", unloadHandler );
- }
- }
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties
- // (excepting IE8 booleans)
- support.attributes = assert(function( el ) {
- el.className = "i";
- return !el.getAttribute("className");
- });
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function( el ) {
- el.appendChild( document.createComment("") );
- return !el.getElementsByTagName("*").length;
- });
-
- // Support: IE<9
- support.getElementsByClassName = rnative.test( document.getElementsByClassName );
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programmatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function( el ) {
- docElem.appendChild( el ).id = expando;
- return !document.getElementsByName || !document.getElementsByName( expando ).length;
- });
-
- // ID filter and find
- if ( support.getById ) {
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
- var elem = context.getElementById( id );
- return elem ? [ elem ] : [];
- }
- };
- } else {
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== "undefined" &&
- elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
-
- // Support: IE 6 - 7 only
- // getElementById is not reliable as a find shortcut
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
- var node, i, elems,
- elem = context.getElementById( id );
-
- if ( elem ) {
-
- // Verify the id attribute
- node = elem.getAttributeNode("id");
- if ( node && node.value === id ) {
- return [ elem ];
- }
-
- // Fall back on getElementsByName
- elems = context.getElementsByName( id );
- i = 0;
- while ( (elem = elems[i++]) ) {
- node = elem.getAttributeNode("id");
- if ( node && node.value === id ) {
- return [ elem ];
- }
- }
- }
-
- return [];
- }
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( tag );
-
- // DocumentFragment nodes don't have gEBTN
- } else if ( support.qsa ) {
- return context.querySelectorAll( tag );
- }
- } :
-
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See https://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( el ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // https://bugs.jquery.com/ticket/12359
- docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
- "<select id='" + expando + "-\r\\' msallowcapture=''>" +
- "<option selected=''></option></select>";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( el.querySelectorAll("[msallowcapture^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !el.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
- if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
- rbuggyQSA.push("~=");
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !el.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
-
- // Support: Safari 8+, iOS 8+
- // https://bugs.webkit.org/show_bug.cgi?id=136851
- // In-page `selector#id sibling-combinator selector` fails
- if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
- rbuggyQSA.push(".#.+[+~]");
- }
- });
-
- assert(function( el ) {
- el.innerHTML = "<a href='' disabled='disabled'></a>" +
- "<select disabled='disabled'><option/></select>";
-
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = document.createElement("input");
- input.setAttribute( "type", "hidden" );
- el.appendChild( input ).setAttribute( "name", "D" );
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if ( el.querySelectorAll("[name=d]").length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( el.querySelectorAll(":enabled").length !== 2 ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Support: IE9-11+
- // IE's :disabled selector does not pick up the children of disabled fieldsets
- docElem.appendChild( el ).disabled = true;
- if ( el.querySelectorAll(":disabled").length !== 2 ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- el.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( el ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( el, "*" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( el, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
- // Element contains another
- // Purposefully self-exclusive
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- // Choose the first element that is related to our preferred document
- if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Parentless nodes are either documents or disconnected
- if ( !aup || !bup ) {
- return a === document ? -1 :
- b === document ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- return document;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- if ( support.matchesSelector && documentIsHTML &&
- !compilerCache[ expr + " " ] &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch (e) {}
- }
-
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
-
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null;
-};
-
-Sizzle.escape = function( sel ) {
- return (sel + "").replace( rcssescape, fcssescape );
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- while ( (node = elem[i++]) ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[6] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[3] ) {
- match[2] = match[4] || match[5] || "";
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, uniqueCache, outerCache, node, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType,
- diff = false;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) {
-
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
-
- // Seek `elem` from a previously-cached index
-
- // ...in a gzip-friendly way
- node = parent;
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex && cache[ 2 ];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- } else {
- // Use previously-cached element index if available
- if ( useCache ) {
- // ...in a gzip-friendly way
- node = elem;
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex;
- }
-
- // xml :nth-child(...)
- // or :nth-last-child(...) or :nth(-last)?-of-type(...)
- if ( diff === false ) {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) &&
- ++diff ) {
-
- // Cache the index of each encountered element
- if ( useCache ) {
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- uniqueCache[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- // Don't keep the element (issue #299)
- input[0] = null;
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- text = text.replace( runescape, funescape );
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifier
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": createDisabledPseudo( false ),
- "disabled": createDisabledPseudo( true ),
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( (tokens = []) );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- skip = combinator.next,
- key = skip || dir,
- checkNonElements = base && key === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- return false;
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var oldCache, uniqueCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
-
- if ( skip && skip === elem.nodeName.toLowerCase() ) {
- elem = elem[ dir ] || elem;
- } else if ( (oldCache = uniqueCache[ key ]) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- // Assign to newCache so results back-propagate to previous elements
- return (newCache[ 2 ] = oldCache[ 2 ]);
- } else {
- // Reuse newcache so results back-propagate to previous elements
- uniqueCache[ key ] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
- return true;
- }
- }
- }
- }
- }
- return false;
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- // Avoid hanging onto element (issue #299)
- checkContext = null;
- return ret;
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
- len = elems.length;
-
- if ( outermost ) {
- outermostContext = context === document || context || outermost;
- }
-
- // Add elements passing elementMatchers directly to results
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
- for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- if ( !context && elem.ownerDocument !== document ) {
- setDocument( elem );
- xml = !documentIsHTML;
- }
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context || document, xml) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // `i` is now the count of elements visited above, and adding it to `matchedCount`
- // makes the latter nonnegative.
- matchedCount += i;
-
- // Apply set filters to unmatched elements
- // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
- // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
- // no element matchers and no seed.
- // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
- // case, which will result in a "00" `matchedCount` that differs from `i` but is also
- // numerically zero.
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( (selector = compiled.selector || selector) );
-
- results = results || [];
-
- // Try to minimize operations if there is only one selector in the list and no seed
- // (the latter of which guarantees us context)
- if ( match.length === 1 ) {
-
- // Reduce context if the leading compound selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
-
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if ( compiled ) {
- context = context.parentNode;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome 14-35+
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( el ) {
- // Should return 1, but returns 4 (following)
- return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( el ) {
- el.innerHTML = "<a href='#'></a>";
- return el.firstChild.getAttribute("href") === "#" ;
-}) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( el ) {
- el.innerHTML = "<input/>";
- el.firstChild.setAttribute( "value", "" );
- return el.firstChild.getAttribute( "value" ) === "";
-}) ) {
- addHandle( "value", function( elem, name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( el ) {
- return el.getAttribute("disabled") == null;
-}) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- (val = elem.getAttributeNode( name )) && val.specified ?
- val.value :
- null;
- }
- });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-
-// Deprecated
-jQuery.expr[ ":" ] = jQuery.expr.pseudos;
-jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-jQuery.escapeSelector = Sizzle.escape;
-
-
-
-
-var dir = function( elem, dir, until ) {
- var matched = [],
- truncate = until !== undefined;
-
- while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
- if ( elem.nodeType === 1 ) {
- if ( truncate && jQuery( elem ).is( until ) ) {
- break;
- }
- matched.push( elem );
- }
- }
- return matched;
-};
-
-
-var siblings = function( n, elem ) {
- var matched = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- matched.push( n );
- }
- }
-
- return matched;
-};
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- return !!qualifier.call( elem, i, elem ) !== not;
- } );
- }
-
- // Single element
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- } );
- }
-
- // Arraylike of elements (jQuery, arguments, Array)
- if ( typeof qualifier !== "string" ) {
- return jQuery.grep( elements, function( elem ) {
- return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
- } );
- }
-
- // Simple selector that can be filtered directly, removing non-Elements
- if ( risSimple.test( qualifier ) ) {
- return jQuery.filter( qualifier, elements, not );
- }
-
- // Complex selector, compare the two sets, removing non-Elements
- qualifier = jQuery.filter( qualifier, elements );
- return jQuery.grep( elements, function( elem ) {
- return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
- } );
-}
-
-jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- if ( elems.length === 1 && elem.nodeType === 1 ) {
- return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
- }
-
- return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- } ) );
-};
-
-jQuery.fn.extend( {
- find: function( selector ) {
- var i, ret,
- len = this.length,
- self = this;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter( function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- } ) );
- }
-
- ret = this.pushStack( [] );
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- return len > 1 ? jQuery.uniqueSort( ret ) : ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow( this, selector || [], false ) );
- },
- not: function( selector ) {
- return this.pushStack( winnow( this, selector || [], true ) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
-} );
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- // Shortcut simple #id case for speed
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
-
- init = jQuery.fn.init = function( selector, context, root ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Method init() accepts an alternate rootjQuery
- // so migrate can support jQuery.sub (gh-2101)
- root = root || rootjQuery;
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector[ 0 ] === "<" &&
- selector[ selector.length - 1 ] === ">" &&
- selector.length >= 3 ) {
-
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && ( match[ 1 ] || !context ) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[ 1 ] ) {
- context = context instanceof jQuery ? context[ 0 ] : context;
-
- // Option to run scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge( this, jQuery.parseHTML(
- match[ 1 ],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
-
- // Properties of context are called as methods if possible
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[ 2 ] );
-
- if ( elem ) {
-
- // Inject the element directly into the jQuery object
- this[ 0 ] = elem;
- this.length = 1;
- }
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || root ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this[ 0 ] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return root.ready !== undefined ?
- root.ready( selector ) :
-
- // Execute immediately if ready is not present
- selector( jQuery );
- }
-
- return jQuery.makeArray( selector, this );
- };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
- // Methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend( {
- has: function( target ) {
- var targets = jQuery( target, this ),
- l = targets.length;
-
- return this.filter( function() {
- var i = 0;
- for ( ; i < l; i++ ) {
- if ( jQuery.contains( this, targets[ i ] ) ) {
- return true;
- }
- }
- } );
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- targets = typeof selectors !== "string" && jQuery( selectors );
-
- // Positional selectors never match, since there's no _selection_ context
- if ( !rneedsContext.test( selectors ) ) {
- for ( ; i < l; i++ ) {
- for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
-
- // Always skip document fragments
- if ( cur.nodeType < 11 && ( targets ?
- targets.index( cur ) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector( cur, selectors ) ) ) {
-
- matched.push( cur );
- break;
- }
- }
- }
- }
-
- return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
- },
-
- // Determine the position of an element within the set
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // Index in selector
- if ( typeof elem === "string" ) {
- return indexOf.call( jQuery( elem ), this[ 0 ] );
- }
-
- // Locate the position of the desired element
- return indexOf.call( this,
-
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[ 0 ] : elem
- );
- },
-
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.uniqueSort(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter( selector )
- );
- }
-} );
-
-function sibling( cur, dir ) {
- while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
- return cur;
-}
-
-jQuery.each( {
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return siblings( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return siblings( elem.firstChild );
- },
- contents: function( elem ) {
- return elem.contentDocument || jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var matched = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- matched = jQuery.filter( selector, matched );
- }
-
- if ( this.length > 1 ) {
-
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- jQuery.uniqueSort( matched );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- matched.reverse();
- }
- }
-
- return this.pushStack( matched );
- };
-} );
-var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
-
-
-
-// Convert String-formatted options into Object-formatted ones
-function createOptions( options ) {
- var object = {};
- jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- } );
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- createOptions( options ) :
- jQuery.extend( {}, options );
-
- var // Flag to know if list is currently firing
- firing,
-
- // Last fire value for non-forgettable lists
- memory,
-
- // Flag to know if list was already fired
- fired,
-
- // Flag to prevent firing
- locked,
-
- // Actual callback list
- list = [],
-
- // Queue of execution data for repeatable lists
- queue = [],
-
- // Index of currently firing callback (modified by add/remove as needed)
- firingIndex = -1,
-
- // Fire callbacks
- fire = function() {
-
- // Enforce single-firing
- locked = options.once;
-
- // Execute callbacks for all pending executions,
- // respecting firingIndex overrides and runtime changes
- fired = firing = true;
- for ( ; queue.length; firingIndex = -1 ) {
- memory = queue.shift();
- while ( ++firingIndex < list.length ) {
-
- // Run callback and check for early termination
- if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
- options.stopOnFalse ) {
-
- // Jump to end and forget the data so .add doesn't re-fire
- firingIndex = list.length;
- memory = false;
- }
- }
- }
-
- // Forget the data if we're done with it
- if ( !options.memory ) {
- memory = false;
- }
-
- firing = false;
-
- // Clean up if we're done firing for good
- if ( locked ) {
-
- // Keep an empty list if we have data for future add calls
- if ( memory ) {
- list = [];
-
- // Otherwise, this object is spent
- } else {
- list = "";
- }
- }
- },
-
- // Actual Callbacks object
- self = {
-
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
-
- // If we have memory from a past run, we should fire after adding
- if ( memory && !firing ) {
- firingIndex = list.length - 1;
- queue.push( memory );
- }
-
- ( function add( args ) {
- jQuery.each( args, function( _, arg ) {
- if ( jQuery.isFunction( arg ) ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
-
- // Inspect recursively
- add( arg );
- }
- } );
- } )( arguments );
-
- if ( memory && !firing ) {
- fire();
- }
- }
- return this;
- },
-
- // Remove a callback from the list
- remove: function() {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
-
- // Handle firing indexes
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- } );
- return this;
- },
-
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ?
- jQuery.inArray( fn, list ) > -1 :
- list.length > 0;
- },
-
- // Remove all callbacks from the list
- empty: function() {
- if ( list ) {
- list = [];
- }
- return this;
- },
-
- // Disable .fire and .add
- // Abort any current/pending executions
- // Clear all callbacks and values
- disable: function() {
- locked = queue = [];
- list = memory = "";
- return this;
- },
- disabled: function() {
- return !list;
- },
-
- // Disable .fire
- // Also disable .add unless we have memory (since it would have no effect)
- // Abort any pending executions
- lock: function() {
- locked = queue = [];
- if ( !memory && !firing ) {
- list = memory = "";
- }
- return this;
- },
- locked: function() {
- return !!locked;
- },
-
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( !locked ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- queue.push( args );
- if ( !firing ) {
- fire();
- }
- }
- return this;
- },
-
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
-
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-
-
-function Identity( v ) {
- return v;
-}
-function Thrower( ex ) {
- throw ex;
-}
-
-function adoptValue( value, resolve, reject ) {
- var method;
-
- try {
-
- // Check for promise aspect first to privilege synchronous behavior
- if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
- method.call( value ).done( resolve ).fail( reject );
-
- // Other thenables
- } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
- method.call( value, resolve, reject );
-
- // Other non-thenables
- } else {
-
- // Support: Android 4.0 only
- // Strict mode functions invoked without .call/.apply get global-object context
- resolve.call( undefined, value );
- }
-
- // For Promises/A+, convert exceptions into rejections
- // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
- // Deferred#then to conditionally suppress rejection.
- } catch ( value ) {
-
- // Support: Android 4.0 only
- // Strict mode functions invoked without .call/.apply get global-object context
- reject.call( undefined, value );
- }
-}
-
-jQuery.extend( {
-
- Deferred: function( func ) {
- var tuples = [
-
- // action, add listener, callbacks,
- // ... .then handlers, argument index, [final state]
- [ "notify", "progress", jQuery.Callbacks( "memory" ),
- jQuery.Callbacks( "memory" ), 2 ],
- [ "resolve", "done", jQuery.Callbacks( "once memory" ),
- jQuery.Callbacks( "once memory" ), 0, "resolved" ],
- [ "reject", "fail", jQuery.Callbacks( "once memory" ),
- jQuery.Callbacks( "once memory" ), 1, "rejected" ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- "catch": function( fn ) {
- return promise.then( null, fn );
- },
-
- // Keep pipe for back-compat
- pipe: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
-
- return jQuery.Deferred( function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
-
- // Map tuples (progress, done, fail) to arguments (done, fail, progress)
- var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
-
- // deferred.progress(function() { bind to newDefer or newDefer.notify })
- // deferred.done(function() { bind to newDefer or newDefer.resolve })
- // deferred.fail(function() { bind to newDefer or newDefer.reject })
- deferred[ tuple[ 1 ] ]( function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .progress( newDefer.notify )
- .done( newDefer.resolve )
- .fail( newDefer.reject );
- } else {
- newDefer[ tuple[ 0 ] + "With" ](
- this,
- fn ? [ returned ] : arguments
- );
- }
- } );
- } );
- fns = null;
- } ).promise();
- },
- then: function( onFulfilled, onRejected, onProgress ) {
- var maxDepth = 0;
- function resolve( depth, deferred, handler, special ) {
- return function() {
- var that = this,
- args = arguments,
- mightThrow = function() {
- var returned, then;
-
- // Support: Promises/A+ section 2.3.3.3.3
- // https://promisesaplus.com/#point-59
- // Ignore double-resolution attempts
- if ( depth < maxDepth ) {
- return;
- }
-
- returned = handler.apply( that, args );
-
- // Support: Promises/A+ section 2.3.1
- // https://promisesaplus.com/#point-48
- if ( returned === deferred.promise() ) {
- throw new TypeError( "Thenable self-resolution" );
- }
-
- // Support: Promises/A+ sections 2.3.3.1, 3.5
- // https://promisesaplus.com/#point-54
- // https://promisesaplus.com/#point-75
- // Retrieve `then` only once
- then = returned &&
-
- // Support: Promises/A+ section 2.3.4
- // https://promisesaplus.com/#point-64
- // Only check objects and functions for thenability
- ( typeof returned === "object" ||
- typeof returned === "function" ) &&
- returned.then;
-
- // Handle a returned thenable
- if ( jQuery.isFunction( then ) ) {
-
- // Special processors (notify) just wait for resolution
- if ( special ) {
- then.call(
- returned,
- resolve( maxDepth, deferred, Identity, special ),
- resolve( maxDepth, deferred, Thrower, special )
- );
-
- // Normal processors (resolve) also hook into progress
- } else {
-
- // ...and disregard older resolution values
- maxDepth++;
-
- then.call(
- returned,
- resolve( maxDepth, deferred, Identity, special ),
- resolve( maxDepth, deferred, Thrower, special ),
- resolve( maxDepth, deferred, Identity,
- deferred.notifyWith )
- );
- }
-
- // Handle all other returned values
- } else {
-
- // Only substitute handlers pass on context
- // and multiple values (non-spec behavior)
- if ( handler !== Identity ) {
- that = undefined;
- args = [ returned ];
- }
-
- // Process the value(s)
- // Default process is resolve
- ( special || deferred.resolveWith )( that, args );
- }
- },
-
- // Only normal processors (resolve) catch and reject exceptions
- process = special ?
- mightThrow :
- function() {
- try {
- mightThrow();
- } catch ( e ) {
-
- if ( jQuery.Deferred.exceptionHook ) {
- jQuery.Deferred.exceptionHook( e,
- process.stackTrace );
- }
-
- // Support: Promises/A+ section 2.3.3.3.4.1
- // https://promisesaplus.com/#point-61
- // Ignore post-resolution exceptions
- if ( depth + 1 >= maxDepth ) {
-
- // Only substitute handlers pass on context
- // and multiple values (non-spec behavior)
- if ( handler !== Thrower ) {
- that = undefined;
- args = [ e ];
- }
-
- deferred.rejectWith( that, args );
- }
- }
- };
-
- // Support: Promises/A+ section 2.3.3.3.1
- // https://promisesaplus.com/#point-57
- // Re-resolve promises immediately to dodge false rejection from
- // subsequent errors
- if ( depth ) {
- process();
- } else {
-
- // Call an optional hook to record the stack, in case of exception
- // since it's otherwise lost when execution goes async
- if ( jQuery.Deferred.getStackHook ) {
- process.stackTrace = jQuery.Deferred.getStackHook();
- }
- window.setTimeout( process );
- }
- };
- }
-
- return jQuery.Deferred( function( newDefer ) {
-
- // progress_handlers.add( ... )
- tuples[ 0 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- jQuery.isFunction( onProgress ) ?
- onProgress :
- Identity,
- newDefer.notifyWith
- )
- );
-
- // fulfilled_handlers.add( ... )
- tuples[ 1 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- jQuery.isFunction( onFulfilled ) ?
- onFulfilled :
- Identity
- )
- );
-
- // rejected_handlers.add( ... )
- tuples[ 2 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- jQuery.isFunction( onRejected ) ?
- onRejected :
- Thrower
- )
- );
- } ).promise();
- },
-
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 5 ];
-
- // promise.progress = list.add
- // promise.done = list.add
- // promise.fail = list.add
- promise[ tuple[ 1 ] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(
- function() {
-
- // state = "resolved" (i.e., fulfilled)
- // state = "rejected"
- state = stateString;
- },
-
- // rejected_callbacks.disable
- // fulfilled_callbacks.disable
- tuples[ 3 - i ][ 2 ].disable,
-
- // progress_callbacks.lock
- tuples[ 0 ][ 2 ].lock
- );
- }
-
- // progress_handlers.fire
- // fulfilled_handlers.fire
- // rejected_handlers.fire
- list.add( tuple[ 3 ].fire );
-
- // deferred.notify = function() { deferred.notifyWith(...) }
- // deferred.resolve = function() { deferred.resolveWith(...) }
- // deferred.reject = function() { deferred.rejectWith(...) }
- deferred[ tuple[ 0 ] ] = function() {
- deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
- return this;
- };
-
- // deferred.notifyWith = list.fireWith
- // deferred.resolveWith = list.fireWith
- // deferred.rejectWith = list.fireWith
- deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
- } );
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( singleValue ) {
- var
-
- // count of uncompleted subordinates
- remaining = arguments.length,
-
- // count of unprocessed arguments
- i = remaining,
-
- // subordinate fulfillment data
- resolveContexts = Array( i ),
- resolveValues = slice.call( arguments ),
-
- // the master Deferred
- master = jQuery.Deferred(),
-
- // subordinate callback factory
- updateFunc = function( i ) {
- return function( value ) {
- resolveContexts[ i ] = this;
- resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
- if ( !( --remaining ) ) {
- master.resolveWith( resolveContexts, resolveValues );
- }
- };
- };
-
- // Single- and empty arguments are adopted like Promise.resolve
- if ( remaining <= 1 ) {
- adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );
-
- // Use .then() to unwrap secondary thenables (cf. gh-3000)
- if ( master.state() === "pending" ||
- jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
-
- return master.then();
- }
- }
-
- // Multiple arguments are aggregated like Promise.all array elements
- while ( i-- ) {
- adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
- }
-
- return master.promise();
- }
-} );
-
-
-// These usually indicate a programmer mistake during development,
-// warn about them ASAP rather than swallowing them by default.
-var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
-
-jQuery.Deferred.exceptionHook = function( error, stack ) {
-
- // Support: IE 8 - 9 only
- // Console exists when dev tools are open, which can happen at any time
- if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
- window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
- }
-};
-
-
-
-
-jQuery.readyException = function( error ) {
- window.setTimeout( function() {
- throw error;
- } );
-};
-
-
-
-
-// The deferred used on DOM ready
-var readyList = jQuery.Deferred();
-
-jQuery.fn.ready = function( fn ) {
-
- readyList
- .then( fn )
-
- // Wrap jQuery.readyException in a function so that the lookup
- // happens at the time of error handling instead of callback
- // registration.
- .catch( function( error ) {
- jQuery.readyException( error );
- } );
-
- return this;
-};
-
-jQuery.extend( {
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
- }
-} );
-
-jQuery.ready.then = readyList.then;
-
-// The ready event handler and self cleanup method
-function completed() {
- document.removeEventListener( "DOMContentLoaded", completed );
- window.removeEventListener( "load", completed );
- jQuery.ready();
-}
-
-// Catch cases where $(document).ready() is called
-// after the browser event has already occurred.
-// Support: IE <=9 - 10 only
-// Older IE sometimes signals "interactive" too soon
-if ( document.readyState === "complete" ||
- ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
-
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- window.setTimeout( jQuery.ready );
-
-} else {
-
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed );
-}
-
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- len = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- access( elems, fn, i, key[ i ], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
-
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < len; i++ ) {
- fn(
- elems[ i ], key, raw ?
- value :
- value.call( elems[ i ], i, fn( elems[ i ], key ) )
- );
- }
- }
- }
-
- if ( chainable ) {
- return elems;
- }
-
- // Gets
- if ( bulk ) {
- return fn.call( elems );
- }
-
- return len ? fn( elems[ 0 ], key ) : emptyGet;
-};
-var acceptData = function( owner ) {
-
- // Accepts only:
- // - Node
- // - Node.ELEMENT_NODE
- // - Node.DOCUMENT_NODE
- // - Object
- // - Any
- return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
-};
-
-
-
-
-function Data() {
- this.expando = jQuery.expando + Data.uid++;
-}
-
-Data.uid = 1;
-
-Data.prototype = {
-
- cache: function( owner ) {
-
- // Check if the owner object already has a cache
- var value = owner[ this.expando ];
-
- // If not, create one
- if ( !value ) {
- value = {};
-
- // We can accept data for non-element nodes in modern browsers,
- // but we should not, see #8335.
- // Always return an empty object.
- if ( acceptData( owner ) ) {
-
- // If it is a node unlikely to be stringify-ed or looped over
- // use plain assignment
- if ( owner.nodeType ) {
- owner[ this.expando ] = value;
-
- // Otherwise secure it in a non-enumerable property
- // configurable must be true to allow the property to be
- // deleted when data is removed
- } else {
- Object.defineProperty( owner, this.expando, {
- value: value,
- configurable: true
- } );
- }
- }
- }
-
- return value;
- },
- set: function( owner, data, value ) {
- var prop,
- cache = this.cache( owner );
-
- // Handle: [ owner, key, value ] args
- // Always use camelCase key (gh-2257)
- if ( typeof data === "string" ) {
- cache[ jQuery.camelCase( data ) ] = value;
-
- // Handle: [ owner, { properties } ] args
- } else {
-
- // Copy the properties one-by-one to the cache object
- for ( prop in data ) {
- cache[ jQuery.camelCase( prop ) ] = data[ prop ];
- }
- }
- return cache;
- },
- get: function( owner, key ) {
- return key === undefined ?
- this.cache( owner ) :
-
- // Always use camelCase key (gh-2257)
- owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
- },
- access: function( owner, key, value ) {
-
- // In cases where either:
- //
- // 1. No key was specified
- // 2. A string key was specified, but no value provided
- //
- // Take the "read" path and allow the get method to determine
- // which value to return, respectively either:
- //
- // 1. The entire cache object
- // 2. The data stored at the key
- //
- if ( key === undefined ||
- ( ( key && typeof key === "string" ) && value === undefined ) ) {
-
- return this.get( owner, key );
- }
-
- // When the key is not a string, or both a key and value
- // are specified, set or extend (existing objects) with either:
- //
- // 1. An object of properties
- // 2. A key and value
- //
- this.set( owner, key, value );
-
- // Since the "set" path can have two possible entry points
- // return the expected data based on which path was taken[*]
- return value !== undefined ? value : key;
- },
- remove: function( owner, key ) {
- var i,
- cache = owner[ this.expando ];
-
- if ( cache === undefined ) {
- return;
- }
-
- if ( key !== undefined ) {
-
- // Support array or space separated string of keys
- if ( jQuery.isArray( key ) ) {
-
- // If key is an array of keys...
- // We always set camelCase keys, so remove that.
- key = key.map( jQuery.camelCase );
- } else {
- key = jQuery.camelCase( key );
-
- // If a key with the spaces exists, use it.
- // Otherwise, create an array by matching non-whitespace
- key = key in cache ?
- [ key ] :
- ( key.match( rnothtmlwhite ) || [] );
- }
-
- i = key.length;
-
- while ( i-- ) {
- delete cache[ key[ i ] ];
- }
- }
-
- // Remove the expando if there's no more data
- if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
-
- // Support: Chrome <=35 - 45
- // Webkit & Blink performance suffers when deleting properties
- // from DOM nodes, so set to undefined instead
- // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
- if ( owner.nodeType ) {
- owner[ this.expando ] = undefined;
- } else {
- delete owner[ this.expando ];
- }
- }
- },
- hasData: function( owner ) {
- var cache = owner[ this.expando ];
- return cache !== undefined && !jQuery.isEmptyObject( cache );
- }
-};
-var dataPriv = new Data();
-
-var dataUser = new Data();
-
-
-
-// Implementation Summary
-//
-// 1. Enforce API surface and semantic compatibility with 1.9.x branch
-// 2. Improve the module's maintainability by reducing the storage
-// paths to a single mechanism.
-// 3. Use the same single mechanism to support "private" and "user" data.
-// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
-// 5. Avoid exposing implementation details on user objects (eg. expando properties)
-// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /[A-Z]/g;
-
-function getData( data ) {
- if ( data === "true" ) {
- return true;
- }
-
- if ( data === "false" ) {
- return false;
- }
-
- if ( data === "null" ) {
- return null;
- }
-
- // Only convert to a number if it doesn't change the string
- if ( data === +data + "" ) {
- return +data;
- }
-
- if ( rbrace.test( data ) ) {
- return JSON.parse( data );
- }
-
- return data;
-}
-
-function dataAttr( elem, key, data ) {
- var name;
-
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
- name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = getData( data );
- } catch ( e ) {}
-
- // Make sure we set the data so it isn't changed later
- dataUser.set( elem, key, data );
- } else {
- data = undefined;
- }
- }
- return data;
-}
-
-jQuery.extend( {
- hasData: function( elem ) {
- return dataUser.hasData( elem ) || dataPriv.hasData( elem );
- },
-
- data: function( elem, name, data ) {
- return dataUser.access( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- dataUser.remove( elem, name );
- },
-
- // TODO: Now that all calls to _data and _removeData have been replaced
- // with direct calls to dataPriv methods, these can be deprecated.
- _data: function( elem, name, data ) {
- return dataPriv.access( elem, name, data );
- },
-
- _removeData: function( elem, name ) {
- dataPriv.remove( elem, name );
- }
-} );
-
-jQuery.fn.extend( {
- data: function( key, value ) {
- var i, name, data,
- elem = this[ 0 ],
- attrs = elem && elem.attributes;
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = dataUser.get( elem );
-
- if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
- // Support: IE 11 only
- // The attrs elements can be null (#14894)
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.slice( 5 ) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- dataPriv.set( elem, "hasDataAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each( function() {
- dataUser.set( this, key );
- } );
- }
-
- return access( this, function( value ) {
- var data;
-
- // The calling jQuery object (element matches) is not empty
- // (and therefore has an element appears at this[ 0 ]) and the
- // `value` parameter was not undefined. An empty jQuery object
- // will result in `undefined` for elem = this[ 0 ] which will
- // throw an exception if an attempt to read a data cache is made.
- if ( elem && value === undefined ) {
-
- // Attempt to get data from the cache
- // The key will always be camelCased in Data
- data = dataUser.get( elem, key );
- if ( data !== undefined ) {
- return data;
- }
-
- // Attempt to "discover" the data in
- // HTML5 custom data-* attrs
- data = dataAttr( elem, key );
- if ( data !== undefined ) {
- return data;
- }
-
- // We tried really hard, but the data doesn't exist.
- return;
- }
-
- // Set the data...
- this.each( function() {
-
- // We always store the camelCased key
- dataUser.set( this, key, value );
- } );
- }, null, value, arguments.length > 1, null, true );
- },
-
- removeData: function( key ) {
- return this.each( function() {
- dataUser.remove( this, key );
- } );
- }
-} );
-
-
-jQuery.extend( {
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = dataPriv.get( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray( data ) ) {
- queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // Clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // Not public - generate a queueHooks object, or return the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
- empty: jQuery.Callbacks( "once memory" ).add( function() {
- dataPriv.remove( elem, [ type + "queue", key ] );
- } )
- } );
- }
-} );
-
-jQuery.fn.extend( {
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[ 0 ], type );
- }
-
- return data === undefined ?
- this :
- this.each( function() {
- var queue = jQuery.queue( this, type, data );
-
- // Ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- } );
- },
- dequeue: function( type ) {
- return this.each( function() {
- jQuery.dequeue( this, type );
- } );
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
-
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while ( i-- ) {
- tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-} );
-var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
-
-var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
-
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHiddenWithinTree = function( elem, el ) {
-
- // isHiddenWithinTree might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
-
- // Inline style trumps all
- return elem.style.display === "none" ||
- elem.style.display === "" &&
-
- // Otherwise, check computed style
- // Support: Firefox <=43 - 45
- // Disconnected elements can have computed display: none, so first confirm that elem is
- // in the document.
- jQuery.contains( elem.ownerDocument, elem ) &&
-
- jQuery.css( elem, "display" ) === "none";
- };
-
-var swap = function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.apply( elem, args || [] );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
-};
-
-
-
-
-function adjustCSS( elem, prop, valueParts, tween ) {
- var adjusted,
- scale = 1,
- maxIterations = 20,
- currentValue = tween ?
- function() {
- return tween.cur();
- } :
- function() {
- return jQuery.css( elem, prop, "" );
- },
- initial = currentValue(),
- unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
- rcssNum.exec( jQuery.css( elem, prop ) );
-
- if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
-
- // Trust units reported by jQuery.css
- unit = unit || initialInUnit[ 3 ];
-
- // Make sure we update the tween properties later on
- valueParts = valueParts || [];
-
- // Iteratively approximate from a nonzero starting point
- initialInUnit = +initial || 1;
-
- do {
-
- // If previous iteration zeroed out, double until we get *something*.
- // Use string for doubling so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- initialInUnit = initialInUnit / scale;
- jQuery.style( elem, prop, initialInUnit + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // Break the loop if scale is unchanged or perfect, or if we've just had enough.
- } while (
- scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
- );
- }
-
- if ( valueParts ) {
- initialInUnit = +initialInUnit || +initial || 0;
-
- // Apply relative offset (+=/-=) if specified
- adjusted = valueParts[ 1 ] ?
- initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
- +valueParts[ 2 ];
- if ( tween ) {
- tween.unit = unit;
- tween.start = initialInUnit;
- tween.end = adjusted;
- }
- }
- return adjusted;
-}
-
-
-var defaultDisplayMap = {};
-
-function getDefaultDisplay( elem ) {
- var temp,
- doc = elem.ownerDocument,
- nodeName = elem.nodeName,
- display = defaultDisplayMap[ nodeName ];
-
- if ( display ) {
- return display;
- }
-
- temp = doc.body.appendChild( doc.createElement( nodeName ) );
- display = jQuery.css( temp, "display" );
-
- temp.parentNode.removeChild( temp );
-
- if ( display === "none" ) {
- display = "block";
- }
- defaultDisplayMap[ nodeName ] = display;
-
- return display;
-}
-
-function showHide( elements, show ) {
- var display, elem,
- values = [],
- index = 0,
- length = elements.length;
-
- // Determine new display value for elements that need to change
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- display = elem.style.display;
- if ( show ) {
-
- // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
- // check is required in this first loop unless we have a nonempty display value (either
- // inline or about-to-be-restored)
- if ( display === "none" ) {
- values[ index ] = dataPriv.get( elem, "display" ) || null;
- if ( !values[ index ] ) {
- elem.style.display = "";
- }
- }
- if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
- values[ index ] = getDefaultDisplay( elem );
- }
- } else {
- if ( display !== "none" ) {
- values[ index ] = "none";
-
- // Remember what we're overwriting
- dataPriv.set( elem, "display", display );
- }
- }
- }
-
- // Set the display of the elements in a second loop to avoid constant reflow
- for ( index = 0; index < length; index++ ) {
- if ( values[ index ] != null ) {
- elements[ index ].style.display = values[ index ];
- }
- }
-
- return elements;
-}
-
-jQuery.fn.extend( {
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- if ( typeof state === "boolean" ) {
- return state ? this.show() : this.hide();
- }
-
- return this.each( function() {
- if ( isHiddenWithinTree( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- } );
- }
-} );
-var rcheckableType = ( /^(?:checkbox|radio)$/i );
-
-var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
-
-var rscriptType = ( /^$|\/(?:java|ecma)script/i );
-
-
-
-// We have to close these tags to support XHTML (#13200)
-var wrapMap = {
-
- // Support: IE <=9 only
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
-
- // XHTML parsers do not magically insert elements in the
- // same way that tag soup parsers do. So we cannot shorten
- // this by omitting <tbody> or other required elements.
- thead: [ 1, "<table>", "</table>" ],
- col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
- _default: [ 0, "", "" ]
-};
-
-// Support: IE <=9 only
-wrapMap.optgroup = wrapMap.option;
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-
-function getAll( context, tag ) {
-
- // Support: IE <=9 - 11 only
- // Use typeof to avoid zero-argument method invocation on host objects (#15151)
- var ret;
-
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- ret = context.getElementsByTagName( tag || "*" );
-
- } else if ( typeof context.querySelectorAll !== "undefined" ) {
- ret = context.querySelectorAll( tag || "*" );
-
- } else {
- ret = [];
- }
-
- if ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) {
- return jQuery.merge( [ context ], ret );
- }
-
- return ret;
-}
-
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- dataPriv.set(
- elems[ i ],
- "globalEval",
- !refElements || dataPriv.get( refElements[ i ], "globalEval" )
- );
- }
-}
-
-
-var rhtml = /<|&#?\w+;/;
-
-function buildFragment( elems, context, scripts, selection, ignored ) {
- var elem, tmp, tag, wrap, contains, j,
- fragment = context.createDocumentFragment(),
- nodes = [],
- i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( jQuery.type( elem ) === "object" ) {
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
-
- // Deserialize a standard representation
- tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
- tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
-
- // Descend through wrappers to the right content
- j = wrap[ 0 ];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( nodes, tmp.childNodes );
-
- // Remember the top-level container
- tmp = fragment.firstChild;
-
- // Ensure the created nodes are orphaned (#12392)
- tmp.textContent = "";
- }
- }
- }
-
- // Remove wrapper from fragment
- fragment.textContent = "";
-
- i = 0;
- while ( ( elem = nodes[ i++ ] ) ) {
-
- // Skip elements already in the context collection (trac-4087)
- if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
- if ( ignored ) {
- ignored.push( elem );
- }
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( fragment.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( ( elem = tmp[ j++ ] ) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- return fragment;
-}
-
-
-( function() {
- var fragment = document.createDocumentFragment(),
- div = fragment.appendChild( document.createElement( "div" ) ),
- input = document.createElement( "input" );
-
- // Support: Android 4.0 - 4.3 only
- // Check state lost if the name is set (#11217)
- // Support: Windows Web Apps (WWA)
- // `name` and `type` must use .setAttribute for WWA (#14901)
- input.setAttribute( "type", "radio" );
- input.setAttribute( "checked", "checked" );
- input.setAttribute( "name", "t" );
-
- div.appendChild( input );
-
- // Support: Android <=4.1 only
- // Older WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE <=11 only
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- div.innerHTML = "<textarea>x</textarea>";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-} )();
-var documentElement = document.documentElement;
-
-
-
-var
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-// Support: IE <=9 only
-// See #13393 for more info
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-function on( elem, types, selector, data, fn, one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
-
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
-
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- on( elem, type, selector, data, types[ type ], one );
- }
- return elem;
- }
-
- if ( data == null && fn == null ) {
-
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
-
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
-
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return elem;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
-
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
-
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return elem.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- } );
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
-
- var handleObjIn, eventHandle, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = dataPriv.get( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Ensure that invalid selectors throw exceptions at attach time
- // Evaluate against documentElement in case elem is a non-element node (e.g., document)
- if ( selector ) {
- jQuery.find.matchesSelector( documentElement, selector );
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !( events = elemData.events ) ) {
- events = elemData.events = {};
- }
- if ( !( eventHandle = elemData.handle ) ) {
- eventHandle = elemData.handle = function( e ) {
-
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
- jQuery.event.dispatch.apply( elem, arguments ) : undefined;
- };
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend( {
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join( "." )
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !( handlers = events[ type ] ) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener if the special events handler returns false
- if ( !special.setup ||
- special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
-
- var j, origCount, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
-
- if ( !elemData || !( events = elemData.events ) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[ 2 ] &&
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector ||
- selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown ||
- special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove data and the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- dataPriv.remove( elem, "handle events" );
- }
- },
-
- dispatch: function( nativeEvent ) {
-
- // Make a writable jQuery.Event from the native event object
- var event = jQuery.event.fix( nativeEvent );
-
- var i, j, ret, matched, handleObj, handlerQueue,
- args = new Array( arguments.length ),
- handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[ 0 ] = event;
-
- for ( i = 1; i < arguments.length; i++ ) {
- args[ i ] = arguments[ i ];
- }
-
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( ( handleObj = matched.handlers[ j++ ] ) &&
- !event.isImmediatePropagationStopped() ) {
-
- // Triggered event must either 1) have no namespace, or 2) have namespace(s)
- // a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
- handleObj.handler ).apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( ( event.result = ret ) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var i, handleObj, sel, matchedHandlers, matchedSelectors,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Find delegate handlers
- if ( delegateCount &&
-
- // Support: IE <=9
- // Black-hole SVG <use> instance trees (trac-13180)
- cur.nodeType &&
-
- // Support: Firefox <=42
- // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
- // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
- // Support: IE 11 only
- // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
- !( event.type === "click" && event.button >= 1 ) ) {
-
- for ( ; cur !== this; cur = cur.parentNode || this ) {
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
- matchedHandlers = [];
- matchedSelectors = {};
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matchedSelectors[ sel ] === undefined ) {
- matchedSelectors[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) > -1 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matchedSelectors[ sel ] ) {
- matchedHandlers.push( handleObj );
- }
- }
- if ( matchedHandlers.length ) {
- handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- cur = this;
- if ( delegateCount < handlers.length ) {
- handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
- }
-
- return handlerQueue;
- },
-
- addProp: function( name, hook ) {
- Object.defineProperty( jQuery.Event.prototype, name, {
- enumerable: true,
- configurable: true,
-
- get: jQuery.isFunction( hook ) ?
- function() {
- if ( this.originalEvent ) {
- return hook( this.originalEvent );
- }
- } :
- function() {
- if ( this.originalEvent ) {
- return this.originalEvent[ name ];
- }
- },
-
- set: function( value ) {
- Object.defineProperty( this, name, {
- enumerable: true,
- configurable: true,
- writable: true,
- value: value
- } );
- }
- } );
- },
-
- fix: function( originalEvent ) {
- return originalEvent[ jQuery.expando ] ?
- originalEvent :
- new jQuery.Event( originalEvent );
- },
-
- special: {
- load: {
-
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- focus: {
-
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function() {
- if ( this !== safeActiveElement() && this.focus ) {
- this.focus();
- return false;
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === safeActiveElement() && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
-
- // For checkbox, fire native event so checked state will be right
- trigger: function() {
- if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
- this.click();
- return false;
- }
- },
-
- // For cross-browser consistency, don't fire native .click() on links
- _default: function( event ) {
- return jQuery.nodeName( event.target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert if the returnValue field is not set.
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- }
-};
-
-jQuery.removeEvent = function( elem, type, handle ) {
-
- // This "if" is needed for plain objects
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle );
- }
-};
-
-jQuery.Event = function( src, props ) {
-
- // Allow instantiation without the 'new' keyword
- if ( !( this instanceof jQuery.Event ) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
-
- // Support: Android <=2.3 only
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- // Create target properties
- // Support: Safari <=6 - 7 only
- // Target should not be a text node (#504, #13143)
- this.target = ( src.target && src.target.nodeType === 3 ) ?
- src.target.parentNode :
- src.target;
-
- this.currentTarget = src.currentTarget;
- this.relatedTarget = src.relatedTarget;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- constructor: jQuery.Event,
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
- isSimulated: false,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.preventDefault();
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.stopPropagation();
- }
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
-};
-
-// Includes all common event props including KeyEvent and MouseEvent specific props
-jQuery.each( {
- altKey: true,
- bubbles: true,
- cancelable: true,
- changedTouches: true,
- ctrlKey: true,
- detail: true,
- eventPhase: true,
- metaKey: true,
- pageX: true,
- pageY: true,
- shiftKey: true,
- view: true,
- "char": true,
- charCode: true,
- key: true,
- keyCode: true,
- button: true,
- buttons: true,
- clientX: true,
- clientY: true,
- offsetX: true,
- offsetY: true,
- pointerId: true,
- pointerType: true,
- screenX: true,
- screenY: true,
- targetTouches: true,
- toElement: true,
- touches: true,
-
- which: function( event ) {
- var button = event.button;
-
- // Add which for key events
- if ( event.which == null && rkeyEvent.test( event.type ) ) {
- return event.charCode != null ? event.charCode : event.keyCode;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
- if ( button & 1 ) {
- return 1;
- }
-
- if ( button & 2 ) {
- return 3;
- }
-
- if ( button & 4 ) {
- return 2;
- }
-
- return 0;
- }
-
- return event.which;
- }
-}, jQuery.event.addProp );
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-// so that event delegation works in jQuery.
-// Do the same for pointerenter/pointerleave and pointerover/pointerout
-//
-// Support: Safari 7 only
-// Safari sends mouseenter too often; see:
-// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
-// for the description of the bug (it existed in older Chrome versions as well).
-jQuery.each( {
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mouseenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-} );
-
-jQuery.fn.extend( {
-
- on: function( types, selector, data, fn ) {
- return on( this, types, selector, data, fn );
- },
- one: function( types, selector, data, fn ) {
- return on( this, types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
-
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ?
- handleObj.origType + "." + handleObj.namespace :
- handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
-
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
-
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each( function() {
- jQuery.event.remove( this, types, fn, selector );
- } );
- }
-} );
-
-
-var
-
- /* eslint-disable max-len */
-
- // See https://github.com/eslint/eslint/issues/3229
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
-
- /* eslint-enable */
-
- // Support: IE <=10 - 11, Edge 12 - 13
- // In IE/Edge using regex groups here causes severe slowdowns.
- // See https://connect.microsoft.com/IE/feedback/details/1736512/
- rnoInnerhtml = /<script|<style|<link/i,
-
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
-
-function manipulationTarget( elem, content ) {
- if ( jQuery.nodeName( elem, "table" ) &&
- jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
-
- return elem.getElementsByTagName( "tbody" )[ 0 ] || elem;
- }
-
- return elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- var match = rscriptTypeMasked.exec( elem.type );
-
- if ( match ) {
- elem.type = match[ 1 ];
- } else {
- elem.removeAttribute( "type" );
- }
-
- return elem;
-}
-
-function cloneCopyEvent( src, dest ) {
- var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
-
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // 1. Copy private data: events, handlers, etc.
- if ( dataPriv.hasData( src ) ) {
- pdataOld = dataPriv.access( src );
- pdataCur = dataPriv.set( dest, pdataOld );
- events = pdataOld.events;
-
- if ( events ) {
- delete pdataCur.handle;
- pdataCur.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
- }
-
- // 2. Copy user data
- if ( dataUser.hasData( src ) ) {
- udataOld = dataUser.access( src );
- udataCur = jQuery.extend( {}, udataOld );
-
- dataUser.set( dest, udataCur );
- }
-}
-
-// Fix IE bugs, see support tests
-function fixInput( src, dest ) {
- var nodeName = dest.nodeName.toLowerCase();
-
- // Fails to persist the checked state of a cloned checkbox or radio button.
- if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
- dest.checked = src.checked;
-
- // Fails to return the selected option to the default selected state when cloning options
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-function domManip( collection, args, callback, ignored ) {
-
- // Flatten any nested arrays
- args = concat.apply( [], args );
-
- var fragment, first, scripts, hasScripts, node, doc,
- i = 0,
- l = collection.length,
- iNoClone = l - 1,
- value = args[ 0 ],
- isFunction = jQuery.isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( isFunction ||
- ( l > 1 && typeof value === "string" &&
- !support.checkClone && rchecked.test( value ) ) ) {
- return collection.each( function( index ) {
- var self = collection.eq( index );
- if ( isFunction ) {
- args[ 0 ] = value.call( this, index, self.html() );
- }
- domManip( self, args, callback, ignored );
- } );
- }
-
- if ( l ) {
- fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- // Require either new content or an interest in ignored elements to invoke the callback
- if ( first || ignored ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item
- // instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call( collection[ i ], node, i );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !dataPriv.access( node, "globalEval" ) &&
- jQuery.contains( doc, node ) ) {
-
- if ( node.src ) {
-
- // Optional AJAX dependency, but won't run scripts if not present
- if ( jQuery._evalUrl ) {
- jQuery._evalUrl( node.src );
- }
- } else {
- DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
- }
- }
- }
- }
- }
- }
-
- return collection;
-}
-
-function remove( elem, selector, keepData ) {
- var node,
- nodes = selector ? jQuery.filter( selector, elem ) : elem,
- i = 0;
-
- for ( ; ( node = nodes[ i ] ) != null; i++ ) {
- if ( !keepData && node.nodeType === 1 ) {
- jQuery.cleanData( getAll( node ) );
- }
-
- if ( node.parentNode ) {
- if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
- setGlobalEval( getAll( node, "script" ) );
- }
- node.parentNode.removeChild( node );
- }
- }
-
- return elem;
-}
-
-jQuery.extend( {
- htmlPrefilter: function( html ) {
- return html.replace( rxhtmlTag, "<$1></$2>" );
- },
-
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var i, l, srcElements, destElements,
- clone = elem.cloneNode( true ),
- inPage = jQuery.contains( elem.ownerDocument, elem );
-
- // Fix IE cloning issues
- if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
- !jQuery.isXMLDoc( elem ) ) {
-
- // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- fixInput( srcElements[ i ], destElements[ i ] );
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- cloneCopyEvent( srcElements[ i ], destElements[ i ] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- // Return the cloned set
- return clone;
- },
-
- cleanData: function( elems ) {
- var data, elem, type,
- special = jQuery.event.special,
- i = 0;
-
- for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
- if ( acceptData( elem ) ) {
- if ( ( data = elem[ dataPriv.expando ] ) ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- // Support: Chrome <=35 - 45+
- // Assign undefined instead of using delete, see Data#remove
- elem[ dataPriv.expando ] = undefined;
- }
- if ( elem[ dataUser.expando ] ) {
-
- // Support: Chrome <=35 - 45+
- // Assign undefined instead of using delete, see Data#remove
- elem[ dataUser.expando ] = undefined;
- }
- }
- }
- }
-} );
-
-jQuery.fn.extend( {
- detach: function( selector ) {
- return remove( this, selector, true );
- },
-
- remove: function( selector ) {
- return remove( this, selector );
- },
-
- text: function( value ) {
- return access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().each( function() {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- this.textContent = value;
- }
- } );
- }, null, value, arguments.length );
- },
-
- append: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- } );
- },
-
- prepend: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- } );
- },
-
- before: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- } );
- },
-
- after: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- } );
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; ( elem = this[ i ] ) != null; i++ ) {
- if ( elem.nodeType === 1 ) {
-
- // Prevent memory leaks
- jQuery.cleanData( getAll( elem, false ) );
-
- // Remove any remaining nodes
- elem.textContent = "";
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function() {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- } );
- },
-
- html: function( value ) {
- return access( this, function( value ) {
- var elem = this[ 0 ] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined && elem.nodeType === 1 ) {
- return elem.innerHTML;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
-
- value = jQuery.htmlPrefilter( value );
-
- try {
- for ( ; i < l; i++ ) {
- elem = this[ i ] || {};
-
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch ( e ) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function() {
- var ignored = [];
-
- // Make the changes, replacing each non-ignored context element with the new content
- return domManip( this, arguments, function( elem ) {
- var parent = this.parentNode;
-
- if ( jQuery.inArray( this, ignored ) < 0 ) {
- jQuery.cleanData( getAll( this ) );
- if ( parent ) {
- parent.replaceChild( elem, this );
- }
- }
-
- // Force callback invocation
- }, ignored );
- }
-} );
-
-jQuery.each( {
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1,
- i = 0;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone( true );
- jQuery( insert[ i ] )[ original ]( elems );
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // .get() because push.apply(_, arraylike) throws on ancient WebKit
- push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-} );
-var rmargin = ( /^margin/ );
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-var getStyles = function( elem ) {
-
- // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
- // IE throws on elements created in popups
- // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
- var view = elem.ownerDocument.defaultView;
-
- if ( !view || !view.opener ) {
- view = window;
- }
-
- return view.getComputedStyle( elem );
- };
-
-
-
-( function() {
-
- // Executing both pixelPosition & boxSizingReliable tests require only one layout
- // so they're executed at the same time to save the second computation.
- function computeStyleTests() {
-
- // This is a singleton, we need to execute it only once
- if ( !div ) {
- return;
- }
-
- div.style.cssText =
- "box-sizing:border-box;" +
- "position:relative;display:block;" +
- "margin:auto;border:1px;padding:1px;" +
- "top:1%;width:50%";
- div.innerHTML = "";
- documentElement.appendChild( container );
-
- var divStyle = window.getComputedStyle( div );
- pixelPositionVal = divStyle.top !== "1%";
-
- // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
- reliableMarginLeftVal = divStyle.marginLeft === "2px";
- boxSizingReliableVal = divStyle.width === "4px";
-
- // Support: Android 4.0 - 4.3 only
- // Some styles come back with percentage values, even though they shouldn't
- div.style.marginRight = "50%";
- pixelMarginRightVal = divStyle.marginRight === "4px";
-
- documentElement.removeChild( container );
-
- // Nullify the div so it wouldn't be stored in the memory and
- // it will also be a sign that checks already performed
- div = null;
- }
-
- var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
- container = document.createElement( "div" ),
- div = document.createElement( "div" );
-
- // Finish early in limited (non-browser) environments
- if ( !div.style ) {
- return;
- }
-
- // Support: IE <=9 - 11 only
- // Style of cloned element affects source element cloned (#8908)
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
- "padding:0;margin-top:1px;position:absolute";
- container.appendChild( div );
-
- jQuery.extend( support, {
- pixelPosition: function() {
- computeStyleTests();
- return pixelPositionVal;
- },
- boxSizingReliable: function() {
- computeStyleTests();
- return boxSizingReliableVal;
- },
- pixelMarginRight: function() {
- computeStyleTests();
- return pixelMarginRightVal;
- },
- reliableMarginLeft: function() {
- computeStyleTests();
- return reliableMarginLeftVal;
- }
- } );
-} )();
-
-
-function curCSS( elem, name, computed ) {
- var width, minWidth, maxWidth, ret,
- style = elem.style;
-
- computed = computed || getStyles( elem );
-
- // Support: IE <=9 only
- // getPropertyValue is only needed for .css('filter') (#12537)
- if ( computed ) {
- ret = computed.getPropertyValue( name ) || computed[ name ];
-
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Android Browser returns percentage for some values,
- // but width seems to be reliably pixels.
- // This is against the CSSOM draft spec:
- // https://drafts.csswg.org/cssom/#resolved-values
- if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- return ret !== undefined ?
-
- // Support: IE <=9 - 11 only
- // IE returns zIndex value as an integer.
- ret + "" :
- ret;
-}
-
-
-function addGetHookIf( conditionFn, hookFn ) {
-
- // Define the hook, we'll check on the first run if it's really needed.
- return {
- get: function() {
- if ( conditionFn() ) {
-
- // Hook not needed (or it's not possible to use it due
- // to missing dependency), remove it.
- delete this.get;
- return;
- }
-
- // Hook needed; redefine it so that the support test is not executed again.
- return ( this.get = hookFn ).apply( this, arguments );
- }
- };
-}
-
-
-var
-
- // Swappable if display is none or starts with table
- // except "table", "table-cell", or "table-caption"
- // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- },
-
- cssPrefixes = [ "Webkit", "Moz", "ms" ],
- emptyStyle = document.createElement( "div" ).style;
-
-// Return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( name ) {
-
- // Shortcut for names that are not vendor prefixed
- if ( name in emptyStyle ) {
- return name;
- }
-
- // Check for vendor prefixed names
- var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in emptyStyle ) {
- return name;
- }
- }
-}
-
-function setPositiveNumber( elem, value, subtract ) {
-
- // Any relative (+/-) values have already been
- // normalized at this point
- var matches = rcssNum.exec( value );
- return matches ?
-
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
- value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
- var i,
- val = 0;
-
- // If we already have the right measurement, avoid augmentation
- if ( extra === ( isBorderBox ? "border" : "content" ) ) {
- i = 4;
-
- // Otherwise initialize for horizontal or vertical properties
- } else {
- i = name === "width" ? 1 : 0;
- }
-
- for ( ; i < 4; i += 2 ) {
-
- // Both box models exclude margin, so add it if we want it
- if ( extra === "margin" ) {
- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
- }
-
- if ( isBorderBox ) {
-
- // border-box includes padding, so remove it if we want content
- if ( extra === "content" ) {
- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // At this point, extra isn't border nor margin, so remove border
- if ( extra !== "margin" ) {
- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- } else {
-
- // At this point, extra isn't content, so add padding
- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // At this point, extra isn't content nor padding, so add border
- if ( extra !== "padding" ) {
- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property, which is equivalent to the border-box value
- var val,
- valueIsBorderBox = true,
- styles = getStyles( elem ),
- isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
- // Support: IE <=11 only
- // Running getBoundingClientRect on a disconnected node
- // in IE throws an error.
- if ( elem.getClientRects().length ) {
- val = elem.getBoundingClientRect()[ name ];
- }
-
- // Some non-html elements return undefined for offsetWidth, so check for null/undefined
- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
- if ( val <= 0 || val == null ) {
-
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, styles );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test( val ) ) {
- return val;
- }
-
- // Check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox &&
- ( support.boxSizingReliable() || val === elem.style[ name ] );
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
- }
-
- // Use the active box-sizing model to add/subtract irrelevant styles
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles
- )
- ) + "px";
-}
-
-jQuery.extend( {
-
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
-
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "animationIterationCount": true,
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- "float": "cssFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
-
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
-
- name = jQuery.cssProps[ origName ] ||
- ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
-
- // Gets hook for the prefixed version, then unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // Convert "+=" or "-=" to relative numbers (#7345)
- if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
- value = adjustCSS( elem, name, ret );
-
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that null and NaN values aren't set (#7116)
- if ( value == null || value !== value ) {
- return;
- }
-
- // If a number was passed in, add the unit (except for certain CSS properties)
- if ( type === "number" ) {
- value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
- }
-
- // background-* props affect original clone's values
- if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !( "set" in hooks ) ||
- ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
-
- style[ name ] = value;
- }
-
- } else {
-
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks &&
- ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
-
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var val, num, hooks,
- origName = jQuery.camelCase( name );
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[ origName ] ||
- ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
-
- // Try prefixed name followed by the unprefixed name
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- // Convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Make numeric if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || isFinite( num ) ? num || 0 : val;
- }
- return val;
- }
-} );
-
-jQuery.each( [ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
-
- // Certain elements can have dimension info if we invisibly show them
- // but it must have a current display style that would benefit
- return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
-
- // Support: Safari 8+
- // Table columns in Safari have non-zero offsetWidth & zero
- // getBoundingClientRect().width unless display is changed.
- // Support: IE <=11 only
- // Running getBoundingClientRect on a disconnected node
- // in IE throws an error.
- ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
- swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- } ) :
- getWidthOrHeight( elem, name, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var matches,
- styles = extra && getStyles( elem ),
- subtract = extra && augmentWidthOrHeight(
- elem,
- name,
- extra,
- jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- styles
- );
-
- // Convert to pixels if value adjustment is needed
- if ( subtract && ( matches = rcssNum.exec( value ) ) &&
- ( matches[ 3 ] || "px" ) !== "px" ) {
-
- elem.style[ name ] = value;
- value = jQuery.css( elem, name );
- }
-
- return setPositiveNumber( elem, value, subtract );
- }
- };
-} );
-
-jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
- function( elem, computed ) {
- if ( computed ) {
- return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
- elem.getBoundingClientRect().left -
- swap( elem, { marginLeft: 0 }, function() {
- return elem.getBoundingClientRect().left;
- } )
- ) + "px";
- }
- }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each( {
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // Assumes a single number if not a string
- parts = typeof value === "string" ? value.split( " " ) : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-} );
-
-jQuery.fn.extend( {
- css: function( name, value ) {
- return access( this, function( elem, name, value ) {
- var styles, len,
- map = {},
- i = 0;
-
- if ( jQuery.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- }
-} );
-
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || jQuery.easing._default;
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- // Use a property on the element directly when it is not a DOM element,
- // or when there is no matching style property that exists.
- if ( tween.elem.nodeType !== 1 ||
- tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
- return tween.elem[ tween.prop ];
- }
-
- // Passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails.
- // Simple values such as "10px" are parsed to Float;
- // complex values such as "rotate(1rad)" are returned as-is.
- result = jQuery.css( tween.elem, tween.prop, "" );
-
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
-
- // Use step hook for back compat.
- // Use cssHook if its there.
- // Use .style if available and use plain properties where available.
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.nodeType === 1 &&
- ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
- jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Support: IE <=9 only
-// Panic based approach to setting things on disconnected nodes
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p * Math.PI ) / 2;
- },
- _default: "swing"
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
- fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rrun = /queueHooks$/;
-
-function raf() {
- if ( timerId ) {
- window.requestAnimationFrame( raf );
- jQuery.fx.tick();
- }
-}
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- window.setTimeout( function() {
- fxNow = undefined;
- } );
- return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- i = 0,
- attrs = { height: type };
-
- // If we include width, step value is 1 to do all cssExpand values,
- // otherwise step value is 2 to skip over Left and Right
- includeWidth = includeWidth ? 1 : 0;
- for ( ; i < 4; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-function createTween( value, prop, animation ) {
- var tween,
- collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
-
- // We're done with this property
- return tween;
- }
- }
-}
-
-function defaultPrefilter( elem, props, opts ) {
- var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
- isBox = "width" in props || "height" in props,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHiddenWithinTree( elem ),
- dataShow = dataPriv.get( elem, "fxshow" );
-
- // Queue-skipping animations hijack the fx hooks
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always( function() {
-
- // Ensure the complete handler is called before this completes
- anim.always( function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- } );
- } );
- }
-
- // Detect show/hide animations
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.test( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
-
- // Pretend to be hidden if this is a "show" and
- // there is still data from a stopped show/hide
- if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
- hidden = true;
-
- // Ignore all other no-op show/hide data
- } else {
- continue;
- }
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
- }
- }
-
- // Bail out if this is a no-op like .hide().hide()
- propTween = !jQuery.isEmptyObject( props );
- if ( !propTween && jQuery.isEmptyObject( orig ) ) {
- return;
- }
-
- // Restrict "overflow" and "display" styles during box animations
- if ( isBox && elem.nodeType === 1 ) {
-
- // Support: IE <=9 - 11, Edge 12 - 13
- // Record all 3 overflow attributes because IE does not infer the shorthand
- // from identically-valued overflowX and overflowY
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Identify a display type, preferring old show/hide data over the CSS cascade
- restoreDisplay = dataShow && dataShow.display;
- if ( restoreDisplay == null ) {
- restoreDisplay = dataPriv.get( elem, "display" );
- }
- display = jQuery.css( elem, "display" );
- if ( display === "none" ) {
- if ( restoreDisplay ) {
- display = restoreDisplay;
- } else {
-
- // Get nonempty value(s) by temporarily forcing visibility
- showHide( [ elem ], true );
- restoreDisplay = elem.style.display || restoreDisplay;
- display = jQuery.css( elem, "display" );
- showHide( [ elem ] );
- }
- }
-
- // Animate inline elements as inline-block
- if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
- if ( jQuery.css( elem, "float" ) === "none" ) {
-
- // Restore the original display value at the end of pure show/hide animations
- if ( !propTween ) {
- anim.done( function() {
- style.display = restoreDisplay;
- } );
- if ( restoreDisplay == null ) {
- display = style.display;
- restoreDisplay = display === "none" ? "" : display;
- }
- }
- style.display = "inline-block";
- }
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- anim.always( function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- } );
- }
-
- // Implement show/hide animations
- propTween = false;
- for ( prop in orig ) {
-
- // General show/hide setup for this element animation
- if ( !propTween ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
- }
-
- // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
-
- // Show elements before animating them
- if ( hidden ) {
- showHide( [ elem ], true );
- }
-
- /* eslint-disable no-loop-func */
-
- anim.done( function() {
-
- /* eslint-enable no-loop-func */
-
- // The final step of a "hide" animation is actually hiding the element
- if ( !hidden ) {
- showHide( [ elem ] );
- }
- dataPriv.remove( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- } );
- }
-
- // Per-property setup
- propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = propTween.start;
- if ( hidden ) {
- propTween.end = propTween.start;
- propTween.start = 0;
- }
- }
- }
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // Not quite $.extend, this won't overwrite existing keys.
- // Reusing 'index' because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = Animation.prefilters.length,
- deferred = jQuery.Deferred().always( function() {
-
- // Don't match elem in the :animated selector
- delete tick.elem;
- } ),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-
- // Support: Android 2.3 only
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ] );
-
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise( {
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, {
- specialEasing: {},
- easing: jQuery.easing._default
- }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
-
- // If we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // Resolve when we played the last frame; otherwise, reject
- if ( gotoEnd ) {
- deferred.notifyWith( elem, [ animation, 1, 0 ] );
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- } ),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length; index++ ) {
- result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- if ( jQuery.isFunction( result.stop ) ) {
- jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
- jQuery.proxy( result.stop, result );
- }
- return result;
- }
- }
-
- jQuery.map( props, createTween, animation );
-
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- } )
- );
-
- // attach callbacks from options
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
- tweeners: {
- "*": [ function( prop, value ) {
- var tween = this.createTween( prop, value );
- adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
- return tween;
- } ]
- },
-
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.match( rnothtmlwhite );
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length; index++ ) {
- prop = props[ index ];
- Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
- Animation.tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilters: [ defaultPrefilter ],
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- Animation.prefilters.unshift( callback );
- } else {
- Animation.prefilters.push( callback );
- }
- }
-} );
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- // Go to the end state if fx are off or if document is hidden
- if ( jQuery.fx.off || document.hidden ) {
- opt.duration = 0;
-
- } else {
- if ( typeof opt.duration !== "number" ) {
- if ( opt.duration in jQuery.fx.speeds ) {
- opt.duration = jQuery.fx.speeds[ opt.duration ];
-
- } else {
- opt.duration = jQuery.fx.speeds._default;
- }
- }
- }
-
- // Normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.fn.extend( {
- fadeTo: function( speed, to, easing, callback ) {
-
- // Show any hidden elements after setting opacity to 0
- return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
-
- // Animate to the value specified
- .end().animate( { opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
-
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations, or finishing resolves immediately
- if ( empty || dataPriv.get( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each( function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = dataPriv.get( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this &&
- ( type == null || timers[ index ].queue === type ) ) {
-
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // Start the next in the queue if the last step wasn't forced.
- // Timers currently will call their complete callbacks, which
- // will dequeue but only if they were gotoEnd.
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- } );
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each( function() {
- var index,
- data = dataPriv.get( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // Enable finishing flag on private data
- data.finish = true;
-
- // Empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- // Look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // Look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // Turn off finishing flag
- delete data.finish;
- } );
- }
-} );
-
-jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-} );
-
-// Generate shortcuts for custom animations
-jQuery.each( {
- slideDown: genFx( "show" ),
- slideUp: genFx( "hide" ),
- slideToggle: genFx( "toggle" ),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-} );
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
- var timer,
- i = 0,
- timers = jQuery.timers;
-
- fxNow = jQuery.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
-
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- jQuery.timers.push( timer );
- if ( timer() ) {
- jQuery.fx.start();
- } else {
- jQuery.timers.pop();
- }
-};
-
-jQuery.fx.interval = 13;
-jQuery.fx.start = function() {
- if ( !timerId ) {
- timerId = window.requestAnimationFrame ?
- window.requestAnimationFrame( raf ) :
- window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
-};
-
-jQuery.fx.stop = function() {
- if ( window.cancelAnimationFrame ) {
- window.cancelAnimationFrame( timerId );
- } else {
- window.clearInterval( timerId );
- }
-
- timerId = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
-
- // Default speed
- _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = window.setTimeout( next, time );
- hooks.stop = function() {
- window.clearTimeout( timeout );
- };
- } );
-};
-
-
-( function() {
- var input = document.createElement( "input" ),
- select = document.createElement( "select" ),
- opt = select.appendChild( document.createElement( "option" ) );
-
- input.type = "checkbox";
-
- // Support: Android <=4.3 only
- // Default value for a checkbox should be "on"
- support.checkOn = input.value !== "";
-
- // Support: IE <=11 only
- // Must access selectedIndex to make default options select
- support.optSelected = opt.selected;
-
- // Support: IE <=11 only
- // An input loses its value after becoming a radio
- input = document.createElement( "input" );
- input.value = "t";
- input.type = "radio";
- support.radioValue = input.value === "t";
-} )();
-
-
-var boolHook,
- attrHandle = jQuery.expr.attrHandle;
-
-jQuery.fn.extend( {
- attr: function( name, value ) {
- return access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each( function() {
- jQuery.removeAttr( this, name );
- } );
- }
-} );
-
-jQuery.extend( {
- attr: function( elem, name, value ) {
- var ret, hooks,
- nType = elem.nodeType;
-
- // Don't get/set attributes on text, comment and attribute nodes
- if ( nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === "undefined" ) {
- return jQuery.prop( elem, name, value );
- }
-
- // Attribute hooks are determined by the lowercase version
- // Grab necessary hook if one is defined
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
- }
-
- if ( value !== undefined ) {
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- return;
- }
-
- if ( hooks && "set" in hooks &&
- ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
- return ret;
- }
-
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
- return ret;
- }
-
- ret = jQuery.find.attr( elem, name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ? undefined : ret;
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !support.radioValue && value === "radio" &&
- jQuery.nodeName( elem, "input" ) ) {
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- },
-
- removeAttr: function( elem, value ) {
- var name,
- i = 0,
-
- // Attribute names can contain non-HTML whitespace characters
- // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
- attrNames = value && value.match( rnothtmlwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( ( name = attrNames[ i++ ] ) ) {
- elem.removeAttribute( name );
- }
- }
- }
-} );
-
-// Hooks for boolean attributes
-boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
-
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- elem.setAttribute( name, name );
- }
- return name;
- }
-};
-
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
- var getter = attrHandle[ name ] || jQuery.find.attr;
-
- attrHandle[ name ] = function( elem, name, isXML ) {
- var ret, handle,
- lowercaseName = name.toLowerCase();
-
- if ( !isXML ) {
-
- // Avoid an infinite loop by temporarily removing this function from the getter
- handle = attrHandle[ lowercaseName ];
- attrHandle[ lowercaseName ] = ret;
- ret = getter( elem, name, isXML ) != null ?
- lowercaseName :
- null;
- attrHandle[ lowercaseName ] = handle;
- }
- return ret;
- };
-} );
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button)$/i,
- rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend( {
- prop: function( name, value ) {
- return access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- return this.each( function() {
- delete this[ jQuery.propFix[ name ] || name ];
- } );
- }
-} );
-
-jQuery.extend( {
- prop: function( elem, name, value ) {
- var ret, hooks,
- nType = elem.nodeType;
-
- // Don't get/set properties on text, comment and attribute nodes
- if ( nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks &&
- ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
- return ret;
- }
-
- return ( elem[ name ] = value );
- }
-
- if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
- return ret;
- }
-
- return elem[ name ];
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
-
- // Support: IE <=9 - 11 only
- // elem.tabIndex doesn't always return the
- // correct value when it hasn't been explicitly set
- // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- // Use proper attribute retrieval(#12072)
- var tabindex = jQuery.find.attr( elem, "tabindex" );
-
- if ( tabindex ) {
- return parseInt( tabindex, 10 );
- }
-
- if (
- rfocusable.test( elem.nodeName ) ||
- rclickable.test( elem.nodeName ) &&
- elem.href
- ) {
- return 0;
- }
-
- return -1;
- }
- }
- },
-
- propFix: {
- "for": "htmlFor",
- "class": "className"
- }
-} );
-
-// Support: IE <=11 only
-// Accessing the selectedIndex property
-// forces the browser to respect setting selected
-// on the option
-// The getter ensures a default option is selected
-// when in an optgroup
-// eslint rule "no-unused-expressions" is disabled for this code
-// since it considers such accessions noop
-if ( !support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
-
- /* eslint no-unused-expressions: "off" */
-
- var parent = elem.parentNode;
- if ( parent && parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- return null;
- },
- set: function( elem ) {
-
- /* eslint no-unused-expressions: "off" */
-
- var parent = elem.parentNode;
- if ( parent ) {
- parent.selectedIndex;
-
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- }
- };
-}
-
-jQuery.each( [
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
-], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
-} );
-
-
-
-
- // Strip and collapse whitespace according to HTML spec
- // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
- function stripAndCollapse( value ) {
- var tokens = value.match( rnothtmlwhite ) || [];
- return tokens.join( " " );
- }
-
-
-function getClass( elem ) {
- return elem.getAttribute && elem.getAttribute( "class" ) || "";
-}
-
-jQuery.fn.extend( {
- addClass: function( value ) {
- var classes, elem, cur, curValue, clazz, j, finalValue,
- i = 0;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each( function( j ) {
- jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
- } );
- }
-
- if ( typeof value === "string" && value ) {
- classes = value.match( rnothtmlwhite ) || [];
-
- while ( ( elem = this[ i++ ] ) ) {
- curValue = getClass( elem );
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
-
- if ( cur ) {
- j = 0;
- while ( ( clazz = classes[ j++ ] ) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = stripAndCollapse( cur );
- if ( curValue !== finalValue ) {
- elem.setAttribute( "class", finalValue );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, curValue, clazz, j, finalValue,
- i = 0;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each( function( j ) {
- jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
- } );
- }
-
- if ( !arguments.length ) {
- return this.attr( "class", "" );
- }
-
- if ( typeof value === "string" && value ) {
- classes = value.match( rnothtmlwhite ) || [];
-
- while ( ( elem = this[ i++ ] ) ) {
- curValue = getClass( elem );
-
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
-
- if ( cur ) {
- j = 0;
- while ( ( clazz = classes[ j++ ] ) ) {
-
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = stripAndCollapse( cur );
- if ( curValue !== finalValue ) {
- elem.setAttribute( "class", finalValue );
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value;
-
- if ( typeof stateVal === "boolean" && type === "string" ) {
- return stateVal ? this.addClass( value ) : this.removeClass( value );
- }
-
- if ( jQuery.isFunction( value ) ) {
- return this.each( function( i ) {
- jQuery( this ).toggleClass(
- value.call( this, i, getClass( this ), stateVal ),
- stateVal
- );
- } );
- }
-
- return this.each( function() {
- var className, i, self, classNames;
-
- if ( type === "string" ) {
-
- // Toggle individual class names
- i = 0;
- self = jQuery( this );
- classNames = value.match( rnothtmlwhite ) || [];
-
- while ( ( className = classNames[ i++ ] ) ) {
-
- // Check each className given, space separated list
- if ( self.hasClass( className ) ) {
- self.removeClass( className );
- } else {
- self.addClass( className );
- }
- }
-
- // Toggle whole class name
- } else if ( value === undefined || type === "boolean" ) {
- className = getClass( this );
- if ( className ) {
-
- // Store className if set
- dataPriv.set( this, "__className__", className );
- }
-
- // If the element has a class name or if we're passed `false`,
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- if ( this.setAttribute ) {
- this.setAttribute( "class",
- className || value === false ?
- "" :
- dataPriv.get( this, "__className__" ) || ""
- );
- }
- }
- } );
- },
-
- hasClass: function( selector ) {
- var className, elem,
- i = 0;
-
- className = " " + selector + " ";
- while ( ( elem = this[ i++ ] ) ) {
- if ( elem.nodeType === 1 &&
- ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- }
-} );
-
-
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend( {
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[ 0 ];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] ||
- jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks &&
- "get" in hooks &&
- ( ret = hooks.get( elem, "value" ) ) !== undefined
- ) {
- return ret;
- }
-
- ret = elem.value;
-
- // Handle most common string cases
- if ( typeof ret === "string" ) {
- return ret.replace( rreturn, "" );
- }
-
- // Handle cases where value is null/undef or number
- return ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each( function( i ) {
- var val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
-
- } else if ( typeof val === "number" ) {
- val += "";
-
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map( val, function( value ) {
- return value == null ? "" : value + "";
- } );
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- } );
- }
-} );
-
-jQuery.extend( {
- valHooks: {
- option: {
- get: function( elem ) {
-
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
-
- // Support: IE <=10 - 11 only
- // option.text throws exceptions (#14686, #14858)
- // Strip and collapse whitespace
- // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
- stripAndCollapse( jQuery.text( elem ) );
- }
- },
- select: {
- get: function( elem ) {
- var value, option, i,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one",
- values = one ? null : [],
- max = one ? index + 1 : options.length;
-
- if ( index < 0 ) {
- i = max;
-
- } else {
- i = one ? index : 0;
- }
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // Support: IE <=9 only
- // IE8-9 doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
-
- // Don't return options that are disabled or in a disabled optgroup
- !option.disabled &&
- ( !option.parentNode.disabled ||
- !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
-
- while ( i-- ) {
- option = options[ i ];
-
- /* eslint-disable no-cond-assign */
-
- if ( option.selected =
- jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
- ) {
- optionSet = true;
- }
-
- /* eslint-enable no-cond-assign */
- }
-
- // Force browsers to behave consistently when non-matching value is set
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- }
-} );
-
-// Radios and checkboxes getter/setter
-jQuery.each( [ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
- }
- }
- };
- if ( !support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
- return elem.getAttribute( "value" ) === null ? "on" : elem.value;
- };
- }
-} );
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
-
-jQuery.extend( jQuery.event, {
-
- trigger: function( event, data, elem, onlyHandlers ) {
-
- var i, cur, tmp, bubbleType, ontype, handle, special,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf( "." ) > -1 ) {
-
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split( "." );
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf( ":" ) < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join( "." );
- event.rnamespace = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === ( elem.ownerDocument || document ) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
-
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
- dataPriv.get( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( ( !special._default ||
- special._default.apply( eventPath.pop(), data ) === false ) &&
- acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name as the event.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- elem[ type ]();
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- // Piggyback on a donor event to simulate a different one
- // Used only for `focus(in | out)` events
- simulate: function( type, elem, event ) {
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true
- }
- );
-
- jQuery.event.trigger( e, null, elem );
- }
-
-} );
-
-jQuery.fn.extend( {
-
- trigger: function( type, data ) {
- return this.each( function() {
- jQuery.event.trigger( type, data, this );
- } );
- },
- triggerHandler: function( type, data ) {
- var elem = this[ 0 ];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-} );
-
-
-jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup contextmenu" ).split( " " ),
- function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-} );
-
-jQuery.fn.extend( {
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-} );
-
-
-
-
-support.focusin = "onfocusin" in window;
-
-
-// Support: Firefox <=44
-// Firefox doesn't have focus(in | out) events
-// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
-//
-// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
-// focus(in | out) events fire after focus & blur events,
-// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
-// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
-if ( !support.focusin ) {
- jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- var doc = this.ownerDocument || this,
- attaches = dataPriv.access( doc, fix );
-
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this,
- attaches = dataPriv.access( doc, fix ) - 1;
-
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- dataPriv.remove( doc, fix );
-
- } else {
- dataPriv.access( doc, fix, attaches );
- }
- }
- };
- } );
-}
-var location = window.location;
-
-var nonce = jQuery.now();
-
-var rquery = ( /\?/ );
-
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
- var xml;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
-
- // Support: IE 9 - 11 only
- // IE throws on parseFromString with invalid input.
- try {
- xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
- } catch ( e ) {
- xml = undefined;
- }
-
- if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
-};
-
-
-var
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( jQuery.isArray( obj ) ) {
-
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
-
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
-
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams(
- prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
- v,
- traditional,
- add
- );
- }
- } );
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
-
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
-
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, valueOrFunction ) {
-
- // If value is a function, invoke it and use its return value
- var value = jQuery.isFunction( valueOrFunction ) ?
- valueOrFunction() :
- valueOrFunction;
-
- s[ s.length ] = encodeURIComponent( key ) + "=" +
- encodeURIComponent( value == null ? "" : value );
- };
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- } );
-
- } else {
-
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" );
-};
-
-jQuery.fn.extend( {
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map( function() {
-
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- } )
- .filter( function() {
- var type = this.type;
-
- // Use .is( ":disabled" ) so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !rcheckableType.test( type ) );
- } )
- .map( function( i, elem ) {
- var val = jQuery( this ).val();
-
- if ( val == null ) {
- return null;
- }
-
- if ( jQuery.isArray( val ) ) {
- return jQuery.map( val, function( val ) {
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- } );
- }
-
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- } ).get();
- }
-} );
-
-
-var
- r20 = /%20/g,
- rhash = /#.*$/,
- rantiCache = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
-
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat( "*" ),
-
- // Anchor tag for parsing the document origin
- originAnchor = document.createElement( "a" );
- originAnchor.href = location.href;
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
-
- if ( jQuery.isFunction( func ) ) {
-
- // For each dataType in the dataTypeExpression
- while ( ( dataType = dataTypes[ i++ ] ) ) {
-
- // Prepend if requested
- if ( dataType[ 0 ] === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
-
- // Otherwise append
- } else {
- ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if ( typeof dataTypeOrTransport === "string" &&
- !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
-
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- } );
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var ct, type, finalDataType, firstDataType,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while ( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
-
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
-
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
-
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while ( current ) {
-
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- // Apply the dataFilter if provided
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if ( current ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current === "*" ) {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
-
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s.throws ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return {
- state: "parsererror",
- error: conv ? e : "No conversion from " + prev + " to " + current
- };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
-}
-
-jQuery.extend( {
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: location.href,
- type: "GET",
- isLocal: rlocalProtocol.test( location.protocol ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /\bxml\b/,
- html: /\bhtml/,
- json: /\bjson\b/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": JSON.parse,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var transport,
-
- // URL without anti-cache param
- cacheURL,
-
- // Response headers
- responseHeadersString,
- responseHeaders,
-
- // timeout handle
- timeoutTimer,
-
- // Url cleanup var
- urlAnchor,
-
- // Request state (becomes false upon send and true upon completion)
- completed,
-
- // To know if global events are to be dispatched
- fireGlobals,
-
- // Loop variable
- i,
-
- // uncached part of the url
- uncached,
-
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
-
- // Callbacks context
- callbackContext = s.context || s,
-
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context &&
- ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
-
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks( "once memory" ),
-
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
-
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
-
- // Default abort message
- strAbort = "canceled",
-
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( completed ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match == null ? null : match;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return completed ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( completed == null ) {
- name = requestHeadersNames[ name.toLowerCase() ] =
- requestHeadersNames[ name.toLowerCase() ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( completed == null ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( completed ) {
-
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- } else {
-
- // Lazy-add the new callbacks in a way that preserves old ones
- for ( code in map ) {
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR );
-
- // Add protocol if not provided (prefilters might expect it)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || location.href ) + "" )
- .replace( rprotocol, location.protocol + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
-
- // A cross-domain request is in order when the origin doesn't match the current origin.
- if ( s.crossDomain == null ) {
- urlAnchor = document.createElement( "a" );
-
- // Support: IE <=8 - 11, Edge 12 - 13
- // IE throws exception on accessing the href property if url is malformed,
- // e.g. http://example.com:80x/
- try {
- urlAnchor.href = s.url;
-
- // Support: IE <=8 - 11 only
- // Anchor's host property isn't correctly set when s.url is relative
- urlAnchor.href = urlAnchor.href;
- s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
- urlAnchor.protocol + "//" + urlAnchor.host;
- } catch ( e ) {
-
- // If there is an error parsing the URL, assume it is crossDomain,
- // it can be rejected by the transport if it is invalid
- s.crossDomain = true;
- }
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( completed ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
- fireGlobals = jQuery.event && s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- // Remove hash to simplify url manipulation
- cacheURL = s.url.replace( rhash, "" );
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // Remember the hash so we can put it back
- uncached = s.url.slice( cacheURL.length );
-
- // If data is available, append data to url
- if ( s.data ) {
- cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
-
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add or update anti-cache param if needed
- if ( s.cache === false ) {
- cacheURL = cacheURL.replace( rantiCache, "$1" );
- uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
- }
-
- // Put hash and anti-cache on the URL that will be requested (gh-1732)
- s.url = cacheURL + uncached;
-
- // Change '%20' to '+' if this is encoded form body content (gh-2658)
- } else if ( s.data && s.processData &&
- ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
- s.data = s.data.replace( r20, "+" );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
- s.accepts[ s.dataTypes[ 0 ] ] +
- ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend &&
- ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
-
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // Aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- completeDeferred.add( s.complete );
- jqXHR.done( s.success );
- jqXHR.fail( s.error );
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
-
- // If request was aborted inside ajaxSend, stop there
- if ( completed ) {
- return jqXHR;
- }
-
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = window.setTimeout( function() {
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- completed = false;
- transport.send( requestHeaders, done );
- } catch ( e ) {
-
- // Rethrow post-completion exceptions
- if ( completed ) {
- throw e;
- }
-
- // Propagate others as results
- done( -1, e );
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Ignore repeat invocations
- if ( completed ) {
- return;
- }
-
- completed = true;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- window.clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- // If successful, handle type chaining
- if ( isSuccess ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader( "Last-Modified" );
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader( "etag" );
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
-
- // Extract error from statusText and normalize for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
-} );
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
-
- // Shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- // The url can be an options object (which then must have .url)
- return jQuery.ajax( jQuery.extend( {
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- }, jQuery.isPlainObject( url ) && url ) );
- };
-} );
-
-
-jQuery._evalUrl = function( url ) {
- return jQuery.ajax( {
- url: url,
-
- // Make this explicit, since user can override this through ajaxSetup (#11264)
- type: "GET",
- dataType: "script",
- cache: true,
- async: false,
- global: false,
- "throws": true
- } );
-};
-
-
-jQuery.fn.extend( {
- wrapAll: function( html ) {
- var wrap;
-
- if ( this[ 0 ] ) {
- if ( jQuery.isFunction( html ) ) {
- html = html.call( this[ 0 ] );
- }
-
- // The elements to wrap the target around
- wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
-
- if ( this[ 0 ].parentNode ) {
- wrap.insertBefore( this[ 0 ] );
- }
-
- wrap.map( function() {
- var elem = this;
-
- while ( elem.firstElementChild ) {
- elem = elem.firstElementChild;
- }
-
- return elem;
- } ).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each( function( i ) {
- jQuery( this ).wrapInner( html.call( this, i ) );
- } );
- }
-
- return this.each( function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- } );
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each( function( i ) {
- jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
- } );
- },
-
- unwrap: function( selector ) {
- this.parent( selector ).not( "body" ).each( function() {
- jQuery( this ).replaceWith( this.childNodes );
- } );
- return this;
- }
-} );
-
-
-jQuery.expr.pseudos.hidden = function( elem ) {
- return !jQuery.expr.pseudos.visible( elem );
-};
-jQuery.expr.pseudos.visible = function( elem ) {
- return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
-};
-
-
-
-
-jQuery.ajaxSettings.xhr = function() {
- try {
- return new window.XMLHttpRequest();
- } catch ( e ) {}
-};
-
-var xhrSuccessStatus = {
-
- // File protocol always yields status code 0, assume 200
- 0: 200,
-
- // Support: IE <=9 only
- // #1450: sometimes IE returns 1223 when it should be 204
- 1223: 204
- },
- xhrSupported = jQuery.ajaxSettings.xhr();
-
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-support.ajax = xhrSupported = !!xhrSupported;
-
-jQuery.ajaxTransport( function( options ) {
- var callback, errorCallback;
-
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( support.cors || xhrSupported && !options.crossDomain ) {
- return {
- send: function( headers, complete ) {
- var i,
- xhr = options.xhr();
-
- xhr.open(
- options.type,
- options.url,
- options.async,
- options.username,
- options.password
- );
-
- // Apply custom fields if provided
- if ( options.xhrFields ) {
- for ( i in options.xhrFields ) {
- xhr[ i ] = options.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( options.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( options.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Set headers
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
-
- // Callback
- callback = function( type ) {
- return function() {
- if ( callback ) {
- callback = errorCallback = xhr.onload =
- xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
-
- if ( type === "abort" ) {
- xhr.abort();
- } else if ( type === "error" ) {
-
- // Support: IE <=9 only
- // On a manual native abort, IE9 throws
- // errors on any property access that is not readyState
- if ( typeof xhr.status !== "number" ) {
- complete( 0, "error" );
- } else {
- complete(
-
- // File: protocol always yields status 0; see #8605, #14207
- xhr.status,
- xhr.statusText
- );
- }
- } else {
- complete(
- xhrSuccessStatus[ xhr.status ] || xhr.status,
- xhr.statusText,
-
- // Support: IE <=9 only
- // IE9 has no XHR2 but throws on binary (trac-11426)
- // For XHR2 non-text, let the caller handle it (gh-2498)
- ( xhr.responseType || "text" ) !== "text" ||
- typeof xhr.responseText !== "string" ?
- { binary: xhr.response } :
- { text: xhr.responseText },
- xhr.getAllResponseHeaders()
- );
- }
- }
- };
- };
-
- // Listen to events
- xhr.onload = callback();
- errorCallback = xhr.onerror = callback( "error" );
-
- // Support: IE 9 only
- // Use onreadystatechange to replace onabort
- // to handle uncaught aborts
- if ( xhr.onabort !== undefined ) {
- xhr.onabort = errorCallback;
- } else {
- xhr.onreadystatechange = function() {
-
- // Check readyState before timeout as it changes
- if ( xhr.readyState === 4 ) {
-
- // Allow onerror to be called first,
- // but that will not handle a native abort
- // Also, save errorCallback to a variable
- // as xhr.onerror cannot be accessed
- window.setTimeout( function() {
- if ( callback ) {
- errorCallback();
- }
- } );
- }
- };
- }
-
- // Create the abort callback
- callback = callback( "abort" );
-
- try {
-
- // Do send the request (this may raise an exception)
- xhr.send( options.hasContent && options.data || null );
- } catch ( e ) {
-
- // #14683: Only rethrow if this hasn't been notified as an error yet
- if ( callback ) {
- throw e;
- }
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-} );
-
-
-
-
-// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
-jQuery.ajaxPrefilter( function( s ) {
- if ( s.crossDomain ) {
- s.contents.script = false;
- }
-} );
-
-// Install script dataType
-jQuery.ajaxSetup( {
- accepts: {
- script: "text/javascript, application/javascript, " +
- "application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /\b(?:java|ecma)script\b/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-} );
-
-// Handle cache's special case and crossDomain
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- }
-} );
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function( s ) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
- var script, callback;
- return {
- send: function( _, complete ) {
- script = jQuery( "<script>" ).prop( {
- charset: s.scriptCharset,
- src: s.url
- } ).on(
- "load error",
- callback = function( evt ) {
- script.remove();
- callback = null;
- if ( evt ) {
- complete( evt.type === "error" ? 404 : 200, evt.type );
- }
- }
- );
-
- // Use native DOM manipulation to avoid our domManip AJAX trickery
- document.head.appendChild( script[ 0 ] );
- },
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-} );
-
-
-
-
-var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup( {
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
-} );
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" &&
- ( s.contentType || "" )
- .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
- rjsonp.test( s.data ) && "data"
- );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- // Insert callback into url or form data
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters[ "script json" ] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // Force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always( function() {
-
- // If previous value didn't exist - remove it
- if ( overwritten === undefined ) {
- jQuery( window ).removeProp( callbackName );
-
- // Otherwise restore preexisting value
- } else {
- window[ callbackName ] = overwritten;
- }
-
- // Save back as free
- if ( s[ callbackName ] ) {
-
- // Make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // Save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- } );
-
- // Delegate to script
- return "script";
- }
-} );
-
-
-
-
-// Support: Safari 8 only
-// In Safari 8 documents created via document.implementation.createHTMLDocument
-// collapse sibling forms: the second one becomes a child of the first one.
-// Because of that, this security measure has to be disabled in Safari 8.
-// https://bugs.webkit.org/show_bug.cgi?id=137337
-support.createHTMLDocument = ( function() {
- var body = document.implementation.createHTMLDocument( "" ).body;
- body.innerHTML = "<form></form><form></form>";
- return body.childNodes.length === 2;
-} )();
-
-
-// Argument "data" should be string of html
-// context (optional): If specified, the fragment will be created in this context,
-// defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
- if ( typeof data !== "string" ) {
- return [];
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
-
- var base, parsed, scripts;
-
- if ( !context ) {
-
- // Stop scripts or inline event handlers from being executed immediately
- // by using document.implementation
- if ( support.createHTMLDocument ) {
- context = document.implementation.createHTMLDocument( "" );
-
- // Set the base href for the created document
- // so any parsed elements with URLs
- // are based on the document's URL (gh-2965)
- base = context.createElement( "base" );
- base.href = document.location.href;
- context.head.appendChild( base );
- } else {
- context = document;
- }
- }
-
- parsed = rsingleTag.exec( data );
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[ 1 ] ) ];
- }
-
- parsed = buildFragment( [ data ], context, scripts );
-
- if ( scripts && scripts.length ) {
- jQuery( scripts ).remove();
- }
-
- return jQuery.merge( [], parsed.childNodes );
-};
-
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
- var selector, type, response,
- self = this,
- off = url.indexOf( " " );
-
- if ( off > -1 ) {
- selector = stripAndCollapse( url.slice( off ) );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if ( self.length > 0 ) {
- jQuery.ajax( {
- url: url,
-
- // If "type" variable is undefined, then "GET" method will be used.
- // Make value of this field explicit since
- // user can override it through ajaxSetup method
- type: type || "GET",
- dataType: "html",
- data: params
- } ).done( function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html( selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- // Otherwise use the full result
- responseText );
-
- // If the request succeeds, this function gets "data", "status", "jqXHR"
- // but they are ignored because response was set above.
- // If it fails, this function gets "jqXHR", "status", "error"
- } ).always( callback && function( jqXHR, status ) {
- self.each( function() {
- callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
- } );
- } );
- }
-
- return this;
-};
-
-
-
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [
- "ajaxStart",
- "ajaxStop",
- "ajaxComplete",
- "ajaxError",
- "ajaxSuccess",
- "ajaxSend"
-], function( i, type ) {
- jQuery.fn[ type ] = function( fn ) {
- return this.on( type, fn );
- };
-} );
-
-
-
-
-jQuery.expr.pseudos.animated = function( elem ) {
- return jQuery.grep( jQuery.timers, function( fn ) {
- return elem === fn.elem;
- } ).length;
-};
-
-
-
-
-/**
- * Gets a window from an element
- */
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
-}
-
-jQuery.offset = {
- setOffset: function( elem, options, i ) {
- var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
- position = jQuery.css( elem, "position" ),
- curElem = jQuery( elem ),
- props = {};
-
- // Set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- curOffset = curElem.offset();
- curCSSTop = jQuery.css( elem, "top" );
- curCSSLeft = jQuery.css( elem, "left" );
- calculatePosition = ( position === "absolute" || position === "fixed" ) &&
- ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
-
- // Need to be able to calculate position if either
- // top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
-
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
-
- // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
- options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
-
- } else {
- curElem.css( props );
- }
- }
-};
-
-jQuery.fn.extend( {
- offset: function( options ) {
-
- // Preserve chaining for setter
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each( function( i ) {
- jQuery.offset.setOffset( this, options, i );
- } );
- }
-
- var docElem, win, rect, doc,
- elem = this[ 0 ];
-
- if ( !elem ) {
- return;
- }
-
- // Support: IE <=11 only
- // Running getBoundingClientRect on a
- // disconnected node in IE throws an error
- if ( !elem.getClientRects().length ) {
- return { top: 0, left: 0 };
- }
-
- rect = elem.getBoundingClientRect();
-
- // Make sure element is not hidden (display: none)
- if ( rect.width || rect.height ) {
- doc = elem.ownerDocument;
- win = getWindow( doc );
- docElem = doc.documentElement;
-
- return {
- top: rect.top + win.pageYOffset - docElem.clientTop,
- left: rect.left + win.pageXOffset - docElem.clientLeft
- };
- }
-
- // Return zeros for disconnected and hidden elements (gh-2310)
- return rect;
- },
-
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
-
- var offsetParent, offset,
- elem = this[ 0 ],
- parentOffset = { top: 0, left: 0 };
-
- // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
- // because it is its only offset parent
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
-
- // Assume getBoundingClientRect is there when computed position is fixed
- offset = elem.getBoundingClientRect();
-
- } else {
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent();
-
- // Get correct offsets
- offset = this.offset();
- if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
- parentOffset = offsetParent.offset();
- }
-
- // Add offsetParent borders
- parentOffset = {
- top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
- left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
- };
- }
-
- // Subtract parent offsets and element margins
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
- };
- },
-
- // This method will return documentElement in the following cases:
- // 1) For the element inside the iframe without offsetParent, this method will return
- // documentElement of the parent window
- // 2) For the hidden or detached element
- // 3) For body or html element, i.e. in case of the html node - it will return itself
- //
- // but those exceptions were never presented as a real life use-cases
- // and might be considered as more preferable results.
- //
- // This logic, however, is not guaranteed and can change at any point in the future
- offsetParent: function() {
- return this.map( function() {
- var offsetParent = this.offsetParent;
-
- while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
- offsetParent = offsetParent.offsetParent;
- }
-
- return offsetParent || documentElement;
- } );
- }
-} );
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
- var top = "pageYOffset" === prop;
-
- jQuery.fn[ method ] = function( val ) {
- return access( this, function( elem, method, val ) {
- var win = getWindow( elem );
-
- if ( val === undefined ) {
- return win ? win[ prop ] : elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : win.pageXOffset,
- top ? val : win.pageYOffset
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length );
- };
-} );
-
-// Support: Safari <=7 - 9.1, Chrome <=37 - 49
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
-// getComputedStyle returns percent when specified for top/left/bottom/right;
-// rather than make the css module depend on the offset module, just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
- function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
-
- // If curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- );
-} );
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
- function( defaultExtra, funcName ) {
-
- // Margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return access( this, function( elem, type, value ) {
- var doc;
-
- if ( jQuery.isWindow( elem ) ) {
-
- // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
- return funcName.indexOf( "outer" ) === 0 ?
- elem[ "inner" + name ] :
- elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
- // whichever is greatest
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
-
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable );
- };
- } );
-} );
-
-
-jQuery.fn.extend( {
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
-
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ?
- this.off( selector, "**" ) :
- this.off( types, selector || "**", fn );
- }
-} );
-
-jQuery.parseJSON = JSON.parse;
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function() {
- return jQuery;
- } );
-}
-
-
-
-
-var
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$;
-
-jQuery.noConflict = function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in AMD
-// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( !noGlobal ) {
- window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-} );
diff --git a/debian/patches/allow-opensymbol-rebuild.diff b/debian/patches/allow-opensymbol-rebuild.diff
new file mode 100644
index 0000000..f101226
--- /dev/null
+++ b/debian/patches/allow-opensymbol-rebuild.diff
@@ -0,0 +1,148 @@
+diff --git a/Makefile.fetch b/Makefile.fetch
+index fce291d2c3ac..44f5031aac4a 100644
+--- a/Makefile.fetch
++++ b/Makefile.fetch
+@@ -52,7 +52,7 @@ $(filter 32,$(words $(shell echo $(1) | sed -e 's/./& /g')))
+ endef
+
+ define fetch_Download__subst_var
+-$(subst _DLL,_SHA256SUM,$(subst _TARBALL,_SHA256SUM,$(subst _PACK,_SHA256SUM,$(subst _JAR,_SHA256SUM,$(1)))))
++$(subst _TTF,_SHA256SUM,$(subst _DLL,_SHA256SUM,$(subst _TARBALL,_SHA256SUM,$(subst _PACK,_SHA256SUM,$(subst _JAR,_SHA256SUM,$(1))))))
+ endef
+
+ # fetch_Download_item url variable-name
+@@ -224,6 +224,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_$(gb_Side).mk $(SRCDIR)/download.lst $(S
+ ,$(call fetch_Download_item,https://dev-www.libreoffice.org/src,$(item)))
+ $(foreach item, \
+ $(call fetch_Optional,ODK,UNOWINREG_DLL) \
++ $(call fetch_Optional,OPENSYMBOL,OPENSYMBOL_TTF) \
+ $(call fetch_Optional,ODFVALIDATOR,ODFVALIDATOR_JAR) \
+ $(call fetch_Optional,OFFICEOTRON,OFFICEOTRON_JAR) \
+ ,$(call fetch_Download_item,https://dev-www.libreoffice.org/extern,$(item)))
+diff --git a/config_host.mk.in b/config_host.mk.in
+index 4a864c745424..0e3ba4864755 100644
+--- a/config_host.mk.in
++++ b/config_host.mk.in
+@@ -188,6 +188,7 @@ export FLEX=@FLEX@
+ export FLUTE_JAR=@FLUTE_JAR@
+ export FONTCONFIG_CFLAGS=$(gb_SPACE)@FONTCONFIG_CFLAGS@
+ export FONTCONFIG_LIBS=$(gb_SPACE)@FONTCONFIG_LIBS@
++export FONTFORGE=@FONTFORGE@
+ export FREEHAND_CFLAGS=$(gb_SPACE)@FREEHAND_CFLAGS@
+ export FREEHAND_LIBS=$(gb_SPACE)@FREEHAND_LIBS@
+ export FREETYPE_CFLAGS=$(gb_SPACE)@FREETYPE_CFLAGS@
+@@ -432,6 +433,7 @@ export OOO_JUNIT_JAR=@OOO_JUNIT_JAR@
+ export OOO_VENDOR=@OOO_VENDOR@
+ export OPENSSL_CFLAGS=$(gb_SPACE)@OPENSSL_CFLAGS@
+ export OPENSSL_LIBS=$(gb_SPACE)@OPENSSL_LIBS@
++export OPENSYMBOL_TTF=@OPENSYMBOL_TTF@
+ export ORCUS_CFLAGS=$(gb_SPACE)@ORCUS_CFLAGS@
+ export ORCUS_LIBS=$(gb_SPACE)@ORCUS_LIBS@
+ export OS=@OS@
+diff --git a/configure.ac b/configure.ac
+index 21218f46e41c..73e3384cf1ce 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1315,6 +1315,12 @@ AC_ARG_ENABLE(build-unowinreg,
+ compiler is needed on Linux.]),
+ ,)
+
++AC_ARG_ENABLE(build-opensymbol,
++ AS_HELP_STRING([--enable-build-opensymbol],
++ [Do not use the prebuilt opens___.ttf. Build it instead. This needs
++ fontforge installed.]),
++,)
++
+ AC_ARG_ENABLE(dependency-tracking,
+ AS_HELP_STRING([--enable-dependency-tracking],
+ [Do not reject slow dependency extractors.])[
+@@ -11297,6 +11303,21 @@ if test "x$with_java" != "xno"; then
+ libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
+ fi
+
++AC_MSG_CHECKING([whether to build opens___.ttf])
++if test "$enable_build_opensymbol" = "yes"; then
++ AC_MSG_RESULT([yes])
++ AC_PATH_PROG(FONTFORGE, fontforge)
++ if test -z "$FONTFORGE"; then
++ AC_MSG_ERROR([fontforge not installed])
++ fi
++else
++ AC_MSG_RESULT([no])
++ OPENSYMBOL_TTF=49a64f3bcf20a7909ba2751349231d6652ded9cd2840e961b5164d09de3ffa63-opens___.ttf
++ BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
++fi
++AC_SUBST(OPENSYMBOL_TTF)
++AC_SUBST(FONTFORGE)
++
+ TEST_FONTS_MISSING=0
+
+ # $1 = font family
+diff --git a/download.lst b/download.lst
+index 1a5e697767b6..492b90b6b82c 100644
+--- a/download.lst
++++ b/download.lst
+@@ -256,3 +256,4 @@ export ZMF_TARBALL := libzmf-0.0.2.tar.xz
+
+ NUMBERTEXT_EXTENSION_SHA256SUM := 1568ed1d2feb8210bb5de61d69574a165cded536cfa17c6953c9064076469de2
+ UNOWINREG_SHA256SUM := eafde646a7dbe46d20c291685b0beac2382174d78d66ee990e229a1bf6e6cec6
++OPENSYMBOL_SHA256SUM := 49a64f3bcf20a7909ba2751349231d6652ded9cd2840e961b5164d09de3ffa63
+diff --git a/extras/CustomTarget_opensymbol.mk b/extras/CustomTarget_opensymbol.mk
+new file mode 100644
+index 000000000000..a27718feb377
+--- /dev/null
++++ b/extras/CustomTarget_opensymbol.mk
+@@ -0,0 +1,23 @@
++# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
++#
++# This file is part of the LibreOffice project.
++#
++# This Source Code Form is subject to the terms of the Mozilla Public
++# License, v. 2.0. If a copy of the MPL was not distributed with this
++# file, You can obtain one at http://mozilla.org/MPL/2.0/.
++#
++
++$(eval $(call gb_CustomTarget_CustomTarget,extras/fonts))
++
++$(eval $(call gb_CustomTarget_register_targets,extras/fonts,opens___.ttf))
++
++ifneq (,$(FONTFORGE))
++$(call gb_CustomTarget_get_workdir,extras/fonts)/opens___.ttf : \
++ $(SRCDIR)/extras/source/truetype/symbol/OpenSymbol.sfd
++ $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),FNT,1)
++ $(FONTFORGE) -lang=ff -c 'Open($$1); Generate($$2)' $< $@
++else
++$(call gb_CustomTarget_get_workdir,extras/fonts)/opens___.ttf : \
++ $(TARFILE_LOCATION)/$(OPENSYMBOL_TTF)
++ cp $< $@
++endif
+diff --git a/extras/Module_extras.mk b/extras/Module_extras.mk
+index 2aa41bda3901..164d38aefd1c 100644
+--- a/extras/Module_extras.mk
++++ b/extras/Module_extras.mk
+@@ -68,4 +68,8 @@ $(eval $(call gb_Module_add_targets,extras,\
+ ))
+ endif
+
++$(eval $(call gb_Module_add_targets,extras,\
++ CustomTarget_opensymbol \
++))
++
+ # vim: set noet sw=4 ts=4:
+diff --git a/extras/Package_fonts.mk b/extras/Package_fonts.mk
+index 952c8286a5e7..8d2d23cbed6b 100644
+--- a/extras/Package_fonts.mk
++++ b/extras/Package_fonts.mk
+@@ -7,8 +7,10 @@
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ #
+
+-$(eval $(call gb_Package_Package,extras_fonts,$(SRCDIR)/extras))
++$(eval $(call gb_Package_Package,extras_fonts,$(call gb_CustomTarget_get_workdir,extras/fonts)))
+
+-$(eval $(call gb_Package_add_file,extras_fonts,$(LIBO_SHARE_FOLDER)/fonts/truetype/opens___.ttf,source/truetype/symbol/opens___.ttf))
++$(eval $(call gb_Package_use_customtarget,extras_fonts,extras/fonts))
++
++$(eval $(call gb_Package_add_file,extras_fonts,$(LIBO_SHARE_FOLDER)/fonts/truetype/opens___.ttf,opens___.ttf))
+
+ # vim: set noet sw=4 ts=4:
diff --git a/debian/patches/apparmor-allow-java.security.diff b/debian/patches/apparmor-allow-java.security.diff
new file mode 100644
index 0000000..e4b8ae6
--- /dev/null
+++ b/debian/patches/apparmor-allow-java.security.diff
@@ -0,0 +1,14 @@
+diff --git a/sysui/desktop/apparmor/program.soffice.bin b/sysui/desktop/apparmor/program.soffice.bin
+index 2fc7fd6b5735..3fd82b08431e 100644
+--- a/sysui/desktop/apparmor/program.soffice.bin
++++ b/sysui/desktop/apparmor/program.soffice.bin
+@@ -144,6 +144,9 @@ profile libreoffice-soffice INSTDIR-program/soffice.bin {
+ /usr/lib{,32,64}/jvm/** r,
+ /usr/lib{,32,64}/jvm/**/jre/bin/java mix,
+ /usr/lib{,32,64}/jvm/**/bin/java mix,
++ # should be included in the jvm/** above but there it is
++ # a symlink, so apparmor still doesn't allow it...
++ /etc/java-??-openjdk/security/java.security r,
+ INSTDIR-** rw,
+ INSTDIR-**.so m,
+ INSTDIR-program/soffice.bin mix,
diff --git a/debian/patches/apparmor-cleanups.diff b/debian/patches/apparmor-cleanups.diff
new file mode 100644
index 0000000..6a179eb
--- /dev/null
+++ b/debian/patches/apparmor-cleanups.diff
@@ -0,0 +1,37 @@
+From b3c157faeb945fd689fcc8561a520d9e611a7419 Mon Sep 17 00:00:00 2001
+From: Vincas Dargis <vindrg@gmail.com>
+Date: Sat, 4 Aug 2018 17:40:05 +0300
+Subject: [PATCH] apparmor: use dri-enumerate abstraction
+
+Remove backported rule and use new dri-enumerate abstraction instead.
+dri-enumerate is available in AppArmor 2.13, which recently migrated
+into Debian Buster.
+
+Change-Id: I64919edc1882f7bc1e65cfb94686464c5350f699
+---
+ sysui/desktop/apparmor/program.soffice.bin | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sysui/desktop/apparmor/program.soffice.bin b/sysui/desktop/apparmor/program.soffice.bin
+index 2fc7fd6b5735..33ad6f933ef6 100644
+--- a/sysui/desktop/apparmor/program.soffice.bin
++++ b/sysui/desktop/apparmor/program.soffice.bin
+@@ -82,6 +82,7 @@ profile libreoffice-soffice INSTDIR-program/soffice.bin {
+ #include <abstractions/dbus>
+ #include <abstractions/dbus-session>
+ #include <abstractions/dbus-accessibility>
++ #include <abstractions/dri-enumerate>
+ #include <abstractions/ibus>
+ #include <abstractions/nameservice>
+ #include <abstractions/gnome>
+@@ -173,7 +174,6 @@ profile libreoffice-soffice INSTDIR-program/soffice.bin {
+
+ #Likely moving to abstractions in the future
+ owner @{HOME}/.icons/*/cursors/* r,
+- /sys/devices/pci[0-9]*/**/{device,subsystem_device,subsystem_vendor,uevent,vendor} r, # for libdrm
+ /usr/share/*-fonts/conf.avail/*.conf r,
+ /usr/share/fonts-config/conf.avail/*.conf r,
+
+--
+2.18.0
+
diff --git a/debian/patches/apparmor-fixes.diff b/debian/patches/apparmor-fixes.diff
index f77d5c6..d20a968 100644
--- a/debian/patches/apparmor-fixes.diff
+++ b/debian/patches/apparmor-fixes.diff
@@ -1,41 +1,35 @@
-see https://gerrit.libreoffice.org/#/c/49614/.
+From 6cb24cea619a9041e1c3fad46f62e97cf561e522 Mon Sep 17 00:00:00 2001
+From: Vincas Dargis <vindrg@gmail.com>
+Date: Tue, 7 Aug 2018 12:23:48 +0300
+Subject: deb#905442 apparmor: fix saving files in enforced mode
-sysui/desktop/apparmor/program.senddoc
-Line 19:
-why do we need to allow dbus, chrome, .. here?
+Add rule to allow creating temporary files like `lu6924jgpjkq.tmp`,
+because without it files cannot be saved.
-See https://sources.debian.org/src/apparmor/2.12-2/profiles/apparmor.d/abstractions/ubuntu-helpers/.
+Change-Id: I640897df5d325e2d01da16840034abbd095fb276
+Reviewed-on: https://gerrit.libreoffice.org/58672
+Tested-by: Jenkins
+Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
+(cherry picked from commit 8ca83479ab1f921a14a366432a513a904af0dd20)
+Reviewed-on: https://gerrit.libreoffice.org/58677
+Reviewed-by: Rene Engelhard <rene@debian.org>
+Tested-by: Rene Engelhard <rene@debian.org>
+---
+ sysui/desktop/apparmor/program.soffice.bin | 1 +
+ 1 file changed, 1 insertion(+)
-(Besides that I don't like the "ubuntu" there at all, but that is another story)
-
-sysui/desktop/apparmor/program.senddoc
-Line 19:
-The other (easy) option is to have xdg-* just go to unconfined. I'm not sure there will be a huge difference in security.
-
-The initial version got merged to libreoffice-6-0 without the master one being
-merged...
-
-diff --git a/sysui/desktop/apparmor/program.senddoc b/sysui/desktop/apparmor/program.senddoc
-index 4ee34d01c941..4392c757ed26 100644
---- a/sysui/desktop/apparmor/program.senddoc
-+++ b/sysui/desktop/apparmor/program.senddoc
-@@ -14,7 +14,6 @@
-
- profile libreoffice-senddoc INSTDIR-program/senddoc {
- #include <abstractions/base>
-- #include <abstractions/ubuntu-helpers>
+diff --git a/sysui/desktop/apparmor/program.soffice.bin b/sysui/desktop/apparmor/program.soffice.bin
+index 2fc7fd6..a680260 100644
+--- a/sysui/desktop/apparmor/program.soffice.bin
++++ b/sysui/desktop/apparmor/program.soffice.bin
+@@ -97,6 +97,7 @@ profile libreoffice-soffice INSTDIR-program/soffice.bin {
+ owner @{libo_user_dirs}/**/ rw, #allow creating directories that we own
+ owner @{libo_user_dirs}/**~lock.* rw, #lock file support
+ owner @{libo_user_dirs}/**.@{libreoffice_ext} rwk, #Open files rw with the right exts
++ owner @{libo_user_dirs}/{,**/}lu??????????{,?}.tmp rwk, #Temporary file used when saving
- owner /tmp/lu** rw, #makes files like luRRRRR.tmp/lubRRRR.tmp where R is random
- #Note, usually it's lub or luc, don't know why.
-@@ -26,8 +25,8 @@ profile libreoffice-senddoc INSTDIR-program/senddoc {
- /usr/bin/basename rmix,
- /{usr/,}bin/grep rmix,
- /{usr/,}bin/uname rmix,
-- /usr/bin/xdg-open Cxr -> sanitized_helper,
-- /usr/bin/xdg-email Cxr -> sanitized_helper,
-+ /usr/bin/xdg-open rPUx,
-+ /usr/bin/xdg-email rPUx,
- /dev/null rw,
- INSTDIR-program/uri-encode rmpux,
- /usr/share/libreoffice/share/config/* r,
+ # Settings
+ /etc/libreoffice/ r,
+--
+cgit v1.1
diff --git a/debian/patches/apparmor-usrmerge.diff b/debian/patches/apparmor-usrmerge.diff
deleted file mode 100644
index bc218b7..0000000
--- a/debian/patches/apparmor-usrmerge.diff
+++ /dev/null
@@ -1,52 +0,0 @@
-15:54 < _rene_> (right now it seems apparmor rules allowing /bin/dash don't
- allow /usr/bin/dash (where /bin -> (isr/bin due to usrmerge)
-15:55 < _rene_> need to verify that in a clean no-usrmerge-VM though
-15:56 * bigon says something about selinux policy supporting usrmerge
-15:56 < bigon> :p
-15:58 < debfx> _rene_: that's right. those rules need to be changed to
- /{usr/,}bin/dash
-16:04 < _rene_> debfx: thanks for confirming. will change that (and grep, sed,
- ..)
-
-diff --git a/sysui/desktop/apparmor/program.senddoc b/sysui/desktop/apparmor/program.senddoc
-index 42c2740f7012..c08e78390a4f 100644
---- a/sysui/desktop/apparmor/program.senddoc
-+++ b/sysui/desktop/apparmor/program.senddoc
-@@ -17,14 +19,14 @@ profile libreoffice-senddoc INSTDIR-program/senddoc
-
- owner /tmp/lu** rw, #makes files like luRRRRR.tmp/lubRRRR.tmp where R is random
- #Note, usually it's lub or luc, don't know why.
-- /bin/sh rmix,
-- /bin/dash rmix,
-- /bin/bash rmix,
-- /bin/sed rmix,
-+ /{usr/,}bin/sh rmix,
-+ /{usr/,}bin/bash rmix,
-+ /{usr/,}bin/dash rmix,
-+ /{usr/,}bin/sed rmix,
- /usr/bin/dirname rmix,
- /usr/bin/basename rmix,
-- /bin/grep rmix,
-- /bin/uname rmix,
-+ /{usr/,}bin/grep rmix,
-+ /{usr/,}bin/uname rmix,
- /usr/bin/xdg-open Cxr -> sanitized_helper,
- /usr/bin/xdg-email Cxr -> sanitized_helper,
- /dev/null rw,
-diff --git a/sysui/desktop/apparmor/program.soffice.bin b/sysui/desktop/apparmor/program.soffice.bin
-index b4baeab8f5ee..426a04875e13 100644
---- a/sysui/desktop/apparmor/program.soffice.bin
-+++ b/sysui/desktop/apparmor/program.soffice.bin
-@@ -105,9 +107,9 @@ profile libreoffice-soffice INSTDIR-program/soffice.bin {
- # bluetooth send to
- network bluetooth,
-
-- /bin/sh rmix,
-- /bin/bash rmix,
-- /bin/dash rmix,
-+ /{usr/,}bin/sh rmix,
-+ /{usr/,}bin/bash rmix,
-+ /{usr/,}bin/dash rmix,
- /usr/bin/bluetooth-sendto rmPUx,
- /usr/bin/lpr rmPUx,
- /usr/bin/paperconf rmix,
diff --git a/debian/patches/appstream-ignore-startcenter.diff b/debian/patches/appstream-ignore-startcenter.diff
index de3d87d..4251d64 100644
--- a/debian/patches/appstream-ignore-startcenter.diff
+++ b/debian/patches/appstream-ignore-startcenter.diff
@@ -3,7 +3,7 @@
@@ -31,6 +31,7 @@ StartupNotify=true
X-GIO-NoFuse=true
StartupWMClass=libreoffice-startcenter
- X-KDE-Protocols=file,http,ftp,webdav
+ X-KDE-Protocols=file,http,ftp,webdav,webdavs
+X-AppStream-Ignore=True
##Define Actions
diff --git a/debian/patches/bridges-exceptions-updates.diff b/debian/patches/bridges-exceptions-updates.diff
deleted file mode 100644
index fe59381..0000000
--- a/debian/patches/bridges-exceptions-updates.diff
+++ /dev/null
@@ -1,934 +0,0 @@
-From 4544713d3ae7a83d45047b65bf7ba520b3e8762e Mon Sep 17 00:00:00 2001
-From: Stephan Bergmann <sbergman@redhat.com>
-Date: Tue, 10 Apr 2018 10:06:23 +0200
-Subject: Adapt remaining cpp_uno bridges to #i114635#
-
-..."C++ UNO bridge should convert non-UNO exceptions into RuntimeException"
-(<https://bz.apache.org/ooo/show_bug.cgi?id=114635>), see
-<https://lists.freedesktop.org/archives/libreoffice/2018-April/079985.html>
-"Re: CppunitTest_sw_filters_test failing on x86 Linux, std::exception ->
-uno::RuntimeException".
-
-(The msvc_win32_{intel,x86-64} versions already handle non-UNO exceptions in
-their msc{i,x}_filterCppException functions, in a different way.)
-
-Change-Id: Ie359affed6831d16be0de3e3ff065484e28bd9c3
-Reviewed-on: https://gerrit.libreoffice.org/52665
-Tested-by: Jenkins <ci@libreoffice.org>
-Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
----
- .../source/cpp_uno/gcc3_aix_powerpc/uno2cpp.cxx | 24 ++++++++++++---
- bridges/source/cpp_uno/gcc3_ios/uno2cpp.cxx | 31 ++++++++++++++-----
- .../source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx | 28 +++++++++++++----
- bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx | 28 ++++++++++++-----
- bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx | 24 ++++++++++++---
- bridges/source/cpp_uno/gcc3_linux_ia64/uno2cpp.cxx | 16 ++++++++++
- .../source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx | 24 ++++++++++++---
- bridges/source/cpp_uno/gcc3_linux_m68k/uno2cpp.cxx | 24 ++++++++++++---
- bridges/source/cpp_uno/gcc3_linux_mips/uno2cpp.cxx | 25 ++++++++++++---
- .../source/cpp_uno/gcc3_linux_mips64/uno2cpp.cxx | 27 +++++++++++++---
- .../source/cpp_uno/gcc3_linux_powerpc/uno2cpp.cxx | 24 ++++++++++++---
- .../cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx | 16 ++++++++++
- bridges/source/cpp_uno/gcc3_linux_s390/uno2cpp.cxx | 24 ++++++++++++---
- .../source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx | 28 +++++++++++++----
- .../source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx | 32 ++++++++++++++-----
- .../source/cpp_uno/gcc3_linux_sparc64/uno2cpp.cxx | 36 ++++++++++++++++------
- .../source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx | 24 ++++++++++++---
- .../source/cpp_uno/gcc3_solaris_sparc/uno2cpp.cxx | 32 ++++++++++++++-----
- 18 files changed, 379 insertions(+), 88 deletions(-)
-
-diff --git a/bridges/source/cpp_uno/gcc3_aix_powerpc/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_aix_powerpc/uno2cpp.cxx
-index 6024cee..1c8045f 100644
---- a/bridges/source/cpp_uno/gcc3_aix_powerpc/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_aix_powerpc/uno2cpp.cxx
-@@ -20,7 +20,10 @@
- #include <sys/types.h>
- #include <sys/malloc.h>
-
-+#include <com/sun/star/uno/Exception.hxx>
-+#include <com/sun/star/uno/RuntimeException.hxx>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -29,8 +32,11 @@
- #include "vtables.hxx"
-
- #include "share.hxx"
-+
-+#include <exception>
- #include <stdio.h>
- #include <string.h>
-+#include <typeinfo>
-
- using namespace ::com::sun::star::uno;
-
-@@ -294,10 +300,20 @@ static void cpp_call(
- try
- {
- assert( !( (pCppStack - pCppStackStart ) & 3) && "UNALIGNED STACK !!! (Please DO panic)" );
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeDescr->eTypeClass,
-- pStackStart, (pStack - pStackStart), pFPR, nFPR );
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeDescr->eTypeClass,
-+ pStackStart, (pStack - pStackStart), pFPR, nFPR );
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_ios/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_ios/uno2cpp.cxx
-index 7915fa7..9287bb4 100644
---- a/bridges/source/cpp_uno/gcc3_ios/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_ios/uno2cpp.cxx
-@@ -17,7 +17,14 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-+
-+#include <exception>
-+#include <typeinfo>
-+
-+#include <com/sun/star/uno/Exception.hpp>
- #include <com/sun/star/uno/RuntimeException.hpp>
-+#include <o3tl/runtimetooustring.hxx>
-
- #include "bridge.hxx"
- #include "types.hxx"
-@@ -348,13 +355,23 @@ static void cpp_call(
-
- try
- {
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeRef,
-- pStackStart,
-- (pStack - pStackStart),
-- pGPR,
-- pFPR);
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeRef,
-+ pStackStart,
-+ (pStack - pStackStart),
-+ pGPR,
-+ pFPR);
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
-
- // NO exception occurred...
- *ppUnoExc = 0;
-diff --git a/bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx
-index acc9454..143b153 100644
---- a/bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx
-@@ -17,10 +17,16 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-
-+#include <exception>
- #include <malloc.h>
-+#include <typeinfo>
-
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -323,12 +329,22 @@ static void cpp_call(
-
- try
- {
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeDescr,
-- pStackStart, (pStack - pStackStart),
-- pGPR, nRegs,
-- pFPR, nRegs );
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeDescr,
-+ pStackStart, (pStack - pStackStart),
-+ pGPR, nRegs,
-+ pFPR, nRegs );
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx
-index 3fc2602..b8deb4b 100644
---- a/bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx
-@@ -21,7 +21,9 @@
- #include <rtl/alloc.h>
-
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <com/sun/star/uno/Exception.hpp>
- #include "com/sun/star/uno/RuntimeException.hpp"
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include <bridge.hxx>
-@@ -31,8 +33,10 @@
-
- #include "share.hxx"
-
-+#include <exception>
- #include <stdio.h>
- #include <string.h>
-+#include <typeinfo>
-
- /*
- * Based on http://gcc.gnu.org/PR41443
-@@ -524,13 +528,23 @@ static void cpp_call(
-
- try
- {
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeRef,
-- pStackStart,
-- (pStack - pStackStart),
-- pGPR, nGPR,
-- pFPR);
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeRef,
-+ pStackStart,
-+ (pStack - pStackStart),
-+ pGPR, nGPR,
-+ pFPR);
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
-
- // NO exception occurred...
- *ppUnoExc = 0;
-diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx
-index 2c81c70..656f55c 100644
---- a/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx
-@@ -21,7 +21,9 @@
- #include <rtl/alloc.h>
-
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <com/sun/star/uno/Exception.hpp>
- #include "com/sun/star/uno/RuntimeException.hpp"
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include <bridge.hxx>
-@@ -31,8 +33,10 @@
-
- #include "share.hxx"
-
-+#include <exception>
- #include <stdio.h>
- #include <string.h>
-+#include <typeinfo>
-
- using namespace ::com::sun::star::uno;
-
-@@ -307,11 +311,21 @@ static void cpp_call(
-
- try
- {
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeDescr, bRegisterReturn,
-- pStackStart,
-- (pStack - pStackStart), pGPR, pFPR);
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeDescr, bRegisterReturn,
-+ pStackStart,
-+ (pStack - pStackStart), pGPR, pFPR);
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
-
- // NO exception occurred...
- *ppUnoExc = 0;
-diff --git a/bridges/source/cpp_uno/gcc3_linux_ia64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_ia64/uno2cpp.cxx
-index ef5a73f..bf9b06b 100644
---- a/bridges/source/cpp_uno/gcc3_linux_ia64/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_ia64/uno2cpp.cxx
-@@ -17,10 +17,16 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-
-+#include <exception>
- #include <malloc.h>
-+#include <typeinfo>
-
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -486,12 +492,22 @@ static void cpp_call(
-
- try
- {
-+ try {
- callVirtualMethod(
- pAdjustedThisPtr, aVtableSlot.index,
- pCppReturn, pReturnTypeDescr, bSimpleReturn,
- pStackStart, ( pStack - pStackStart ),
- pGPR, nGPR,
- pFPR, nFPR );
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx
-index d9ead28..ff8618c 100644
---- a/bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx
-@@ -17,11 +17,17 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-+
-+#include <exception>
-+#include <typeinfo>
-
- #include <sal/alloca.h>
-
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <com/sun/star/uno/Exception.hpp>
- #include "com/sun/star/uno/RuntimeException.hpp"
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -155,10 +161,20 @@ void cpp_call(
- try
- {
- assert( !( (pCppStack - pCppStackStart ) & 3) && "UNALIGNED STACK !!! (Please DO panic)" );
-- CPPU_CURRENT_NAMESPACE::callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeDescr, bSimpleReturn,
-- reinterpret_cast<sal_Int32 *>(pCppStackStart), (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
-+ try {
-+ CPPU_CURRENT_NAMESPACE::callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeDescr, bSimpleReturn,
-+ reinterpret_cast<sal_Int32 *>(pCppStackStart), (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = nullptr;
-
-diff --git a/bridges/source/cpp_uno/gcc3_linux_m68k/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_m68k/uno2cpp.cxx
-index d8da508..ca3a247 100644
---- a/bridges/source/cpp_uno/gcc3_linux_m68k/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_m68k/uno2cpp.cxx
-@@ -21,7 +21,9 @@
- #include <rtl/alloc.h>
-
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <com/sun/star/uno/Exception.hpp>
- #include "com/sun/star/uno/RuntimeException.hpp"
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include <bridge.hxx>
-@@ -31,8 +33,10 @@
-
- #include "share.hxx"
-
-+#include <exception>
- #include <stdio.h>
- #include <string.h>
-+#include <typeinfo>
-
- using namespace ::com::sun::star::uno;
-
-@@ -285,11 +289,21 @@ static void cpp_call(
-
- try
- {
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeDescr->eTypeClass,
-- pStackStart,
-- (pStack - pStackStart));
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeDescr->eTypeClass,
-+ pStackStart,
-+ (pStack - pStackStart));
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
-
- // NO exception occurred...
- *ppUnoExc = 0;
-diff --git a/bridges/source/cpp_uno/gcc3_linux_mips/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_mips/uno2cpp.cxx
-index 75a55c4..259775f 100644
---- a/bridges/source/cpp_uno/gcc3_linux_mips/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_mips/uno2cpp.cxx
-@@ -17,9 +17,16 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-+
-+#include <exception>
- #include <malloc.h>
-+#include <typeinfo>
-
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -389,10 +396,20 @@ namespace
- try
- {
- assert( !( (pCppStack - pCppStackStart ) & 3) && "UNALIGNED STACK !!! (Please DO panic)" );
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeDescr->eTypeClass, pParamType,
-- (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeDescr->eTypeClass, pParamType,
-+ (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_linux_mips64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_mips64/uno2cpp.cxx
-index 387b12e..b65a781 100644
---- a/bridges/source/cpp_uno/gcc3_linux_mips64/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_mips64/uno2cpp.cxx
-@@ -17,10 +17,17 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-+
-+#include <exception>
- #include <malloc.h>
- #include <cstring>
-+#include <typeinfo>
-
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -379,11 +386,21 @@ namespace
-
- try
- {
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeRef, bSimpleReturn,
-- pStackStart, ( pStack - pStackStart ),
-- pGPR, pFPR, nREG);
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeRef, bSimpleReturn,
-+ pStackStart, ( pStack - pStackStart ),
-+ pGPR, pFPR, nREG);
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc/uno2cpp.cxx
-index 6b2ac3d..7fdd362 100644
---- a/bridges/source/cpp_uno/gcc3_linux_powerpc/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc/uno2cpp.cxx
-@@ -17,10 +17,16 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-
-+#include <exception>
- #include <malloc.h>
-+#include <typeinfo>
-
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -480,10 +486,20 @@ static void cpp_call(
- try
- {
- assert( !( (pCppStack - pCppStackStart ) & 3) && "UNALIGNED STACK !!! (Please DO panic)");
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeDescr->eTypeClass, pParamType,
-- (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeDescr->eTypeClass, pParamType,
-+ (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx
-index a77c402..b58a515 100644
---- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx
-@@ -17,10 +17,16 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-
-+#include <exception>
- #include <malloc.h>
-+#include <typeinfo>
-
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -454,12 +460,22 @@ static void cpp_call(
-
- try
- {
-+ try {
- callVirtualMethod(
- pAdjustedThisPtr, aVtableSlot.index,
- pCppReturn, pReturnTypeDescr,
- pStackStart, ( pStack - pStackStart ),
- pGPR, nGPR,
- pFPR, nFPR );
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_linux_s390/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_s390/uno2cpp.cxx
-index 51e331f..fda52d0 100644
---- a/bridges/source/cpp_uno/gcc3_linux_s390/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_s390/uno2cpp.cxx
-@@ -17,10 +17,16 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-
-+#include <exception>
- #include <malloc.h>
-+#include <typeinfo>
-
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -426,10 +432,20 @@ static void cpp_call(
- try
- {
- assert( !( (pCppStack - pCppStackStart ) & 3) && "UNALIGNED STACK !!! (Please DO panic)" );
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeDescr->eTypeClass, pParamType,
-- (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeDescr->eTypeClass, pParamType,
-+ (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx
-index 8e40d00..e7354a4 100644
---- a/bridges/source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx
-@@ -17,10 +17,16 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-
-+#include <exception>
- #include <malloc.h>
-+#include <typeinfo>
-
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -328,12 +334,22 @@ static void cpp_call(
-
- try
- {
-- callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeDescr,
-- pStackStart, (pStack - pStackStart),
-- pGPR, nGPR,
-- pFPR, nFPR );
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeDescr,
-+ pStackStart, (pStack - pStackStart),
-+ pGPR, nGPR,
-+ pFPR, nFPR );
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx
-index 99d60d1..39b625f 100644
---- a/bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx
-@@ -17,8 +17,16 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-+
-+#include <exception>
- #include <malloc.h>
-+#include <typeinfo>
-+
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -395,13 +403,23 @@ static void cpp_call(
- if( nStackLongs & 1 )
- // stack has to be 8 byte aligned
- nStackLongs++;
-- callVirtualMethod(
-- pAdjustedThisPtr,
-- aVtableSlot.index,
-- pCppReturn,
-- pReturnTypeDescr->eTypeClass,
-- (sal_Int32 *)pCppStackStart,
-- nStackLongs);
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr,
-+ aVtableSlot.index,
-+ pCppReturn,
-+ pReturnTypeDescr->eTypeClass,
-+ (sal_Int32 *)pCppStackStart,
-+ nStackLongs);
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_linux_sparc64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_sparc64/uno2cpp.cxx
-index 939f1b1..81012df 100644
---- a/bridges/source/cpp_uno/gcc3_linux_sparc64/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_linux_sparc64/uno2cpp.cxx
-@@ -17,8 +17,16 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-+
-+#include <exception>
- #include <malloc.h>
-+#include <typeinfo>
-+
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -637,15 +645,25 @@ static void cpp_call(
- // pReturnTypeRef,
- // pCppStackStart,
- // (long long)nStackHypers);
-- callVirtualMethod(
-- pAdjustedThisPtr,
-- aVtableSlot.index,
-- pCppReturn,
-- pReturnTypeRef,
-- (sal_Int64 *)pCppStackStart,
-- nStackHypers,
-- pParams,
-- nParams);
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr,
-+ aVtableSlot.index,
-+ pCppReturn,
-+ pReturnTypeRef,
-+ (sal_Int64 *)pCppStackStart,
-+ nStackHypers,
-+ pParams,
-+ nParams);
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx
-index a94e339..7ad7d19 100644
---- a/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx
-@@ -17,12 +17,18 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-+
-+#include <exception>
-+#include <typeinfo>
-
- #include <malloc.h>
- #include <sal/alloca.h>
-
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <com/sun/star/uno/Exception.hpp>
- #include "com/sun/star/uno/RuntimeException.hpp"
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -152,10 +158,20 @@ static void cpp_call(
- try
- {
- assert( !( (pCppStack - pCppStackStart ) & 3) && "UNALIGNED STACK !!! (Please DO panic)");
-- CPPU_CURRENT_NAMESPACE::callVirtualMethod(
-- pAdjustedThisPtr, aVtableSlot.index,
-- pCppReturn, pReturnTypeDescr->eTypeClass,
-- (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
-+ try {
-+ CPPU_CURRENT_NAMESPACE::callVirtualMethod(
-+ pAdjustedThisPtr, aVtableSlot.index,
-+ pCppReturn, pReturnTypeDescr->eTypeClass,
-+ (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
-diff --git a/bridges/source/cpp_uno/gcc3_solaris_sparc/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_solaris_sparc/uno2cpp.cxx
-index 40932f1..dbfcc1c 100644
---- a/bridges/source/cpp_uno/gcc3_solaris_sparc/uno2cpp.cxx
-+++ b/bridges/source/cpp_uno/gcc3_solaris_sparc/uno2cpp.cxx
-@@ -17,8 +17,16 @@
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-+#include <sal/config.h>
-+
-+#include <exception>
- #include <malloc.h>
-+#include <typeinfo>
-+
-+#include <com/sun/star/uno/Exception.hpp>
-+#include <com/sun/star/uno/RuntimeException.hpp>
- #include <com/sun/star/uno/genfunc.hxx>
-+#include <o3tl/runtimetooustring.hxx>
- #include <uno/data.h>
-
- #include "bridge.hxx"
-@@ -390,13 +398,23 @@ static void cpp_call(
- if( nStackLongs & 1 )
- // stack has to be 8 byte aligned
- nStackLongs++;
-- callVirtualMethod(
-- pAdjustedThisPtr,
-- aVtableSlot.index,
-- pCppReturn,
-- pReturnTypeDescr->eTypeClass,
-- (sal_Int32 *)pCppStackStart,
-- nStackLongs);
-+ try {
-+ callVirtualMethod(
-+ pAdjustedThisPtr,
-+ aVtableSlot.index,
-+ pCppReturn,
-+ pReturnTypeDescr->eTypeClass,
-+ (sal_Int32 *)pCppStackStart,
-+ nStackLongs);
-+ } catch (css::uno::Exception &) {
-+ throw;
-+ } catch (std::exception & e) {
-+ throw css::uno::RuntimeException(
-+ "C++ code threw " + o3tl::runtimeToOUString(typeid(e).name()) + ": "
-+ + o3tl::runtimeToOUString(e.what()));
-+ } catch (...) {
-+ throw css::uno::RuntimeException("C++ code threw unknown exception");
-+ }
- // NO exception occurred...
- *ppUnoExc = 0;
-
---
-cgit v1.1
-
diff --git a/debian/patches/build-connectivitytools.diff b/debian/patches/build-connectivitytools.diff
deleted file mode 100644
index 7faf5c5..0000000
--- a/debian/patches/build-connectivitytools.diff
+++ /dev/null
@@ -1,23 +0,0 @@
-From: Bjoern Michaelsen <bjoern.michaelsen@canonical.com>
-Date: Wed, 12 Mar 2014 17:49:28 +0100
-Subject: [PATCH] make ConnectivityTools a normal target, so we can pack it
-
----
- connectivity/Module_connectivity.mk | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/connectivity/Module_connectivity.mk b/connectivity/Module_connectivity.mk
---- a/connectivity/Module_connectivity.mk
-+++ b/connectivity/Module_connectivity.mk
-@@ -151,7 +151,7 @@ endif
- endif
-
- ifneq ($(filter QADEVOOO,$(BUILD_TYPE)),)
--$(eval $(call gb_Module_add_subsequentcheck_targets,connectivity,\
-+$(eval $(call gb_Module_add_targets,connectivity,\
- Jar_ConnectivityTools \
- ))
- # FIXME: Does not work. Convert to JUnit.
---
-1.9.1
-
diff --git a/debian/patches/cppunit-optional.diff b/debian/patches/cppunit-optional.diff
index b9b1c14..4106bf4 100644
--- a/debian/patches/cppunit-optional.diff
+++ b/debian/patches/cppunit-optional.diff
@@ -78,13 +78,14 @@ index 373f40da36fd..c0401bef9c7a 100644
$(eval $(call gb_Executable_set_include,pdf2xml,\
-I$(SRCDIR)/sdext/source/pdfimport/inc \
$$(INCLUDE) \
-@@ -27,11 +27,19 @@ $(eval $(call gb_Executable_use_libraries,pdf2xml,\
+@@ -27,12 +27,20 @@ $(eval $(call gb_Executable_use_libraries,pdf2xml,\
vcl \
comphelper \
cppu \
- unotest \
cppuhelper \
sal \
+ xo \
))
+ifeq ($(ENABLE_CPPUNIT),TRUE)
diff --git a/debian/patches/debian-hardened-buildflags-CPPFLAGS.diff b/debian/patches/debian-hardened-buildflags-CPPFLAGS.diff
index 8fdac59..066cbfd 100644
--- a/debian/patches/debian-hardened-buildflags-CPPFLAGS.diff
+++ b/debian/patches/debian-hardened-buildflags-CPPFLAGS.diff
@@ -11,7 +11,7 @@
+
ENABLE_OPENGL_TRANSITIONS=
ENABLE_OPENGL_CANVAS=
- if test $_os = iOS -o $_os = Android; then
+ if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
--- a/config_host.mk.in-old 2012-04-06 14:17:55.164239390 +0200
+++ b/config_host.mk.in 2012-04-06 14:18:55.440239065 +0200
@@ -76,6 +76,7 @@
diff --git a/debian/patches/disable-flaky-tests.diff b/debian/patches/disable-flaky-tests.diff
index e2bebf4..7a9b895 100644
--- a/debian/patches/disable-flaky-tests.diff
+++ b/debian/patches/disable-flaky-tests.diff
@@ -191,24 +191,23 @@ index 3273055d5373..cb452139170c 100644
ifeq ($(ENABLE_CHART_TESTS),TRUE)
ifeq ($(WITH_FONTS), TRUE)
-diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
-index 4d65beeb90c4..f3d71501c41a 100644
---- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
-+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
-@@ -1559,14 +1559,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf43017, "tdf43017.docx")
+diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
+index eb3b42a31387..120df8faa548 100644
+--- a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
++++ b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
+@@ -161,13 +161,13 @@ DECLARE_OOXMLIMPORT_TEST(testTdf43017, "tdf43017.docx")
+ getProperty<sal_Int32>(xText, "CharColor"));
}
-
-DECLARE_OOXMLIMPORT_TEST(testTdf112443, "tdf112443.docx")
+/*DECLARE_OOXMLIMPORT_TEST(testTdf112443, "tdf112443.docx")
{
// the position of the flying text frame should be off page
// 30624 below its anchor
OUString aTop = parseDump("//fly[1]/infos/bounds", "top");
- CPPUNIT_ASSERT_EQUAL( OUString("30624"), aTop );
-
+ CPPUNIT_ASSERT_EQUAL(OUString("30624"), aTop);
-}
+}*/
-
+
// DOCX: Textbox wrap differs in MSO and LO
// Both should layout text regardless of existing text box
diff --git a/debian/patches/disable-java-in-odk-build-examples-on-zero-vm.diff b/debian/patches/disable-java-in-odk-build-examples-on-zero-vm.diff
index 26930a0..03316b1 100644
--- a/debian/patches/disable-java-in-odk-build-examples-on-zero-vm.diff
+++ b/debian/patches/disable-java-in-odk-build-examples-on-zero-vm.diff
@@ -37,23 +37,22 @@ index e6bfb13ebab8..3b7f0a2e1121 100644
dnl ===================================================================
dnl Set target Java bytecode version
-diff --git a/odk/CustomTarget_build-examples.mk b/odk/CustomTarget_build-examples.mk
-index f7dc1db1e30d..338a3bd02c99 100644
---- a/odk/CustomTarget_build-examples.mk
-+++ b/odk/CustomTarget_build-examples.mk
-@@ -32,6 +32,7 @@ my_example_dirs = \
-
-
- ifeq ($(ENABLE_JAVA),TRUE)
+diff --git a/odk/Module_odk.mk b/odk/Module_odk.mk
+index 410f8cf8ef1e..bd05d4bba200 100644
+--- a/odk/Module_odk.mk
++++ b/odk/Module_odk.mk
+@@ -60,10 +62,14 @@ $(eval $(call gb_Module_add_check_targets,odk,\
+ ifneq ($(filter $(OS),LINUX MACOSX),)
+ $(eval $(call gb_Module_add_subsequentcheck_targets,odk, \
+ CustomTarget_build-examples \
++))
+ifneq ($(JAVA_HAS_ZERO_VM),y)
- my_example_dirs += \
- DevelopersGuide/BasicAndDialogs/CreatingDialogs \
- DevelopersGuide/Charts \
-@@ -77,6 +78,7 @@ my_example_dirs += \
- java/ToDo \
-
++$(eval $(call gb_Module_add_subsequentcheck_targets,odk, \
+ $(if $(ENABLE_JAVA),\
+ CustomTarget_build-examples_java \
+ ) \
+ ))
endif
+endif
- # java/ConverterServlet \
- # java/EmbedDocument/Container1 \
+ # vim: set noet sw=4 ts=4:
diff --git a/debian/patches/disable-some-sc-tests-with-internal-cppunit.diff b/debian/patches/disable-some-sc-tests-with-internal-cppunit.diff
index 1a3347a..bfbbee1 100644
--- a/debian/patches/disable-some-sc-tests-with-internal-cppunit.diff
+++ b/debian/patches/disable-some-sc-tests-with-internal-cppunit.diff
@@ -10,10 +10,10 @@
# interestingly, this works with system-cppunit...
diff --git a/sc/Module_sc.mk b/sc/Module_sc.mk
-index 338ad5cdf609..ce60c12de35e 100644
+index ca37c6413780..6744ae54453f 100644
--- a/sc/Module_sc.mk
+++ b/sc/Module_sc.mk
-@@ -35,8 +35,6 @@ endif
+@@ -35,17 +35,12 @@ endif
ifneq ($(OS),IOS)
$(eval $(call gb_Module_add_check_targets,sc,\
Library_scqahelper \
@@ -22,7 +22,6 @@ index 338ad5cdf609..ce60c12de35e 100644
CppunitTest_sc_bugfix_test \
CppunitTest_sc_filters_test \
CppunitTest_sc_rangelst_test \
-@@ -43,9 +43,6 @@ $(eval $(call gb_Module_add_check_targets,sc,\
CppunitTest_sc_range_test \
CppunitTest_sc_mark_test \
CppunitTest_sc_core \
@@ -32,9 +31,9 @@ index 338ad5cdf609..ce60c12de35e 100644
))
ifneq ($(ENABLE_HEADLESS),TRUE)
-@@ -58,13 +58,25 @@ endif
-
+@@ -59,13 +54,25 @@ endif
$(eval $(call gb_Module_add_slowcheck_targets,sc, \
+ CppunitTest_sc_cond_format_merge \
CppunitTest_sc_new_cond_format_api \
- CppunitTest_sc_subsequent_filters_test \
CppunitTest_sc_subsequent_export_test \
@@ -45,14 +44,14 @@ index 338ad5cdf609..ce60c12de35e 100644
+ifeq ($(SYSTEM_CPPUNIT),TRUE)
+$(eval $(call gb_Module_add_check_targets,sc, \
-+ $(if $(and $(filter $(COM),MSC),$(MERGELIBS)),, \
-+ CppunitTest_sc_ucalc) \
-+ CppunitTest_sc_dataprovider \
-+ CppunitTest_sc_datatransformation \
-+ CppunitTest_sc_cache_test \
++ $(if $(and $(filter $(COM),MSC),$(MERGELIBS)),, \
++ CppunitTest_sc_ucalc) \
++ CppunitTest_sc_dataprovider \
++ CppunitTest_sc_datatransformation \
++ CppunitTest_sc_cache_test \
+))
+$(eval $(call gb_Module_add_slowcheck_targets,sc, \
-+ CppunitTest_sc_subsequent_filters_test \
++ CppunitTest_sc_subsequent_filters_test \
+))
+endif
+
@@ -71,7 +70,7 @@ index ef6d47984bf2..c92afe3fbb38 100644
+
+ifeq ($(SYSTEM_CPPUNIT),TRUE)
+$(eval $(call gb_Module_add_check_targets,sccomp,\
- CppunitTest_sccomp_swarmsolvertest \
+ $(if $(and $(filter INTEL,$(CPUNAME)),$(filter -fsanitize=%,$(gb_CXX))),,CppunitTest_sccomp_swarmsolvertest) \
))
+endif
diff --git a/debian/patches/disable-unused-test-programs.diff b/debian/patches/disable-unused-test-programs.diff
index 6e8562b..7492808 100644
--- a/debian/patches/disable-unused-test-programs.diff
+++ b/debian/patches/disable-unused-test-programs.diff
@@ -52,20 +52,19 @@ index d3fafeb7e4ec..87b8c067903e 100644
# vim: set noet sw=4 ts=4:
diff --git a/libreofficekit/Module_libreofficekit.mk b/libreofficekit/Module_libreofficekit.mk
-index c74c0681328e..b7261531faaf 100644
+index 351f89a33e48..defe0b14a681 100644
--- a/libreofficekit/Module_libreofficekit.mk
+++ b/libreofficekit/Module_libreofficekit.mk
-@@ -23,11 +23,11 @@ $(eval $(call gb_Module_add_check_targets,libreofficekit, \
+@@ -23,12 +23,10 @@ $(eval $(call gb_Module_add_check_targets,libreofficekit, \
ifneq ($(ENABLE_GTK3),)
$(eval $(call gb_Module_add_targets,libreofficekit,\
Library_libreofficekitgtk \
- Executable_gtktiledviewer \
-- Executable_tilebench \
- Package_selectionhandles \
))
endif # ($(ENABLE_GTK3),)
-+# Executable_gtktiledviewer \
-+# Executable_tilebench \
-
- endif
+ $(eval $(call gb_Module_add_targets,libreofficekit,\
+- Executable_tilebench \
+ Package_selectionhandles \
+ UIConfig_libreofficekit \
+ ))
diff --git a/debian/patches/do-not-hide-test-output.diff b/debian/patches/do-not-hide-test-output.diff
new file mode 100644
index 0000000..436bcce
--- /dev/null
+++ b/debian/patches/do-not-hide-test-output.diff
@@ -0,0 +1,99 @@
+diff --git a/odk/build-examples_common.mk b/odk/build-examples_common.mk
+index 931d6eea856e..5ea56e959bfc 100644
+--- a/odk/build-examples_common.mk
++++ b/odk/build-examples_common.mk
+@@ -32,11 +32,7 @@ endif
+ && (cd $(INSTDIR)/$(SDKDIRNAME)/examples/$(my_dir) \
+ && printf 'yes\n' | LC_ALL=C make \
+ $(if $(filter MACOSX,$(OS)), SHELL=$(ODK_BUILD_SHELL), )))) \
+- >$(call gb_CustomTarget_get_workdir,$(1))/log 2>&1 \
+- || (RET=$$$$? \
+- $(if $(filter MACOSX,$(OS)), && rm -f $(ODK_BUILD_SHELL) , ) \
+- && cat $(call gb_CustomTarget_get_workdir,$(1))/log \
+- && exit $$$$RET)
++ 2>&1
+ ifeq (MACOSX,$(OS))
+ -rm -f $(ODK_BUILD_SHELL)
+ endif
+diff --git a/solenv/gbuild/CppunitTest.mk b/solenv/gbuild/CppunitTest.mk
+index 45af5c9b25a7..7933fc84c8b2 100644
+--- a/solenv/gbuild/CppunitTest.mk
++++ b/solenv/gbuild/CppunitTest.mk
+@@ -139,12 +139,7 @@ else
+ ; RET=$$? && $(gb_CppunitTest_POSTGDBTRACE) && (exit $$RET)) \
+ $(if $(gb_CppunitTest_localized),|| exit $$?; done) \
+ ) \
+- $(if $(gb_CppunitTest__interactive),, \
+- > $@.log 2>&1 \
+- || ($(if $(value gb_CppunitTest_postprocess), \
+- RET=$$?; \
+- $(call gb_CppunitTest_postprocess,$(gb_CppunitTest_CPPTESTCOMMAND),$@.core,$$RET) >> $@.log 2>&1;) \
+- cat $@.log; $(gb_CppunitTest_UNITTESTFAILED) Cppunit $*)))
++ 2>&1)
+ endif
+
+ define gb_CppunitTest_CppunitTest
+diff --git a/solenv/gbuild/JunitTest.mk b/solenv/gbuild/JunitTest.mk
+index 36f29b50ef28..3ac4603ff6a0 100644
+--- a/solenv/gbuild/JunitTest.mk
++++ b/solenv/gbuild/JunitTest.mk
+@@ -44,17 +44,7 @@ else
+ -classpath "$(T_CP)" \
+ $(DEFS) \
+ org.junit.runner.JUnitCore \
+- $(CLASSES) > $@.log 2>&1 || \
+- (cat $@.log \
+- && echo "to rerun just this failed test without all others, run:" \
+- && echo && echo " make JunitTest_$*" && echo \
+- && echo "cd into the module dir to run the tests faster" \
+- && echo "Or to do interactive debugging, run two shells with:" \
+- && echo \
+- && echo " make debugrun" \
+- && echo " make gb_JunitTest_DEBUGRUN=T JunitTest_$*" \
+- && echo \
+- && false)))
++ $(CLASSES) 2>&1))
+ $(CLEAN_CMD)
+ endif
+
+diff --git a/solenv/gbuild/UITest.mk b/solenv/gbuild/UITest.mk
+index 03d30448ef7b..5628e47866f8 100644
+--- a/solenv/gbuild/UITest.mk
++++ b/solenv/gbuild/UITest.mk
+@@ -77,16 +77,7 @@ else
+ --userdir=$(call gb_Helper_make_url,$(dir $(call gb_UITest_get_target,$*))user) \
+ --dir=$(strip $(MODULES)) \
+ $(gb_UITest_GDBTRACE) \
+- $(if $(gb_UITest__interactive),, \
+- > $@.log 2>&1 \
+- || ($(if $(value gb_CppunitTest_postprocess), \
+- RET=$$?; \
+- $(call gb_CppunitTest_postprocess,$(gb_UITest_EXECUTABLE_GDB),$@.core,$$RET) >> $@.log 2>&1;) \
+- $(if $(filter WNT,$(OS)), \
+- printf '%s: <<<\n' $(dir $(call gb_UITest_get_target,$*))/soffice.out.log; \
+- cat $(dir $(call gb_UITest_get_target,$*))/soffice.out.log; \
+- printf ' >>>\n\n';) \
+- cat $@.log; $(gb_UITest_UNITTESTFAILED) UI $*))))
++ 2>&1))
+ endif
+
+ # always use udkapi and URE services
+diff --git a/solenv/gbuild/PythonTest.mk b/solenv/gbuild/PythonTest.mk
+index 9b0590e35d2a..3a1d7d9caceb 100644
+--- a/solenv/gbuild/PythonTest.mk
++++ b/solenv/gbuild/PythonTest.mk
+@@ -58,12 +58,7 @@ else
+ $(gb_CppunitTest_GDBTRACE) $(gb_CppunitTest_VALGRINDTOOL) \
+ $(gb_PythonTest_COMMAND) \
+ $(if $(PYTHON_TEST_NAME),$(PYTHON_TEST_NAME),$(MODULES)) \
+- $(if $(gb_CppunitTest__interactive),, \
+- > $@.log 2>&1 \
+- || ($(if $(value gb_CppunitTest_postprocess), \
+- RET=$$?; \
+- $(call gb_CppunitTest_postprocess,$(gb_PythonTest_EXECUTABLE_GDB),$@.core,$$RET) >> $@.log 2>&1;) \
+- cat $@.log; $(gb_PythonTest_UNITTESTFAILED) Python $*))))
++ 2>&1))
+ endif
+
+ # always use udkapi and URE services
+
diff --git a/debian/patches/hide-math-desktop-file.patch b/debian/patches/hide-math-desktop-file.patch
new file mode 100644
index 0000000..3e7fd4b
--- /dev/null
+++ b/debian/patches/hide-math-desktop-file.patch
@@ -0,0 +1,15 @@
+Description: Hide startcenter and math from the shell
+Author: Olivier Tilloy <olivier.tilloy@canonical.com>
+Bug-Ubuntu: https://launchpad.net/bugs/1696250
+Forwarded: not-needed
+
+--- a/sysui/desktop/menus/math.desktop
++++ b/sysui/desktop/menus/math.desktop
+@@ -33,6 +33,7 @@ Keywords=Equation;OpenDocument Formula;F
+ InitialPreference=5
+ StartupWMClass=libreoffice-math
+ X-KDE-Protocols=file,http,ftp,webdav,webdavs
++NotShowIn=GNOME;
+
+ Actions=NewDocument;
+ [Desktop Action NewDocument]
diff --git a/debian/patches/make-package-modules-not-suck.diff b/debian/patches/make-package-modules-not-suck.diff
index 5082a34..a22a19d 100644
--- a/debian/patches/make-package-modules-not-suck.diff
+++ b/debian/patches/make-package-modules-not-suck.diff
@@ -45,10 +45,10 @@ index 7d2a347..a15ac52 100644
$(eval $(call gb_AutoInstall_add_module,extensions_ct2n,,,,PACKAGE_FILELIST))
$(eval $(call gb_AutoInstall_add_module,extensions_bsh,,,LIBO_JAR_FILE))
diff --git a/Repository.mk b/Repository.mk
-index 14a1c07..eab8078 100644
+index fa62def2fc91..7fc34d4fe9cf 100644
--- a/Repository.mk
+++ b/Repository.mk
-@@ -211,13 +211,27 @@ $(eval $(call gb_Helper_register_executables_for_install,UREBIN,ure,\
+@@ -247,13 +247,28 @@ $(eval $(call gb_Helper_register_executables_for_install,UREBIN,ure,\
$(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,base, \
abp \
@@ -56,7 +56,8 @@ index 14a1c07..eab8078 100644
+ $(call gb_Helper_optional,DBCONNECTIVITY, \
+ dba \
+ dbase \
-+ dbaxml) \
++ dbaxml \
++ dbahsql) \
dbp \
dbu \
+ $(call gb_Helper_optional,DBCONNECTIVITY,flat) \
@@ -77,7 +78,7 @@ index 14a1c07..eab8078 100644
date \
pricing \
sc \
-@@ -229,6 +243,14 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,calc, \
+@@ -265,6 +280,14 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,calc, \
$(call gb_Helper_optional,SCRIPTING,vbaobj) \
))
@@ -92,7 +93,7 @@ index 14a1c07..eab8078 100644
$(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,graphicfilter, \
svgfilter \
flash \
-@@ -266,10 +266,10 @@ $(eval $(call gb_Helper_register_executables_for_install,OOO,tde, \
+@@ -273,10 +296,10 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,graphicfilter, \
))
$(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,impress, \
@@ -104,19 +105,20 @@ index 14a1c07..eab8078 100644
))
$(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,onlineupdate, \
-@@ -315,10 +337,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
+@@ -350,11 +373,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
ctl \
cui \
$(call gb_Helper_optional,DBCONNECTIVITY, \
- dba \
- dbase \
- dbmm \
-- dbaxml) \
+- dbaxml \
+- dbahsql) \
+ dbmm) \
dbtools \
deploymentmisc \
$(if $(filter-out MACOSX WNT,$(OS)),desktopbe1) \
-@@ -332,7 +351,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
+@@ -368,7 +387,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
evtatt \
expwrap \
$(call gb_Helper_optional,DBCONNECTIVITY, \
@@ -124,24 +126,25 @@ index 14a1c07..eab8078 100644
file) \
filterconfig \
fps_office \
-@@ -353,7 +371,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
+@@ -389,7 +407,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
gie \
hyphen \
icg \
- $(if $(ENABLE_JAVA),jdbc) \
ldapbe2 \
+ $(if $(filter WNT,$(OS)),WinUserInfoBe) \
localebe1 \
- log \
-@@ -366,8 +383,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
+@@ -403,9 +420,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
msfilter \
$(call gb_Helper_optional,SCRIPTING,msforms) \
mtfrenderer \
- $(call gb_Helper_optional,DBCONNECTIVITY,mysql) \
+ numbertext \
- odbc \
odfflatxml \
offacc \
oox \
-@@ -381,13 +396,8 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
+@@ -418,13 +433,8 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
sb \
$(call gb_Helper_optional,DBCONNECTIVITY,sdbt) \
scn \
@@ -155,7 +158,7 @@ index 14a1c07..eab8078 100644
sot \
spell \
$(if $(ENABLE_HEADLESS),,spl) \
-@@ -398,7 +408,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
+@@ -436,7 +446,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
svt \
svx \
svxcore \
@@ -163,7 +166,7 @@ index 14a1c07..eab8078 100644
syssh \
textconversiondlgs \
textfd \
-@@ -486,6 +495,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,writer, \
+@@ -521,6 +530,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,writer, \
hwp \
$(if $(ENABLE_LWP),lwpft) \
msword \
@@ -171,7 +174,7 @@ index 14a1c07..eab8078 100644
swd \
swui \
t602filter \
-@@ -567,14 +577,12 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \
+@@ -599,14 +609,12 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \
cached1 \
collator_data \
comphelper \
@@ -186,7 +189,7 @@ index 14a1c07..eab8078 100644
i18nutil \
index_data \
$(if $(and $(ENABLE_GTK3), $(filter LINUX %BSD SOLARIS,$(OS))), libreofficekitgtk) \
-@@ -590,7 +598,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \
+@@ -622,7 +630,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \
package2 \
$(if $(USING_X11),recentfile) \
$(call gb_Helper_optional,SCRIPTING,scriptframe) \
diff --git a/debian/patches/mention-java-common-package.diff b/debian/patches/mention-java-common-package.diff
index 9aa85ce..639b8d9 100644
--- a/debian/patches/mention-java-common-package.diff
+++ b/debian/patches/mention-java-common-package.diff
@@ -16,12 +16,13 @@ diff --git a/include/svtools/strings.hrc b/include/svtools/strings.hrc
index f9dc617f4313..874b0400cbc5 100644
--- a/include/svtools/strings.hrc
+++ b/include/svtools/strings.hrc
-@@ -279,12 +279,12 @@
+@@ -281,13 +281,13 @@
#define STR_SVT_DEFAULT_SERVICE_LABEL NC_("STR_SVT_DEFAULT_SERVICE_LABEL", "$user$'s $service$")
-#define STR_WARNING_JAVANOTFOUND NC_("STR_WARNING_JAVANOTFOUND", "%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task. Please install a JRE and restart %PRODUCTNAME.")
+#define STR_WARNING_JAVANOTFOUND NC_("STR_WARNING_JAVANOTFOUND", "%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task. Please install a JRE (and libreoffice-java-common) and restart %PRODUCTNAME.")
+ #define STR_WARNING_JAVANOTFOUND_WIN NC_("STR_WARNING_JAVANOTFOUND_WIN", "%PRODUCTNAME requires a %BITNESS-bit Java runtime environment (JRE) to perform this task. Please install a JRE and restart %PRODUCTNAME.")
#define STR_WARNING_JAVANOTFOUND_MAC NC_("STR_WARNING_JAVANOTFOUND_MAC", "%PRODUCTNAME requires Oracle's Java Development Kit (JDK) on Mac OS X 10.10 or greater to perform this task. Please install them and restart %PRODUCTNAME.")
#define STR_WARNING_INVALIDJAVASETTINGS_MAC NC_("STR_WARNING_INVALIDJAVASETTINGS_MAC", "The %PRODUCTNAME configuration has been changed. Under %PRODUCTNAME - Preferences - %PRODUCTNAME - Advanced, select the Java runtime environment you want to have used by %PRODUCTNAME.")
-#define STR_WARNING_INVALIDJAVASETTINGS NC_("STR_WARNING_INVALIDJAVASETTINGS", "The %PRODUCTNAME configuration has been changed. Under Tools - Options - %PRODUCTNAME - Advanced, select the Java runtime environment you want to have used by %PRODUCTNAME.")
diff --git a/debian/patches/no-ant-check-if-unneeded.diff b/debian/patches/no-ant-check-if-unneeded.diff
new file mode 100644
index 0000000..c154ecd
--- /dev/null
+++ b/debian/patches/no-ant-check-if-unneeded.diff
@@ -0,0 +1,58 @@
+From 0b583faeb72ce5391542923fa073e65f17e5448c Mon Sep 17 00:00:00 2001
+From: Rene Engelhard <rene@rene-engelhard.de>
+Date: Wed, 23 May 2018 17:30:04 +0200
+Subject: [PATCH] micro-optimization: do not check for ant if we don't need it
+
+Change-Id: I84644cddd8a318a2af23780ada9afc26fe23a9fe
+---
+ configure.ac | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 95e2865017a8..4cc9c1f68b8e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -8503,6 +8503,7 @@ if test "$with_java" != "no"; then
+ AC_MSG_RESULT([internal])
+ SYSTEM_HSQLDB=
+ BUILD_TYPE="$BUILD_TYPE HSQLDB"
++ NEED_ANT=TRUE
+ AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
+ javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
+ if expr "$javanumver" '>=' 000100060000 > /dev/null; then
+@@ -10619,6 +10620,7 @@ if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
+ AC_MSG_RESULT([internal])
+ SYSTEM_JFREEREPORT=
+ BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
++ NEED_ANT=TRUE
+ fi
+ else
+ AC_MSG_RESULT([no])
+@@ -10662,6 +10664,7 @@ if test "$ENABLE_REPORTBUILDER" = "TRUE"; then
+ AC_MSG_RESULT([internal])
+ SYSTEM_APACHE_COMMONS=
+ BUILD_TYPE="$BUILD_TYPE APACHE_COMMONS"
++ NEED_ANT=TRUE
+ fi
+ fi
+ AC_SUBST(SYSTEM_APACHE_COMMONS)
+@@ -10724,6 +10727,7 @@ if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
+ AC_MSG_RESULT([internal])
+ SYSTEM_RHINO=
+ BUILD_TYPE="$BUILD_TYPE RHINO"
++ NEED_ANT=TRUE
+ fi
+ else
+ AC_MSG_RESULT([no])
+@@ -11640,7 +11644,7 @@ dnl ===================================================================
+ dnl Test for the presence of Ant and that it works
+ dnl ===================================================================
+
+-if test "$ENABLE_JAVA" != ""; then
++if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE"; then
+ ANT_HOME=; export ANT_HOME
+ WITH_ANT_HOME=; export WITH_ANT_HOME
+ if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
+--
+2.17.0
+
diff --git a/debian/patches/no-check-if-root.diff b/debian/patches/no-check-if-root.diff
index c45bbc4..faa30a8 100644
--- a/debian/patches/no-check-if-root.diff
+++ b/debian/patches/no-check-if-root.diff
@@ -5,7 +5,7 @@
all: build
-check-if-root:
-- @if test `id -u` = 0 && ! grep -q 'lxc\|docker' /proc/self/cgroup; then \
+- @if test ! `uname` = 'Haiku' -a `id -u` = 0 && ! grep -q 'lxc\|docker' /proc/self/cgroup; then \
- echo; \
- echo 'No. You make ME a sandwich.'; \
- echo; \
diff --git a/debian/patches/no-openssl.diff b/debian/patches/no-openssl.diff
index d382f8c..ed2de7a 100644
--- a/debian/patches/no-openssl.diff
+++ b/debian/patches/no-openssl.diff
@@ -49,9 +49,9 @@ index ddd144e..19f8368 100644
export OOO_VENDOR=@OOO_VENDOR@
-export OPENSSL_CFLAGS=$(gb_SPACE)@OPENSSL_CFLAGS@
-export OPENSSL_LIBS=$(gb_SPACE)@OPENSSL_LIBS@
+ export OPENSYMBOL_TTF=@OPENSYMBOL_TTF@
export ORCUS_CFLAGS=$(gb_SPACE)@ORCUS_CFLAGS@
export ORCUS_LIBS=$(gb_SPACE)@ORCUS_LIBS@
- export OS=@OS@
@@ -569,7 +568,6 @@ export SYSTEM_ODBC_HEADERS=@SYSTEM_ODBC_HEADERS@
export SYSTEM_ODBC_HEADERS=@SYSTEM_ODBC_HEADERS@
export SYSTEM_ODFGEN=@SYSTEM_ODFGEN@
diff --git a/debian/patches/no-packagekit-per-default.diff b/debian/patches/no-packagekit-per-default.diff
index c48bdd2..3228d62 100644
--- a/debian/patches/no-packagekit-per-default.diff
+++ b/debian/patches/no-packagekit-per-default.diff
@@ -88,10 +88,10 @@ diff --git a/Repository.mk b/Repository.mk
index 858be89..901085e 100644
--- a/Repository.mk
+++ b/Repository.mk
-@@ -255,7 +278,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,gnome, \
+@@ -289,7 +289,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,gnome, \
+ $(if $(ENABLE_EVOAB2),evoab) \
$(if $(ENABLE_GTK),vclplug_gtk) \
$(if $(ENABLE_GTK3),vclplug_gtk3) \
- $(if $(ENABLE_SYSTRAY_GTK),qstart_gtk) \
- $(if $(ENABLE_GIO),losessioninstall) \
+ $(if $(ENABLE_PACKAGEKIT),losessioninstall) \
$(if $(ENABLE_GIO),ucpgio1) \
@@ -189,75 +189,54 @@ index c411fc1..d540983 100644
$(if $(ENABLE_GSTREAMER_1_0), \
avmedia/source/gstreamer/avmediagstreamer \
) \
-diff --git a/vcl/inc/unx/fontmanager.hxx b/vcl/inc/unx/fontmanager.hxx
-index 1c3114e43bbc..41e045dd9978 100644
---- a/vcl/inc/unx/fontmanager.hxx
-+++ b/vcl/inc/unx/fontmanager.hxx
-@@ -202,12 +202,12 @@ class VCL_PLUGIN_PUBLIC PrintFontManager
- static void addFontconfigDir(const OString& rDirectory);
-
- std::set<OString> m_aPreviousLangSupportRequests;
--#if ENABLE_GIO
-+#if ENABLE_GIO && defined (ENABLE_DBUS) && defined (ENABLE_PACKAGEKIT)
- std::vector<OString> m_aCurrentRequests;
- #endif
- Timer m_aFontInstallerTimer;
-
--#if ENABLE_GIO
-+#if ENABLE_GIO && defined (ENABLE_DBUS) && defined (ENABLE_PACKAGEKIT)
- DECL_LINK( autoInstallFontLangSupport, Timer*, void );
- #endif
- PrintFontManager();
-diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx
-index 68d00eb0d6bf..a163694012a4 100644
---- a/vcl/unx/generic/fontmanager/fontconfig.cxx
-+++ b/vcl/unx/generic/fontmanager/fontconfig.cxx
-@@ -40,7 +40,7 @@ using namespace psp;
- #include <ft2build.h>
- #include <fontconfig/fcfreetype.h>
-
--#if ENABLE_GIO
-+#if ENABLE_GIO && defined (ENABLE_DBUS) && defined(ENABLE_PACKAGEKIT)
- #include <gio/gio.h>
- #endif
-
-@@ -862,7 +862,7 @@ namespace
- return OStringToOUString(aBuf.makeStringAndClear(), RTL_TEXTENCODING_UTF8);
- }
-
--#if ENABLE_GIO
-+#if ENABLE_GIO && defined(ENABLE_DBUS) && defined(ENABLE_PACKAGEKIT)
- guint get_xid_for_dbus()
- {
- // FIXME: Application::GetActiveTopWindow only returns something sensible if LO currently has the focus
-@@ -874,7 +874,7 @@ namespace
- #endif
- }
-
--#if ENABLE_GIO
-+#if ENABLE_GIO && defined (ENABLE_DBUS) && defined (ENABLE_PACKAGEKIT)
- IMPL_LINK_NOARG(PrintFontManager, autoInstallFontLangSupport, Timer *, void)
- {
- if (!officecfg::Office::Common::PackageKit::EnableFontInstallation::get())
-@@ -1106,7 +1106,7 @@ void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissi
- }
+diff --git a/officecfg/registry/data/org/openoffice/Office/Common.xcu b/officecfg/registry/data/org/openoffice/Office/Common.xcu
+index 26d1ba053a1e..831e0ff7630f 100644
+--- a/officecfg/registry/data/org/openoffice/Office/Common.xcu
++++ b/officecfg/registry/data/org/openoffice/Office/Common.xcu
+@@ -533,10 +533,10 @@
+ </node>
+ <node oor:name="PackageKit">
+ <prop oor:name="EnableFontInstallation" oor:type="xs:boolean">
+- <value install:module="unx">true</value>
++ <value install:module="unx">false</value>
+ </prop>
+ <prop oor:name="EnableLangpackInstallation" oor:type="xs:boolean">
+- <value install:module="unx">true</value>
++ <value install:module="unx">false</value>
+ </prop>
+ </node>
+ <node oor:name="Classification">
+diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+index 2884179d0800..0b8feaa84c99 100644
+--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
++++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+@@ -6380,13 +6380,13 @@
+ <info>
+ <desc>Specifies if missing font installation should be triggered.</desc>
+ </info>
+- <value>true</value>
++ <value>false</value>
+ </prop>
+ <prop oor:name="EnableLangpackInstallation" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>Specifies if missing langpack installation should be triggered.</desc>
+ </info>
+- <value>true</value>
++ <value>false</value>
+ </prop>
+ </group>
+ <group oor:name="Classification">
+diff --git a/svtools/source/misc/langhelp.cxx b/svtools/source/misc/langhelp.cxx
+index 47cb87e36963..8dc00e09bd3b 100644
+--- a/svtools/source/misc/langhelp.cxx
++++ b/svtools/source/misc/langhelp.cxx
+@@ -137,8 +137,7 @@ OUString getInstalledLocaleForSystemUILanguage(const css::uno::Sequence<OUString
+ else
+ aPackages.emplace_back("libreoffice-langpack-" + install);
}
- OUString sStillMissing(pRemainingCodes.get(), nRemainingLen);
--#if ENABLE_GIO
-+#if ENABLE_GIO && defined (ENABLE_DBUS) && defined (ENABLE_PACKAGEKIT)
- if (get_xid_for_dbus())
+- //Debian would be: "The Document Foundation/Debian"
+- else if (sVendor == "The Document Foundation, Debian and Ubuntu")
++ else if (sVendor == "The Document Foundation/Debian" || sVendor == "The Document Foundation, Debian and Ubuntu")
{
- if (sStillMissing == rMissingCodes) //replaced nothing
-diff --git a/vcl/unx/generic/fontmanager/fontmanager.cxx b/vcl/unx/generic/fontmanager/fontmanager.cxx
-index 6726deeefb90..9e5a940a4b84 100644
---- a/vcl/unx/generic/fontmanager/fontmanager.cxx
-+++ b/vcl/unx/generic/fontmanager/fontmanager.cxx
-@@ -134,7 +134,7 @@ PrintFontManager::PrintFontManager()
- : m_nNextFontID( 1 )
- , m_nNextDirAtom( 1 )
- {
--#if ENABLE_GIO
-+#if ENABLE_GIO && defined (ENABLE_DBUS) && defined (ENABLE_PACKAGEKIT)
- m_aFontInstallerTimer.SetInvokeHandler(LINK(this, PrintFontManager, autoInstallFontLangSupport));
- m_aFontInstallerTimer.SetTimeout(5000);
- #endif
+ // l10n is the typical Debian/Ubuntu naming convention
+ aPackages.emplace_back("libreoffice-l10n-" + install);
diff --git a/debian/patches/odk-no-dot.diff b/debian/patches/odk-no-dot.diff
deleted file mode 100644
index ec83515..0000000
--- a/debian/patches/odk-no-dot.diff
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git a/odk/docs/cpp/Doxyfile b/odk/docs/cpp/Doxyfile
-index 2519f1b..147d59f 100644
---- a/odk/docs/cpp/Doxyfile
-+++ b/odk/docs/cpp/Doxyfile
-@@ -29,6 +29,8 @@ HTML_OUTPUT = .
-
- GENERATE_LATEX = NO
-
-+HAVE_DOT = NO
-+
- ALIASES = "derive=\par Derive: \n"
-
- MACRO_EXPANSION = YES
-diff --git a/odk/docs/idl/Doxyfile b/odk/docs/idl/Doxyfile
-index c065b33..6b415bf 100644
---- a/odk/docs/idl/Doxyfile
-+++ b/odk/docs/idl/Doxyfile
-@@ -17,6 +17,8 @@ GENERATE_HTML = YES
- HTML_TIMESTAMP = NO
- GENERATE_LATEX = NO
-
-+HAVE_DOT = NO
-+
- QUIET = %
- WARNINGS = YES
- WARN_IF_DOC_ERROR = YES
diff --git a/debian/patches/reportdesign-mention-package.diff b/debian/patches/reportdesign-mention-package.diff
index 9b5277d..f85471b 100644
--- a/debian/patches/reportdesign-mention-package.diff
+++ b/debian/patches/reportdesign-mention-package.diff
@@ -6,8 +6,8 @@ index 47068f43d09e..1f8b9a2331b6 100644
#define STR_WARNINGS_DURING_CONNECT NC_("STR_WARNINGS_DURING_CONNECT", "Warnings were encountered while connecting to the data source. Press \"$buttontext$\" to view them.")
#define STR_NAMED_OBJECT_ALREADY_EXISTS NC_("STR_NAMED_OBJECT_ALREADY_EXISTS", "The name '$#$' already exists.\nPlease enter another name." )
// #i96130# use hard coded name
--#define RID_STR_EXTENSION_NOT_PRESENT NC_("RID_STR_EXTENSION_NOT_PRESENT", "The report, \"$file$\", requires the Oracle Report Builder feature.")
-+#define RID_STR_EXTENSION_NOT_PRESENT NC_("RID_STR_EXTENSION_NOT_PRESENT", "The report, \"$file$\", requires the Oracle Report Builder feature. For this, install the package 'libreoffice-report-builder'.")
+-#define RID_STR_EXTENSION_NOT_PRESENT NC_("RID_STR_EXTENSION_NOT_PRESENT", "The report, \"$file$\", requires the Report Builder feature.")
++#define RID_STR_EXTENSION_NOT_PRESENT NC_("RID_STR_EXTENSION_NOT_PRESENT", "The report, \"$file$\", requires the Report Builder feature. For this, install the package 'libreoffice-report-builder'.")
#define STR_COULDNOTCREATE_DRIVERMANAGER NC_("STR_COULDNOTCREATE_DRIVERMANAGER", "Cannot connect to the SDBC driver manager (#servicename#).")
#define STR_NOREGISTEREDDRIVER NC_("STR_NOREGISTEREDDRIVER", "A driver is not registered for the URL #connurl#.")
diff --git a/debian/patches/revert-bd260a59cfdd050db3aa9a641ef0fa09efcedf5b.diff b/debian/patches/revert-bd260a59cfdd050db3aa9a641ef0fa09efcedf5b.diff
deleted file mode 100644
index d199661..0000000
--- a/debian/patches/revert-bd260a59cfdd050db3aa9a641ef0fa09efcedf5b.diff
+++ /dev/null
@@ -1,19 +0,0 @@
-diff --git a/cui/uiconfig/ui/optgeneralpage.ui b/cui/uiconfig/ui/optgeneralpage.ui
-index b0d0484f91c8..986edb599dfd 100644
---- a/cui/uiconfig/ui/optgeneralpage.ui
-+++ b/cui/uiconfig/ui/optgeneralpage.ui
-@@ -1,5 +1,5 @@
- <?xml version="1.0" encoding="UTF-8"?>
--<!-- Generated with glade 3.20.2 -->
-+<!-- Generated with glade 3.19.0 -->
- <interface domain="cui">
- <requires lib="gtk+" version="3.0"/>
- <object class="GtkAdjustment" id="adjustment1">
-@@ -57,6 +57,7 @@
- </child>
- <child>
- <object class="GtkFrame" id="filedlgframe">
-+ <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
diff --git a/debian/patches/sal-fix-kfreebsd-build.diff b/debian/patches/sal-fix-kfreebsd-build.diff
deleted file mode 100644
index b6cf568..0000000
--- a/debian/patches/sal-fix-kfreebsd-build.diff
+++ /dev/null
@@ -1,23 +0,0 @@
-From: Stephan Bergmann <sbergman@redhat.com>
-Date: Mon, 4 Dec 2017 21:33:35 +0000 (+0100)
-Subject: Condition for definition of LastIdent must match condition for its use
-X-Git-Url: https://gerrit.libreoffice.org/gitweb?p=core.git;a=commitdiff_plain;h=68f8e48e8c264056d60628da488404348f9f2f17
-
-Condition for definition of LastIdent must match condition for its use
-
-Change-Id: Iccc58d396d8c80a717e9d33ed8d872aadea08afa
----
-
-diff --git a/sal/osl/unx/thread.cxx b/sal/osl/unx/thread.cxx
-index 639e8b6..affbc5c 100644
---- a/sal/osl/unx/thread.cxx
-+++ b/sal/osl/unx/thread.cxx
-@@ -567,7 +567,7 @@ static int HashSize = SAL_N_ELEMENTS(HashTable);
-
- static pthread_mutex_t HashLock = PTHREAD_MUTEX_INITIALIZER;
-
--#if ! (defined LINUX || defined MACOSX || defined IOS)
-+#if ! ((defined LINUX && !defined __FreeBSD_kernel__) || defined MACOSX || defined IOS)
- static oslThreadIdentifier LastIdent = 0;
- #endif
-
diff --git a/debian/patches/series b/debian/patches/series
index bd2e8bc..fe7ac69 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -21,20 +21,21 @@ disable-flaky-tests.diff
#dont-touch-urd.diff
fix-internal-hsqldb-build.diff
javadoc-optional.diff
-build-connectivitytools.diff
-odk-no-dot.diff
hppa-is-32bit.diff
no-packagekit-per-default.diff
system-officeotron-and-odfvalidator.diff
+allow-opensymbol-rebuild.diff
no-openssl.diff
disable-some-sc-tests-with-internal-cppunit.diff
cppunit-optional.diff
disable-unused-test-programs.diff
-sal-fix-kfreebsd-build.diff
-apparmor-usrmerge.diff
-revert-bd260a59cfdd050db3aa9a641ef0fa09efcedf5b.diff
-apparmor-fixes.diff
apparmor-complain.diff
+hide-math-desktop-file.patch
appstream-ignore-startcenter.diff
-bridges-exceptions-updates.diff
disable-java-in-odk-build-examples-on-zero-vm.diff
+do-not-hide-test-output.diff
+no-ant-check-if-unneeded.diff
+test-apparmor-profiles.diff
+apparmor-allow-java.security.diff
+apparmor-cleanups.diff
+apparmor-fixes.diff
diff --git a/debian/patches/test-apparmor-profiles.diff b/debian/patches/test-apparmor-profiles.diff
new file mode 100644
index 0000000..0e6d023
--- /dev/null
+++ b/debian/patches/test-apparmor-profiles.diff
@@ -0,0 +1,54 @@
+From 92e09eda030a7fb63339954078bbc64d83f834b1 Mon Sep 17 00:00:00 2001
+From: Rene Engelhard <rene@debian.org>
+Date: Wed, 13 Jun 2018 21:37:12 +0200
+Subject: [PATCH] test apparmor profile parsing (see tdf#114915)
+
+idea taken from
+https://salsa.debian.org/apparmor-team/apparmor-profiles-extra/commit/7fbcc4788d0e94764eeeff2f080796601241f986#546c1096cd506dbb01a47ed87a636a8e94d83b8c
+
+Change-Id: I7e5bda9224d69530af4d30422c2fd3d60c9929d6
+---
+ sysui/desktop/share/apparmor.sh | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+diff --git a/sysui/desktop/share/apparmor.sh b/sysui/desktop/share/apparmor.sh
+index 253fe87cf78d..c801f0f3b217 100755
+--- a/sysui/desktop/share/apparmor.sh
++++ b/sysui/desktop/share/apparmor.sh
+@@ -19,16 +19,17 @@ INST_ROOT=$1 #Where libreoffice program folder can be found
+ PROFILESFROM=$2 #Where the profile files are
+ INSTALLTO=$3 #Where should the apparmor profiles (For manual use should be /etc/apparmor.d)
+ RESTART=$4 #Should we restart apparmor using service?
++CHECK=$5 #Check parsing of the new profile?
+
+ #Example uses:
+ #Ubuntu 16.04 with stock LibreOffice:
+-# sudo ./sysui/desktop/share/apparmor.sh /usr/lib/libreoffice/ sysui/desktop/apparmor/ /etc/apparmor.d/ true
++# sudo ./sysui/desktop/share/apparmor.sh /usr/lib/libreoffice/ sysui/desktop/apparmor/ /etc/apparmor.d/ true true
+
+ #Ubuntu 16.04, with built debs from LibreOffice git
+-# sudo ./sysui/desktop/share/apparmor.sh /opt/libreofficedev5.2/ sysui/desktop/apparmor/ /etc/apparmor.d/ true
++# sudo ./sysui/desktop/share/apparmor.sh /opt/libreofficedev5.2/ sysui/desktop/apparmor/ /etc/apparmor.d/ true true
+
+ #Ubuntu 16.04, running from git!
+-# sudo ./sysui/desktop/share/apparmor.sh /mnt/store/git/libo/instdir/ sysui/desktop/apparmor/ /etc/apparmor.d/ true
++# sudo ./sysui/desktop/share/apparmor.sh /mnt/store/git/libo/instdir/ sysui/desktop/apparmor/ /etc/apparmor.d/ true true
+
+ #Need to convert / to . for profile names
+ INST_ROOT_FORMAT=${INST_ROOT/\//}
+@@ -43,7 +44,11 @@ do
+ tourl=$INSTALLTO$INST_ROOT_FORMAT${filename##*/}
+ sed "s/INSTDIR-/$INST_ROOT_SED/g" "$filename" > "$tourl"
+ echo "$tourl"
+-
++ if [ "$CHECK" = "true" ]; then
++ # check profile parsing
++ echo "Checking $tourl profile."
++ /sbin/apparmor_parser --add --skip-cache --skip-kernel-load $tourl
++ fi
+ done
+
+ if [ "$RESTART" = true ] ; then
+--
+2.17.1
+
diff --git a/debian/rules b/debian/rules
index a0d67a1..107042f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -22,8 +22,8 @@ CURDIR ?= $(realpath $(dir $(firstword $(MAKEFILE_LIST)))/..)
BASE_VERSION:=$(shell echo $(DEB_VERSION) | cut -d: -f1):$(DEB_VERSION_UPSTREAM)
BINARY_VERSION=$(DEB_VERSION)
#HELP_L10N_VIRTUAL_VERSION:=$(shell echo $(DEB_VERSION_UPSTREAM) | cut -d: -f2 | tr [~] [\\-])
-HELP_L10N_VIRTUAL_VERSION:=6.0
-OOVER:=6.0
+HELP_L10N_VIRTUAL_VERSION:=6.1
+OOVER:=6.1
NEXT_OOVER:=$(shell echo "$(OOVER) + 0.1" | bc)
ARCH_INDEP_PACKAGES := $(shell dh_listpackages -i)
@@ -74,7 +74,7 @@ lo_sources_ver=$(shell grep AC_INIT $(SOURCE_TREE)/configure.ac | grep documentf
# NOT in proper libreoffice-3-6 branch
# use ./g checkout -b tag-libreoffice-3.6.2.1 libreoffice-3.6.2.1
GIT_TAG=libreoffice-$(lo_sources_ver)
-GIT_BRANCH=libreoffice-6-0-5
+GIT_BRANCH=libreoffice-6-1-0
endif
ifeq "$(USE_SOURCE_TARBALLS)" "y"
lo_sources_ver=$(shell cat $(CURDIR)/sources.ver | cut -d= -f2)
@@ -92,6 +92,7 @@ BUILD_DEPS=\
bison,\
bzip2,\
flex (>= 2.3.35), \
+ fontforge-nox | fontforge, \
gperf,\
libc0.1 (>= 2.10.2-7) [kfreebsd-any],\
libcups2-dev,\
@@ -123,6 +124,7 @@ SYSTEM_STUFF = dicts
ENABLE_PYTHON=y
ifeq "$(ENABLE_PYTHON)" "y"
+ CONFIGURE_FLAGS += --with-python=system
ENABLE_SCRIPT_PROVIDER_PYTHON=y
PACKAGE_LIBRELOGO=y
endif
@@ -134,10 +136,14 @@ endif
PYTHON_VERSION=current
ifeq "$(PYTHON_VERSION)" "current"
PYTHON=python3
-export PYTHON=python3
+ export PYTHON
else
+ # somehow configure insists on using python3 "for pyuno". The only way to
+ # override this (afaics) is this...
PYTHON=python$(PYTHON_VERSION)
-export PYTHON=python$(PYTHON_VERSION)
+ PYTHON_CFLAGS=$(shell pkg-config --cflags python-$(PYTHON_VERSION))
+ PYTHON_LIBS=$(shell pkg-config --libs python-$(PYTHON_VERSION))
+ export PYTHON PYTHON_VERSION PYTHON_CFLAGS PYTHON_LIBS
endif
BUILD_ONLY_EN_US=n
ENABLE_JAVA=y
@@ -190,14 +196,21 @@ SYSTEM_STUFF += libqxp
BUILD_CAIROCANVAS=y
SYSTEM_STUFF += cairo
CAIRO_FONTS_PATCH=y
-BUILD_KDE=n
+BUILD_KDE=y
BUILD_KDE4=n
# < 4.8 fails with gcc 4.7, see #667911
QT4_MINVER= (>= 4:4.8)
KDELIBS_MINVER= (>= 4:4.3.4)
-#BUILD_KDE5=n
+BUILD_KDE5=y
+ifeq "$(DEB_HOST_ARCH_BITS)" "64"
ENABLE_QT5=n
-KDE_MAJOR=5
+endif
+QT5_MINVER= (>= 5.6)
+ifeq "$(BUILD_KDE)" "y"
+ ENABLE_GTK3_KDE5=y
+ ENABLE_KDE5=n
+ KDE_MAJOR=5
+endif
ifeq "$(BUILD_KDE)" "y"
ifeq "$(BUILD_KDE4)" "y"
ifeq "$(BUILD_KDE5)" "y"
@@ -210,7 +223,7 @@ endif
ifneq (noautodbgsym,$(findstring noautodbgsym,$(DEB_BUILD_OPTIONS)))
BUILD_DBGSYM_PACKAGES=y
ifeq "$(DEB_HOST_ARCH)" "amd64"
-USE_DWZ=y
+USE_DWZ=n
DWZ_ARGS:=-L 100000000
endif
endif
@@ -220,7 +233,7 @@ SYSTEM_STUFF += xmlsec
# This is not exactly allowed in https://wiki.debian.org/BuildProfileSpec#Registered_profile_names
# but it doesn't have real practical difference, does it?
ifneq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
- BUILD_TEST_PACKAGE=y
+ BUILD_TEST_PACKAGES=y
endif
ifneq ($(MAKECMDGOALS),build-indep)
@@ -301,7 +314,6 @@ else
endif
ENABLE_SDBC_POSTGRESQL=y
BUILD_GTK=y
-ENABLE_SYSTRAY=y
#ifeq "$(DEB_DISTRIBUTION)" "experimental"
BUILD_GTK3=y
#endif
@@ -319,8 +331,8 @@ ALLOC=system
SYSTEM_STUFF += libexttextcat
SYSTEM_STUFF += cppunit
CPPUNIT_MINVER=1.14
-DEFAULT_IMAGE=galaxy
-IMAGES:=$(DEFAULT_IMAGE) hicontrast tango sifr sifr_dark breeze breeze_dark elementary
+DEFAULT_IMAGE=tango
+IMAGES:=$(DEFAULT_IMAGE) colibre sifr sifr_dark breeze breeze_dark elementary
CONFIGURE_FLAGS_INDEP += --with-theme="$(IMAGES)"
ENABLE_MYSQLNATIVE=y
MYSQL_FLAVOUR=default
@@ -353,6 +365,14 @@ SYSTEM_STUFF += libpng
SYSTEM_STUFF += nss
ENABLE_HELP=y
ifeq "$(ENABLE_HELP)" "y"
+ ENABLE_HTML_HELP=y
+ ifeq "$(ENABLE_HTML_HELP)" "y"
+ HELP_DEPENDS := libreoffice-help-common (= $${binary:Version}), firefox-esr | epiphany-browser | konqueror | chromium | firefox
+ HELP_COMMON_DEPENDS := libjs-normalize.css
+ else
+ HELP_DEPENDS := libreoffice-writer
+ DEBHELPER_OPTIONS += -Nlibreoffice-help-common
+ endif
SYSTEM_STUFF += clucene
ifeq "$(GCC_VERSION_5_OR_GREATER)" "y"
CLUCENE_MINVER=2.3.3.4-4.1
@@ -437,6 +457,9 @@ BUILD_ARM64=y
SYSTEM_STUFF += gpgmepp
INSTALL_APPARMOR_PROFILES=y
ENABLE_APPARMOR_PROFILES=y
+CHECK_APPARMOR_PROFILES=true
+ENABLE_LIBNUMBERTEXT=y
+SYSTEM_STUFF += libnumbertext
# Default flags to pass to configure
CONFIGURE_FLAGS= \
@@ -448,12 +471,15 @@ CONFIGURE_FLAGS= \
--host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \
--disable-online-update \
--disable-fetch-external \
- --without-fonts \
+ --without-fonts --enable-build-opensymbol \
--without-myspell-dicts \
--with-branding=$(CURDIR)/debian/branding
ifeq "$(ENABLE_HELP)" "y"
CONFIGURE_FLAGS_INDEP+= --with-help
+ ifeq "$(ENABLE_HTML_HELP)" "y"
+ CONFIGURE_FLAGS_INDEP+= --with-help=html
+ endif
endif
ifeq "$(shell echo $(DEB_VERSION_UPSTREAM) | grep -E '(alpha|beta)'; echo $$?)" "1"
@@ -461,14 +487,16 @@ CONFIGURE_FLAGS += --enable-release-build
RELEASE_BUILD := y
endif
-ifneq "$(DEB_DISTRIBUTION)" "UNRELEASED"
-CONFIGURE_FLAGS += --disable-dependency-tracking
+ifeq "$(DEB_DISTRIBUTION)" "UNRELEASED"
+ENABLE_DEPENDENCY_TRACKING=y
endif
ifeq "$(DEB_DISTRIBUTION)" "UNRELEASED"
BUGS=mailto:debian-openoffice@lists.debian.org
endif
+ifneq (terse,$(findstring terse,$(DEB_BUILD_OPTIONS)))
export verbose=t
+endif
CONFIGURE_FLAGS += --with-alloc=$(ALLOC)
@@ -486,9 +514,8 @@ PLATFORMID := $(shell grep PLATFORMID debian/vars.$(DEB_HOST_ARCH) | cut -d"=" -
# let's do this only on archs where we have chromium, which is supposedly even only the archs
-# where alsp pdfium is supported. Remove arm64, see
-https://lists.freedesktop.org/archives/libreoffice/2018-February/079384.html
-OOO_PDFIUM_ARCHS := i386 amd64 armhf
+# where alsp pdfium is supported.
+OOO_PDFIUM_ARCHS := i386 amd64 armhf arm64
ifneq (,$(findstring $(DEB_HOST_ARCH),$(OOO_PDFIUM_ARCHS)))
ENABLE_PDFIUM=y
else
@@ -602,7 +629,7 @@ ifeq (ia64,$(findstring ia64,$(OOO_OPENJDK_ARCHS)))
endif
endif
-ifeq "$(BUILD_TEST_PACKAGE)" "n"
+ifeq "$(BUILD_TEST_PACKAGES)" "n"
DEBHELPER_OPTIONS += -Nlibreoffice-subsequentcheckbase
endif
@@ -677,6 +704,10 @@ else
endif
endif
USE_GOLD=n
+ENABLE_CXX17=y
+ifeq "$(ENABLE_CXX17)" "n"
+ CONFIGURE_FLAGS += --disable-c++17
+endif
ifeq "$(USE_DWZ)" "y"
BUILD_DEPS += , debhelper (>= 10.10.4)
@@ -690,7 +721,7 @@ ifneq "$(PACKAGE_SDK)" "y"
endif
else
ifeq "$(PACKAGE_SDK_DOCS)" "y"
- BUILD_DEPS_INDEP += , doxygen (>= 1.8.4) <!nodoc>
+ BUILD_DEPS_INDEP += , doxygen (>= 1.8.4) <!nodoc>, graphviz <!nodoc>
else
CONFIGURE_FLAGS += --without-doxygen --without-javadoc
endif
@@ -715,6 +746,15 @@ ifneq (,$(filter libexttextcat, $(SYSTEM_STUFF)))
TEXTCAT_DATA_RECOMMENDS := libexttextcat-data
endif
+ifeq "$(ENABLE_LIBNUMBERTEXT)" "y"
+ ifneq (,$(filter libnumbertext, $(SYSTEM_STUFF)))
+ BUILD_DEPS += , libnumbertext-dev
+ NUMBERTEXT_DATA_RECOMMENDS := libnumbertext-data
+ endif
+else
+ CONFIGURE_FLAGS += --disable-libnumbertext
+endif
+
ifneq (,$(filter jpeg, $(SYSTEM_STUFF)))
BUILD_DEPS += , libjpeg-dev
endif
@@ -818,6 +858,11 @@ ifeq "$(ENABLE_PYTHON)" "y"
BUILD_DEPS += , $(PYTHON)-distutils
endif
BUILD_DEPS += , dh-python
+ ifneq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
+ BUILD_DEPS += , $(PYTHON)-lxml <!nocheck>
+ else
+ CONFIGURE_FLAGS += --without-lxml
+ endif
endif
BUILD_DEPS += , debhelper (>= 10)
@@ -920,18 +965,20 @@ endif
ifeq "$(ENABLE_JAVA)" "y"
BUILD_DEPS += , maven-repo-helper
ifeq "$(JDK)" "default"
- BUILD_DEPS += , java-common (>= 0.49)
JAVA_HOME=/usr/lib/jvm/default-java
- ifneq "$(STRETCH_BACKPORT)" "y"
- BUILD_DEPS += , default-jdk (>= 1:1.6) $(shell echo "$(filter-out !ia64,$(OOO_NO_JAVA_ARCHS))" | sed -e "s/\]/ !i386]/")
- else
+ ifneq "$(STRETCH_BACKPORT)" "y"
+ BUILD_DEPS += , java-common (>= 0.61)
+ DEFAULT_JDK := $(call java_dependency, default-jdk)
+ BUILD_DEPS += , $(shell echo $(DEFAULT_JDK) | sed -e 's/default-jdk/default-jdk (>= 1:1.6)/' | sed -e "s/\]/ !i386]/")
+ else
+ BUILD_DEPS += , java-common (>= 0.49)
BUILD_DEPS += , default-jdk (>= 1:1.6) $(shell echo "$(filter-out !ia64,$(OOO_NO_JAVA_ARCHS))")
- endif
- ifneq "$(STRETCH_BACKPORT)" "y"
- ifeq (i386,$(findstring i386,$(OOO_JAVA_ARCHS)))
+ endif
+ ifneq "$(STRETCH_BACKPORT)" "y"
+ ifeq (i386,$(findstring i386,$(OOO_JAVA_ARCHS)))
BUILD_DEPS += , default-jdk (>= 2:1.9) [i386]
+ endif
endif
- endif
ifneq (,$(findstring ia64,$(OOO_JAVA_ARCHS)))
BUILD_DEPS += , default-jdk (>= 1:1.7-48) [ia64]
endif
@@ -959,9 +1006,14 @@ ifeq "$(ENABLE_JAVA)" "y"
endif
TEST_JAVA_HOME=$(JAVA_HOME)
ifeq "$(ENABLE_MEDIAWIKI)" "y"
- BUILD_DEPS += , ant (>= 1.7.0)$(OOO_NO_JAVA_ARCHS), ant-optional (>= 1.7.0)$(OOO_NO_JAVA_ARCHS)
+ BUILD_DEPS_INDEP += , ant (>= 1.7.0)$(OOO_NO_JAVA_ARCHS), ant-optional (>= 1.7.0)$(OOO_NO_JAVA_ARCHS)
else
+ # report-builder is done in build-arch already
+ ifneq (,$(filter jfreereport, $(SYSTEM_STUFF)))
BUILD_DEPS += , ant (>= 1.6.5)$(OOO_NO_JAVA_ARCHS)
+ else
+ BUILD_DEPS_INDEP += , ant (>= 1.6.5)$(OOO_NO_JAVA_ARCHS)
+ endif
endif
# force Java with #876069 (9) and #882436 (8) fixed on i386
ifeq "$(DEB_HOST_ARCH)" "i386"
@@ -1108,7 +1160,7 @@ ifeq "$(USE_EXTERNAL_CXXLIBS)" "y"
endif
ifneq (,$(filter libwps, $(SYSTEM_STUFF)))
BUILD_DEPS += , libwps-dev (>= 0.4)
- BUILD_DEPS += , libwps-dev (>= 0.4.8) <!nocheck>
+ BUILD_DEPS += , libwps-dev (>= 0.4.9) <!nocheck>
endif
ifneq (,$(filter libwpg, $(SYSTEM_STUFF)))
BUILD_DEPS += , libwpg-dev (>= 0.3)
@@ -1134,7 +1186,7 @@ ifeq "$(USE_EXTERNAL_CXXLIBS)" "y"
endif
ifneq (,$(filter libetonyek, $(SYSTEM_STUFF)))
BUILD_DEPS += , libetonyek-dev
- BUILD_DEPS += , libetonyek-dev (>= 0.1.7) <!nocheck>
+ BUILD_DEPS += , libetonyek-dev (>= 0.1.8) <!nocheck>
endif
ifneq (,$(filter libfreehand, $(SYSTEM_STUFF)))
BUILD_DEPS += , libfreehand-dev (>= 0.1)
@@ -1174,6 +1226,9 @@ endif
ifeq "$(INSTALL_APPARMOR_PROFILES)" "y"
BUILD_DEPS += , dh-apparmor
+ ifeq "$(CHECK_APPARMOR_PROFILES)" "true"
+ BUILD_DEPS += , apparmor <!nocheck>
+ endif
endif
ifeq "$(ENABLE_EOT)" "y"
@@ -1217,20 +1272,30 @@ else
BUILD_DEPS += , libqt4-dev $(QT4_MINVER)
endif
-#ifeq "$(BUILD_KDE5)" "n"
-# CONFIGURE_FLAGS += --disable-kde5
-#else
-# ENABLE_QT5=y
-# CONFIGURE_FLAGS += --enable-kde5
-# KDE_ICONSET_DEP=libreoffice-style-breeze
-# BUILD_DEPS += , libkf5coreaddons-dev, libkf5kdelibs4support5-bin
-# BUILD_DEPS += , libxcb1-dev
-#endif
+ifeq "$(BUILD_KDE5)" "y"
+ KDE_ICONSET_DEP=libreoffice-style-breeze
+ ifeq "$(ENABLE_GTK3_KDE5)" "y"
+ CONFIGURE_FLAGS += --enable-gtk3-kde5
+ # set them here as we don't build the Qt5 plugin. If it is built
+ # it is set below
+ BUILD_DEPS += , qtbase5-dev $(QT5_MINVER), qt5-qmake $(QT5_MINVER), qtbase5-dev-tools $(QT5_MINVER)
+ BUILD_DEPS += , libglib2.0-dev (>= 2.4)
+ # for correct qmake/moc
+ BUILD_DEPS += , qtchooser
+ export QT_SELECT=5
+ endif
+ ifeq "$(ENABLE_KDE5)" "y"
+ CONFIGURE_FLAGS += --enable-kde5
+ endif
+ BUILD_DEPS += , libqt5x11extras5-dev $(QT5_MINVER)
+ BUILD_DEPS += , libkf5coreaddons-dev, libkf5i18n-dev, libkf5config-dev, libkf5windowsystem-dev, libkf5kio-dev
+ BUILD_DEPS += , libxcb1-dev
+endif
ifeq "$(ENABLE_QT5)" "y"
CONFIGURE_FLAGS += --enable-qt5
- BUILD_DEPS += , qtbase5-dev, qt5-qmake, qtbase5-dev-tools
- BUILD_DEÜS += , libglib2.0-dev (>= 2.4)
+ BUILD_DEPS += , qtbase5-dev $(QT5_MINVER), qt5-qmake $(QT5_MINVER), qtbase5-dev-tools $(QT5_MINVER)
+ BUILD_DEPS += , libglib2.0-dev (>= 2.4)
# for correct qmake/moc
BUILD_DEPS += , qtchooser
export QT_SELECT=5
@@ -1286,7 +1351,7 @@ else
BUILD_DEPS += , libgtk2.0-dev (>= 2.18.0)
endif
ifeq "$(BUILD_GTK3)" "y"
- BUILD_DEPS += , libgtk-3-dev (>= 3.8.0), libglib2.0-dev (>= 2.38.0)
+ BUILD_DEPS += , libgtk-3-dev (>= 3.18.0), libglib2.0-dev (>= 2.38.0)
ifneq (cairo,$(findstring cairo,$(SYSTEM_STUFF)))
$(error GTK3 build fails without system-cairo!!)
endif
@@ -1304,9 +1369,6 @@ else
CONFIGURE_FLAGS+= --disable-gtk3
GNOME_GTK_DEPENDS += libreoffice-gtk2
endif
-ifeq "$(ENABLE_SYSTRAY)" "n"
- CONFIGURE_FLAGS += --disable-systray
-endif
ifeq "$(ENABLE_EVO2)" "n"
CONFIGURE_FLAGS += --disable-evolution2
@@ -1542,6 +1604,10 @@ else
endif
BUILD_PATH := $(CURDIR)/debian/usr/bin:$(BUILD_PATH)
+ifneq "$(ENABLE_DEPENDENCY_TRACKING)" "y"
+CONFIGURE_FLAGS += --disable-dependency-tracking
+endif
+
# Because of the stampdir magic, when you actually want to run a rule
# over, you would have to remove the stamp manually. Now, just do
# 'debian/rules <target> <target> ... FORCE=1', and the stamp files
@@ -1569,13 +1635,16 @@ clean-debdir:
find debian -name "*.links" ! -name "libreoffice-dev-doc.links" \
! -name "libreoffice-java-common.links" \
- ! -name "liblibreofficekitgtk.links" -exec rm {} \;
+ ! -name "liblibreofficekitgtk.links" \
+ ! -name "libreoffice-help-common.links" -exec rm {} \;
if [ -d "$(STAMP_DIR)" ]; then rm -rf "$(STAMP_DIR)"; fi
rm -f debian/*.bug-script
rm -f debian/shlibs.local
- rm -f debian/libreoffice-dev-doc.doc-base.*
+ rm -f debian/libreoffice-dev-doc.doc-base.* \
+ debian/libreoffice-help-*.doc-base
+ rm -f debian/libreoffice-help-*.lintian-overrides
rm -f debian/*.install debian/*.dirs debian/*.changelog
rm -f debian/*.postinst debian/*.postrm debian/*.preinst debian/*.prerm debian/*.triggers
rm -f debian/pom*.xml
@@ -1610,6 +1679,8 @@ endif
rm -f download.list
+ rm -f extras/source/truetype/symbol/opens___.ttf
+
# obsolete lock file not cleaned up....
rm -f dbaccess/qa/extras/testdocuments/fdo84315.odb.lck
@@ -1750,9 +1821,6 @@ endif
ifeq "$(BUILD_GTK)" "y"
cat debian/control.gtk2.in >> debian/control
endif
-ifeq "$(ENABLE_SYSTRAY)" "y"
- cat debian/control.systray.in >> debian/control
-endif
ifeq "$(BUILD_GTK3)" "y"
cat debian/control.gtk3.in >> debian/control
endif
@@ -1767,7 +1835,7 @@ endif
ifeq "$(ENABLE_EVO2)" "y"
cat debian/control.evolution.in >> debian/control
endif
- cat debian/control.subsequentcheckbase.in >> debian/control
+ cat debian/control.test-packages.in >> debian/control
ifeq "$(PACKAGE_LIBRELOGO)" "y"
cat debian/control.librelogo.in >> debian/control
endif
@@ -1776,6 +1844,7 @@ endif
cat debian/control.transitionals.in >> debian/control
perl -pi -e "s,%OOO_ARCHS%,$(OOO_ARCHS),g" debian/control
+ perl -pi -e "s,%OOO_64BIT_ARCHS%,$(OOO_64BIT_ARCHS),g" debian/control
perl -pi -e "s,%OOO_BE_ARCHS%,$(OOO_BE_ARCHS),g" debian/control
perl -pi -e "s,%OOO_LE_ARCHS%,$(OOO_LE_ARCHS),g" debian/control
perl -pi -e "s,%OOO_BASE_ARCHS%,$(OOO_BASE_ARCHS),g" debian/control
@@ -1813,6 +1882,8 @@ ifneq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
perl -pi -e "s/(Build-Conflicts: .*)/\1,fonts-liberation (= 1:1.07.4-3) <!nocheck>,/" debian/control
perl -pi -e "s/(Build-Conflicts: .*)/\1,fonts-liberation (= 1:1.07.4-4) <!nocheck>,/" debian/control
perl -pi -e "s/(Build-Conflicts: .*)/\1,fonts-liberation (= 1:1.07.4-5) <!nocheck>,/" debian/control
+ # be sure to use our rebuilt font
+ perl -pi -e "s/(Build-Conflicts: .*)/\1,fonts-opensymbol <!nocheck>,/" debian/control
endif
$(PYTHON) debian/scripts/joinctrl.py < debian/control > debian/control.tmp
@@ -1822,8 +1893,6 @@ endif
# match myspell-fi and libreoffice-soikko/-voikko
perl -pi -e 's/myspell-dictionary-fi/myspell-dictionary-fi | libreoffice-spellcheck-fi/' debian/control
perl -pi -e 's/hyphen-fi/hyphen-fi | libreoffice-hyphenation-fi/' debian/control
- # similar for tr (libreoffice-zemberek)
- perl -pi -e 's/myspell-dictionary-tr/myspell-dictionary-tr | libreoffice-spellcheck-tr/' debian/control
ifeq "$(USE_DBUS)" "y"
ifeq "$(ENABLE_BLUETOOTH)" "y"
@@ -1857,7 +1926,6 @@ $(STAMP_DIR)/prepare:
for FILE in debian/scripts/move-if-change \
debian/scripts/get_libebook_dep.sh \
debian/scripts/get_libvlc_dep.sh \
- debian/scripts/get_ttf_version.pl \
debian/scripts/locale-gen \
autogen.sh; \
do \
@@ -1874,6 +1942,17 @@ $(STAMP_DIR)/prepare:
touch $(TARFILE_LOCATION)/185d60944ea767075d27247c3162b3bc-unowinreg.dll; \
fi
+ifneq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
+ifeq (terse,$(findstring terse,$(DEB_BUILD_OPTIONS)))
+ if [ -d .pc/do-not-hide-test-output.diff ]; then \
+ patch -p1 -R < debian/patches/do-not-hide-test-output.diff; \
+ TMP=`mktemp -q`; grep -v do-not-hide-test-output .pc/applied-patches \
+ > $$TMP && mv $$TMP .pc/applied-patches; \
+ rm -rf .pc/do-not-hide-test-output.diff; \
+ fi
+endif
+endif
+
touch $@
.PHONY: config_host.mk
@@ -1902,7 +1981,8 @@ $(STAMP_DIR)/build-arch:
CLANGDIR=$(CLANGDIR) \
MARIADBCONFIG=$(MARIADBCONFIG) \
FIREBIRD_CFLAGS=$(FIREBIRD_CFLAGS) FIREBIRD_LIBS=$(FIREBIRD_LIBS) \
- ./autogen.sh $(CONFIGURE_FLAGS) --without-junit --without-cppunit \
+ ./autogen.sh $(CONFIGURE_FLAGS) \
+ --without-junit --without-cppunit \
--disable-ext-wiki-publisher \
--disable-scripting-javascript --disable-scripting-beanshell \
--without-doxygen --without-javadoc \
@@ -1942,12 +2022,20 @@ endif
./autogen.sh $(CONFIGURE_FLAGS) $(CONFIGURE_FLAGS_INDEP)
PATH=$(BUILD_PATH) LD_LIBRARY_PATH=$(BUILD_LD_LIBRARY_PATH) ARCH_FLAGS=$(ARCH_FLAGS) TMP=`mktemp -q -d` $(MAKE) build-nocheck
-ifeq "$(BUILD_TEST_PACKAGE)" "y"
+ifeq "$(BUILD_TEST_PACKAGES)" "y"
ifeq "$(ENABLE_JUNIT4)" "y"
PATH=$(BUILD_PATH) LD_LIBRARY_PATH=$(BUILD_LD_LIBRARY_PATH) ARCH_FLAGS=$(ARCH_FLAGS) TMP=`mktemp -q -d` $(MAKE) Jar_{OOoRunner,test,ConnectivityTools}
endif
endif
+ifeq "$(BUILD_TEST_PACKAGES)" "y"
+ find workdir/Zip -name "smoketestdoc*" | xargs rm
+ patch -p0 < $(CURDIR)/debian/tests/patches/smoketest-disable-extension-tests.diff
+ cd smoketest && $(MAKE) Zip_smoketestdoc
+ patch -p0 -R < $(CURDIR)/debian/tests/patches/smoketest-disable-extension-tests.diff
+ cp workdir/Zip/smoketestdoc.zip workdir/Zip/smoketestdoc.sxw
+endif
+
ifneq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
$(CURDIR)/debian/rules check-indep
endif
@@ -1975,8 +2063,7 @@ endif
--without-doxygen --without-javadoc \
--with-galleries=no --with-theme="$(DEFAULT_IMAGE)"
- # generate the needed en_US.UTF-8. Upstream doesn't want to support
- # anything else (even though C.UTF-8 works)
+ # generate the needed en_US.UTF-8 locale
mkdir -p $(CURDIR)/debian/locales
USE_CPUS=$(NUM_CPUS) debian/scripts/locale-gen
@@ -1990,7 +2077,6 @@ endif
export PATH=$(BUILD_PATH); \
export TMPDIR=$$t; \
export HOME=$$t; \
- export SAL_USE_VCLPLUGIN="svp"; \
export LOCPATH=$(CURDIR)/debian/locales; \
export LANG=en_US.UTF-8; \
export LC_ALL=en_US.UTF-8; \
@@ -2055,7 +2141,7 @@ endif
# FIXME
cd $(CURDIR)/debian/tmp/pkg && rm -rf \*
-
+
ifeq "$(ENABLE_QT5)" "y"
# we need to do it here. If -kde isn't built
# there's no -kde.install generated, so dh_missing complains later
@@ -2068,6 +2154,14 @@ ifeq "$(BUILD_KDE)" "y"
debian/tmp/pkg/libreoffice-kde$(KDE_MAJOR)
endif
+ifeq "$(ENABLE_HELP)" "y"
+ifeq "$(ENABLE_HTML_HELP)" "y"
+ mkdir -p debian/tmp/pkg/libreoffice-help-common/$(OODIR); \
+ mv debian/tmp/pkg/libreoffice-common/$(OODIR)/help \
+ debian/tmp/pkg/libreoffice-help-common/$(OODIR)
+endif
+endif
+
# prepare install/dir files for dh
for i in `cd $(CURDIR)/debian/tmp/pkg; ls -1 | xargs`; do \
echo "$${i}/usr/* usr" > debian/$$i.install; \
@@ -2088,6 +2182,7 @@ ifeq (ca-valencia,$(findstring ca-valencia,$(LANGPACKISOS)))
rm -f debian/libreoffice-l10n-ca-valencia.dirs debian/libreoffice-l10n-ca-valencia.install; \
fi
endif
+ifeq "$(ENABLE_HELP)" "y"
ifeq (ca-valencia,$(findstring ca-valencia,$(HELPISOS)))
if [ -f debian/libreoffice-help-ca-valencia.dirs -a -f debian/libreoffice-help-ca-valencia.install ]; then \
cat debian/libreoffice-help-ca-valencia.dirs >> debian/libreoffice-help-ca.dirs; \
@@ -2095,6 +2190,7 @@ ifeq (ca-valencia,$(findstring ca-valencia,$(HELPISOS)))
rm -f debian/libreoffice-help-ca-valencia.dirs debian/libreoffice-help-ca-valencia.install; \
fi
endif
+endif
# and sr-Latn should be in -sr
ifeq (sr-Latn,$(findstring sr-Latn,$(LANGPACKISOS)))
if [ -f debian/libreoffice-l10n-sr-Latn.dirs -a -f debian/libreoffice-l10n-sr-Latn.install ]; then \
@@ -2227,7 +2323,12 @@ endif
$(PKGDIR)-$$i/$(OODIR)/program; \
done
+ifeq "$(ENABLE_HELP)" "y"
# move help to /usr/share
+ ifeq "$(ENABLE_HTML_HELP)" "y"
+ mv $(PKGDIR)-help-common/usr/lib \
+ $(PKGDIR)-help-common/usr/share
+ endif
for iso in $(HELPISOS); do \
pkgiso=`echo $$iso | tr A-Z a-z`; \
if [ -e $(PKGDIR)-help-$$pkgiso/usr ]; then \
@@ -2242,6 +2343,7 @@ ifeq (sk,$(findstring sk,$(HELPISOS)))
ln -s cs \
$(PKGDIR)-help-sk/$(shell echo $(OODIR) | sed -e s/lib/share/)/help/sk
endif
+endif
ifeq "$(ENABLE_JAVA)" "y"
# move officebean.jar into -officebean (They will be moved out of -core
@@ -2281,15 +2383,6 @@ ifeq "$(ENABLE_JAVA)" "y"
endif
endif
-ifeq "$(BUILD_GTK)" "y"
- ifeq "$(ENABLE_SYSTRAY)" "y"
- # Gtk quickstarter, so to -gtk (via -gnome)
- mkdir -p -m755 $(PKGDIR)-systray/$(OODIR)/share/xdg
- mv $(PKGDIR)-common/$(OODIR)/share/xdg/qstart.desktop \
- $(PKGDIR)-systray/$(OODIR)/share/xdg
- endif
-endif
-
ifeq "$(PACKAGE_SDK)" "y"
# move arch-indep stuff into a libreoffice-dev-common
mkdir -p $(PKGDIR)-dev-common/usr/include
@@ -2633,10 +2726,6 @@ endif
mv $(PKGDIR)-gnome/$(OODIR)/program/* $(PKGDIR)-gtk2/$(OODIR)/program/
ifeq "$(BUILD_GTK)" "y"
mkdir -p -m755 $(PKGDIR)-gtk2/$(OODIR)/share
- ifeq "$(ENABLE_SYSTRAY)" "y"
- mkdir -p $(PKGDIR)-systray/$(OODIR)/program
- mv $(PKGDIR)-gtk2/$(OODIR)/program/*qstart*so $(PKGDIR)-systray/$(OODIR)/program
- endif
ifeq "$(ENABLE_GIO)" "y"
mv $(PKGDIR)-gtk2/$(OODIR)/program/libucpgio1lo.so \
$(PKGDIR)-gnome/$(OODIR)/program/
@@ -2689,9 +2778,6 @@ endif
for i in writer calc impress draw math base; do \
perl -pi -e 's/Application;//; s/X-Red-Hat-Base;//; s/X-SuSE-Core-Office;//; s/X-MandrivaLinux-.*;//;' $(PKGDIR)-$$i/usr/share/applications/libreoffice-$$i.desktop; \
done
- ifeq "$(ENABLE_SYSTRAY)" "y"
- perl -pi -e 's/Application;//' $(PKGDIR)-systray/$(OODIR)/share/xdg/qstart.desktop
- endif
ifeq "$(ENABLE_PYTHON)" "y"
# PyUNO packaging
@@ -2931,7 +3017,7 @@ ifeq "$(ENABLE_JAVA)" "y"
*) ln -s `echo $$i | sed -e 's,$(CURDIR)/$(PKGDIR)-java-common,,'` `basename $$i` ;; esac; \
done
-ifeq "$(BUILD_TEST_PACKAGE)" "y"
+ifeq "$(BUILD_TEST_PACKAGES)" "y"
ifeq "$(ENABLE_JUNIT4)" "y"
rm -rf $(PKGDIR)-subsequentcheckbase
mkdir -p $(PKGDIR)-subsequentcheckbase/$(OODIR)/program/classes/
@@ -2939,6 +3025,13 @@ ifeq "$(BUILD_TEST_PACKAGE)" "y"
cp workdir/Jar/$$jar.jar $(PKGDIR)-subsequentcheckbase/$(OODIR)/program/classes/; \
done
endif
+
+ rm -rf $(PKGDIR)-smoketest-data
+ mkdir -p $(PKGDIR)-smoketest-data/usr/share/libreoffice
+ cp workdir/Extension/TestExtension.oxt \
+ $(PKGDIR)-smoketest-data/usr/share/libreoffice
+ cp workdir/Zip/smoketestdoc.sxw \
+ $(PKGDIR)-smoketest-data/usr/share/libreoffice
endif
endif
@@ -3100,6 +3193,13 @@ endif
$(PKGDIR)-common/usr/share/applications/libreoffice-$$i.desktop; \
done
+ # fix the shebangs to make lintian happy
+ sed -i "s,/usr/bin/env perl,/usr/bin/perl,g" \
+ $(PKGDIR)-common/usr/share/$(OODIRNAME)/bin/lo-xlate-lang
+ for i in $(PKGDIR)-common/$(OODIR)/share/config/webcast/*.pl; do \
+ sed -i "s,/usr/bin/env perl,/usr/bin/perl,g" $$i; \
+ done
+
for i in $(ARCH_INDEP_PACKAGES); do \
if [ -e debian/$$i.bug-script.in ]; then \
cat debian/$$i.bug-script.in \
@@ -3132,10 +3232,12 @@ endif
$(PKGDIR)-common/usr/share/$(OODIRNAME)/shell-lib-extensions.sh
ifneq "$(ENABLE_HELP)" "n"
+ ifneq "$(ENABLE_HTML_HELP)" "y"
# those are needed in /usr/share, too
mkdir -p $(PKGDIR)-common/$(shell echo $(OODIR) | sed -e s/lib/share/)
mv $(PKGDIR)-common/$(OODIR)/help \
$(PKGDIR)-common/$(shell echo $(OODIR) | sed -e s/lib/share/)
+ endif
endif
# help is in /usr/share
sed -i 's,$$(instpath)/help,/$(shell echo $(OODIR) | sed -e s/lib/share/)/help,' \
@@ -3185,7 +3287,7 @@ endif
ifeq "$(INSTALL_APPARMOR_PROFILES)" "y"
mkdir -p $(PKGDIR)-common/etc/apparmor.d
./sysui/desktop/share/apparmor.sh /$(OODIR)/ sysui/desktop/apparmor/ \
- $(PKGDIR)-common/etc/apparmor.d/ false
+ $(PKGDIR)-common/etc/apparmor.d/ false $(CHECK_APPARMOR_PROFILES)
ifneq "$(ENABLE_APPARMOR_PROFILES)" "y"
# disable the apparmor files per default
mkdir -p $(PKGDIR)-common/etc/apparmor.d/disable
@@ -3310,11 +3412,6 @@ endif
dh_strip_nondeterminism -a
dh_makeshlibs -puno-libs3 -V"uno-libs3 (>= $(shell grep UREPACKAGEVERSION $(SOURCE_TREE)/instsetoo_native/util/openoffice.lst | awk '{ print $$2 }' | cut -d. -f1-3)~), ure" -- -c0 -d -V -v`echo $(BINARY_VERSION) | cut -d: -f2`
dh_makeshlibs -n -pure -V"ure (>= $(shell grep UREPACKAGEVERSION $(SOURCE_TREE)/instsetoo_native/util/openoffice.lst | awk '{ print $$2 }' | cut -d. -f1-3)~)" -- -d -V -v`echo $(BINARY_VERSION) | cut -d: -f2`
- # ugly hack, but why does that happen? It's not in .symbols...
- TMP=`mktemp -q`; \
- grep -v PRIVATE debian/uno-libs3/DEBIAN/symbols > $$TMP && \
- mv $$TMP debian/uno-libs3/DEBIAN/symbols && \
- chmod 644 debian/uno-libs3/DEBIAN/symbols
dh_installdeb -a
rm -f debian/shlibs.local
ifeq "$(BUILD_KFREEBSD)" "y"
@@ -3490,30 +3587,45 @@ endif
rm -rf debian/$$pkg/DEBIAN;\
done
+ifeq "$(ENABLE_HELP)" "y"
+ifeq "$(ENABLE_HTML_HELP)" "y"
+ HELP_FILES_COMMON=`find $(CURDIR)/debian/libreoffice-help-common/usr/share -type f | sed -e 's,$(CURDIR)/debian/libreoffice-help-common,,g' | xargs`; \
+ for iso in $(HELPISOS); do \
+ pkgiso=`echo $$iso | tr A-Z a-z`; \
+ HELP_FILES_LANG=`find $(CURDIR)/debian/libreoffice-help-$$pkgiso/usr/share | sed -e "s,$(CURDIR)/debian/libreoffice-help-$$pkgiso,,g" | xargs`; \
+ TMP=`mktemp -q`; \
+ cp debian/libreoffice-help.doc-base.in $$TMP; \
+ echo "Files: $$HELP_FILES_COMMON $$HELP_FILES_LANG" >> $$TMP; \
+ cat $$TMP | perl -e 'while(<>) { if (/^Files/) {$$f=1;} if ($$f eq "1") { chomp(); } print $$_; }' > debian/libreoffice-help-$$pkgiso.doc-base; \
+ rm -f $$TMP; \
+ perl -pi -e 's,([a-z])\/usr/,$$1 \/usr/,g' debian/libreoffice-help-$$pkgiso.doc-base; \
+ perl -pi -e 's,([0-9])\/usr/,$$1 \/usr/,g' debian/libreoffice-help-$$pkgiso.doc-base; \
+ sed -i s/@LCODE@/$$pkgiso/ debian/libreoffice-help-$$pkgiso.doc-base; \
+ sed -i s/@HELPISO@/$$iso/ debian/libreoffice-help-$$pkgiso.doc-base; \
+ done
+endif
+endif
+
ifeq "$(PACKAGE_SDK)" "y"
for i in idl cpp java; do \
cat debian/lo-$$i-ref.in \
| sed -e "s/@lo_sources_ver@/$(lo_sources_ver)/" \
> debian/libreoffice-dev-doc.doc-base.lo-$$i-ref; \
done
- UDK_CPP_FILES=`find $(CURDIR)/debian/libreoffice-dev-doc/usr/share/doc/libreoffice/sdk/docs/cpp/ref -type f | sed -e 's,$(CURDIR)/debian/libreoffice-dev-doc,,g' | xargs`; \
- echo "Files: $$UDK_CPP_FILES" >> debian/libreoffice-dev-doc.doc-base.lo-cpp-ref
+ for i in idl cpp; do \
+ UDK_FILES=`find $(CURDIR)/debian/libreoffice-dev-doc/usr/share/doc/libreoffice/sdk/docs/$$i/ref -type f ! -name "*.map" -a ! -name "*.md5" | sed -e 's,$(CURDIR)/debian/libreoffice-dev-doc,,g' | xargs`; \
+ TMP=`mktemp -q`; \
+ cp debian/libreoffice-dev-doc.doc-base.lo-$$i-ref $$TMP; \
+ echo "Files: $$UDK_FILES" >> $$TMP; \
+ cat $$TMP | perl -e 'while(<>) { if (/^Files/) {$$f=1;} if ($$f eq "1") { chomp(); } print $$_; }' > debian/libreoffice-dev-doc.doc-base.lo-$$i-ref; \
+ rm -f $$TMP; \
+ perl -pi -e 's,([a-z])\/usr/,$$1 \/usr/,g' debian/libreoffice-dev-doc.doc-base.lo-$$i-ref; \
+ done
ifeq "$(ENABLE_JAVA)" "y"
UDK_JAVA_FILES=`find $(CURDIR)/debian/libreoffice-dev-doc/usr/share/doc/libreoffice/sdk/docs/java/ref -type f ! -name "javadoc_log.txt" | sed -e 's,$(CURDIR)/debian/libreoffice-dev-doc,,g' | xargs`; \
echo "Files: $$UDK_JAVA_FILES" >> debian/libreoffice-dev-doc.doc-base.lo-java-ref
rm -f $(CURDIR)/debian/libreoffice-dev-doc/usr/share/doc/libreoffice-dev/sdk/docs/java/ref/javadoc_log.txt
endif
- # xargs strips the many files here so we need to post-process it.
- UDK_IDL_FILES=`find $(CURDIR)/debian/libreoffice-dev-doc/usr/share/doc/libreoffice/sdk/docs/idl/ref -type f | sed -e 's,$(CURDIR)/debian/libreoffice-dev-doc,,g' | xargs`; \
- TMP=`mktemp -q`; \
- cp debian/libreoffice-dev-doc.doc-base.lo-idl-ref $$TMP; \
- echo "Files: $$UDK_IDL_FILES" >> $$TMP; \
- cat $$TMP | perl -e 'while(<>) { if (/^Files/) {$$f=1;} if ($$f eq "1") { chomp(); } print $$_; }' > debian/libreoffice-dev-doc.doc-base.lo-idl-ref; \
- rm -f $$TMP
- # no idea why this happens; afais this can't come from above
- # since it doesn't affect the files at the end of the lines...
- # But fix it..
- perl -pi -e 's,([a-z])\/usr/,$$1 \/usr/,g' debian/libreoffice-dev-doc.doc-base.lo-idl-ref
endif
# not for fonts-opensymbol and extensions, as they have an own version.
# And librelogo gets an own changelog
@@ -3521,8 +3633,9 @@ endif
# libreoffice-dev-doc installs directly into /usr/share/doc/libreoffice-dev...
dh_installdocs -i -A -Nlibreoffice-librelogo -Nfonts-opensymbol \
-Nlibreoffice-wiki-publisher -Nlibreoffice-nlpsolver \
- -Nlibreoffice-dev-doc --link-doc=libreoffice-common
- dh_installdocs -plibreoffice-librelogo -pfonts-opensymbol -plibreoffice-wiki-publisher -plibreoffice-nlpsolver \
+ -Nlibreoffice-dev-doc -Nlibreoffice-smoketest-data \
+ --link-doc=libreoffice-common
+ dh_installdocs -plibreoffice-librelogo -pfonts-opensymbol -plibreoffice-wiki-publisher -plibreoffice-nlpsolver -plibreoffice-smoketest-data \
-plibreoffice-dev-doc
cp workdir/CustomTarget/readlicense_oo/readme/README_en-US \
$(PKGDIR)-common/usr/share/doc/libreoffice-common/README
@@ -3541,9 +3654,21 @@ ifeq "$(PACKAGE_SDK_DOCS)" "y"
dh_doxygen -plibreoffice-dev-doc
endif
dh_installmime -i
+ifeq "$(ENABLE_HELP)" "y"
+ ifeq "$(ENABLE_HTML_HELP)" "y"
+ for iso in $(shell echo $(HELPISOS) | tr A-Z a-z); do \
+ sed -e s/@LCODE@/$$iso/ < debian/libreoffice-help.lintian-overrides.in \
+ > debian/libreoffice-help-$$iso.lintian-overrides; \
+ done
+ endif
+endif
dh_lintian -i
dh_bugfiles -i -A
+ifeq "$(STRETCH_BACKPORT)" "y"
+ dh_link -i -Nlibreoffice-help-common
+else
dh_link -i
+endif
dh_fixperms -i
dh_icons -i
ifeq "$(INSTALL_APPARMOR_PROFILES)" "y"
@@ -3564,7 +3689,7 @@ endif
# and it adds a librhino-java Depends where we still use internal rhino
perl -pi -e "s/librhino-java//" \
debian/libreoffice-script-provider-js.substvars
-ifeq "$(BUILD_TEST_PACKAGE)" "y"
+ifeq "$(BUILD_TEST_PACKAGES)" "y"
perl -pi -e 's/junit4/junit4 $(JUNIT_MIN_VER)/' \
debian/libreoffice-subsequentcheckbase.substvars
endif
@@ -3579,11 +3704,14 @@ endif
-V'java-common-depends=$(JAVA_COMMON_DEPENDS)' \
-V'java-runtime-depends=$(JAVA_RUNTIME_DEPENDS)' \
-V'textcat-data-recommends=$(TEXTCAT_DATA_RECOMMENDS)' \
+ -V'numbertext-data-recommends=$(NUMBERTEXT_DATA_RECOMMENDS)' \
-V'pyuno-depends=$(PYUNO_DEPENDS)' \
+ -V'help-depends=$(HELP_DEPENDS)' \
+ -V'help-common-depends=$(HELP_COMMON_DEPENDS)' \
-V'Binary-Version=$(BINARY_VERSION)' \
-v$(BINARY_VERSION)
dh_gencontrol -pfonts-opensymbol -- \
- -v$(shell echo `echo $(BINARY_VERSION) | cut -d: -f1` + 1 | bc):$(shell debian/scripts/get_ttf_version.pl debian/fonts-opensymbol/usr/share/fonts/truetype/openoffice/opens___.ttf)+LibO`echo $(BINARY_VERSION) | cut -d: -f2`
+ -v$(shell echo `echo $(BINARY_VERSION) | cut -d: -f1` + 1 | bc):$(shell fontforge -lang=ff -c 'Open($$1); Print ($$fontversion); Quit(0);' debian/fonts-opensymbol/usr/share/fonts/truetype/openoffice/opens___.ttf)+LibO`echo $(BINARY_VERSION) | cut -d: -f2`
ifeq "$(ENABLE_MEDIAWIKI)" "y"
dh_gencontrol -plibreoffice-wiki-publisher -- \
-V'java-common-depends=$(JAVA_COMMON_DEPENDS)' \
diff --git a/debian/scripts/get_ttf_version.pl b/debian/scripts/get_ttf_version.pl
deleted file mode 100755
index 106050b..0000000
--- a/debian/scripts/get_ttf_version.pl
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/perl
-
-# derived from http://cgit.freedesktop.org/libreoffice/core/diff/solenv/bin/modules/installer/windows/file.pm?id=38e24f1d059a6123ea15a68b4b24ca984642d66e
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-open (TTF, "<$ARGV[0]") or die "could not open ttf";
-binmode TTF;
-{local $/ = undef; $ttfdata = <TTF>;}
-close TTF;
-
-my $ttfversion = "(Version )([0-9]+[.]*([0-9][.])*[0-9]+)";
-
-if ($ttfdata =~ /$ttfversion/ms)
-{
- my ($version, $subversion, $microversion, $vervariant) = split(/\./,$2);
- $fileversion = int($version) . "." . int($subversion);
-}
-
-print $fileversion;
diff --git a/debian/source/include-binaries b/debian/source/include-binaries
index 343b412..3ca1476 100644
--- a/debian/source/include-binaries
+++ b/debian/source/include-binaries
@@ -4,4 +4,4 @@ desktop/test/deployment/update/platform/linux_sparc64.oxt
tarballs/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
tarballs/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
tarballs/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
-tarballs/pdfium-3235.tar.bz2
+tarballs/pdfium-3426.tar.bz2
diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides
index c2c81d9..49a2083 100644
--- a/debian/source/lintian-overrides
+++ b/debian/source/lintian-overrides
@@ -1,2 +1,3 @@
# This one *has* a (detached) license paragraph....
libreoffice source: missing-license-paragraph-in-dep5-copyright mpl-2.0 (paragraph at line 37)
+libreoffice source: source-is-missing helpcontent2/help3xsl/fuse.js line length is 564 characters (>512)
diff --git a/debian/tests/control b/debian/tests/control
index dd105b1..ed7bb05 100644
--- a/debian/tests/control
+++ b/debian/tests/control
@@ -1,14 +1,40 @@
+Tests: uno
+Depends: @builddeps@, ure
+Restrictions: allow-stderr, rw-build-tree
+
+Tests: smoketest
+Depends: @builddeps@, libreoffice-dev, libreoffice, libreoffice-sdbc-hsqldb, libreoffice-sdbc-firebird, libreoffice-smoketest-data
+Restrictions: allow-stderr, rw-build-tree, skippable
+
Tests: pyuno-import, uno-import
Depends: python3, python3-uno
+# this is already done by smoketest upstream, but fails when doing it against
+# the installed LO. works standalone, though, so it's patched out of the
+# smoketest. Do it here separately.
+Tests: test-extension
+Depends: libreoffice-core, libreoffice-common, libreoffice-java-common, libreoffice-smoketest-data, default-jdk
+
+Tests: test-extension-shared
+Depends: libreoffice-core, libreoffice-common, libreoffice-java-common, libreoffice-smoketest-data, default-jdk
+Restrictions: needs-root
+
Tests: uicheck
Depends: @builddeps@, libreoffice, python3-uno, libreoffice-l10n-he, libreoffice-l10n-ja
Restrictions: allow-stderr
-Tests: junit-subsequentcheck
-Depends: @builddeps@, libreoffice, libreoffice-subsequentcheckbase, libreoffice-sdbc-hsqldb
+Tests: junit
+Depends: @builddeps@, libreoffice, libreoffice-subsequentcheckbase, libreoffice-sdbc-hsqldb, libreoffice-sdbc-firebird
Restrictions: allow-stderr
+Test-Command: export SYSTEM_UCPP=TRUE; export DOXYGEN=`which doxygen`; export ENABLE_JAVA=TRUE; export JDK=sun; export JAVADOC=/usr/lib/jvm/default-java/bin/javadoc; perl odk/util/check.pl /usr/lib/libreoffice/sdk
+Depends: libreoffice-dev, libreoffice-dev-doc
+
Tests: odk-build-examples
Depends: @builddeps@, libreoffice-dev, libreoffice-dev-doc, libreoffice-java-common, python3-uno, libreoffice-officebean
Restrictions: allow-stderr
+
+# inspired by https://salsa.debian.org/apparmor-team/apparmor-profiles-extra/commit/7fbcc4788d0e94764eeeff2f080796601241f986
+Test-Command: for i in /etc/apparmor.d/usr.lib.libreoffice.program.*; do /sbin/apparmor_parser --add --skip-cache --skip-kernel-load $i; done
+Depends: libreoffice-common, apparmor
+Restrictions: allow-stderr
diff --git a/debian/tests/junit-subsequentcheck b/debian/tests/junit
index 6454087..824b3ba 100755
--- a/debian/tests/junit-subsequentcheck
+++ b/debian/tests/junit
@@ -9,16 +9,22 @@ set -e
set -E
SRCDIR=`pwd`
-WORKDIR=`mktemp -d`
CHECK_PARALLELISM=1
+if [ -n "$AUTOPKGTEST_TMP" ]; then
+ WORKDIR=`mktemp -q -d -p $AUTOPKGTEST_TMP`
+else
+ WORKDIR=`mktemp -q -d`
+fi
function unapply() {
+ echo
echo "====== Unapplying the patch ======"
patch -p1 -R < ./debian/tests/patches/java-subsequentcheck-standalone.diff
}
trap "unapply" ERR
+echo
echo "====== Patching the tree to only build Java-based unittests against an existing installation ======"
patch -p1 < ./debian/tests/patches/java-subsequentcheck-standalone.diff
@@ -29,16 +35,12 @@ rm -f config_host.mk
sed -i 's/export OOO_JUNIT_JAR=.*/export OOO_JUNIT_JAR=\/usr\/share\/java\/junit4.jar/' config_host.mk
echo
-echo "====== Cleaning tree ======"
-make clean
-
-OOO_TEST_SOFFICE="${1:-path:/usr/lib/libreoffice/program/soffice}"
-
-echo
echo "====== Enabling core dumps ======"
# yes, we want core dumps and stack traces
ulimit -c unlimited
+OOO_TEST_SOFFICE="${1:-path:/usr/lib/libreoffice/program/soffice}"
+
echo
echo "====== Starting subsequentcheck with ${CHECK_PARALLELISM} job against ${OOO_TEST_SOFFICE} ======"
diff --git a/debian/tests/odk-build-examples b/debian/tests/odk-build-examples
index 5a6da0b..a2e8033 100755
--- a/debian/tests/odk-build-examples
+++ b/debian/tests/odk-build-examples
@@ -12,12 +12,14 @@ CHECK_PARALLELISM=1
function unapply() {
cd $SRCDIR
+ echo
echo "====== Unapplying the patch ======"
patch -p1 -R < ./debian/tests/patches/odk-build-examples-standalone.diff
}
trap "unapply" ERR
+echo
echo "====== Patching the tree to build the odk build-examples test against an existing installation ======"
patch -p1 < ./debian/tests/patches/odk-build-examples-standalone.diff
@@ -30,9 +32,11 @@ echo
echo "====== Starting build with ${CHECK_PARALLELISM} job against /usr/lib/libreoffice/sdk ======"
cd $SRCDIR/odk
+
export PARALLELISM=$CHECK_PARALLELISM
make -rk \
- CustomTarget_odk/build-examples verbose=t
+ CustomTarget_odk/build-examples \
+ CustomTarget_odk/build-examples_java verbose=t
unapply
diff --git a/debian/tests/patches/disable-db-tests.diff b/debian/tests/patches/disable-db-tests.diff
index 7f4f6c4..ffd39b9 100644
--- a/debian/tests/patches/disable-db-tests.diff
+++ b/debian/tests/patches/disable-db-tests.diff
@@ -77,6 +77,7 @@ diff -urN smoketest-old/data/Test_DB.xml smoketest/data/Test_DB.xml
- CppunitTest_dbaccess_empty_stdlib_save \
- CppunitTest_dbaccess_nolib_save \
- CppunitTest_dbaccess_macros_test \
+- CppunitTest_dbaccess_hsqlschema_import \
-))
-
-ifeq ($(ENABLE_JAVA),TRUE)
diff --git a/debian/tests/patches/odk-build-examples-standalone.diff b/debian/tests/patches/odk-build-examples-standalone.diff
index 433b69c..f7c11ec 100644
--- a/debian/tests/patches/odk-build-examples-standalone.diff
+++ b/debian/tests/patches/odk-build-examples-standalone.diff
@@ -1,38 +1,38 @@
-diff --git a/odk/CustomTarget_build-examples.mk b/odk/CustomTarget_build-examples.mk
-index 89e427348087..1aa4d766823f 100644
---- a/odk/CustomTarget_build-examples.mk
-+++ b/odk/CustomTarget_build-examples.mk
-@@ -104,7 +104,7 @@ endif
- && export \
- UserInstallation=$(call gb_Helper_make_url,$(call gb_CustomTarget_get_workdir,odk/build-examples)/user) \
- $(foreach my_dir,$(my_example_dirs), \
-- && (cd $(INSTDIR)/$(SDKDIRNAME)/examples/$(my_dir) \
-+ && (cd /usr/lib/libreoffice/sdk/examples/$(my_dir) \
- && printf 'yes\n' | LC_ALL=C make \
- $(if $(filter MACOSX,$(OS)), SHELL=$(ODK_BUILD_SHELL), )))) \
- >$(call gb_CustomTarget_get_workdir,odk/build-examples)/log 2>&1 \
-@@ -104,17 +103,17 @@ $(call gb_CustomTarget_get_target,odk/build-examples): \
- && exit $$RET)
+diff --git a/odk/build-examples_common.mk b/odk/build-examples_common.mk
+index 931d6eea856e..2749b6930079 100644
+--- a/odk/build-examples_common.mk
++++ b/odk/build-examples_common.mk
+@@ -29,7 +29,7 @@ endif
+ && export \
+ UserInstallation=$(call gb_Helper_make_url,$(call gb_CustomTarget_get_workdir,$(1))/user) \
+ $(foreach my_dir,$(2), \
+- && (cd $(INSTDIR)/$(SDKDIRNAME)/examples/$(my_dir) \
++ && (cd /usr/lib/libreoffice/sdk/examples/$(my_dir) \
+ && printf 'yes\n' | LC_ALL=C make \
+ $(if $(filter MACOSX,$(OS)), SHELL=$(ODK_BUILD_SHELL), )))) \
+ >$(call gb_CustomTarget_get_workdir,$(1))/log 2>&1 \
+@@ -43,17 +43,17 @@ endif
+ endif
- $(call gb_CustomTarget_get_workdir,odk/build-examples)/setsdkenv: \
-- $(SRCDIR)/odk/config/setsdkenv_unix.sh.in \
-+ /usr/lib/libreoffice/sdk/setsdkenv_unix.sh.in \
- $(BUILDDIR)/config_$(gb_Side).mk | \
- $(call gb_CustomTarget_get_workdir,odk/build-examples)/.dir
- $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),SED,1)
+ $(call gb_CustomTarget_get_workdir,$(1))/setsdkenv: \
+- $(SRCDIR)/odk/config/setsdkenv_unix.sh.in \
++ /usr/lib/libreoffice/sdk//setsdkenv_unix.sh.in \
+ $(BUILDDIR)/config_$(gb_Side).mk | \
+ $(call gb_CustomTarget_get_workdir,$(1))/.dir
+ $$(call gb_Output_announce,$(subst $(WORKDIR)/,,$(1)),$(true),SED,1)
sed -e 's!@OO_SDK_NAME@!sdk!' \
-- -e 's!@OO_SDK_HOME@!$(INSTDIR)/$(SDKDIRNAME)!' \
-- -e 's!@OFFICE_HOME@!$(INSTROOTBASE)!' -e 's!@OO_SDK_MAKE_HOME@!!' \
-+ -e 's!@OO_SDK_HOME@!/usr/lib/libreoffice/sdk!' \
-+ -e 's!@OFFICE_HOME@!/usr/lib/libreoffice!' -e 's!@OO_SDK_MAKE_HOME@!!' \
- -e 's!@OO_SDK_ZIP_HOME@!!' -e 's!@OO_SDK_CAT_HOME@!!' \
- -e 's!@OO_SDK_SED_HOME@!!' -e 's!@OO_SDK_CPP_HOME@!!' \
- -e 's!@OO_SDK_JAVA_HOME@!$(JAVA_HOME)!' \
-- -e 's!@OO_SDK_OUTPUT_DIR@!$(call gb_CustomTarget_get_workdir,odk/build-examples)/out!' \
-+ -e 's!@OO_SDK_OUTPUT_DIR@!$(shell mktemp -q -d)/out!' \
- -e 's!@SDK_AUTO_DEPLOYMENT@!YES!' $< > $@
+- -e 's!@OO_SDK_HOME@!$(INSTDIR)/$(SDKDIRNAME)!' \
+- -e 's!@OFFICE_HOME@!$(INSTROOTBASE)!' -e 's!@OO_SDK_MAKE_HOME@!!' \
++ -e 's!@OO_SDK_HOME@!/usr/lib/libreoffice/sdk!' \
++ -e 's!@OFFICE_HOME@!/usr/lib/libreoffice!' -e 's!@OO_SDK_MAKE_HOME@!!' \
+ -e 's!@OO_SDK_ZIP_HOME@!!' -e 's!@OO_SDK_CAT_HOME@!!' \
+ -e 's!@OO_SDK_SED_HOME@!!' -e 's!@OO_SDK_CPP_HOME@!!' \
+ -e 's!@OO_SDK_JAVA_HOME@!$(JAVA_HOME)!' \
+- -e 's!@OO_SDK_OUTPUT_DIR@!$(call gb_CustomTarget_get_workdir,$(1))/out!' \
++ -e 's!@OO_SDK_OUTPUT_DIR@!$(shell mktemp -q -d)/out!' \
+ -e 's!@SDK_AUTO_DEPLOYMENT@!YES!' $$< > $$@
- # vim: set noet sw=4 ts=4:
+ .PHONY: $(call gb_CustomTarget_get_target,$(1))
diff --git a/solenv/gbuild/Module.mk b/solenv/gbuild/Module.mk
index 4073dcfd9bf5..68c17ce0d1ed 100644
--- a/solenv/gbuild/Module.mk
diff --git a/debian/tests/patches/smoketest-standalone.diff b/debian/tests/patches/smoketest-standalone.diff
new file mode 100644
index 0000000..8d82fd0
--- /dev/null
+++ b/debian/tests/patches/smoketest-standalone.diff
@@ -0,0 +1,32 @@
+diff --git a/smoketest/CppunitTest_smoketest.mk b/smoketest/CppunitTest_smoketest.mk
+index f7d64cae562f..9d47776ffb4b 100644
+--- a/smoketest/CppunitTest_smoketest.mk
++++ b/smoketest/CppunitTest_smoketest.mk
+@@ -34,10 +34,10 @@ userinstallation=$(WORKDIR)/CustomTarget/smoketest
+ endif
+
+ $(eval $(call gb_CppunitTest_add_arguments,smoketest,\
+- -env:arg-soffice=$(gb_JunitTest_SOFFICEARG) \
++ -env:arg-soffice=$(OOO_TEST_SOFFICE) \
+ -env:arg-user=$(userinstallation) \
+ -env:arg-env=$(gb_Helper_LIBRARY_PATH_VAR)"$$$${$(gb_Helper_LIBRARY_PATH_VAR)+=$$$$$(gb_Helper_LIBRARY_PATH_VAR)}" \
+- -env:arg-testarg.smoketest.doc=$(WORKDIR)/Zip/smoketestdoc.sxw \
++ -env:arg-testarg.smoketest.doc=/usr/share/libreoffice/smoketestdoc.sxw \
+ ))
+
+ $(call gb_CppunitTest_get_target,smoketest): \
+diff --git a/solenv/gbuild/Module.mk b/solenv/gbuild/Module.mk
+index 0d87ccc55379..41c6564d3d7e 100644
+--- a/solenv/gbuild/Module.mk
++++ b/solenv/gbuild/Module.mk
+@@ -338,10 +338,6 @@ define gb_Module_add_subsequentcheck_target
+ $(call gb_Module__read_targetfile,$(1),$(2),subsequentcheck target)
+
+ $(call gb_Module_get_subsequentcheck_target,$(1)) : $$(gb_Module_CURRENTTARGET)
+-$$(gb_Module_CURRENTTARGET) :| \
+- $(call gb_Postprocess_get_target,AllModulesButInstsetNative) \
+- $(call gb_Package_get_target,instsetoo_native_setup) \
+- $(call gb_Package_get_target,instsetoo_native_setup_ure)
+ $(call gb_Module_get_clean_target,$(1)) : $$(gb_Module_CURRENTCLEANTARGET)
+
+ endef
diff --git a/debian/tests/patches/testtools-standalone.diff b/debian/tests/patches/testtools-standalone.diff
new file mode 100644
index 0000000..d09f88d
--- /dev/null
+++ b/debian/tests/patches/testtools-standalone.diff
@@ -0,0 +1,227 @@
+diff --git a/testtools/CustomTarget_bridgetest.mk b/testtools/CustomTarget_bridgetest.mk
+index d090146ec411..1cb4d30dcc2a 100644
+--- a/testtools/CustomTarget_bridgetest.mk
++++ b/testtools/CustomTarget_bridgetest.mk
+@@ -28,7 +28,7 @@ $(testtools_BRIDGEDIR)/bridgetest_server$(testtools_BATCHSUFFIX) :| $(testtools_
+ $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),ECH,1)
+ $(call gb_Helper_abbreviate_dirs,\
+ echo \
+- "$(call gb_Executable_get_target_for_build,uno)" \
++ "/usr/lib/libreoffice/program/uno" \
+ "-s com.sun.star.test.bridge.CppTestObject" \
+ "-u 'uno:socket$(COMMA)host=127.0.0.1$(COMMA)port=2002;urp;test'" \
+ "--singleaccept" \
+@@ -59,7 +59,7 @@ $(testtools_BRIDGEDIR)/bridgetest_inprocess_java$(testtools_BATCHSUFFIX) :| $(te
+ $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),ECH,1)
+ $(call gb_Helper_abbreviate_dirs,\
+ echo "JAVA_HOME=$(JAVA_HOME)" \
+- "$(call gb_Executable_get_target_for_build,uno)" \
++ "/usr/lib/libreoffice/program/uno" \
+ "-s com.sun.star.test.bridge.BridgeTest" \
+ "-env:LO_BUILD_LIB_DIR=$(call gb_Helper_make_url,$(gb_Library_WORKDIR_FOR_BUILD))" \
+ "-env:URE_MORE_SERVICES=$(call gb_Helper_make_url,$(call gb_Rdb_get_target,uno_services))" \
+@@ -72,7 +72,7 @@ $(testtools_BRIDGEDIR)/bridgetest_client$(testtools_BATCHSUFFIX) :| $(testtools_
+ $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),ECH,1)
+ $(call gb_Helper_abbreviate_dirs,\
+ echo \
+- "$(call gb_Executable_get_target_for_build,uno)" \
++ "/usr/lib/libreoffice/program/uno" \
+ "-s com.sun.star.test.bridge.BridgeTest --" \
+ "-u 'uno:socket$(COMMA)host=127.0.0.1$(COMMA)port=2002;urp;test'" \
+ "-env:LO_BUILD_LIB_DIR=$(call gb_Helper_make_url,$(gb_Library_WORKDIR_FOR_BUILD))" \
+diff --git a/testtools/CustomTarget_uno_test.mk b/testtools/CustomTarget_uno_test.mk
+index 4850e5ca66b2..610a0b170e90 100644
+--- a/testtools/CustomTarget_uno_test.mk
++++ b/testtools/CustomTarget_uno_test.mk
+@@ -12,18 +12,12 @@ $(eval $(call gb_CustomTarget_CustomTarget,testtools/uno_test))
+ # this target is phony to run it every time
+ .PHONY : $(call gb_CustomTarget_get_target,testtools/uno_test)
+
+-$(call gb_CustomTarget_get_target,testtools/uno_test) : \
+- $(call gb_Executable_get_runtime_dependencies,uno) \
+- $(call gb_InternalUnoApi_get_target,bridgetest) \
+- $(call gb_Package_get_target,instsetoo_native_setup_ure) \
+- $(call gb_Rdb_get_target,uno_services) \
+- $(call gb_Rdb_get_target,ure/services) \
+- $(call gb_UnoApi_get_target,udkapi)
++$(call gb_CustomTarget_get_target,testtools/uno_test) :
+ ifneq ($(gb_SUPPRESS_TESTS),)
+ @true
+ else
+ $(call gb_Helper_abbreviate_dirs,\
+- $(call gb_Executable_get_command,uno) \
++ /usr/lib/libreoffice/program/uno \
+ -s com.sun.star.test.bridge.BridgeTest \
+ -- com.sun.star.test.bridge.CppTestObject \
+ -env:LO_BUILD_LIB_DIR=$(call gb_Helper_make_url,$(gb_Library_WORKDIR_FOR_BUILD)) \
+#diff --git a/testtools/Library_bridgetest-common.mk b/testtools/Library_bridgetest-common.mk
+#index 1ca38bca6b49..cbc793c36d39 100644
+#--- a/testtools/Library_bridgetest-common.mk
+#+++ b/testtools/Library_bridgetest-common.mk
+#@@ -20,16 +20,6 @@ $(eval $(call gb_Library_use_internal_api,testtools_bridgetest-common,\
+# bridgetest \
+# ))
+#
+#-$(eval $(call gb_Library_use_libraries,testtools_bridgetest-common, \
+#- cppu \
+#- cppuhelper \
+#- sal \
+#-))
+#-
+#-$(eval $(call gb_Library_use_api,testtools_bridgetest-common,\
+#- udkapi \
+#-))
+#-
+# $(eval $(call gb_Library_add_exception_objects,testtools_bridgetest-common,\
+# testtools/source/bridgetest/currentcontextchecker \
+# testtools/source/bridgetest/multi \
+#diff --git a/testtools/Library_bridgetest.mk b/testtools/Library_bridgetest.mk
+#index 52f335761fdf..f0bafca0998f 100644
+#--- a/testtools/Library_bridgetest.mk
+#+++ b/testtools/Library_bridgetest.mk
+#@@ -15,16 +15,9 @@ $(eval $(call gb_Library_use_internal_api,testtools_bridgetest,\
+# bridgetest \
+# ))
+#
+#-$(eval $(call gb_Library_use_api,testtools_bridgetest,\
+#- udkapi \
+#-))
+#-
+# $(eval $(call gb_Library_use_external,testtools_bridgetest,boost_headers))
+#
+# $(eval $(call gb_Library_use_libraries,testtools_bridgetest,\
+#- cppu \
+#- cppuhelper \
+#- sal \
+# testtools_bridgetest-common \
+# ))
+#
+#diff --git a/testtools/Library_constructors.mk b/testtools/Library_constructors.mk
+#index 516c05d62db8..3a2a4b8bca24 100644
+#--- a/testtools/Library_constructors.mk
+#+++ b/testtools/Library_constructors.mk
+#@@ -22,16 +22,6 @@ $(eval $(call gb_Library_use_internal_api,testtools_constructors,\
+# bridgetest \
+# ))
+#
+#-$(eval $(call gb_Library_use_api,testtools_constructors,\
+#- udkapi \
+#-))
+#-
+#-$(eval $(call gb_Library_use_libraries,testtools_constructors,\
+#- cppu \
+#- cppuhelper \
+#- sal \
+#-))
+#-
+# $(eval $(call gb_Library_add_exception_objects,testtools_constructors,\
+# testtools/source/bridgetest/constructors \
+# ))
+#diff --git a/testtools/Library_cppobj.mk b/testtools/Library_cppobj.mk
+#index 086b1fa0b6f5..9348254b6da8 100644
+#--- a/testtools/Library_cppobj.mk
+#+++ b/testtools/Library_cppobj.mk
+#@@ -20,16 +20,9 @@ $(eval $(call gb_Library_use_internal_api,testtools_cppobj,\
+# bridgetest \
+# ))
+#
+#-$(eval $(call gb_Library_use_api,testtools_cppobj,\
+#- udkapi \
+#-))
+#-
+# $(eval $(call gb_Library_use_external,testtools_cppobj,boost_headers))
+#
+# $(eval $(call gb_Library_use_libraries,testtools_cppobj,\
+#- cppu \
+#- cppuhelper \
+#- sal \
+# testtools_bridgetest-common \
+# ))
+#
+#diff --git a/unoidl/Executable_unoidl-check.mk b/unoidl/Executable_unoidl-check.mk
+#index 36dfc44de635..a1bb6ed14d80 100644
+#--- a/unoidl/Executable_unoidl-check.mk
+#+++ b/unoidl/Executable_unoidl-check.mk
+#@@ -15,10 +15,13 @@ $(eval $(call gb_Executable_add_exception_objects,unoidl-check, \
+#
+# $(eval $(call gb_Executable_use_libraries,unoidl-check, \
+# unoidl \
+#- $(if $(filter TRUE,$(DISABLE_DYNLOADING)),reg) \
+#- $(if $(filter TRUE,$(DISABLE_DYNLOADING)),store) \
+#- salhelper \
+#- sal \
+#+))
+#+
+#+$(eval $(call gb_Executable_add_ldflags,unoidl-check, \
+#+ $(if $(filter TRUE,$(DISABLE_DYNLOADING)),-L/usr/lib/libreoffice/program/ -lreglo) \
+#+ $(if $(filter TRUE,$(DISABLE_DYNLOADING)),-L/usr/lib/libreoffice/program/ -lstorelo) \
+#+ -L/usr/lib/libreoffice/sdk/lib/ -luno_sal \
+#+ -L/usr/lib/libreoffice/sdk/lib/ -luno_salhelpergcc3 \
+# ))
+#
+# # vim: set noet sw=4 ts=4:
+#diff --git a/unoidl/Executable_unoidl-read.mk b/unoidl/Executable_unoidl-read.mk
+#index b134c30b1a72..2bfd0ea3057f 100644
+#--- a/unoidl/Executable_unoidl-read.mk
+#+++ b/unoidl/Executable_unoidl-read.mk
+#@@ -15,10 +15,13 @@ $(eval $(call gb_Executable_add_exception_objects,unoidl-read, \
+#
+# $(eval $(call gb_Executable_use_libraries,unoidl-read, \
+# unoidl \
+#- $(if $(filter TRUE,$(DISABLE_DYNLOADING)),reg) \
+#- $(if $(filter TRUE,$(DISABLE_DYNLOADING)),store) \
+#- salhelper \
+#- sal \
+#+))
+#+
+#+$(eval $(call gb_Executable_add_ldflags,unoidl-read, \
+#+ $(if $(filter TRUE,$(DISABLE_DYNLOADING)),-L/usr/lib/libreoffice/program/ -lreglo) \
+#+ $(if $(filter TRUE,$(DISABLE_DYNLOADING)),-L/usr/lib/libreoffice/program/ -lstorelo) \
+#+ -L/usr/lib/libreoffice/sdk/lib/ -luno_sal \
+#+ -L/usr/lib/libreoffice/sdk/lib/ -luno_salhelpergcc3 \
+# ))
+#
+# # vim: set noet sw=4 ts=4:
+#diff --git a/unoidl/Executable_unoidl-write.mk b/unoidl/Executable_unoidl-write.mk
+#index 9accb31ac14d..f69d78a09c32 100644
+#--- a/unoidl/Executable_unoidl-write.mk
+#+++ b/unoidl/Executable_unoidl-write.mk
+#@@ -15,10 +15,15 @@ $(eval $(call gb_Executable_add_exception_objects,unoidl-write, \
+#
+# $(eval $(call gb_Executable_use_libraries,unoidl-write, \
+# unoidl \
+#- $(if $(filter TRUE,$(DISABLE_DYNLOADING)),reg) \
+#- $(if $(filter TRUE,$(DISABLE_DYNLOADING)),store) \
+#- salhelper \
+#- sal \
+# ))
+#
+#+$(eval $(call gb_Executable_add_ldflags,unoidl-write, \
+#+ $(if $(filter TRUE,$(DISABLE_DYNLOADING)),-L/usr/lib/libreoffice/program/ -lreglo) \
+#+ $(if $(filter TRUE,$(DISABLE_DYNLOADING)),-L/usr/lib/libreoffice/program/ -lstorelo) \
+#+ -L/usr/lib/libreoffice/sdk/lib/ -luno_sal \
+#+ -L/usr/lib/libreoffice/sdk/lib/ -luno_salhelpergcc3 \
+#+))
+#+
+#+
+#+
+# # vim: set noet sw=4 ts=4:
+#diff --git a/unoidl/Library_unoidl.mk b/unoidl/Library_unoidl.mk
+#index c98fc69f4945..bdc8285fe234 100644
+#--- a/unoidl/Library_unoidl.mk
+#+++ b/unoidl/Library_unoidl.mk
+#@@ -32,10 +32,10 @@ $(eval $(call gb_Library_set_include,unoidl, \
+# -I$(SRCDIR)/unoidl/source \
+# ))
+#
+#-$(eval $(call gb_Library_use_libraries,unoidl, \
+#- reg \
+#- sal \
+#- salhelper \
+#+$(eval $(call gb_Library_add_libs,unoidl, \
+#+ -L/usr/lib/libreoffice/program/ -lreglo \
+#+ -L/usr/lib/libreoffice/sdk/lib/ -luno_sal \
+#+ -L/usr/lib/libreoffice/sdk/lib/ -luno_salhelpergcc3 \
+# ))
+#
+# # vim: set noet sw=4 ts=4:
diff --git a/debian/tests/pyuno-import b/debian/tests/pyuno-import
index ff7503a..9820a90 100755
--- a/debian/tests/pyuno-import
+++ b/debian/tests/pyuno-import
@@ -5,3 +5,4 @@ sys.path.append('/usr/lib/libreoffice/program')
os.putenv('URE_BOOTSTRAP', 'vnd.sun.star.pathname:/usr/lib/libreoffice/program/fundamentalrc')
import pyuno
+print(pyuno)
diff --git a/debian/tests/smoketest b/debian/tests/smoketest
new file mode 100755
index 0000000..d52f8fa
--- /dev/null
+++ b/debian/tests/smoketest
@@ -0,0 +1,87 @@
+#!/bin/bash
+# autopkgtest check: Run smoketest against an installed version of LibreOffice
+# (c) 2018 Software in the Public Interest, Inc.
+# Authors: Rene Engelhard <rene@debian.org>
+
+set -e
+set -E
+
+SRCDIR=`pwd`
+CHECK_PARALLELISM=1
+if [ -n "$AUTOPKGTEST_TMP" ]; then
+ TMP=`mktemp -q -p $AUTOPKGTEST_TMP`
+ WORKDIR=`mktemp -q -d -p $AUTOPKGTEST_TMP`
+else
+ TMP=`mktemp -q`
+ WORKDIR=`mktemp -q -d`
+fi
+
+function unapply() {
+ cd $SRCDIR
+ echo
+ echo "====== Unapplying the patches ======"
+ patch -p1 -R < ./debian/tests/patches/smoketest-standalone.diff
+ patch -p0 -R < ./debian/tests/patches/smoketest-disable-extension-tests.diff
+}
+
+trap "unapply" ERR
+
+echo
+echo "====== Patching the tree to only build the smoketest unittest against an existing installation ======"
+patch -p1 < ./debian/tests/patches/smoketest-standalone.diff
+patch -p0 < ./debian/tests/patches/smoketest-disable-extension-tests.diff
+
+echo
+echo "====== Enabling core dumps ======"
+# yes, we want core dumps and stack traces
+ulimit -c unlimited
+
+# FIXME: GROSS HACK.
+echo
+echo "====== Building needed parts of LibreOffice ======"
+./debian/rules config_host.mk ENABLE_PDFIUM=n ENABLE_MERGELIBS=n BUILD_GTK=n BUILD_GTK3=n BUILD_KDE=n
+cat << EOF >> $TMP
+export gb_SUPPRESS_TESTS=true
+make test.all verbose=t
+make bridges.all verbose=t
+make javaunohelper.all verbose=t
+make unoil.all verbose=t
+make unotest.all verbose=t
+make ure.all verbose=t
+make i18npool.all verbose=t
+EOF
+chmod 755 $TMP
+#TIMEOUT OPTIONS
+# --timeout-which=seconds
+# Use a different timeout for operations on or with the testbed.
+# There are five timeouts affected by five values of which: short:
+# supposedly short operations like setting up the testbed's apt
+# and checking the state (default: 100s); install: installation of
+# packages including dependencies (default: 3,000s); test: test
+# runs (default: 10,000s); copy: copy files/directories between
+# host and testbed (default: 300s); and build: builds (default:
+# 100,000s). The value must be specified as an integer number of
+# seconds.
+# 10000s = 160 min. so we have enough time to actually run the test :)
+timeout 150m $TMP || \
+ if test "$?" = "124"; then rm -f $TMP; exit 77; \
+ else exit $?; fi
+
+rm -f $TMP
+
+OOO_TEST_SOFFICE="${1:-path:/usr/lib/libreoffice/program/soffice}"
+
+echo
+echo "====== Starting smoketest with ${CHECK_PARALLELISM} job against ${OOO_TEST_SOFFICE} ======"
+
+export PARALLELISM=$CHECK_PARALLELISM
+
+export LD_LIBRARY_PATH=/usr/lib/libreoffice/program:$LD_LIBRARY_PATH
+cd smoketest && make -rk \
+ OOO_TEST_SOFFICE=${OOO_TEST_SOFFICE} \
+ CppunitTest_smoketest INSTDIR=/usr/lib/libreoffice verbose=t
+
+cd $SRCDIR
+
+unapply
+
diff --git a/debian/tests/test-extension b/debian/tests/test-extension
new file mode 100755
index 0000000..1654262
--- /dev/null
+++ b/debian/tests/test-extension
@@ -0,0 +1,33 @@
+#!/bin/bash
+# autopkgtest check: Install a test extension (as smoketest would do)
+# (c) 2017 Software in the Public Interest, Inc.
+# Authors: Rene Engelhard <rene@debian.org>
+
+set -e
+set -E
+
+if [ -n "$AUTOPKGTEST_TMP" ]; then
+ TMP=`mktemp -q -p $AUTOPKGTEST_TMP`
+else
+ TMP=`mktemp -q`
+fi
+
+echo
+echo "====== Add the extension ======"
+# does it install fine?
+unopkg add -v /usr/share/libreoffice/TestExtension.oxt
+
+echo
+echo "====== Show extension status ======"
+# does it list? For whatever reason unopkg leaves a stale .lock behind when
+# doing this grep directly on the output so do it on a tmpfile
+unopkg list | tee $TMP
+grep -q org.libreoffice.smoketest.TestExtension $TMP || exit 1
+rm $TMP
+
+echo
+echo "====== Remove the extension ======"
+# does it remove?
+unopkg remove -v org.libreoffice.smoketest.TestExtension
+
+
diff --git a/debian/tests/test-extension-shared b/debian/tests/test-extension-shared
new file mode 100755
index 0000000..f9d7941
--- /dev/null
+++ b/debian/tests/test-extension-shared
@@ -0,0 +1,34 @@
+#!/bin/bash
+# autopkgtest check: Install a test extension shared
+# (c) 2017 Software in the Public Interest, Inc.
+# Authors: Rene Engelhard <rene@debian.org>
+
+set -e
+set -E
+
+if [ -n "$AUTOPKGTEST_TMP" ]; then
+ TMP=`mktemp -q -p $AUTOPKGTEST_TMP`
+else
+ TMP=`mktemp -q`
+fi
+
+
+echo
+echo "====== Add the extension ======"
+# does it install fine?
+unopkg add --shared -v /usr/share/libreoffice/TestExtension.oxt
+
+echo
+echo "====== Show extension status ======"
+# does it list? For whatever reason unopkg leaves a stale .lock behind when
+# doing this grep directly on the output so do it on a tmpfile
+unopkg list --shared | tee $TMP
+grep -q org.libreoffice.smoketest.TestExtension $TMP || exit 1
+rm $TMP
+
+echo
+echo "====== Remove the extension ======"
+# does it remove?
+unopkg remove --shared -v org.libreoffice.smoketest.TestExtension
+
+
diff --git a/debian/tests/uicheck b/debian/tests/uicheck
index 6615e78..65ed525 100755
--- a/debian/tests/uicheck
+++ b/debian/tests/uicheck
@@ -7,21 +7,25 @@ set -e
set -E
SRCDIR=`pwd`
-WORKDIR=`mktemp -d`
CHECK_PARALLELISM=1
+if [ -n "$AUTOPKGTEST_TMP" ]; then
+ WORKDIR=`mktemp -q -d -p $AUTOPKGTEST_TMP`
+else
+ WORKDIR=`mktemp -q -d`
+fi
function unapply() {
+ echo
echo "====== Unapplying the patch ======"
patch -p1 -R < ./debian/tests/patches/uicheck-standalone.diff
}
trap "unapply" ERR
+echo
echo "====== Patching the tree to build uicheck against an existing installation ======"
patch -p1 < ./debian/tests/patches/uicheck-standalone.diff
-OOO_TEST_SOFFICE="${1:-path:/usr/lib/libreoffice/program/soffice}"
-
# this normally shouldn't be needed but otherwise it wants a automatic
# re-autogen.
echo
@@ -29,10 +33,6 @@ echo "====== Generating configuration ======="
rm -f config_host.mk
./debian/rules config_host.mk
-#echo
-#echo "====== Build "test" library required ======"
-#gb_SUPPRESS_TESTS=true make test.all verbose=t
-
echo
echo "====== Enabling core dumps ======"
# yes, we want core dumps and stack traces
@@ -43,6 +43,7 @@ echo "====== Generating en_US.UTF-8 locale ======"
cd $WORKDIR
$SRCDIR/debian/scripts/locale-gen
+OOO_TEST_SOFFICE="${1:-path:/usr/lib/libreoffice/program/soffice}"
echo
echo "====== Starting uicheck with ${CHECK_PARALLELISM} job against ${OOO_TEST_SOFFICE} ======"
diff --git a/debian/tests/uno b/debian/tests/uno
new file mode 100755
index 0000000..5f097b8
--- /dev/null
+++ b/debian/tests/uno
@@ -0,0 +1,55 @@
+#!/bin/bash
+# autopkgtest check: Run UNO tests against an installed version of the URE
+# (c) 2018 Software in the Public Interest, Inc.
+# Authors: Rene Engelhard <rene@debian.org>
+
+set -e
+set -E
+
+SRCDIR=`pwd`
+CHECK_PARALLELISM=1
+if [ -n "$AUTOPKGTEST_TMP" ]; then
+ TMP=`mktemp -q -p $AUTOPKGTEST_TMP`
+ WORKDIR=`mktemp -q -d -p $AUTOPKGTEST_TMP`
+else
+ TMP=`mktemp -q`
+ WORKDIR=`mktemp -q -d`
+fi
+
+function unapply() {
+ cd $SRCDIR
+ echo
+ echo "====== Unapplying the patches ======"
+ patch -p1 -R < ./debian/tests/patches/testtools-standalone.diff
+}
+
+trap "unapply" ERR
+
+echo
+echo "====== Patching the tree to only build the testtools unittest against an existing installation ======"
+patch -p1 < ./debian/tests/patches/testtools-standalone.diff
+
+echo
+echo "====== Enabling core dumps ======"
+# yes, we want core dumps and stack traces
+ulimit -c unlimited
+
+# this normally shouldn't be needed but otherwise it wants a automatic
+# re-autogen.
+echo
+echo "====== Generating configuration ======="
+rm -f config_host.mk
+./debian/rules config_host.mk ENABLE_PDFIUM=n ENABLE_MERGELIBS=n BUILD_GTK=n BUILD_GTK3=n BUILD_KDE=n
+
+echo
+echo "====== Starting uno test with ${CHECK_PARALLELISM} job against /usr/lib/libreoffice/program/uno ======"
+
+export PARALLELISM=$CHECK_PARALLELISM
+
+export LD_LIBRARY_PATH=/usr/lib/libreoffice/program:$LD_LIBRARY_PATH
+make testtools.all verbose=t
+
+cd $SRCDIR
+
+unapply
+
diff --git a/debian/tests/uno-import b/debian/tests/uno-import
index 1b7778c..e36ab16 100755
--- a/debian/tests/uno-import
+++ b/debian/tests/uno-import
@@ -1,3 +1,4 @@
#!/usr/bin/python3
import uno
+print(uno)
diff --git a/debian/uno-libs3.symbols b/debian/uno-libs3.symbols
index 3c3ea6e..43c2110 100644
--- a/debian/uno-libs3.symbols
+++ b/debian/uno-libs3.symbols
@@ -32,7 +32,11 @@ libuno_sal.so.3 uno-libs3 #MINVER#, ure
osl_clearEnvironment@UDK_3.11 1.7.0+LibO3.3.0~beta3
osl_setEnvironment@UDK_3.11 1.7.0+LibO3.3.0~beta3
(symver)UDK_3.11 1.8.0
+ (symver)PRIVATE_1.0 3.3.0~
+ (symver)PRIVATE_1.1 3.3.0~
(symver)LIBO_UDK_3.5 3.5.0~beta
+ (symver)PRIVATE_1.2 3.5.0~beta
+ (symver)PRIVATE_textenc.1 3.6.0~beta
(symver)LIBO_UDK_3.6 4.0.0~alpha
(symver)LIBO_UDK_4.0 4.0.0~beta
(symver)LIBO_UDK_4.1 4.1.0~alpha
@@ -42,6 +46,9 @@ libuno_sal.so.3 uno-libs3 #MINVER#, ure
(symver)LIBO_UDK_5.1 5.1.0~alpha
(symver)LIBO_UDK_5.2 5.2.0~alpha
(symver)LIBO_UDK_5.3 5.3.0~alpha
+ (symver)PRIVATE_1.3 5.4.0~alpha
+ (symver)PRIVATE_1.4 6.0.0~alpha
+ (symver)PRIVATE_1.5 6.1.0~alpha
libuno_salhelpergcc3.so.3 uno-libs3 #MINVER#, ure
(symver)UDK_3_0_0 1.4.0
(symver)UDK_3.1 1.4.0
diff --git a/tarballs/pdfium-3426.tar.bz2 b/tarballs/pdfium-3426.tar.bz2
new file mode 100644
index 0000000..7d49661
--- /dev/null
+++ b/tarballs/pdfium-3426.tar.bz2
Binary files differ