diff --git a/.eslintignore b/.eslintignore index fe24ce3b..966d4ca2 100644 --- a/.eslintignore +++ b/.eslintignore @@ -20,17 +20,12 @@ svgedit-custom.css # Vendor/minified files src/editor/jquery.min.js -src/editor/jquery-ui # Previously minified though exporting src/editor/js-hotkeys -src/editor/jspdf/jspdf.min.js -src/editor/jspdf/underscore-min.js - src/editor/extensions/ext-mathjax/mathjax # jquery files -src/editor/svgicons/jQuery.svgIcons.js src/editor/jgraduate/jQuery.jPicker.js diff --git a/.eslintrc.js b/.eslintrc.js index 5a0771e1..ca0431ea 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -25,8 +25,10 @@ module.exports = { "max-len": [ "warn", { "code": 250 } ], /** @todo jsdoc should be made warn or error */ "valid-jsdoc": "off", - /** @todo cognitive complexity should be much lower (25-50?) */ + /** @todo cognitive complexity should be much lower (25-50?) */ "sonarjs/cognitive-complexity": [ "warn", 200 ], + /** @todo no param reassign creates too many warnings but should be a warning */ + "no-param-reassign": "off", "node/no-unsupported-features/es-syntax": 0, "no-unused-vars": [ "error", { "argsIgnorePattern": "^_" } ], "sonarjs/no-duplicate-string": 0, @@ -39,7 +41,6 @@ module.exports = { "warn", { "allow": [ "warn", "error", "info", "table" ] } ], - "no-param-reassign": [ "warn", { "props": false } ], "arrow-parens": [ "error", "always" ], }, overrides: [ @@ -75,6 +76,12 @@ module.exports = { } ] } + }, + { + files: [ 'src/editor/locale/*.js' ], + rules: { // lang files may have long length + "max-len": "off", + } } ] }; diff --git a/CHANGES.md b/CHANGES.md index 9d088c99..72ace049 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,11 @@ # SVG-Edit CHANGES +## 7.0.0 (preview - work in progress) +- New UI +- Rearchitecture the code (more modular) +- simplify and refresh the build process +- Introduce Web Component to replace jQuery UI +- update dependencies ## 6.0.0 (unreleased) - Project: Add `FUNDING.yml` to accept contributions diff --git a/README.md b/README.md index 699c834d..fa70415c 100644 --- a/README.md +++ b/README.md @@ -16,167 +16,53 @@ [![Total Alerts](https://img.shields.io/lgtm/alerts/g/SVG-Edit/svgedit.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/SVG-Edit/svgedit/alerts) [![Code Quality: Javascript](https://img.shields.io/lgtm/grade/javascript/g/SVG-Edit/svgedit.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/SVG-Edit/svgedit/context:javascript) -[![Licenses badge](https://raw.githubusercontent.com/SVG-Edit/svgedit/master/badges/licenses-badge.svg?sanitize=true)](badges/licenses-badge.svg) - -(see also [licenses for dev. deps.](https://raw.githubusercontent.com/SVG-Edit/svgedit/master/badges/licenses-badge-dev.svg?sanitize=true)) - [![issuehunt-to-marktext](https://issuehunt.io/static/embed/issuehunt-button-v1.svg)](https://issuehunt.io/r/SVG-Edit/svgedit) SVG-edit is a fast, web-based, JavaScript-driven SVG drawing editor that works in any modern browser. ![screenshot](docs/screenshot.png) -[SVG](https://upload.wikimedia.org/wikipedia/commons/f/fd/Ghostscript_Tiger.svg) +[](https://upload.wikimedia.org/wikipedia/commons/f/fd/Ghostscript_Tiger.svg) ## Help wanted -We need more maintainers for SVG-Edit - +SVG-Edit is the most popular open source SVG editor. It was started more than 10 years ago by a fantastic team of developers. Unfortunately, the product was not maintained for a quite long period. We decided to give this tool a new life by refreshing many aspects. +If you can help us to maintain SVG-Edit, you are more than welcome! ## Demo -### [Try SVG-edit here](https://svgedit.netlify.app/editor/index.html) +Thanks to Netlify, you can test the following builds: -Thanks to netlify, you can test the following builds: +### [Try SVG-edit V7-preview here](https://svgedit.netlify.app/editor/index.html) [Try SVG-edit 5.1.0 here](https://6098683962bf91702907ee33--svgedit.netlify.app/editor/svg-editor.html) [Try SVG-edit 6.1.0 here](https://60a0000fc9900b0008fd268d--svgedit.netlify.app/editor/index.html) -/ - - - ## Installation ### Quick install -1. Clone or copy the repository contents (at least the `editor` directory). - Please note that you should not do a recursive Git clone (i.e., with the - `--recursive` or `--recurse-submodules` flags), as you will get assorted - past versions (which are available on the parent as branches anyways). - (The reason these past versions are available as submodules is merely - for convenience in hosting these versions, along with `master`, online - on Github Pages.) -1. If you need programmatic customization, see its section below. -1. Otherwise, just add an iframe to your site, adding any extensions or - configuration (see `docs/tutorials/ConfigOptions.md` - ([ConfigOptions]{@tutorial ConfigOptions})) within the URL: +1. Clone or copy the repository contents +1. run `npm i` to install dependencies +1. run `npm run start` to start a local server +1. Use your browser to access `http://localhost:8000/src/editor/index.html` -```html - -``` +### Integrating SVG-edit into your own application -### Integrating SVG-edit into your own npm package +V7 is changing significantly the way to integrate and customize SVG-Edit. The documentation will be detailed here. -These steps are only needed if you wish to set up your own npm package -incorporating SVGEdit. You will need to have Node.js/npm installed. - -1. Create and enter an empty folder somewhere on your desktop. -1. Create your npm package: `npm init` (complete the fields). -1. Install SVG-edit into your package: - `npm i --save svgedit`. -1. Look within `node_modules/svgedit/`, e.g., `node_modules/svgedit/src/editor/svg-editor.html` - for the files your package needs and use accordingly (from outside of - `node_modules`). -1. If you want to publish your own work, you can use `npm publish`. - -## Programmatic customization - -1. If you are not concerned about supporting ES6 Modules (see the - "ES6 Modules file" section), you can add your config directly to - `svgedit-config-iife.js` within the SVG-Edit project root. - 1. Note: Do not remove the `import svgEditor...` code which is responsible - for importing the SVG edit code. Versions prior to 3.0 did not require - this, but the advantage is that your HTML does not need to be polluted - with extra script references. -1. Modify or utilize any options. See `docs/tutorials/ConfigOptions.md` - ([ConfigOptions]{@tutorial ConfigOptions}). - -## ES6 Modules file - -1. `svg-editor-es.html` is an HTML file directly using ES6 modules. - It is only supported in the latest browsers. It is probably mostly - useful for debugging, as it requires more network requests. - If you would like to work with this file, you should make configuration - changes in `svgedit-config-es.js` (in the SVG-Edit project root). -1. If you are working with the ES6 Modules config but also wish to work with - the normal `svg-editor.html` version (so your code can work in older - browsers or get the presumable performance benefits of this file which - references JavaScript rolled up into a single file), you can follow these - steps after any config changes you make, so that your changes can also be - automatically made available to both versions. - 1. JavaScript: - 1. Run `npm install` within the svgedit directory - (`node_modules/svgedit` if you installed via npm) and the root - repository directory if you cloned the Git repository instead. - This will install the build tools for SVG-edit. - 1. Run `npm run build-by-config` within the svgedit directory mentioned - in the step above. - 1. This will rebuild `svgedit-config-iife.js` (applying Babel to - allow it to work on older browsers and applying Rollup to build - all JavaScript into one file). The file will then contain - non-ES6 module JavaScript that can work in older browsers. - Note that it bundles all of SVGEdit, so it is to be expected - that this file will be much larger in size than the original - ES6 config file. - 1. HTML: - 1. If you wish to make changes to both HTML files, it is recommended that - you work and test on `svg-editor-es.html` and then run - `npm run build-html` to have the changes properly copied to - `svg-editor.html`. - -## Recent news - -- 2020-02-22 Published 6.0.0 License clarifications/updates, PDF export - improvements, clipboard `sessionStorage`, and other changes. -- 2019-11-16 Published 5.1.0 Misc. fixes and refactoring -- 2019-05-07 Published 5.0.0 Change from `@babel/polyfill` -- 2019-04-03 Published 4.3.0 Fix for double click on gradient - picker droplets affecting some browsers and dragging control - point of arc. Other misc. fixes. Some accessibility and i18n. -- 2018-12-13 Published 4.2.0 (Chinese (simplified) and Russian locale - updates; retaining lines with grid mode) -- 2018-11-29 Published 4.1.0 (Fix for hyphenated locales, svgcanvas - distributions) -- 2018-11-16 Published 4.0.0/4.0.1 (Move to Promise-based APIs) -- 2018-11-01 Published 3.2.0 (Update qunit to resolve security vulnerability - of a dependency) -- 2018-10-25 Published 3.1.1 (Fix for saving SVG on Firefox) -- 2018-10-24 Published 3.1.0 (Redirect on modular page for non-module-support; - versions document (for migrating)) -- 2018-10-22 Published 3.0.1 (Revert fix affecting polygon selection) -- 2018-10-21 Published 3.0.0 (misc. improvements including centering canvas and - key locale fixes since last RC) -- 2018-09-30 Published 3.0.0-rc.3 with security and other fixes -- 2018-07-31 Published 3.0.0-rc.2 with misc. fixes -- 2018-07-19 Published 3.0.0-rc.1 allowing for extensions and locales to be - expressed as modules -- 2018-05-26 Published 3.0.0-alpha.2 with ES6 Modules support -- 2017-07 Added to Packagist: https://packagist.org/packages/svg-edit/svgedit -- 2015-12-02 SVG-edit 2.8.1 was released. -- 2015-11-24 SVG-edit 2.8 was released. -- 2015-11-24 Code, issue tracking, and docs are being moved to github - (previously [code.google.com](https://code.google.com/p/svg-edit)). -- 2014-04-17 2.7 and stable branches updated to reflect 2.7.1 important bug - fixes for the embedded editor. -- 2014-04-07 SVG-edit 2.7 was released. -- 2013-01-15 SVG-edit 2.6 was released. - -## Videos - - * [SVG-edit 2.4 Part 1](https://www.youtube.com/watch?v=zpC7b1ZJvvM) - * [SVG-edit 2.4 Part 2](https://www.youtube.com/watch?v=mDzZEoGUDe8) - * [SVG-edit 2.3 Features](https://www.youtube.com/watch?v=RVIcIy5fXOc) - * [Introduction to SVG-edit](https://www.youtube.com/watch?v=ZJKmEI06YiY) (Version 2.2) +SVG-Edit is made of two major components: +1. The "svgcanvas" that takes care of the underlying svg edition. It can be used to build your own editor. See example in the demos folder or the svg-edit-react repository. +1. The "editor" that takes care of the editor UI (menus, buttons, etc.) +For earlier versions of SVG-Edit, please look in their respective branches. ## Supported browsers - Opera 59+, - - IE 12+, - Chrome 75+, - FireFox 68+, - - Safari 10+ + - Safari 11+ + - Edge 18+ Support for old browsers may require to use an older version of the package. However, please open an issue if you need support for a specific version of your browser so @@ -191,11 +77,6 @@ incorporating SVGEdit. You will need to have Node.js/npm installed. * See [AUTHORS](AUTHORS) file for authors. * [StackOverflow](https://stackoverflow.com/tags/svg-edit) group. -## Older references - * Join the [svg-edit mailing list](https://groups.google.com/forum/#!forum/svg-edit). - * Join us on `#svg-edit` on `freenode.net` (or use the - [web client](https://webchat.freenode.net/?channels=svg-edit)). - # Hosting SVGedit versions are deployed to: [![Deploys by Netlify](https://www.netlify.com/img/global/badges/netlify-color-accent.svg)](https://www.netlify.com) diff --git a/badges/licenses-badge-dev.svg b/badges/licenses-badge-dev.svg deleted file mode 100644 index 014c8f4a..00000000 --- a/badges/licenses-badge-dev.svg +++ /dev/null @@ -1 +0,0 @@ -License typesLicense types(all devDeps)(all devDeps)PublicPublicdomaindomain1. (MIT OR CC0-1.0)1. (MIT OR CC0-1.0)2. CC0-1.02. CC0-1.03. Unlicense3. UnlicensePermissivePermissive1. (AFL-2.1 OR BSD-3-Clause)1. (AFL-2.1 OR BSD-3-Clause)2. (BSD-2-Clause OR (MIT OR Apache-2.0))2. (BSD-2-Clause OR (MIT OR Apache-2.0))3. (GPL-3.0-or-later OR MIT)3. (GPL-3.0-or-later OR MIT)4. (MIT OR Apache-2.0)4. (MIT OR Apache-2.0)5. (MPL-2.0 OR Apache-2.0)5. (MPL-2.0 OR Apache-2.0)6. (WTFPL OR ISC)6. (WTFPL OR ISC)7. (WTFPL OR MIT)7. (WTFPL OR MIT)8. 0BSD8. 0BSD9. Apache-2.09. Apache-2.010. Artistic-2.010. Artistic-2.011. BSD11. BSD12. BSD-2-Clause12. BSD-2-Clause13. BSD-3-Clause13. BSD-3-Clause14. CC-BY-3.014. CC-BY-3.015. CC-BY-4.015. CC-BY-4.016. ISC16. ISC17. MIT17. MIT18. W3C-2015051318. W3C-2015051319. WTFPL19. WTFPL20. Zlib20. ZlibWeaklyWeaklyprotectiveprotective1. LGPL-3.01. LGPL-3.02. MPL-2.02. MPL-2.0UncategorizedUncategorized1. jsonify (0.0.0)1. jsonify (0.0.0)MissingMissing1. better-assert (1.0.2)1. better-assert (1.0.2)2. boundary (1.0.1)2. boundary (1.0.1)3. callsite (1.0.0)3. callsite (1.0.0)4. component-bind (1.0.0)4. component-bind (1.0.0)5. component-inherit (0.0.3)5. component-inherit (0.0.3)6. exif-parser (0.1.12)6. exif-parser (0.1.12)7. indexof (0.0.1)7. indexof (0.0.1)8. object-component (0.0.3)8. object-component (0.0.3)9. only (0.0.2)9. only (0.0.2)10. process (0.5.2)10. process (0.5.2)11. structured-source (3.0.2)11. structured-source (3.0.2)12. taffydb (2.6.2)12. taffydb (2.6.2)13. valid-url (1.0.9)13. valid-url (1.0.9) \ No newline at end of file diff --git a/badges/licenses-badge.svg b/badges/licenses-badge.svg deleted file mode 100644 index b93de2fe..00000000 --- a/badges/licenses-badge.svg +++ /dev/null @@ -1 +0,0 @@ -License typesLicense types(project, deps, and bundled devDeps)(project, deps, and bundled devDeps)PermissivePermissive1. (MIT OR Apache-2.0)1. (MIT OR Apache-2.0)2. (MPL-2.0 OR Apache-2.0)2. (MPL-2.0 OR Apache-2.0)3. Apache-2.03. Apache-2.04. ISC4. ISC5. MIT5. MIT6. MIT OR SEE LICENSE IN FEEL-FREE.md6. MIT OR SEE LICENSE IN FEEL-FREE.md7. X117. X11WeaklyWeaklyprotectiveprotective1. LGPL-3.0-or-later1. LGPL-3.0-or-laterUncategorizedUncategorized1. Chromium's License (pathseg (1.2.0))1. Chromium's License (pathseg (1.2.0)) \ No newline at end of file diff --git a/composer.json b/composer.json index 5e7595b5..f2c968bd 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,10 @@ { "name": "Brett Zamir", "email": "brettz9@yahoo.com" + }, + { + "name": "Optimistik SAS", + "email": "contact@optimistik.fr" } ], "keywords": [ diff --git a/cypress/integration/unit/test1.js b/cypress/integration/unit/test1.js index 185964e3..07f8aa66 100644 --- a/cypress/integration/unit/test1.js +++ b/cypress/integration/unit/test1.js @@ -1,4 +1,4 @@ -/* eslint-disable max-len */ +/* eslint-disable max-len, no-console */ import '../../../instrumented/editor/jquery.min.js'; import SvgCanvas from '../../../instrumented/svgcanvas/svgcanvas.js'; diff --git a/cypress/integration/unit/utilities-performance.js b/cypress/integration/unit/utilities-performance.js index bd737e4b..449070f2 100644 --- a/cypress/integration/unit/utilities-performance.js +++ b/cypress/integration/unit/utilities-performance.js @@ -1,4 +1,4 @@ -/* eslint-disable max-len */ +/* eslint-disable max-len, no-console */ import 'pathseg'; import '../../../instrumented/editor/jquery.min.js'; diff --git a/docs/tutorials/ExtensionDocs.md b/docs/tutorials/ExtensionDocs.md index b25bc987..b9581cea 100644 --- a/docs/tutorials/ExtensionDocs.md +++ b/docs/tutorials/ExtensionDocs.md @@ -151,7 +151,7 @@ const localeStrings = await importSetGlobalDefault(url, { }); // Use `localeStrings` -console.log(localeStrings); +console.info(localeStrings); })(); ``` diff --git a/lgtm.yml b/lgtm.yml index 6a35056f..bb188bae 100644 --- a/lgtm.yml +++ b/lgtm.yml @@ -2,7 +2,4 @@ extraction: javascript: index: filters: - - exclude: "src/xdomain-svgedit-config-iife.js" - - exclude: "src/svgedit-config-iife.js" - - exclude: "src/editor/redirect-on-no-module-support.js" - exclude: "dist" diff --git a/package-lock.json b/package-lock.json index bca6d7db..90f58178 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,28 +1,28 @@ { "name": "svgedit", - "version": "6.0.0", + "version": "7.0.0-preview", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "6.0.0", + "version": "7.0.0-preview", "license": "(MIT AND Apache-2.0 AND ISC AND LGPL-3.0-or-later AND X11)", "dependencies": { "@babel/polyfill": "7.12.1", - "@web/dev-server-rollup": "0.3.3", + "@web/dev-server-rollup": "0.3.4", "canvg": "3.0.7", "core-js": "3.12.1", - "deparam": "^1.0.5", - "elix": "^15.0.0", - "i18next": "^20.2.2", + "deparam": "1.0.5", + "elix": "15.0.0", + "i18next": "20.2.4", "jspdf": "2.3.1", "pathseg": "1.2.0", "regenerator-runtime": "0.13.7", - "rollup-plugin-polyfill-node": "^0.6.2", + "rollup-plugin-polyfill-node": "0.6.2", "svg2pdf.js": "2.1.0" }, "devDependencies": { - "@babel/core": "7.14.2", + "@babel/core": "7.14.3", "@babel/preset-env": "7.14.2", "@babel/register": "7.13.16", "@babel/runtime-corejs3": "7.14.0", @@ -37,8 +37,8 @@ "@rollup/plugin-node-resolve": "11.2.1", "@rollup/plugin-replace": "2.4.2", "@rollup/plugin-url": "6.0.0", - "@web/dev-server": "^0.1.17", - "axe-core": "4.2.0", + "@web/dev-server": "0.1.17", + "axe-core": "4.2.1", "babel-plugin-transform-object-rest-spread": "7.0.0-beta.3", "copyfiles": "2.4.1", "core-js-bundle": "3.12.1", @@ -59,8 +59,8 @@ "eslint-plugin-cypress": "2.11.3", "eslint-plugin-eslint-comments": "3.2.0", "eslint-plugin-html": "^6.1.2", - "eslint-plugin-import": "2.23.0", - "eslint-plugin-jsdoc": "34.2.2", + "eslint-plugin-import": "2.23.2", + "eslint-plugin-jsdoc": "34.8.2", "eslint-plugin-markdown": "^2.1.0", "eslint-plugin-mocha": "8.1.0", "eslint-plugin-mocha-cleanup": "1.9.1", @@ -73,7 +73,7 @@ "eslint-plugin-unicorn": "32.0.1", "imageoptim-cli": "3.0.2", "jamilih": "0.54.0", - "jsdoc": "3.6.6", + "jsdoc": "3.6.7", "mocha": "8.4.0", "mocha-badge-generator": "0.9.0", "mochawesome": "6.2.2", @@ -90,7 +90,7 @@ "remark-lint-ordered-list-marker-value": "2.0.1", "requirejs": "2.3.6", "rimraf": "3.0.2", - "rollup": "2.47.0", + "rollup": "2.48.0", "rollup-plugin-copy": "3.4.0", "rollup-plugin-filesize": "9.1.1", "rollup-plugin-node-polyfills": "0.2.1", @@ -123,17 +123,17 @@ "dev": true }, "node_modules/@babel/core": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.2.tgz", - "integrity": "sha512-OgC1mON+l4U4B4wiohJlQNUU3H73mpTyYY3j/c8U9dr9UagGGSm+WFpzjy/YLdoyjiG++c1kIDgxCo/mLwQJeQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", + "@babel/generator": "^7.14.3", "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-module-transforms": "^7.14.2", "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.2", + "@babel/parser": "^7.14.3", "@babel/template": "^7.12.13", "@babel/traverse": "^7.14.2", "@babel/types": "^7.14.2", @@ -203,9 +203,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", - "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "dependencies": { "@babel/types": "^7.14.2", @@ -530,9 +530,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", - "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -2492,9 +2492,9 @@ "dev": true }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.4.4.tgz", - "integrity": "sha512-ua4qDt9dQb4qt5OI38eCZcQZYE5Bq3P0GzgvDARdT8Lt0mAUpxKTPy8JGGqEvF77tG1irKDZ3WreeezEa3P43w==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.6.0.tgz", + "integrity": "sha512-zT1EtysKMITJ7vE4RvOJqitxk/Str6It8hq+fykxkwLuTyzgak+TnVuVSIyovT/qrEz3i46ypCSXgNtIDYwNOg==", "dev": true, "dependencies": { "comment-parser": "^1.1.5", @@ -4253,7 +4253,6 @@ "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.3.1", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -4376,9 +4375,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@web/dev-server-rollup": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.3.tgz", - "integrity": "sha512-3v+PG9xC+Q07NOVTqqYuab/XqDQfWXltVzOI6HstBD0RWP7u7Bk4G0BwSjD3RNdIzyrTW//zCwyCN7UkHNhIBA==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.4.tgz", + "integrity": "sha512-QFaqHpJXri1TuN1yN0N670bxF5noC1RtIHPhoM5Sp6YX7v3610Z/fq465V7fNaeHnTNN7dIUmNkK9vqLIrsYTg==", "dependencies": { "@web/dev-server-core": "^0.3.3", "chalk": "^4.1.0", @@ -5242,9 +5241,9 @@ "dev": true }, "node_modules/axe-core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.0.tgz", - "integrity": "sha512-1uIESzroqpaTzt9uX48HO+6gfnKu3RwvWdCcWSrX4csMInJfCo1yvKPNXCwXFRpJqRW25tiASb6No0YH57PXqg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.1.tgz", + "integrity": "sha512-evY7DN8qSIbsW2H/TWQ1bX3sXN1d4MNb5Vb4n7BzPuCwRHdkZ1H2eNLuSh73EoQqkGKUtju2G2HCcjCfhvZIAA==", "dev": true, "engines": { "node": ">=4" @@ -7284,15 +7283,15 @@ "dev": true }, "node_modules/catharsis": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", - "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", "dev": true, "dependencies": { - "lodash": "^4.17.14" + "lodash": "^4.17.15" }, "engines": { - "node": ">= 8" + "node": ">= 10" } }, "node_modules/chalk": { @@ -7351,7 +7350,6 @@ "anymatch": "^2.0.0", "async-each": "^1.0.1", "braces": "^2.3.2", - "fsevents": "^1.2.7", "glob-parent": "^3.1.0", "inherits": "^2.0.3", "is-binary-path": "^1.0.0", @@ -9944,8 +9942,7 @@ "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "optionator": "^0.8.1" }, "bin": { "escodegen": "bin/escodegen.js", @@ -10324,9 +10321,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.0.tgz", - "integrity": "sha512-W5v1f7Cbam6BwbSSKtN6+yoUAms07ozbqAEhLOtf5erEqRv7w67PeZuAuBThaUkzdq2GfBx/5GBvxF+NWJshrQ==", + "version": "2.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.2.tgz", + "integrity": "sha512-LmNoRptHBxOP+nb0PIKz1y6OSzCJlB+0g0IGS3XV4KaKk2q4szqQ6s6F1utVf5ZRkxk/QOTjdxe7v4VjS99Bsg==", "dev": true, "dependencies": { "array-includes": "^3.1.3", @@ -10424,12 +10421,12 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "34.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-34.2.2.tgz", - "integrity": "sha512-9JCeUUZ2MefGd/Pl3blx9/EDjCd7/Z2+fcVBuJdNdvSLApRqZ8CwjGjLHf5s4uVikqF968A0CfnID0WK9B/H/w==", + "version": "34.8.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-34.8.2.tgz", + "integrity": "sha512-UOU9A40Cl806JMtla2vF+RM6sNqfLPbhLv9FZqhcC7+LmChD3DVaWqM7ADxpF0kMyZNWe1QKUnqGnXaA3NTn+w==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "^0.4.4", + "@es-joy/jsdoccomment": "^0.6.0", "comment-parser": "1.1.5", "debug": "^4.3.1", "esquery": "^1.4.0", @@ -13122,9 +13119,9 @@ } }, "node_modules/i18next": { - "version": "20.2.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.2.2.tgz", - "integrity": "sha512-uWCv9LzKpe+OwvnKKrb8CbJwgAhasQofD58cB0PQ6bTPXEl5PlItl5C4esmY8HtriLu9nrjc2Hi0IfYv3Fy8BQ==", + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.2.4.tgz", + "integrity": "sha512-goE1LCA/IZOGG26PkkqoOl2KWR7YP606SvokVQZ29J6QwE02KycrzNetoMUJeqYrTxs4rmiiZgZp+q8qofQL6Q==", "dependencies": { "@babel/runtime": "^7.12.0" } @@ -14473,25 +14470,25 @@ "dev": true }, "node_modules/jsdoc": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.6.tgz", - "integrity": "sha512-znR99e1BHeyEkSvgDDpX0sTiTu+8aQyDl9DawrkOGZTTW8hv0deIFXx87114zJ7gRaDZKVQD/4tr1ifmJp9xhQ==", + "version": "3.6.7", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.7.tgz", + "integrity": "sha512-sxKt7h0vzCd+3Y81Ey2qinupL6DpRSZJclS04ugHDNmRUXGzqicMJ6iwayhSA0S0DwwX30c5ozyUthr1QKF6uw==", "dev": true, "dependencies": { "@babel/parser": "^7.9.4", "bluebird": "^3.7.2", - "catharsis": "^0.8.11", + "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", "js2xmlparser": "^4.0.1", "klaw": "^3.0.0", "markdown-it": "^10.0.0", "markdown-it-anchor": "^5.2.7", - "marked": "^0.8.2", + "marked": "^2.0.3", "mkdirp": "^1.0.4", "requizzle": "^0.2.3", "strip-json-comments": "^3.1.0", "taffydb": "2.6.2", - "underscore": "~1.10.2" + "underscore": "~1.13.1" }, "bin": { "jsdoc": "jsdoc.js" @@ -14536,12 +14533,6 @@ "node": ">=8" } }, - "node_modules/jsdoc/node_modules/underscore": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", - "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", - "dev": true - }, "node_modules/jsdoctypeparser": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", @@ -14729,8 +14720,7 @@ "canvg": "^3.0.6", "core-js": "^3.6.0", "dompurify": "^2.2.0", - "fflate": "^0.4.8", - "html2canvas": "^1.0.0-rc.5" + "fflate": "^0.4.8" }, "optionalDependencies": { "html2canvas": "^1.0.0-rc.5" @@ -15777,9 +15767,9 @@ "dev": true }, "node_modules/marked": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz", - "integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.3.tgz", + "integrity": "sha512-5otztIIcJfPc2qGTN8cVtOJEjNJZ0jwa46INMagrYfk0EvqtRuEHLsEe0LrFS0/q+ZRKT0+kXK7P2T1AN5lWRA==", "dev": true, "bin": { "marked": "bin/marked" @@ -16289,7 +16279,6 @@ "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", "dev": true, "dependencies": { - "encoding": "^0.1.12", "minipass": "^3.1.0", "minipass-sized": "^1.0.3", "minizlib": "^2.0.0" @@ -16531,7 +16520,6 @@ "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.3.1", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -20281,12 +20269,9 @@ } }, "node_modules/rollup": { - "version": "2.47.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", - "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", - "dependencies": { - "fsevents": "~2.3.1" - }, + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.48.0.tgz", + "integrity": "sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A==", "bin": { "rollup": "dist/bin/rollup" }, @@ -22862,7 +22847,6 @@ "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -24328,17 +24312,17 @@ "dev": true }, "@babel/core": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.2.tgz", - "integrity": "sha512-OgC1mON+l4U4B4wiohJlQNUU3H73mpTyYY3j/c8U9dr9UagGGSm+WFpzjy/YLdoyjiG++c1kIDgxCo/mLwQJeQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", + "@babel/generator": "^7.14.3", "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-module-transforms": "^7.14.2", "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.2", + "@babel/parser": "^7.14.3", "@babel/template": "^7.12.13", "@babel/traverse": "^7.14.2", "@babel/types": "^7.14.2", @@ -24393,9 +24377,9 @@ } }, "@babel/generator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", - "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "requires": { "@babel/types": "^7.14.2", @@ -24701,9 +24685,9 @@ } }, "@babel/parser": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", - "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { @@ -26496,9 +26480,9 @@ } }, "@es-joy/jsdoccomment": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.4.4.tgz", - "integrity": "sha512-ua4qDt9dQb4qt5OI38eCZcQZYE5Bq3P0GzgvDARdT8Lt0mAUpxKTPy8JGGqEvF77tG1irKDZ3WreeezEa3P43w==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.6.0.tgz", + "integrity": "sha512-zT1EtysKMITJ7vE4RvOJqitxk/Str6It8hq+fykxkwLuTyzgak+TnVuVSIyovT/qrEz3i46ypCSXgNtIDYwNOg==", "dev": true, "requires": { "comment-parser": "^1.1.5", @@ -28229,9 +28213,9 @@ } }, "@web/dev-server-rollup": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.3.tgz", - "integrity": "sha512-3v+PG9xC+Q07NOVTqqYuab/XqDQfWXltVzOI6HstBD0RWP7u7Bk4G0BwSjD3RNdIzyrTW//zCwyCN7UkHNhIBA==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.4.tgz", + "integrity": "sha512-QFaqHpJXri1TuN1yN0N670bxF5noC1RtIHPhoM5Sp6YX7v3610Z/fq465V7fNaeHnTNN7dIUmNkK9vqLIrsYTg==", "requires": { "@web/dev-server-core": "^0.3.3", "chalk": "^4.1.0", @@ -28824,9 +28808,9 @@ "dev": true }, "axe-core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.0.tgz", - "integrity": "sha512-1uIESzroqpaTzt9uX48HO+6gfnKu3RwvWdCcWSrX4csMInJfCo1yvKPNXCwXFRpJqRW25tiASb6No0YH57PXqg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.1.tgz", + "integrity": "sha512-evY7DN8qSIbsW2H/TWQ1bX3sXN1d4MNb5Vb4n7BzPuCwRHdkZ1H2eNLuSh73EoQqkGKUtju2G2HCcjCfhvZIAA==", "dev": true }, "axios": { @@ -30690,12 +30674,12 @@ "dev": true }, "catharsis": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", - "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", "dev": true, "requires": { - "lodash": "^4.17.14" + "lodash": "^4.17.15" } }, "chalk": { @@ -33477,9 +33461,9 @@ } }, "eslint-plugin-import": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.0.tgz", - "integrity": "sha512-W5v1f7Cbam6BwbSSKtN6+yoUAms07ozbqAEhLOtf5erEqRv7w67PeZuAuBThaUkzdq2GfBx/5GBvxF+NWJshrQ==", + "version": "2.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.2.tgz", + "integrity": "sha512-LmNoRptHBxOP+nb0PIKz1y6OSzCJlB+0g0IGS3XV4KaKk2q4szqQ6s6F1utVf5ZRkxk/QOTjdxe7v4VjS99Bsg==", "dev": true, "requires": { "array-includes": "^3.1.3", @@ -33555,12 +33539,12 @@ } }, "eslint-plugin-jsdoc": { - "version": "34.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-34.2.2.tgz", - "integrity": "sha512-9JCeUUZ2MefGd/Pl3blx9/EDjCd7/Z2+fcVBuJdNdvSLApRqZ8CwjGjLHf5s4uVikqF968A0CfnID0WK9B/H/w==", + "version": "34.8.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-34.8.2.tgz", + "integrity": "sha512-UOU9A40Cl806JMtla2vF+RM6sNqfLPbhLv9FZqhcC7+LmChD3DVaWqM7ADxpF0kMyZNWe1QKUnqGnXaA3NTn+w==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "^0.4.4", + "@es-joy/jsdoccomment": "^0.6.0", "comment-parser": "1.1.5", "debug": "^4.3.1", "esquery": "^1.4.0", @@ -35476,9 +35460,9 @@ } }, "i18next": { - "version": "20.2.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.2.2.tgz", - "integrity": "sha512-uWCv9LzKpe+OwvnKKrb8CbJwgAhasQofD58cB0PQ6bTPXEl5PlItl5C4esmY8HtriLu9nrjc2Hi0IfYv3Fy8BQ==", + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.2.4.tgz", + "integrity": "sha512-goE1LCA/IZOGG26PkkqoOl2KWR7YP606SvokVQZ29J6QwE02KycrzNetoMUJeqYrTxs4rmiiZgZp+q8qofQL6Q==", "requires": { "@babel/runtime": "^7.12.0" } @@ -36548,25 +36532,25 @@ "dev": true }, "jsdoc": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.6.tgz", - "integrity": "sha512-znR99e1BHeyEkSvgDDpX0sTiTu+8aQyDl9DawrkOGZTTW8hv0deIFXx87114zJ7gRaDZKVQD/4tr1ifmJp9xhQ==", + "version": "3.6.7", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.7.tgz", + "integrity": "sha512-sxKt7h0vzCd+3Y81Ey2qinupL6DpRSZJclS04ugHDNmRUXGzqicMJ6iwayhSA0S0DwwX30c5ozyUthr1QKF6uw==", "dev": true, "requires": { "@babel/parser": "^7.9.4", "bluebird": "^3.7.2", - "catharsis": "^0.8.11", + "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", "js2xmlparser": "^4.0.1", "klaw": "^3.0.0", "markdown-it": "^10.0.0", "markdown-it-anchor": "^5.2.7", - "marked": "^0.8.2", + "marked": "^2.0.3", "mkdirp": "^1.0.4", "requizzle": "^0.2.3", "strip-json-comments": "^3.1.0", "taffydb": "2.6.2", - "underscore": "~1.10.2" + "underscore": "~1.13.1" }, "dependencies": { "bluebird": { @@ -36592,12 +36576,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true - }, - "underscore": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", - "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", - "dev": true } } }, @@ -37625,9 +37603,9 @@ "dev": true }, "marked": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz", - "integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.3.tgz", + "integrity": "sha512-5otztIIcJfPc2qGTN8cVtOJEjNJZ0jwa46INMagrYfk0EvqtRuEHLsEe0LrFS0/q+ZRKT0+kXK7P2T1AN5lWRA==", "dev": true }, "md5.js": { @@ -41275,9 +41253,9 @@ } }, "rollup": { - "version": "2.47.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", - "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.48.0.tgz", + "integrity": "sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A==", "requires": { "fsevents": "~2.3.1" }, diff --git a/package.json b/package.json index f33efbf3..59fb4068 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "svgedit", - "version": "6.0.0", + "version": "7.0.0-preview", "description": "Powerful SVG-Editor for your browser ", - "main": "dist/index-umd.js", - "module": "dist/index-es.js", + "main": "dist/index.js", + "module": "dist/index.js", "directories": { "doc": "docs", "example": "examples", @@ -24,12 +24,6 @@ "start:watch": "web-dev-server --node-resolve --watch", "cypress:open": "run-p start cypress:open-no-start", "cypress:open-no-start": "cypress open", - "add-release": "git submodule add --depth=1 -b \"release-v$npm_config_release\" -- https://github.com/SVG-Edit/svgedit.git \"releases/svg-edit-$npm_config_release\"", - "add-new-release": "cross-var npm run add-release --release=$npm_package_version && cross-var git config --file=.gitmodules submodule.releases/latest.branch \"release-v$npm_package_version\"", - "remove-release": "git submodule deinit -f \"releases/svg-edit-$npm_config_release\" && rm -rf .git/modules/releases/svg-edit-$npm_config_release && git rm -f releases/svg-edit-$npm_config_release", - "submodules": "run-s submodules-init submodules-update", - "submodules-init": "echo \"Performing non-recursive init as don't want submodules to have their own releases!\" && git submodule update --init", - "submodules-update": "echo \"Performing non-recursive fetch as don't want submodules to have their own releases!\" && git submodule foreach git fetch && git submodule update --remote && git submodule foreach git merge origin master", "start-allow-origin": "static -p 8001 -H '{\"Access-Control-Allow-Origin\": \"*\"}'", "start-embedded": "run-p start start-allow-origin", "open-docs-no-start": "open-cli http://localhost:8000/docs/jsdoc/", @@ -39,16 +33,11 @@ "build-docs": "run-s -c build-docs-remove build-docs-create", "build-and-open-docs-no-start": "run-s build-docs open-docs-no-start", "build-and-open-docs": "run-s build-docs open-docs", - "open-embedded-no-start": "open-cli http://localhost:8000/editor/embedapi.html", - "open-all-ext-no-start": "open-cli http://localhost:8000/src/editor/svg-editor-es.html?extensions=ext-arrows.js,ext-closepath.js,ext-foreignobject.js,ext-helloworld.js,ext-mathjax.js,ext-php_savefile.js,ext-server_moinsave.js,ext-server_opensave.js,ext-webappfind.js,ext-xdomain-messaging.js", - "open-compiled-no-start": "open-cli http://localhost:8000/src/editor/svg-editor.html", "report": "run-s report-no-mochawesome mochawesome-cli", "report-summary": "run-s report-text-summary mochawesome-cli-dot", "coverage-badge": "coveradge badges/coverage-badge", - "imageoptim": "imageoptim", "compress-images": "imageoptim \"src/editor/extensions/*.png\" \"src/editor/spinbtn/*.png\" \"src/editor/jgraduate/images/*.{png,gif}\" \"src/editor/images/*.png\"", "remark": "remark -q -f .", - "install-offline": "npm install --prefer-offline --no-audit", "prepublishOnly": "run-s license-badges copy prep build-docs", "open-tests": "run-s cypress:instrument cypress:open", "cypress:merge": "mochawesome-merge \"cypress/results/mochaw*.json\" > mochawesome.json && marge mochawesome.json && mbg --file ./mochawesome.json --badge_output badges/tests-badge.svg", @@ -104,20 +93,20 @@ ], "dependencies": { "@babel/polyfill": "7.12.1", - "@web/dev-server-rollup": "0.3.3", + "@web/dev-server-rollup": "0.3.4", "canvg": "3.0.7", "core-js": "3.12.1", - "deparam": "^1.0.5", - "elix": "^15.0.0", - "i18next": "^20.2.2", + "deparam": "1.0.5", + "elix": "15.0.0", + "i18next": "20.2.4", "jspdf": "2.3.1", "pathseg": "1.2.0", "regenerator-runtime": "0.13.7", - "rollup-plugin-polyfill-node": "^0.6.2", + "rollup-plugin-polyfill-node": "0.6.2", "svg2pdf.js": "2.1.0" }, "devDependencies": { - "@babel/core": "7.14.2", + "@babel/core": "7.14.3", "@babel/preset-env": "7.14.2", "@babel/register": "7.13.16", "@babel/runtime-corejs3": "7.14.0", @@ -132,8 +121,8 @@ "@rollup/plugin-node-resolve": "11.2.1", "@rollup/plugin-replace": "2.4.2", "@rollup/plugin-url": "6.0.0", - "@web/dev-server": "^0.1.17", - "axe-core": "4.2.0", + "@web/dev-server": "0.1.17", + "axe-core": "4.2.1", "babel-plugin-transform-object-rest-spread": "7.0.0-beta.3", "copyfiles": "2.4.1", "core-js-bundle": "3.12.1", @@ -154,8 +143,8 @@ "eslint-plugin-cypress": "2.11.3", "eslint-plugin-eslint-comments": "3.2.0", "eslint-plugin-html": "^6.1.2", - "eslint-plugin-import": "2.23.0", - "eslint-plugin-jsdoc": "34.2.2", + "eslint-plugin-import": "2.23.2", + "eslint-plugin-jsdoc": "34.8.2", "eslint-plugin-markdown": "^2.1.0", "eslint-plugin-mocha": "8.1.0", "eslint-plugin-mocha-cleanup": "1.9.1", @@ -168,7 +157,7 @@ "eslint-plugin-unicorn": "32.0.1", "imageoptim-cli": "3.0.2", "jamilih": "0.54.0", - "jsdoc": "3.6.6", + "jsdoc": "3.6.7", "mocha": "8.4.0", "mocha-badge-generator": "0.9.0", "mochawesome": "6.2.2", @@ -185,7 +174,7 @@ "remark-lint-ordered-list-marker-value": "2.0.1", "requirejs": "2.3.6", "rimraf": "3.0.2", - "rollup": "2.47.0", + "rollup": "2.48.0", "rollup-plugin-copy": "3.4.0", "rollup-plugin-filesize": "9.1.1", "rollup-plugin-node-polyfills": "0.2.1", diff --git a/src/editor/ConfigObj.js b/src/editor/ConfigObj.js index 42bbee2f..72bd5636 100644 --- a/src/editor/ConfigObj.js +++ b/src/editor/ConfigObj.js @@ -58,18 +58,28 @@ export default class ConfigObj { * @property {string} [canvasName="default"] Used to namespace storage provided via `ext-storage.js`; you can use this if you wish to have multiple independent instances of SVG Edit on the same domain * @property {boolean} [no_save_warning=false] If `true`, prevents the warning dialog box from appearing when closing/reloading the page. Mostly useful for testing. * @property {string} [imgPath="images/"] The path where the SVG icons are located, with trailing slash. Note that as of version 2.7, this is not configurable by URL for security reasons. - * @property {boolean} [preventAllURLConfig=false] Set to `true` to override the ability for URLs to set non-content configuration (including extension config). Must be set early, i.e., in `svgedit-config-iife.js`; extension loading is too late! - * @property {boolean} [preventURLContentLoading=false] Set to `true` to override the ability for URLs to set URL-based SVG content. Must be set early, i.e., in `svgedit-config-iife.js`; extension loading is too late! - * @property {boolean} [lockExtensions=false] Set to `true` to override the ability for URLs to set their own extensions; disallowed in URL setting. There is no need for this when `preventAllURLConfig` is used. Must be set early, i.e., in `svgedit-config-iife.js`; extension loading is too late! - * @property {boolean} [noDefaultExtensions=false] If set to `true`, prohibits automatic inclusion of default extensions (though "extensions" can still be used to add back any desired default extensions along with any other extensions). This can only be meaningfully used in `svgedit-config-iife.js` or in the URL + * @property {boolean} [preventAllURLConfig=false] Set to `true` to override the ability for URLs to set non-content configuration (including extension config). + * Must be set early, i.e., in `svgedit-config-iife.js`; extension loading is too late! + * @property {boolean} [preventURLContentLoading=false] Set to `true` to override the ability for URLs to set URL-based SVG content. + * Must be set early, i.e., in `svgedit-config-iife.js`; extension loading is too late! + * @property {boolean} [lockExtensions=false] Set to `true` to override the ability for URLs to set their own extensions; disallowed in URL setting. There is no need for this when `preventAllURLConfig` is used. + * Must be set early, i.e., in `svgedit-config-iife.js`; extension loading is too late! + * @property {boolean} [noDefaultExtensions=false] If set to `true`, prohibits automatic inclusion of default extensions (though "extensions" can still be used to add back any desired default extensions along with any other extensions). + * This can only be meaningfully used in `svgedit-config-iife.js` or in the URL * @property {boolean} [noStorageOnLoad=false] Some interaction with `ext-storage.js`; prevent even the loading of previously saved local storage. - * @property {boolean} [forceStorage=false] Some interaction with `ext-storage.js`; strongly discouraged from modification as it bypasses user privacy by preventing them from choosing whether to keep local storage or not (and may be required by law in some regions) + * @property {boolean} [forceStorage=false] Some interaction with `ext-storage.js`; strongly discouraged from modification as it bypasses user privacy by preventing them + * from choosing whether to keep local storage or not (and may be required by law in some regions) * @property {boolean} [emptyStorageOnDecline=false] Used by `ext-storage.js`; empty any prior storage if the user declines to store * @property {boolean} [avoidClientSide=false] DEPRECATED (use `avoidClientSideDownload` instead); Used by `ext-server_opensave.js`; set to `true` if you wish to always save to server and not only as fallback when client support is lacking * @property {boolean} [avoidClientSideDownload=false] Used by `ext-server_opensave.js`; set to `true` if you wish to always save to server and not only as fallback when client support is lacking * @property {boolean} [avoidClientSideOpen=false] Used by `ext-server_opensave.js`; set to `true` if you wish to always open from the server and not only as fallback when FileReader client support is lacking - * @property {string[]} [extensions=[]] Extensions to load on startup. Use an array in `setConfig` and comma separated file names in the URL. Extension names must begin with "ext-". Note that as of version 2.7, paths containing "/", "\", or ":", are disallowed for security reasons. Although previous versions of this list would entirely override the default list, as of version 2.7, the defaults will always be added to this explicit list unless the configuration `noDefaultExtensions` is included. See {@link module:SVGEditor~defaultExtensions}. - * @property {string[]} [allowedOrigins=[]] Used by `ext-xdomain-messaging.js` to indicate which origins are permitted for cross-domain messaging (e.g., between the embedded editor and main editor code). Besides explicit domains, one might add '*' to allow all domains (not recommended for privacy/data integrity of your user's content!), `window.location.origin` for allowing the same origin (should be safe if you trust all apps on your domain), 'null' to allow `file:///` URL usage + * @property {string[]} [extensions=[]] Extensions to load on startup. Use an array in `setConfig` and comma separated file names in the URL.Extension names must begin with "ext-". + * Note that as of version 2.7, paths containing "/", "\", or ":", are disallowed for security reasons. + * Although previous versions of this list would entirely override the default list, as of version 2.7, the defaults will always be added to this explicit list unless the configuration `noDefaultExtensions` is included. + * See {@link module:SVGEditor~defaultExtensions}. + * @property {string[]} [allowedOrigins=[]] Used by `ext-xdomain-messaging.js` to indicate which origins are permitted for cross-domain messaging (e.g., between the embedded editor and main editor code). + * Besides explicit domains, one might add '*' to allow all domains (not recommended for privacy/data integrity of your user's content!), + * `window.location.origin` for allowing the same origin (should be safe if you trust all apps on your domain), 'null' to allow `file:///` URL usage * @property {string} [paramurl] This was available via URL only. Allowed an un-encoded URL within the query string (use "url" or "source" with a data: URI instead) * @property {Float} [canvas_expansion=3] The minimum area visible outside the canvas, as a multiple of the image dimensions. The larger the number, the more one can scroll outside the canvas. * @property {PlainObject} [initFill] Init fill properties @@ -93,10 +103,12 @@ export default class ConfigObj { * @property {string} [initTool="select"] The initially selected tool. Must be either the ID of the button for the tool, or the ID without `tool_` prefix (e.g., "select"). * @property {boolean} [wireframe=false] Start in wireframe mode * @property {boolean} [showlayers=false] Open the layers side-panel by default. - * @property {"new"|"same"} [exportWindowType="new"] Can be "new" or "same" to indicate whether new windows will be generated for each export; the `window.name` of the export window is namespaced based on the `canvasName` (and incremented if "new" is selected as the type). Introduced 2.8. + * @property {"new"|"same"} [exportWindowType="new"] Can be "new" or "same" to indicate whether new windows will be generated for each export; + * the `window.name` of the export window is namespaced based on the `canvasName` (and incremented if "new" is selected as the type). Introduced 2.8. * @property {boolean} [showGrid=false] Set by `ext-grid.js`; determines whether or not to show the grid by default * @property {boolean} [show_outside_canvas=true] Defines whether or not elements outside the canvas should be visible. Set and used in `svgcanvas.js`. - * @property {boolean} [selectNew=true] If true, will replace the selection with the current element and automatically select element objects (when not in "path" mode) after they are created, showing their grips (v2.6). Set and used in `svgcanvas.js` (`mouseUp`). + * @property {boolean} [selectNew=true] If true, will replace the selection with the current element and automatically select element objects (when not in "path" mode) after they are created, showing their grips (v2.6). + * Set and used in `svgcanvas.js` (`mouseUp`). */ this.defaultConfig = { canvasName: 'default', diff --git a/src/editor/EditorStartup.js b/src/editor/EditorStartup.js index 8628f6ba..588173a6 100644 --- a/src/editor/EditorStartup.js +++ b/src/editor/EditorStartup.js @@ -781,7 +781,7 @@ class EditorStartup { this.svgCanvas.call('extensions_added'); } catch (err) { // Todo: Report errors through the UI - console.log(err); + console.error(err); } } diff --git a/src/editor/embedapi-dom.js b/src/editor/embedapi-dom.js index 7f1e05de..d47e3523 100644 --- a/src/editor/embedapi-dom.js +++ b/src/editor/embedapi-dom.js @@ -113,7 +113,7 @@ iframe.addEventListener('load', function () { try { doc = frame.contentDocument || frame.contentWindow.document; } catch (err) { - console.log('Blocked from accessing document', err); + console.error('Blocked from accessing document', err); } if (doc) { // Todo: Provide a way to get this to occur by `postMessage` diff --git a/src/editor/extensions/ext-foreignobject/ext-foreignobject.js b/src/editor/extensions/ext-foreignobject/ext-foreignobject.js index f16a0c1b..50f3d245 100644 --- a/src/editor/extensions/ext-foreignobject/ext-foreignobject.js +++ b/src/editor/extensions/ext-foreignobject/ext-foreignobject.js @@ -89,7 +89,7 @@ export default { svgCanvas.clearSelection(); } catch (e) { // Todo: Surface error to user - console.log(e); + console.error(e); return false; } diff --git a/src/editor/extensions/ext-xdomain-messaging/ext-xdomain-messaging.js b/src/editor/extensions/ext-xdomain-messaging/ext-xdomain-messaging.js index 5559a7f3..b198c399 100644 --- a/src/editor/extensions/ext-xdomain-messaging/ext-xdomain-messaging.js +++ b/src/editor/extensions/ext-xdomain-messaging/ext-xdomain-messaging.js @@ -24,7 +24,7 @@ export default { // to configure const { allowedOrigins } = svgEditor.configObj.curConfig; if (!allowedOrigins.includes('*') && !allowedOrigins.includes(e.origin)) { - console.log(`Origin ${e.origin} not whitelisted for posting to ${window.origin}`); + console.warn(`Origin ${e.origin} not whitelisted for posting to ${window.origin}`); return; } const cbid = data.id; @@ -43,7 +43,7 @@ export default { e.source.postMessage(JSON.stringify(message), '*'); }); } catch (err) { - console.log('Error with xdomain message listener: ' + err); + console.error('Error with xdomain message listener: ' + err); } } }; diff --git a/src/svgcanvas/path-method.js b/src/svgcanvas/path-method.js index 8de3d6ca..bd197529 100644 --- a/src/svgcanvas/path-method.js +++ b/src/svgcanvas/path-method.js @@ -60,7 +60,7 @@ export const insertItemBeforeMethod = function (elem, newseg, index) { list.appendItem(arr[i]); } }; - +/* eslint-disable max-len */ /** * @function module:path.ptObjToArr * @todo See if this should just live in `replacePathSeg` @@ -68,6 +68,7 @@ export const insertItemBeforeMethod = function (elem, newseg, index) { * @param {SVGPathSegMovetoAbs|SVGPathSegLinetoAbs|SVGPathSegCurvetoCubicAbs|SVGPathSegCurvetoQuadraticAbs|SVGPathSegArcAbs|SVGPathSegLinetoHorizontalAbs|SVGPathSegLinetoVerticalAbs|SVGPathSegCurvetoCubicSmoothAbs|SVGPathSegCurvetoQuadraticSmoothAbs} segItem * @returns {ArgumentsArray} */ +/* eslint-enable max-len */ export const ptObjToArrMethod = function (type, segItem) { const segData = pathMethodsContext_.getSegData(); const props = segData[type]; diff --git a/src/svgcanvas/path.js b/src/svgcanvas/path.js index 3ad4db13..11192627 100644 --- a/src/svgcanvas/path.js +++ b/src/svgcanvas/path.js @@ -272,7 +272,7 @@ pathMethodInit( * @returns {void} */ export const insertItemBefore = insertItemBeforeMethod; - +/* eslint-disable max-len */ /** * @function module:path.ptObjToArr * @todo See if this should just live in `replacePathSeg` @@ -280,6 +280,7 @@ export const insertItemBefore = insertItemBeforeMethod; * @param {SVGPathSegMovetoAbs|SVGPathSegLinetoAbs|SVGPathSegCurvetoCubicAbs|SVGPathSegCurvetoQuadraticAbs|SVGPathSegArcAbs|SVGPathSegLinetoHorizontalAbs|SVGPathSegLinetoVerticalAbs|SVGPathSegCurvetoCubicSmoothAbs|SVGPathSegCurvetoQuadraticSmoothAbs} segItem * @returns {ArgumentsArray} */ +/* eslint-enable max-len */ export const ptObjToArr = ptObjToArrMethod; /** diff --git a/src/svgcanvas/select.js b/src/svgcanvas/select.js index 6d1c6355..513c6bee 100644 --- a/src/svgcanvas/select.js +++ b/src/svgcanvas/select.js @@ -451,7 +451,7 @@ export class SelectorManager { sel = this.selectorMap[elem.id]; if (sel && !sel.locked) { // TODO(codedread): Ensure this exists in this module. - console.log('WARNING! selector was released but was already unlocked'); + console.warn('WARNING! selector was released but was already unlocked'); } for (let i = 0; i < N; ++i) { if (this.selectors[i] && this.selectors[i] === sel) { diff --git a/src/svgcanvas/selected-elem.js b/src/svgcanvas/selected-elem.js index 141b2304..93dd9742 100644 --- a/src/svgcanvas/selected-elem.js +++ b/src/svgcanvas/selected-elem.js @@ -822,7 +822,7 @@ export const convertToGroup = function (elem) { try { recalculateDimensions(n); } catch (e) { - console.log(e); + console.error(e); } }); @@ -841,7 +841,7 @@ export const convertToGroup = function (elem) { elementContext_.addCommandToHistory(batchCmd); } else { - console.log('Unexpected element to ungroup:', elem); + console.warn('Unexpected element to ungroup:', elem); } }; diff --git a/src/svgcanvas/selection.js b/src/svgcanvas/selection.js index 31f8170e..febc8c7e 100644 --- a/src/svgcanvas/selection.js +++ b/src/svgcanvas/selection.js @@ -195,6 +195,7 @@ export const getMouseTargetMethod = function (evt) { * @param {string} name * @returns {boolean} */ +/* eslint-disable max-len */ /** * @todo Consider: Should this return an array by default, so extension results aren't overwritten? * @todo Would be easier to document if passing in object with key of action and vars as value; could then define an interface which tied both together @@ -205,6 +206,7 @@ export const getMouseTargetMethod = function (evt) { * @param {module:svgcanvas.ExtensionNameFilter} nameFilter * @returns {GenericArray|module:svgcanvas.ExtensionStatus|false} See {@tutorial ExtensionDocs} on the ExtensionStatus. */ +/* eslint-enable max-len */ export const runExtensionsMethod = function (action, vars, returnArray, nameFilter) { let result = returnArray ? [] : false; for (const [ name, ext ] of Object.entries(selectionContext_.getExtensions())) { diff --git a/src/svgcanvas/svg-exec.js b/src/svgcanvas/svg-exec.js index 2bb9d63e..cf825ccb 100644 --- a/src/svgcanvas/svg-exec.js +++ b/src/svgcanvas/svg-exec.js @@ -482,7 +482,7 @@ export const setSvgString = function (xmlString, preventUndo) { if (!preventUndo) svgContext_.addCommandToHistory(batchCmd); svgContext_.call('changed', [ svgContext_.getSVGContent() ]); } catch (e) { - console.log(e); + console.error(e); return false; } @@ -611,7 +611,7 @@ export const importSvgString = function (xmlString) { svgContext_.addCommandToHistory(batchCmd); svgContext_.call('changed', [ svgContext_.getSVGContent() ]); } catch (e) { - console.log(e); + console.error(e); return null; } diff --git a/src/svgcanvas/svgcanvas.js b/src/svgcanvas/svgcanvas.js index 2ba58bd2..a7400adf 100644 --- a/src/svgcanvas/svgcanvas.js +++ b/src/svgcanvas/svgcanvas.js @@ -849,7 +849,8 @@ class SvgCanvas { this.runExtension = function (name, action, vars) { return this.runExtensions(action, vars, false, (n) => n === name); }; - /** +/* eslint-disable max-len */ +/** * @todo Consider: Should this return an array by default, so extension results aren't overwritten? * @todo Would be easier to document if passing in object with key of action and vars as value; could then define an interface which tied both together * @function module:svgcanvas.SvgCanvas#runExtensions @@ -859,6 +860,8 @@ class SvgCanvas { * @param {module:svgcanvas.ExtensionNameFilter} nameFilter * @returns {GenericArray|module:svgcanvas.ExtensionStatus|false} See {@tutorial ExtensionDocs} on the ExtensionStatus. */ +/* eslint-enable max-len */ + this.runExtensions = runExtensionsMethod; /** @@ -1040,12 +1043,14 @@ class SvgCanvas { * @event module:svgcanvas.SvgCanvas#event:exportedPDF * @type {module:svgcanvas.PDFExportedResults} */ - /** +/* eslint-disable max-len */ +/** * Creating a cover-all class until {@link https://github.com/jsdoc3/jsdoc/issues/1545} may be supported. * `undefined` may be returned by {@link module:svgcanvas.SvgCanvas#event:extension_added} if the extension's `init` returns `undefined` It is also the type for the following events "zoomDone", "unsetnonce", "cleared", and "extensions_added". * @event module:svgcanvas.SvgCanvas#event:GenericCanvasEvent * @type {module:svgcanvas.SvgCanvas#event:selected|module:svgcanvas.SvgCanvas#event:changed|module:svgcanvas.SvgCanvas#event:contextset|module:svgcanvas.SvgCanvas#event:pointsAdded|module:svgcanvas.SvgCanvas#event:extension_added|module:svgcanvas.SvgCanvas#event:extensions_added|module:svgcanvas.SvgCanvas#event:message|module:svgcanvas.SvgCanvas#event:transition|module:svgcanvas.SvgCanvas#event:zoomed|module:svgcanvas.SvgCanvas#event:updateCanvas|module:svgcanvas.SvgCanvas#event:saved|module:svgcanvas.SvgCanvas#event:exported|module:svgcanvas.SvgCanvas#event:exportedPDF|module:svgcanvas.SvgCanvas#event:setnonce|module:svgcanvas.SvgCanvas#event:unsetnonce|void} */ +/* eslint-enable max-len */ /** * The promise return, if present, resolves to `undefined` @@ -1060,7 +1065,7 @@ class SvgCanvas { * @listens module:svgcanvas.SvgCanvas#event:GenericCanvasEvent * @returns {module:svgcanvas.EventHandlerReturn} */ - +/* eslint-disable max-len */ /** * Attaches a callback function to an event. * @function module:svgcanvas.SvgCanvas#bind @@ -1068,6 +1073,7 @@ class SvgCanvas { * @param {module:svgcanvas.EventHandler} f - The callback function to bind to the event * @returns {module:svgcanvas.EventHandler} The previous event */ +/* eslint-enable max-len */ canvas.bind = function (ev, f) { const old = events[ev]; events[ev] = f; @@ -1109,7 +1115,7 @@ class SvgCanvas { * @returns {void} */ const logMatrix = function (m) { - console.log([ m.a, m.b, m.c, m.d, m.e, m.f ]); + console.info([ m.a, m.b, m.c, m.d, m.e, m.f ]); }; // Root Current Transformation Matrix in user units diff --git a/src/svgcanvas/utilities.js b/src/svgcanvas/utilities.js index d2afe467..1a7c54e5 100644 --- a/src/svgcanvas/utilities.js +++ b/src/svgcanvas/utilities.js @@ -40,7 +40,8 @@ let svgroot_ = null; * Object with the following keys/values. * @typedef {PlainObject} module:utilities.SVGElementJSON * @property {string} element - Tag name of the SVG element to create -* @property {PlainObject} attr - Has key-value attributes to assign to the new element. An `id` should be set so that {@link module:utilities.EditorContext#addSVGElementFromJson} can later re-identify the element for modification or replacement. +* @property {PlainObject} attr - Has key-value attributes to assign to the new element. +* An `id` should be set so that {@link module:utilities.EditorContext#addSVGElementFromJson} can later re-identify the element for modification or replacement. * @property {boolean} [curStyles=false] - Indicates whether current style attributes should be applied first * @property {module:utilities.SVGElementJSON[]} [children] - Data objects to be added recursively as children * @property {string} [namespace="http://www.w3.org/2000/svg"] - Indicate a (non-SVG) namespace diff --git a/tools/mochawesome-cli.js b/tools/mochawesome-cli.js index 6ed3b1fa..56127f39 100644 --- a/tools/mochawesome-cli.js +++ b/tools/mochawesome-cli.js @@ -41,7 +41,7 @@ const runner = new Runner( ); runner.stats = stats; -console.log('Mocha results:'); +console.info('Mocha results:'); // eslint-disable-next-line no-new -- Has side effects new MochaReporter(runner); @@ -109,6 +109,6 @@ const lastRan = new Intl.DateTimeFormat('en-US', { hour: 'numeric', minute: 'numeric' }).format(endDate); -console.log( +console.info( `Tests finished: ${lastRan}` );