From 96c86b8d8b0ebe021e17f46f22d29a2df99626c6 Mon Sep 17 00:00:00 2001 From: Thomas Schmid Date: Sat, 8 Aug 2020 14:44:04 +0200 Subject: [PATCH] Switch to bootstrap 5 (#324) * Pin bootstrap version to at least 5.0.0-alpha1 * Migrate from bootstrap 4 to bootstrap 5 * Update Dependencies * Switch to ES6 Imports * Remove last jquery pieces * Fix template path * Make unit testing ES6 import compatible * Gulp mjs hack, older Thunderbird version do not load mjs from addon urls * Fix linter errors --- .eslintrc.json | 32 +- .vscode/tasks.json | 4 +- BUILD.md | 2 +- CONTRIBUTORS.md | 1 - LICENSING_INFO.md | 1 - gulp/gulpfile.app.js | 73 +- gulp/gulpfile.common.js | 68 +- gulp/gulpfile.wx.js | 184 +- package.json | 4 +- src/app/app.html | 7 - src/app/app.js | 2 - src/app/index.js | 6 +- src/app/libs/managesieve.ui/accounts.html | 1 - .../accounts/SieveAccountCreateUI.js | 16 +- .../accounts/account.dialog.create.tpl | 8 +- .../accounts/account.settings.tpl | 34 +- .../managesieve.ui/importer/SieveImportUI.js | 18 +- .../importer/account.import.item.tpl | 4 +- .../settings/ui/SieveCredentialSettingsUI.js | 58 +- .../settings/ui/SieveServerSettingsUI.js | 49 +- .../settings/ui/settings.credentials.tpl | 194 +- .../settings/ui/settings.server.tpl | 103 +- .../libs/managesieve.ui/tabs/SieveTabsUI.js | 15 +- src/common/libSieve/SieveGui.html | 240 +- src/common/libSieve/SieveGui.js | 342 - src/common/libSieve/SieveGui.mjs | 337 + .../extensions/RFC5228/logic/SieveActions.js | 77 - .../extensions/RFC5228/logic/SieveActions.mjs | 68 + .../RFC5228/logic/SieveAddressParts.js | 54 - .../RFC5228/logic/SieveAddressParts.mjs | 45 + .../extensions/RFC5228/logic/SieveBlocks.js | 205 - .../extensions/RFC5228/logic/SieveBlocks.mjs | 197 + .../RFC5228/logic/SieveComparators.js | 103 - .../RFC5228/logic/SieveComparators.mjs | 96 + .../RFC5228/logic/SieveConditions.js | 365 - .../RFC5228/logic/SieveConditions.mjs | 353 + .../extensions/RFC5228/logic/SieveImports.js | 148 - .../extensions/RFC5228/logic/SieveImports.mjs | 136 + .../RFC5228/logic/SieveMatchTypes.js | 55 - .../RFC5228/logic/SieveMatchTypes.mjs | 46 + .../extensions/RFC5228/logic/SieveNumbers.js | 145 - .../extensions/RFC5228/logic/SieveNumbers.mjs | 136 + .../RFC5228/logic/SieveOperators.js | 236 - .../RFC5228/logic/SieveOperators.mjs | 224 + .../extensions/RFC5228/logic/SieveStrings.js | 660 -- .../extensions/RFC5228/logic/SieveStrings.mjs | 651 ++ .../extensions/RFC5228/logic/SieveTests.js | 407 - .../extensions/RFC5228/logic/SieveTests.mjs | 393 + .../RFC5228/logic/SieveWhiteSpaces.js | 351 - .../RFC5228/logic/SieveWhiteSpaces.mjs | 342 + .../RFC5228/templates/SieveAddressTestUI.html | 10 +- .../templates/SieveAllOfAnyOfOperator.html | 14 +- .../RFC5228/templates/SieveBooleanTest.html | 14 +- .../SieveComparatorAsciiCasemap.html | 6 +- .../SieveComparatorAsciiNumeric.html | 6 +- .../templates/SieveComparatorOctet.html | 6 +- .../templates/SieveDiscardActionUI.html | 2 +- .../templates/SieveEnvelopeTestUI.html | 10 +- .../RFC5228/templates/SieveExistsTestUI.html | 2 +- .../templates/SieveFileIntoActionUI.html | 4 +- .../RFC5228/templates/SieveHeaderTestUI.html | 8 +- .../templates/SieveRedirectActionUI.html | 4 +- .../RFC5228/templates/SieveSizeTestUI.html | 16 +- .../RFC5228/tests/SieveMatchTypeTest.js | 61 - .../RFC5228/tests/SieveMatchTypeTest.mjs | 55 + .../RFC5228/tests/SieveRFC5228AtomsTest.js | 68 - .../RFC5228/tests/SieveRFC5228AtomsTest.mjs | 61 + .../RFC5228/tests/SieveRFC5228ScriptTest.js | 288 - .../RFC5228/tests/SieveRFC5228ScriptTest.mjs | 282 + .../RFC5228/tests/SieveRFC5228SnippetTest.js | 35 - .../RFC5228/tests/SieveRFC5228SnippetTest.mjs | 29 + .../RFC5228/widgets/SieveActionsUI.js | 238 - .../RFC5228/widgets/SieveActionsUI.mjs | 230 + .../RFC5228/widgets/SieveAddressPartUI.js | 130 - .../RFC5228/widgets/SieveAddressPartUI.mjs | 123 + .../RFC5228/widgets/SieveBlocksUI.js | 103 - .../RFC5228/widgets/SieveBlocksUI.mjs | 97 + .../RFC5228/widgets/SieveComparatorsUI.js | 132 - .../RFC5228/widgets/SieveComparatorsUI.mjs | 126 + .../RFC5228/widgets/SieveConditionsUI.js | 189 - .../RFC5228/widgets/SieveConditionsUI.mjs | 182 + .../RFC5228/widgets/SieveMatchTypesUI.js | 129 - .../RFC5228/widgets/SieveMatchTypesUI.mjs | 124 + .../RFC5228/widgets/SieveOperatorsUI.js | 209 - .../RFC5228/widgets/SieveOperatorsUI.mjs | 207 + .../RFC5228/widgets/SieveTestsUI.js | 615 -- .../RFC5228/widgets/SieveTestsUI.mjs | 614 ++ .../extensions/body/logic/SieveBody.js | 109 - .../extensions/body/logic/SieveBody.mjs | 102 + .../body/templates/SieveBodyTestUI.html | 4 +- .../templates/SieveBodyTransformContent.html | 6 +- .../body/templates/SieveBodyTransformRaw.html | 6 +- .../templates/SieveBodyTransformText.html | 6 +- .../extensions/body/tests/SieveBodyTest.js | 81 - .../extensions/body/tests/SieveBodyTest.mjs | 73 + .../extensions/body/widgets/SieveBodyUI.js | 288 - .../extensions/body/widgets/SieveBodyUI.mjs | 287 + .../extensions/convert/logic/SieveConvert.js | 69 - .../extensions/convert/logic/SieveConvert.mjs | 60 + .../convert/templates/SieveConvertUI.html | 6 +- .../convert/tests/SieveConvertTest.js | 135 - .../convert/tests/SieveConvertTest.mjs | 130 + .../convert/widgets/SieveConvertUI.js | 215 - .../convert/widgets/SieveConvertUI.mjs | 212 + .../extensions/copy/logic/SieveCopy.js | 80 - .../extensions/copy/logic/SieveCopy.mjs | 71 + .../copy/templates/SieveCopyTag.html | 11 +- .../extensions/copy/tests/SieveCopyTest.js | 44 - .../extensions/copy/tests/SieveCopyTest.mjs | 39 + .../extensions/copy/widgets/SieveCopyUI.js | 103 - .../extensions/copy/widgets/SieveCopyUI.mjs | 94 + .../extensions/date/logic/SieveDate.js | 215 - .../extensions/date/logic/SieveDate.mjs | 207 + .../templates/SieveCurrentDateTestUI.html | 2 +- .../date/templates/SieveDateTestUI.html | 2 +- .../date/templates/SieveZoneCustom.html | 11 +- .../date/templates/SieveZoneOriginal.html | 10 +- .../extensions/date/tests/SieveDateTest.js | 120 - .../extensions/date/tests/SieveDateTest.mjs | 114 + .../extensions/date/widgets/SieveDateUI.js | 412 - .../extensions/date/widgets/SieveDateUI.mjs | 413 + .../duplicate/logic/SieveDuplicate.js | 162 - .../duplicate/logic/SieveDuplicate.mjs | 153 + .../templates/SieveDuplicateTestUI.html | 47 +- .../templates/SieveUniqueDefault.html | 8 +- .../templates/SieveUniqueHeader.html | 8 +- .../duplicate/templates/SieveUniqueId.html | 8 +- .../duplicate/tests/SieveDuplicateTest.js | 159 - .../duplicate/tests/SieveDuplicateTest.mjs | 153 + .../duplicate/widgets/SieveDuplicateUI.js | 364 - .../duplicate/widgets/SieveDuplicateUI.mjs | 358 + .../editheader/logic/SieveEditheader.js | 136 - .../editheader/logic/SieveEditheader.mjs | 128 + .../templates/SieveAddHeaderActionUI.html | 14 +- .../templates/SieveDeleteHeaderActionUI.html | 36 +- .../editheader/tests/SieveEditheaderTest.js | 95 - .../editheader/tests/SieveEditheaderTest.mjs | 91 + .../editheader/widgets/SieveEditheaderUI.js | 406 - .../editheader/widgets/SieveEditheaderUI.mjs | 405 + .../environment/logic/SieveEnvironment.js | 60 - .../environment/logic/SieveEnvironment.mjs | 51 + .../templates/SieveEnvironmentUI.html | 8 +- .../environment/tests/SieveEnvironmentTest.js | 49 - .../tests/SieveEnvironmentTest.mjs | 44 + .../environment/widgets/SieveEnvironmentUI.js | 137 - .../widgets/SieveEnvironmentUI.mjs | 136 + .../imapflags/logic/SieveImapFlags.js | 231 - .../imapflags/logic/SieveImapFlags.mjs | 222 + .../templates/SieveAddFlagActionUI.html | 6 +- .../imapflags/templates/SieveFlagsTag.html | 10 +- .../templates/SieveHasFlagTestUI.html | 4 +- .../templates/SieveRemoveFlagActionUI.html | 6 +- .../templates/SieveSetFlagActionUI.html | 6 +- .../imapflags/tests/SieveImapFlagsTest.js | 219 - .../imapflags/tests/SieveImapFlagsTest.mjs | 213 + .../imapflags/widgets/SieveImapFlagsUI.js | 312 - .../imapflags/widgets/SieveImapFlagsUI.mjs | 305 + .../extensions/include/logic/SieveInclude.js | 145 - .../extensions/include/logic/SieveInclude.mjs | 136 + .../include/template/SieveGlobalActionUI.html | 2 +- .../template/SieveIncludeActionUI.html | 40 +- .../include/tests/SieveIncludeTest.js | 114 - .../include/tests/SieveIncludeTest.mjs | 109 + .../include/widget/SieveIncludeUI.js | 266 - .../include/widget/SieveIncludeUI.mjs | 258 + .../extensions/mailbox/logic/SieveMailbox.js | 220 - .../extensions/mailbox/logic/SieveMailbox.mjs | 211 + .../mailbox/templates/SieveCreateTag.html | 6 +- .../templates/SieveMailboxExistsTest.html | 2 +- .../templates/SieveMetaDataExistsTest.html | 2 +- .../mailbox/templates/SieveMetaDataTest.html | 2 +- .../SieveServerMetaDataExistsTest.html | 2 +- .../templates/SieveServerMetaDataTest.html | 2 +- .../mailbox/tests/SieveMailboxTest.js | 106 - .../mailbox/tests/SieveMailboxTest.mjs | 100 + .../mailbox/widgets/SieveMailboxUI.js | 540 -- .../mailbox/widgets/SieveMailboxUI.mjs | 538 ++ .../extensions/mime/logic/SieveMime.js | 142 - .../extensions/mime/logic/SieveMime.mjs | 135 + .../extensions/notify/logic/SieveNotify.js | 236 - .../extensions/notify/logic/SieveNotify.mjs | 227 + .../notify/templates/SieveEncodeUrlUI.html | 10 +- .../notify/templates/SieveNotifyActionUI.html | 120 +- .../SieveValidNotifyMethodTestUI.html | 2 +- .../notify/tests/SieveNotifyTest.js | 173 - .../notify/tests/SieveNotifyTest.mjs | 167 + .../notify/widgets/SieveNotifyUI.js | 409 - .../notify/widgets/SieveNotifyUI.mjs | 404 + .../extensions/pipe/logic/SievePipe.js | 232 - .../extensions/pipe/logic/SievePipe.mjs | 222 + .../pipe/templates/SieveExecuteUI.html | 50 +- .../pipe/templates/SieveFilterUI.html | 12 +- .../pipe/templates/SievePipeUI.html | 41 +- .../extensions/pipe/tests/SievePipeTest.js | 134 - .../extensions/pipe/tests/SievePipeTest.mjs | 129 + .../extensions/pipe/widgets/SievePipeUI.js | 505 -- .../extensions/pipe/widgets/SievePipeUI.mjs | 497 ++ ...pression.js => SieveRegularExpression.mjs} | 23 +- .../extensions/regex/tests/SieveRegExTest.js | 51 - .../extensions/regex/tests/SieveRegExTest.mjs | 46 + .../regex/widgets/SieveRegularExpressionUI.js | 52 - .../widgets/SieveRegularExpressionUI.mjs | 43 + .../extensions/reject/logic/SieveReject.js | 63 - .../extensions/reject/logic/SieveReject.mjs | 54 + .../SieveExtendedRejectActionUI.html | 2 +- .../reject/templates/SieveRejectActionUI.html | 2 +- .../reject/tests/SieveRejectTest.js | 73 - .../reject/tests/SieveRejectTest.mjs | 67 + .../reject/widgets/SieveRejectUI.js | 98 - .../reject/widgets/SieveRejectUI.mjs | 90 + .../relational/logic/SieveRelational.js | 134 - .../relational/logic/SieveRelational.mjs | 126 + .../templates/SieveMatchTypeCountUI.html | 4 +- .../templates/SieveMatchTypeValueUI.html | 4 +- .../relational/tests/SieveRelationalTest.js | 141 - .../relational/tests/SieveRelationalTest.mjs | 135 + .../relational/widgets/SieveRelationalUI.js | 120 - .../relational/widgets/SieveRelationalUI.mjs | 111 + .../spamtest/logic/SieveSpamtest.js | 113 - .../spamtest/logic/SieveSpamtest.mjs | 105 + .../templates/SieveSpamtestPlusValue.html | 20 +- .../spamtest/templates/SieveSpamtestUI.html | 2 +- .../templates/SieveSpamtestValue.html | 2 +- .../spamtest/templates/SieveVirustestUI.html | 2 +- .../spamtest/tests/SpamtestTests.js | 160 - .../spamtest/tests/SpamtestTests.mjs | 154 + .../spamtest/widgets/SieveSpamtestUI.js | 303 - .../spamtest/widgets/SieveSpamtestUI.mjs | 297 + .../subaddress/logic/SieveSubaddress.js | 49 - .../subaddress/logic/SieveSubaddress.mjs | 39 + .../subaddress/tests/SieveSubaddressTest.js | 56 - .../subaddress/tests/SieveSubaddressTest.mjs | 50 + .../subaddress/widgets/SieveSubaddressUI.js | 83 - .../subaddress/widgets/SieveSubaddressUI.mjs | 74 + .../logic/SieveVacationSeconds.js | 49 - .../logic/SieveVacationSeconds.mjs | 39 + .../SieveVacationIntervalSecondsUI.html | 13 +- .../tests/SieveVacationSecondsTest.js | 51 - .../tests/SieveVacationSecondsTest.mjs | 45 + .../widgets/SieveVacationSecondsUI.js | 91 - .../widgets/SieveVacationSecondsUI.mjs | 82 + .../vacation/logic/SieveVacation.js | 167 - .../vacation/logic/SieveVacation.mjs | 158 + .../template/SieveVacationIntervalDaysUI.html | 12 +- .../SieveVacationIntervalDefaultUI.html | 6 +- .../vacation/template/SieveVacationUI.html | 38 +- .../vacation/tests/SieveVacationTest.js | 336 - .../vacation/tests/SieveVacationTest.mjs | 331 + .../vacation/widgets/SieveVacationUI.js | 445 - .../vacation/widgets/SieveVacationUI.mjs | 442 + .../variables/logic/SieveVariables.js | 206 - .../variables/logic/SieveVariables.mjs | 197 + .../variables/templates/SieveCaseFirstUI.html | 20 +- .../variables/templates/SieveCaseUI.html | 20 +- .../variables/templates/SieveLengthUI.html | 8 +- .../templates/SieveQuotewildcardUI.html | 8 +- .../variables/templates/SieveSetActionUI.html | 9 +- .../templates/SieveStringTestUI.html | 6 +- .../variables/tests/SieveVariablesTest.js | 288 - .../variables/tests/SieveVariablesTest.mjs | 282 + .../variables/widgets/SieveVariablesUI.js | 526 -- .../variables/widgets/SieveVariablesUI.mjs | 524 ++ src/common/libSieve/i18n/en-US.json | 27 +- src/common/libSieve/templates/debug.html | 184 +- src/common/libSieve/tests/ScriptValidator.mjs | 205 + src/common/libSieve/tests/SieveDovecotTest.js | 317 - .../libSieve/tests/SieveDovecotTest.mjs | 316 + .../libSieve/tests/SieveFastMailTest.js | 181 - .../libSieve/tests/SieveFastMailTest.mjs | 177 + src/common/libSieve/tests/SieveTty1Test.js | 207 - src/common/libSieve/tests/SieveTty1Test.mjs | 203 + src/common/libSieve/toolkit/SieveDesigner.js | 138 - src/common/libSieve/toolkit/SieveDesigner.mjs | 133 + src/common/libSieve/toolkit/SieveLexer.js | 301 - src/common/libSieve/toolkit/SieveLexer.mjs | 295 + src/common/libSieve/toolkit/SieveParser.js | 333 - src/common/libSieve/toolkit/SieveParser.mjs | 329 + src/common/libSieve/toolkit/SieveScriptDOM.js | 327 - .../libSieve/toolkit/SieveScriptDOM.mjs | 320 + .../libSieve/toolkit/events/DataTransfer.js | 166 - .../libSieve/toolkit/events/DataTransfer.mjs | 160 + .../libSieve/toolkit/events/DragHandler.js | 204 - .../libSieve/toolkit/events/DragHandler.mjs | 204 + .../libSieve/toolkit/events/DropHandler.js | 1061 --- .../libSieve/toolkit/events/DropHandler.mjs | 1057 +++ .../toolkit/logic/AbstractElements.js | 334 - .../toolkit/logic/AbstractElements.mjs | 331 + .../libSieve/toolkit/logic/GenericAtoms.js | 1465 --- .../libSieve/toolkit/logic/GenericAtoms.mjs | 1461 +++ .../toolkit/logic/GenericCapabilities.js | 208 - .../toolkit/logic/GenericCapabilities.mjs | 203 + .../libSieve/toolkit/logic/GenericElements.js | 426 - .../toolkit/logic/GenericElements.mjs | 424 + .../templates/SieveDropDownWidget.html | 7 +- .../toolkit/templates/SieveNumericWidget.html | 39 +- .../templates/SieveStringListWidget.html | 17 +- .../toolkit/templates/SieveStringWidget.html | 10 +- .../libSieve/toolkit/utils/SieveI18n.js | 301 +- .../libSieve/toolkit/utils/SieveLogger.js | 336 +- .../libSieve/toolkit/utils/SieveTemplate.js | 178 +- src/common/libSieve/toolkit/widgets/Boxes.js | 633 -- src/common/libSieve/toolkit/widgets/Boxes.mjs | 637 ++ .../libSieve/toolkit/widgets/Widgets.js | 1031 --- .../libSieve/toolkit/widgets/Widgets.mjs | 1023 +++ .../managesieve.ui/accounts/SieveAccountUI.js | 34 +- .../accounts/SieveCapabilities.js | 23 +- .../managesieve.ui/dialogs/SieveDialogUI.js | 33 +- .../dialogs/dialog.account.authorization.tpl | 6 +- .../dialogs/dialog.account.password.tpl | 14 +- src/common/managesieve.ui/editor.html | 1 - .../managesieve.ui/editor/SieveEditor.js | 64 +- .../editor/text/SieveTextEditor.js | 18 +- .../editor/text/editor.plaintext.tpl | 12 +- .../text/editor.settings.indentation.tpl | 27 +- .../editor/text/editor.settings.syntax.tpl | 7 +- src/common/managesieve.ui/i18n/en-US.json | 4 +- .../settings/ui/SieveDebugSettingsUI.js | 41 +- .../settings/ui/settings.debug.tpl | 134 +- .../settings/ui/settings.dialog.tpl | 20 - src/wx/libs/managesieve.ui/accounts.html | 1 - tests/index.js | 3 +- tests/js/browser/BrowserTestReport.js | 2 - tests/js/browser/BrowserTestSuite.js | 19 +- tests/js/browser/SandboxedTestFixture.js | 142 - tests/js/browser/sandbox/Sandbox.mjs | 90 + tests/js/browser/sandbox/sandbox.html | 10 + tests/js/common/AbstractSandboxedFixture.js | 158 - tests/js/common/AbstractTestReport.js | 2 - tests/js/common/AbstractTestSuite.js | 2 - .../sandbox/AbstractSandboxedFixture.mjs | 257 + tests/js/exporter/JUnitExporter.js | 2 - tests/js/node/NodeTestReport.js | 26 +- tests/js/node/NodeTestSuite.js | 217 +- tests/js/node/SandboxedTestFixture.js | 50 - tests/js/node/sandbox/Sandbox.mjs | 81 + tests/tests/managesieve/ManageSieveTest.js | 2 - tests/tests/managesieve/Require.js | 2 - tests/tests/tests.html | 10 - tests/tests/tests.js | 220 +- tests/tests/validators/ScriptValidator.js | 204 - tools/Server/Server.js | 281 +- tools/Tests/Proxy.js | 42 - yarn.lock | 7864 ++++++++--------- 343 files changed, 29840 insertions(+), 30401 deletions(-) delete mode 100755 src/common/libSieve/SieveGui.js create mode 100644 src/common/libSieve/SieveGui.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveActions.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveActions.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveAddressParts.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveAddressParts.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveBlocks.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveBlocks.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveComparators.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveComparators.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveConditions.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveConditions.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveImports.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveImports.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveMatchTypes.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveMatchTypes.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveNumbers.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveNumbers.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveOperators.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveOperators.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveStrings.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveStrings.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveTests.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveTests.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveWhiteSpaces.js create mode 100644 src/common/libSieve/extensions/RFC5228/logic/SieveWhiteSpaces.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/tests/SieveMatchTypeTest.js create mode 100644 src/common/libSieve/extensions/RFC5228/tests/SieveMatchTypeTest.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/tests/SieveRFC5228AtomsTest.js create mode 100644 src/common/libSieve/extensions/RFC5228/tests/SieveRFC5228AtomsTest.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/tests/SieveRFC5228ScriptTest.js create mode 100644 src/common/libSieve/extensions/RFC5228/tests/SieveRFC5228ScriptTest.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/tests/SieveRFC5228SnippetTest.js create mode 100644 src/common/libSieve/extensions/RFC5228/tests/SieveRFC5228SnippetTest.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveActionsUI.js create mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveActionsUI.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveAddressPartUI.js create mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveAddressPartUI.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveBlocksUI.js create mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveBlocksUI.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveComparatorsUI.js create mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveComparatorsUI.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveConditionsUI.js create mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveConditionsUI.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveMatchTypesUI.js create mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveMatchTypesUI.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveOperatorsUI.js create mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveOperatorsUI.mjs delete mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveTestsUI.js create mode 100644 src/common/libSieve/extensions/RFC5228/widgets/SieveTestsUI.mjs delete mode 100644 src/common/libSieve/extensions/body/logic/SieveBody.js create mode 100644 src/common/libSieve/extensions/body/logic/SieveBody.mjs delete mode 100644 src/common/libSieve/extensions/body/tests/SieveBodyTest.js create mode 100644 src/common/libSieve/extensions/body/tests/SieveBodyTest.mjs delete mode 100644 src/common/libSieve/extensions/body/widgets/SieveBodyUI.js create mode 100644 src/common/libSieve/extensions/body/widgets/SieveBodyUI.mjs delete mode 100644 src/common/libSieve/extensions/convert/logic/SieveConvert.js create mode 100644 src/common/libSieve/extensions/convert/logic/SieveConvert.mjs delete mode 100644 src/common/libSieve/extensions/convert/tests/SieveConvertTest.js create mode 100644 src/common/libSieve/extensions/convert/tests/SieveConvertTest.mjs delete mode 100644 src/common/libSieve/extensions/convert/widgets/SieveConvertUI.js create mode 100644 src/common/libSieve/extensions/convert/widgets/SieveConvertUI.mjs delete mode 100644 src/common/libSieve/extensions/copy/logic/SieveCopy.js create mode 100644 src/common/libSieve/extensions/copy/logic/SieveCopy.mjs delete mode 100644 src/common/libSieve/extensions/copy/tests/SieveCopyTest.js create mode 100644 src/common/libSieve/extensions/copy/tests/SieveCopyTest.mjs delete mode 100644 src/common/libSieve/extensions/copy/widgets/SieveCopyUI.js create mode 100644 src/common/libSieve/extensions/copy/widgets/SieveCopyUI.mjs delete mode 100644 src/common/libSieve/extensions/date/logic/SieveDate.js create mode 100644 src/common/libSieve/extensions/date/logic/SieveDate.mjs delete mode 100644 src/common/libSieve/extensions/date/tests/SieveDateTest.js create mode 100644 src/common/libSieve/extensions/date/tests/SieveDateTest.mjs delete mode 100644 src/common/libSieve/extensions/date/widgets/SieveDateUI.js create mode 100644 src/common/libSieve/extensions/date/widgets/SieveDateUI.mjs delete mode 100644 src/common/libSieve/extensions/duplicate/logic/SieveDuplicate.js create mode 100644 src/common/libSieve/extensions/duplicate/logic/SieveDuplicate.mjs delete mode 100644 src/common/libSieve/extensions/duplicate/tests/SieveDuplicateTest.js create mode 100644 src/common/libSieve/extensions/duplicate/tests/SieveDuplicateTest.mjs delete mode 100644 src/common/libSieve/extensions/duplicate/widgets/SieveDuplicateUI.js create mode 100644 src/common/libSieve/extensions/duplicate/widgets/SieveDuplicateUI.mjs delete mode 100644 src/common/libSieve/extensions/editheader/logic/SieveEditheader.js create mode 100644 src/common/libSieve/extensions/editheader/logic/SieveEditheader.mjs delete mode 100644 src/common/libSieve/extensions/editheader/tests/SieveEditheaderTest.js create mode 100644 src/common/libSieve/extensions/editheader/tests/SieveEditheaderTest.mjs delete mode 100644 src/common/libSieve/extensions/editheader/widgets/SieveEditheaderUI.js create mode 100644 src/common/libSieve/extensions/editheader/widgets/SieveEditheaderUI.mjs delete mode 100644 src/common/libSieve/extensions/environment/logic/SieveEnvironment.js create mode 100644 src/common/libSieve/extensions/environment/logic/SieveEnvironment.mjs delete mode 100644 src/common/libSieve/extensions/environment/tests/SieveEnvironmentTest.js create mode 100644 src/common/libSieve/extensions/environment/tests/SieveEnvironmentTest.mjs delete mode 100644 src/common/libSieve/extensions/environment/widgets/SieveEnvironmentUI.js create mode 100644 src/common/libSieve/extensions/environment/widgets/SieveEnvironmentUI.mjs delete mode 100644 src/common/libSieve/extensions/imapflags/logic/SieveImapFlags.js create mode 100644 src/common/libSieve/extensions/imapflags/logic/SieveImapFlags.mjs delete mode 100644 src/common/libSieve/extensions/imapflags/tests/SieveImapFlagsTest.js create mode 100644 src/common/libSieve/extensions/imapflags/tests/SieveImapFlagsTest.mjs delete mode 100644 src/common/libSieve/extensions/imapflags/widgets/SieveImapFlagsUI.js create mode 100644 src/common/libSieve/extensions/imapflags/widgets/SieveImapFlagsUI.mjs delete mode 100644 src/common/libSieve/extensions/include/logic/SieveInclude.js create mode 100644 src/common/libSieve/extensions/include/logic/SieveInclude.mjs delete mode 100644 src/common/libSieve/extensions/include/tests/SieveIncludeTest.js create mode 100644 src/common/libSieve/extensions/include/tests/SieveIncludeTest.mjs delete mode 100644 src/common/libSieve/extensions/include/widget/SieveIncludeUI.js create mode 100644 src/common/libSieve/extensions/include/widget/SieveIncludeUI.mjs delete mode 100644 src/common/libSieve/extensions/mailbox/logic/SieveMailbox.js create mode 100644 src/common/libSieve/extensions/mailbox/logic/SieveMailbox.mjs delete mode 100644 src/common/libSieve/extensions/mailbox/tests/SieveMailboxTest.js create mode 100644 src/common/libSieve/extensions/mailbox/tests/SieveMailboxTest.mjs delete mode 100644 src/common/libSieve/extensions/mailbox/widgets/SieveMailboxUI.js create mode 100644 src/common/libSieve/extensions/mailbox/widgets/SieveMailboxUI.mjs delete mode 100644 src/common/libSieve/extensions/mime/logic/SieveMime.js create mode 100644 src/common/libSieve/extensions/mime/logic/SieveMime.mjs delete mode 100644 src/common/libSieve/extensions/notify/logic/SieveNotify.js create mode 100644 src/common/libSieve/extensions/notify/logic/SieveNotify.mjs delete mode 100644 src/common/libSieve/extensions/notify/tests/SieveNotifyTest.js create mode 100644 src/common/libSieve/extensions/notify/tests/SieveNotifyTest.mjs delete mode 100644 src/common/libSieve/extensions/notify/widgets/SieveNotifyUI.js create mode 100644 src/common/libSieve/extensions/notify/widgets/SieveNotifyUI.mjs delete mode 100644 src/common/libSieve/extensions/pipe/logic/SievePipe.js create mode 100644 src/common/libSieve/extensions/pipe/logic/SievePipe.mjs delete mode 100644 src/common/libSieve/extensions/pipe/tests/SievePipeTest.js create mode 100644 src/common/libSieve/extensions/pipe/tests/SievePipeTest.mjs delete mode 100644 src/common/libSieve/extensions/pipe/widgets/SievePipeUI.js create mode 100644 src/common/libSieve/extensions/pipe/widgets/SievePipeUI.mjs rename src/common/libSieve/extensions/regex/logic/{SieveRegularExpression.js => SieveRegularExpression.mjs} (52%) delete mode 100644 src/common/libSieve/extensions/regex/tests/SieveRegExTest.js create mode 100644 src/common/libSieve/extensions/regex/tests/SieveRegExTest.mjs delete mode 100644 src/common/libSieve/extensions/regex/widgets/SieveRegularExpressionUI.js create mode 100644 src/common/libSieve/extensions/regex/widgets/SieveRegularExpressionUI.mjs delete mode 100644 src/common/libSieve/extensions/reject/logic/SieveReject.js create mode 100644 src/common/libSieve/extensions/reject/logic/SieveReject.mjs delete mode 100644 src/common/libSieve/extensions/reject/tests/SieveRejectTest.js create mode 100644 src/common/libSieve/extensions/reject/tests/SieveRejectTest.mjs delete mode 100644 src/common/libSieve/extensions/reject/widgets/SieveRejectUI.js create mode 100644 src/common/libSieve/extensions/reject/widgets/SieveRejectUI.mjs delete mode 100644 src/common/libSieve/extensions/relational/logic/SieveRelational.js create mode 100644 src/common/libSieve/extensions/relational/logic/SieveRelational.mjs delete mode 100644 src/common/libSieve/extensions/relational/tests/SieveRelationalTest.js create mode 100644 src/common/libSieve/extensions/relational/tests/SieveRelationalTest.mjs delete mode 100644 src/common/libSieve/extensions/relational/widgets/SieveRelationalUI.js create mode 100644 src/common/libSieve/extensions/relational/widgets/SieveRelationalUI.mjs delete mode 100644 src/common/libSieve/extensions/spamtest/logic/SieveSpamtest.js create mode 100644 src/common/libSieve/extensions/spamtest/logic/SieveSpamtest.mjs delete mode 100644 src/common/libSieve/extensions/spamtest/tests/SpamtestTests.js create mode 100644 src/common/libSieve/extensions/spamtest/tests/SpamtestTests.mjs delete mode 100644 src/common/libSieve/extensions/spamtest/widgets/SieveSpamtestUI.js create mode 100644 src/common/libSieve/extensions/spamtest/widgets/SieveSpamtestUI.mjs delete mode 100644 src/common/libSieve/extensions/subaddress/logic/SieveSubaddress.js create mode 100644 src/common/libSieve/extensions/subaddress/logic/SieveSubaddress.mjs delete mode 100644 src/common/libSieve/extensions/subaddress/tests/SieveSubaddressTest.js create mode 100644 src/common/libSieve/extensions/subaddress/tests/SieveSubaddressTest.mjs delete mode 100644 src/common/libSieve/extensions/subaddress/widgets/SieveSubaddressUI.js create mode 100644 src/common/libSieve/extensions/subaddress/widgets/SieveSubaddressUI.mjs delete mode 100644 src/common/libSieve/extensions/vacation-seconds/logic/SieveVacationSeconds.js create mode 100644 src/common/libSieve/extensions/vacation-seconds/logic/SieveVacationSeconds.mjs delete mode 100644 src/common/libSieve/extensions/vacation-seconds/tests/SieveVacationSecondsTest.js create mode 100644 src/common/libSieve/extensions/vacation-seconds/tests/SieveVacationSecondsTest.mjs delete mode 100644 src/common/libSieve/extensions/vacation-seconds/widgets/SieveVacationSecondsUI.js create mode 100644 src/common/libSieve/extensions/vacation-seconds/widgets/SieveVacationSecondsUI.mjs delete mode 100644 src/common/libSieve/extensions/vacation/logic/SieveVacation.js create mode 100644 src/common/libSieve/extensions/vacation/logic/SieveVacation.mjs delete mode 100644 src/common/libSieve/extensions/vacation/tests/SieveVacationTest.js create mode 100644 src/common/libSieve/extensions/vacation/tests/SieveVacationTest.mjs delete mode 100644 src/common/libSieve/extensions/vacation/widgets/SieveVacationUI.js create mode 100644 src/common/libSieve/extensions/vacation/widgets/SieveVacationUI.mjs delete mode 100644 src/common/libSieve/extensions/variables/logic/SieveVariables.js create mode 100644 src/common/libSieve/extensions/variables/logic/SieveVariables.mjs delete mode 100644 src/common/libSieve/extensions/variables/tests/SieveVariablesTest.js create mode 100644 src/common/libSieve/extensions/variables/tests/SieveVariablesTest.mjs delete mode 100644 src/common/libSieve/extensions/variables/widgets/SieveVariablesUI.js create mode 100644 src/common/libSieve/extensions/variables/widgets/SieveVariablesUI.mjs create mode 100644 src/common/libSieve/tests/ScriptValidator.mjs delete mode 100644 src/common/libSieve/tests/SieveDovecotTest.js create mode 100644 src/common/libSieve/tests/SieveDovecotTest.mjs delete mode 100644 src/common/libSieve/tests/SieveFastMailTest.js create mode 100644 src/common/libSieve/tests/SieveFastMailTest.mjs delete mode 100644 src/common/libSieve/tests/SieveTty1Test.js create mode 100644 src/common/libSieve/tests/SieveTty1Test.mjs delete mode 100755 src/common/libSieve/toolkit/SieveDesigner.js create mode 100644 src/common/libSieve/toolkit/SieveDesigner.mjs delete mode 100755 src/common/libSieve/toolkit/SieveLexer.js create mode 100644 src/common/libSieve/toolkit/SieveLexer.mjs delete mode 100755 src/common/libSieve/toolkit/SieveParser.js create mode 100644 src/common/libSieve/toolkit/SieveParser.mjs delete mode 100755 src/common/libSieve/toolkit/SieveScriptDOM.js create mode 100644 src/common/libSieve/toolkit/SieveScriptDOM.mjs delete mode 100755 src/common/libSieve/toolkit/events/DataTransfer.js create mode 100644 src/common/libSieve/toolkit/events/DataTransfer.mjs delete mode 100755 src/common/libSieve/toolkit/events/DragHandler.js create mode 100644 src/common/libSieve/toolkit/events/DragHandler.mjs delete mode 100755 src/common/libSieve/toolkit/events/DropHandler.js create mode 100644 src/common/libSieve/toolkit/events/DropHandler.mjs delete mode 100644 src/common/libSieve/toolkit/logic/AbstractElements.js create mode 100644 src/common/libSieve/toolkit/logic/AbstractElements.mjs delete mode 100644 src/common/libSieve/toolkit/logic/GenericAtoms.js create mode 100644 src/common/libSieve/toolkit/logic/GenericAtoms.mjs delete mode 100644 src/common/libSieve/toolkit/logic/GenericCapabilities.js create mode 100644 src/common/libSieve/toolkit/logic/GenericCapabilities.mjs delete mode 100644 src/common/libSieve/toolkit/logic/GenericElements.js create mode 100644 src/common/libSieve/toolkit/logic/GenericElements.mjs delete mode 100755 src/common/libSieve/toolkit/widgets/Boxes.js create mode 100644 src/common/libSieve/toolkit/widgets/Boxes.mjs delete mode 100755 src/common/libSieve/toolkit/widgets/Widgets.js create mode 100644 src/common/libSieve/toolkit/widgets/Widgets.mjs delete mode 100644 src/common/managesieve.ui/settings/ui/settings.dialog.tpl delete mode 100644 tests/js/browser/SandboxedTestFixture.js create mode 100644 tests/js/browser/sandbox/Sandbox.mjs create mode 100644 tests/js/browser/sandbox/sandbox.html delete mode 100644 tests/js/common/AbstractSandboxedFixture.js create mode 100644 tests/js/common/sandbox/AbstractSandboxedFixture.mjs delete mode 100644 tests/js/node/SandboxedTestFixture.js create mode 100644 tests/js/node/sandbox/Sandbox.mjs delete mode 100755 tests/tests/tests.html delete mode 100755 tests/tests/validators/ScriptValidator.js delete mode 100755 tools/Tests/Proxy.js diff --git a/.eslintrc.json b/.eslintrc.json index 4115294ea3..cb93943973 100755 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,6 @@ { "plugins": [ - "jsdoc", - "no-jquery" + "jsdoc" ], "extends": [ "eslint:recommended" @@ -13,11 +12,11 @@ "node": true }, "parserOptions": { - "ecmaVersion": 8, + "ecmaVersion": 11, "ecmaFeatures": { "jsx": false }, - "sourceType": "script" + "sourceType": "module" }, "rules": { "array-callback-return": "error", @@ -114,7 +113,7 @@ "no-this-before-super": "warn", "no-eq-null" : "warn", "no-dupe-class-members" :"error", - "no-undef": "warn", + "no-undef": "error", "no-unreachable": "error", "no-unused-vars": [ "warn", @@ -208,25 +207,6 @@ "jsdoc/require-hyphen-before-param-description": 0, "jsdoc/check-alignment": 1, - "jsdoc/check-examples": ["warn", {"paddedIndent": 4 }], - - "no-jquery/no-animate" : 2, - "no-jquery/no-animate-toggle" : 2, - "no-jquery/no-attr" : 1, - "no-jquery/no-class" : 1, - "no-jquery/no-class-state" : 1, - "no-jquery/no-contains" : 1, - "no-jquery/no-context-prop" : 1, - "no-jquery/no-css" : 2, - "no-jquery/no-fade" : 1, - "no-jquery/no-find" : 1, - "no-jquery/no-param" : 2, - "no-jquery/no-parent" : 2, - "no-jquery/no-parents" : 2, - "no-jquery/no-prop" : 1, - "no-jquery/no-ready" : 2, - "no-jquery/no-selector-prop" : 1, - "no-jquery/no-text" : 1, - "no-jquery/no-val" : 1 - } + "jsdoc/check-examples": ["warn", {"paddedIndent": 4 }] + } } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index d78f1f3ff2..9ec5366fbb 100755 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -17,8 +17,10 @@ }, "args": [ "./src/**/*.js", + "./src/**/*.mjs", "./src/**/*.jsm", - "./tests/**/*.js" + "./tests/**/*.js", + "./tests/**/*.mjs" ], "promptOnClose": false, "presentation": { diff --git a/BUILD.md b/BUILD.md index dddab5299b..7194cd9860 100755 --- a/BUILD.md +++ b/BUILD.md @@ -11,7 +11,7 @@ You find all app specific code in `src/app`, the WebExtension code is in `src/wx To get started clone the project for github. Then use either [yarn](https://yarnpkg.com/) or `npm install` to download the dependencies. -This will download gulp as well as jquery, codemirror, bootstrap, electron and everything else which is needed. +This will download gulp as well as codemirror, bootstrap, electron and everything else which is needed. As editor I suggest [Visual Studio Code](https://code.visualstudio.com/) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 4e043cda7a..8bc51a6421 100755 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -40,7 +40,6 @@ Knuth Posern, Tim Van Den Eynde, Marcel Lamm, Lucy Archer [SourceForge](http://sf.net), [github](https://www.github.com), [crowdin](https://crowdin.net), -[jQuery](https://www.jquery.com), [CodeMirror](http://www.codemirror.net), [ohloh](http://www.ohloh.net), [bootstrap](https://getbootstrap.com/), diff --git a/LICENSING_INFO.md b/LICENSING_INFO.md index 07f2c63a62..bd384a842d 100755 --- a/LICENSING_INFO.md +++ b/LICENSING_INFO.md @@ -26,7 +26,6 @@ welcome to modify the source code as you want to meet your needs. All of the third party source code is available under licenses which are both free and open source. * [CodeMirror](http://www.codemirror.net) is released under the [MIT license](http://codemirror.net/LICENSE) -* [JQuery](http://www.jquery.com) is released under the [MIT License](http://jquery.org/license/) * [Bootstrap](https://getbootstrap.com/) is released under the [MIT license](https://raw.githubusercontent.com/twbs/bootstrap/master/LICENSE) ## Icon diff --git a/gulp/gulpfile.app.js b/gulp/gulpfile.app.js index 52c815c1b1..a0692a5d01 100644 --- a/gulp/gulpfile.app.js +++ b/gulp/gulpfile.app.js @@ -56,6 +56,9 @@ const OUTPUT_DIR_APP_WIN32 = path.join(OUTPUT_DIR_APP, `sieve-${WIN_PLATFORM}-${ const OUTPUT_DIR_APP_LINUX = path.join(OUTPUT_DIR_APP, `sieve-${LINUX_PLATFORM}-${LINUX_ARCH}`); const OUTPUT_DIR_APP_MACOS = path.join(OUTPUT_DIR_APP, `sieve-${MAC_PLATFORM}-${MAC_ARCH}`); +const PERMISSIONS_EXECUTABLE = 0o100770; +const PERMISSIONS_NORMAL = 0o100660; + /** * Extracts a tar or tar.gz file to the given destination. * @@ -65,7 +68,6 @@ const OUTPUT_DIR_APP_MACOS = path.join(OUTPUT_DIR_APP, `sieve-${MAC_PLATFORM}-${ * the destination folder into which the tar should be extracted. */ async function untar(filename, destination) { - "use strict"; logger.debug(`Extracting ${filename} to ${destination}`); @@ -89,8 +91,6 @@ async function untar(filename, destination) { */ async function getElectronVersion(dir) { - "use strict"; - const versionFile = path.join(dir + '/version'); if (!existsSync(versionFile)) @@ -115,8 +115,6 @@ async function getElectronVersion(dir) { */ function packageDefinition() { - "use strict"; - const BASE_PATH = "."; return src([ @@ -131,27 +129,12 @@ function packageDefinition() { * a stream to be consumed by gulp */ function packageLicense() { - "use strict"; return src([ "./LICENSE.md" ]).pipe(dest(BUILD_DIR_APP)); } - -/** - * Copies the jquery sources into the build directory. - * - * @returns {Stream} - * a stream to be consumed by gulp - */ -function packageJQuery() { - "use strict"; - - return common.packageJQuery( - BUILD_DIR_APP + "/libs/jquery"); -} - /** * Copies the codemirror sources into the build directory. * @@ -159,8 +142,6 @@ function packageJQuery() { * a stream to be consumed by gulp */ function packageCodeMirror() { - "use strict"; - return common.packageCodeMirror( `${BUILD_DIR_APP}/libs/CodeMirror`); } @@ -172,7 +153,6 @@ function packageCodeMirror() { * a stream to be consumed by gulp **/ function packageBootstrap() { - "use strict"; return common.packageBootstrap( `${BUILD_DIR_APP}/libs/bootstrap`); @@ -185,10 +165,9 @@ function packageBootstrap() { * a stream to be consumed by gulp */ function packageSrc() { - "use strict"; - return src([ - BASE_DIR_APP + "/**" + BASE_DIR_APP + "/**", + `!${BASE_DIR_APP}/libs/libManageSieve/**` ]).pipe(dest(BUILD_DIR_APP)); } @@ -200,7 +179,6 @@ function packageSrc() { * a stream to be consumed by gulp */ function packageIcons() { - "use strict"; return src([ path.join(common.BASE_DIR_COMMON, "icons") + "/**" @@ -214,8 +192,13 @@ function packageIcons() { * a stream to be consumed by gulp */ function packageLibManageSieve() { - "use strict"; - return common.packageLibManageSieve(BUILD_DIR_APP_LIBS); + + const BASE_APP = path.join(BASE_DIR_APP, "libs", "libManageSieve"); + const BASE_COMMON = path.join(common.BASE_DIR_COMMON, "libManageSieve"); + + return common.src2(BASE_APP) + .pipe(common.src2(BASE_COMMON)) + .pipe(dest(path.join(BUILD_DIR_APP_LIBS, "libManageSieve"))); } @@ -226,20 +209,17 @@ function packageLibManageSieve() { * a stream to be consumed by gulp */ function packageLibSieve() { - "use strict"; return common.packageLibSieve(BUILD_DIR_APP_LIBS); } /** - * Copies the common managiesieve.ui files into the app's lib folder + * Copies the common managesieve.ui files into the app's lib folder * * @returns {Stream} * a stream to be consumed by gulp */ function packageManageSieveUi() { - "use strict"; - return common.packageManageSieveUi(BUILD_DIR_APP_LIBS); } @@ -253,7 +233,6 @@ function packageManageSieveUi() { * a stream to be consumed by gulp */ function packageKeytar() { - "use strict"; return src([ BASE_DIR_KEYTAR + "/**", @@ -290,7 +269,6 @@ function packageKeytar() { * the architecture for the prebuilt packages */ async function deployPrebuilt(electronDest, prebuiltDest, pkgName, platform, arch) { - "use strict"; logger.debug(`Packaging Prebuilt ${pkgName} for ${platform}-${arch}`); @@ -334,7 +312,6 @@ async function deployPrebuilt(electronDest, prebuiltDest, pkgName, platform, arc * Packages the Keytar prebuilt modules into the win32 build output */ async function packageKeytarWin32() { - "use strict"; await deployPrebuilt(OUTPUT_DIR_APP, KEYTAR_OUTPUT_DIR, KEYTAR_NAME, WIN_PLATFORM, WIN_ARCH); } @@ -342,7 +319,6 @@ async function packageKeytarWin32() { * Packages the Keytar prebuilt modules into the linux build output */ async function packageKeytarLinux() { - "use strict"; await deployPrebuilt(OUTPUT_DIR_APP, KEYTAR_OUTPUT_DIR, KEYTAR_NAME, LINUX_PLATFORM, LINUX_ARCH); } @@ -350,7 +326,6 @@ async function packageKeytarLinux() { * Packages the Keytar prebuilt modules into the macOS build output */ async function packageKeytarMacOS() { - "use strict"; await deployPrebuilt(OUTPUT_DIR_APP, KEYTAR_OUTPUT_DIR, KEYTAR_NAME, MAC_PLATFORM, MAC_ARCH); } @@ -358,7 +333,6 @@ async function packageKeytarMacOS() { * Packages the build directory and electron for windows. */ async function packageWin32() { - "use strict"; const options = { dir: BUILD_DIR_APP, @@ -380,7 +354,6 @@ async function packageWin32() { * Packages the build directory and electron for linux */ async function packageLinux() { - "use strict"; const options = { dir: BUILD_DIR_APP, @@ -402,7 +375,6 @@ async function packageLinux() { * Packages the build directory and electron for macOS */ async function packageMacOS() { - "use strict"; const options = { dir: BUILD_DIR_APP, @@ -427,7 +399,6 @@ async function packageMacOS() { */ // eslint-disable-next-line require-await async function updateVersion() { - "use strict"; // there is no need to do anything here. // Electron packager will to it for us. @@ -438,8 +409,6 @@ async function updateVersion() { */ function watchSrc() { - "use strict"; - watch( ['./src/**/*.js', './src/**/*.jsm', @@ -461,7 +430,6 @@ function watchSrc() { * Zip the windows electron app. */ async function zipWin32() { - "use strict"; const version = (await common.getPackageVersion()).join("."); @@ -475,7 +443,6 @@ async function zipWin32() { * Zip the linux electron app. */ async function zipLinux() { - "use strict"; const version = (await common.getPackageVersion()).join("."); @@ -484,8 +451,8 @@ async function zipLinux() { const options = { permissions: { - "sieve": 0o100770, - "*": 0o100660 + "sieve": PERMISSIONS_EXECUTABLE, + "*": PERMISSIONS_NORMAL } }; @@ -500,7 +467,6 @@ async function zipLinux() { * a stream to be consumed by gulp */ function packageAppImageDir() { - "use strict"; return src([ OUTPUT_DIR_APP_LINUX + "/**/*" @@ -514,7 +480,6 @@ function packageAppImageDir() { * a stream to be consumed by gulp */ function packageAppImageFiles() { - "use strict"; const appImageFiles = path.join(common.BASE_DIR_COMMON, "/appImage/"); @@ -527,7 +492,6 @@ function packageAppImageFiles() { * Creates a linux appImage Container */ async function packageAppImage() { - "use strict"; const latest = await https.fetch(APP_IMAGE_RELEASE_URL); @@ -562,7 +526,6 @@ async function packageAppImage() { * Zip the macOS electron app. */ async function zipMacOS() { - "use strict"; const version = (await common.getPackageVersion()).join("."); @@ -571,8 +534,8 @@ async function zipMacOS() { const options = { permissions: { - "sieve": 0o100770, - "*": 0o100660 + "sieve": PERMISSIONS_EXECUTABLE, + "*": PERMISSIONS_NORMAL } }; @@ -584,7 +547,6 @@ exports["watch"] = watchSrc; exports["updateVersion"] = updateVersion; exports["packageDefinition"] = packageDefinition; -exports["packageJQuery"] = packageJQuery; exports["packageCodeMirror"] = packageCodeMirror; exports["packageBootstrap"] = packageBootstrap; exports["packageLicense"] = packageLicense; @@ -623,7 +585,6 @@ exports['package'] = series( parallel( packageLicense, packageIcons, - packageJQuery, packageCodeMirror, packageBootstrap, packageLibManageSieve, diff --git a/gulp/gulpfile.common.js b/gulp/gulpfile.common.js index c6318a4e41..a989048bbc 100644 --- a/gulp/gulpfile.common.js +++ b/gulp/gulpfile.common.js @@ -21,13 +21,11 @@ const yazl = require('yazl'); const JSON_INDENTATION = 2; const BASE_DIR_BOOTSTRAP = "./node_modules/bootstrap/dist"; -const BASE_DIR_JQUERY = "./node_modules/jquery/dist"; const BASE_DIR_CODEMIRROR = "./node_modules/codemirror"; const BASE_DIR_COMMON = "./src/common"; const BASE_DIR_BUILD = "./build"; -const BASE_DIR_LIBMANAGESIEVE = path.join(BASE_DIR_COMMON, "libManageSieve"); const BASE_DIR_LIBSIEVE = path.join(BASE_DIR_COMMON, "libSieve"); const BASE_DIR_MANAGESIEVEUI = path.join(BASE_DIR_COMMON, "managesieve.ui"); @@ -42,7 +40,6 @@ const INDEX_PATCH = 2; * the base path which should be cleared. */ async function deleteRecursive(dir) { - "use strict"; if (!existsSync(dir)) return; @@ -67,28 +64,9 @@ async function deleteRecursive(dir) { * Clean the build environment including all build and packaging artifacts. */ async function clean() { - "use strict"; await deleteRecursive(BASE_DIR_BUILD); } -/** - * Copies the jquery sources into the given build directory. - * - * @param {string} destination - * where to place the jquery sources - * - * @returns {Stream} - * a stream to be consumed by gulp - */ -function packageJQuery(destination) { - "use strict"; - - return src([ - BASE_DIR_JQUERY + "/jquery.min.js" - ], { base: BASE_DIR_JQUERY }).pipe( - dest(destination)); -} - /** * Copies the codemirror sources into the build directory. * @@ -99,7 +77,6 @@ function packageJQuery(destination) { * a stream to be consumed by gulp */ function packageCodeMirror(destination) { - "use strict"; return src([ BASE_DIR_CODEMIRROR + "/addon/edit/**", @@ -123,7 +100,6 @@ function packageCodeMirror(destination) { * a stream to be consumed by gulp **/ function packageBootstrap(destination) { - "use strict"; return src([ BASE_DIR_BOOTSTRAP + "/css/*.min.css", @@ -133,22 +109,26 @@ function packageBootstrap(destination) { } /** - -/** - * Packages the common libManageSieve files - * - * @param {string} destination - * where to place the common libManageSieve files + * An src clone which reasonable default values which avoid code duplication * + * @param {string} dir + * the source directory which contains the files + * @param {string|string[]} [files] + * the globs to be applied to the directory. If omitted it will select + * everything except a "doc" folder. * @returns {Stream} - * a stream to be consumed by gulp + * a vinyl file stream. */ -function packageLibManageSieve(destination) { - "use strict"; +function src2(dir, files) { - return src([ - BASE_DIR_LIBMANAGESIEVE + "/**" - ], { base: BASE_DIR_COMMON }).pipe(dest(destination)); + if (!files) + files = [`./**`, `!./doc/**`]; + + if (!Array.isArray(files)) + files = [files]; + + return src( + files, { base: dir, root: dir, cwd:dir, passthrough: true }); } /** @@ -161,8 +141,6 @@ function packageLibManageSieve(destination) { * a stream to be consumed by gulp */ function packageLibSieve(destination) { - "use strict"; - return src([ BASE_DIR_LIBSIEVE + "/**", "!" + BASE_DIR_LIBSIEVE + "/libSieve/**/rfc*.txt", @@ -181,8 +159,6 @@ function packageLibSieve(destination) { * a stream to be consumed by gulp */ function packageManageSieveUi(destination) { - "use strict"; - return src([ BASE_DIR_MANAGESIEVEUI + "/**" ], { base: BASE_DIR_COMMON }).pipe(dest(destination)); @@ -197,7 +173,6 @@ function packageManageSieveUi(destination) { * the version as a triple of integer */ async function getPackageVersion(file) { - "use strict"; if ((typeof (file) === "undefined") || file === null) file = "./package.json"; @@ -221,7 +196,6 @@ async function getPackageVersion(file) { * the path to the npm package json file. */ async function setPackageVersion(version, file) { - "use strict"; if ((typeof (file) === "undefined") || file === null) file = "./package.json"; @@ -244,7 +218,6 @@ async function setPackageVersion(version, file) { * The minor and patch level is reset to zero */ async function bumpMajorVersion() { - "use strict"; const pkgVersion = await getPackageVersion('./package.json'); @@ -264,7 +237,6 @@ async function bumpMajorVersion() { * The major version remains untouched but the patch level is reset to zero */ async function bumpMinorVersion() { - "use strict"; const pkgVersion = await getPackageVersion('./package.json'); @@ -283,7 +255,6 @@ async function bumpMinorVersion() { * Neither the major nor the minor version will be changed. */ async function bumpPatchVersion() { - "use strict"; const pkgVersion = await getPackageVersion('./package.json'); @@ -315,7 +286,6 @@ async function bumpPatchVersion() { * extended instructions for compressing. */ async function compressDirectory(zip, dir, options) { - "use strict"; if (typeof (options) === "undefined" || options === null) options = {}; @@ -369,8 +339,6 @@ async function compressDirectory(zip, dir, options) { */ async function compress(source, destination, options) { - "use strict"; - if (existsSync(destination)) { logger.info(`Deleting ${path.basename(destination)}`); await unlink(destination); @@ -396,11 +364,9 @@ async function compress(source, destination, options) { exports["clean"] = clean; exports["compress"] = compress; -exports["packageJQuery"] = packageJQuery; exports["packageCodeMirror"] = packageCodeMirror; exports["packageBootstrap"] = packageBootstrap; -exports["packageLibManageSieve"] = packageLibManageSieve; exports["packageLibSieve"] = packageLibSieve; exports["packageManageSieveUi"] = packageManageSieveUi; @@ -413,3 +379,5 @@ exports["bumpPatchVersion"] = bumpPatchVersion; exports["BASE_DIR_BUILD"] = BASE_DIR_BUILD; exports["BASE_DIR_COMMON"] = BASE_DIR_COMMON; + +exports["src2"] = src2; diff --git a/gulp/gulpfile.wx.js b/gulp/gulpfile.wx.js index 4f8b462535..0398a6acd0 100644 --- a/gulp/gulpfile.wx.js +++ b/gulp/gulpfile.wx.js @@ -15,12 +15,137 @@ const common = require("./gulpfile.common.js"); const path = require('path'); -const BUILD_DIR_WX = path.join(common.BASE_DIR_BUILD, "thunderbird-wx"); +const BUILD_DIR_WX = path.join(common.BASE_DIR_BUILD, "wx"); const BUILD_DIR_WX_LIBS = path.join(BUILD_DIR_WX, '/libs'); const BASE_DIR_WX = "./src/wx/"; +const { Stream } = require('stream'); +/** + * A gulp helper to rename mjs modules into js. + * This is needed due to a bug in thunderbird. + * + * It means renaming the files as well as all of their imports. + */ +class TransposeMjsToJs extends Stream.Transform { + + /** + * Create a new instance + */ + constructor() { + super({ readableObjectMode: true, writableObjectMode: true }); + } + + /** + * Implements the stream's transform method which does the actual + * work. It renames all mjs files and adjusts the imports. + * + * @param {File} file + * the vinyl file object + * @param {*} enc + * the encoding + * @param {Function} cb + * the callback which is called when processing is completed. + */ + _transform(file, enc, cb) { + // HTML, js and mjs files can reference other imports + if ((file.extname !== ".js") && (file.extname !== ".mjs") && file.extname !== ".html") { + cb(null, file); + return; + } + + if (!file.isBuffer()) { + cb(null, file); + return; + } + + // Rename mjs to js + if (file.extname === ".mjs") + file.extname = ".js"; + + // Update their import sections. + if (file.extname === ".js") { + let content = file.contents.toString(); + content = content.replace( + /(import\s*({[\w\s\n,]*}\s*from\s*)?)"([\w/.]*)\.mjs"/gm, + '$1"$3.js"'); + file.contents = Buffer.from(content); + } + + if (file.extname === ".html") { + let content = file.contents.toString(); + + content = content.replace( + /()/gm, + '$1$2.js$3'); + + file.contents = Buffer.from(content); + } + + cb(null, file); + } +} + + +/** + * A gulp helper to transpose import statements to requires. + */ +class TransposeImportToRequire extends Stream.Transform { + + /** + * Create a new instance + */ + constructor() { + super({ readableObjectMode: true, writableObjectMode: true }); + } + + /** + * Implements the stream's transform method which does the actual + * work and transforms the ES6 imports and export statements into + * commons modules require and export statements. + * + * @param {File} file + * the vinyl file object + * @param {*} enc + * the encoding + * @param {Function} cb + * the callback which is called when processing is completed. + */ + _transform(file, enc, cb) { + + if (file.extname !== ".js") { + cb(null, file); + return; + } + + if (!file.isBuffer()) { + cb(null, file); + return; + } + + let content = file.contents.toString(); + + // Convert all ES6 imports... + content = content.replace(/import\s*{([\w\s\n,]*)}\s*from\s*("[\w/.]*");/g, "const {$1} = require($2);"); + + // ... and then all ES6 exports, but we have three styles here: + // First one is "exports { something as somethingElse }" + content = content.replace(/export\s*{\s*(\w*)\s*as\s*(\w*)\s*};/g, "module.exports.$2 = $1"); + // Second one is "exports { something }" + content = content.replace(/export\s*{\s*(\w*)\s*};/g, "module.exports.$1 = $1"); + + // And the most complex one is the third one "exports { something,\n somethingElse }" + const matches = content.matchAll(/export\s*{((?:[\s\n]*\w+[\s\n,]*)+)};/g); + + for (const match of matches) { + const result = match[1].replace(/[^\S\n]*(\w+)(?:\s*,)?/g, "module.exports.$1 = $1;"); + content = content.replace(match[0], result); + } + + cb(null, file); + } +} /** * Copies the license file into the build directory. @@ -29,25 +154,11 @@ const BASE_DIR_WX = "./src/wx/"; * a stream to be consumed by gulp */ function packageLicense() { - "use strict"; - return src([ "./LICENSE.md" ]).pipe(dest(BUILD_DIR_WX)); } -/** - * Copies the jquery sources into the build directory. - * - * @returns {Stream} - * a stream to be consumed by gulp - */ -function packageJQuery() { - "use strict"; - - return common.packageJQuery( - BUILD_DIR_WX + "/libs/jquery"); -} /** * Copies the codemirror sources into the build directory. @@ -56,8 +167,6 @@ function packageJQuery() { * a stream to be consumed by gulp */ function packageCodeMirror() { - "use strict"; - return common.packageCodeMirror( `${BUILD_DIR_WX}/libs/CodeMirror`); } @@ -69,8 +178,6 @@ function packageCodeMirror() { * a stream to be consumed by gulp **/ function packageBootstrap() { - "use strict"; - return common.packageBootstrap( `${BUILD_DIR_WX}/libs/bootstrap`); } @@ -82,10 +189,9 @@ function packageBootstrap() { * a stream to be consumed by gulp */ function packageSrc() { - "use strict"; - return src([ - BASE_DIR_WX + "/**" + BASE_DIR_WX + "/**", + `!${BASE_DIR_WX}/libs/libManageSieve/**` ]).pipe(dest(BUILD_DIR_WX)); } @@ -97,7 +203,6 @@ function packageSrc() { * a stream to be consumed by gulp */ function packageIcons() { - "use strict"; return src([ path.join(common.BASE_DIR_COMMON, "icons") + "/**" @@ -105,14 +210,21 @@ function packageIcons() { } /** - * Copies the common libManageSieve files into the app's lib folder + * Copies the all libManageSieve files into the app's lib folder. + * It mixes the common files with the app specific. * * @returns {Stream} * a stream to be consumed by gulp */ function packageLibManageSieve() { - "use strict"; - return common.packageLibManageSieve(BUILD_DIR_WX_LIBS); + + const BASE_LIB_DIR_WX = path.join(BASE_DIR_WX, "libs", "libManageSieve"); + const BASE_LIB_DIR_COMMON = path.join(common.BASE_DIR_COMMON, "libManageSieve"); + + return common.src2(BASE_LIB_DIR_WX) + .pipe(common.src2(BASE_LIB_DIR_COMMON)) + .pipe(new TransposeImportToRequire()) + .pipe(dest(path.join(BUILD_DIR_WX_LIBS, "libManageSieve"))); } @@ -123,8 +235,15 @@ function packageLibManageSieve() { * a stream to be consumed by gulp */ function packageLibSieve() { - "use strict"; - return common.packageLibSieve(BUILD_DIR_WX_LIBS); + + const BASE_LIB_DIR_WX = path.join(BASE_DIR_WX, "libs", "libSieve"); + const BASE_LIB_DIR_COMMON = path.join(common.BASE_DIR_COMMON, "libSieve"); + + return common.src2(BASE_LIB_DIR_WX) + .pipe(common.src2(BASE_LIB_DIR_COMMON)) + .pipe(new TransposeMjsToJs()) + .pipe(dest(path.join(BUILD_DIR_WX_LIBS, "libSieve"))); + } @@ -135,8 +254,6 @@ function packageLibSieve() { * a stream to be consumed by gulp */ function packageManageSieveUi() { - "use strict"; - return common.packageManageSieveUi(BUILD_DIR_WX_LIBS); } @@ -146,8 +263,6 @@ function packageManageSieveUi() { */ function watchSrc() { - "use strict"; - watch( ['./src/**/*.js', './src/**/*.jsm', @@ -168,7 +283,6 @@ function watchSrc() { * It reads the information from the npm package and updates the install.rdf as well as the manifest.json */ async function updateVersion() { - "use strict"; const pkgVersion = await common.getPackageVersion(); await common.setPackageVersion(pkgVersion, './src/wx/manifest.json'); @@ -178,7 +292,6 @@ async function updateVersion() { * Zips the build directory and creates a XPI inside the release folder. */ async function packageXpi() { - "use strict"; const version = (await common.getPackageVersion()).join("."); @@ -193,7 +306,6 @@ exports["watch"] = watchSrc; exports["updateVersion"] = updateVersion; -exports["packageJQuery"] = packageJQuery; exports["packageCodeMirror"] = packageCodeMirror; exports["packageBootstrap"] = packageBootstrap; exports["packageLicense"] = packageLicense; @@ -201,7 +313,6 @@ exports["packageSrc"] = packageSrc; exports['package'] = series( parallel( - packageJQuery, packageCodeMirror, packageBootstrap, packageLicense, @@ -214,4 +325,3 @@ exports['package'] = series( ); exports["packageXpi"] = packageXpi; - diff --git a/package.json b/package.json index 3bda670e8c..7933a98313 100644 --- a/package.json +++ b/package.json @@ -7,15 +7,13 @@ "test": "tests" }, "devDependencies": { - "bootstrap": "^4.5.0", + "bootstrap": "^5.0.0-alpha1", "codemirror": "^5.56.0", "electron": "^9.1.2", "electron-packager": "^15.0.0", "eslint": "^7.6.0", "eslint-plugin-jsdoc": "^30.1.0", - "eslint-plugin-no-jquery": "^2.5.0", "gulp": "^4.0.0", - "jquery": "^3.5.1", "keytar": "^6.0.1", "node-abi": "^2.18.0", "tar": "^6.0.1", diff --git a/src/app/app.html b/src/app/app.html index e5ef365920..c591c5ee6e 100755 --- a/src/app/app.html +++ b/src/app/app.html @@ -42,14 +42,7 @@ - - - - - diff --git a/src/app/app.js b/src/app/app.js index 6db0733048..e479edeb1d 100755 --- a/src/app/app.js +++ b/src/app/app.js @@ -11,8 +11,6 @@ (async function () { - "use strict"; - const DEFAULT_AUTHENTICATION = 0; const DEFAULT_AUTHORIZATION = 3; diff --git a/src/app/index.js b/src/app/index.js index f249890c0e..2fcd0534b2 100755 --- a/src/app/index.js +++ b/src/app/index.js @@ -11,8 +11,6 @@ (function () { - "use strict"; - const { app, Menu, BrowserWindow, ipcMain, dialog } = require('electron'); const path = require('path'); const url = require('url'); @@ -74,7 +72,9 @@ nodeIntegration: true } }); - // win.setMenu(null); + + // Hide the menu bar. + win.removeMenu(); // and load the index.html of the app. win.loadURL(url.format({ diff --git a/src/app/libs/managesieve.ui/accounts.html b/src/app/libs/managesieve.ui/accounts.html index f9948958ef..fa38ebbf8f 100644 --- a/src/app/libs/managesieve.ui/accounts.html +++ b/src/app/libs/managesieve.ui/accounts.html @@ -19,7 +19,6 @@ - diff --git a/src/app/libs/managesieve.ui/accounts/SieveAccountCreateUI.js b/src/app/libs/managesieve.ui/accounts/SieveAccountCreateUI.js index c2aeded14d..6f995a2324 100644 --- a/src/app/libs/managesieve.ui/accounts/SieveAccountCreateUI.js +++ b/src/app/libs/managesieve.ui/accounts/SieveAccountCreateUI.js @@ -13,7 +13,7 @@ "use strict"; - /* global $ */ + /* global bootstrap */ /* global SieveTemplate */ /* global SieveIpcClient */ @@ -36,6 +36,8 @@ return await new Promise((resolve) => { + const modal = new bootstrap.Modal(dialog); + dialog .querySelector(".sieve-create-account-btn") .addEventListener("click", async () => { @@ -49,15 +51,15 @@ // fix me remove modal2 from dom. await SieveIpcClient.sendMessage("core", "account-create", account); - $(dialog).modal('hide'); + modal.hide(); resolve(true); }); - $(dialog).modal('show') - .on('hidden.bs.modal', () => { - dialog.parentNode.removeChild(dialog); - resolve(false); - }); + modal.show(); + dialog.addEventListener('hidden.bs.modal', () => { + dialog.parentNode.removeChild(dialog); + resolve(false); + }); }); } } diff --git a/src/app/libs/managesieve.ui/accounts/account.dialog.create.tpl b/src/app/libs/managesieve.ui/accounts/account.dialog.create.tpl index ff539989c0..f3f3ea39fe 100644 --- a/src/app/libs/managesieve.ui/accounts/account.dialog.create.tpl +++ b/src/app/libs/managesieve.ui/accounts/account.dialog.create.tpl @@ -11,28 +11,28 @@