diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 33e0c696..6633fef4 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -7,7 +7,6 @@ on: tags: - "v*" branches: - - "master" - "develop" - "github-actions" - "gha-*" @@ -26,7 +25,7 @@ env: LibtorrentRasterbar_BUILD_DIR: ${{github.workspace}}/00/build/libtorrent-rasterbar LibtorrentRasterbar_INSTALL_DIR: ${{github.workspace}}/00/install/libtorrent-rasterbar # ^^ - # HACK cache@v3: using '/00/' instead of '/../': Relative pathing '.' and '..' is not allowed. + # HACK actions/cache@v3: using '/00/' instead of '/../': Relative pathing '.' and '..' is not allowed. LibtorrentRasterbar_VERSION_FILE: ${{github.workspace}}/3rd/libtorrent-rasterbar/include/libtorrent/version.hpp Application_VERSION_FILE: ${{github.workspace}}/version Changelog_FILE_NAME: ${{github.workspace}}/00/GIT-CHANGELOG.txt @@ -42,7 +41,7 @@ jobs: environment: production steps: - name: Check out repository code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Create WebBrowser Addons id: webaddons @@ -69,13 +68,13 @@ jobs: print(f"Addon_Web_Extension_Firefox={ artifact_firefox }", file=f) - name: Upload Chromium Addon - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: artifact_chromium path: ${{ steps.webaddons.outputs.Addon_Web_Extension_Chromium }} - name: Upload Firefox Addon - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: artifact_firefox path: ${{ steps.webaddons.outputs.Addon_Web_Extension_Firefox }} @@ -92,7 +91,8 @@ jobs: qt_host: 'linux' qt_target: 'desktop' qt_arch: 'gcc_64' - qt_tools: '' # To build OpenSSLv3: 'tools_opensslv3_src' + qt_tools: '' + qt_modules: '' Qt6_CUSTOM_INSTALL_PATH: "/home/runner/work/ArrowDL/qt/" DIRECTIVE_CMAKE_GENERATOR: '' INSTALL_BOOST_PLATFORM_VERSION: '18.04' # 18.04, 20.04 Rem: Ubuntu 20.04 doesn't have Boost 1.77.0 @@ -103,6 +103,7 @@ jobs: qt_target: 'desktop' qt_arch: 'win64_mingw' qt_tools: 'tools_opensslv3_x64' + qt_modules: '' Qt6_CUSTOM_INSTALL_PATH: "D:\\a\\ArrowDL\\qt\\" DIRECTIVE_CMAKE_GENERATOR: '-G "MinGW Makefiles"' INSTALL_BOOST_PLATFORM_VERSION: '2019' # 2019, 2022 @@ -115,7 +116,7 @@ jobs: steps: - name: Check out repository code - uses: actions/checkout@v3 + uses: actions/checkout@v4 # - name: Clean Environment # shell: python # otherwise Windows uses Powershell, Linux uses bash @@ -224,7 +225,7 @@ jobs: echo "LibtorrentRasterbar_VERSION: '${{env.LibtorrentRasterbar_VERSION}}'" - name: Cache Libtorrent Static Libraries - uses: actions/cache@v3 + uses: actions/cache@v4 id: cache-libtorrent env: LibtorrentRasterbar_VERSION: ${{ steps.getversion.outputs.LibtorrentRasterbar_VERSION }} @@ -236,7 +237,7 @@ jobs: ${{env.LibtorrentRasterbar_INSTALL_DIR}} - name: Install Boost - uses: MarkusJx/install-boost@v2.4.3 + uses: MarkusJx/install-boost@v2.4.5 id: install-boost with: boost_version: ${{env.BOOST_VERSION}} @@ -260,8 +261,8 @@ jobs: ls -al - name: Install Qt - uses: jurplel/install-qt-action@v3 - # Rem: Once installed, ${{env.Qt6_DIR}} is set. + uses: jurplel/install-qt-action@v4 + # Rem: Once installed, ${{env.QT_ROOT_DIR}} is set. # https://ddalcino.github.io/aqt-list-server/ with: aqtversion: '==3.1.*' @@ -271,18 +272,21 @@ jobs: target: ${{matrix.qt_target}} arch: ${{matrix.qt_arch}} tools: ${{matrix.qt_tools}} + modules: ${{matrix.qt_modules}} cache: true - - - name: List files in Qt (if Debug Logging is enabled) - if: runner.debug == '1' - shell: bash - run: cd "${{env.Qt6_DIR}}/../../" && ls -alR - # env.Qt6_DIR - # "/home/runner/work/ArrowDL/qt/Qt/6.3.1/gcc_64" - # "D:\a\ArrowDL\qt\Qt\6.3.1\mingw_64" - + add-tools-to-path: false # WIP migration v3 to v4 + + # Rem: this step was commented because it's too expensive: + # - name: List files in Qt (if Debug Logging is enabled) + # if: runner.debug == '1' + # shell: bash + # run: cd "${{env.QT_ROOT_DIR}}/../../" && ls -alR + # # env.QT_ROOT_DIR + # # "/home/runner/work/ArrowDL/qt/Qt/6.3.1/gcc_64" + # # "D:\a\ArrowDL\qt\Qt\6.3.1\mingw_64" + # - name: Find OpenSSL in Qt6 - # The thing is that "env.Qt6_DIR" is defined only at runtime, *after* install-qt-action has run. + # The thing is that "env.QT_ROOT_DIR" is defined only at runtime, *after* install-qt-action has run. id: qt6openssl shell: python # 2 versions present in Ubuntu: @@ -292,14 +296,14 @@ jobs: # # * Qt6 version (3.0.12) # To build it: - # openssl_dir = os.path.normpath(os.path.join(r"${{env.Qt6_DIR}}", "..", "..", "Tools", "OpenSSLv3", "src")) + # openssl_dir = os.path.normpath(os.path.join(r"${{env.QT_ROOT_DIR}}", "..", "..", "Tools", "OpenSSLv3", "src")) # cd "${{openssl_dir}}" # ./config # make # make test # sudo make install_sw # Then: - # openssl_dir = os.path.normpath(os.path.join(r"${{env.Qt6_DIR}}", "..", "..", "Tools", "OpenSSLv3", "src")) + # openssl_dir = os.path.normpath(os.path.join(r"${{env.QT_ROOT_DIR}}", "..", "..", "Tools", "OpenSSLv3", "src")) # openssl_lib_eay = os.path.normpath(os.path.join(openssl_dir, "lib", "libcrypto.a")) # openssl_ssl_eay = os.path.normpath(os.path.join(openssl_dir, "lib", "libssl.a")) # @@ -311,7 +315,7 @@ jobs: # ssleay32 -> libssl if "${{ matrix.os }}" == "windows-latest": - openssl_dir = os.path.normpath(os.path.join(r"${{env.Qt6_DIR}}", "..", "..", "Tools", "OpenSSLv3", "Win_x64")) + openssl_dir = os.path.normpath(os.path.join(r"${{env.QT_ROOT_DIR}}", "..", "..", "Tools", "OpenSSLv3", "Win_x64")) openssl_lib_eay = os.path.normpath(os.path.join(openssl_dir, "lib", "libcrypto.lib")) openssl_ssl_eay = os.path.normpath(os.path.join(openssl_dir, "lib", "libssl.lib")) @@ -338,7 +342,7 @@ jobs: if: ${{ steps.cache-libtorrent.outputs.cache-hit != 'true' }} env: Boost_ROOT: ${{ steps.install-boost.outputs.Boost_ROOT }} - Qt6_Dir2: ${{env.Qt6_DIR}} + Qt6_Dir2: ${{env.QT_ROOT_DIR}} DIRECTIVE_CMAKE_GENERATOR: ${{matrix.DIRECTIVE_CMAKE_GENERATOR}} BUILD_TESTS: "OFF" # OFF because they take 10+ minutes to build and 776.74 sec to run tests on Ubuntu DEPRECATED_FUNCTIONS: "OFF" # OFF to remove deprecated functions @@ -387,7 +391,7 @@ jobs: - name: Configure Project env: Boost_ROOT: ${{ steps.install-boost.outputs.Boost_ROOT }} - Qt6_Dir2: ${{env.Qt6_DIR}} + Qt6_Dir2: ${{env.QT_ROOT_DIR}} OpenSSL_ROOT_DIR: ${{ steps.qt6openssl.outputs.OpenSSL_ROOT_DIR }} DIRECTIVE_CMAKE_GENERATOR: ${{matrix.DIRECTIVE_CMAKE_GENERATOR}} working-directory: "${{env.Project_BUILD_DIR}}" @@ -473,7 +477,7 @@ jobs: - name: Upload Linux Portable if: ${{ matrix.os == 'ubuntu-latest' }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 env: TARBALL_NAME: "${{ steps.getversion.outputs.Application_Linux_NAME }}.tar.gz" with: @@ -501,7 +505,7 @@ jobs: - name: Upload Windows MingGW x64 Portable if: ${{ matrix.os == 'windows-latest' }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 env: ZIP_NAME: "${{ steps.getversion.outputs.Application_Windows_MinGW_x64_NAME }}.zip" with: @@ -510,7 +514,7 @@ jobs: - name: Create NSIS installer if: ${{ matrix.os == 'windows-latest' }} - uses: joncloud/makensis-action@v3.7 + uses: joncloud/makensis-action@v4.1 env: Application_VERSION: ${{ steps.getversion.outputs.Application_VERSION }} with: @@ -534,7 +538,7 @@ jobs: - name: Upload Windows 64 Installer if: ${{ matrix.os == 'windows-latest' }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: artifact_windows_64_installer path: "${{env.Project_RELEASE_DIR}}/ArrowDL_x64_Setup.exe" @@ -555,35 +559,35 @@ jobs: - name: Download Chromium Addon continue-on-error: true - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v4 with: name: artifact_chromium path: "${{env.Project_RELEASE_DIR}}" - name: Download Firefox Addon continue-on-error: true - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v4 with: name: artifact_firefox path: "${{env.Project_RELEASE_DIR}}" - name: Download Linux Portable continue-on-error: true - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v4 with: name: artifact_linux_portable path: "${{env.Project_RELEASE_DIR}}" - name: Download Windows MinGW 64 Portable continue-on-error: true - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v4 with: name: artifact_windows_mingw_64_portable path: "${{env.Project_RELEASE_DIR}}" - name: Download Windows 64 Installer continue-on-error: true - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v4 with: name: artifact_windows_64_installer path: "${{env.Project_RELEASE_DIR}}" @@ -614,7 +618,7 @@ jobs: my_file.write("\r\n") - name: Publish - uses: softprops/action-gh-release@v0.1.15 + uses: softprops/action-gh-release@v2 #if: startsWith(github.ref, 'refs/tags/') # Limit releases to pushes to tags env: BRANCH_OR_TAG_NAME: ${{ github.head_ref || github.ref_name }} diff --git a/README.md b/README.md index e1812a44..4d7fd343 100644 --- a/README.md +++ b/README.md @@ -59,12 +59,12 @@ It aims to work with latest versions of Mozilla Firefox (powered by *WebExtensio -More screenshots on the [Gallery](https://www.arrow-dl.com/ArrowDL/category/screenshots.html "Go to Screenshots page") page. +More screenshots on the [Gallery](https://www.arrow-dl.com/screenshots/ "Go to Screenshots page") page. ## Installation -Go to [Download](https://www.arrow-dl.com/ArrowDL/category/download.html) page to install the application for your operating system. +Go to [Download](https://www.arrow-dl.com/download/) page to install the application for your operating system. Rem: *Native-Client* is an alternative to *ArrowDL*. Click [here](NativeClient.md "NativeClient.md") for more information. @@ -75,7 +75,7 @@ choco install arrowdl ## Usage -Go to [Tutorial](https://www.arrow-dl.com/ArrowDL/category/tutorial.html) page. +Go to [Tutorial](https://www.arrow-dl.com/tutorial/) page. ## Under the hood diff --git a/installer/windows/NSIS/setup.nsi b/installer/windows/NSIS/setup.nsi index 428d63e5..ec430aa5 100644 --- a/installer/windows/NSIS/setup.nsi +++ b/installer/windows/NSIS/setup.nsi @@ -29,7 +29,7 @@ !define PRODUCT_VERSION ${VERSION} !define PRODUCT_GROUP "Sebastien Vavassori" !define PRODUCT_PUBLISHER "Sebastien Vavassori" -!define PRODUCT_WEB_SITE "https://www.arrow-dl.com/ArrowDL" +!define PRODUCT_WEB_SITE "https://www.arrow-dl.com/" ; Adds info to the installer VIProductVersion "${PRODUCT_VERSION}.000" diff --git a/src/core/stream.cpp b/src/core/stream.cpp index ad383464..d4437686 100644 --- a/src/core/stream.cpp +++ b/src/core/stream.cpp @@ -951,11 +951,11 @@ StreamObject StreamAssetDownloader::parseDumpItemStdOut(const QByteArray &bytes) QJsonDocument loadDoc(QJsonDocument::fromJson(bytes, &ok)); if (ok.error != QJsonParseError::NoError) { - qDebug() << Q_FUNC_INFO; - qDebug() << "! Error JSON:" << QJsonParseError::ParseError(ok.error); - qDebug() << " at position" << ok.offset; - qDebug() << bytes.mid(ok.offset - 20, ok.offset + 20); - qDebug() << QString("%0^").arg(QString().fill(' ', 20)); + // qDebug() << Q_FUNC_INFO; + // qDebug() << "! Error JSON:" << QJsonParseError::ParseError(ok.error); + // qDebug() << " at position" << ok.offset; + // qDebug() << bytes.mid(ok.offset - 20, ok.offset + 20); + // qDebug() << QString("%0^").arg(QString().fill(' ', 20)); obj.setError(StreamObject::ErrorJsonFormat); return obj; diff --git a/src/core/torrentcontext_p.cpp b/src/core/torrentcontext_p.cpp index 648ef0b7..5235cf8d 100644 --- a/src/core/torrentcontext_p.cpp +++ b/src/core/torrentcontext_p.cpp @@ -1172,10 +1172,10 @@ TorrentInitialMetaInfo WorkerThread::dump(const QString &filename) const lt::error_code error_code; const lt::torrent_info torrent_info(filename.toStdString(), error_code); if (error_code) { - qWarning() << "failed to decode file '" - << filename - << "' due to" - << QString::fromStdString(error_code.message()); + // qWarning() << "failed to decode file '" + // << filename + // << "' due to" + // << QString::fromStdString(error_code.message()); return {}; } auto ptr_torrent_info= std::make_shared(torrent_info); diff --git a/src/locale/arrowdl_ar_EG.ts b/src/locale/arrowdl_ar_EG.ts index d26fc052..64e53714 100644 --- a/src/locale/arrowdl_ar_EG.ts +++ b/src/locale/arrowdl_ar_EG.ts @@ -925,7 +925,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error diff --git a/src/locale/arrowdl_de_DE.ts b/src/locale/arrowdl_de_DE.ts index 5a2d9e17..1a911bc8 100644 --- a/src/locale/arrowdl_de_DE.ts +++ b/src/locale/arrowdl_de_DE.ts @@ -925,8 +925,8 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error - + 5xx Unknown server error + 5xx Unbekannter Serverfehler diff --git a/src/locale/arrowdl_en_US.ts b/src/locale/arrowdl_en_US.ts index 8ca7bc71..e614dda5 100644 --- a/src/locale/arrowdl_en_US.ts +++ b/src/locale/arrowdl_en_US.ts @@ -927,7 +927,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error diff --git a/src/locale/arrowdl_es_BO.ts b/src/locale/arrowdl_es_BO.ts index a5bb2a94..c59d6124 100644 --- a/src/locale/arrowdl_es_BO.ts +++ b/src/locale/arrowdl_es_BO.ts @@ -925,7 +925,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error diff --git a/src/locale/arrowdl_es_ES.ts b/src/locale/arrowdl_es_ES.ts index 232250fd..148b499a 100644 --- a/src/locale/arrowdl_es_ES.ts +++ b/src/locale/arrowdl_es_ES.ts @@ -925,7 +925,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error diff --git a/src/locale/arrowdl_es_US.ts b/src/locale/arrowdl_es_US.ts index f052b7c1..7acf58d2 100644 --- a/src/locale/arrowdl_es_US.ts +++ b/src/locale/arrowdl_es_US.ts @@ -925,7 +925,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error diff --git a/src/locale/arrowdl_fr_FR.ts b/src/locale/arrowdl_fr_FR.ts index 2f977dea..f2a794bc 100644 --- a/src/locale/arrowdl_fr_FR.ts +++ b/src/locale/arrowdl_fr_FR.ts @@ -927,7 +927,7 @@ Utiliser les délimiteurs de grappe, pour télécharger plusieurs fichiers en m - 5xx Unknown serveur error + 5xx Unknown server error 5xx Erreur de serveur inconnue diff --git a/src/locale/arrowdl_hu_HU.ts b/src/locale/arrowdl_hu_HU.ts index 66e1dc26..76d5a48e 100644 --- a/src/locale/arrowdl_hu_HU.ts +++ b/src/locale/arrowdl_hu_HU.ts @@ -926,7 +926,7 @@ A kötegleírók használatával több fájlt is letölthetsz egyszerre. - 5xx Unknown serveur error + 5xx Unknown server error 5xx Ismeretlen szerverhiba @@ -2250,12 +2250,12 @@ Néhány példa az alábbiakban látható. Kattints a példa beillesztéséhez.< Concurrent fragments: - + Aktuális letöltések 20 - + 20 @@ -2860,12 +2860,12 @@ Néhány példa az alábbiakban látható. Kattints a példa beillesztéséhez.< Bootstrap Icons (default) - + Bootstrap ikonok (alapértelmezett) FontAwesome Flat Design - + FontAwesome Flat Design diff --git a/src/locale/arrowdl_it_IT.ts b/src/locale/arrowdl_it_IT.ts index 4e64c254..99802896 100644 --- a/src/locale/arrowdl_it_IT.ts +++ b/src/locale/arrowdl_it_IT.ts @@ -928,8 +928,8 @@ L'applicazione non verrà scaricata con socket protetti (HTTPS, FTPS). - 5xx Unknown serveur error - 500 errore server sconosciuto + 5xx Unknown server error + 5xx errore server sconosciuto diff --git a/src/locale/arrowdl_ja_JP.ts b/src/locale/arrowdl_ja_JP.ts index e9c78ce2..bd3343d4 100644 --- a/src/locale/arrowdl_ja_JP.ts +++ b/src/locale/arrowdl_ja_JP.ts @@ -925,7 +925,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error diff --git a/src/locale/arrowdl_ko_KR.ts b/src/locale/arrowdl_ko_KR.ts index cc654a81..1350ac2a 100644 --- a/src/locale/arrowdl_ko_KR.ts +++ b/src/locale/arrowdl_ko_KR.ts @@ -925,7 +925,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error diff --git a/src/locale/arrowdl_nl_NL.ts b/src/locale/arrowdl_nl_NL.ts index 17a1db4a..b4d33949 100644 --- a/src/locale/arrowdl_nl_NL.ts +++ b/src/locale/arrowdl_nl_NL.ts @@ -926,7 +926,7 @@ Je kunt evt. de reeksomschrijvingen gebruiken om meerdere bestanden tegelijk te - 5xx Unknown serveur error + 5xx Unknown server error 5xx: onbekende serverfout diff --git a/src/locale/arrowdl_pl_PL.ts b/src/locale/arrowdl_pl_PL.ts index 88fad6a3..7c5f56a8 100644 --- a/src/locale/arrowdl_pl_PL.ts +++ b/src/locale/arrowdl_pl_PL.ts @@ -925,7 +925,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error diff --git a/src/locale/arrowdl_pt_BR.ts b/src/locale/arrowdl_pt_BR.ts index 21e07375..f14d7f31 100644 --- a/src/locale/arrowdl_pt_BR.ts +++ b/src/locale/arrowdl_pt_BR.ts @@ -926,7 +926,7 @@ Você também pode usar indicadores de lote para baixar vários arquivos de uma - 5xx Unknown serveur error + 5xx Unknown server error 5xx Erro de servidor desconhecido diff --git a/src/locale/arrowdl_pt_PT.ts b/src/locale/arrowdl_pt_PT.ts index 8aace67f..9087070d 100644 --- a/src/locale/arrowdl_pt_PT.ts +++ b/src/locale/arrowdl_pt_PT.ts @@ -925,7 +925,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error diff --git a/src/locale/arrowdl_ru_RU.ts b/src/locale/arrowdl_ru_RU.ts index ac7ec1ae..0aa5735b 100644 --- a/src/locale/arrowdl_ru_RU.ts +++ b/src/locale/arrowdl_ru_RU.ts @@ -925,8 +925,8 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error - 5xx Unknown server error + 5xx Unknown server error + diff --git a/src/locale/arrowdl_vi_VN.ts b/src/locale/arrowdl_vi_VN.ts index d6cb18fc..3c1df9e5 100644 --- a/src/locale/arrowdl_vi_VN.ts +++ b/src/locale/arrowdl_vi_VN.ts @@ -925,7 +925,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error diff --git a/src/locale/arrowdl_zh_CN.ts b/src/locale/arrowdl_zh_CN.ts index 19143dbc..7d1c6783 100644 --- a/src/locale/arrowdl_zh_CN.ts +++ b/src/locale/arrowdl_zh_CN.ts @@ -926,7 +926,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error 5xx 未知服务器错误 diff --git a/src/locale/arrowdl_zh_TW.ts b/src/locale/arrowdl_zh_TW.ts index aeb69b24..d66258ba 100644 --- a/src/locale/arrowdl_zh_TW.ts +++ b/src/locale/arrowdl_zh_TW.ts @@ -926,7 +926,7 @@ You can also use batch descriptors to download multiple files at one time. - 5xx Unknown serveur error + 5xx Unknown server error 5xx 未知伺服器錯誤 diff --git a/src/version.h b/src/version.h index 71a0cd49..d69506cb 100644 --- a/src/version.h +++ b/src/version.h @@ -38,7 +38,7 @@ const QString STR_APPLICATION_VERSION{APP_VERSION}; const QString STR_APPLICATION_DATE{"2020"}; const QString STR_APPLICATION_AUTHOR{"Sébastien Vavassori"}; const QString STR_APPLICATION_WEBSITE{"https://github.com/setvisible/ArrowDL"}; -const QString STR_TUTORIAL_WEBSITE{"https://www.arrow-dl.com/ArrowDL/category/tutorial.html"}; +const QString STR_TUTORIAL_WEBSITE{"https://www.arrow-dl.com/tutorial/"}; const QString STR_GITHUB_OWNER{"setvisible"}; const QString STR_GITHUB_REPO{"ArrowDL"}; diff --git a/test/core/abstractsettings/tst_abstractsettings.cpp b/test/core/abstractsettings/tst_abstractsettings.cpp index 3fd82e1c..81365f1f 100644 --- a/test/core/abstractsettings/tst_abstractsettings.cpp +++ b/test/core/abstractsettings/tst_abstractsettings.cpp @@ -55,9 +55,9 @@ void tst_AbstractSettings::addSettingWithString_data() QTest::addColumn("input"); QTest::addColumn("expected"); - QTest::newRow("simple") << "Color" << "red" << "blue" << "blue"; - QTest::newRow("simple") << "-" << "red" << "" << ""; - QTest::newRow("simple") << "..." << "red" << "10" << "10"; + QTest::newRow("trivial") << "Color" << "red" << "blue" << "blue"; + QTest::newRow("key -") << "-" << "red" << "" << ""; + QTest::newRow("key .") << "..." << "red" << "10" << "10"; QTest::newRow("simple") << "integer" << "red" << "10" << "10"; QTest::newRow("empty") << "Color" << "red" << "" << ""; diff --git a/test/core/downloadmanager/tst_downloadmanager.cpp b/test/core/downloadmanager/tst_downloadmanager.cpp index d468d5bc..4c473938 100644 --- a/test/core/downloadmanager/tst_downloadmanager.cpp +++ b/test/core/downloadmanager/tst_downloadmanager.cpp @@ -64,7 +64,7 @@ DownloadItem *tst_DownloadManager::createDummyJob( const QString url, const QString mask) { Q_ASSERT(m_tempDir.isValid()); - qDebug() << "Directory for tests: " << m_tempDir.path(); + // qDebug() << "Directory for tests: " << m_tempDir.path(); ResourceItem* resource = new ResourceItem(); resource->setUrl(url); resource->setDestination(m_tempDir.path()); @@ -84,7 +84,7 @@ void tst_DownloadManager::appendJobPaused() QSignalSpy spyJobFinished(target.data(), SIGNAL(jobFinished(IDownloadItem*))); /* The most permanent url in the whole universe */ - // QString address = "https://www.arrow-dl.com/styles.css"; // css not png + // QString address = "https://www.arrow-dl.com/favicon.ico"; // ico, not png /// \todo fix IDownloadItem::NetworkError with "3xx Unknown redirect error" with SSL url diff --git a/test/core/fileutils/tst_fileutils.cpp b/test/core/fileutils/tst_fileutils.cpp index 5db6bf35..9068928d 100644 --- a/test/core/fileutils/tst_fileutils.cpp +++ b/test/core/fileutils/tst_fileutils.cpp @@ -45,11 +45,11 @@ void tst_FileUtils::validateFileName_data() QTest::newRow("empty 2") << true << QString() << QString(); QTest::newRow("empty 4") << true << "" << ""; - QTest::newRow("reserved dir+name 1") << true << "CON" << "file"; - QTest::newRow("reserved dir+name 2") << true << "/CON" << "/file"; - QTest::newRow("reserved dir+name 3") << true << "\\CON" << "\\file"; - QTest::newRow("reserved dir+name 4") << true << "/some/path/CON" << "/some/path/file"; - QTest::newRow("reserved dir+name 5") << true << "\\some/path\\CON" << "\\some/path\\file"; + QTest::newRow("reserved dir+name 10") << true << "CON" << "file"; + QTest::newRow("reserved dir+name 11") << true << "/CON" << "/file"; + QTest::newRow("reserved dir+name 12") << true << "\\CON" << "\\file"; + QTest::newRow("reserved dir+name 13") << true << "/some/path/CON" << "/some/path/file"; + QTest::newRow("reserved dir+name 14") << true << "\\some/path\\CON" << "\\some/path\\file"; QTest::newRow("reserved dir+name+ext 1") << true << "CON.txt" << "file.txt"; QTest::newRow("reserved dir+name+ext 2") << true << "/CON.txt" << "/file.txt"; @@ -157,8 +157,8 @@ void tst_FileUtils::validateFileName_data() QTest::newRow("end char 3") << false << "my file ." << "my file ._"; // Unicode UTF chars - QTest::newRow("allowed utf char") << false << "لة الش.txt" << "لة الش.txt"; - QTest::newRow("allowed utf char") << false << "番剧.txt" << "番剧.txt"; + QTest::newRow("allowed utf char 1") << false << "لة الش.txt" << "لة الش.txt"; + QTest::newRow("allowed utf char 2") << false << "番剧.txt" << "番剧.txt"; } void tst_FileUtils::validateFileName() @@ -178,36 +178,36 @@ void tst_FileUtils::cleanFileName_data() QTest::addColumn("expected"); QTest::newRow("empty") << "" << ""; - QTest::newRow("simple") << "a" << "A"; - QTest::newRow("simple") << "A" << "A"; + QTest::newRow("lowercase") << "a" << "A"; + QTest::newRow("uppercase") << "A" << "A"; - QTest::newRow("") << "A - B" << "A - B"; + QTest::newRow("-") << "A - B" << "A - B"; QTest::newRow("dot") << "A • B" << "A - B"; - QTest::newRow("") << "Rénet Schlüß" << "Rénet Schlüß"; + QTest::newRow("accent") << "Rénet Schlüß" << "Rénet Schlüß"; QTest::newRow("dash") << "Quikelol #lol" << "Quikelol #lol"; - QTest::newRow("unuseful text") << "Live '01 (Official Video)" << "Live '01"; - QTest::newRow("unuseful text") << "(Official Video) Live '01" << "Live '01"; - QTest::newRow("unuseful text") << "Live (Official Video) '01" << "Live '01"; - QTest::newRow("unuseful text") << "Live (Official Visualizer) '01" << "Live '01"; - QTest::newRow("unuseful text") << "Live ((Official Visualizer)) '01" << "Live '01"; - QTest::newRow("unuseful text") << "Live (Radio Edit) '01" << "Live '01"; + QTest::newRow("useless text 1") << "Live '01 (Official Video)" << "Live '01"; + QTest::newRow("useless text 2") << "(Official Video) Live '01" << "Live '01"; + QTest::newRow("useless text 3") << "Live (Official Video) '01" << "Live '01"; + QTest::newRow("useless text 4") << "Live (Official Visualizer) '01" << "Live '01"; + QTest::newRow("useless text 5") << "Live ((Official Visualizer)) '01" << "Live '01"; + QTest::newRow("useless text 6") << "Live (Radio Edit) '01" << "Live '01"; // BUGFIX with "Construction" that becomes "filestruction" // https://www.youtube.com/watch?v=lSQ7pWUo3g4 QTest::newRow("_Con_struction") << "Construction" << "Construction"; - QTest::newRow("capitalized") << "ALICE AND BOB" << "Alice And Bob"; - QTest::newRow("capitalized") << "ALICE and BOB" << "Alice And Bob"; - QTest::newRow("capitalized") << "alice and bob" << "Alice And Bob"; - QTest::newRow("capitalized") << "alice,and-bob" << "Alice,And-Bob"; - QTest::newRow("capitalized") << "'alice'" << "'Alice'"; - QTest::newRow("capitalized") << "\"alice\"" << "'Alice'"; + QTest::newRow("capitalized 1") << "ALICE AND BOB" << "Alice And Bob"; + QTest::newRow("capitalized 2") << "ALICE and BOB" << "Alice And Bob"; + QTest::newRow("capitalized 3") << "alice and bob" << "Alice And Bob"; + QTest::newRow("capitalized 4") << "alice,and-bob" << "Alice,And-Bob"; + QTest::newRow("capitalized 5") << "'alice'" << "'Alice'"; + QTest::newRow("capitalized 6") << "\"alice\"" << "'Alice'"; // Unicode UTF chars - QTest::newRow("utf") << "لة الش" << "لة الش"; - QTest::newRow("utf") << "番剧" << "番剧"; + QTest::newRow("utf 1") << "لة الش" << "لة الش"; + QTest::newRow("utf 2") << "番剧" << "番剧"; } void tst_FileUtils::cleanFileName() diff --git a/test/core/format/tst_format.cpp b/test/core/format/tst_format.cpp index 9a9758fa..0d0f2d81 100644 --- a/test/core/format/tst_format.cpp +++ b/test/core/format/tst_format.cpp @@ -66,17 +66,17 @@ void tst_Format::timeToString_data() QTest::addColumn("time"); QTest::addColumn("expected"); - QTest::newRow("invalid time") << QTime() << "--:--"; - QTest::newRow("invalid time") << QTime(0, 0, 60, 0) << "--:--"; - QTest::newRow("invalid time") << QTime(1236, 0) << "--:--"; + QTest::newRow("invalid time 1") << QTime() << "--:--"; + QTest::newRow("invalid time 2") << QTime(0, 0, 60, 0) << "--:--"; + QTest::newRow("invalid time 3") << QTime(1236, 0) << "--:--"; QTest::newRow("0 sec") << QTime(0, 0, 0, 0) << "00:01"; - QTest::newRow("0 sec") << QTime(0, 0, 0, 500) << "00:01"; - QTest::newRow("0 sec") << QTime(0, 0, 0, 999) << "00:01"; + QTest::newRow("0.5 sec") << QTime(0, 0, 0, 500) << "00:01"; + QTest::newRow("0.999 sec") << QTime(0, 0, 0, 999) << "00:01"; QTest::newRow("1 sec") << QTime(0, 0, 1, 0) << "00:01"; - QTest::newRow("1 sec") << QTime(0, 0, 1, 500) << "00:01"; - QTest::newRow("1 sec") << QTime(0, 0, 1, 999) << "00:01"; - QTest::newRow("60 sec") << QTime(0, 0, 59, 999) << "00:59"; + QTest::newRow("1.5 sec") << QTime(0, 0, 1, 500) << "00:01"; + QTest::newRow("1.999 sec") << QTime(0, 0, 1, 999) << "00:01"; + QTest::newRow("59.99 sec") << QTime(0, 0, 59, 999) << "00:59"; QTest::newRow("60 sec") << QTime(0, 1, 0, 0) << "01:00"; QTest::newRow("1 day") << QTime(23, 59, 59, 999) << "23:59:59"; } @@ -96,19 +96,19 @@ void tst_Format::timeToString_seconds_data() QTest::addColumn("seconds"); QTest::addColumn("expected"); - QTest::newRow("invalid time") << qint64(-1) << "--:--"; - QTest::newRow("invalid time") << qint64(0) << "00:01"; - QTest::newRow("invalid time") << qint64(1) << "00:01"; - QTest::newRow("invalid time") << qint64(2) << "00:02"; + QTest::newRow("invalid time 1") << qint64(-1) << "--:--"; + QTest::newRow("invalid time 2") << qint64(0) << "00:01"; + QTest::newRow("invalid time 3") << qint64(1) << "00:01"; + QTest::newRow("invalid time 4") << qint64(2) << "00:02"; - QTest::newRow("60 sec") << qint64(59) << "00:59"; + QTest::newRow("59 sec") << qint64(59) << "00:59"; QTest::newRow("60 sec") << qint64(60) << "01:00"; - QTest::newRow("60 sec") << qint64(3599) << "59:59"; - QTest::newRow("60 sec") << qint64(3600) << "01:00:00"; + QTest::newRow("59 min 59 sec") << qint64(3599) << "59:59"; + QTest::newRow("1 hour") << qint64(3600) << "01:00:00"; QTest::newRow("1 day") << qint64(24*60*60 - 1) << "23:59:59"; - QTest::newRow("more than 1 day") << qint64(24*60*60) << QString::fromUtf8("\xE2\x88\x9E"); - QTest::newRow("more than 1 day") << qint64(24*60*60 + 1) << QString::fromUtf8("\xE2\x88\x9E"); + QTest::newRow("more than 1 day (1)") << qint64(24*60*60) << QString::fromUtf8("\xE2\x88\x9E"); + QTest::newRow("more than 1 day (2)") << qint64(24*60*60 + 1) << QString::fromUtf8("\xE2\x88\x9E"); } void tst_Format::timeToString_seconds() @@ -146,7 +146,7 @@ void tst_Format::fileSizeToString_data() QTest::newRow("1234567890123456 bytes") << BigInteger(1234567890123456) << "1122.833 TB"; QTest::newRow("MAX") << BigInteger(SIZE_MAX) << "Unknown"; - QTest::newRow("negative") << BigInteger(-1) << "Unknown"; + QTest::newRow("negative (2)") << BigInteger(-1) << "Unknown"; QTest::newRow("MIN") << BigInteger(-SIZE_MAX) << "1 byte"; } @@ -218,8 +218,8 @@ void tst_Format::currentSpeedToString_data() QTest::newRow("1234567890123456 bytes") << 1234567890123456.0 << "1122.83 TB/s"; QTest::newRow("INFINITY") << qInf() << "-"; - QTest::newRow("NaN") << qQNaN() << "-"; - QTest::newRow("NaN") << qSNaN() << "-"; + QTest::newRow("NaN quiet") << qQNaN() << "-"; + QTest::newRow("NaN signalling") << qSNaN() << "-"; } void tst_Format::currentSpeedToString() @@ -238,21 +238,21 @@ void tst_Format::parsePercentDecimal_data() QTest::addColumn("expected"); /* Invalid */ - QTest::newRow("invalid") << "" << -1.0; - QTest::newRow("invalid") << QString() << -1.0; + QTest::newRow("null") << QString() << -1.0; + QTest::newRow("empty") << "" << -1.0; QTest::newRow("invalid") << "azerty" << -1.0; - QTest::newRow("invalid") << "NaN" << -1.0; + QTest::newRow("nan") << "NaN" << -1.0; QTest::newRow("negative") << "-1.0%" << -1.0; /* Valid */ - QTest::newRow("zero") << "0%" << 0.0; - QTest::newRow("zero") << "0.0%" << 0.0; - QTest::newRow("zero") << "0.0 %" << 0.0; - QTest::newRow("zero") << "0.0 %" << 0.0; + QTest::newRow("zero 1") << "0%" << 0.0; + QTest::newRow("zero 2") << "0.0%" << 0.0; + QTest::newRow("zero 3") << "0.0 %" << 0.0; + QTest::newRow("zero 4") << "0.0 %" << 0.0; QTest::newRow("8.2") << "8.2%" << 8.2; - QTest::newRow("100.0") << "100.0%" << 100.0; - QTest::newRow("100.0") << "1325.6654%" << 1325.6654; + QTest::newRow("100%") << "100.0%" << 100.0; + QTest::newRow("more than 100%") << "1325.6654%" << 1325.6654; } void tst_Format::parsePercentDecimal() @@ -271,25 +271,25 @@ void tst_Format::parseBytes_data() QTest::addColumn("expected"); /* Invalid */ - QTest::newRow("invalid") << "" << BigInteger(-1); - QTest::newRow("invalid") << QString() << BigInteger(-1); + QTest::newRow("null") << QString() << BigInteger(-1); + QTest::newRow("empty") << "" << BigInteger(-1); QTest::newRow("invalid") << "azerty" << BigInteger(-1); - QTest::newRow("invalid") << "NaN" << BigInteger(-1); + QTest::newRow("nan") << "NaN" << BigInteger(-1); - QTest::newRow("unitless") << "0" << BigInteger(-1); - QTest::newRow("unitless") << "0.0" << BigInteger(-1); + QTest::newRow("unitless 1") << "0" << BigInteger(-1); + QTest::newRow("unitless 2") << "0.0" << BigInteger(-1); - QTest::newRow("unknown") << "-" << BigInteger(-1); - QTest::newRow("unknown") << "-.-" << BigInteger(-1); - QTest::newRow("unknown") << "--.--" << BigInteger(-1); - QTest::newRow("unknown") << "..." << BigInteger(-1); - QTest::newRow("unknown") << "?" << BigInteger(-1); + QTest::newRow("unknown 1") << "-" << BigInteger(-1); + QTest::newRow("unknown 2") << "-.-" << BigInteger(-1); + QTest::newRow("unknown 3") << "--.--" << BigInteger(-1); + QTest::newRow("unknown 4") << "..." << BigInteger(-1); + QTest::newRow("unknown 5") << "?" << BigInteger(-1); /* Valid */ - QTest::newRow("zero") << "0 KiB" << BigInteger(0); - QTest::newRow("zero") << "0.0KiB" << BigInteger(0); + QTest::newRow("zero 1") << "0 KiB" << BigInteger(0); + QTest::newRow("zero 2") << "0.0KiB" << BigInteger(0); - QTest::newRow("1 byte") << "1 B" << BigInteger(1); + QTest::newRow("1 B") << "1 B" << BigInteger(1); QTest::newRow("1 byte") << "1 byte" << BigInteger(1); QTest::newRow("2 bytes") << "2 bytes" << BigInteger(2); @@ -301,24 +301,24 @@ void tst_Format::parseBytes_data() QTest::newRow("1 MiB") << "1 MiB" << BigInteger(1024*1024); QTest::newRow("1 GiB") << "1 GiB" << BigInteger(1024*1024*1024); - QTest::newRow("167.85MiB") << "167.85MiB" << BigInteger(176003481); - QTest::newRow("167.85MiB") << "167.85 MiB" << BigInteger(176003481); - QTest::newRow("167.85MiB") << "167.85 MiB" << BigInteger(176003481); - QTest::newRow("167.85MiB") << "167.85\tMiB" << BigInteger(176003481); + QTest::newRow("167.85MiB 1") << "167.85MiB" << BigInteger(176003481); + QTest::newRow("167.85MiB 2") << "167.85 MiB" << BigInteger(176003481); + QTest::newRow("167.85MiB 3") << "167.85 MiB" << BigInteger(176003481); + QTest::newRow("167.85MiB 4") << "167.85\tMiB" << BigInteger(176003481); - QTest::newRow("2.95GiB") << "2.95GiB" << BigInteger(3167538380); - QTest::newRow("2.95GiB") << "2.95 GiB" << BigInteger(3167538380); - QTest::newRow("2.95GiB") << "2.95 GiB" << BigInteger(3167538380); - QTest::newRow("2.95GiB") << "2.95\tGiB" << BigInteger(3167538380); + QTest::newRow("2.95GiB 1") << "2.95GiB" << BigInteger(3167538380); + QTest::newRow("2.95GiB 2") << "2.95 GiB" << BigInteger(3167538380); + QTest::newRow("2.95GiB 3") << "2.95 GiB" << BigInteger(3167538380); + QTest::newRow("2.95GiB 4") << "2.95\tGiB" << BigInteger(3167538380); - QTest::newRow("1.02TiB") << "1.02TiB" << BigInteger(1121501860331); - QTest::newRow("1.02TiB") << "1.02 TiB" << BigInteger(1121501860331); - QTest::newRow("1.02TiB") << "1.02 TiB" << BigInteger(1121501860331); - QTest::newRow("1.02TiB") << "1.02\tTiB" << BigInteger(1121501860331); + QTest::newRow("1.02TiB 1") << "1.02TiB" << BigInteger(1121501860331); + QTest::newRow("1.02TiB 2") << "1.02 TiB" << BigInteger(1121501860331); + QTest::newRow("1.02TiB 3") << "1.02 TiB" << BigInteger(1121501860331); + QTest::newRow("1.02TiB 4") << "1.02\tTiB" << BigInteger(1121501860331); - QTest::newRow("estim") << "~55.43MiB" << BigInteger(58122567); - QTest::newRow("estim") << "~55.43 MiB" << BigInteger(58122567); - QTest::newRow("estim") << " ~ 55.43 MiB" << BigInteger(58122567); + QTest::newRow("estimated 1") << "~55.43MiB" << BigInteger(58122567); + QTest::newRow("estimated 2") << "~55.43 MiB" << BigInteger(58122567); + QTest::newRow("estimated 3") << " ~ 55.43 MiB" << BigInteger(58122567); QTest::newRow("bigger than integer 32-bit range") << "999.99GiB" << BigInteger(1073731086581); @@ -340,10 +340,10 @@ void tst_Format::wrapText_data() QTest::addColumn("length"); QTest::addColumn("expected"); - QTest::newRow("empty") << QString() << 0 << QString(); - QTest::newRow("dots") << "aa.aaaa.a." << 0 << "aa. aaaa. a."; - QTest::newRow("dots") << "magnet:aa.aaaa.a" << 0 << "magnet: aa. aaaa. a"; - QTest::newRow("dots") << "ftp://aa/aaaa/a.aa" << 6 << "ftp:// aa/aaaa/ a.aa"; + QTest::newRow("null") << QString() << 0 << QString(); + QTest::newRow("space") << "aa.aaaa.a." << 0 << "aa. aaaa. a."; + QTest::newRow("space 2") << "magnet:aa.aaaa.a" << 0 << "magnet: aa. aaaa. a"; + QTest::newRow("space 3") << "ftp://aa/aaaa/a.aa" << 6 << "ftp:// aa/aaaa/ a.aa"; } void tst_Format::wrapText() @@ -362,8 +362,8 @@ void tst_Format::boolToHtml_data() QTest::addColumn("input"); QTest::addColumn("expected"); - QTest::newRow("") << false << "False"; - QTest::newRow("") << true << "True"; + QTest::newRow("false") << false << "False"; + QTest::newRow("true") << true << "True"; } /*! @@ -384,8 +384,8 @@ void tst_Format::markDownToHtml_data() QTest::addColumn("input"); QTest::addColumn("expected"); - QTest::newRow("") << QString() << QString(); - QTest::newRow("") << "\n" << "
\n"; + QTest::newRow("null") << QString() << QString(); + QTest::newRow("newline") << "\n" << "
\n"; } void tst_Format::markDownToHtml() diff --git a/test/core/mask/tst_mask.cpp b/test/core/mask/tst_mask.cpp index 5e4a0b00..c95a8795 100644 --- a/test/core/mask/tst_mask.cpp +++ b/test/core/mask/tst_mask.cpp @@ -35,11 +35,11 @@ private slots: void interpret_data(); void interpret(); - void interpretEscaped(); void interpretEscaped_data(); + void interpretEscaped(); - void interpretForbidden(); void interpretForbidden_data(); + void interpretForbidden(); }; @@ -72,10 +72,10 @@ void tst_Mask::fromUserInput_data() /* End of line */ QUrl expectedEOL("https://www.example.org/image.jpg"); - QTest::newRow("EOL") << "https://www.example.org/image.jpg\n" << expectedEOL; - QTest::newRow("EOL") << "https://www.example.org/image.jpg\r" << expectedEOL; - QTest::newRow("EOL") << "https://www.example.org/image.jpg\r\n" << expectedEOL; - QTest::newRow("EOL") << "https://www.example.org/image.jpg%0A%0D%0D" << expectedEOL; + QTest::newRow("EOL N") << "https://www.example.org/image.jpg\n" << expectedEOL; + QTest::newRow("EOL R") << "https://www.example.org/image.jpg\r" << expectedEOL; + QTest::newRow("EOL RN") << "https://www.example.org/image.jpg\r\n" << expectedEOL; + QTest::newRow("EOL %") << "https://www.example.org/image.jpg%0A%0D%0D" << expectedEOL; } void tst_Mask::fromUserInput() @@ -142,8 +142,8 @@ void tst_Mask::interpret_data() /* Composites */ QTest::newRow("composite") << url << "*name*.*ext*" << "myimage.tar.gz"; - QTest::newRow("file separator /") << url << "*url*/*subdirs*/*name*.*ext*" << "www.myweb.com/images/01/myimage.tar.gz"; - QTest::newRow("file separator \\") << url << "*url*\\*subdirs*\\*name*.*ext*" << "www.myweb.com/images/01/myimage.tar.gz"; + QTest::newRow("file separator slash") << url << "*url*/*subdirs*/*name*.*ext*" << "www.myweb.com/images/01/myimage.tar.gz"; + QTest::newRow("file separator backslash") << url << "*url*\\*subdirs*\\*name*.*ext*" << "www.myweb.com/images/01/myimage.tar.gz"; /* Limit cases */ QTest::newRow("no file") << "https://www.myweb.com/images/" << mask << "www.myweb.com/images"; @@ -155,10 +155,10 @@ void tst_Mask::interpret_data() QTest::newRow("no basename") << "https://www.myweb.com/.image" << mask << "www.myweb.com/.image"; /* Bad masks */ - QTest::newRow("trailing . and /") << url << "///*name*..//./." << "myimage.tar"; - QTest::newRow("trailing . and /") << url << "///*ext*..//./." << "gz"; - QTest::newRow("duplicate /") << url << "*url*/////*name*" << "www.myweb.com/myimage.tar"; - QTest::newRow("duplicate /") << url << "*url*/////*ext*" << "www.myweb.com/gz"; + QTest::newRow("name with trailing . and slash") << url << "///*name*..//./." << "myimage.tar"; + QTest::newRow("extension with trailing . and slash") << url << "///*ext*..//./." << "gz"; + QTest::newRow("name with duplicate slash") << url << "*url*/////*name*" << "www.myweb.com/myimage.tar"; + QTest::newRow("extension with duplicate slash") << url << "*url*/////*ext*" << "www.myweb.com/gz"; } void tst_Mask::interpret() @@ -217,15 +217,15 @@ void tst_Mask::interpretForbidden_data() << "http://www.example.org/%3F/question_mark_%3F.jpg" << QString() << mask << "www.example.org/_/question_mark__.jpg"; - QTest::newRow("'?' is a query here") + QTest::newRow("'?' is a query here 1") << "http://www.example.org/archive.tar.gz?id=1345&lang=eng" << QString() << mask << "www.example.org/archive.tar.gz"; - QTest::newRow("'?' is a query here") + QTest::newRow("'?' is a query here 2") << "http://www.example.org/faq.html?#fragment" << QString() << mask << "www.example.org/faq.html"; - QTest::newRow("'?' is a query here") + QTest::newRow("'?' is a query here 3") << "http://www.example.org/faq.html?" << QString() << mask << "www.example.org/faq.html"; diff --git a/test/core/regex/tst_regex.cpp b/test/core/regex/tst_regex.cpp index ac52ec93..3ce359b7 100644 --- a/test/core/regex/tst_regex.cpp +++ b/test/core/regex/tst_regex.cpp @@ -40,25 +40,25 @@ void tst_Regex::getCaptures_data() QTest::newRow("empty") << "" << QStringList{}; - QTest::newRow("simple") << "[01:03]" << QStringList{"[01:03]"}; - QTest::newRow("simple") << "(01:03)" << QStringList{"(01:03)"}; - QTest::newRow("simple") << "[01 03]" << QStringList{"[01 03]"}; - QTest::newRow("simple") << "(01 03)" << QStringList{"(01 03)"}; - QTest::newRow("simple") << "[01-03]" << QStringList{"[01-03]"}; - QTest::newRow("simple") << "(01-03)" << QStringList{"(01-03)"}; + QTest::newRow("simple [:]") << "[01:03]" << QStringList{"[01:03]"}; + QTest::newRow("simple (:)") << "(01:03)" << QStringList{"(01:03)"}; + QTest::newRow("simple [ ]") << "[01 03]" << QStringList{"[01 03]"}; + QTest::newRow("simple ( )") << "(01 03)" << QStringList{"(01 03)"}; + QTest::newRow("simple [-]") << "[01-03]" << QStringList{"[01-03]"}; + QTest::newRow("simple (-)") << "(01-03)" << QStringList{"(01-03)"}; - QTest::newRow("multiple") << "[01:03](10 20)" << QStringList{"[01:03]", "(10 20)"}; - QTest::newRow("multiple") << "da/[01:03]/da/(10 20)/da" << QStringList{"[01:03]", "(10 20)"}; + QTest::newRow("multiple 1") << "[01:03](10 20)" << QStringList{"[01:03]", "(10 20)"}; + QTest::newRow("multiple 2") << "da/[01:03]/da/(10 20)/da" << QStringList{"[01:03]", "(10 20)"}; - QTest::newRow("embedded") << "[[01:03]/(10 20)]" << QStringList{"[01:03]", "(10 20)"}; - QTest::newRow("embedded") << "([01:03]/(10 20))" << QStringList{"[01:03]", "(10 20)"}; + QTest::newRow("embedded []") << "[[01:03]/(10 20)]" << QStringList{"[01:03]", "(10 20)"}; + QTest::newRow("embedded ()") << "([01:03]/(10 20))" << QStringList{"[01:03]", "(10 20)"}; QTest::newRow("invalid") << "01:03" << QStringList{}; - QTest::newRow("invalid") << "[01:03" << QStringList{}; - QTest::newRow("invalid") << "[123]" << QStringList{}; - QTest::newRow("invalid") << "[01:02:03]" << QStringList{}; - QTest::newRow("invalid") << "[01:02 03]" << QStringList{}; - QTest::newRow("invalid") << "[01 02 03]" << QStringList{}; + QTest::newRow("invalid [") << "[01:03" << QStringList{}; + QTest::newRow("invalid []") << "[123]" << QStringList{}; + QTest::newRow("invalid [::]") << "[01:02:03]" << QStringList{}; + QTest::newRow("invalid [: ]") << "[01:02 03]" << QStringList{}; + QTest::newRow("invalid [ ]") << "[01 02 03]" << QStringList{}; QTest::newRow("weird but valid") << "[01:03)" << QStringList{"[01:03)"}; } diff --git a/test/core/resourceitem/tst_resourceitem.cpp b/test/core/resourceitem/tst_resourceitem.cpp index 9144a569..6b3ac2b2 100644 --- a/test/core/resourceitem/tst_resourceitem.cpp +++ b/test/core/resourceitem/tst_resourceitem.cpp @@ -47,28 +47,28 @@ void tst_ResourceItem::localFileUrl_data() << "" << QUrl("file:///home/me/documents/myimage.tar.gz"); - QTest::newRow("windows file system") + QTest::newRow("windows file system 1") << "https://www.myweb.com/images/01/myimage.tar.gz" << "C:/Temp" << "*name*.*ext*" << "" << QUrl("file:///C:/Temp/myimage.tar.gz"); - QTest::newRow("windows file system") + QTest::newRow("windows file system 2") << "https://www.myweb.com/images/01/myimage.tar.gz" << "C:/Temp" << "*url*\\*subdirs*\\*name*.*ext*" << "" << QUrl("file:///C:/Temp/www.myweb.com/images/01/myimage.tar.gz"); - QTest::newRow("windows custom filename") + QTest::newRow("windows custom filename 1") << "https://www.myweb.com/images/01/myimage.tar.gz" << "C:/Temp" << "*name*.*ext*" << "A NEW FILE NAME" << QUrl("file:///C:/Temp/A NEW FILE NAME.gz"); - QTest::newRow("windows custom filename") + QTest::newRow("windows custom filename 2") << "https://www.myweb.com/images/01/myimage.tar.gz" << "C:/Temp" << "*url*\\*subdirs*\\*name*.*ext*" diff --git a/test/core/stream/tst_stream.cpp b/test/core/stream/tst_stream.cpp index 1f177eb4..16397575 100644 --- a/test/core/stream/tst_stream.cpp +++ b/test/core/stream/tst_stream.cpp @@ -883,15 +883,15 @@ void tst_Stream::fileBaseName_data() QTest::newRow("null") << QString() << QString(); QTest::newRow("empty") << "" << QString(); - QTest::newRow("separator") << "Live 10/02/2018" << "Live 10-02-2018"; - QTest::newRow("separator") << "here\\we\\come" << "Here-we-come"; + QTest::newRow("slash") << "Live 10/02/2018" << "Live 10-02-2018"; + QTest::newRow("backslash") << "here\\we\\come" << "Here-we-come"; QTest::newRow("tab") << "\t here\twe\tcome \t" << "Here We Come"; QTest::newRow("minus") << "- \x2D — \u2212 \u2014" << "- - - - -"; QTest::newRow("brackets") << "Windsor ['98]" << "Windsor ['98]"; - QTest::newRow("brackets") << "Windsor ('98)" << "Windsor ('98)"; + QTest::newRow("parenthesis") << "Windsor ('98)" << "Windsor ('98)"; QTest::newRow("@") << "Live @ Windsor" << "Live @ Windsor"; QTest::newRow("extra _") << "_*_Cambridge_*_" << "-Cambridge-"; @@ -902,16 +902,12 @@ void tst_Stream::fileBaseName_data() << "\"Bohemian Rhapsody\" Steve Vai & Malmsteen & Zakk Wylde & Nuno@Atlantic City (11/30/18)" << "'Bohemian Rhapsody' Steve Vai & Malmsteen & Zakk Wylde & Nuno@Atlantic City (11-30-18)" ; - // BUGFIX with "Construction" that becomes "filestruction" - // https://www.youtube.com/watch?v=lSQ7pWUo3g4 - QTest::newRow("_Con_struction") << "Construction" << "Construction"; - - QTest::newRow("unuseful text") << "Live '01 (Official Video)" << "Live '01"; - QTest::newRow("unuseful text") << "(Official Video) Live '01" << "Live '01"; - QTest::newRow("unuseful text") << "Live (Official Video) '01" << "Live '01"; - QTest::newRow("unuseful text") << "Live (Official Visualizer) '01" << "Live '01"; - QTest::newRow("unuseful text") << "Live ((Official Visualizer)) '01" << "Live '01"; - QTest::newRow("unuseful text") << "Live (Radio Edit) '01" << "Live '01"; + QTest::newRow("useless text 1") << "Live '01 (Official Video)" << "Live '01"; + QTest::newRow("useless text 2") << "(Official Video) Live '01" << "Live '01"; + QTest::newRow("useless text 3") << "Live (Official Video) '01" << "Live '01"; + QTest::newRow("useless text 4") << "Live (Official Visualizer) '01" << "Live '01"; + QTest::newRow("useless text 5") << "Live ((Official Visualizer)) '01" << "Live '01"; + QTest::newRow("useless text 6") << "Live (Radio Edit) '01" << "Live '01"; // BUGFIX with "Construction" that becomes "filestruction" // https://www.youtube.com/watch?v=lSQ7pWUo3g4 @@ -943,20 +939,20 @@ void tst_Stream::guestimateFullSize_data() QTest::newRow("empty") << "" << BigInteger(-1); QTest::newRow("default") << "244+140" << BigInteger(294311 + 280597); - QTest::newRow("audio") << "18" << BigInteger(1552999); - QTest::newRow("audio") << "43" << BigInteger(2875968); - QTest::newRow("audio") << "140" << BigInteger(280597); + QTest::newRow("audio 1") << "18" << BigInteger(1552999); + QTest::newRow("audio 2") << "43" << BigInteger(2875968); + QTest::newRow("audio 3") << "140" << BigInteger(280597); - QTest::newRow("audio+video") << "160+140" << BigInteger(63901 + 280597); - QTest::newRow("audio+video") << "278+140" << BigInteger(53464 + 280597); + QTest::newRow("audio+video 1") << "160+140" << BigInteger(63901 + 280597); + QTest::newRow("audio+video 2") << "278+140" << BigInteger(53464 + 280597); /* * Invalid formats * In yt-dlp, video ID must be the first ID. * But we accept them as valid here. */ - QTest::newRow("audio+video") << "140+160" << BigInteger(280597 + 63901); - QTest::newRow("audio+video") << "140+278" << BigInteger(280597 + 53464); + QTest::newRow("audio+video 3") << "140+160" << BigInteger(280597 + 63901); + QTest::newRow("audio+video 4") << "140+278" << BigInteger(280597 + 53464); } void tst_Stream::guestimateFullSize() @@ -981,20 +977,20 @@ void tst_Stream::fileExtension_data() QTest::newRow("empty") << "" << "webm"; QTest::newRow("default") << "244+140" << "webm"; - QTest::newRow("audio") << "18" << "mp4"; - QTest::newRow("audio") << "43" << "webm"; - QTest::newRow("audio") << "140" << "m4a"; + QTest::newRow("audio 1") << "18" << "mp4"; + QTest::newRow("audio 2") << "43" << "webm"; + QTest::newRow("audio 3") << "140" << "m4a"; - QTest::newRow("audio+video") << "160+140" << "mp4"; - QTest::newRow("audio+video") << "278+140" << "webm"; + QTest::newRow("audio+video 1") << "160+140" << "mp4"; + QTest::newRow("audio+video 2") << "278+140" << "webm"; /* * Invalid formats * In yt-dlp, video ID must be the first ID. * But we accept them as valid here. */ - QTest::newRow("audio+video") << "140+160" << "mp4"; - QTest::newRow("audio+video") << "140+278" << "webm"; + QTest::newRow("audio+video 3") << "140+160" << "mp4"; + QTest::newRow("audio+video 4") << "140+278" << "webm"; } void tst_Stream::fileExtension() @@ -1058,23 +1054,23 @@ void tst_Stream::matchesHost_data() QTest::newRow("null") << QString() << QStringList() << false; QTest::newRow("empty") << "" << QStringList() << false; - QTest::newRow("simple") << "www.absnews.com" << QStringList( {"absnews:videos"} ) << false; - QTest::newRow("simple") << "www.absnews.com" << QStringList( {"absnews.com"} ) << true; - QTest::newRow("simple") << "videos.absnews.com" << QStringList( {"absnews:videos"} ) << true; - QTest::newRow("simple") << "videos.absnews.com" << QStringList( {"absnews.com:videos"} ) << true; - QTest::newRow("simple") << "videos.www.absnews.com" << QStringList( {"absnews:videos"} ) << true; - QTest::newRow("simple") << "player.videos.absnews.com" << QStringList( {"absnews:videos:player"} ) << true; + QTest::newRow("simple 1") << "www.absnews.com" << QStringList( {"absnews:videos"} ) << false; + QTest::newRow("simple 2") << "www.absnews.com" << QStringList( {"absnews.com"} ) << true; + QTest::newRow("simple 3") << "videos.absnews.com" << QStringList( {"absnews:videos"} ) << true; + QTest::newRow("simple 4") << "videos.absnews.com" << QStringList( {"absnews.com:videos"} ) << true; + QTest::newRow("simple 5") << "videos.www.absnews.com" << QStringList( {"absnews:videos"} ) << true; + QTest::newRow("simple 6") << "player.videos.absnews.com" << QStringList( {"absnews:videos:player"} ) << true; QTest::newRow("simple list") << "www.youtube.com" << QStringList( {"youtube", "youtube.com"} ) << true; QTest::newRow("case sensitive") << "www.bild.de" << QStringList( {"Bild"} ) << true; - QTest::newRow("contains") << "www.absnews.com" << QStringList( {"abs"} ) << false; - QTest::newRow("contains") << "www.absnews.com" << QStringList( {"news"} ) << false; - QTest::newRow("contains") << "www.absnews.com" << QStringList( {"news.com"} ) << false; + QTest::newRow("contains 1") << "www.absnews.com" << QStringList( {"abs"} ) << false; + QTest::newRow("contains 2") << "www.absnews.com" << QStringList( {"news"} ) << false; + QTest::newRow("contains 3") << "www.absnews.com" << QStringList( {"news.com"} ) << false; - QTest::newRow("no match") << "www.aol-videos.com" << QStringList( {"aol.com"} ) << false; - QTest::newRow("no match") << "www.aol-videos.com" << QStringList( {"aol"} ) << false; - QTest::newRow("no match") << "www.bildung.de" << QStringList( {"Bild"} ) << false; + QTest::newRow("no match 1") << "www.aol-videos.com" << QStringList( {"aol.com"} ) << false; + QTest::newRow("no match 2") << "www.aol-videos.com" << QStringList( {"aol"} ) << false; + QTest::newRow("no match 3") << "www.bildung.de" << QStringList( {"Bild"} ) << false; QTest::newRow("no match list") << "www.youtube.de" << QStringList( {"youtu.be", "youtube.com", "youtube:video"} ) << false; // colon symbol ':' -> With 'abcnews:video', the hostname must contains 'abcnews' and also 'video' diff --git a/test/core/torrentbasecontext/tst_torrentbasecontext.cpp b/test/core/torrentbasecontext/tst_torrentbasecontext.cpp index 4da9a908..ff0ff884 100644 --- a/test/core/torrentbasecontext/tst_torrentbasecontext.cpp +++ b/test/core/torrentbasecontext/tst_torrentbasecontext.cpp @@ -38,18 +38,18 @@ void tst_TorrentBaseContext::computePriority_data() QTest::newRow("unique item") << 0 << 1 << static_cast(TorrentFileInfo::Normal); - QTest::newRow("2 items") << 0 << 2 << static_cast(TorrentFileInfo::Normal); - QTest::newRow("2 items") << 1 << 2 << static_cast(TorrentFileInfo::Normal); + QTest::newRow("2 items (item 0)") << 0 << 2 << static_cast(TorrentFileInfo::Normal); + QTest::newRow("2 items (item 1)") << 1 << 2 << static_cast(TorrentFileInfo::Normal); - QTest::newRow("9 items") << 0 << 9 << static_cast(TorrentFileInfo::High); - QTest::newRow("9 items") << 1 << 9 << static_cast(TorrentFileInfo::High); - QTest::newRow("9 items") << 2 << 9 << static_cast(TorrentFileInfo::High); - QTest::newRow("9 items") << 3 << 9 << static_cast(TorrentFileInfo::Normal); - QTest::newRow("9 items") << 4 << 9 << static_cast(TorrentFileInfo::Normal); - QTest::newRow("9 items") << 5 << 9 << static_cast(TorrentFileInfo::Normal); - QTest::newRow("9 items") << 6 << 9 << static_cast(TorrentFileInfo::Low); - QTest::newRow("9 items") << 7 << 9 << static_cast(TorrentFileInfo::Low); - QTest::newRow("9 items") << 8 << 9 << static_cast(TorrentFileInfo::Low); + QTest::newRow("9 items (item 0)") << 0 << 9 << static_cast(TorrentFileInfo::High); + QTest::newRow("9 items (item 1)") << 1 << 9 << static_cast(TorrentFileInfo::High); + QTest::newRow("9 items (item 2)") << 2 << 9 << static_cast(TorrentFileInfo::High); + QTest::newRow("9 items (item 3)") << 3 << 9 << static_cast(TorrentFileInfo::Normal); + QTest::newRow("9 items (item 4)") << 4 << 9 << static_cast(TorrentFileInfo::Normal); + QTest::newRow("9 items (item 5)") << 5 << 9 << static_cast(TorrentFileInfo::Normal); + QTest::newRow("9 items (item 6)") << 6 << 9 << static_cast(TorrentFileInfo::Low); + QTest::newRow("9 items (item 7)") << 7 << 9 << static_cast(TorrentFileInfo::Low); + QTest::newRow("9 items (item 8)") << 8 << 9 << static_cast(TorrentFileInfo::Low); } void tst_TorrentBaseContext::computePriority() diff --git a/test/core/updatechecker/tst_updatechecker.cpp b/test/core/updatechecker/tst_updatechecker.cpp index e083d782..c492a350 100644 --- a/test/core/updatechecker/tst_updatechecker.cpp +++ b/test/core/updatechecker/tst_updatechecker.cpp @@ -38,23 +38,22 @@ void tst_UpdateChecker::cleanTag_data() QTest::addColumn("expected"); QTest::addColumn("input"); - QTest::newRow("null") << QString() << QString(); QTest::newRow("null") << "" << QString(); - QTest::newRow("null") << "" << ""; + QTest::newRow("empty") << "" << ""; QTest::newRow("equal") << "2.5.0" << "2.5.0"; - QTest::newRow("equal") << "2.5.0" << " 2.5.0 "; - - QTest::newRow("dot") << "2.5.0" << "...2.5.0..."; - QTest::newRow("dot") << "2.5.0" << "...2., ,5..Aaa..0"; - QTest::newRow("dot") << "2.5.0.1254" << "version 2.5.0 build 1254"; - - QTest::newRow("prefix") << "2.5.0" << "v2.5.0"; - QTest::newRow("prefix") << "2.5.0" << "v_2.5.0"; - QTest::newRow("prefix") << "2.5.0" << "v.2.5.0"; - QTest::newRow("prefix") << "2.5.0" << "v 2.5.0"; - QTest::newRow("prefix") << "2.5.0" << "version 2.5.0"; - QTest::newRow("prefix") << "2.5.0" << " version 2.5.0 bis "; + QTest::newRow("equal untrimmed") << "2.5.0" << " 2.5.0 "; + + QTest::newRow("dot before") << "2.5.0" << "...2.5.0..."; + QTest::newRow("dot inside") << "2.5.0" << "...2., ,5..Aaa..0"; + QTest::newRow("dot verbose") << "2.5.0.1254" << "version 2.5.0 build 1254"; + + QTest::newRow("prefix v") << "2.5.0" << "v2.5.0"; + QTest::newRow("prefix v_") << "2.5.0" << "v_2.5.0"; + QTest::newRow("prefix v.") << "2.5.0" << "v.2.5.0"; + QTest::newRow("prefix v+space") << "2.5.0" << "v 2.5.0"; + QTest::newRow("prefix version") << "2.5.0" << "version 2.5.0"; + QTest::newRow("prefix untrimmed") << "2.5.0" << " version 2.5.0 bis "; } void tst_UpdateChecker::cleanTag() @@ -73,37 +72,36 @@ void tst_UpdateChecker::isVersionGreaterThan_data() QTest::addColumn("s1"); QTest::addColumn("s2"); - QTest::newRow("null") << false << QString() << QString(); QTest::newRow("null") << false << "" << QString(); - QTest::newRow("null") << false << "" << ""; + QTest::newRow("empty") << false << "" << ""; QTest::newRow("equal") << false << "2.5.0" << "2.5.0"; QTest::newRow("number") << false << "2.5.0" << "2.5.1"; - QTest::newRow("number") << true << "2.5.1" << "2.5.0"; + QTest::newRow("number inversed") << true << "2.5.1" << "2.5.0"; // Sort versions with different length: // "2" < "2.0" < "2.4" <"2.4.0" - QTest::newRow("different length") << true << "2.0" << "2"; - QTest::newRow("different length") << true << "2.4" << "2.0"; - QTest::newRow("different length") << true << "2.4.0" << "2.4"; - QTest::newRow("different length") << true << "2.5" << "2.4.9"; + QTest::newRow("different length 1 vs 0") << true << "2.0" << "2"; + QTest::newRow("different length 1 vs 1") << true << "2.4" << "2.0"; + QTest::newRow("different length 3 vs 2") << true << "2.4.0" << "2.4"; + QTest::newRow("different length 2 vs 3") << true << "2.5" << "2.4.9"; // Bugfix QCollator when no ICU is available QTest::newRow("QCollator 100 > 99") << true << "2.5.100" << "2.5.99"; QTest::newRow("QCollator 99 > 10 ") << true << "2.5.99" << "2.5.10"; QTest::newRow("QCollator 099 > 10 ") << true << "2.5.099" << "2.5.10"; - QTest::newRow("prefix") << true << "2.5.1" << "v2.5.0"; - QTest::newRow("prefix") << true << "2.5.1" << "v_2.5.0"; - QTest::newRow("prefix") << true << "2.5.1" << "v.2.5.0"; - QTest::newRow("prefix") << true << "2.5.1" << "v 2.5.0"; - QTest::newRow("prefix") << true << "2.5.1" << "version 2.5.0"; - - QTest::newRow("prefix") << true << "v2.5.1" << "2.5.0"; - QTest::newRow("prefix") << true << "v_2.5.1" << "2.5.0"; - QTest::newRow("prefix") << true << "v.2.5.1" << "2.5.0"; - QTest::newRow("prefix") << true << "v 2.5.1" << "2.5.0"; - QTest::newRow("prefix") << true << "version 2.5.1" << "2.5.0"; + QTest::newRow("prefix v") << true << "2.5.1" << "v2.5.0"; + QTest::newRow("prefix v_") << true << "2.5.1" << "v_2.5.0"; + QTest::newRow("prefix v.") << true << "2.5.1" << "v.2.5.0"; + QTest::newRow("prefix v+space") << true << "2.5.1" << "v 2.5.0"; + QTest::newRow("prefix version") << true << "2.5.1" << "version 2.5.0"; + + QTest::newRow("prefix 2 v") << true << "v2.5.1" << "2.5.0"; + QTest::newRow("prefix 2 v_") << true << "v_2.5.1" << "2.5.0"; + QTest::newRow("prefix 2 v.") << true << "v.2.5.1" << "2.5.0"; + QTest::newRow("prefix 2 v+space") << true << "v 2.5.1" << "2.5.0"; + QTest::newRow("prefix 2 version") << true << "version 2.5.1" << "2.5.0"; } void tst_UpdateChecker::isVersionGreaterThan() diff --git a/test/manual-test/webengine/jquery.min.js b/test/manual-test/webengine/jquery.min.js index a0fb8836..7f37b5d9 100644 --- a/test/manual-test/webengine/jquery.min.js +++ b/test/manual-test/webengine/jquery.min.js @@ -1,19 +1,2 @@ -/* - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.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(e,n){ce.fn[n]=function(e,t){return 0("input"); QTest::addColumn("expected"); - QTest::newRow("simple") << "" << ""; - QTest::newRow("simple") << "Hello World" << "Hello World"; + QTest::newRow("empty") << "" << ""; + QTest::newRow("trivial") << "Hello World" << "Hello World"; - QTest::newRow("multiple line RN") << "\r\nHello World" << ""; - QTest::newRow("multiple line RN") << "Hello\r\n World" << "Hello"; - QTest::newRow("multiple line RN") << "Hello World\r\n" << "Hello World"; + QTest::newRow("multiple line RN 1") << "\r\nHello World" << ""; + QTest::newRow("multiple line RN 2") << "Hello\r\n World" << "Hello"; + QTest::newRow("multiple line RN 3") << "Hello World\r\n" << "Hello World"; - QTest::newRow("multiple line R") << "\rHello World" << ""; - QTest::newRow("multiple line R") << "Hello\r World" << "Hello"; - QTest::newRow("multiple line R") << "Hello World\r" << "Hello World"; + QTest::newRow("multiple line R 1") << "\rHello World" << ""; + QTest::newRow("multiple line R 2") << "Hello\r World" << "Hello"; + QTest::newRow("multiple line R 3") << "Hello World\r" << "Hello World"; - QTest::newRow("multiple line N") << "\nHello World" << ""; - QTest::newRow("multiple line N") << "Hello\n World" << "Hello"; - QTest::newRow("multiple line N") << "Hello World\n" << "Hello World"; + QTest::newRow("multiple line N 1") << "\nHello World" << ""; + QTest::newRow("multiple line N 2") << "Hello\n World" << "Hello"; + QTest::newRow("multiple line N 3") << "Hello World\n" << "Hello World"; } void tst_TextEdit::fragmentToPaste() diff --git a/version b/version index 4d54dadd..c4e41f94 100644 --- a/version +++ b/version @@ -1 +1 @@ -4.0.2 +4.0.3 diff --git a/web-extension/extension/src/base/options.html b/web-extension/extension/src/base/options.html index ac01c7db..7eb5dcff 100644 --- a/web-extension/extension/src/base/options.html +++ b/web-extension/extension/src/base/options.html @@ -54,7 +54,7 @@

Go to link below to install the application for your operating system.

- Visit ArrowDL website + Visit ArrowDL website